Changeset 11586
- Timestamp:
- 02/11/09 11:40:24 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/linux/brcm/linux.v24_2/drivers/mtd/maps/bcm947xx-flash.c
r11376 r11586 380 380 vfree(block); 381 381 printk(KERN_EMERG "Done\n"); 382 383 /* Write fake Netgear checksum to the flash */ 384 uint boardnum = bcm_strtoul( nvram_safe_get( "boardnum" ), NULL, 0 ); 385 if ( (boardnum == 83258 || boardnum == 01) //or 001 or 0x01 386 && (nvram_match("boardtype", "0x048e") || nvram_match("boardtype", "0x48E")) 387 && (nvram_match("boardrev", "0x11") || nvram_match("boardrev", "0x10")) 388 && (nvram_match("boardflags", "0x750") || nvram_match("boardflags", "0x0750")) 389 && nvram_match ("sdram_init", "0x000A") ) { 390 #define WGR614_CHECKSUM_BLOCK_START 0x003A0000 391 #define WGR614_CHECKSUM_OFF 0x003AFFF8 392 #define WGR614_FAKE_LEN 0x00000004 //we fake checksum only over 4 bytes (HDR0) 393 #define WGR614_FAKE_CHK 0x02C0010E 394 /* 395 * Read into buffer 396 */ 397 block = vmalloc(mtd->erasesize); 398 if (MTD_READ(mtd, WGR614_CHECKSUM_BLOCK_START, mtd->erasesize, &len, block) || 399 len != mtd->erasesize) { 400 printk(KERN_EMERG "Error accessing the WGR614 checksum eraseblock\n"); 401 vfree(block); 402 } 403 else { 404 char imageInfo[8]; 405 u32 fake_len = le32_to_cpu(WGR614_FAKE_LEN); 406 u32 fake_chk = le32_to_cpu(WGR614_FAKE_CHK); 407 memcpy(&imageInfo[0], (char *)&fake_len, 4); 408 memcpy(&imageInfo[4], (char *)&fake_chk, 4); 409 char *tmp; 410 tmp = block + ((WGR614_CHECKSUM_OFF - WGR614_CHECKSUM_BLOCK_START) % mtd->erasesize); 411 memcpy( tmp, imageInfo, sizeof( imageInfo ) ); 412 if (mtd->unlock) 413 mtd->unlock(mtd, WGR614_CHECKSUM_BLOCK_START, mtd->erasesize); 414 erase_write(mtd, WGR614_CHECKSUM_BLOCK_START, mtd->erasesize, block); 415 if (mtd->sync) 416 mtd->sync(mtd); 417 vfree(block); 418 printk(KERN_EMERG "Done fixing WGR614 checksum\n"); 419 } 420 } 421 422 382 423 } 383 424
Note: See TracChangeset
for help on using the changeset viewer.
