acace03c5e4e32e768bc9b91b9ea34b789d366be
[openwrt/openwrt.git] / target / linux / at91 / patches-5.10 / 115-net-macb-add-userio-bits-as-platform-configuration.patch
1 From 89f37ac2780d113d3c17d329726c0e92a1400744 Mon Sep 17 00:00:00 2001
2 From: Claudiu Beznea <claudiu.beznea@microchip.com>
3 Date: Wed, 9 Dec 2020 15:03:32 +0200
4 Subject: [PATCH 115/247] net: macb: add userio bits as platform configuration
5
6 This is necessary for SAMA7G5 as it uses different values for
7 PHY interface and also introduces hdfctlen bit.
8
9 Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
10 Reviewed-by: Andrew Lunn <andrew@lunn.ch>
11 Signed-off-by: David S. Miller <davem@davemloft.net>
12 ---
13 drivers/net/ethernet/cadence/macb.h | 10 +++++++++
14 drivers/net/ethernet/cadence/macb_main.c | 28 ++++++++++++++++++++----
15 2 files changed, 34 insertions(+), 4 deletions(-)
16
17 --- a/drivers/net/ethernet/cadence/macb.h
18 +++ b/drivers/net/ethernet/cadence/macb.h
19 @@ -1104,6 +1104,14 @@ struct macb_pm_data {
20 u32 usrio;
21 };
22
23 +struct macb_usrio_config {
24 + u32 mii;
25 + u32 rmii;
26 + u32 rgmii;
27 + u32 refclk;
28 + u32 hdfctlen;
29 +};
30 +
31 struct macb_config {
32 u32 caps;
33 unsigned int dma_burst_length;
34 @@ -1112,6 +1120,7 @@ struct macb_config {
35 struct clk **rx_clk, struct clk **tsu_clk);
36 int (*init)(struct platform_device *pdev);
37 int jumbo_max_len;
38 + const struct macb_usrio_config *usrio;
39 };
40
41 struct tsu_incr {
42 @@ -1244,6 +1253,7 @@ struct macb {
43 u32 rx_intr_mask;
44
45 struct macb_pm_data pm_data;
46 + const struct macb_usrio_config *usrio;
47 };
48
49 #ifdef CONFIG_MACB_USE_HWSTAMP
50 --- a/drivers/net/ethernet/cadence/macb_main.c
51 +++ b/drivers/net/ethernet/cadence/macb_main.c
52 @@ -3824,15 +3824,15 @@ static int macb_init(struct platform_dev
53 if (!(bp->caps & MACB_CAPS_USRIO_DISABLED)) {
54 val = 0;
55 if (phy_interface_mode_is_rgmii(bp->phy_interface))
56 - val = GEM_BIT(RGMII);
57 + val = bp->usrio->rgmii;
58 else if (bp->phy_interface == PHY_INTERFACE_MODE_RMII &&
59 (bp->caps & MACB_CAPS_USRIO_DEFAULT_IS_MII_GMII))
60 - val = MACB_BIT(RMII);
61 + val = bp->usrio->rmii;
62 else if (!(bp->caps & MACB_CAPS_USRIO_DEFAULT_IS_MII_GMII))
63 - val = MACB_BIT(MII);
64 + val = bp->usrio->mii;
65
66 if (bp->caps & MACB_CAPS_USRIO_HAS_CLKEN)
67 - val |= MACB_BIT(CLKEN);
68 + val |= bp->usrio->refclk;
69
70 macb_or_gem_writel(bp, USRIO, val);
71 }
72 @@ -4350,6 +4350,13 @@ static int fu540_c000_init(struct platfo
73 return macb_init(pdev);
74 }
75
76 +static const struct macb_usrio_config macb_default_usrio = {
77 + .mii = MACB_BIT(MII),
78 + .rmii = MACB_BIT(RMII),
79 + .rgmii = GEM_BIT(RGMII),
80 + .refclk = MACB_BIT(CLKEN),
81 +};
82 +
83 static const struct macb_config fu540_c000_config = {
84 .caps = MACB_CAPS_GIGABIT_MODE_AVAILABLE | MACB_CAPS_JUMBO |
85 MACB_CAPS_GEM_HAS_PTP,
86 @@ -4357,12 +4364,14 @@ static const struct macb_config fu540_c0
87 .clk_init = fu540_c000_clk_init,
88 .init = fu540_c000_init,
89 .jumbo_max_len = 10240,
90 + .usrio = &macb_default_usrio,
91 };
92
93 static const struct macb_config at91sam9260_config = {
94 .caps = MACB_CAPS_USRIO_HAS_CLKEN | MACB_CAPS_USRIO_DEFAULT_IS_MII_GMII,
95 .clk_init = macb_clk_init,
96 .init = macb_init,
97 + .usrio = &macb_default_usrio,
98 };
99
100 static const struct macb_config sama5d3macb_config = {
101 @@ -4370,6 +4379,7 @@ static const struct macb_config sama5d3m
102 | MACB_CAPS_USRIO_HAS_CLKEN | MACB_CAPS_USRIO_DEFAULT_IS_MII_GMII,
103 .clk_init = macb_clk_init,
104 .init = macb_init,
105 + .usrio = &macb_default_usrio,
106 };
107
108 static const struct macb_config pc302gem_config = {
109 @@ -4377,6 +4387,7 @@ static const struct macb_config pc302gem
110 .dma_burst_length = 16,
111 .clk_init = macb_clk_init,
112 .init = macb_init,
113 + .usrio = &macb_default_usrio,
114 };
115
116 static const struct macb_config sama5d2_config = {
117 @@ -4384,6 +4395,7 @@ static const struct macb_config sama5d2_
118 .dma_burst_length = 16,
119 .clk_init = macb_clk_init,
120 .init = macb_init,
121 + .usrio = &macb_default_usrio,
122 };
123
124 static const struct macb_config sama5d3_config = {
125 @@ -4393,6 +4405,7 @@ static const struct macb_config sama5d3_
126 .clk_init = macb_clk_init,
127 .init = macb_init,
128 .jumbo_max_len = 10240,
129 + .usrio = &macb_default_usrio,
130 };
131
132 static const struct macb_config sama5d4_config = {
133 @@ -4400,18 +4413,21 @@ static const struct macb_config sama5d4_
134 .dma_burst_length = 4,
135 .clk_init = macb_clk_init,
136 .init = macb_init,
137 + .usrio = &macb_default_usrio,
138 };
139
140 static const struct macb_config emac_config = {
141 .caps = MACB_CAPS_NEEDS_RSTONUBR | MACB_CAPS_MACB_IS_EMAC,
142 .clk_init = at91ether_clk_init,
143 .init = at91ether_init,
144 + .usrio = &macb_default_usrio,
145 };
146
147 static const struct macb_config np4_config = {
148 .caps = MACB_CAPS_USRIO_DISABLED,
149 .clk_init = macb_clk_init,
150 .init = macb_init,
151 + .usrio = &macb_default_usrio,
152 };
153
154 static const struct macb_config zynqmp_config = {
155 @@ -4422,6 +4438,7 @@ static const struct macb_config zynqmp_c
156 .clk_init = macb_clk_init,
157 .init = macb_init,
158 .jumbo_max_len = 10240,
159 + .usrio = &macb_default_usrio,
160 };
161
162 static const struct macb_config zynq_config = {
163 @@ -4430,6 +4447,7 @@ static const struct macb_config zynq_con
164 .dma_burst_length = 16,
165 .clk_init = macb_clk_init,
166 .init = macb_init,
167 + .usrio = &macb_default_usrio,
168 };
169
170 static const struct of_device_id macb_dt_ids[] = {
171 @@ -4550,6 +4568,8 @@ static int macb_probe(struct platform_de
172 bp->wol |= MACB_WOL_HAS_MAGIC_PACKET;
173 device_set_wakeup_capable(&pdev->dev, bp->wol & MACB_WOL_HAS_MAGIC_PACKET);
174
175 + bp->usrio = macb_config->usrio;
176 +
177 spin_lock_init(&bp->lock);
178
179 /* setup capabilities */