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
6 This is necessary for SAMA7G5 as it uses different values for
7 PHY interface and also introduces hdfctlen bit.
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>
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(-)
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 {
23 +struct macb_usrio_config {
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);
38 + const struct macb_usrio_config *usrio;
42 @@ -1244,6 +1253,7 @@ struct macb {
45 struct macb_pm_data pm_data;
46 + const struct macb_usrio_config *usrio;
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)) {
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;
66 if (bp->caps & MACB_CAPS_USRIO_HAS_CLKEN)
67 - val |= MACB_BIT(CLKEN);
68 + val |= bp->usrio->refclk;
70 macb_or_gem_writel(bp, USRIO, val);
72 @@ -4350,6 +4350,13 @@ static int fu540_c000_init(struct platfo
73 return macb_init(pdev);
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),
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,
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,
97 + .usrio = &macb_default_usrio,
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,
105 + .usrio = &macb_default_usrio,
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,
113 + .usrio = &macb_default_usrio,
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,
121 + .usrio = &macb_default_usrio,
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,
128 .jumbo_max_len = 10240,
129 + .usrio = &macb_default_usrio,
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,
137 + .usrio = &macb_default_usrio,
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,
147 static const struct macb_config np4_config = {
148 .caps = MACB_CAPS_USRIO_DISABLED,
149 .clk_init = macb_clk_init,
151 + .usrio = &macb_default_usrio,
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,
158 .jumbo_max_len = 10240,
159 + .usrio = &macb_default_usrio,
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,
167 + .usrio = &macb_default_usrio,
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);
175 + bp->usrio = macb_config->usrio;
177 spin_lock_init(&bp->lock);
179 /* setup capabilities */