[U-Boot] [PATCH 15/26] net: mt7628-eth: remove hardcoded gpio settings and regmap-based phy reset
Stefan Roese
sr at denx.de
Wed Aug 28 13:32:13 UTC 2019
On 28.08.19 08:38, Weijie Gao wrote:
> This patch removes hardcoded gpio settings as they have been replaced by
> pinctrl in dts, and also replaces regmap-based phy reset with a more
> generic reset controller.
>
> Signed-off-by: Weijie Gao <weijie.gao at mediatek.com>
> ---
> drivers/net/mt7628-eth.c | 45 +++++++---------------------------------
> 1 file changed, 8 insertions(+), 37 deletions(-)
Very nice diffstat with this patch. :)
Reviewed-by: Stefan Roese <sr at denx.de>
Thanks,
Stefan
> diff --git a/drivers/net/mt7628-eth.c b/drivers/net/mt7628-eth.c
> index 7833b2f47a..4675b0f003 100644
> --- a/drivers/net/mt7628-eth.c
> +++ b/drivers/net/mt7628-eth.c
> @@ -18,23 +18,12 @@
> #include <malloc.h>
> #include <miiphy.h>
> #include <net.h>
> -#include <regmap.h>
> -#include <syscon.h>
> +#include <reset.h>
> #include <wait_bit.h>
> #include <asm/io.h>
> #include <linux/bitfield.h>
> #include <linux/err.h>
>
> -/* System controller register */
> -#define MT7628_RSTCTRL_REG 0x34
> -#define RSTCTRL_EPHY_RST BIT(24)
> -
> -#define MT7628_AGPIO_CFG_REG 0x3c
> -#define MT7628_EPHY_GPIO_AIO_EN GENMASK(20, 17)
> -#define MT7628_EPHY_P0_DIS BIT(16)
> -
> -#define MT7628_GPIO2_MODE_REG 0x64
> -
> /* Ethernet frame engine register */
> #define PDMA_RELATED 0x0800
>
> @@ -137,7 +126,6 @@ struct fe_tx_dma {
> struct mt7628_eth_dev {
> void __iomem *base; /* frame engine base address */
> void __iomem *eth_sw_base; /* switch base address */
> - struct regmap *sysctrl_regmap; /* system-controller reg-map */
>
> struct mii_dev *bus;
>
> @@ -150,6 +138,8 @@ struct mt7628_eth_dev {
> int rx_dma_idx;
> /* Point to the next TXD in TXD Ring0 CPU wants to use */
> int tx_dma_idx;
> +
> + struct reset_ctl rst_ephy;
> };
>
> static int mdio_wait_read(struct mt7628_eth_dev *priv, u32 mask, bool mask_set)
> @@ -301,20 +291,9 @@ static void rt305x_esw_init(struct mt7628_eth_dev *priv)
> /* 1us cycle number=125 (FE's clock=125Mhz) */
> writel(0x7d000000, base + MT7628_SWITCH_BMU_CTRL);
>
> - /* Configure analog GPIO setup */
> - regmap_update_bits(priv->sysctrl_regmap, MT7628_AGPIO_CFG_REG,
> - MT7628_EPHY_P0_DIS, MT7628_EPHY_GPIO_AIO_EN);
> -
> /* Reset PHY */
> - regmap_update_bits(priv->sysctrl_regmap, MT7628_RSTCTRL_REG,
> - 0, RSTCTRL_EPHY_RST);
> - regmap_update_bits(priv->sysctrl_regmap, MT7628_RSTCTRL_REG,
> - RSTCTRL_EPHY_RST, 0);
> - mdelay(10);
> -
> - /* Set P0 EPHY LED mode */
> - regmap_update_bits(priv->sysctrl_regmap, MT7628_GPIO2_MODE_REG,
> - 0x0ffc0ffc, 0x05540554);
> + reset_assert(&priv->rst_ephy);
> + reset_deassert(&priv->rst_ephy);
> mdelay(10);
>
> mt7628_ephy_init(priv);
> @@ -558,7 +537,6 @@ static void mt7628_eth_stop(struct udevice *dev)
> static int mt7628_eth_probe(struct udevice *dev)
> {
> struct mt7628_eth_dev *priv = dev_get_priv(dev);
> - struct udevice *syscon;
> struct mii_dev *bus;
> int ret;
> int i;
> @@ -573,20 +551,13 @@ static int mt7628_eth_probe(struct udevice *dev)
> if (IS_ERR(priv->eth_sw_base))
> return PTR_ERR(priv->eth_sw_base);
>
> - /* Get system controller regmap */
> - ret = uclass_get_device_by_phandle(UCLASS_SYSCON, dev,
> - "syscon", &syscon);
> + /* Reset controller */
> + ret = reset_get_by_name(dev, "ephy", &priv->rst_ephy);
> if (ret) {
> - pr_err("unable to find syscon device\n");
> + pr_err("unable to find reset controller for ethernet PHYs\n");
> return ret;
> }
>
> - priv->sysctrl_regmap = syscon_get_regmap(syscon);
> - if (!priv->sysctrl_regmap) {
> - pr_err("unable to find regmap\n");
> - return -ENODEV;
> - }
> -
> /* Put rx and tx rings into KSEG1 area (uncached) */
> priv->tx_ring = (struct fe_tx_dma *)
> KSEG1ADDR(memalign(ARCH_DMA_MINALIGN,
>
Viele Grüße,
Stefan
--
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr at denx.de
More information about the U-Boot
mailing list