board: stm32f746-disco: Get MII/RMII phy_mode from DT
authorPatrice Chotard <patrice.chotard@st.com>
Fri, 22 Feb 2019 14:04:44 +0000 (15:04 +0100)
committerPatrice Chotard <patrice.chotard@st.com>
Tue, 23 Apr 2019 13:31:48 +0000 (15:31 +0200)
This is needed to make ethernet work on stm32f746-eval which
uses MII mode.

Signed-off-by: Patrice Chotard <patrice.chotard@st.com>
Acked-by: Joe Hershberger <joe.hershberger@ni.com>
board/st/stm32f746-disco/stm32f746-disco.c

index 7c9b1ad82aa14a01df24a50366f113ab81aea686..e89ed2153bc3894148760da5d1f688dbf1489443 100644 (file)
@@ -7,6 +7,8 @@
 #include <common.h>
 #include <dm.h>
 #include <lcd.h>
+#include <miiphy.h>
+#include <phy_interface.h>
 #include <ram.h>
 #include <spl.h>
 #include <splash.h>
@@ -123,8 +125,25 @@ int board_init(void)
        gd->bd->bi_boot_params = gd->bd->bi_dram[0].start + 0x100;
 
 #ifdef CONFIG_ETH_DESIGNWARE
-       /* Set >RMII mode */
-       STM32_SYSCFG->pmc |= SYSCFG_PMC_MII_RMII_SEL;
+       const char *phy_mode;
+       int node;
+
+       node = fdt_node_offset_by_compatible(gd->fdt_blob, 0, "st,stm32-dwmac");
+       if (node < 0)
+               return -1;
+
+       phy_mode = fdt_getprop(gd->fdt_blob, node, "phy-mode", NULL);
+
+       switch (phy_get_interface_by_name(phy_mode)) {
+       case PHY_INTERFACE_MODE_RMII:
+               STM32_SYSCFG->pmc |= SYSCFG_PMC_MII_RMII_SEL;
+               break;
+       case PHY_INTERFACE_MODE_MII:
+               STM32_SYSCFG->pmc &= ~SYSCFG_PMC_MII_RMII_SEL;
+               break;
+       default:
+               printf("PHY interface %s not supported !\n", phy_mode);
+       }
 #endif
 
 #if defined(CONFIG_CMD_BMP)