diff options
author | Vinod Koul <vkoul@kernel.org> | 2018-11-30 13:00:04 +0530 |
---|---|---|
committer | Vinod Koul <vkoul@kernel.org> | 2018-12-07 15:48:54 +0530 |
commit | 5f78bc7b8eb408cfb45bcb46d0a01b43c22a7a6e (patch) | |
tree | 156c8af9c138ee4c5afaf47af488f2d8b534e081 | |
parent | 2b43fd8118fcf53f5c6dead65d437ed15f8a5bfc (diff) |
modify the dts based on dowmstream and change the delay in phy drivertopic/eth_qca8k
Signed-off-by: Vinod Koul <vkoul@kernel.org>
-rw-r--r-- | arch/arm64/boot/dts/qcom/qcs404-evb-4000.dts | 14 | ||||
-rw-r--r-- | drivers/net/dsa/qca8k.c | 22 | ||||
-rw-r--r-- | drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c | 24 |
3 files changed, 42 insertions, 18 deletions
diff --git a/arch/arm64/boot/dts/qcom/qcs404-evb-4000.dts b/arch/arm64/boot/dts/qcom/qcs404-evb-4000.dts index e59d171fa7b6..0484cbff7d87 100644 --- a/arch/arm64/boot/dts/qcom/qcs404-evb-4000.dts +++ b/arch/arm64/boot/dts/qcom/qcs404-evb-4000.dts @@ -56,21 +56,23 @@ reg = <2>; }; - switch0@0 { + switch0@16 { compatible = "qca,qca8334"; #address-cells = <1>; #size-cells = <0>; - reg = <0>; + reg = <16>; ports { #address-cells = <1>; #size-cells = <0>; - port@0 { + cpu_port1: port@0 { reg = <0>; label = "cpu"; ethernet = <ðernet>; phy-mode = "rgmii"; + rx-delay-disable; + tx-delay-disable; fixed-link { speed = <1000>; full-duplex; @@ -78,14 +80,16 @@ }; port@2 { - reg = <2>; + reg = <1>; label = "bottom"; + cpu = <&cpu_port1>; phy-handle = <&phy_port2>; }; port@3 { - reg = <3>; + reg = <2>; label = "top"; + cpu = <&cpu_port1>; phy-handle = <&phy_port3>; }; }; diff --git a/drivers/net/dsa/qca8k.c b/drivers/net/dsa/qca8k.c index 7e97e620bd44..5dc7b44fc720 100644 --- a/drivers/net/dsa/qca8k.c +++ b/drivers/net/dsa/qca8k.c @@ -420,7 +420,9 @@ qca8k_mib_init(struct qca8k_priv *priv) static int qca8k_set_pad_ctrl(struct qca8k_priv *priv, int port, int mode) { - u32 reg; + u32 reg, val; + struct dsa_switch *ds = priv->ds; + bool rx_delay_disable, tx_delay_disable; switch (port) { case 0: @@ -439,16 +441,32 @@ qca8k_set_pad_ctrl(struct qca8k_priv *priv, int port, int mode) */ switch (mode) { case PHY_INTERFACE_MODE_RGMII: + rx_delay_disable = of_property_read_bool(ds->dst->cpu_dp->dn, + "rx-delay-disable"); + tx_delay_disable = of_property_read_bool(ds->dst->cpu_dp->dn, + "tx-delay-disable"); + + pr_err("VK: read delays as %d:%d\n", rx_delay_disable, tx_delay_disable); + val = QCA8K_PORT_PAD_RGMII_EN; + if (!rx_delay_disable) + val |= QCA8K_PORT_PAD_RGMII_RX_DELAY(3); + if (!tx_delay_disable) + val |= QCA8K_PORT_PAD_RGMII_TX_DELAY(3); + +#if 0 qca8k_write(priv, reg, QCA8K_PORT_PAD_RGMII_EN | QCA8K_PORT_PAD_RGMII_TX_DELAY(3) | QCA8K_PORT_PAD_RGMII_RX_DELAY(3)); +#endif + qca8k_write(priv, reg, val); /* According to the datasheet, RGMII delay is enabled through * PORT5_PAD_CTRL for all ports, rather than individual port * registers */ - qca8k_write(priv, QCA8K_REG_PORT5_PAD_CTRL, + if (!rx_delay_disable) + qca8k_write(priv, QCA8K_REG_PORT5_PAD_CTRL, QCA8K_PORT_PAD_RGMII_RX_DELAY_EN); break; case PHY_INTERFACE_MODE_SGMII: diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c index 61db472b432f..2fa621e55207 100644 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c @@ -110,24 +110,24 @@ static void rgmii_updatel(struct qcom_ethqos *ethqos, static void rgmii_dump(struct qcom_ethqos *ethqos) { - dev_dbg(ðqos->pdev->dev, "Rgmii register dump\n"); - dev_dbg(ðqos->pdev->dev, "RGMII_IO_MACRO_CONFIG: %x\n", + dev_err(ðqos->pdev->dev, "Rgmii register dump\n"); + dev_err(ðqos->pdev->dev, "RGMII_IO_MACRO_CONFIG: %x\n", rgmii_readl(ethqos, RGMII_IO_MACRO_CONFIG)); - dev_dbg(ðqos->pdev->dev, "SDCC_HC_REG_DLL_CONFIG: %x\n", + dev_err(ðqos->pdev->dev, "SDCC_HC_REG_DLL_CONFIG: %x\n", rgmii_readl(ethqos, SDCC_HC_REG_DLL_CONFIG)); - dev_dbg(ðqos->pdev->dev, "SDCC_HC_REG_DDR_CONFIG: %x\n", + dev_err(ðqos->pdev->dev, "SDCC_HC_REG_DDR_CONFIG: %x\n", rgmii_readl(ethqos, SDCC_HC_REG_DDR_CONFIG)); - dev_dbg(ðqos->pdev->dev, "SDCC_HC_REG_DLL_CONFIG2: %x\n", + dev_err(ðqos->pdev->dev, "SDCC_HC_REG_DLL_CONFIG2: %x\n", rgmii_readl(ethqos, SDCC_HC_REG_DLL_CONFIG2)); - dev_dbg(ðqos->pdev->dev, "SDC4_STATUS: %x\n", + dev_err(ðqos->pdev->dev, "SDC4_STATUS: %x\n", rgmii_readl(ethqos, SDC4_STATUS)); - dev_dbg(ðqos->pdev->dev, "SDCC_USR_CTL: %x\n", + dev_err(ðqos->pdev->dev, "SDCC_USR_CTL: %x\n", rgmii_readl(ethqos, SDCC_USR_CTL)); - dev_dbg(ðqos->pdev->dev, "RGMII_IO_MACRO_CONFIG2: %x\n", + dev_err(ðqos->pdev->dev, "RGMII_IO_MACRO_CONFIG2: %x\n", rgmii_readl(ethqos, RGMII_IO_MACRO_CONFIG2)); - dev_dbg(ðqos->pdev->dev, "RGMII_IO_MACRO_DEBUG1: %x\n", + dev_err(ðqos->pdev->dev, "RGMII_IO_MACRO_DEBUG1: %x\n", rgmii_readl(ethqos, RGMII_IO_MACRO_DEBUG1)); - dev_dbg(ðqos->pdev->dev, "EMAC_SYSTEM_LOW_POWER_DEBUG: %x\n", + dev_err(ðqos->pdev->dev, "EMAC_SYSTEM_LOW_POWER_DEBUG: %x\n", rgmii_readl(ethqos, EMAC_SYSTEM_LOW_POWER_DEBUG)); } @@ -451,6 +451,8 @@ static void ethqos_set_phy_delay(struct mii_bus *mii, unsigned int addr) { unsigned int data, tx_delay = 0, rx_delay = 0; + pr_err("VK: ethqos_set_phy_delay\n"); + /* set phy registers with delay passed */ mii->write(mii, addr, PHY_DEBUG_PORT_ADDR, PHY_TX_DELAY); @@ -537,7 +539,7 @@ static int qcom_ethqos_probe(struct platform_device *pdev) plat_dat->has_gmac4 = 1; plat_dat->pmt = 1; plat_dat->tso_en = of_property_read_bool(np, "snps,tso"); - plat_dat->set_phy_quirk = ethqos_set_phy_delay; + //plat_dat->set_phy_quirk = ethqos_set_phy_delay; ret = stmmac_dvr_probe(&pdev->dev, plat_dat, &stmmac_res); if (ret) |