|
@@ -203,113 +203,6 @@ static inline unsigned long __xchg(unsigned long x, volatile void * ptr, int siz
|
|
#include <asm-generic/cmpxchg.h>
|
|
#include <asm-generic/cmpxchg.h>
|
|
#endif
|
|
#endif
|
|
|
|
|
|
-#if defined( CONFIG_M68328 ) || defined( CONFIG_M68EZ328 ) || \
|
|
|
|
- defined (CONFIG_M68360) || defined( CONFIG_M68VZ328 )
|
|
|
|
-#define HARD_RESET_NOW() ({ \
|
|
|
|
- local_irq_disable(); \
|
|
|
|
- asm(" \
|
|
|
|
- moveal #0x10c00000, %a0; \
|
|
|
|
- moveb #0, 0xFFFFF300; \
|
|
|
|
- moveal 0(%a0), %sp; \
|
|
|
|
- moveal 4(%a0), %a0; \
|
|
|
|
- jmp (%a0); \
|
|
|
|
- "); \
|
|
|
|
-})
|
|
|
|
-#endif
|
|
|
|
-
|
|
|
|
-#ifdef CONFIG_COLDFIRE
|
|
|
|
-#if defined(CONFIG_M5272) && defined(CONFIG_NETtel)
|
|
|
|
-/*
|
|
|
|
- * Need to account for broken early mask of 5272 silicon. So don't
|
|
|
|
- * jump through the original start address. Jump strait into the
|
|
|
|
- * known start of the FLASH code.
|
|
|
|
- */
|
|
|
|
-#define HARD_RESET_NOW() ({ \
|
|
|
|
- asm(" \
|
|
|
|
- movew #0x2700, %sr; \
|
|
|
|
- jmp 0xf0000400; \
|
|
|
|
- "); \
|
|
|
|
-})
|
|
|
|
-#elif defined(CONFIG_NETtel) || \
|
|
|
|
- defined(CONFIG_SECUREEDGEMP3) || defined(CONFIG_CLEOPATRA)
|
|
|
|
-#define HARD_RESET_NOW() ({ \
|
|
|
|
- asm(" \
|
|
|
|
- movew #0x2700, %sr; \
|
|
|
|
- moveal #0x10000044, %a0; \
|
|
|
|
- movel #0xffffffff, (%a0); \
|
|
|
|
- moveal #0x10000001, %a0; \
|
|
|
|
- moveb #0x00, (%a0); \
|
|
|
|
- moveal #0xf0000004, %a0; \
|
|
|
|
- moveal (%a0), %a0; \
|
|
|
|
- jmp (%a0); \
|
|
|
|
- "); \
|
|
|
|
-})
|
|
|
|
-#elif defined(CONFIG_M5272)
|
|
|
|
-/*
|
|
|
|
- * Retrieve the boot address in flash using CSBR0 and CSOR0
|
|
|
|
- * find the reset vector at flash_address + 4 (e.g. 0x400)
|
|
|
|
- * remap it in the flash's current location (e.g. 0xf0000400)
|
|
|
|
- * and jump there.
|
|
|
|
- */
|
|
|
|
-#define HARD_RESET_NOW() ({ \
|
|
|
|
- asm(" \
|
|
|
|
- movew #0x2700, %%sr; \
|
|
|
|
- move.l %0+0x40,%%d0; \
|
|
|
|
- and.l %0+0x44,%%d0; \
|
|
|
|
- andi.l #0xfffff000,%%d0; \
|
|
|
|
- mov.l %%d0,%%a0; \
|
|
|
|
- or.l 4(%%a0),%%d0; \
|
|
|
|
- mov.l %%d0,%%a0; \
|
|
|
|
- jmp (%%a0);" \
|
|
|
|
- : /* No output */ \
|
|
|
|
- : "o" (*(char *)MCF_MBAR) ); \
|
|
|
|
-})
|
|
|
|
-#elif defined(CONFIG_M528x)
|
|
|
|
-/*
|
|
|
|
- * The MCF528x has a bit (SOFTRST) in memory (Reset Control Register RCR),
|
|
|
|
- * that when set, resets the MCF528x.
|
|
|
|
- */
|
|
|
|
-#define HARD_RESET_NOW() \
|
|
|
|
-({ \
|
|
|
|
- unsigned char volatile *reset; \
|
|
|
|
- asm("move.w #0x2700, %sr"); \
|
|
|
|
- reset = ((volatile unsigned char *)(MCF_IPSBAR + 0x110000)); \
|
|
|
|
- while(1) \
|
|
|
|
- *reset |= (0x01 << 7);\
|
|
|
|
-})
|
|
|
|
-#elif defined(CONFIG_M523x)
|
|
|
|
-#define HARD_RESET_NOW() ({ \
|
|
|
|
- asm(" \
|
|
|
|
- movew #0x2700, %sr; \
|
|
|
|
- movel #0x01000000, %sp; \
|
|
|
|
- moveal #0x40110000, %a0; \
|
|
|
|
- moveb #0x80, (%a0); \
|
|
|
|
- "); \
|
|
|
|
-})
|
|
|
|
-#elif defined(CONFIG_M520x)
|
|
|
|
- /*
|
|
|
|
- * The MCF5208 has a bit (SOFTRST) in memory (Reset Control Register
|
|
|
|
- * RCR), that when set, resets the MCF5208.
|
|
|
|
- */
|
|
|
|
-#define HARD_RESET_NOW() \
|
|
|
|
-({ \
|
|
|
|
- unsigned char volatile *reset; \
|
|
|
|
- asm("move.w #0x2700, %sr"); \
|
|
|
|
- reset = ((volatile unsigned char *)(MCF_IPSBAR + 0xA0000)); \
|
|
|
|
- while(1) \
|
|
|
|
- *reset |= 0x80; \
|
|
|
|
-})
|
|
|
|
-#else
|
|
|
|
-#define HARD_RESET_NOW() ({ \
|
|
|
|
- asm(" \
|
|
|
|
- movew #0x2700, %sr; \
|
|
|
|
- moveal #0x4, %a0; \
|
|
|
|
- moveal (%a0), %a0; \
|
|
|
|
- jmp (%a0); \
|
|
|
|
- "); \
|
|
|
|
-})
|
|
|
|
-#endif
|
|
|
|
-#endif
|
|
|
|
#define arch_align_stack(x) (x)
|
|
#define arch_align_stack(x) (x)
|
|
|
|
|
|
|
|
|