Example #1
0
/**
 * \brief Find a valid PHY Address (from 0 to 31).
 * \param pMacb Pointer to the MACB instance
 * \return 0xFF when no valid PHY Address found.
 */
static uint8_t GMACB_FindValidPhy(GMacb *pMacb)
{
	sGmacd *pDrv = pMacb->pGmacd;
	Gmac *pHw = pDrv->pHw;

	uint32_t  retryMax;
	uint32_t  value = 0;
	uint8_t rc;
	uint8_t phyAddress;
	uint8_t cnt;

	TRACE_DEBUG("GMACB_FindValidPhy\n\r");

	GMAC_EnableMdio(pHw);
	phyAddress = pMacb->phyAddress;
	retryMax = pMacb->retryMax;

	/* Check current phyAddress */
	rc = phyAddress;

	if (GMACB_ReadPhy(pHw, phyAddress, GMII_PHYID1R, &value, retryMax) == 0)
		TRACE_ERROR("GMACB PROBLEM\n\r");

	TRACE_DEBUG("_PHYID1  : 0x%X, addr: %d\n\r", value, phyAddress);

	/* Find another one */
	if (value != GMII_OUI_MSB) {
		rc = 0xFF;

		for (cnt = 0; cnt < 32; cnt ++) {
			phyAddress = (phyAddress + 1) & 0x1F;

			if (GMACB_ReadPhy(pHw, phyAddress, GMII_PHYID1R, &value, retryMax)
				 == 0)
				TRACE_ERROR("MACB PROBLEM\n\r");

			TRACE_DEBUG("_PHYID1  : 0x%X, addr: %d\n\r", value, phyAddress);

			if (value == GMII_OUI_MSB) {

				rc = phyAddress;
				break;
			}
		}
	}

	if (rc != 0xFF) {
		TRACE_INFO("** Valid PHY Found: %d\n\r", rc);
		GMACB_ReadPhy(pHw, phyAddress, GMII_PHYID1R, &value, retryMax);
		TRACE_DEBUG("_PHYID1R  : 0x%X, addr: %d\n\r", value, phyAddress);
		GMACB_ReadPhy(pHw, phyAddress, GMII_PHYID2R, &value, retryMax);
		TRACE_DEBUG("_EMSR  : 0x%X, addr: %d\n\r", value, phyAddress);
	}

	GMAC_DisableMdio(pHw);
	return rc;
}
Example #2
0
/**
 * \brief Dump all the useful registers.
 * \param pMacb          Pointer to the MACB instance
 */
