From cec29b519597a7742df337007c53306ed29273c0 Mon Sep 17 00:00:00 2001 From: Vandhiadevan Karunamoorthy Date: Wed, 1 Jul 2020 14:07:12 +0530 Subject: [PATCH] ipq5018: Add 8033 phy support in MP02.1 RDP This changes add 8033 phy support in MP02.1(Ap & Db) RDP in tiny nor flash Signed-off-by: Vandhiadevan Karunamoorthy Change-Id: Ib35faba4321c70fed007c923ff0f5e618fad0276 --- arch/arm/dts/ipq5018-db-mp02.1.dts | 7 +++++++ arch/arm/dts/ipq5018-mp02.1.dts | 7 +++++++ board/qca/arm/ipq5018/ipq5018.c | 17 +++++++++++++++++ board/qca/arm/ipq5018/ipq5018.h | 1 + configs/ipq5018_tiny_defconfig | 5 +++++ drivers/net/ipq5018/ipq5018_gmac.c | 4 +++- include/configs/ipq5018.h | 3 +-- 7 files changed, 41 insertions(+), 3 deletions(-) diff --git a/arch/arm/dts/ipq5018-db-mp02.1.dts b/arch/arm/dts/ipq5018-db-mp02.1.dts index 8b440efda1..610de0d38d 100644 --- a/arch/arm/dts/ipq5018-db-mp02.1.dts +++ b/arch/arm/dts/ipq5018-db-mp02.1.dts @@ -58,6 +58,7 @@ }; gmac_cfg { + ext_mdio_gpio = <36 37>; gephy_led = <46>; gmac1_cfg { @@ -65,6 +66,12 @@ base = <0x39C00000>; phy_address = <7>; }; + gmac2_cfg { + unit = <1>; + base = <0x39D00000>; + phy_address = <4>; + 8033_gpio = <26>; + }; }; }; diff --git a/arch/arm/dts/ipq5018-mp02.1.dts b/arch/arm/dts/ipq5018-mp02.1.dts index 91adb55239..f0663e3648 100644 --- a/arch/arm/dts/ipq5018-mp02.1.dts +++ b/arch/arm/dts/ipq5018-mp02.1.dts @@ -58,6 +58,7 @@ }; gmac_cfg { + ext_mdio_gpio = <36 37>; gephy_led = <46>; gmac1_cfg { @@ -65,5 +66,11 @@ base = <0x39C00000>; phy_address = <7>; }; + gmac2_cfg { + unit = <1>; + base = <0x39D00000>; + phy_address = <4>; + 8033_gpio = <26>; + }; }; }; diff --git a/board/qca/arm/ipq5018/ipq5018.c b/board/qca/arm/ipq5018/ipq5018.c index f3e939c205..83e5ac6988 100644 --- a/board/qca/arm/ipq5018/ipq5018.c +++ b/board/qca/arm/ipq5018/ipq5018.c @@ -651,6 +651,18 @@ static void reset_napa_phy_gpio(int gpio) writel(0x2, GPIO_IN_OUT_ADDR(gpio)); } +static void reset_8033_phy_gpio(int gpio) +{ + unsigned int *phy_8033_gpio_base; + + ppe_uniphy_refclk_set(); + phy_8033_gpio_base = (unsigned int *)GPIO_CONFIG_ADDR(gpio); + writel(0x2C1, phy_8033_gpio_base); + writel(0x0, GPIO_IN_OUT_ADDR(gpio)); + mdelay(500); + writel(0x2, GPIO_IN_OUT_ADDR(gpio)); +} + static void reset_s17c_switch_gpio(int gpio) { unsigned int *switch_gpio_base = @@ -1015,6 +1027,11 @@ int board_eth_init(bd_t *bis) if (gmac_cfg[loop].phy_napa_gpio){ reset_napa_phy_gpio(gmac_cfg[loop].phy_napa_gpio); } + gmac_cfg[loop].phy_8033_gpio = fdtdec_get_uint(gd->fdt_blob, + offset, "8033_gpio", 0); + if (gmac_cfg[loop].phy_8033_gpio){ + reset_8033_phy_gpio(gmac_cfg[loop].phy_8033_gpio); + } switch_gpio = fdtdec_get_uint(gd->fdt_blob, offset, "switch_gpio", 0); if (switch_gpio) { reset_s17c_switch_gpio(switch_gpio); diff --git a/board/qca/arm/ipq5018/ipq5018.h b/board/qca/arm/ipq5018/ipq5018.h index b6fcaa9799..057516f8d3 100644 --- a/board/qca/arm/ipq5018/ipq5018.h +++ b/board/qca/arm/ipq5018/ipq5018.h @@ -479,6 +479,7 @@ typedef struct { int phy_addr; int phy_interface_mode; int phy_napa_gpio; + int phy_8033_gpio; int phy_type; u32 mac_pwr; int ipq_swith; diff --git a/configs/ipq5018_tiny_defconfig b/configs/ipq5018_tiny_defconfig index 2a2044c44c..e0bded3b7d 100644 --- a/configs/ipq5018_tiny_defconfig +++ b/configs/ipq5018_tiny_defconfig @@ -295,6 +295,11 @@ CONFIG_REQUIRE_SERIAL_CONSOLE=y # File systems # +# +# Ethernet PHY +# +CONFIG_QCA8033_PHY=y + # # Library routines diff --git a/drivers/net/ipq5018/ipq5018_gmac.c b/drivers/net/ipq5018/ipq5018_gmac.c index e70185adde..ce4ed415ac 100644 --- a/drivers/net/ipq5018/ipq5018_gmac.c +++ b/drivers/net/ipq5018/ipq5018_gmac.c @@ -89,7 +89,7 @@ static void ipq_eth_mac_cfg(struct eth_device *dev) ipq_mac_framefilter = PROMISCUOUS_MODE_ON; if (priv->mac_unit) { - if (priv->phy_type == QCA8081_1_1_PHY|| priv->phy_type == QCA8033_PHY) + if (priv->phy_type == QCA8081_1_1_PHY || priv->phy_type == QCA8033_PHY) speed = priv->speed; ipq_mac_cfg |= (FRAME_BURST_ENABLE | JUMBO_FRAME_ENABLE | JABBER_DISABLE | @@ -747,6 +747,7 @@ int ipq_gmac_init(ipq_gmac_board_cfg_t *gmac_cfg) &ipq_gmac_macs[i]->ops, ipq_gmac_macs[i]->phy_address); break; +#ifdef CONFIG_QCA8033_PHY /* * 1G PHY */ @@ -756,6 +757,7 @@ int ipq_gmac_init(ipq_gmac_board_cfg_t *gmac_cfg) &ipq_gmac_macs[i]->ops, ipq_gmac_macs[i]->phy_address); break; +#endif case S17C: break; default: diff --git a/include/configs/ipq5018.h b/include/configs/ipq5018.h index 8cc9ccb34d..e4cd478351 100644 --- a/include/configs/ipq5018.h +++ b/include/configs/ipq5018.h @@ -242,10 +242,9 @@ extern loff_t board_env_size; #define CONFIG_IPQ_NO_MACS 2 /* - * PHY + * GEPHY */ #define CONFIG_GEPHY -#define CONFIG_QCA8033_PHY /* * USB Support