ssb: Allow reading of 440-byte SPROM that is not rev 4
PATCH 1/1 ssb: Allow reading of 440-byte SPROM that is not rev 4
From: [email protected]
The current code checks for the special signature that signifies a revision 4 SPROM. Now that a rev. 8 SPROM with a 440-byte length has been found that may not have any special code, this check could be relaxed. With this patch, if the CRC is incorrect for a 256-byte SPROM, the code will immediately check for a 440-byte SPROM. If there is still a CRC error, the size is set to 440 bytes, which allows dumping of most of any 512-byte SPROM if one is encountered.
Signed-off-by Larry Finger <[email protected]>
Signed-off-by Michael Buesch <[email protected]>
---
John, please apply this to 2.6.27
drivers/ssb/pci.c +9 -11
@@ -505,17 +505,15 @@ static int ssb_pci_sprom_get(struct ssb_sprom_do_read (bus, buf); err =sprom_check_crc (buf, bus->sprom_size);if (err) { -/* check for rev 4 sprom - has special signature */ -if (buf[32 ] ==0x5372 ) { -kfree (buf); - buf =kcalloc (SSB_SPROMSIZE_WORDS_R4 ,sizeof (u16), -GFP_KERNEL ); -if (!buf) - goto out; - bus->sprom_size =SSB_SPROMSIZE_WORDS_R4 ; -sprom_do_read (bus, buf); - err =sprom_check_crc (buf, bus->sprom_size); - } +/* try for a 440 byte SPROM - revision 4 and higher */ +kfree (buf); + buf =kcalloc (SSB_SPROMSIZE_WORDS_R4 ,sizeof (u16), +GFP_KERNEL ); +if (!buf) + goto out; + bus->sprom_size =SSB_SPROMSIZE_WORDS_R4 ; +sprom_do_read (bus, buf); + err =sprom_check_crc (buf, bus->sprom_size);if (err) ssb_printk(KERN_WARNING PFX "WARNING: Invalid"" SPROM CRC (corrupt SPROM)\n" );
Signature · 1 line
Greetings Michael.