void GMACB_DumpRegisters(GMacb *pMacb)
{
	sGmacd *pDrv = pMacb->pGmacd;
	Gmac *pHw = pDrv->pHw;

	uint8_t phyAddress;
	uint32_t retryMax;
	uint32_t value;

	TRACE_INFO("GMACB_DumpRegisters\n\r");

	GMAC_EnableMdio(pHw);
	phyAddress = pMacb->phyAddress;
	retryMax = pMacb->retryMax;

	TRACE_INFO("GMII MACB @ %d) Registers:\n\r", phyAddress);

	GMACB_ReadPhy(pHw, phyAddress, GMII_BMCR, &value, retryMax);
	TRACE_INFO(" _BMCR     : 0x%X\n\r", (unsigned)value);
	GMACB_ReadPhy(pHw, phyAddress, GMII_BMSR, &value, retryMax);
	TRACE_INFO(" _BMSR     : 0x%X\n\r", (unsigned)value);
	GMACB_ReadPhy(pHw, phyAddress, GMII_PHYID1R, &value, retryMax);
	TRACE_INFO(" _PHYID1     : 0x%X\n\r", (unsigned)value);
	GMACB_ReadPhy(pHw, phyAddress, GMII_PHYID2R, &value, retryMax);
	TRACE_INFO(" _PHYID2     : 0x%X\n\r", (unsigned)value);
	GMACB_ReadPhy(pHw, phyAddress, GMII_ANAR, &value, retryMax);
	TRACE_INFO(" _ANAR     : 0x%X\n\r", (unsigned)value);
	GMACB_ReadPhy(pHw, phyAddress, GMII_ANLPAR, &value, retryMax);
	TRACE_INFO(" _ANLPAR   : 0x%X\n\r", (unsigned)value);
	GMACB_ReadPhy(pHw, phyAddress, GMII_ANER, &value, retryMax);
	TRACE_INFO(" _ANER     : 0x%X\n\r", (unsigned)value);
	GMACB_ReadPhy(pHw, phyAddress, GMII_ANNPR, &value, retryMax);
	TRACE_INFO(" _ANNPR    : 0x%X\n\r", (unsigned)value);
	GMACB_ReadPhy(pHw, phyAddress, GMII_ANLPNPAR, &value, retryMax);
	TRACE_INFO(" _ANLPNPAR : 0x%X\n\r", (unsigned)value);

	TRACE_INFO(" \n\r");

	GMACB_ReadPhy(pHw, phyAddress, GMII_RXERCR, &value, retryMax);
	TRACE_INFO(" _RXERCR   : 0x%X\n\r", (unsigned)value);
	GMACB_ReadPhy(pHw, phyAddress, GMII_ICSR, &value, retryMax);
	TRACE_INFO(" _ICSR     : 0x%X\n\r", (unsigned)value);
	TRACE_INFO(" \n\r");

	GMAC_DisableMdio(pHw);
}
Example #3
0
/**
 * \brief Dump all the useful registers.
 * \param pMacb          Pointer to the MACB instance
 */
