Changeset 98653c6 in rtems


Ignore:
Timestamp:
Feb 2, 2005, 7:55:59 PM (15 years ago)
Author:
Eric Norum <WENorum@…>
Branches:
4.10, 4.11, 4.8, 4.9, master
Children:
2c2f7b6
Parents:
12993b3
Message:

Lock FEC/PHYS at 100 Mbs, full-duplex.

Location:
c/src/lib/libbsp/m68k/uC5282
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • c/src/lib/libbsp/m68k/uC5282/ChangeLog

    r12993b3 r98653c6  
     12005-02-02  Eric Norum <norume@aps.anl.gov>
     2
     3        * network/network.c: Lock FEC/PHYS at 100 Mbs, full-duplex
     4
    152005-02-01  Eric Norum <norume@aps.anl.gov>
    26
  • c/src/lib/libbsp/m68k/uC5282/README

    r12993b3 r98653c6  
    4545VIDEO:              none
    4646SCSI:               none
    47 NETWORKING:         Internal 10/100MHz FEC
     47NETWORKING:         Internal 10/100Mbs FEC, locked at 100 Mbs, full-duplex
    4848
    4949DRIVER INFORMATION
  • c/src/lib/libbsp/m68k/uC5282/network/network.c

    r12993b3 r98653c6  
    22 * RTEMS/TCPIP driver for MCF5282 Fast Ethernet Controller
    33 *
    4  * TO DO: MII communications to set speed, full/half duplex, etc.
    54 * TO DO: Check network stack code -- force longword alignment of all tx mbufs?
    65 */
     
    140139}
    141140
     141/*
     142 * Read MII register
     143 * Busy-waits, but transfer time should be short!
     144 */
     145static int
     146getMII(int phyNumber, int regNumber)
     147{
     148    MCF5282_FEC_MMFR = (0x1 << 30)       |
     149                       (0x2 << 28)       |
     150                       (phyNumber << 23) |
     151                       (regNumber << 18) |
     152                       (0x2 << 16);
     153    while ((MCF5282_FEC_EIR & MCF5282_FEC_EIR_MII) == 0);
     154    MCF5282_FEC_EIR = MCF5282_FEC_EIR_MII;
     155    return MCF5282_FEC_MMFR & 0xFFFF;
     156}
     157
     158/*
     159 * Write MII register
     160 * Busy-waits, but transfer time should be short!
     161 */
     162static void
     163setMII(int phyNumber, int regNumber, int value)
     164{
     165    MCF5282_FEC_MMFR = (0x1 << 30)       |
     166                       (0x1 << 28)       |
     167                       (phyNumber << 23) |
     168                       (regNumber << 18) |
     169                       (0x2 << 16)       |
     170                       (value & 0xFFFF);
     171    while ((MCF5282_FEC_EIR & MCF5282_FEC_EIR_MII) == 0);
     172    MCF5282_FEC_EIR = MCF5282_FEC_EIR_MII;
     173}
     174
    142175static void
    143176mcf5282_fec_initialize_hardware(struct mcf5282_enet_struct *sc)
    144177{
    145178    int i;
    146     unsigned char *hwaddr;
     179    const unsigned char *hwaddr;
    147180    rtems_status_code status;
    148181    rtems_isr_entry old_handler;
    149182        unsigned32 clock_speed = get_CPU_clock_speed();
    150183
    151 /*  extern struct rtems_bsdnet_ifconfig netdriver_config; */
    152 
    153 
    154184    /*
    155185     * Issue reset to FEC
     
    157187    MCF5282_FEC_ECR = MCF5282_FEC_ECR_RESET;
    158188    rtems_task_wake_after(1);
     189    MCF5282_FEC_ECR = 0;
     190
    159191    /*
    160192     * Configuration of I/O ports is done outside of this function
     
    204236     *   Not promiscuous
    205237     *   MII mode
    206      *   Half duplex
     238     *   Full duplex
    207239     *   No loopback
    208240     */
    209241    MCF5282_FEC_RCR = MCF5282_FEC_RCR_MAX_FL(MAX_MTU_SIZE) |
    210                       MCF5282_FEC_RCR_MII_MODE             |
    211                       MCF5282_FEC_RCR_DRT;
     242                      MCF5282_FEC_RCR_MII_MODE;
    212243
    213244    /*
    214245     * Set up Transmit Control Register:
    215      *   Half duplex
     246     *   Full duplex
    216247     *   No heartbeat
    217248     */
    218     MCF5282_FEC_TCR = 0;
     249    MCF5282_FEC_TCR = MCF5282_FEC_TCR_FDEN;
    219250
    220251    /*
     
    230261
    231262    /*
    232      * Set MII speed to <2.5 MHz
    233      */
    234     if (clock_speed <= 25000000)
    235         MCF5282_FEC_MSCR = MCF5282_FEC_MSCR_MII_SPEED(0x5);
    236     else if (clock_speed <= 33000000)
    237         MCF5282_FEC_MSCR = MCF5282_FEC_MSCR_MII_SPEED(0x7);
    238     else if (clock_speed <= 40000000)
    239         MCF5282_FEC_MSCR = MCF5282_FEC_MSCR_MII_SPEED(0x8);
    240     else if (clock_speed <= 50000000)
    241         MCF5282_FEC_MSCR = MCF5282_FEC_MSCR_MII_SPEED(0xA);
    242     else if (clock_speed <= 66000000)
    243         MCF5282_FEC_MSCR = MCF5282_FEC_MSCR_MII_SPEED(0xD);
    244     else
    245         MCF5282_FEC_MSCR = MCF5282_FEC_MSCR_MII_SPEED(0xF);
     263     * Set MII speed to <= 2.5 MHz
     264     */
     265    i = (clock_speed + 5000000 - 1) / 5000000;
     266    MCF5282_FEC_MSCR = MCF5282_FEC_MSCR_MII_SPEED(i);
     267
     268    /*
     269     * Set PHYS to 100 Mb/s, full duplex
     270     */
     271    setMII(1, 0, 0x2100);
    246272
    247273    /*
Note: See TracChangeset for help on using the changeset viewer.