Improve SST25 status register routines:
- Using a 4-bit index into an array with 8 elements leads to
out-of-bounds accesses. That bug was introduced by a self-acked patch
from someone. Use proper bit masking to fix this.
- Factor out common SST25 status register printing.
- Use the common SST25 status register printing for SST25VF080B.

Signed-off-by: Carl-Daniel Hailfinger <[email protected]>

Index: flashrom-SST25VF080B/spi.c
===================================================================
--- flashrom-SST25VF080B/spi.c  (Revision 464)
+++ flashrom-SST25VF080B/spi.c  (Arbeitskopie)
@@ -275,6 +275,15 @@
        spi_prettyprint_status_register_common(status);
 }
 
+void spi_prettyprint_status_register_sst25(uint8_t status)
+{
+       printf_debug("Chip status register: Block Protect Write Disable "
+                    "(BPL) is %sset\n", (status & (1 << 7)) ? "" : "not ");
+       printf_debug("Chip status register: Auto Address Increment Programming "
+                    "(AAI) is %sset\n", (status & (1 << 6)) ? "" : "not ");
+       spi_prettyprint_status_register_common(status);
+}
+
 /* Prettyprint the status register. Works for
  * SST 25VF016
  */
@@ -289,11 +298,7 @@
                "100000H-1FFFFFH",
                "all", "all"
        };
-       printf_debug("Chip status register: Block Protect Write Disable "
-                    "(BPL) is %sset\n", (status & (1 << 7)) ? "" : "not ");
-       printf_debug("Chip status register: Auto Address Increment Programming "
-                    "(AAI) is %sset\n", (status & (1 << 6)) ? "" : "not ");
-       spi_prettyprint_status_register_common(status);
+       spi_prettyprint_status_register_sst25(status);
        printf_debug("Resulting block protection : %s\n",
                     bpt[(status & 0x1c) >> 2]);
 }
@@ -307,13 +312,9 @@
                "0x40000-0x7ffff",
                "all blocks", "all blocks", "all blocks", "all blocks"
        };
-       printf_debug("Chip status register: Block Protect Write Disable "
-               "(BPL) is %sset\n", (status & (1 << 7)) ? "" : "not ");
-       printf_debug("Chip status register: Auto Address Increment Programming "
-               "(AAI) is %sset\n", (status & (1 << 6)) ? "" : "not ");
-       spi_prettyprint_status_register_common(status);
+       spi_prettyprint_status_register_sst25(status);
        printf_debug("Resulting block protection : %s\n",
-               bpt[(status & 0x3c) >> 2]);
+               bpt[(status & 0x1c) >> 2]);
 }
 
 void spi_prettyprint_status_register(struct flashchip *flash)
@@ -341,6 +342,9 @@
                case 0x258d:
                        spi_prettyprint_status_register_sst25vf040b(status);
                        break;
+               case 0x258e:
+                       spi_prettyprint_status_register_sst25(status);
+                       break;
                }
                break;
        }


-- 
http://www.hailfinger.org/

Index: flashrom-SST25VF080B/spi.c
===================================================================
--- flashrom-SST25VF080B/spi.c  (Revision 464)
+++ flashrom-SST25VF080B/spi.c  (Arbeitskopie)
@@ -275,6 +275,15 @@
        spi_prettyprint_status_register_common(status);
 }
 
+void spi_prettyprint_status_register_sst25(uint8_t status)
+{
+       printf_debug("Chip status register: Block Protect Write Disable "
+                    "(BPL) is %sset\n", (status & (1 << 7)) ? "" : "not ");
+       printf_debug("Chip status register: Auto Address Increment Programming "
+                    "(AAI) is %sset\n", (status & (1 << 6)) ? "" : "not ");
+       spi_prettyprint_status_register_common(status);
+}
+
 /* Prettyprint the status register. Works for
  * SST 25VF016
  */
@@ -289,11 +298,7 @@
                "100000H-1FFFFFH",
                "all", "all"
        };
-       printf_debug("Chip status register: Block Protect Write Disable "
-                    "(BPL) is %sset\n", (status & (1 << 7)) ? "" : "not ");
-       printf_debug("Chip status register: Auto Address Increment Programming "
-                    "(AAI) is %sset\n", (status & (1 << 6)) ? "" : "not ");
-       spi_prettyprint_status_register_common(status);
+       spi_prettyprint_status_register_sst25(status);
        printf_debug("Resulting block protection : %s\n",
                     bpt[(status & 0x1c) >> 2]);
 }
@@ -307,13 +312,9 @@
                "0x40000-0x7ffff",
                "all blocks", "all blocks", "all blocks", "all blocks"
        };
-       printf_debug("Chip status register: Block Protect Write Disable "
-               "(BPL) is %sset\n", (status & (1 << 7)) ? "" : "not ");
-       printf_debug("Chip status register: Auto Address Increment Programming "
-               "(AAI) is %sset\n", (status & (1 << 6)) ? "" : "not ");
-       spi_prettyprint_status_register_common(status);
+       spi_prettyprint_status_register_sst25(status);
        printf_debug("Resulting block protection : %s\n",
-               bpt[(status & 0x3c) >> 2]);
+               bpt[(status & 0x1c) >> 2]);
 }
 
 void spi_prettyprint_status_register(struct flashchip *flash)
@@ -341,6 +342,9 @@
                case 0x258d:
                        spi_prettyprint_status_register_sst25vf040b(status);
                        break;
+               case 0x258e:
+                       spi_prettyprint_status_register_sst25(status);
+                       break;
                }
                break;
        }
-- 
coreboot mailing list: [email protected]
http://www.coreboot.org/mailman/listinfo/coreboot

Reply via email to