This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

SK-AM64: Baremetal configuration of CSPW

Part Number: SK-AM64

Hi

void InitializeEthernet()
{
    _mainpadconfig->PADCONFIG126 = BIT18|BIT16|0x4;//18MDIO
    _mainpadconfig->PADCONFIG127 = BIT16|0x4;//19MDC
    _mainpadconfig->PADCONFIG158 = BIT21|BIT18|BIT16|0x0;//EXTI

    _mainpadconfig->PADCONFIG71 = BIT21|BIT18|BIT16|0x4;
    _mainpadconfig->PADCONFIG74 = BIT21|BIT18|BIT16|0x4;
    _mainpadconfig->PADCONFIG84 = BIT21|BIT18|BIT16|0x4;
    _mainpadconfig->PADCONFIG85 = BIT21|BIT18|BIT16|0x4;
    _mainpadconfig->PADCONFIG51 = BIT21|BIT18|BIT16|0x4;
    _mainpadconfig->PADCONFIG54 = BIT21|BIT18|BIT16|0x4;
    _mainpadconfig->PADCONFIG73 = BIT16|0x4;
    _mainpadconfig->PADCONFIG75 = BIT16|0x4;
    _mainpadconfig->PADCONFIG76 = BIT16|0x4;
    _mainpadconfig->PADCONFIG83 = BIT16|0x4;
    _mainpadconfig->PADCONFIG55 = BIT16|0x4;
    _mainpadconfig->PADCONFIG56 = BIT16|0x4;

    _mainpadconfig->PADCONFIG66 = BIT21|BIT18|BIT16|0x2;
    _mainpadconfig->PADCONFIG67 = BIT21|BIT18|BIT16|0x2;
    _mainpadconfig->PADCONFIG68 = BIT21|BIT18|BIT16|0x2;
    _mainpadconfig->PADCONFIG69 = BIT21|BIT18|BIT16|0x2;
    _mainpadconfig->PADCONFIG70 = BIT21|BIT18|BIT16|0x2;
    _mainpadconfig->PADCONFIG72 = BIT21|BIT18|BIT16|0x2;
    _mainpadconfig->PADCONFIG77 = BIT16|0x2;
    _mainpadconfig->PADCONFIG78 = BIT16|0x2;
    _mainpadconfig->PADCONFIG79 = BIT16|0x2;
    _mainpadconfig->PADCONFIG80 = BIT16|0x2;
    _mainpadconfig->PADCONFIG81 = BIT16|0x2;
    _mainpadconfig->PADCONFIG82 = BIT16|0x2;

    _mainpadconfig->PADCONFIG98 = BIT16|0x7;
    _mcupadconfig->PADCONFIG5   = BIT16|0x7;

    SOC_moduleClockEnable(TISCI_DEV_CPSW0,1);
    SOC_moduleClockEnable(TISCI_DEV_DMASS0,1);

    for(uint32 i=0;i< (2 *100);i++);
    _cpsw->mdio.CONTROL &= (~0xFF | 99);
    _cpsw->mdio.CONTROL &= ~BIT31;
    _cpsw->mdio.CONTROL |= BIT24;
    _cpsw->mdio.CONTROL |= BIT30;

    uint16 phyregisters0[0x1DF];
    uint16 phyregisters1[0x1DF];
    uint32 status=0;

    for(uint32 i=0;i<0x1DF;i++)status = MDIO_phyExtRegRead((uint32)&_cpsw->mdio, NULL, 0, i, &phyregisters0[i]);
    phyregisters0[0x0000] |= BIT09;     status = MDIO_phyExtRegWrite((uint32)&_cpsw->mdio, NULL, 0, 0x0000, phyregisters0[0x0000]);
    phyregisters0[0x0018] = 0x2232;     status = MDIO_phyExtRegWrite((uint32)&_cpsw->mdio, NULL, 0, 0x0018, phyregisters0[0x0018]);
    phyregisters0[0x0032] |= BIT07;     status = MDIO_phyExtRegWrite((uint32)&_cpsw->mdio, NULL, 0, 0x0032, phyregisters0[0x0032]);
    phyregisters0[0x00E9] = 0xDF22;     status = MDIO_phyExtRegWrite((uint32)&_cpsw->mdio, NULL, 0, 0x00E9, phyregisters0[0x00E9]);
    phyregisters0[0x001F] = BIT14;      status = MDIO_phyExtRegWrite((uint32)&_cpsw->mdio, NULL, 0, 0x001F, phyregisters0[0x001F]);
    for(uint32 i=0;i< (200 *100);i++);

    for(uint32 i=0;i<0x1DF;i++)status = MDIO_phyExtRegRead((uint32)&_cpsw->mdio, NULL, 1, i, &phyregisters1[i]);
    phyregisters1[0x0000] |= BIT09;     status = MDIO_phyExtRegWrite((uint32)&_cpsw->mdio, NULL, 1, 0x0000, phyregisters1[0x0000]);
    phyregisters1[0x0018] = 0x2232;     status = MDIO_phyExtRegWrite((uint32)&_cpsw->mdio, NULL, 1, 0x0018, phyregisters1[0x0018]);
    phyregisters1[0x0032] |= BIT07;     status = MDIO_phyExtRegWrite((uint32)&_cpsw->mdio, NULL, 1, 0x0032, phyregisters1[0x0032]);
    phyregisters1[0x001F] = BIT14;      status = MDIO_phyExtRegWrite((uint32)&_cpsw->mdio, NULL, 1, 0x001F, phyregisters1[0x001F]);
    for(uint32 i=0;i< (200 *100);i++);

    volatile uint32 *CTRLMMR_ENET1_CTRL = ((volatile uint32*)(0x43004044));
    volatile uint32 *CTRLMMR_ENET2_CTRL = ((volatile uint32*)(0x43004048));
    *CTRLMMR_ENET1_CTRL = 2;
    *CTRLMMR_ENET2_CTRL = 2;

    _cpsw->control.CONTROL = BIT15|BIT14|BIT02;

    _cpsw->control.PTYPEREG = 0x2;

    _cpsw->control.VLANLTPYE = 0x88A88100;

    _cpsw->control.FREQUENCY = 250;

    _cpsw->control.P0RXMAXLEN = 1518;

    _cpsw->control.STATPORTEN =  BIT02|BIT01|BIT00;

    _cpsw->ale.CONTROL |=  BIT31;
    _cpsw->ale.CONTROL |=  BIT30;
    _cpsw->ale.CONTROL |=  BIT04;

    _cpsw->control.P0CONTROL|= BIT01|BIT00;
    _cpsw->control.P1CONTROL|= BIT01;
    _cpsw->control.P1SAL = 0xABCD;
    _cpsw->control.P1SAH = 0xCDEF0000;
    _cpsw->control.P1MACCONTROL = BIT24|BIT23|BIT22|BIT07;

}

I wrote the above code to configure CPSW. The PAD config and MDIO are working good. I have tested them using PRUICSSG and the PRU is recieving and transmitting data OK.

Now I am trying to do this using CPSW instead of PRUs

I am not sure about the CPSW part if it is configure correctly or not. Are these many regesters enough to configure CPSW to recieve data or am I missing any, or is the order incorrect? Because the statistics register on all ports are dead and 0, showing no activity even thgought the ethernet jack recieve LED is blinking.

Thanks