void at91_macb_hw_init(void) { at91_pmc_t *pmc = (at91_pmc_t *) ATMEL_BASE_PMC; if (has_emac0()) { /* Enable EMAC0 clock */ writel(1 << ATMEL_ID_EMAC0, &pmc->pcer); /* EMAC0 pins setup */ at91_set_a_periph(AT91_PIO_PORTB, 4, 0); /* ETXCK */ at91_set_a_periph(AT91_PIO_PORTB, 3, 0); /* ERXDV */ at91_set_a_periph(AT91_PIO_PORTB, 0, 0); /* ERX0 */ at91_set_a_periph(AT91_PIO_PORTB, 1, 0); /* ERX1 */ at91_set_a_periph(AT91_PIO_PORTB, 2, 0); /* ERXER */ at91_set_a_periph(AT91_PIO_PORTB, 7, 0); /* ETXEN */ at91_set_a_periph(AT91_PIO_PORTB, 9, 0); /* ETX0 */ at91_set_a_periph(AT91_PIO_PORTB, 10, 0); /* ETX1 */ at91_set_a_periph(AT91_PIO_PORTB, 5, 0); /* EMDIO */ at91_set_a_periph(AT91_PIO_PORTB, 6, 0); /* EMDC */ } if (has_emac1()) { /* Enable EMAC1 clock */ writel(1 << ATMEL_ID_EMAC1, &pmc->pcer); /* EMAC1 pins setup */ at91_set_b_periph(AT91_PIO_PORTC, 29, 0); /* ETXCK */ at91_set_b_periph(AT91_PIO_PORTC, 28, 0); /* ECRSDV */ at91_set_b_periph(AT91_PIO_PORTC, 20, 0); /* ERXO */ at91_set_b_periph(AT91_PIO_PORTC, 21, 0); /* ERX1 */ at91_set_b_periph(AT91_PIO_PORTC, 16, 0); /* ERXER */ at91_set_b_periph(AT91_PIO_PORTC, 27, 0); /* ETXEN */ at91_set_b_periph(AT91_PIO_PORTC, 18, 0); /* ETX0 */ at91_set_b_periph(AT91_PIO_PORTC, 19, 0); /* ETX1 */ at91_set_b_periph(AT91_PIO_PORTC, 31, 0); /* EMDIO */ at91_set_b_periph(AT91_PIO_PORTC, 30, 0); /* EMDC */ } #ifndef CONFIG_RMII /* Only emac0 support MII */ if (has_emac0()) { at91_set_a_periph(AT91_PIO_PORTB, 16, 0); /* ECRS */ at91_set_a_periph(AT91_PIO_PORTB, 17, 0); /* ECOL */ at91_set_a_periph(AT91_PIO_PORTB, 13, 0); /* ERX2 */ at91_set_a_periph(AT91_PIO_PORTB, 14, 0); /* ERX3 */ at91_set_a_periph(AT91_PIO_PORTB, 15, 0); /* ERXCK */ at91_set_a_periph(AT91_PIO_PORTB, 11, 0); /* ETX2 */ at91_set_a_periph(AT91_PIO_PORTB, 12, 0); /* ETX3 */ at91_set_a_periph(AT91_PIO_PORTB, 8, 0); /* ETXER */ } #endif }
void at91_macb_hw_init(void) { if (has_emac0()) { at91_periph_clk_enable(ATMEL_ID_EMAC0); /* EMAC0 pins setup */ at91_set_a_periph(AT91_PIO_PORTB, 4, 0); /* ETXCK */ at91_set_a_periph(AT91_PIO_PORTB, 3, 0); /* ERXDV */ at91_set_a_periph(AT91_PIO_PORTB, 0, 0); /* ERX0 */ at91_set_a_periph(AT91_PIO_PORTB, 1, 0); /* ERX1 */ at91_set_a_periph(AT91_PIO_PORTB, 2, 0); /* ERXER */ at91_set_a_periph(AT91_PIO_PORTB, 7, 0); /* ETXEN */ at91_set_a_periph(AT91_PIO_PORTB, 9, 0); /* ETX0 */ at91_set_a_periph(AT91_PIO_PORTB, 10, 0); /* ETX1 */ at91_set_a_periph(AT91_PIO_PORTB, 5, 0); /* EMDIO */ at91_set_a_periph(AT91_PIO_PORTB, 6, 0); /* EMDC */ } if (has_emac1()) { at91_periph_clk_enable(ATMEL_ID_EMAC1); /* EMAC1 pins setup */ at91_set_b_periph(AT91_PIO_PORTC, 29, 0); /* ETXCK */ at91_set_b_periph(AT91_PIO_PORTC, 28, 0); /* ECRSDV */ at91_set_b_periph(AT91_PIO_PORTC, 20, 0); /* ERXO */ at91_set_b_periph(AT91_PIO_PORTC, 21, 0); /* ERX1 */ at91_set_b_periph(AT91_PIO_PORTC, 16, 0); /* ERXER */ at91_set_b_periph(AT91_PIO_PORTC, 27, 0); /* ETXEN */ at91_set_b_periph(AT91_PIO_PORTC, 18, 0); /* ETX0 */ at91_set_b_periph(AT91_PIO_PORTC, 19, 0); /* ETX1 */ at91_set_b_periph(AT91_PIO_PORTC, 31, 0); /* EMDIO */ at91_set_b_periph(AT91_PIO_PORTC, 30, 0); /* EMDC */ } #ifndef CONFIG_RMII /* Only emac0 support MII */ if (has_emac0()) { at91_set_a_periph(AT91_PIO_PORTB, 16, 0); /* ECRS */ at91_set_a_periph(AT91_PIO_PORTB, 17, 0); /* ECOL */ at91_set_a_periph(AT91_PIO_PORTB, 13, 0); /* ERX2 */ at91_set_a_periph(AT91_PIO_PORTB, 14, 0); /* ERX3 */ at91_set_a_periph(AT91_PIO_PORTB, 15, 0); /* ERXCK */ at91_set_a_periph(AT91_PIO_PORTB, 11, 0); /* ETX2 */ at91_set_a_periph(AT91_PIO_PORTB, 12, 0); /* ETX3 */ at91_set_a_periph(AT91_PIO_PORTB, 8, 0); /* ETXER */ } #endif }
int board_eth_init(bd_t *bis) { int rc = 0; if (has_emac0()) rc = macb_eth_initialize(0, (void *)ATMEL_BASE_EMAC0, 0x00); return rc; }
int board_eth_init(bd_t *bis) { int rc = 0; #ifdef CONFIG_MACB if (has_emac0()) rc = macb_eth_initialize(0, (void *)ATMEL_BASE_EMAC0, 0x00); if (has_emac1()) rc = macb_eth_initialize(1, (void *)ATMEL_BASE_EMAC1, 0x00); #endif return rc; }
void at91_macb_hw_init(void) { at91_pmc_t *pmc = (at91_pmc_t *) ATMEL_BASE_PMC; struct at91_rstc *rstc = (struct at91_rstc *)ATMEL_BASE_RSTC; unsigned long erstl; erstl = readl(&rstc->mr) & AT91_RSTC_MR_ERSTL_MASK; /* Need to reset PHY -> 500ms reset */ writel(AT91_RSTC_KEY | AT91_RSTC_MR_ERSTL(13) | AT91_RSTC_MR_URSTEN, &rstc->mr); writel(AT91_RSTC_KEY | AT91_RSTC_CR_EXTRST, &rstc->cr); /* Wait for end hardware reset */ while (!(readl(&rstc->sr) & AT91_RSTC_SR_NRSTL)) ; /* Restore NRST value */ writel(AT91_RSTC_KEY | erstl | AT91_RSTC_MR_URSTEN, &rstc->mr); if (has_emac0()) { /* Enable EMAC0 clock */ writel(1 << ATMEL_ID_EMAC0, &pmc->pcer); /* EMAC0 pins setup */ at91_set_a_periph(AT91_PIO_PORTB, 4, 0); /* ETXCK */ at91_set_a_periph(AT91_PIO_PORTB, 3, 0); /* ERXDV */ at91_set_a_periph(AT91_PIO_PORTB, 0, 0); /* ERX0 */ at91_set_a_periph(AT91_PIO_PORTB, 1, 0); /* ERX1 */ at91_set_a_periph(AT91_PIO_PORTB, 2, 0); /* ERXER */ at91_set_a_periph(AT91_PIO_PORTB, 7, 0); /* ETXEN */ at91_set_a_periph(AT91_PIO_PORTB, 9, 0); /* ETX0 */ at91_set_a_periph(AT91_PIO_PORTB, 10, 0); /* ETX1 */ at91_set_a_periph(AT91_PIO_PORTB, 5, 0); /* EMDIO */ at91_set_a_periph(AT91_PIO_PORTB, 6, 0); /* EMDC */ } if (has_emac1()) { /* Enable EMAC1 clock */ writel(1 << ATMEL_ID_EMAC1, &pmc->pcer); /* EMAC1 pins setup */ at91_set_b_periph(AT91_PIO_PORTC, 29, 0); /* ETXCK */ at91_set_b_periph(AT91_PIO_PORTC, 28, 0); /* ECRSDV */ at91_set_b_periph(AT91_PIO_PORTC, 20, 0); /* ERXO */ at91_set_b_periph(AT91_PIO_PORTC, 21, 0); /* ERX1 */ at91_set_b_periph(AT91_PIO_PORTC, 16, 0); /* ERXER */ at91_set_b_periph(AT91_PIO_PORTC, 27, 0); /* ETXEN */ at91_set_b_periph(AT91_PIO_PORTC, 18, 0); /* ETX0 */ at91_set_b_periph(AT91_PIO_PORTC, 19, 0); /* ETX1 */ at91_set_b_periph(AT91_PIO_PORTC, 31, 0); /* EMDIO */ at91_set_b_periph(AT91_PIO_PORTC, 30, 0); /* EMDC */ } #ifndef CONFIG_RMII /* Only emac0 support MII */ if (has_emac0()) { at91_set_a_periph(AT91_PIO_PORTB, 16, 0); /* ECRS */ at91_set_a_periph(AT91_PIO_PORTB, 17, 0); /* ECOL */ at91_set_a_periph(AT91_PIO_PORTB, 13, 0); /* ERX2 */ at91_set_a_periph(AT91_PIO_PORTB, 14, 0); /* ERX3 */ at91_set_a_periph(AT91_PIO_PORTB, 15, 0); /* ERXCK */ at91_set_a_periph(AT91_PIO_PORTB, 11, 0); /* ETX2 */ at91_set_a_periph(AT91_PIO_PORTB, 12, 0); /* ETX3 */ at91_set_a_periph(AT91_PIO_PORTB, 8, 0); /* ETXER */ } #endif }