lkml.org 
[lkml]   [2024]   [Mar]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 6.6 06/52] net: stmmac: dwmac-starfive: Add support for JH7100 SoC
    Date
    From: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>

    [ Upstream commit 8d4597b871210429bda0f5c3a8816b7d9b6daf7e ]

    Add a missing quirk to enable support for the StarFive JH7100 SoC.

    Additionally, for greater flexibility in operation, allow using the
    rgmii-rxid and rgmii-txid phy modes.

    Co-developed-by: Emil Renner Berthing <kernel@esmil.dk>
    Signed-off-by: Emil Renner Berthing <kernel@esmil.dk>
    Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
    Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/net/ethernet/stmicro/stmmac/Kconfig | 6 ++--
    .../ethernet/stmicro/stmmac/dwmac-starfive.c | 32 ++++++++++++++++---
    2 files changed, 31 insertions(+), 7 deletions(-)

    diff --git a/drivers/net/ethernet/stmicro/stmmac/Kconfig b/drivers/net/ethernet/stmicro/stmmac/Kconfig
    index 25f2d42de406d..92d7d5a00b84c 100644
    --- a/drivers/net/ethernet/stmicro/stmmac/Kconfig
    +++ b/drivers/net/ethernet/stmicro/stmmac/Kconfig
    @@ -165,9 +165,9 @@ config DWMAC_STARFIVE
    help
    Support for ethernet controllers on StarFive RISC-V SoCs

    - This selects the StarFive platform specific glue layer support for
    - the stmmac device driver. This driver is used for StarFive JH7110
    - ethernet controller.
    + This selects the StarFive platform specific glue layer support
    + for the stmmac device driver. This driver is used for the
    + StarFive JH7100 and JH7110 ethernet controllers.

    config DWMAC_STI
    tristate "STi GMAC support"
    diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-starfive.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-starfive.c
    index 9289bb87c3e3a..0c713257193de 100644
    --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-starfive.c
    +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-starfive.c
    @@ -15,13 +15,20 @@

    #include "stmmac_platform.h"

    -#define STARFIVE_DWMAC_PHY_INFT_RGMII 0x1
    -#define STARFIVE_DWMAC_PHY_INFT_RMII 0x4
    -#define STARFIVE_DWMAC_PHY_INFT_FIELD 0x7U
    +#define STARFIVE_DWMAC_PHY_INFT_RGMII 0x1
    +#define STARFIVE_DWMAC_PHY_INFT_RMII 0x4
    +#define STARFIVE_DWMAC_PHY_INFT_FIELD 0x7U
    +
    +#define JH7100_SYSMAIN_REGISTER49_DLYCHAIN 0xc8
    +
    +struct starfive_dwmac_data {
    + unsigned int gtxclk_dlychain;
    +};

    struct starfive_dwmac {
    struct device *dev;
    struct clk *clk_tx;
    + const struct starfive_dwmac_data *data;
    };

    static void starfive_dwmac_fix_mac_speed(void *priv, unsigned int speed, unsigned int mode)
    @@ -67,6 +74,8 @@ static int starfive_dwmac_set_mode(struct plat_stmmacenet_data *plat_dat)

    case PHY_INTERFACE_MODE_RGMII:
    case PHY_INTERFACE_MODE_RGMII_ID:
    + case PHY_INTERFACE_MODE_RGMII_RXID:
    + case PHY_INTERFACE_MODE_RGMII_TXID:
    mode = STARFIVE_DWMAC_PHY_INFT_RGMII;
    break;

    @@ -89,6 +98,14 @@ static int starfive_dwmac_set_mode(struct plat_stmmacenet_data *plat_dat)
    if (err)
    return dev_err_probe(dwmac->dev, err, "error setting phy mode\n");

    + if (dwmac->data) {
    + err = regmap_write(regmap, JH7100_SYSMAIN_REGISTER49_DLYCHAIN,
    + dwmac->data->gtxclk_dlychain);
    + if (err)
    + return dev_err_probe(dwmac->dev, err,
    + "error selecting gtxclk delay chain\n");
    + }
    +
    return 0;
    }

    @@ -114,6 +131,8 @@ static int starfive_dwmac_probe(struct platform_device *pdev)
    if (!dwmac)
    return -ENOMEM;

    + dwmac->data = device_get_match_data(&pdev->dev);
    +
    dwmac->clk_tx = devm_clk_get_enabled(&pdev->dev, "tx");
    if (IS_ERR(dwmac->clk_tx))
    return dev_err_probe(&pdev->dev, PTR_ERR(dwmac->clk_tx),
    @@ -150,8 +169,13 @@ static int starfive_dwmac_probe(struct platform_device *pdev)
    return 0;
    }

    +static const struct starfive_dwmac_data jh7100_data = {
    + .gtxclk_dlychain = 4,
    +};
    +
    static const struct of_device_id starfive_dwmac_match[] = {
    - { .compatible = "starfive,jh7110-dwmac" },
    + { .compatible = "starfive,jh7100-dwmac", .data = &jh7100_data },
    + { .compatible = "starfive,jh7110-dwmac" },
    { /* sentinel */ }
    };
    MODULE_DEVICE_TABLE(of, starfive_dwmac_match);
    --
    2.43.0

    \
     
     \ /
      Last update: 2024-05-27 16:15    [W:2.979 / U:0.832 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site