Re: [FSL P50x0] DPAA Ethernet issue

2023-01-01 Thread Linux kernel regression tracking (#info)
[TLDR: I'm adding this report to the list of tracked Linux kernel
regressions; all text you find below is based on a few templates
paragraphs you might have encountered already already in similar form.
See link in footer if these mails annoy you.]

On 01.01.23 15:18, Christian Zigotzky wrote:
> 
> The DPAA Ethernet doesn’t work anymore on our FSL P5020/P5040 boards [1]
> since the first updates after the final kernel 6.1 [2].
> We bisected yesterday [3] and found the problematic commit [4]. I was
> able to revert it. After that the DPAA Ethernet works again. I created a
> patch for reverting the commit [4]. After patching and compiling, the
> DPAA Ethernet also works again.
> 
> It seems, that the new driver doesn’t work with our onboard DPAA network
> interfaces.
> 
> Could you please check your commit? [4]
> 
> Thanks,
> Christian
> 
> [1] http://wiki.amiga.org/index.php?title=X5000
> [2] https://forum.hyperion-entertainment.com/viewtopic.php?p=56326#p56326
> [3] https://forum.hyperion-entertainment.com/viewtopic.php?p=56334#p56334
> [4] lnet: dpaa: Convert to phylink:
> https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?h=v6.1=5d93cfcf7360eac9903774fe94f626c9ead2049d

Thanks for the report. To be sure the issue doesn't fall through the
cracks unnoticed, I'm adding it to regzbot, the Linux kernel regression
tracking bot:

#regzbot ^introduced 5d93cfcf7360
#regzbot title lnet: dpaa: Ethernet issues
#regzbot ignore-activity

This isn't a regression? This issue or a fix for it are already
discussed somewhere else? It was fixed already? You want to clarify when
the regression started to happen? Or point out I got the title or
something else totally wrong? Then just reply and tell me -- ideally
while also telling regzbot about it, as explained by the page listed in
the footer of this mail.

Reminder for developers: When fixing the issue, add 'Link:' tags
pointing to the report (see page linked in footer for details).

Ciao, Thorsten (wearing his 'the Linux kernel's regression tracker' hat)
-- 
Everything you wanna know about Linux kernel regression tracking:
https://linux-regtracking.leemhuis.info/about/#tldr

Annoyed by mails like this? Feel free to send them to /dev/null:
https://linux-regtracking.leemhuis.info/about/#infomails


[Bug 216095] sysfs: cannot create duplicate filename '/devices/platform/of-display'

2023-01-01 Thread bugzilla-daemon
https://bugzilla.kernel.org/show_bug.cgi?id=216095

Michal Suchánek (msucha...@suse.de) changed:

   What|Removed |Added

 CC||msucha...@suse.de

--- Comment #9 from Michal Suchánek (msucha...@suse.de) ---
Could you also attach the devicetree?

dtc -I fs -O dts /proc/device-tree > device-tree.dts

-- 
You may reply to this email to add a comment.

You are receiving this mail because:
You are watching the assignee of the bug.

Re: [FSL P50x0] DPAA Ethernet issue

2023-01-01 Thread Christian Zigotzky

On 01 January 2023 at 07:11 pm, Sean Anderson wrote:

Thank you for testing this. Unfortunately, I have no P-series hardware,
so I was unable to test the 10gec/dtsec parts of this conversion. I had
hoped that this would get tested by someone with the hardware (at NXP)
before now, but it seems you get to be the "lucky" first user.

I see you have labeled one of your kernels as supporting QEMU.  Do you
happen to have instructions for running Linux on QEMU?

Can you try the following patch. I think my mail client will mangle it,  
so I have also attached it to this email.




Hi Sean,

Thanks a lot for your answer.

I use the virtio-net device in a virtual e5500 QEMU/KVM HV machine. [1] [2]

I will test your patch as soon as possible.

Thanks,
Christian

[1] QEMU command: qemu-system-ppc64 -M ppce500 -cpu e5500 -m 1024 
-kernel uImage-6.2 -drive 
format=raw,file=void-live-powerpc-20220129.img,index=0,if=virtio -netdev 
user,id=mynet0 -device virtio-net,netdev=mynet0 -append "rw 
root=/dev/vda2" -device virtio-gpu -device virtio-mouse-pci -device 
virtio-keyboard-pci -device pci-ohci,id=newusb -audiodev 
id=sndbe,driver=pa,server=/run/user/1000/pulse/native -device 
usb-audio,bus=newusb.0 -enable-kvm -smp 4 -fsdev 
local,security_model=passthrough,id=fsdev0,path=/home/amigaone/Music 
-device virtio-9p-pci,id=fs0,fsdev=fsdev0,mount_tag=hostshare


[2] https://forum.hyperion-entertainment.com/viewtopic.php?p=46749


[PATCH 1/3] core/device: Add function to return child node using name and length

2023-01-01 Thread Athira Rajeev
Add a function dt_find_by_name_len() that returns the child node if
it matches the first "n" characters of a given name, otherwise NULL.
This is helpful for cases with node name like: "name@addr". In
scenarios where nodes are added with "name@addr" format and if the
value of "addr" is not known, that node can't be matched with node
name or addr. Hence matching with substring as node name will return
the expected result. Patch adds dt_find_by_name_len() function
and testcase for the same in core/test/run-device.c

Signed-off-by: Athira Rajeev 
---
 core/device.c  | 20 
 core/test/run-device.c | 11 +++
 include/device.h   |  4 
 3 files changed, 35 insertions(+)

diff --git a/core/device.c b/core/device.c
index 2de37c74..72c54e85 100644
--- a/core/device.c
+++ b/core/device.c
@@ -395,6 +395,26 @@ struct dt_node *dt_find_by_name(struct dt_node *root, 
const char *name)
 }
 
 
+struct dt_node *dt_find_by_name_len(struct dt_node *root,
+   const char *name, int len)
+{
+   struct dt_node *child, *match;
+
+   if (len <= 0)
+   return NULL;
+
+   list_for_each(>children, child, list) {
+   if (!strncmp(child->name, name, len))
+   return child;
+
+   match = dt_find_by_name_len(child, name, len);
+   if (match)
+   return match;
+   }
+
+   return NULL;
+}
+
 struct dt_node *dt_new_check(struct dt_node *parent, const char *name)
 {
struct dt_node *node = dt_find_by_name(parent, name);
diff --git a/core/test/run-device.c b/core/test/run-device.c
index 4a12382b..8c552103 100644
--- a/core/test/run-device.c
+++ b/core/test/run-device.c
@@ -466,6 +466,17 @@ int main(void)
new_prop_ph = dt_prop_get_u32(ut2, "something");
assert(!(new_prop_ph == ev1_ph));
dt_free(subtree);
+
+   /* Test dt_find_by_name_len */
+   root = dt_new_root("");
+   addr1 = dt_new_addr(root, "node", 0x1);
+   addr2 = dt_new_addr(root, "node0_1", 0x2);
+   assert(dt_find_by_name(root, "node@1") == addr1);
+   assert(dt_find_by_name(root, "node0_1@2") == addr2);
+   assert(dt_find_by_name_len(root, "node@", 5) == addr1);
+   assert(dt_find_by_name_len(root, "node0_1@", 8) == addr2);
+   dt_free(root);
+
return 0;
 }
 
diff --git a/include/device.h b/include/device.h
index 93fb90ff..f5e0fb79 100644
--- a/include/device.h
+++ b/include/device.h
@@ -184,6 +184,10 @@ struct dt_node *dt_find_by_path(struct dt_node *root, 
const char *path);
 /* Find a child node by name */
 struct dt_node *dt_find_by_name(struct dt_node *root, const char *name);
 
+/* Find a child node by name and len */
+struct dt_node *dt_find_by_name_len(struct dt_node *root,
+const char *name, int len);
+
 /* Find a node by phandle */
 struct dt_node *dt_find_by_phandle(struct dt_node *root, u32 phandle);
 
-- 
2.27.0



[PATCH 3/3] skiboot: Update IMC PMU node names for power10

2023-01-01 Thread Athira Rajeev
The nest IMC (In Memory Collection) Performance Monitoring
Unit(PMU) node names are saved as "struct nest_pmus_struct"
in the "hw/imc.c" IMC code. Not all the IMC PMUs listed in
the device tree may be available. Nest IMC PMU names along with
their bit values is represented in imc availability vector.
This struct is used to remove the unavailable nodes by checking
this vector.

For power10, the imc_chip_avl_vector ie, imc availability vector
( which is a part of the IMC control block structure ), has
change in mapping of units and bit positions. Hence rename the
existing nest_pmus array to nest_pmus_p9 and add entry for power10
as nest_pmus_p10.

Also the avl_vector has another change in bit positions 11:34. These
bit positions tells the availability of Xlink/Alink/CAPI. There
are total 8 links and three bit field combination says which link
is available. Example, 101b means X-Link is configured. Patch implements
all these change to handle nest_pmus_p10.

Signed-off-by: Athira Rajeev 
---
 hw/imc.c | 195 ---
 1 file changed, 185 insertions(+), 10 deletions(-)

diff --git a/hw/imc.c b/hw/imc.c
index 779e9634..d1adc5ef 100644
--- a/hw/imc.c
+++ b/hw/imc.c
@@ -55,7 +55,7 @@ static unsigned int *htm_scom_index;
  * imc_chip_avl_vector(in struct imc_chip_cb, look at include/imc.h).
  * nest_pmus[] is an array containing all the possible nest IMC PMU node names.
  */
-static struct nest_pmus_struct nest_pmus[] = {
+static struct nest_pmus_struct nest_pmus_p9[] = {
{ .name = "powerbus0@", .len = 10 },
{ .name = "mcs0@", .len = 5},
{ .name = "mcs1@", .len = 5},
@@ -110,6 +110,67 @@ static struct nest_pmus_struct nest_pmus[] = {
/* reserved bits : 51 - 63 */
 };
 
+static struct nest_pmus_struct nest_pmus_p10[] = {
+   { .name = "pb@", .len = 3 },
+   { .name = "mcs0@", .len = 5},
+   { .name = "mcs1@", .len = 5},
+   { .name = "mcs2@", .len = 5},
+   { .name = "mcs3@", .len = 5},
+   { .name = "mcs4@", .len = 5},
+   { .name = "mcs5@", .len = 5},
+   { .name = "mcs6@", .len = 5},
+   { .name = "mcs7@", .len = 5},
+   { .name = "pec0@", .len = 5},
+   { .name = "pec1@", .len = 5},
+   { .name = "NA", .len = 0},
+   { .name = "NA", .len = 0},
+   { .name = "NA", .len = 0},
+   { .name = "NA", .len = 0},
+   { .name = "NA", .len = 0},
+   { .name = "NA", .len = 0},
+   { .name = "NA", .len = 0},
+   { .name = "NA", .len = 0},
+   { .name = "NA", .len = 0},
+   { .name = "NA", .len = 0},
+   { .name = "NA", .len = 0},
+   { .name = "NA", .len = 0},
+   { .name = "NA", .len = 0},
+   { .name = "NA", .len = 0},
+   { .name = "NA", .len = 0},
+   { .name = "NA", .len = 0},
+   { .name = "NA", .len = 0},
+   { .name = "NA", .len = 0},
+   { .name = "NA", .len = 0},
+   { .name = "NA", .len = 0},
+   { .name = "NA", .len = 0},
+   { .name = "NA", .len = 0},
+   { .name = "NA", .len = 0},
+   { .name = "NA", .len = 0},
+   { .name = "phb0@", .len = 5},
+   { .name = "phb1@", .len = 5},
+   { .name = "phb2@", .len = 5},
+   { .name = "phb3@", .len = 5},
+   { .name = "phb4@", .len = 5},
+   { .name = "phb5@", .len = 5},
+   { .name = "ocmb0@", .len = 6},
+   { .name = "ocmb1@", .len = 6},
+   { .name = "ocmb2@", .len = 6},
+   { .name = "ocmb3@", .len = 6},
+   { .name = "ocmb4@", .len = 6},
+   { .name = "ocmb5@", .len = 6},
+   { .name = "ocmb6@", .len = 6},
+   { .name = "ocmb7@", .len = 6},
+   { .name = "ocmb8@", .len = 6},
+   { .name = "ocmb9@", .len = 6},
+   { .name = "ocmb10@", .len = 6},
+   { .name = "ocmb11@", .len = 6},
+   { .name = "ocmb12@", .len = 6},
+   { .name = "ocmb13@", .len = 6},
+   { .name = "ocmb14@", .len = 6},
+   { .name = "ocmb15@", .len = 6},
+   { .name = "nx@", .len = 3},
+};
+
 /*
  * Due to Nest HW/OCC restriction, microcode will not support individual unit
  * events for these nest units mcs0, mcs1 ... mcs7 in the accumulation mode.
@@ -377,7 +438,7 @@ static void disable_unavailable_units(struct dt_node *dev)
uint64_t avl_vec;
struct imc_chip_cb *cb;
struct dt_node *target;
-   int i;
+   int i, j;
bool disable_all_nests = false;
struct proc_chip *chip;
 
@@ -415,14 +476,128 @@ static void disable_unavailable_units(struct dt_node 
*dev)
avl_vec = (0xffULL) << 56;
}
 
-   for (i = 0; i < ARRAY_SIZE(nest_pmus); i++) {
-   if (!(PPC_BITMASK(i, i) & avl_vec)) {
-   /* Check if the device node exists */
-   target = dt_find_by_name_len(dev, nest_pmus[i].name, 
nest_pmus[i].len);
-   if (!target)
-   continue;
-   /* Remove the device node */
-   dt_free(target);

[PATCH 2/3] skiboot: Update IMC code to use dt_find_by_name_len for checking dt nodes

2023-01-01 Thread Athira Rajeev
The nest IMC (In Memory Collection) Performance Monitoring
Unit(PMU) node names are saved in nest_pmus[] array in the
"hw/imc.c" IMC code. Not all the IMC PMUs listed in the device
tree may be available. Nest IMC PMU names along with their
bit values is represented in imc availability vector.
The nest_pmus[] array is used to remove the unavailable nodes
by checking this vector.

To check node availability, code was using "dt_find_by_name".
But since the node names have format like: "name@offset",
dt_find_by_name doesn't return the expected result. Fix this
by using dt_find_by_name_len. Also, instead of using char array,
use a new "struct nest_pmus_struct" which saves the name as well
as length parameter for dt_find_by_name_len.

Signed-off-by: Athira Rajeev 
---
 hw/imc.c | 112 +--
 1 file changed, 59 insertions(+), 53 deletions(-)

diff --git a/hw/imc.c b/hw/imc.c
index 97e0809f..779e9634 100644
--- a/hw/imc.c
+++ b/hw/imc.c
@@ -37,6 +37,12 @@
 static uint64_t TRACE_IMC_ADDR;
 static uint64_t CORE_IMC_EVENT_MASK_ADDR;
 static uint64_t trace_scom_val;
+
+struct nest_pmus_struct {
+   const char *name;
+   int len;
+};
+
 /*
  * Initialise these with the pdbar and htm scom port address array
  * at run time, based on the processor version.
@@ -49,58 +55,58 @@ static unsigned int *htm_scom_index;
  * imc_chip_avl_vector(in struct imc_chip_cb, look at include/imc.h).
  * nest_pmus[] is an array containing all the possible nest IMC PMU node names.
  */
-static char const *nest_pmus[] = {
-   "powerbus0",
-   "mcs0",
-   "mcs1",
-   "mcs2",
-   "mcs3",
-   "mcs4",
-   "mcs5",
-   "mcs6",
-   "mcs7",
-   "mba0",
-   "mba1",
-   "mba2",
-   "mba3",
-   "mba4",
-   "mba5",
-   "mba6",
-   "mba7",
-   "cen0",
-   "cen1",
-   "cen2",
-   "cen3",
-   "cen4",
-   "cen5",
-   "cen6",
-   "cen7",
-   "xlink0",
-   "xlink1",
-   "xlink2",
-   "mcd0",
-   "mcd1",
-   "phb0",
-   "phb1",
-   "phb2",
-   "phb3",
-   "phb4",
-   "phb5",
-   "nx",
-   "capp0",
-   "capp1",
-   "vas",
-   "int",
-   "alink0",
-   "alink1",
-   "alink2",
-   "alink3",
-   "nvlink0",
-   "nvlink1",
-   "nvlink2",
-   "nvlink3",
-   "nvlink4",
-   "nvlink5",
+static struct nest_pmus_struct nest_pmus[] = {
+   { .name = "powerbus0@", .len = 10 },
+   { .name = "mcs0@", .len = 5},
+   { .name = "mcs1@", .len = 5},
+   { .name = "mcs2@", .len = 5},
+   { .name = "mcs3@", .len = 5},
+   { .name = "mcs4@", .len = 5},
+   { .name = "mcs5@", .len = 5},
+   { .name = "mcs6@", .len = 5},
+   { .name = "mcs7@", .len = 5},
+   { .name = "mba0@", .len = 5},
+   { .name = "mba1@", .len = 5},
+   { .name = "mba2@", .len = 5},
+   { .name = "mba3@", .len = 5},
+   { .name = "mba4@", .len = 5},
+   { .name = "mba5@", .len = 5},
+   { .name = "mba6@", .len = 5},
+   { .name = "mba7@", .len = 5},
+   { .name = "centaur0@", .len = 9},
+   { .name = "centaur1@", .len = 9},
+   { .name = "centaur2@", .len = 9},
+   { .name = "centaur3@", .len = 9},
+   { .name = "centaur4@", .len = 9},
+   { .name = "centaur5@", .len = 9},
+   { .name = "centaur6@", .len = 9},
+   { .name = "centaur7@", .len = 9},
+   { .name = "xlink0@", .len = 7},
+   { .name = "xlink1@", .len = 7},
+   { .name = "xlink2@", .len = 7},
+   { .name = "mcd0@", .len = 5},
+   { .name = "mcd1@", .len = 5},
+   { .name = "phb0@", .len = 5},
+   { .name = "phb1@", .len = 5},
+   { .name = "phb2@", .len = 5},
+   { .name = "phb3@", .len = 5},
+   { .name = "phb4@", .len = 5},
+   { .name = "phb5@", .len = 5},
+   { .name = "nx@", .len = 3},
+   { .name = "capp0@", .len = 6},
+   { .name = "capp1@", .len = 6},
+   { .name = "vas@", .len = 4},
+   { .name = "int@", .len = 4},
+   { .name = "alink0@", .len = 7},
+   { .name = "alink1@", .len = 7},
+   { .name = "alink2@", .len = 7},
+   { .name = "alink3@", .len = 7},
+   { .name = "nvlink0@", .len = 8},
+   { .name = "nvlink1@", .len = 8},
+   { .name = "nvlink2@", .len = 8},
+   { .name = "nvlink3@", .len = 8},
+   { .name = "nvlink4@", .len = 8},
+   { .name = "nvlink5@", .len = 8},
/* reserved bits : 51 - 63 */
 };
 
@@ -412,7 +418,7 @@ static void disable_unavailable_units(struct dt_node *dev)
for (i = 0; i < ARRAY_SIZE(nest_pmus); i++) {
if (!(PPC_BITMASK(i, i) & avl_vec)) {
/* Check if the device node exists */
-   target = dt_find_by_name(dev, nest_pmus[i]);
+   target = dt_find_by_name_len(dev, nest_pmus[i].name, 
nest_pmus[i].len);
if (!target)

Re: [FSL P50x0] DPAA Ethernet issue

2023-01-01 Thread Sean Anderson

Hi Christian,

+CC netdev folks


Hi All,

The DPAA Ethernet doesn’t work anymore on our FSL P5020/P5040 boards [1] 
since the first updates after the final kernel 6.1 [2].
We bisected yesterday [3] and found the problematic commit [4]. I was 
able to revert it. After that the DPAA Ethernet works again. I created a 
patch for reverting the commit [4]. After patching and compiling, the 
DPAA Ethernet also works again.


Thank you for testing this. Unfortunately, I have no P-series hardware,
so I was unable to test the 10gec/dtsec parts of this conversion. I had
hoped that this would get tested by someone with the hardware (at NXP)
before now, but it seems you get to be the "lucky" first user.

I see you have labeled one of your kernels as supporting QEMU.  Do you
happen to have instructions for running Linux on QEMU?

It seems, that the new driver doesn’t work with our onboard DPAA network 
interfaces.


Could you please check your commit? [4]


Can you try the following patch. I think my mail client will mangle it,
so I have also attached it to this email.

From 3898c62106025209b26527ad1516b339eebb62f1 Mon Sep 17 00:00:00 2001
From: Sean Anderson 
Date: Sun, 1 Jan 2023 13:00:21 -0500
Subject: [PATCH] net: dpaa: Fix dtsec check for PCS availability

We want to fail if the PCS is not available, not if it is available. Fix
this condition.

Fixes: 5d93cfcf7360 ("net: dpaa: Convert to phylink")
Reported-by: Christian Zigotzky 
Signed-off-by: Sean Anderson 
---
 drivers/net/ethernet/freescale/fman/fman_dtsec.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/freescale/fman/fman_dtsec.c 
b/drivers/net/ethernet/freescale/fman/fman_dtsec.c
index 3c87820ca202..3462f2b78680 100644
--- a/drivers/net/ethernet/freescale/fman/fman_dtsec.c
+++ b/drivers/net/ethernet/freescale/fman/fman_dtsec.c
@@ -1431,7 +1431,7 @@ int dtsec_initialization(struct mac_device *mac_dev,
dtsec->dtsec_drv_param->tx_pad_crc = true;
 
 	phy_node = of_parse_phandle(mac_node, "tbi-handle", 0);

-   if (!phy_node || of_device_is_available(phy_node)) {
+   if (!phy_node || !of_device_is_available(phy_node)) {
of_node_put(phy_node);
err = -EINVAL;
dev_err_probe(mac_dev->dev, err,
--
2.37.1
From 3898c62106025209b26527ad1516b339eebb62f1 Mon Sep 17 00:00:00 2001
From: Sean Anderson 
Date: Sun, 1 Jan 2023 13:00:21 -0500
Subject: [PATCH] net: dpaa: Fix dtsec check for PCS availability

We want to fail if the PCS is not available, not if it is available. Fix
this condition.

Fixes: 5d93cfcf7360 ("net: dpaa: Convert to phylink")
Reported-by: Christian Zigotzky 
Signed-off-by: Sean Anderson 
---
 drivers/net/ethernet/freescale/fman/fman_dtsec.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/freescale/fman/fman_dtsec.c b/drivers/net/ethernet/freescale/fman/fman_dtsec.c
index 3c87820ca202..3462f2b78680 100644
--- a/drivers/net/ethernet/freescale/fman/fman_dtsec.c
+++ b/drivers/net/ethernet/freescale/fman/fman_dtsec.c
@@ -1431,7 +1431,7 @@ int dtsec_initialization(struct mac_device *mac_dev,
 	dtsec->dtsec_drv_param->tx_pad_crc = true;
 
 	phy_node = of_parse_phandle(mac_node, "tbi-handle", 0);
-	if (!phy_node || of_device_is_available(phy_node)) {
+	if (!phy_node || !of_device_is_available(phy_node)) {
 		of_node_put(phy_node);
 		err = -EINVAL;
 		dev_err_probe(mac_dev->dev, err,
-- 
2.37.1



[FSL P50x0] DPAA Ethernet issue

2023-01-01 Thread Christian Zigotzky

Hi All,

The DPAA Ethernet doesn’t work anymore on our FSL P5020/P5040 boards [1] 
since the first updates after the final kernel 6.1 [2].
We bisected yesterday [3] and found the problematic commit [4]. I was 
able to revert it. After that the DPAA Ethernet works again. I created a 
patch for reverting the commit [4]. After patching and compiling, the 
DPAA Ethernet also works again.


It seems, that the new driver doesn’t work with our onboard DPAA network 
interfaces.


Could you please check your commit? [4]

Thanks,
Christian

[1] http://wiki.amiga.org/index.php?title=X5000
[2] https://forum.hyperion-entertainment.com/viewtopic.php?p=56326#p56326
[3] https://forum.hyperion-entertainment.com/viewtopic.php?p=56334#p56334
[4] lnet: dpaa: Convert to phylink: 
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?h=v6.1=5d93cfcf7360eac9903774fe94f626c9ead2049d