mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-23 01:45:23 +07:00
rtl8xxxu: Don't check for illegal offset when reading from efuse
It is enough to check for either illegal offset or illegal map address because map address is a value derived from an offset: map_addr = offset * 8 EFUSE_MAP_LEN = EFUSE_MAX_SECTION_8723A * 8 Leave just the check for an illegal map address because its upper bound (EFUSE_MAP_LEN) is used also in a couple other places. Signed-off-by: Jakub Sitnicki <jsitnicki@gmail.com> Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
This commit is contained in:
parent
d940c247ad
commit
f6c47702ed
@ -2417,6 +2417,8 @@ static int rtl8xxxu_read_efuse(struct rtl8xxxu_priv *priv)
|
||||
|
||||
efuse_addr = 0;
|
||||
while (efuse_addr < EFUSE_REAL_CONTENT_LEN_8723A) {
|
||||
u16 map_addr;
|
||||
|
||||
ret = rtl8xxxu_read_efuse8(priv, efuse_addr++, &header);
|
||||
if (ret || header == 0xff)
|
||||
goto exit;
|
||||
@ -2439,45 +2441,36 @@ static int rtl8xxxu_read_efuse(struct rtl8xxxu_priv *priv)
|
||||
word_mask = header & 0x0f;
|
||||
}
|
||||
|
||||
if (offset < EFUSE_MAX_SECTION_8723A) {
|
||||
u16 map_addr;
|
||||
/* Get word enable value from PG header */
|
||||
/* Get word enable value from PG header */
|
||||
|
||||
/* We have 8 bits to indicate validity */
|
||||
map_addr = offset * 8;
|
||||
if (map_addr >= EFUSE_MAP_LEN) {
|
||||
dev_warn(dev, "%s: Illegal map_addr (%04x), "
|
||||
"efuse corrupt!\n",
|
||||
__func__, map_addr);
|
||||
ret = -EINVAL;
|
||||
goto exit;
|
||||
}
|
||||
for (i = 0; i < EFUSE_MAX_WORD_UNIT; i++) {
|
||||
/* Check word enable condition in the section */
|
||||
if (!(word_mask & BIT(i))) {
|
||||
ret = rtl8xxxu_read_efuse8(priv,
|
||||
efuse_addr++,
|
||||
&val8);
|
||||
if (ret)
|
||||
goto exit;
|
||||
priv->efuse_wifi.raw[map_addr++] = val8;
|
||||
|
||||
ret = rtl8xxxu_read_efuse8(priv,
|
||||
efuse_addr++,
|
||||
&val8);
|
||||
if (ret)
|
||||
goto exit;
|
||||
priv->efuse_wifi.raw[map_addr++] = val8;
|
||||
} else
|
||||
map_addr += 2;
|
||||
}
|
||||
} else {
|
||||
dev_warn(dev,
|
||||
"%s: Illegal offset (%04x), efuse corrupt!\n",
|
||||
__func__, offset);
|
||||
/* We have 8 bits to indicate validity */
|
||||
map_addr = offset * 8;
|
||||
if (map_addr >= EFUSE_MAP_LEN) {
|
||||
dev_warn(dev, "%s: Illegal map_addr (%04x), "
|
||||
"efuse corrupt!\n",
|
||||
__func__, map_addr);
|
||||
ret = -EINVAL;
|
||||
goto exit;
|
||||
}
|
||||
for (i = 0; i < EFUSE_MAX_WORD_UNIT; i++) {
|
||||
/* Check word enable condition in the section */
|
||||
if (!(word_mask & BIT(i))) {
|
||||
ret = rtl8xxxu_read_efuse8(priv,
|
||||
efuse_addr++,
|
||||
&val8);
|
||||
if (ret)
|
||||
goto exit;
|
||||
priv->efuse_wifi.raw[map_addr++] = val8;
|
||||
|
||||
ret = rtl8xxxu_read_efuse8(priv,
|
||||
efuse_addr++,
|
||||
&val8);
|
||||
if (ret)
|
||||
goto exit;
|
||||
priv->efuse_wifi.raw[map_addr++] = val8;
|
||||
} else
|
||||
map_addr += 2;
|
||||
}
|
||||
}
|
||||
|
||||
exit:
|
||||
|
Loading…
Reference in New Issue
Block a user