Commit f6c47702 authored by Jakub Sitnicki's avatar Jakub Sitnicki Committed by Kalle Valo

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: default avatarJakub Sitnicki <jsitnicki@gmail.com>
Signed-off-by: default avatarJes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
parent d940c247
...@@ -2417,6 +2417,8 @@ static int rtl8xxxu_read_efuse(struct rtl8xxxu_priv *priv) ...@@ -2417,6 +2417,8 @@ static int rtl8xxxu_read_efuse(struct rtl8xxxu_priv *priv)
efuse_addr = 0; efuse_addr = 0;
while (efuse_addr < EFUSE_REAL_CONTENT_LEN_8723A) { while (efuse_addr < EFUSE_REAL_CONTENT_LEN_8723A) {
u16 map_addr;
ret = rtl8xxxu_read_efuse8(priv, efuse_addr++, &header); ret = rtl8xxxu_read_efuse8(priv, efuse_addr++, &header);
if (ret || header == 0xff) if (ret || header == 0xff)
goto exit; goto exit;
...@@ -2439,45 +2441,36 @@ static int rtl8xxxu_read_efuse(struct rtl8xxxu_priv *priv) ...@@ -2439,45 +2441,36 @@ static int rtl8xxxu_read_efuse(struct rtl8xxxu_priv *priv)
word_mask = header & 0x0f; word_mask = header & 0x0f;
} }
if (offset < EFUSE_MAX_SECTION_8723A) { /* Get word enable value from PG header */
u16 map_addr;
/* Get word enable value from PG header */
/* We have 8 bits to indicate validity */ /* We have 8 bits to indicate validity */
map_addr = offset * 8; map_addr = offset * 8;
if (map_addr >= EFUSE_MAP_LEN) { if (map_addr >= EFUSE_MAP_LEN) {
dev_warn(dev, "%s: Illegal map_addr (%04x), " dev_warn(dev, "%s: Illegal map_addr (%04x), "
"efuse corrupt!\n", "efuse corrupt!\n",
__func__, map_addr); __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);
ret = -EINVAL; ret = -EINVAL;
goto exit; 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: exit:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment