All pastes #24113 Raw Edit

Anonymous

public text v1 · immutable
#24113 ·published 2005-09-28 13:22 UTC
rendered paste body
# 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 <asm/hardware.h>
+#include <asm/mach-types.h>

 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
+                * <linux/mtd/cfi.h> 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;
        }
 }
-