layerscape: add patches-5.4
[openwrt/staging/stintel.git] / target / linux / layerscape / patches-5.4 / 701-net-0253-net-mscc-ocelot-move-resource-ioremap-and-regmap-ini.patch
1 From 01c0da9c8cd3ff6cbe0ced8e28505d4195f60db4 Mon Sep 17 00:00:00 2001
2 From: Claudiu Manoil <claudiu.manoil@nxp.com>
3 Date: Thu, 14 Nov 2019 17:03:20 +0200
4 Subject: [PATCH] net: mscc: ocelot: move resource ioremap and regmap init to
5 common code
6
7 Let's make this ioremap and regmap init code common. It should not
8 be platform dependent as it should be usable by PCI devices too.
9 Use better names where necessary to avoid clashes.
10
11 Signed-off-by: Claudiu Manoil <claudiu.manoil@nxp.com>
12 Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
13 Signed-off-by: David S. Miller <davem@davemloft.net>
14 ---
15 drivers/net/ethernet/mscc/ocelot.h | 4 +---
16 drivers/net/ethernet/mscc/ocelot_board.c | 17 ++++++++++-------
17 drivers/net/ethernet/mscc/ocelot_io.c | 14 +++++---------
18 3 files changed, 16 insertions(+), 19 deletions(-)
19
20 --- a/drivers/net/ethernet/mscc/ocelot.h
21 +++ b/drivers/net/ethernet/mscc/ocelot.h
22 @@ -546,9 +546,7 @@ void ocelot_port_writel(struct ocelot_po
23
24 int ocelot_regfields_init(struct ocelot *ocelot,
25 const struct reg_field *const regfields);
26 -struct regmap *ocelot_io_platform_init(struct ocelot *ocelot,
27 - struct platform_device *pdev,
28 - const char *name);
29 +struct regmap *ocelot_regmap_init(struct ocelot *ocelot, struct resource *res);
30
31 #define ocelot_field_write(ocelot, reg, val) regmap_field_write((ocelot)->regfields[(reg)], (val))
32 #define ocelot_field_read(ocelot, reg, val) regmap_field_read((ocelot)->regfields[(reg)], (val))
33 --- a/drivers/net/ethernet/mscc/ocelot_board.c
34 +++ b/drivers/net/ethernet/mscc/ocelot_board.c
35 @@ -276,7 +276,7 @@ static int mscc_ocelot_probe(struct plat
36 enum ocelot_target id;
37 char *name;
38 u8 optional:1;
39 - } res[] = {
40 + } io_target[] = {
41 { SYS, "sys" },
42 { REW, "rew" },
43 { QSYS, "qsys" },
44 @@ -296,20 +296,23 @@ static int mscc_ocelot_probe(struct plat
45 platform_set_drvdata(pdev, ocelot);
46 ocelot->dev = &pdev->dev;
47
48 - for (i = 0; i < ARRAY_SIZE(res); i++) {
49 + for (i = 0; i < ARRAY_SIZE(io_target); i++) {
50 struct regmap *target;
51 + struct resource *res;
52
53 - target = ocelot_io_platform_init(ocelot, pdev, res[i].name);
54 + res = platform_get_resource_byname(pdev, IORESOURCE_MEM,
55 + io_target[i].name);
56 +
57 + target = ocelot_regmap_init(ocelot, res);
58 if (IS_ERR(target)) {
59 - if (res[i].optional) {
60 - ocelot->targets[res[i].id] = NULL;
61 + if (io_target[i].optional) {
62 + ocelot->targets[io_target[i].id] = NULL;
63 continue;
64 }
65 -
66 return PTR_ERR(target);
67 }
68
69 - ocelot->targets[res[i].id] = target;
70 + ocelot->targets[io_target[i].id] = target;
71 }
72
73 hsio = syscon_regmap_lookup_by_compatible("mscc,ocelot-hsio");
74 --- a/drivers/net/ethernet/mscc/ocelot_io.c
75 +++ b/drivers/net/ethernet/mscc/ocelot_io.c
76 @@ -97,20 +97,16 @@ static struct regmap_config ocelot_regma
77 .reg_stride = 4,
78 };
79
80 -struct regmap *ocelot_io_platform_init(struct ocelot *ocelot,
81 - struct platform_device *pdev,
82 - const char *name)
83 +struct regmap *ocelot_regmap_init(struct ocelot *ocelot, struct resource *res)
84 {
85 - struct resource *res;
86 void __iomem *regs;
87
88 - res = platform_get_resource_byname(pdev, IORESOURCE_MEM, name);
89 regs = devm_ioremap_resource(ocelot->dev, res);
90 if (IS_ERR(regs))
91 return ERR_CAST(regs);
92
93 - ocelot_regmap_config.name = name;
94 - return devm_regmap_init_mmio(ocelot->dev, regs,
95 - &ocelot_regmap_config);
96 + ocelot_regmap_config.name = res->name;
97 +
98 + return devm_regmap_init_mmio(ocelot->dev, regs, &ocelot_regmap_config);
99 }
100 -EXPORT_SYMBOL(ocelot_io_platform_init);
101 +EXPORT_SYMBOL(ocelot_regmap_init);