lkml.org 
[lkml]   [2020]   [Jun]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 5.7 235/274] net: ethernet: fec: move GPR register offset and bit into DT
    Date
    From: Fugang Duan <fugang.duan@nxp.com>

    [ Upstream commit 8a448bf832af537d26aa557d183a16943dce4510 ]

    The commit da722186f654 (net: fec: set GPR bit on suspend by DT
    configuration) set the GPR reigster offset and bit in driver for
    wake on lan feature.

    But it introduces two issues here:
    - one SOC has two instances, they have different bit
    - different SOCs may have different offset and bit

    So to support wake-on-lan feature on other i.MX platforms, it should
    configure the GPR reigster offset and bit from DT.

    So the patch is to improve the commit da722186f654 (net: fec: set GPR
    bit on suspend by DT configuration) to support multiple ethernet
    instances on i.MX series.

    v2:
    * switch back to store the quirks bitmask in driver_data
    v3:
    * suggested by Sascha Hauer, use a struct fec_devinfo for
    abstracting differences between different hardware variants,
    it can give more freedom to describe the differences.

    Signed-off-by: Fugang Duan <fugang.duan@nxp.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/net/ethernet/freescale/fec_main.c | 24 +++++++++++------------
    1 file changed, 12 insertions(+), 12 deletions(-)

    diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c
    index dc6f8763a5d4..2840dbad25cb 100644
    --- a/drivers/net/ethernet/freescale/fec_main.c
    +++ b/drivers/net/ethernet/freescale/fec_main.c
    @@ -88,8 +88,6 @@ static void fec_enet_itr_coal_init(struct net_device *ndev);

    struct fec_devinfo {
    u32 quirks;
    - u8 stop_gpr_reg;
    - u8 stop_gpr_bit;
    };

    static const struct fec_devinfo fec_imx25_info = {
    @@ -112,8 +110,6 @@ static const struct fec_devinfo fec_imx6q_info = {
    FEC_QUIRK_HAS_BUFDESC_EX | FEC_QUIRK_HAS_CSUM |
    FEC_QUIRK_HAS_VLAN | FEC_QUIRK_ERR006358 |
    FEC_QUIRK_HAS_RACC,
    - .stop_gpr_reg = 0x34,
    - .stop_gpr_bit = 27,
    };

    static const struct fec_devinfo fec_mvf600_info = {
    @@ -3452,19 +3448,23 @@ static int fec_enet_get_irq_cnt(struct platform_device *pdev)
    }

    static int fec_enet_init_stop_mode(struct fec_enet_private *fep,
    - struct fec_devinfo *dev_info,
    struct device_node *np)
    {
    struct device_node *gpr_np;
    + u32 out_val[3];
    int ret = 0;

    - if (!dev_info)
    - return 0;
    -
    - gpr_np = of_parse_phandle(np, "gpr", 0);
    + gpr_np = of_parse_phandle(np, "fsl,stop-mode", 0);
    if (!gpr_np)
    return 0;

    + ret = of_property_read_u32_array(np, "fsl,stop-mode", out_val,
    + ARRAY_SIZE(out_val));
    + if (ret) {
    + dev_dbg(&fep->pdev->dev, "no stop mode property\n");
    + return ret;
    + }
    +
    fep->stop_gpr.gpr = syscon_node_to_regmap(gpr_np);
    if (IS_ERR(fep->stop_gpr.gpr)) {
    dev_err(&fep->pdev->dev, "could not find gpr regmap\n");
    @@ -3473,8 +3473,8 @@ static int fec_enet_init_stop_mode(struct fec_enet_private *fep,
    goto out;
    }

    - fep->stop_gpr.reg = dev_info->stop_gpr_reg;
    - fep->stop_gpr.bit = dev_info->stop_gpr_bit;
    + fep->stop_gpr.reg = out_val[1];
    + fep->stop_gpr.bit = out_val[2];

    out:
    of_node_put(gpr_np);
    @@ -3551,7 +3551,7 @@ fec_probe(struct platform_device *pdev)
    if (of_get_property(np, "fsl,magic-packet", NULL))
    fep->wol_flag |= FEC_WOL_HAS_MAGIC_PACKET;

    - ret = fec_enet_init_stop_mode(fep, dev_info, np);
    + ret = fec_enet_init_stop_mode(fep, np);
    if (ret)
    goto failed_stop_mode;

    --
    2.25.1
    \
     
     \ /
      Last update: 2020-06-09 02:48    [W:7.457 / U:0.044 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site