# Work round problems with the flash being unreadable on boot. # --- linux-2.6.13/.pc/25-nslu2-arch-reset.patch/include/asm-arm/arch-ixp4xx/system.h 2005-08-28 16:41:01.000000000 -0700 +++ linux-2.6.13/include/asm-arm/arch-ixp4xx/system.h 2005-09-25 23:34:14.762872391 -0700 @@ -10,6 +10,7 @@ */ #include +#include static inline void arch_idle(void) { @@ -22,6 +23,21 @@ static inline void arch_reset(char mode) { + /* On NSLU2 machines the flash is sometimes left in a non-read + * mode, such that attempting a read will cause problems - such as + * a hang. This will prevent both hard and soft reboot since the + * first thing done is to read the first instruction from the flash! + * Therefore issue a flash reset command here. + */ + if ( machine_is_nslu2()) { + /* Use the physical address here and write the reset command + * to the command address (not technically necessary). See + * for how to calculate this for other + * systems. The NSLU2 has one bank of 16 bit flash. + */ + *(__u16*)(NSLU2_FLASH_BASE+0xAA/*command*/) = 0x00ff/*reset*/; + } + if ( 1 && mode == 's') { /* Jump into ROM at address 0 */ cpu_reset(0); @@ -39,4 +55,3 @@ *IXP4XX_OSWE = IXP4XX_WDT_RESET_ENABLE | IXP4XX_WDT_COUNT_ENABLE; } } -