V2: - put the PHY reset/init code on a proper place, so now in the config file PHY reset could be enabled/disabled if nRST signal is not long enough.
Signed-off-by: Asen Dimov <[email protected]> --- board/ronetix/pm9g45/pm9g45.c | 50 +++++++++++++++++++++++++++-------------- include/configs/pm9g45.h | 5 ++++ 2 files changed, 38 insertions(+), 17 deletions(-) diff --git a/board/ronetix/pm9g45/pm9g45.c b/board/ronetix/pm9g45/pm9g45.c index 79b7c9d..d9e16b9 100644 --- a/board/ronetix/pm9g45/pm9g45.c +++ b/board/ronetix/pm9g45/pm9g45.c @@ -108,23 +108,6 @@ static void pm9g45_macb_hw_init(void) /* Enable clock */ writel(1 << AT91SAM9G45_ID_EMAC, &pmc->pcer); - /* - * Disable pull-up on: - * RXDV (PA15) => PHY normal mode (not Test mode) - * ERX0 (PA12) => PHY ADDR0 - * ERX1 (PA13) => PHY ADDR1 => PHYADDR = 0x0 - * - * PHY has internal pull-down - */ - at91_set_pio_pullup(AT91_PIO_PORTA, 15, 0); - at91_set_pio_pullup(AT91_PIO_PORTA, 12, 0); - at91_set_pio_pullup(AT91_PIO_PORTA, 13, 0); - - /* Re-enable pull-up */ - at91_set_pio_pullup(AT91_PIO_PORTA, 15, 1); - at91_set_pio_pullup(AT91_PIO_PORTA, 12, 1); - at91_set_pio_pullup(AT91_PIO_PORTA, 13, 1); - at91_macb_hw_init(); } #endif @@ -174,6 +157,39 @@ void dram_init_banksize(void) #ifdef CONFIG_RESET_PHY_R void reset_phy(void) { + at91_rstc_t *rstc = (at91_rstc_t *) AT91_RSTC_BASE; + unsigned long erstl; + + /* + * Disable pull-up on: + * RXDV (PA15) => PHY normal mode (not Test mode) + * ERX0 (PA12) => PHY ADDR0 + * ERX1 (PA13) => PHY ADDR1 => PHYADDR = 0x0 + * + * PHY has internal pull-down + */ + at91_set_pio_pullup(AT91_PIO_PORTA, 15, 0); + at91_set_pio_pullup(AT91_PIO_PORTA, 12, 0); + at91_set_pio_pullup(AT91_PIO_PORTA, 13, 0); + + erstl = readl(&rstc->mr) & AT91_RSTC_MR_ERSTL_MASK; + + /* Need to reset PHY -> 500ms reset */ + writel(AT91_RSTC_KEY | AT91_RSTC_MR_ERSTL(0x0D) | + 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); + + /* Re-enable pull-up */ + at91_set_pio_pullup(AT91_PIO_PORTA, 15, 1); + at91_set_pio_pullup(AT91_PIO_PORTA, 12, 1); + at91_set_pio_pullup(AT91_PIO_PORTA, 13, 1); + #ifdef CONFIG_MACB /* * Initialize ethernet HW addr prior to starting Linux, diff --git a/include/configs/pm9g45.h b/include/configs/pm9g45.h index ec51ccf..4d8089f 100644 --- a/include/configs/pm9g45.h +++ b/include/configs/pm9g45.h @@ -125,6 +125,11 @@ #define CONFIG_NET_MULTI 1 #define CONFIG_NET_RETRY_COUNT 20 #define CONFIG_RESET_PHY_R 1 +#define CONFIG_MACB_SEARCH_PHY +#define CONFIG_CMD_MII +#define CONFIG_OVERWRITE_ETHADDR_ONCE +/* MAC is Organizationally Unique Identifier + 3 octects user numbers */ +#define CONFIG_ETHADDR "02:00:00:fe:ed:00" /* USB */ #define CONFIG_USB_ATMEL -- 1.5.5.6 _______________________________________________ U-Boot mailing list [email protected] http://lists.denx.de/mailman/listinfo/u-boot