void GMACB_DumpRegisters(GMacb *pMacb)
{
    sGmacd *pDrv = pMacb->pGmacd;
    Gmac *pHw = pDrv->pHw;

    uint8_t phyAddress;
    uint32_t retryMax;
    uint32_t value;

    TRACE_INFO("GMACB_DumpRegisters\n\r");

    GMAC_EnableMdio(pHw);
    phyAddress = pMacb->phyAddress;
    retryMax = pMacb->retryMax;

    TRACE_INFO("GMII MACB @%d) Registers:\n\r", phyAddress);

    GMACB_ReadPhy(pHw, phyAddress, GMII_BMCR, &value, retryMax);
    TRACE_INFO(" _BMCR     : 0x%X\n\r", value);
    GMACB_ReadPhy(pHw, phyAddress, GMII_BMSR, &value, retryMax);
    TRACE_INFO(" _BMSR     : 0x%X\n\r", value);
    GMACB_ReadPhy(pHw, phyAddress, GMII_ANAR, &value, retryMax);
    TRACE_INFO(" _ANAR     : 0x%X\n\r", value);
    GMACB_ReadPhy(pHw, phyAddress, GMII_ANLPAR, &value, retryMax);
    TRACE_INFO(" _ANLPAR   : 0x%X\n\r", value);
    GMACB_ReadPhy(pHw, phyAddress, GMII_ANER, &value, retryMax);
    TRACE_INFO(" _ANER     : 0x%X\n\r", value);
    GMACB_ReadPhy(pHw, phyAddress, GMII_ANNPR, &value, retryMax);
    TRACE_INFO(" _ANNPR    : 0x%X\n\r", value);
    GMACB_ReadPhy(pHw, phyAddress, GMII_ANLPNPAR, &value, retryMax);
    TRACE_INFO(" _ANLPNPAR : 0x%X\n\r", value);
    GMACB_ReadPhy(pHw, phyAddress, GMII_1000BTCR, &value, retryMax);
    TRACE_INFO(" _1000BTCR : 0x%X\n\r", value);
    GMACB_ReadPhy(pHw, phyAddress, GMII_1000BTSR, &value, retryMax);
    TRACE_INFO(" _1000BTSR : 0x%X\n\r", value);
  
    GMACB_ReadPhy(pHw, phyAddress, GMII_EMSR, &value, retryMax);
    TRACE_INFO(" _EMSR     : 0x%X\n\r", value);
    TRACE_INFO(" \n\r");
    
    GMACB_ReadPhy(pHw, phyAddress, GMII_RLLMR, &value, retryMax);
    TRACE_INFO(" _RLLMR    : 0x%X\n\r", value);
    GMACB_ReadPhy(pHw, phyAddress, GMII_LMDCDR, &value, retryMax);
    TRACE_INFO(" _LMDCDR   : 0x%X\n\r", value);
    GMACB_ReadPhy(pHw, phyAddress, GMII_DPPSR, &value, retryMax);
    TRACE_INFO(" _DPPSR    : 0x%X\n\r", value);
    GMACB_ReadPhy(pHw, phyAddress, GMII_RXERCR, &value, retryMax);
    TRACE_INFO(" _RXERCR   : 0x%X\n\r", value);
    GMACB_ReadPhy(pHw, phyAddress, GMII_ICSR, &value, retryMax);
    TRACE_INFO(" _ICSR     : 0x%X\n\r", value);
    GMACB_ReadPhy(pHw, phyAddress, GMII_DDC1R, &value, retryMax);
    TRACE_INFO(" _DDC1R    : 0x%X\n\r", value);
    GMACB_ReadPhy(pHw, phyAddress, GMII_PHYCR, &value, retryMax);
    TRACE_INFO(" _PHYCR    : 0x%X\n\r", value);  
    TRACE_INFO(" \n\r");
   
    value = GMII_CCR;
    GMACB_WritePhy(pHw, phyAddress, GMII_ERCR, value, retryMax);
    GMACB_ReadPhy(pHw, phyAddress, GMII_ERDRR, &value, retryMax);
    TRACE_INFO(" _CCR      : 0x%X\n\r", value);
    value = GMII_SSR;
    GMACB_WritePhy(pHw, phyAddress, GMII_ERCR, value, retryMax);
    GMACB_ReadPhy(pHw, phyAddress, GMII_ERDRR, &value, retryMax);
    TRACE_INFO(" _SSR      : 0x%X\n\r", value);
    value = GMII_OMSOR;
    GMACB_WritePhy(pHw, phyAddress, GMII_ERCR, value, retryMax);
    GMACB_ReadPhy(pHw, phyAddress, GMII_ERDRR, &value, retryMax);
    TRACE_INFO(" _OMSOR    : 0x%X\n\r", value);
    value = GMII_OMSSR;
    GMACB_WritePhy(pHw, phyAddress, GMII_ERCR, value, retryMax);
    GMACB_ReadPhy(pHw, phyAddress, GMII_ERDRR, &value, retryMax);
    TRACE_INFO(" _OMSSR    : 0x%X\n\r", value);
    value = GMII_RCCPSR;
    GMACB_WritePhy(pHw, phyAddress, GMII_ERCR, value, retryMax);
    GMACB_ReadPhy(pHw, phyAddress, GMII_ERDRR, &value, retryMax);
    TRACE_INFO(" _RCCPSR   : 0x%X\n\r", value);
    value = GMII_RRDPSR;
    GMACB_WritePhy(pHw, phyAddress, GMII_ERCR, value, retryMax);
    GMACB_ReadPhy(pHw, phyAddress, GMII_ERDRR, &value, retryMax);
    TRACE_INFO(" _RCCPSR   : 0x%X\n\r", value);
    value = GMII_ATR;   
    GMACB_WritePhy(pHw, phyAddress, GMII_ERCR, value, retryMax);
    GMACB_ReadPhy(pHw, phyAddress, GMII_ERDRR, &value, retryMax);
    TRACE_INFO(" _ATR      : 0x%X\n\r", value);
    
    GMAC_DisableMdio(pHw);
}