rtl8xxxu: Don't check for illegal offset when reading from efuse
authorJakub Sitnicki <jsitnicki@gmail.com>
Mon, 29 Feb 2016 22:04:23 +0000 (17:04 -0500)
committerKalle Valo <kvalo@codeaurora.org>
Thu, 10 Mar 2016 13:28:58 +0000 (15:28 +0200)
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>
drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c

index be95ef3..c279d6d 100644 (file)
@@ -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: