kernel: bump 5.15 to 5.15.119
[openwrt/staging/jow.git] / target / linux / generic / backport-5.15 / 705-10-v5.19-net-dsa-mt753x-fix-pcs-conversion-regression.patch
1 From 1f15b5e8733115cee65342bcaafeaf0368809fae Mon Sep 17 00:00:00 2001
2 From: "Russell King (Oracle)" <rmk+kernel@armlinux.org.uk>
3 Date: Mon, 25 Apr 2022 22:28:02 +0100
4 Subject: [PATCH 10/13] net: dsa: mt753x: fix pcs conversion regression
5
6 Daniel Golle reports that the conversion of mt753x to phylink PCS caused
7 an oops as below.
8
9 The problem is with the placement of the PCS initialisation, which
10 occurs after mt7531_setup() has been called. However, burited in this
11 function is a call to setup the CPU port, which requires the PCS
12 structure to be already setup.
13
14 Fix this by changing the initialisation order.
15
16 Unable to handle kernel NULL pointer dereference at virtual address 0000000000000020
17 Mem abort info:
18 ESR = 0x96000005
19 EC = 0x25: DABT (current EL), IL = 32 bits
20 SET = 0, FnV = 0
21 EA = 0, S1PTW = 0
22 FSC = 0x05: level 1 translation fault
23 Data abort info:
24 ISV = 0, ISS = 0x00000005
25 CM = 0, WnR = 0
26 user pgtable: 4k pages, 39-bit VAs, pgdp=0000000046057000
27 [0000000000000020] pgd=0000000000000000, p4d=0000000000000000, pud=0000000000000000
28 Internal error: Oops: 96000005 [#1] SMP
29 Modules linked in:
30 CPU: 0 PID: 32 Comm: kworker/u4:1 Tainted: G S 5.18.0-rc3-next-20220422+ #0
31 Hardware name: Bananapi BPI-R64 (DT)
32 Workqueue: events_unbound deferred_probe_work_func
33 pstate: 60000005 (nZCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
34 pc : mt7531_cpu_port_config+0xcc/0x1b0
35 lr : mt7531_cpu_port_config+0xc0/0x1b0
36 sp : ffffffc008d5b980
37 x29: ffffffc008d5b990 x28: ffffff80060562c8 x27: 00000000f805633b
38 x26: ffffff80001a8880 x25: 00000000000009c4 x24: 0000000000000016
39 x23: ffffff8005eb6470 x22: 0000000000003600 x21: ffffff8006948080
40 x20: 0000000000000000 x19: 0000000000000006 x18: 0000000000000000
41 x17: 0000000000000001 x16: 0000000000000001 x15: 02963607fcee069e
42 x14: 0000000000000000 x13: 0000000000000030 x12: 0101010101010101
43 x11: ffffffc037302000 x10: 0000000000000870 x9 : ffffffc008d5b800
44 x8 : ffffff800028f950 x7 : 0000000000000001 x6 : 00000000662b3000
45 x5 : 00000000000002f0 x4 : 0000000000000000 x3 : ffffff800028f080
46 x2 : 0000000000000000 x1 : ffffff800028f080 x0 : 0000000000000000
47 Call trace:
48 mt7531_cpu_port_config+0xcc/0x1b0
49 mt753x_cpu_port_enable+0x24/0x1f0
50 mt7531_setup+0x49c/0x5c0
51 mt753x_setup+0x20/0x31c
52 dsa_register_switch+0x8bc/0x1020
53 mt7530_probe+0x118/0x200
54 mdio_probe+0x30/0x64
55 really_probe.part.0+0x98/0x280
56 __driver_probe_device+0x94/0x140
57 driver_probe_device+0x40/0x114
58 __device_attach_driver+0xb0/0x10c
59 bus_for_each_drv+0x64/0xa0
60 __device_attach+0xa8/0x16c
61 device_initial_probe+0x10/0x20
62 bus_probe_device+0x94/0x9c
63 deferred_probe_work_func+0x80/0xb4
64 process_one_work+0x200/0x3a0
65 worker_thread+0x260/0x4c0
66 kthread+0xd4/0xe0
67 ret_from_fork+0x10/0x20
68 Code: 9409e911 937b7e60 8b0002a0 f9405800 (f9401005)
69 ---[ end trace 0000000000000000 ]---
70
71 Reported-by: Daniel Golle <daniel@makrotopia.org>
72 Tested-by: Daniel Golle <daniel@makrotopia.org>
73 Fixes: cbd1f243bc41 ("net: dsa: mt7530: partially convert to phylink_pcs")
74 Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
75 Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
76 Link: https://lore.kernel.org/r/E1nj6FW-007WZB-5Y@rmk-PC.armlinux.org.uk
77 Signed-off-by: Jakub Kicinski <kuba@kernel.org>
78 ---
79 drivers/net/dsa/mt7530.c | 18 +++++++++---------
80 1 file changed, 9 insertions(+), 9 deletions(-)
81
82 --- a/drivers/net/dsa/mt7530.c
83 +++ b/drivers/net/dsa/mt7530.c
84 @@ -3098,9 +3098,16 @@ static int
85 mt753x_setup(struct dsa_switch *ds)
86 {
87 struct mt7530_priv *priv = ds->priv;
88 - int ret = priv->info->sw_setup(ds);
89 - int i;
90 + int i, ret;
91
92 + /* Initialise the PCS devices */
93 + for (i = 0; i < priv->ds->num_ports; i++) {
94 + priv->pcs[i].pcs.ops = priv->info->pcs_ops;
95 + priv->pcs[i].priv = priv;
96 + priv->pcs[i].port = i;
97 + }
98 +
99 + ret = priv->info->sw_setup(ds);
100 if (ret)
101 return ret;
102
103 @@ -3112,13 +3119,6 @@ mt753x_setup(struct dsa_switch *ds)
104 if (ret && priv->irq)
105 mt7530_free_irq_common(priv);
106
107 - /* Initialise the PCS devices */
108 - for (i = 0; i < priv->ds->num_ports; i++) {
109 - priv->pcs[i].pcs.ops = priv->info->pcs_ops;
110 - priv->pcs[i].priv = priv;
111 - priv->pcs[i].port = i;
112 - }
113 -
114 return ret;
115 }
116