Ignore:
Timestamp:
Apr 16, 1997, 5:45:35 PM (24 years ago)
Author:
Joel Sherrill <joel.sherrill@…>
Branches:
4.10, 4.11, 4.8, 4.9, 5, master
Children:
f9f375e
Parents:
34217ccf
Message:

Update from Eric Norum.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • c/src/lib/libbsp/m68k/gen68360/startup/init68360.c

    r34217ccf rf8f370b6  
    3333 * Initialize MC68360
    3434 */
    35 
    3635void _Init68360 (void)
    3736{
    3837        int i;
    39         unsigned long l;
    4038        m68k_isr_entry *vbr;
    4139        extern void _CopyDataClearBSSAndStart (void);
     40
     41#if (defined (m68040) || defined (m68lc040) || defined (m68ec040))
     42        /*
     43         *******************************************
     44         * Motorola 68040 and companion-mode 68360 *
     45         *******************************************
     46         */
    4247
    4348        /*
     
    4954         *      else if (Double bus fault, watchdog or soft reset)
    5055         *              Skip to step 12
    51          *      else (must be a CPU32+ reset command)
     56         *      else (must be a reset command)
    5257         *              Skip to step 14
    5358         */
     
    5863         *      Change if you're not using an external 25 MHz oscillator.
    5964         */
    60         m360.clkocr = 0x8F;     /* No more writes, no clock outputs */
     65        m360.clkocr = 0x83;     /* No more writes, full-power CLKO2 */
    6166        m360.pllcr = 0xD000;    /* PLL, no writes, no prescale,
    6267                                   no LPSTOP slowdown, PLL X1 */
     
    6873         *      Watchdog causes system reset
    6974         *      Slowest watchdog timeout
    70          *      Enable double bus fault monitor
     75         *      Disable double bus fault monitor
    7176         *      Enable bus monitor external
    72          *      128 clocks for external timeout
    73          */
    74         m360.sypcr = 0x7F;
     77         *      1024 clocks for external timeout
     78         */
     79        m360.sypcr = 0x74;
    7580
    7681        /*
     
    8792        /*
    8893         * Step 10: Write PEPAR
    89          *      SINTOUT not used (CPU32+ mode)
    90          *      CF1MODE=00 (CONFIG1 input)
    91          *      RAS1* double drive
    92          *      WE0* - WE3*
    93          *      OE* output
     94         *      SINTOUT standard M68000 family interrupt level encoding
     95         *      CF1MODE=10 (BCLRO* output)
     96         *      No RAS1* double drive
     97         *      A31 - A28
     98         *      AMUX output
    9499         *      CAS2* - CAS3*
    95100         *      CAS0* - CAS1*
    96101         *      CS7*
    97102         *      AVEC*
    98          * HARDWARE:
    99          *      Change if you are using a different memory configuration
    100          *      (static RAM, external address multiplexing, etc).
    101          */
    102         m360.pepar = 0x0180;
     103         */
     104        m360.pepar = 0x3440;
    103105
    104106        /*
    105107         * Step 11: Remap Chip Select 0 (CS0*), set up GMR
    106108         */
    107         if (&_MC68360HardwareType == &_MC68360HardwareTypeAtlasHSB) {
    108                 m360.gmr = M360_GMR_RCNT(12) | M360_GMR_RFEN |
    109                                 M360_GMR_RCYC(0) | M360_GMR_PGS(1) |
    110                                 M360_GMR_DPS_32BIT | M360_GMR_DWQ |
    111                                 M360_GMR_GAMX;
    112                 m360.memc[0].br = (unsigned long)&_RomBase | M360_MEMC_BR_WP |
    113                                                                 M360_MEMC_BR_V;
    114                 m360.memc[0].or = M360_MEMC_OR_WAITS(3) | M360_MEMC_OR_1MB |
    115                                                         M360_MEMC_OR_8BIT;
    116         }
    117         else {
    118                 /*
    119                  * 1024/2048/4096 addresses per DRAM page (1M/4M/16M DRAM chips)
    120                  * 60 nsec DRAM
    121                  * 180 nsec ROM (3 wait states)
    122                  */
    123                 switch ((unsigned long)&_RamSize) {
    124                 default:
    125                 case 4*1024*1024:
    126                         m360.gmr = M360_GMR_RCNT(24) | M360_GMR_RFEN |
    127                                         M360_GMR_RCYC(0) | M360_GMR_PGS(3) |
    128                                         M360_GMR_DPS_32BIT | M360_GMR_NCS |
    129                                         M360_GMR_GAMX;
    130                         break;
    131 
    132                 case 16*1024*1024:
    133                         m360.gmr = M360_GMR_RCNT(24) | M360_GMR_RFEN |
    134                                         M360_GMR_RCYC(0) | M360_GMR_PGS(5) |
    135                                         M360_GMR_DPS_32BIT | M360_GMR_NCS |
    136                                         M360_GMR_GAMX;
    137                         break;
    138 
    139                 case 64*1024*1024:
    140                         m360.gmr = M360_GMR_RCNT(24) | M360_GMR_RFEN |
    141                                         M360_GMR_RCYC(0) | M360_GMR_PGS(7) |
    142                                         M360_GMR_DPS_32BIT | M360_GMR_NCS |
    143                                         M360_GMR_GAMX;
    144                         break;
    145                 }
    146                 m360.memc[0].br = (unsigned long)&_RomBase | M360_MEMC_BR_WP |
    147                                                                 M360_MEMC_BR_V;
    148                 m360.memc[0].or = M360_MEMC_OR_WAITS(3) | M360_MEMC_OR_1MB |
    149                                                         M360_MEMC_OR_8BIT;
    150         }
     109        /*
     110         * 512 addresses per DRAM page (256K DRAM chips)
     111         * 70 nsec DRAM
     112         * 180 nsec ROM (3 wait states)
     113         */
     114        m360.gmr = M360_GMR_RCNT(24) | M360_GMR_RFEN |
     115                                M360_GMR_RCYC(0) | M360_GMR_PGS(1) |
     116                                M360_GMR_DPS_32BIT | M360_GMR_NCS |
     117                                M360_GMR_TSS40;
     118        m360.memc[0].br = (unsigned long)&_RomBase | M360_MEMC_BR_WP |
     119                                                        M360_MEMC_BR_V;
     120        m360.memc[0].or = M360_MEMC_OR_WAITS(3) | M360_MEMC_OR_1MB |
     121                                                M360_MEMC_OR_32BIT;
    151122
    152123        /*
    153124         * Step 12: Initialize the system RAM
    154125         */
    155         if (&_MC68360HardwareType == &_MC68360HardwareTypeAtlasHSB) {
    156                 /* first bank 1MByte DRAM */
    157                 m360.memc[1].or = M360_MEMC_OR_TCYC(2) | M360_MEMC_OR_1MB |
    158                                         M360_MEMC_OR_PGME | M360_MEMC_OR_DRAM;
    159                 m360.memc[1].br = (unsigned long)&_RamBase | M360_MEMC_BR_V;
    160 
    161                 /* second bank 1MByte DRAM */
    162                 m360.memc[2].or = M360_MEMC_OR_TCYC(2) | M360_MEMC_OR_1MB |
    163                                         M360_MEMC_OR_PGME | M360_MEMC_OR_DRAM;
    164                 m360.memc[2].br = ((unsigned long)&_RamBase + 0x100000) |
     126        /*
     127         *      Set up option/base registers
     128         *              1M DRAM
     129         *              70 nsec DRAM
     130         *      Enable burst mode
     131         *      No parity checking
     132         *      Wait for chips to power up
     133         *      Perform 8 read cycles
     134         */
     135        m360.memc[1].or = M360_MEMC_OR_TCYC(0) |
     136                                        M360_MEMC_OR_1MB |
     137                                        M360_MEMC_OR_DRAM;
     138        m360.memc[1].br = (unsigned long)&_RamBase |
     139                                        M360_MEMC_BR_BACK40 |
    165140                                        M360_MEMC_BR_V;
    166 
    167                 /* flash rom socket U6 on CS5 */
    168                 m360.memc[5].br = (unsigned long)ATLASHSB_ROM_U6 | M360_MEMC_BR_WP |
    169                                                                 M360_MEMC_BR_V;
    170                 m360.memc[5].or = M360_MEMC_OR_WAITS(2) | M360_MEMC_OR_512KB |
    171                                                                 M360_MEMC_OR_8BIT;
    172 
    173                 /* CSRs on CS7 */
    174                 m360.memc[7].or = M360_MEMC_OR_TCYC(4) | M360_MEMC_OR_64KB |
    175                                         M360_MEMC_OR_8BIT;
    176                 m360.memc[7].br = ATLASHSB_ESR | 0x01;
    177                 for (i = 0; i < 50000; i++)
    178                         continue;
    179                 for (i = 0; i < 8; ++i)
    180                         *((volatile unsigned long *)(unsigned long)&_RamBase);
    181         }
    182         else {
    183                 /*
    184                  *      Set up option/base registers
    185                  *              4M/16M/64M DRAM
    186                  *              60 nsec DRAM
    187                  *      Wait for chips to power up
    188                  *      Perform 8 read cycles
    189                  *      Set all parity bits to correct state
    190                  *      Enable parity checking
    191                  */
    192                 switch ((unsigned long)&_RamSize) {
    193                 default:
    194                 case 4*1024*1024:
    195                         m360.memc[1].or = M360_MEMC_OR_TCYC(0) |
    196                                                 M360_MEMC_OR_4MB |
    197                                                 M360_MEMC_OR_DRAM;
    198                         break;
    199 
    200                 case 16*1024*1024:
    201                         m360.memc[1].or = M360_MEMC_OR_TCYC(0) |
    202                                                 M360_MEMC_OR_16MB |
    203                                                 M360_MEMC_OR_DRAM;
    204                         break;
    205 
    206                 case 64*1024*1024:
    207                         m360.memc[1].or = M360_MEMC_OR_TCYC(0) |
    208                                                 M360_MEMC_OR_64MB |
    209                                                 M360_MEMC_OR_DRAM;
    210                         break;
    211                 }
    212                 m360.memc[1].br = (unsigned long)&_RamBase | M360_MEMC_BR_V;
    213                 for (i = 0; i < 50000; i++)
    214                         continue;
    215                 for (i = 0; i < 8; ++i)
    216                         *((volatile unsigned long *)(unsigned long)&_RamBase);
    217                 for (l = 0 ; l < (unsigned long)&_RamSize ; l += sizeof (unsigned long)) {
    218                         volatile unsigned long *lp;
    219                         lp = (unsigned long *)((unsigned char *)&_RamBase + i);
    220                         *lp = *lp;
    221                 }
    222                 m360.memc[1].br = (unsigned long)&_RamBase |
    223                                         M360_MEMC_BR_PAREN | M360_MEMC_BR_V;
    224         }
     141        for (i = 0; i < 50000; i++)
     142                continue;
     143        for (i = 0; i < 8; ++i)
     144                *((volatile unsigned long *)(unsigned long)&_RamBase);
    225145
    226146        /*
     
    254174        /*
    255175         * Step 15: Set module configuration register
     176         *      Bus request MC68040 Arbitration ID 3
     177         *      Bus asynchronous timing mode (work around bug in Rev. B)
     178         *      Arbitration asynchronous timing mode
     179         *      Disable timers during FREEZE
     180         *      Disable bus monitor during FREEZE
     181         *      BCLRO* arbitration level 3
     182         *      No show cycles
     183         *      User/supervisor access
     184         *      Bus clear in arbitration ID level  3
     185         *      SIM60 interrupt sources higher priority than CPM
     186         */
     187        m360.mcr = 0x6000EC3F;
     188
     189#elif (defined (M68360_ATLAS_HSB))
     190        /*
     191         ******************************************
     192         * Standalone Motorola 68360 -- ATLAS HSB *
     193         ******************************************
     194         */
     195
     196        /*
     197         * Step 6: Is this a power-up reset?
     198         * For now we just ignore this and do *all* the steps
     199         * Someday we might want to:
     200         *      if (Hard, Loss of Clock, Power-up)
     201         *              Do all steps
     202         *      else if (Double bus fault, watchdog or soft reset)
     203         *              Skip to step 12
     204         *      else (must be a CPU32+ reset command)
     205         *              Skip to step 14
     206         */
     207
     208        /*
     209         * Step 7: Deal with clock synthesizer
     210         * HARDWARE:
     211         *      Change if you're not using an external 25 MHz oscillator.
     212         */
     213        m360.clkocr = 0x8F;     /* No more writes, no clock outputs */
     214        m360.pllcr = 0xD000;    /* PLL, no writes, no prescale,
     215                                   no LPSTOP slowdown, PLL X1 */
     216        m360.cdvcr = 0x8000;    /* No more writes, no clock division */
     217
     218        /*
     219         * Step 8: Initialize system protection
     220         *      Disable watchdog FIXME: Should use watchdog!!!!
     221         *      Watchdog causes system reset
     222         *      Slowest watchdog timeout
     223         *      Enable double bus fault monitor
     224         *      Enable bus monitor external
     225         *      128 clocks for external timeout
     226         */
     227        m360.sypcr = 0x7F;
     228
     229        /*
     230         * Step 9: Clear parameter RAM and reset communication processor module
     231         */
     232        for (i = 0 ; i < 192  ; i += sizeof (long)) {
     233                *((long *)((char *)&m360 + 0xC00 + i)) = 0;
     234                *((long *)((char *)&m360 + 0xD00 + i)) = 0;
     235                *((long *)((char *)&m360 + 0xE00 + i)) = 0;
     236                *((long *)((char *)&m360 + 0xF00 + i)) = 0;
     237        }
     238        M360ExecuteRISC (M360_CR_RST);
     239
     240        /*
     241         * Step 10: Write PEPAR
     242         *      SINTOUT not used (CPU32+ mode)
     243         *      CF1MODE=00 (CONFIG1 input)
     244         *      RAS1* double drive
     245         *      WE0* - WE3*
     246         *      OE* output
     247         *      CAS2* - CAS3*
     248         *      CAS0* - CAS1*
     249         *      CS7*
     250         *      AVEC*
     251         * HARDWARE:
     252         *      Change if you are using a different memory configuration
     253         *      (static RAM, external address multiplexing, etc).
     254         */
     255        m360.pepar = 0x0180;
     256
     257        /*
     258         * Step 11: Remap Chip Select 0 (CS0*), set up GMR
     259         */
     260        m360.gmr = M360_GMR_RCNT(12) | M360_GMR_RFEN |
     261                                M360_GMR_RCYC(0) | M360_GMR_PGS(1) |
     262                                M360_GMR_DPS_32BIT | M360_GMR_DWQ |
     263                                M360_GMR_GAMX;
     264        m360.memc[0].br = (unsigned long)&_RomBase | M360_MEMC_BR_WP |
     265                                                                M360_MEMC_BR_V;
     266        m360.memc[0].or = M360_MEMC_OR_WAITS(3) | M360_MEMC_OR_1MB |
     267                                                        M360_MEMC_OR_8BIT;
     268
     269        /*
     270         * Step 12: Initialize the system RAM
     271         */
     272        /* first bank 1MByte DRAM */
     273        m360.memc[1].or = M360_MEMC_OR_TCYC(2) | M360_MEMC_OR_1MB |
     274                                        M360_MEMC_OR_PGME | M360_MEMC_OR_DRAM;
     275        m360.memc[1].br = (unsigned long)&_RamBase | M360_MEMC_BR_V;
     276
     277        /* second bank 1MByte DRAM */
     278        m360.memc[2].or = M360_MEMC_OR_TCYC(2) | M360_MEMC_OR_1MB |
     279                                        M360_MEMC_OR_PGME | M360_MEMC_OR_DRAM;
     280        m360.memc[2].br = ((unsigned long)&_RamBase + 0x100000) |
     281                                        M360_MEMC_BR_V;
     282
     283        /* flash rom socket U6 on CS5 */
     284        m360.memc[5].br = (unsigned long)ATLASHSB_ROM_U6 | M360_MEMC_BR_WP |
     285                                                                M360_MEMC_BR_V;
     286        m360.memc[5].or = M360_MEMC_OR_WAITS(2) | M360_MEMC_OR_512KB |
     287                                                                M360_MEMC_OR_8BIT;
     288
     289        /* CSRs on CS7 */
     290        m360.memc[7].or = M360_MEMC_OR_TCYC(4) | M360_MEMC_OR_64KB |
     291                                        M360_MEMC_OR_8BIT;
     292        m360.memc[7].br = ATLASHSB_ESR | 0x01;
     293        for (i = 0; i < 50000; i++)
     294                continue;
     295        for (i = 0; i < 8; ++i)
     296                *((volatile unsigned long *)(unsigned long)&_RamBase);
     297
     298        /*
     299         * Step 13: Copy  the exception vector table to system RAM
     300         */
     301        m68k_get_vbr (vbr);
     302        for (i = 0; i < 256; ++i)
     303                M68Kvec[i] = vbr[i];
     304        m68k_set_vbr (M68Kvec);
     305       
     306        /*
     307         * Step 14: More system initialization
     308         * SDCR (Serial DMA configuration register)
     309         *      Disable SDMA during FREEZE
     310         *      Give SDMA priority over all interrupt handlers
     311         *      Set DMA arbiration level to 4
     312         * CICR (CPM interrupt configuration register):
     313         *      SCC1 requests at SCCa position
     314         *      SCC2 requests at SCCb position
     315         *      SCC3 requests at SCCc position
     316         *      SCC4 requests at SCCd position
     317         *      Interrupt request level 4
     318         *      Maintain original priority order
     319         *      Vector base 128
     320         *      SCCs priority grouped at top of table
     321         */
     322        m360.sdcr = M360_SDMA_FREEZE | M360_SDMA_SISM_7 | M360_SDMA_SAID_4;
     323        m360.cicr = (3 << 22) | (2 << 20) | (1 << 18) | (0 << 16) |
     324                                                (4 << 13) | (0x1F << 8) | (128);
     325
     326        /*
     327         * Step 15: Set module configuration register
    256328         *      Disable timers during FREEZE
    257329         *      Enable bus monitor during FREEZE
     
    264336        m360.mcr = 0x4C7F;
    265337
     338#else
     339        /*
     340         ***************************************************
     341         * Generic Standalone Motorola 68360               *
     342         *           As described in MC68360 User's Manual *
     343         *           Atlas ACE360                          *
     344         ***************************************************
     345         */
     346
     347        /*
     348         * Step 6: Is this a power-up reset?
     349         * For now we just ignore this and do *all* the steps
     350         * Someday we might want to:
     351         *      if (Hard, Loss of Clock, Power-up)
     352         *              Do all steps
     353         *      else if (Double bus fault, watchdog or soft reset)
     354         *              Skip to step 12
     355         *      else (must be a CPU32+ reset command)
     356         *              Skip to step 14
     357         */
     358
     359        /*
     360         * Step 7: Deal with clock synthesizer
     361         * HARDWARE:
     362         *      Change if you're not using an external 25 MHz oscillator.
     363         */
     364        m360.clkocr = 0x8F;     /* No more writes, no clock outputs */
     365        m360.pllcr = 0xD000;    /* PLL, no writes, no prescale,
     366                                   no LPSTOP slowdown, PLL X1 */
     367        m360.cdvcr = 0x8000;    /* No more writes, no clock division */
     368
     369        /*
     370         * Step 8: Initialize system protection
     371         *      Disable watchdog FIXME: Should use watchdog!!!!
     372         *      Watchdog causes system reset
     373         *      Slowest watchdog timeout
     374         *      Enable double bus fault monitor
     375         *      Enable bus monitor external
     376         *      128 clocks for external timeout
     377         */
     378        m360.sypcr = 0x7F;
     379
     380        /*
     381         * Step 9: Clear parameter RAM and reset communication processor module
     382         */
     383        for (i = 0 ; i < 192  ; i += sizeof (long)) {
     384                *((long *)((char *)&m360 + 0xC00 + i)) = 0;
     385                *((long *)((char *)&m360 + 0xD00 + i)) = 0;
     386                *((long *)((char *)&m360 + 0xE00 + i)) = 0;
     387                *((long *)((char *)&m360 + 0xF00 + i)) = 0;
     388        }
     389        M360ExecuteRISC (M360_CR_RST);
     390
     391        /*
     392         * Step 10: Write PEPAR
     393         *      SINTOUT not used (CPU32+ mode)
     394         *      CF1MODE=00 (CONFIG1 input)
     395         *      RAS1* double drive
     396         *      WE0* - WE3*
     397         *      OE* output
     398         *      CAS2* - CAS3*
     399         *      CAS0* - CAS1*
     400         *      CS7*
     401         *      AVEC*
     402         * HARDWARE:
     403         *      Change if you are using a different memory configuration
     404         *      (static RAM, external address multiplexing, etc).
     405         */
     406        m360.pepar = 0x0180;
     407
     408        /*
     409         * Step 11: Remap Chip Select 0 (CS0*), set up GMR
     410         */
     411        /*
     412         * 1024/2048/4096 addresses per DRAM page (1M/4M/16M DRAM chips)
     413         * 60 nsec DRAM
     414         * 180 nsec ROM (3 wait states)
     415         */
     416        switch ((unsigned long)&_RamSize) {
     417        default:
     418        case 4*1024*1024:
     419                m360.gmr = M360_GMR_RCNT(24) | M360_GMR_RFEN |
     420                                        M360_GMR_RCYC(0) | M360_GMR_PGS(3) |
     421                                        M360_GMR_DPS_32BIT | M360_GMR_NCS |
     422                                        M360_GMR_GAMX;
     423                break;
     424
     425        case 16*1024*1024:
     426                m360.gmr = M360_GMR_RCNT(24) | M360_GMR_RFEN |
     427                                        M360_GMR_RCYC(0) | M360_GMR_PGS(5) |
     428                                        M360_GMR_DPS_32BIT | M360_GMR_NCS |
     429                                        M360_GMR_GAMX;
     430                break;
     431
     432        case 64*1024*1024:
     433                m360.gmr = M360_GMR_RCNT(24) | M360_GMR_RFEN |
     434                                        M360_GMR_RCYC(0) | M360_GMR_PGS(7) |
     435                                        M360_GMR_DPS_32BIT | M360_GMR_NCS |
     436                                        M360_GMR_GAMX;
     437                break;
     438        }
     439        m360.memc[0].br = (unsigned long)&_RomBase | M360_MEMC_BR_WP |
     440                                                                M360_MEMC_BR_V;
     441        m360.memc[0].or = M360_MEMC_OR_WAITS(3) | M360_MEMC_OR_1MB |
     442                                                        M360_MEMC_OR_8BIT;
     443
     444        /*
     445         * Step 12: Initialize the system RAM
     446         */
     447        /*
     448         *      Set up option/base registers
     449         *              4M/16M/64M DRAM
     450         *              60 nsec DRAM
     451         *      Wait for chips to power up
     452         *      Perform 8 read cycles
     453         *      Set all parity bits to correct state
     454         *      Enable parity checking
     455         */
     456        switch ((unsigned long)&_RamSize) {
     457        default:
     458        case 4*1024*1024:
     459                m360.memc[1].or = M360_MEMC_OR_TCYC(0) |
     460                                        M360_MEMC_OR_4MB |
     461                                        M360_MEMC_OR_DRAM;
     462                break;
     463
     464        case 16*1024*1024:
     465                m360.memc[1].or = M360_MEMC_OR_TCYC(0) |
     466                                        M360_MEMC_OR_16MB |
     467                                        M360_MEMC_OR_DRAM;
     468                break;
     469
     470        case 64*1024*1024:
     471                m360.memc[1].or = M360_MEMC_OR_TCYC(0) |
     472                                        M360_MEMC_OR_64MB |
     473                                        M360_MEMC_OR_DRAM;
     474                break;
     475        }
     476        m360.memc[1].br = (unsigned long)&_RamBase | M360_MEMC_BR_V;
     477        for (i = 0; i < 50000; i++)
     478                continue;
     479        for (i = 0; i < 8; ++i)
     480                *((volatile unsigned long *)(unsigned long)&_RamBase);
     481        for (i = 0 ; i < (unsigned long)&_RamSize ; i += sizeof (unsigned long)) {
     482                volatile unsigned long *lp;
     483                lp = (unsigned long *)((unsigned char *)&_RamBase + i);
     484                *lp = *lp;
     485        }
     486        m360.memc[1].br = (unsigned long)&_RamBase |
     487                                M360_MEMC_BR_PAREN | M360_MEMC_BR_V;
     488
     489        /*
     490         * Step 13: Copy  the exception vector table to system RAM
     491         */
     492        m68k_get_vbr (vbr);
     493        for (i = 0; i < 256; ++i)
     494                M68Kvec[i] = vbr[i];
     495        m68k_set_vbr (M68Kvec);
     496       
     497        /*
     498         * Step 14: More system initialization
     499         * SDCR (Serial DMA configuration register)
     500         *      Disable SDMA during FREEZE
     501         *      Give SDMA priority over all interrupt handlers
     502         *      Set DMA arbiration level to 4
     503         * CICR (CPM interrupt configuration register):
     504         *      SCC1 requests at SCCa position
     505         *      SCC2 requests at SCCb position
     506         *      SCC3 requests at SCCc position
     507         *      SCC4 requests at SCCd position
     508         *      Interrupt request level 4
     509         *      Maintain original priority order
     510         *      Vector base 128
     511         *      SCCs priority grouped at top of table
     512         */
     513        m360.sdcr = M360_SDMA_FREEZE | M360_SDMA_SISM_7 | M360_SDMA_SAID_4;
     514        m360.cicr = (3 << 22) | (2 << 20) | (1 << 18) | (0 << 16) |
     515                                                (4 << 13) | (0x1F << 8) | (128);
     516
     517        /*
     518         * Step 15: Set module configuration register
     519         *      Disable timers during FREEZE
     520         *      Enable bus monitor during FREEZE
     521         *      BCLRO* arbitration level 3
     522         *      No show cycles
     523         *      User/supervisor access
     524         *      Bus clear interrupt service level 7
     525         *      SIM60 interrupt sources higher priority than CPM
     526         */
     527        m360.mcr = 0x4C7F;
     528#endif
     529
    266530        /*
    267531         * Copy data, clear BSS, switch stacks and call main()
Note: See TracChangeset for help on using the changeset viewer.