Ignore:
Timestamp:
Apr 9, 1997, 2:05:50 PM (24 years ago)
Author:
Joel Sherrill <joel.sherrill@…>
Branches:
4.10, 4.11, 4.8, 4.9, 5, master
Children:
48d6de3
Parents:
bed475e
Message:

Added ka9q tcpip stack and network driver for the gen68360. This effort
was done based on the 3.6.0 release and had to be autoconf'ed locally.
It is turned on is the bsp enables it and it is not explicitly disabled
via the configure option --disable-tcpip. As many warnings as possible
were removed locally after the code was merged. Only the gen68360
and mvme136 bsps were compiled this way.

The ka9q port and network driver were submitted by Eric Norum
(eric@…).

The network demo programs are not included in the tree at this point.

File:
1 edited

Legend:

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

    rbed475e re2d79559  
    3737{
    3838        int i;
    39         extern void *_RomBase, *_RamBase;
     39        unsigned long l;
    4040        m68k_isr_entry *vbr;
    4141        extern void _CopyDataClearBSSAndStart (void);
     
    5959         */
    6060        m360.clkocr = 0x8F;     /* No more writes, no clock outputs */
    61         m360.pllcr = 0xD000;    /* PLL, no writes, no prescale,  */
    62                                         /* no LPSTOP slowdown, PLL X1 */
     61        m360.pllcr = 0xD000;    /* PLL, no writes, no prescale,
     62                                  no LPSTOP slowdown, PLL X1 */
    6363        m360.cdvcr = 0x8000;    /* No more writes, no clock division */
    6464
     
    6767         *      Disable watchdog FIXME: Should use watchdog!!!!
    6868         *      Watchdog causes system reset
    69          *      Fastest watchdog timeout
     69         *      Slowest watchdog timeout
    7070         *      Enable double bus fault monitor
    7171         *      Enable bus monitor external
    7272         *      128 clocks for external timeout
    7373         */
    74         m360.sypcr = 0x4F;
     74        m360.sypcr = 0x7F;
    7575
    7676        /*
     
    9090         *      CF1MODE=00 (CONFIG1 input)
    9191         *      RAS1* double drive
    92          *      A31-A28
     92         *      WE0* - WE3*
    9393         *      OE* output
    94          *      CAS2* / CAS3*
    95          *      CAS0* / CAS1*
     94         *      CAS2* - CAS3*
     95         *      CAS0* - CAS1*
    9696         *      CS7*
    9797         *      AVEC*
     
    100100         *      (static RAM, external address multiplexing, etc).
    101101         */
    102         m360.pepar = 0x0100;
     102        m360.pepar = 0x0180;
    103103
    104104        /*
    105105         * Step 11: Remap Chip Select 0 (CS0*), set up GMR
    106          *      1024 addresses per DRAM page (1M DRAM chips)
    107          *      60 nsec DRAM
    108          *      180 nsec ROM (3 wait states)
    109          * HARDWARE:
    110          *      Change if you are using a different memory configuration
    111          */
    112         m360.gmr = M360_GMR_RCNT(24) | M360_GMR_RFEN | M360_GMR_RCYC(0) |
    113                         M360_GMR_PGS(3) | M360_GMR_DPS_32BIT | M360_GMR_NCS |
    114                         M360_GMR_GAMX;
    115         m360.memc[0].br = (unsigned long)&_RomBase | M360_MEMC_BR_WP |
    116                                                         M360_MEMC_BR_V;
    117         m360.memc[0].or = M360_MEMC_OR_WAITS(3) | M360_MEMC_OR_512KB |
     106         */
     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 |
    118115                                                        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        }
    119151
    120152        /*
    121153         * Step 12: Initialize the system RAM
    122          *      Set up option/base registers
    123          *              4 MB DRAM
    124          *              60 nsec DRAM
    125          *      Wait for chips to power up
    126          *      Perform 8 read cycles
    127          *      Set all parity bits to correct state
    128          *      Enable parity checking
    129          * HARDWARE:
    130          *      Change if you are using a different memory configuration
    131          */
    132         m360.memc[1].or = M360_MEMC_OR_TCYC(0) | M360_MEMC_OR_4MB |
    133                                 M360_MEMC_OR_DRAM;
    134         m360.memc[1].br = (unsigned long)&_RamBase | M360_MEMC_BR_V;
    135         for (i = 0; i < 50000; i++)
    136                 continue;
    137         for (i = 0; i < 8; ++i)
    138                 *((volatile unsigned long *)(unsigned long)&_RamBase);
    139         for (i = 0 ; i < 4*1024*1024 ; i += sizeof (unsigned long)) {
    140                 volatile unsigned long *lp;
    141                 lp = (unsigned long *)((unsigned char *)&_RamBase + i);
    142                 *lp = *lp;
    143         }
    144         m360.memc[1].br = (unsigned long)&_RamBase | M360_MEMC_BR_PAREN |
     154         */
     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) |
     165                                        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 |
    145169                                                                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        }
    146225
    147226        /*
     
    156235         * Step 14: More system initialization
    157236         * SDCR (Serial DMA configuration register)
     237         *      Disable SDMA during FREEZE
    158238         *      Give SDMA priority over all interrupt handlers
    159239         *      Set DMA arbiration level to 4
     
    168248         *      SCCs priority grouped at top of table
    169249         */
    170         m360.sdcr = M360_SDMA_SISM_7 | M360_SDMA_SAID_4;
     250        m360.sdcr = M360_SDMA_FREEZE | M360_SDMA_SISM_7 | M360_SDMA_SAID_4;
    171251        m360.cicr = (3 << 22) | (2 << 20) | (1 << 18) | (0 << 16) |
    172252                                                (4 << 13) | (0x1F << 8) | (128);
     
    179259         *      No show cycles
    180260         *      User/supervisor access
    181          *      Bus clear interupt service level 7
     261         *      Bus clear interrupt service level 7
    182262         *      SIM60 interrupt sources higher priority than CPM
    183263         */
Note: See TracChangeset for help on using the changeset viewer.