vserver 1.9.5.x5
[linux-2.6.git] / include / asm-m68knommu / m5249sim.h
index 2ca3136..9344f52 100644 (file)
 #define        mcf_getipr()            \
        *((volatile unsigned long *) (MCF_MBAR + MCFSIM_IPR))
 
+/****************************************************************************/
+
+#ifdef __ASSEMBLER__
+
+/*
+ *     The M5249C3 board needs a little help getting all its SIM devices
+ *     initialized at kernel start time. dBUG doesn't set much up, so
+ *     we need to do it manually.
+ */
+.macro m5249c3_setup
+       /*
+        *      Set MBAR1 and MBAR2, just incase they are not set.
+        */
+       movel   #0x10000001,%a0
+       movec   %a0,%MBAR                       /* map MBAR region */
+       subql   #1,%a0                          /* get MBAR address in a0 */
+
+       movel   #0x80000001,%a1
+       movec   %a1,#3086                       /* map MBAR2 region */
+       subql   #1,%a1                          /* get MBAR2 address in a1 */
+
+       /*
+        *      Move secondary interrupts to base at 128.
+        */
+       moveb   #0x80,%d0
+       moveb   %d0,0x16b(%a1)                  /* interrupt base register */
+
+       /*
+        *      Work around broken CSMR0/DRAM vector problem.
+        */
+       movel   #0x001F0021,%d0                 /* disable C/I bit */
+       movel   %d0,0x84(%a0)                   /* set CSMR0 */
+
+       /*
+        *      Disable the PLL firstly. (Who knows what state it is
+        *      in here!).
+        */
+       movel   0x180(%a1),%d0                  /* get current PLL value */
+       andl    #0xfffffffe,%d0                 /* PLL bypass first */
+       movel   %d0,0x180(%a1)                  /* set PLL register */
+       nop
+
+#ifdef CONFIG_CLOCK_140MHz
+       /*
+        *      Set initial clock frequency. This assumes M5249C3 board
+        *      is fitted with 11.2896MHz crystal. It will program the
+        *      PLL for 140MHz. Lets go fast :-)
+        */
+       movel   #0x125a40f0,%d0                 /* set for 140MHz */
+       movel   %d0,0x180(%a1)                  /* set PLL register */
+       orl     #0x1,%d0
+       movel   %d0,0x180(%a1)                  /* set PLL register */
+#endif
+
+       /*
+        *      Setup CS1 for ethernet controller.
+        *      (Setup as per M5249C3 doco).
+        */
+       movel  #0xe0000000,%d0                  /* CS1 mapped at 0xe0000000 */
+       movel  %d0,0x8c(%a0)
+       movel  #0x001f0021,%d0                  /* CS1 size of 1Mb */
+       movel  %d0,0x90(%a0)
+       movew  #0x0080,%d0                      /* CS1 = 16bit port, AA */
+       movew  %d0,0x96(%a0)
+
+       /*
+        *      Setup CS2 for IDE interface.
+        */
+       movel   #0x50000000,%d0                 /* CS2 mapped at 0x50000000 */
+       movel   %d0,0x98(%a0)
+       movel   #0x001f0001,%d0                 /* CS2 size of 1MB */
+       movel   %d0,0x9c(%a0)
+       movew   #0x0080,%d0                     /* CS2 = 16bit, TA */
+       movew   %d0,0xa2(%a0)
+
+       movel   #0x00107000,%d0                 /* IDEconfig1 */
+       movel   %d0,0x18c(%a1)
+       movel   #0x000c0400,%d0                 /* IDEconfig2 */
+       movel   %d0,0x190(%a1)
+
+       movel   #0x00080000,%d0                 /* GPIO19, IDE reset bit */
+       orl     %d0,0xc(%a1)                    /* function GPIO19 */
+       orl     %d0,0x8(%a1)                    /* enable GPIO19 as output */
+        orl    %d0,0x4(%a1)                    /* de-assert IDE reset */
+.endm
+
+#define        PLATFORM_SETUP  m5249c3_setup
+
+#endif /* __ASSEMBLER__ */
+
 /****************************************************************************/
 #endif /* m5249sim_h */