Re: [FSL P50x0] DPAA Ethernet issue
[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'
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
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
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
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
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
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
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