NXP P50XX/e5500: SMP doesn't work anymore with the latest Git kernel

19 messages, 5 authors, 2018-11-07 · open the first message on its own page

NXP P50XX/e5500: SMP doesn't work anymore with the latest Git kernel

From: Christian Zigotzky <hidden>
Date: 2018-10-28 16:37:41

Hello,

SMP doesn't work anymore with the latest Git kernel (28/10/18 11:12AM 
GMT) on my P5020 board and on virtual e5500 QEMU machines.

Board with P5020 dual core CPU:

[    0.000000] -----------------------------------------------------
[    0.000000] phys_mem_size     = 0x200000000
[    0.000000] dcache_bsize      = 0x40
[    0.000000] icache_bsize      = 0x40
[    0.000000] cpu_features      = 0x00000003008003b4
[    0.000000]   possible        = 0x00000003009003b4
[    0.000000]   always          = 0x00000003008003b4
[    0.000000] cpu_user_features = 0xcc008000 0x08000000
[    0.000000] mmu_features      = 0x000a0010
[    0.000000] firmware_features = 0x0000000000000000
[    0.000000] -----------------------------------------------------
[    0.000000] CoreNet Generic board

     ...

[    0.002161] smp: Bringing up secondary CPUs ...
[    0.002339] No cpu-release-addr for cpu 1
[    0.002347] smp: failed starting cpu 1 (rc -2)
[    0.002401] smp: Brought up 1 node, 1 CPU

Virtual e5500 quad core QEMU machine:

[    0.026394] smp: Bringing up secondary CPUs ...
[    0.027831] No cpu-release-addr for cpu 1
[    0.027989] smp: failed starting cpu 1 (rc -2)
[    0.030143] No cpu-release-addr for cpu 2
[    0.030304] smp: failed starting cpu 2 (rc -2)
[    0.032400] No cpu-release-addr for cpu 3
[    0.032533] smp: failed starting cpu 3 (rc -2)
[    0.033117] smp: Brought up 1 node, 1 CPU

QEMU command: ./qemu-system-ppc64 -M ppce500 -cpu e5500 -m 2048 -kernel 
/home/christian/Downloads/vmlinux-4.20-alpha4-AmigaOne_X1000_X5000/X5000_and_QEMU_e5500/uImage-4.20 
-drive 
format=raw,file=/home/christian/Downloads/MATE_PowerPC_Remix_2017_0.9.img,index=0,if=virtio 
-nic user,model=e1000 -append "rw root=/dev/vda" -device virtio-vga 
-device virtio-mouse-pci -device virtio-keyboard-pci -usb -soundhw 
es1370 -smp 4

.config:

...
CONFIG_SMP=y
CONFIG_NR_CPUS=4
...

Please test the latest Git kernel on your NXP P50XX boards.

Thanks,
Christian

NXP P50XX/e5500: SMP doesn't work anymore with the latest Git kernel

From: Christian Zigotzky <hidden>
Date: 2018-10-29 09:58:33

Hello,

I have figured out that the commit 'devicetree-for-4.20' [1] is 
responsible for the SMP problem. I was able to revert this commit with 
'git revert b27186abb37b7bd19e0ca434f4f425c807dbd708 -m 1' today.

[master ec81438] Revert "Merge tag 'devicetree-for-4.20' of 
git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux"
138 files changed, 931 insertions(+), 1538 deletions(-)
rename Documentation/devicetree/bindings/arm/{atmel-sysregs.txt => 
atmel-at91.txt} (67%)
delete mode 100644 
Documentation/devicetree/bindings/arm/freescale/fsl,layerscape-dcfg.txt
delete mode 100644 
Documentation/devicetree/bindings/arm/freescale/fsl,layerscape-scfg.txt
rename Documentation/devicetree/bindings/arm/{zte,sysctrl.txt => 
zte.txt} (62%)
delete mode 100644 Documentation/devicetree/bindings/misc/lwn-bk4.txt
create mode 100644 arch/c6x/boot/dts/linked_dtb.S
delete mode 100644 arch/nios2/boot/dts/Makefile
create mode 100644 arch/nios2/boot/linked_dtb.S
delete mode 100644 arch/powerpc/boot/dts/Makefile
delete mode 100644 arch/powerpc/boot/dts/fsl/Makefile
delete mode 100644 scripts/dtc/yamltree.c

It solves the SMP problem! SMP works again on my P5020 board and on 
virtual e5500 QEMU machines.

QEMU command: ./qemu-system-ppc64 -M ppce500 -cpu e5500 -m 2048 -kernel 
/home/christian/Downloads/uImage-4.20-alpha5 -drive 
format=raw,file=/home/christian/Dokumente/ubuntu_MATE_16.04.3_LTS_PowerPC_QEMU/ubuntu_MATE_16.04_PowerPC.img,index=0,if=virtio 
-nic user,model=e1000 -append "rw root=/dev/vda3" -device virtio-vga 
-device virtio-mouse-pci -device virtio-keyboard-pci -soundhw es1370 -smp 4

Screenshot: 
https://plus.google.com/u/0/photos/photo/115515624056477014971/6617705776207990082

Do we need a new dtb file or is it a bug?

Thanks,
Christian

[1] 
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b27186abb37b7bd19e0ca434f4f425c807dbd708


On 28 October 2018 at 5:35PM, Christian Zigotzky wrote:
Hello,

SMP doesn't work anymore with the latest Git kernel (28/10/18 11:12AM 
GMT) on my P5020 board and on virtual e5500 QEMU machines.

Board with P5020 dual core CPU:

[    0.000000] -----------------------------------------------------
[    0.000000] phys_mem_size     = 0x200000000
[    0.000000] dcache_bsize      = 0x40
[    0.000000] icache_bsize      = 0x40
[    0.000000] cpu_features      = 0x00000003008003b4
[    0.000000]   possible        = 0x00000003009003b4
[    0.000000]   always          = 0x00000003008003b4
[    0.000000] cpu_user_features = 0xcc008000 0x08000000
[    0.000000] mmu_features      = 0x000a0010
[    0.000000] firmware_features = 0x0000000000000000
[    0.000000] -----------------------------------------------------
[    0.000000] CoreNet Generic board

    ...

[    0.002161] smp: Bringing up secondary CPUs ...
[    0.002339] No cpu-release-addr for cpu 1
[    0.002347] smp: failed starting cpu 1 (rc -2)
[    0.002401] smp: Brought up 1 node, 1 CPU

Virtual e5500 quad core QEMU machine:

[    0.026394] smp: Bringing up secondary CPUs ...
[    0.027831] No cpu-release-addr for cpu 1
[    0.027989] smp: failed starting cpu 1 (rc -2)
[    0.030143] No cpu-release-addr for cpu 2
[    0.030304] smp: failed starting cpu 2 (rc -2)
[    0.032400] No cpu-release-addr for cpu 3
[    0.032533] smp: failed starting cpu 3 (rc -2)
[    0.033117] smp: Brought up 1 node, 1 CPU

QEMU command: ./qemu-system-ppc64 -M ppce500 -cpu e5500 -m 2048 
-kernel 
/home/christian/Downloads/vmlinux-4.20-alpha4-AmigaOne_X1000_X5000/X5000_and_QEMU_e5500/uImage-4.20 
-drive 
format=raw,file=/home/christian/Downloads/MATE_PowerPC_Remix_2017_0.9.img,index=0,if=virtio 
-nic user,model=e1000 -append "rw root=/dev/vda" -device virtio-vga 
-device virtio-mouse-pci -device virtio-keyboard-pci -usb -soundhw 
es1370 -smp 4

.config:

...
CONFIG_SMP=y
CONFIG_NR_CPUS=4
...

Please test the latest Git kernel on your NXP P50XX boards.

Thanks,
Christian

arch/powerpc/kvm/trace.h:9:0: error: "TRACE_INCLUDE_PATH" redefined

From: Christian Zigotzky <hidden>
Date: 2018-10-29 10:25:11

Hello,

The latest Git kernel doesn't compile currently because of the following 
error:


   CC      arch/powerpc/kvm/powerpc.o
In file included from arch/powerpc/kvm/powerpc.c:51:0:
arch/powerpc/kvm/trace.h:9:0: error: "TRACE_INCLUDE_PATH" redefined 
[-Werror]
  #define TRACE_INCLUDE_PATH .
  ^
In file included from arch/powerpc/kvm/../mm/mmu_decl.h:25:0,
                  from arch/powerpc/kvm/powerpc.c:48:
./arch/powerpc/include/asm/trace.h:224:0: note: this is the location of 
the previous definition
  #define TRACE_INCLUDE_PATH asm
  ^
cc1: all warnings being treated as errors
scripts/Makefile.build:305: die Regel für Ziel 
„arch/powerpc/kvm/powerpc.o“ scheiterte
make[2]: *** [arch/powerpc/kvm/powerpc.o] Fehler 1
scripts/Makefile.build:546: die Regel für Ziel „arch/powerpc/kvm“ scheiterte
make[1]: *** [arch/powerpc/kvm] Fehler 2
Makefile:1052: die Regel für Ziel „arch/powerpc“ scheiterte
make: *** [arch/powerpc] Fehler 2
christian@christian-virtual-machine:~/Downloads/a$ env LANG=C make 
CROSS_COMPILE=powerpc-linux-gnu- ARCH=powerpc uImage
   CALL    scripts/checksyscalls.sh
   CHK     include/generated/compile.h
   CALL    arch/powerpc/kernel/systbl_chk.sh
   CC      arch/powerpc/kvm/powerpc.o
In file included from arch/powerpc/kvm/powerpc.c:51:0:
arch/powerpc/kvm/trace.h:9:0: error: "TRACE_INCLUDE_PATH" redefined 
[-Werror]
  #define TRACE_INCLUDE_PATH .
  ^
In file included from arch/powerpc/kvm/../mm/mmu_decl.h:25:0,
                  from arch/powerpc/kvm/powerpc.c:48:
./arch/powerpc/include/asm/trace.h:224:0: note: this is the location of 
the previous definition
  #define TRACE_INCLUDE_PATH asm
  ^
cc1: all warnings being treated as errors
scripts/Makefile.build:305: recipe for target 
'arch/powerpc/kvm/powerpc.o' failed
make[2]: *** [arch/powerpc/kvm/powerpc.o] Error 1
scripts/Makefile.build:546: recipe for target 'arch/powerpc/kvm' failed
make[1]: *** [arch/powerpc/kvm] Error 2
Makefile:1052: recipe for target 'arch/powerpc' failed
make: *** [arch/powerpc] Error 2

---

I deleted the definition of 'TRACE_INCLUDE_PATH' in 
'arch/powerpc/kvm/trace.h'. After that the kernel compiled without any 
problems.

-- Christian

Re: NXP P50XX/e5500: SMP doesn't work anymore with the latest Git kernel

From: Christian Zigotzky <hidden>
Date: 2018-10-29 17:03:33

Hello,

I figured out that the problem is in the OF source code of the commit: 
Merge tag devicetree-for-4.20. [1]

I reverted the following OF files and SMP works!

drivers/of/base.c
drivers/of/device.c
drivers/of/of_mdio.c
drivers/of/of_numa.c
drivers/of/of_private.h
drivers/of/overlay.c
drivers/of/platform.c
drivers/of/unittest-data/overlay_15.dts
drivers/of/unittest-data/tests-overlay.dtsi
drivers/of/unittest.c
include/linux/of.h

Cheers,
Christian

[1] 
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b27186abb37b7bd19e0ca434f4f425c807dbd708


On 29 October 2018 at 10:56AM, Christian Zigotzky wrote:
Hello,

I have figured out that the commit 'devicetree-for-4.20' [1] is 
responsible for the SMP problem. I was able to revert this commit with 
'git revert b27186abb37b7bd19e0ca434f4f425c807dbd708 -m 1' today.

[master ec81438] Revert "Merge tag 'devicetree-for-4.20' of 
git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux"
138 files changed, 931 insertions(+), 1538 deletions(-)
rename Documentation/devicetree/bindings/arm/{atmel-sysregs.txt => 
atmel-at91.txt} (67%)
delete mode 100644 
Documentation/devicetree/bindings/arm/freescale/fsl,layerscape-dcfg.txt
delete mode 100644 
Documentation/devicetree/bindings/arm/freescale/fsl,layerscape-scfg.txt
rename Documentation/devicetree/bindings/arm/{zte,sysctrl.txt => 
zte.txt} (62%)
delete mode 100644 Documentation/devicetree/bindings/misc/lwn-bk4.txt
create mode 100644 arch/c6x/boot/dts/linked_dtb.S
delete mode 100644 arch/nios2/boot/dts/Makefile
create mode 100644 arch/nios2/boot/linked_dtb.S
delete mode 100644 arch/powerpc/boot/dts/Makefile
delete mode 100644 arch/powerpc/boot/dts/fsl/Makefile
delete mode 100644 scripts/dtc/yamltree.c

It solves the SMP problem! SMP works again on my P5020 board and on 
virtual e5500 QEMU machines.

QEMU command: ./qemu-system-ppc64 -M ppce500 -cpu e5500 -m 2048 
-kernel /home/christian/Downloads/uImage-4.20-alpha5 -drive 
format=raw,file=/home/christian/Dokumente/ubuntu_MATE_16.04.3_LTS_PowerPC_QEMU/ubuntu_MATE_16.04_PowerPC.img,index=0,if=virtio 
-nic user,model=e1000 -append "rw root=/dev/vda3" -device virtio-vga 
-device virtio-mouse-pci -device virtio-keyboard-pci -soundhw es1370 
-smp 4

Screenshot: 
https://plus.google.com/u/0/photos/photo/115515624056477014971/6617705776207990082

Do we need a new dtb file or is it a bug?

Thanks,
Christian

[1] 
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b27186abb37b7bd19e0ca434f4f425c807dbd708


On 28 October 2018 at 5:35PM, Christian Zigotzky wrote:
quoted
Hello,

SMP doesn't work anymore with the latest Git kernel (28/10/18 11:12AM 
GMT) on my P5020 board and on virtual e5500 QEMU machines.

Board with P5020 dual core CPU:

[    0.000000] -----------------------------------------------------
[    0.000000] phys_mem_size     = 0x200000000
[    0.000000] dcache_bsize      = 0x40
[    0.000000] icache_bsize      = 0x40
[    0.000000] cpu_features      = 0x00000003008003b4
[    0.000000]   possible        = 0x00000003009003b4
[    0.000000]   always          = 0x00000003008003b4
[    0.000000] cpu_user_features = 0xcc008000 0x08000000
[    0.000000] mmu_features      = 0x000a0010
[    0.000000] firmware_features = 0x0000000000000000
[    0.000000] -----------------------------------------------------
[    0.000000] CoreNet Generic board

    ...

[    0.002161] smp: Bringing up secondary CPUs ...
[    0.002339] No cpu-release-addr for cpu 1
[    0.002347] smp: failed starting cpu 1 (rc -2)
[    0.002401] smp: Brought up 1 node, 1 CPU

Virtual e5500 quad core QEMU machine:

[    0.026394] smp: Bringing up secondary CPUs ...
[    0.027831] No cpu-release-addr for cpu 1
[    0.027989] smp: failed starting cpu 1 (rc -2)
[    0.030143] No cpu-release-addr for cpu 2
[    0.030304] smp: failed starting cpu 2 (rc -2)
[    0.032400] No cpu-release-addr for cpu 3
[    0.032533] smp: failed starting cpu 3 (rc -2)
[    0.033117] smp: Brought up 1 node, 1 CPU

QEMU command: ./qemu-system-ppc64 -M ppce500 -cpu e5500 -m 2048 
-kernel 
/home/christian/Downloads/vmlinux-4.20-alpha4-AmigaOne_X1000_X5000/X5000_and_QEMU_e5500/uImage-4.20 
-drive 
format=raw,file=/home/christian/Downloads/MATE_PowerPC_Remix_2017_0.9.img,index=0,if=virtio 
-nic user,model=e1000 -append "rw root=/dev/vda" -device virtio-vga 
-device virtio-mouse-pci -device virtio-keyboard-pci -usb -soundhw 
es1370 -smp 4

.config:

...
CONFIG_SMP=y
CONFIG_NR_CPUS=4
...

Please test the latest Git kernel on your NXP P50XX boards.

Thanks,
Christian

Re: NXP P50XX/e5500: SMP doesn't work anymore with the latest Git kernel

From: LEROY Christophe <hidden>
Date: 2018-10-29 18:16:07

Christian Zigotzky [off-list ref] a écrit :
Hello,

I figured out that the problem is in the OF source code of the  
commit: Merge tag devicetree-for-4.20. [1]
That's a merge commit. Can you bisect the branch and identify the  
faulting commit ?

Christophe
I reverted the following OF files and SMP works!

drivers/of/base.c
drivers/of/device.c
drivers/of/of_mdio.c
drivers/of/of_numa.c
drivers/of/of_private.h
drivers/of/overlay.c
drivers/of/platform.c
drivers/of/unittest-data/overlay_15.dts
drivers/of/unittest-data/tests-overlay.dtsi
drivers/of/unittest.c
include/linux/of.h

Cheers,
Christian

[1]  
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b27186abb37b7bd19e0ca434f4f425c807dbd708


On 29 October 2018 at 10:56AM, Christian Zigotzky wrote:
quoted
Hello,

I have figured out that the commit 'devicetree-for-4.20' [1] is  
responsible for the SMP problem. I was able to revert this commit  
with 'git revert b27186abb37b7bd19e0ca434f4f425c807dbd708 -m 1'  
today.

[master ec81438] Revert "Merge tag 'devicetree-for-4.20' of  
git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux"
138 files changed, 931 insertions(+), 1538 deletions(-)
rename Documentation/devicetree/bindings/arm/{atmel-sysregs.txt =>  
atmel-at91.txt} (67%)
delete mode 100644  
Documentation/devicetree/bindings/arm/freescale/fsl,layerscape-dcfg.txt
delete mode 100644  
Documentation/devicetree/bindings/arm/freescale/fsl,layerscape-scfg.txt
rename Documentation/devicetree/bindings/arm/{zte,sysctrl.txt =>  
zte.txt} (62%)
delete mode 100644 Documentation/devicetree/bindings/misc/lwn-bk4.txt
create mode 100644 arch/c6x/boot/dts/linked_dtb.S
delete mode 100644 arch/nios2/boot/dts/Makefile
create mode 100644 arch/nios2/boot/linked_dtb.S
delete mode 100644 arch/powerpc/boot/dts/Makefile
delete mode 100644 arch/powerpc/boot/dts/fsl/Makefile
delete mode 100644 scripts/dtc/yamltree.c

It solves the SMP problem! SMP works again on my P5020 board and on  
virtual e5500 QEMU machines.

QEMU command: ./qemu-system-ppc64 -M ppce500 -cpu e5500 -m 2048  
-kernel /home/christian/Downloads/uImage-4.20-alpha5 -drive  
format=raw,file=/home/christian/Dokumente/ubuntu_MATE_16.04.3_LTS_PowerPC_QEMU/ubuntu_MATE_16.04_PowerPC.img,index=0,if=virtio -nic user,model=e1000 -append "rw root=/dev/vda3" -device virtio-vga -device virtio-mouse-pci -device virtio-keyboard-pci -soundhw es1370 -smp  
4

Screenshot:  
https://plus.google.com/u/0/photos/photo/115515624056477014971/6617705776207990082

Do we need a new dtb file or is it a bug?

Thanks,
Christian

[1]  
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b27186abb37b7bd19e0ca434f4f425c807dbd708


On 28 October 2018 at 5:35PM, Christian Zigotzky wrote:
quoted
Hello,

SMP doesn't work anymore with the latest Git kernel (28/10/18  
11:12AM GMT) on my P5020 board and on virtual e5500 QEMU machines.

Board with P5020 dual core CPU:

[    0.000000] -----------------------------------------------------
[    0.000000] phys_mem_size     = 0x200000000
[    0.000000] dcache_bsize      = 0x40
[    0.000000] icache_bsize      = 0x40
[    0.000000] cpu_features      = 0x00000003008003b4
[    0.000000]   possible        = 0x00000003009003b4
[    0.000000]   always          = 0x00000003008003b4
[    0.000000] cpu_user_features = 0xcc008000 0x08000000
[    0.000000] mmu_features      = 0x000a0010
[    0.000000] firmware_features = 0x0000000000000000
[    0.000000] -----------------------------------------------------
[    0.000000] CoreNet Generic board

    ...

[    0.002161] smp: Bringing up secondary CPUs ...
[    0.002339] No cpu-release-addr for cpu 1
[    0.002347] smp: failed starting cpu 1 (rc -2)
[    0.002401] smp: Brought up 1 node, 1 CPU

Virtual e5500 quad core QEMU machine:

[    0.026394] smp: Bringing up secondary CPUs ...
[    0.027831] No cpu-release-addr for cpu 1
[    0.027989] smp: failed starting cpu 1 (rc -2)
[    0.030143] No cpu-release-addr for cpu 2
[    0.030304] smp: failed starting cpu 2 (rc -2)
[    0.032400] No cpu-release-addr for cpu 3
[    0.032533] smp: failed starting cpu 3 (rc -2)
[    0.033117] smp: Brought up 1 node, 1 CPU

QEMU command: ./qemu-system-ppc64 -M ppce500 -cpu e5500 -m 2048  
-kernel  
/home/christian/Downloads/vmlinux-4.20-alpha4-AmigaOne_X1000_X5000/X5000_and_QEMU_e5500/uImage-4.20 -drive format=raw,file=/home/christian/Downloads/MATE_PowerPC_Remix_2017_0.9.img,index=0,if=virtio -nic user,model=e1000 -append "rw root=/dev/vda" -device virtio-vga -device virtio-mouse-pci -device virtio-keyboard-pci -usb -soundhw es1370 -smp  
4

.config:

...
CONFIG_SMP=y
CONFIG_NR_CPUS=4
...

Please test the latest Git kernel on your NXP P50XX boards.

Thanks,
Christian

Re: NXP P50XX/e5500: SMP doesn't work anymore with the latest Git kernel

From: Christian Zigotzky <hidden>
Date: 2018-10-29 20:15:05

Hello Christophe,

Bisecting isn’t necessary because the problem is in the following files.

drivers/of/base.c
drivers/of/device.c
drivers/of/of_mdio.c
drivers/of/of_numa.c
drivers/of/of_private.h
drivers/of/overlay.c
drivers/of/platform.c
drivers/of/unittest-data/overlay_15.dts
drivers/of/unittest-data/tests-overlay.dtsi
drivers/of/unittest.c
include/linux/of.h

I removed the OF modifications from the merge commit 'devicetree-for-4.20' and SMP works again.

Cheers,
Christian

Sent from my iPhone
On 29. Oct 2018, at 19:13, LEROY Christophe [off-list ref] wrote:

Christian Zigotzky [off-list ref] a écrit :
quoted
Hello,

I figured out that the problem is in the OF source code of the commit: Merge tag devicetree-for-4.20. [1]
That's a merge commit. Can you bisect the branch and identify the faulting commit ?

Christophe
quoted
I reverted the following OF files and SMP works!

drivers/of/base.c
drivers/of/device.c
drivers/of/of_mdio.c
drivers/of/of_numa.c
drivers/of/of_private.h
drivers/of/overlay.c
drivers/of/platform.c
drivers/of/unittest-data/overlay_15.dts
drivers/of/unittest-data/tests-overlay.dtsi
drivers/of/unittest.c
include/linux/of.h

Cheers,
Christian

[1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b27186abb37b7bd19e0ca434f4f425c807dbd708

quoted
On 29 October 2018 at 10:56AM, Christian Zigotzky wrote:
Hello,

I have figured out that the commit 'devicetree-for-4.20' [1] is responsible for the SMP problem. I was able to revert this commit with 'git revert b27186abb37b7bd19e0ca434f4f425c807dbd708 -m 1' today.

[master ec81438] Revert "Merge tag 'devicetree-for-4.20' of git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux"
138 files changed, 931 insertions(+), 1538 deletions(-)
rename Documentation/devicetree/bindings/arm/{atmel-sysregs.txt => atmel-at91.txt} (67%)
delete mode 100644 Documentation/devicetree/bindings/arm/freescale/fsl,layerscape-dcfg.txt
delete mode 100644 Documentation/devicetree/bindings/arm/freescale/fsl,layerscape-scfg.txt
rename Documentation/devicetree/bindings/arm/{zte,sysctrl.txt => zte.txt} (62%)
delete mode 100644 Documentation/devicetree/bindings/misc/lwn-bk4.txt
create mode 100644 arch/c6x/boot/dts/linked_dtb.S
delete mode 100644 arch/nios2/boot/dts/Makefile
create mode 100644 arch/nios2/boot/linked_dtb.S
delete mode 100644 arch/powerpc/boot/dts/Makefile
delete mode 100644 arch/powerpc/boot/dts/fsl/Makefile
delete mode 100644 scripts/dtc/yamltree.c

It solves the SMP problem! SMP works again on my P5020 board and on virtual e5500 QEMU machines.

QEMU command: ./qemu-system-ppc64 -M ppce500 -cpu e5500 -m 2048 -kernel /home/christian/Downloads/uImage-4.20-alpha5 -drive format=raw,file=/home/christian/Dokumente/ubuntu_MATE_16.04.3_LTS_PowerPC_QEMU/ubuntu_MATE_16.04_PowerPC.img,index=0,if=virtio -nic user,model=e1000 -append "rw root=/dev/vda3" -device virtio-vga -device virtio-mouse-pci -device virtio-keyboard-pci -soundhw es1370 -smp 4

Screenshot: https://plus.google.com/u/0/photos/photo/115515624056477014971/6617705776207990082

Do we need a new dtb file or is it a bug?

Thanks,
Christian

[1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b27186abb37b7bd19e0ca434f4f425c807dbd708

quoted
On 28 October 2018 at 5:35PM, Christian Zigotzky wrote:
Hello,

SMP doesn't work anymore with the latest Git kernel (28/10/18 11:12AM GMT) on my P5020 board and on virtual e5500 QEMU machines.

Board with P5020 dual core CPU:

[    0.000000] -----------------------------------------------------
[    0.000000] phys_mem_size     = 0x200000000
[    0.000000] dcache_bsize      = 0x40
[    0.000000] icache_bsize      = 0x40
[    0.000000] cpu_features      = 0x00000003008003b4
[    0.000000]   possible        = 0x00000003009003b4
[    0.000000]   always          = 0x00000003008003b4
[    0.000000] cpu_user_features = 0xcc008000 0x08000000
[    0.000000] mmu_features      = 0x000a0010
[    0.000000] firmware_features = 0x0000000000000000
[    0.000000] -----------------------------------------------------
[    0.000000] CoreNet Generic board

    ...

[    0.002161] smp: Bringing up secondary CPUs ...
[    0.002339] No cpu-release-addr for cpu 1
[    0.002347] smp: failed starting cpu 1 (rc -2)
[    0.002401] smp: Brought up 1 node, 1 CPU

Virtual e5500 quad core QEMU machine:

[    0.026394] smp: Bringing up secondary CPUs ...
[    0.027831] No cpu-release-addr for cpu 1
[    0.027989] smp: failed starting cpu 1 (rc -2)
[    0.030143] No cpu-release-addr for cpu 2
[    0.030304] smp: failed starting cpu 2 (rc -2)
[    0.032400] No cpu-release-addr for cpu 3
[    0.032533] smp: failed starting cpu 3 (rc -2)
[    0.033117] smp: Brought up 1 node, 1 CPU

QEMU command: ./qemu-system-ppc64 -M ppce500 -cpu e5500 -m 2048 -kernel /home/christian/Downloads/vmlinux-4.20-alpha4-AmigaOne_X1000_X5000/X5000_and_QEMU_e5500/uImage-4.20 -drive format=raw,file=/home/christian/Downloads/MATE_PowerPC_Remix_2017_0.9.img,index=0,if=virtio -nic user,model=e1000 -append "rw root=/dev/vda" -device virtio-vga -device virtio-mouse-pci -device virtio-keyboard-pci -usb -soundhw es1370 -smp 4

.config:

...
CONFIG_SMP=y
CONFIG_NR_CPUS=4
...

Please test the latest Git kernel on your NXP P50XX boards.

Thanks,
Christian

NXP P50XX/e5500: SMP doesn't work anymore with the latest Git kernel

From: Christian Zigotzky <hidden>
Date: 2018-10-29 22:27:00

Little progress ...

I reverted the following two OF files of the commit 'Merge tag 
devicetree-for-4.20' and SMP works! The problematic code is somewhere in 
these two files.

a/include/linux/of.h
a/drivers/of/base.c

-- Christian


On 29 October 2018 at 6:00PM, Christian Zigotzky wrote:
Hello,

I figured out that the problem is in the OF source code of the commit: 
Merge tag devicetree-for-4.20. [1]

I reverted the following OF files and SMP works!

drivers/of/base.c
drivers/of/device.c
drivers/of/of_mdio.c
drivers/of/of_numa.c
drivers/of/of_private.h
drivers/of/overlay.c
drivers/of/platform.c
drivers/of/unittest-data/overlay_15.dts
drivers/of/unittest-data/tests-overlay.dtsi
drivers/of/unittest.c
include/linux/of.h

Cheers,
Christian

[1] 
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b27186abb37b7bd19e0ca434f4f425c807dbd708


On 29 October 2018 at 10:56AM, Christian Zigotzky wrote:
quoted
Hello,

I have figured out that the commit 'devicetree-for-4.20' [1] is 
responsible for the SMP problem. I was able to revert this commit 
with 'git revert b27186abb37b7bd19e0ca434f4f425c807dbd708 -m 1' today.

[master ec81438] Revert "Merge tag 'devicetree-for-4.20' of 
git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux"
138 files changed, 931 insertions(+), 1538 deletions(-)
rename Documentation/devicetree/bindings/arm/{atmel-sysregs.txt => 
atmel-at91.txt} (67%)
delete mode 100644 
Documentation/devicetree/bindings/arm/freescale/fsl,layerscape-dcfg.txt
delete mode 100644 
Documentation/devicetree/bindings/arm/freescale/fsl,layerscape-scfg.txt
rename Documentation/devicetree/bindings/arm/{zte,sysctrl.txt => 
zte.txt} (62%)
delete mode 100644 Documentation/devicetree/bindings/misc/lwn-bk4.txt
create mode 100644 arch/c6x/boot/dts/linked_dtb.S
delete mode 100644 arch/nios2/boot/dts/Makefile
create mode 100644 arch/nios2/boot/linked_dtb.S
delete mode 100644 arch/powerpc/boot/dts/Makefile
delete mode 100644 arch/powerpc/boot/dts/fsl/Makefile
delete mode 100644 scripts/dtc/yamltree.c

It solves the SMP problem! SMP works again on my P5020 board and on 
virtual e5500 QEMU machines.

QEMU command: ./qemu-system-ppc64 -M ppce500 -cpu e5500 -m 2048 
-kernel /home/christian/Downloads/uImage-4.20-alpha5 -drive 
format=raw,file=/home/christian/Dokumente/ubuntu_MATE_16.04.3_LTS_PowerPC_QEMU/ubuntu_MATE_16.04_PowerPC.img,index=0,if=virtio 
-nic user,model=e1000 -append "rw root=/dev/vda3" -device virtio-vga 
-device virtio-mouse-pci -device virtio-keyboard-pci -soundhw es1370 
-smp 4

Screenshot: 
https://plus.google.com/u/0/photos/photo/115515624056477014971/6617705776207990082

Do we need a new dtb file or is it a bug?

Thanks,
Christian

[1] 
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b27186abb37b7bd19e0ca434f4f425c807dbd708


On 28 October 2018 at 5:35PM, Christian Zigotzky wrote:
quoted
Hello,

SMP doesn't work anymore with the latest Git kernel (28/10/18 
11:12AM GMT) on my P5020 board and on virtual e5500 QEMU machines.

Board with P5020 dual core CPU:

[    0.000000] -----------------------------------------------------
[    0.000000] phys_mem_size     = 0x200000000
[    0.000000] dcache_bsize      = 0x40
[    0.000000] icache_bsize      = 0x40
[    0.000000] cpu_features      = 0x00000003008003b4
[    0.000000]   possible        = 0x00000003009003b4
[    0.000000]   always          = 0x00000003008003b4
[    0.000000] cpu_user_features = 0xcc008000 0x08000000
[    0.000000] mmu_features      = 0x000a0010
[    0.000000] firmware_features = 0x0000000000000000
[    0.000000] -----------------------------------------------------
[    0.000000] CoreNet Generic board

    ...

[    0.002161] smp: Bringing up secondary CPUs ...
[    0.002339] No cpu-release-addr for cpu 1
[    0.002347] smp: failed starting cpu 1 (rc -2)
[    0.002401] smp: Brought up 1 node, 1 CPU

Virtual e5500 quad core QEMU machine:

[    0.026394] smp: Bringing up secondary CPUs ...
[    0.027831] No cpu-release-addr for cpu 1
[    0.027989] smp: failed starting cpu 1 (rc -2)
[    0.030143] No cpu-release-addr for cpu 2
[    0.030304] smp: failed starting cpu 2 (rc -2)
[    0.032400] No cpu-release-addr for cpu 3
[    0.032533] smp: failed starting cpu 3 (rc -2)
[    0.033117] smp: Brought up 1 node, 1 CPU

QEMU command: ./qemu-system-ppc64 -M ppce500 -cpu e5500 -m 2048 
-kernel 
/home/christian/Downloads/vmlinux-4.20-alpha4-AmigaOne_X1000_X5000/X5000_and_QEMU_e5500/uImage-4.20 
-drive 
format=raw,file=/home/christian/Downloads/MATE_PowerPC_Remix_2017_0.9.img,index=0,if=virtio 
-nic user,model=e1000 -append "rw root=/dev/vda" -device virtio-vga 
-device virtio-mouse-pci -device virtio-keyboard-pci -usb -soundhw 
es1370 -smp 4

.config:

...
CONFIG_SMP=y
CONFIG_NR_CPUS=4
...

Please test the latest Git kernel on your NXP P50XX boards.

Thanks,
Christian

Re: NXP P50XX/e5500: SMP doesn't work anymore with the latest Git kernel

From: Scott Wood <oss@buserror.net>
Date: 2018-10-29 23:08:30

On Mon, 2018-10-29 at 21:12 +0100, Christian Zigotzky wrote:
Hello Christophe,

Bisecting isn’t necessary because the problem is in the following files.

drivers/of/base.c
drivers/of/device.c
drivers/of/of_mdio.c
drivers/of/of_numa.c
drivers/of/of_private.h
drivers/of/overlay.c
drivers/of/platform.c
drivers/of/unittest-data/overlay_15.dts
drivers/of/unittest-data/tests-overlay.dtsi
drivers/of/unittest.c
include/linux/of.h

I removed the OF modifications from the merge commit 'devicetree-for-4.20'
and SMP works again.
Bisecting to get the specific non-merge commit that broke things would be much
more useful than simply identifying the affected file (especially if it's a
smallish change).

-Scott

Re: NXP P50XX/e5500: SMP doesn't work anymore with the latest Git kernel

From: Christian Zigotzky <hidden>
Date: 2018-10-30 00:44:29

On 30 October 2018 at 00:04AM, Scott Wood wrote:
On Mon, 2018-10-29 at 21:12 +0100, Christian Zigotzky wrote:
quoted
Hello Christophe,

Bisecting isn’t necessary because the problem is in the following files.

drivers/of/base.c
drivers/of/device.c
drivers/of/of_mdio.c
drivers/of/of_numa.c
drivers/of/of_private.h
drivers/of/overlay.c
drivers/of/platform.c
drivers/of/unittest-data/overlay_15.dts
drivers/of/unittest-data/tests-overlay.dtsi
drivers/of/unittest.c
include/linux/of.h

I removed the OF modifications from the merge commit 'devicetree-for-4.20'
and SMP works again.
Bisecting to get the specific non-merge commit that broke things would be much
more useful than simply identifying the affected file (especially if it's a
smallish change).

-Scott
You're right but I had no luck with bisecting in the past. I think I 
have to learn it more.

I found the problematic code and I created a patch today. SMP works with 
this patch again.

Link: http://www.xenosoft.de/of.patch

of.patch 
-------------------------------------------------------------------------------

diff -rupN a/drivers/of/base.c b/drivers/of/base.c
--- a/drivers/of/base.c    2018-10-30 01:00:59.814808778 +0100
+++ b/drivers/of/base.c    2018-10-30 01:00:27.990741603 +0100
@@ -394,7 +394,7 @@ struct device_node *of_get_cpu_node(int
  {
      struct device_node *cpun;

-    for_each_of_cpu_node(cpun) {
+    for_each_node_by_type(cpun, "cpu") {
          if (arch_find_n_match_cpu_physical_id(cpun, cpu, thread))
              return cpun;
      }
@@ -749,45 +749,6 @@ struct device_node *of_get_next_availabl
  EXPORT_SYMBOL(of_get_next_available_child);

  /**
- *    of_get_next_cpu_node - Iterate on cpu nodes
- *    @prev:    previous child of the /cpus node, or NULL to get first
- *
- *    Returns a cpu node pointer with refcount incremented, use 
of_node_put()
- *    on it when done. Returns NULL when prev is the last child. Decrements
- *    the refcount of prev.
- */
-struct device_node *of_get_next_cpu_node(struct device_node *prev)
-{
-    struct device_node *next = NULL;
-    unsigned long flags;
-    struct device_node *node;
-
-    if (!prev)
-        node = of_find_node_by_path("/cpus");
-
-    raw_spin_lock_irqsave(&devtree_lock, flags);
-    if (prev)
-        next = prev->sibling;
-    else if (node) {
-        next = node->child;
-        of_node_put(node);
-    }
-    for (; next; next = next->sibling) {
-        if (!(of_node_name_eq(next, "cpu") ||
-              (next->type && !of_node_cmp(next->type, "cpu"))))
-            continue;
-        if (!__of_device_is_available(next))
-            continue;
-        if (of_node_get(next))
-            break;
-    }
-    of_node_put(prev);
-    raw_spin_unlock_irqrestore(&devtree_lock, flags);
-    return next;
-}
-EXPORT_SYMBOL(of_get_next_cpu_node);
-
-/**
   * of_get_compatible_child - Find compatible child node
   * @parent:    parent node
   * @compatible:    compatible string
diff -rupN a/include/linux/of.h b/include/linux/of.h
--- a/include/linux/of.h    2018-10-30 01:01:01.034811355 +0100
+++ b/include/linux/of.h    2018-10-30 00:56:18.054216284 +0100
@@ -347,7 +347,6 @@ extern const void *of_get_property(const
                  const char *name,
                  int *lenp);
  extern struct device_node *of_get_cpu_node(int cpu, unsigned int *thread);
-extern struct device_node *of_get_next_cpu_node(struct device_node *prev);

  #define for_each_property_of_node(dn, pp) \
      for (pp = dn->properties; pp != NULL; pp = pp->next)
@@ -754,11 +753,6 @@ static inline struct device_node *of_get
      return NULL;
  }

-static inline struct device_node *of_get_next_cpu_node(struct 
device_node *prev)
-{
-    return NULL;
-}
-
  static inline int of_n_addr_cells(struct device_node *np)
  {
      return 0;
@@ -1229,10 +1223,6 @@ static inline int of_property_read_s32(c
      for (child = of_get_next_available_child(parent, NULL); child != 
NULL; \
           child = of_get_next_available_child(parent, child))

-#define for_each_of_cpu_node(cpu) \
-    for (cpu = of_get_next_cpu_node(NULL); cpu != NULL; \
-         cpu = of_get_next_cpu_node(cpu))
-
  #define for_each_node_with_property(dn, prop_name) \
      for (dn = of_find_node_with_property(NULL, prop_name); dn; \
           dn = of_find_node_with_property(dn, prop_name))

-------------------------------------------------------------------------------------------------------

Re: NXP P50XX/e5500: SMP doesn't work anymore with the latest Git kernel

From: Christian Zigotzky <hidden>
Date: 2018-10-30 01:44:39

OF patch for the latest Git kernel: http://www.xenosoft.de/of_v2.patch

----------------------------- of_v2.patch -----------------------------

diff -rupN a/drivers/of/base.c b/drivers/of/base.c
--- a/drivers/of/base.c    2018-10-30 02:19:30.827089495 +0100
+++ b/drivers/of/base.c    2018-10-30 02:18:51.666856715 +0100
@@ -395,7 +395,7 @@ struct device_node *of_get_cpu_node(int
  {
      struct device_node *cpun;

-    for_each_of_cpu_node(cpun) {
+    for_each_node_by_type(cpun, "cpu") {
          if (arch_find_n_match_cpu_physical_id(cpun, cpu, thread))
              return cpun;
      }
@@ -750,45 +750,6 @@ struct device_node *of_get_next_availabl
  EXPORT_SYMBOL(of_get_next_available_child);

  /**
- *    of_get_next_cpu_node - Iterate on cpu nodes
- *    @prev:    previous child of the /cpus node, or NULL to get first
- *
- *    Returns a cpu node pointer with refcount incremented, use 
of_node_put()
- *    on it when done. Returns NULL when prev is the last child. Decrements
- *    the refcount of prev.
- */
-struct device_node *of_get_next_cpu_node(struct device_node *prev)
-{
-    struct device_node *next = NULL;
-    unsigned long flags;
-    struct device_node *node;
-
-    if (!prev)
-        node = of_find_node_by_path("/cpus");
-
-    raw_spin_lock_irqsave(&devtree_lock, flags);
-    if (prev)
-        next = prev->sibling;
-    else if (node) {
-        next = node->child;
-        of_node_put(node);
-    }
-    for (; next; next = next->sibling) {
-        if (!(of_node_name_eq(next, "cpu") ||
-              (next->type && !of_node_cmp(next->type, "cpu"))))
-            continue;
-        if (!__of_device_is_available(next))
-            continue;
-        if (of_node_get(next))
-            break;
-    }
-    of_node_put(prev);
-    raw_spin_unlock_irqrestore(&devtree_lock, flags);
-    return next;
-}
-EXPORT_SYMBOL(of_get_next_cpu_node);
-
-/**
   * of_get_compatible_child - Find compatible child node
   * @parent:    parent node
   * @compatible:    compatible string
diff -rupN a/include/linux/of.h b/include/linux/of.h
--- a/include/linux/of.h    2018-10-30 02:19:32.047096634 +0100
+++ b/include/linux/of.h    2018-10-30 02:18:51.666856715 +0100
@@ -347,7 +347,6 @@ extern const void *of_get_property(const
                  const char *name,
                  int *lenp);
  extern struct device_node *of_get_cpu_node(int cpu, unsigned int *thread);
-extern struct device_node *of_get_next_cpu_node(struct device_node *prev);

  #define for_each_property_of_node(dn, pp) \
      for (pp = dn->properties; pp != NULL; pp = pp->next)
@@ -757,11 +756,6 @@ static inline struct device_node *of_get
      return NULL;
  }

-static inline struct device_node *of_get_next_cpu_node(struct 
device_node *prev)
-{
-    return NULL;
-}
-
  static inline int of_n_addr_cells(struct device_node *np)
  {
      return 0;
@@ -1239,10 +1233,6 @@ static inline int of_property_read_s32(c
      for (child = of_get_next_available_child(parent, NULL); child != 
NULL; \
           child = of_get_next_available_child(parent, child))

-#define for_each_of_cpu_node(cpu) \
-    for (cpu = of_get_next_cpu_node(NULL); cpu != NULL; \
-         cpu = of_get_next_cpu_node(cpu))
-
  #define for_each_node_with_property(dn, prop_name) \
      for (dn = of_find_node_with_property(NULL, prop_name); dn; \
           dn = of_find_node_with_property(dn, prop_name))

Re: NXP P50XX/e5500: SMP doesn't work anymore with the latest Git kernel

From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Date: 2018-10-30 02:01:30

On Tue, 2018-10-30 at 02:42 +0100, Christian Zigotzky wrote:
OF patch for the latest Git kernel: http://www.xenosoft.de/of_v2.patch
This just seems to revert a whole bunch of stuff, not really the right
way to go. Why is of_get_next_cpu_node() not finding your CPUs ? There
must be something wrong with the device-tree...
quoted hunk
----------------------------- of_v2.patch -----------------------------

diff -rupN a/drivers/of/base.c b/drivers/of/base.c
--- a/drivers/of/base.c    2018-10-30 02:19:30.827089495 +0100
+++ b/drivers/of/base.c    2018-10-30 02:18:51.666856715 +0100
@@ -395,7 +395,7 @@ struct device_node *of_get_cpu_node(int
  {
      struct device_node *cpun;

-    for_each_of_cpu_node(cpun) {
+    for_each_node_by_type(cpun, "cpu") {
          if (arch_find_n_match_cpu_physical_id(cpun, cpu, thread))
              return cpun;
      }
@@ -750,45 +750,6 @@ struct device_node *of_get_next_availabl
  EXPORT_SYMBOL(of_get_next_available_child);

  /**
- *    of_get_next_cpu_node - Iterate on cpu nodes
- *    @prev:    previous child of the /cpus node, or NULL to get first
- *
- *    Returns a cpu node pointer with refcount incremented, use 
of_node_put()
- *    on it when done. Returns NULL when prev is the last child. Decrements
- *    the refcount of prev.
- */
-struct device_node *of_get_next_cpu_node(struct device_node *prev)
-{
-    struct device_node *next = NULL;
-    unsigned long flags;
-    struct device_node *node;
-
-    if (!prev)
-        node = of_find_node_by_path("/cpus");
-
-    raw_spin_lock_irqsave(&devtree_lock, flags);
-    if (prev)
-        next = prev->sibling;
-    else if (node) {
-        next = node->child;
-        of_node_put(node);
-    }
-    for (; next; next = next->sibling) {
-        if (!(of_node_name_eq(next, "cpu") ||
-              (next->type && !of_node_cmp(next->type, "cpu"))))
-            continue;
-        if (!__of_device_is_available(next))
-            continue;
-        if (of_node_get(next))
-            break;
-    }
-    of_node_put(prev);
-    raw_spin_unlock_irqrestore(&devtree_lock, flags);
-    return next;
-}
-EXPORT_SYMBOL(of_get_next_cpu_node);
-
-/**
   * of_get_compatible_child - Find compatible child node
   * @parent:    parent node
   * @compatible:    compatible string
diff -rupN a/include/linux/of.h b/include/linux/of.h
--- a/include/linux/of.h    2018-10-30 02:19:32.047096634 +0100
+++ b/include/linux/of.h    2018-10-30 02:18:51.666856715 +0100
@@ -347,7 +347,6 @@ extern const void *of_get_property(const
                  const char *name,
                  int *lenp);
  extern struct device_node *of_get_cpu_node(int cpu, unsigned int *thread);
-extern struct device_node *of_get_next_cpu_node(struct device_node *prev);

  #define for_each_property_of_node(dn, pp) \
      for (pp = dn->properties; pp != NULL; pp = pp->next)
@@ -757,11 +756,6 @@ static inline struct device_node *of_get
      return NULL;
  }

-static inline struct device_node *of_get_next_cpu_node(struct 
device_node *prev)
-{
-    return NULL;
-}
-
  static inline int of_n_addr_cells(struct device_node *np)
  {
      return 0;
@@ -1239,10 +1233,6 @@ static inline int of_property_read_s32(c
      for (child = of_get_next_available_child(parent, NULL); child != 
NULL; \
           child = of_get_next_available_child(parent, child))

-#define for_each_of_cpu_node(cpu) \
-    for (cpu = of_get_next_cpu_node(NULL); cpu != NULL; \
-         cpu = of_get_next_cpu_node(cpu))
-
  #define for_each_node_with_property(dn, prop_name) \
      for (dn = of_find_node_with_property(NULL, prop_name); dn; \
           dn = of_find_node_with_property(dn, prop_name))

Re: NXP P50XX/e5500: SMP doesn't work anymore with the latest Git kernel

From: Christian Zigotzky <hidden>
Date: 2018-10-30 07:30:34

On 30 October 2018 at 02:59AM, Benjamin Herrenschmidt wrote:
On Tue, 2018-10-30 at 02:42 +0100, Christian Zigotzky wrote:
quoted
OF patch for the latest Git kernel: http://www.xenosoft.de/of_v2.patch
This just seems to revert a whole bunch of stuff, not really the right
way to go. Why is of_get_next_cpu_node() not finding your CPUs ? There
must be something wrong with the device-tree...
Maybe we need a new dtb for QEMU ppce500 and P50XX machines. I don't 
know. For us it is good to have this patch because we can test further. 
(other updates)
With this patch, SMP works again on virtual QEMU ppce500 and P50XX 
machines. If you have another code, then I will test it with QEMU and my 
P5020 board.

Thanks,
Christian
quoted
----------------------------- of_v2.patch -----------------------------

diff -rupN a/drivers/of/base.c b/drivers/of/base.c
--- a/drivers/of/base.c    2018-10-30 02:19:30.827089495 +0100
+++ b/drivers/of/base.c    2018-10-30 02:18:51.666856715 +0100
@@ -395,7 +395,7 @@ struct device_node *of_get_cpu_node(int
   {
       struct device_node *cpun;

-    for_each_of_cpu_node(cpun) {
+    for_each_node_by_type(cpun, "cpu") {
           if (arch_find_n_match_cpu_physical_id(cpun, cpu, thread))
               return cpun;
       }
@@ -750,45 +750,6 @@ struct device_node *of_get_next_availabl
   EXPORT_SYMBOL(of_get_next_available_child);

   /**
- *    of_get_next_cpu_node - Iterate on cpu nodes
- *    @prev:    previous child of the /cpus node, or NULL to get first
- *
- *    Returns a cpu node pointer with refcount incremented, use
of_node_put()
- *    on it when done. Returns NULL when prev is the last child. Decrements
- *    the refcount of prev.
- */
-struct device_node *of_get_next_cpu_node(struct device_node *prev)
-{
-    struct device_node *next = NULL;
-    unsigned long flags;
-    struct device_node *node;
-
-    if (!prev)
-        node = of_find_node_by_path("/cpus");
-
-    raw_spin_lock_irqsave(&devtree_lock, flags);
-    if (prev)
-        next = prev->sibling;
-    else if (node) {
-        next = node->child;
-        of_node_put(node);
-    }
-    for (; next; next = next->sibling) {
-        if (!(of_node_name_eq(next, "cpu") ||
-              (next->type && !of_node_cmp(next->type, "cpu"))))
-            continue;
-        if (!__of_device_is_available(next))
-            continue;
-        if (of_node_get(next))
-            break;
-    }
-    of_node_put(prev);
-    raw_spin_unlock_irqrestore(&devtree_lock, flags);
-    return next;
-}
-EXPORT_SYMBOL(of_get_next_cpu_node);
-
-/**
    * of_get_compatible_child - Find compatible child node
    * @parent:    parent node
    * @compatible:    compatible string
diff -rupN a/include/linux/of.h b/include/linux/of.h
--- a/include/linux/of.h    2018-10-30 02:19:32.047096634 +0100
+++ b/include/linux/of.h    2018-10-30 02:18:51.666856715 +0100
@@ -347,7 +347,6 @@ extern const void *of_get_property(const
                   const char *name,
                   int *lenp);
   extern struct device_node *of_get_cpu_node(int cpu, unsigned int *thread);
-extern struct device_node *of_get_next_cpu_node(struct device_node *prev);

   #define for_each_property_of_node(dn, pp) \
       for (pp = dn->properties; pp != NULL; pp = pp->next)
@@ -757,11 +756,6 @@ static inline struct device_node *of_get
       return NULL;
   }

-static inline struct device_node *of_get_next_cpu_node(struct
device_node *prev)
-{
-    return NULL;
-}
-
   static inline int of_n_addr_cells(struct device_node *np)
   {
       return 0;
@@ -1239,10 +1233,6 @@ static inline int of_property_read_s32(c
       for (child = of_get_next_available_child(parent, NULL); child !=
NULL; \
            child = of_get_next_available_child(parent, child))

-#define for_each_of_cpu_node(cpu) \
-    for (cpu = of_get_next_cpu_node(NULL); cpu != NULL; \
-         cpu = of_get_next_cpu_node(cpu))
-
   #define for_each_node_with_property(dn, prop_name) \
       for (dn = of_find_node_with_property(NULL, prop_name); dn; \
            dn = of_find_node_with_property(dn, prop_name))

Re: NXP P50XX/e5500: SMP doesn't work anymore with the latest Git kernel

From: Christian Zigotzky <hidden>
Date: 2018-10-30 15:09:07

On 30 October 2018 at 08:27AM, Christian Zigotzky wrote:
On 30 October 2018 at 02:59AM, Benjamin Herrenschmidt wrote:
quoted
On Tue, 2018-10-30 at 02:42 +0100, Christian Zigotzky wrote:
quoted
OF patch for the latest Git kernel: http://www.xenosoft.de/of_v2.patch
This just seems to revert a whole bunch of stuff, not really the right
way to go. Why is of_get_next_cpu_node() not finding your CPUs ? There
must be something wrong with the device-tree...
Maybe we need a new dtb for QEMU ppce500 and P50XX machines. I don't 
know. For us it is good to have this patch because we can test 
further. (other updates)
With this patch, SMP works again on virtual QEMU ppce500 and P50XX 
machines. If you have another code, then I will test it with QEMU and 
my P5020 board.

Thanks,
Christian
We use the 'cyrus_p5020.dts' file for creating the dtb file for our 
P5020 board. You can find it in the official kernel source code. 
(arch/powerpc/boot/dts/cyrus_p5020.dts)
For the virtual ppce500 machine I don't need to add a dtb file to the 
QEMU command. But maybe there is a solution:

On 30 October 2018 at 3:18PM, Michael Ellerman wrote:
Hi Rob,

Sorry I missed this when you posted it.

Rob Herring [off-list ref] writes:
quoted
Iterating thru cpu nodes is a common pattern. Create a common iterator
which can find child nodes either by node name or device_type == cpu.
Using the former will allow for eventually dropping device_type
properties which are deprecated for FDT.
Device trees we see on powerpc generally don't (never?) use "cpu" as the
node name for CPU nodes. And many of those device trees come from
firmware, so we can't update them.

So dropping support for device_type is a non-starter from our POV.

cheers

quoted
quoted
----------------------------- of_v2.patch -----------------------------

diff -rupN a/drivers/of/base.c b/drivers/of/base.c
--- a/drivers/of/base.c    2018-10-30 02:19:30.827089495 +0100
+++ b/drivers/of/base.c    2018-10-30 02:18:51.666856715 +0100
@@ -395,7 +395,7 @@ struct device_node *of_get_cpu_node(int
   {
       struct device_node *cpun;

-    for_each_of_cpu_node(cpun) {
+    for_each_node_by_type(cpun, "cpu") {
           if (arch_find_n_match_cpu_physical_id(cpun, cpu, thread))
               return cpun;
       }
@@ -750,45 +750,6 @@ struct device_node *of_get_next_availabl
   EXPORT_SYMBOL(of_get_next_available_child);

   /**
- *    of_get_next_cpu_node - Iterate on cpu nodes
- *    @prev:    previous child of the /cpus node, or NULL to get first
- *
- *    Returns a cpu node pointer with refcount incremented, use
of_node_put()
- *    on it when done. Returns NULL when prev is the last child. 
Decrements
- *    the refcount of prev.
- */
-struct device_node *of_get_next_cpu_node(struct device_node *prev)
-{
-    struct device_node *next = NULL;
-    unsigned long flags;
-    struct device_node *node;
-
-    if (!prev)
-        node = of_find_node_by_path("/cpus");
-
-    raw_spin_lock_irqsave(&devtree_lock, flags);
-    if (prev)
-        next = prev->sibling;
-    else if (node) {
-        next = node->child;
-        of_node_put(node);
-    }
-    for (; next; next = next->sibling) {
-        if (!(of_node_name_eq(next, "cpu") ||
-              (next->type && !of_node_cmp(next->type, "cpu"))))
-            continue;
-        if (!__of_device_is_available(next))
-            continue;
-        if (of_node_get(next))
-            break;
-    }
-    of_node_put(prev);
-    raw_spin_unlock_irqrestore(&devtree_lock, flags);
-    return next;
-}
-EXPORT_SYMBOL(of_get_next_cpu_node);
-
-/**
    * of_get_compatible_child - Find compatible child node
    * @parent:    parent node
    * @compatible:    compatible string
diff -rupN a/include/linux/of.h b/include/linux/of.h
--- a/include/linux/of.h    2018-10-30 02:19:32.047096634 +0100
+++ b/include/linux/of.h    2018-10-30 02:18:51.666856715 +0100
@@ -347,7 +347,6 @@ extern const void *of_get_property(const
                   const char *name,
                   int *lenp);
   extern struct device_node *of_get_cpu_node(int cpu, unsigned int 
*thread);
-extern struct device_node *of_get_next_cpu_node(struct device_node 
*prev);

   #define for_each_property_of_node(dn, pp) \
       for (pp = dn->properties; pp != NULL; pp = pp->next)
@@ -757,11 +756,6 @@ static inline struct device_node *of_get
       return NULL;
   }

-static inline struct device_node *of_get_next_cpu_node(struct
device_node *prev)
-{
-    return NULL;
-}
-
   static inline int of_n_addr_cells(struct device_node *np)
   {
       return 0;
@@ -1239,10 +1233,6 @@ static inline int of_property_read_s32(c
       for (child = of_get_next_available_child(parent, NULL); child !=
NULL; \
            child = of_get_next_available_child(parent, child))

-#define for_each_of_cpu_node(cpu) \
-    for (cpu = of_get_next_cpu_node(NULL); cpu != NULL; \
-         cpu = of_get_next_cpu_node(cpu))
-
   #define for_each_node_with_property(dn, prop_name) \
       for (dn = of_find_node_with_property(NULL, prop_name); dn; \
            dn = of_find_node_with_property(dn, prop_name))

Re: arch/powerpc/kvm/trace.h:9:0: error: "TRACE_INCLUDE_PATH" redefined

From: Christian Zigotzky <hidden>
Date: 2018-10-31 10:12:13

Hello,

I compiled the latest Git kernel today. The error 'TRACE_INCLUDE_PATH 
redefined' still exist.

Cheers,
Christian


On 29 October 2018 at 11:22AM, Christian Zigotzky wrote:
Hello,

The latest Git kernel doesn't compile currently because of the 
following error:


christian@christian-virtual-machine:~/Downloads/a$ env LANG=C make 
CROSS_COMPILE=powerpc-linux-gnu- ARCH=powerpc uImage
  CALL    scripts/checksyscalls.sh
  CHK     include/generated/compile.h
  CALL    arch/powerpc/kernel/systbl_chk.sh
  CC      arch/powerpc/kvm/powerpc.o
In file included from arch/powerpc/kvm/powerpc.c:51:0:
arch/powerpc/kvm/trace.h:9:0: error: "TRACE_INCLUDE_PATH" redefined 
[-Werror]
 #define TRACE_INCLUDE_PATH .
 ^
In file included from arch/powerpc/kvm/../mm/mmu_decl.h:25:0,
                 from arch/powerpc/kvm/powerpc.c:48:
./arch/powerpc/include/asm/trace.h:224:0: note: this is the location 
of the previous definition
 #define TRACE_INCLUDE_PATH asm
 ^
cc1: all warnings being treated as errors
scripts/Makefile.build:305: recipe for target 
'arch/powerpc/kvm/powerpc.o' failed
make[2]: *** [arch/powerpc/kvm/powerpc.o] Error 1
scripts/Makefile.build:546: recipe for target 'arch/powerpc/kvm' failed
make[1]: *** [arch/powerpc/kvm] Error 2
Makefile:1052: recipe for target 'arch/powerpc' failed
make: *** [arch/powerpc] Error 2

---

I deleted the definition of 'TRACE_INCLUDE_PATH' in 
'arch/powerpc/kvm/trace.h'. After that the kernel compiled without any 
problems.

-- Christian

Re: NXP P50XX/e5500: SMP doesn't work anymore with the latest Git kernel

From: Michael Ellerman <mpe@ellerman.id.au>
Date: 2018-10-31 13:27:51

Christian Zigotzky [off-list ref] writes:
Little progress ...

I reverted the following two OF files of the commit 'Merge tag 
devicetree-for-4.20' and SMP works! The problematic code is somewhere in 
these two files.

a/include/linux/of.h
a/drivers/of/base.c
Hi Christian,

Trying to debug things by reverting like this can work, but it's quite
error prone and is usually only used *after* a bisect has identified the
suspect code, or if a bisect can't work for some reason.

I know you said you'd had trouble bisecting in the past, but this one
should be a good one to practice on.

You already identified that the merge of the devicetree changes was the
problem, ie. 

  b27186abb37b Merge tag 'devicetree-for-4.20' of git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux


So you do:
  $ git show b27186abb37b 
  commit b27186abb37b7bd19e0ca434f4f425c807dbd708
  Merge: 0ef7791e2bfb d061864b89c3
  Author: Linus Torvalds [off-list ref]
  Date:   Fri Oct 26 12:09:58 2018 -0700
  
      Merge tag 'devicetree-for-4.20' of git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux


And that shows you the two commits that were merged 0ef7791e2bfb and
d061864b89c3. If you look at them you see:

  $ git log -1 --oneline 0ef7791e2bfb
  0ef7791e2bfb Merge branch 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git/evalenti/linux-soc-thermal
   
  $ git log -1 --oneline d061864b89c3
  d061864b89c3 ARM: dt: relicense two DT binding IRQ headers

You can see that the first one is the previous commit on Linus' branch,
ie. an unrelated merge. The 2nd commit is the commit that was on top of
robh's tree, ie. that's the start of the interesting commits for us.

You can also get to that 2nd commit using b27186abb37b^2.

If you look at what came in via Rob's branch with:

  $ git log --oneline d061864b89c3
  or
  $ git log --oneline b27186abb37b^2

You see there's quite a few commits, and in particular there's another
merge:

  389d0a8a7af8 Merge branch 'dt/cpu-type-rework' into dt/next

If we log the 2nd parent of that, we see:

 $ git log --oneline 389d0a8a7af8^2
 4c29e5934f6c microblaze: get cpu node with of_get_cpu_node
 a691240e36e3 fbdev: fsl-diu: get cpu node with of_get_cpu_node
 651d44f9679c of: use for_each_of_cpu_node iterator
 a9a455e854cd iommu: fsl_pamu: use for_each_of_cpu_node iterator
 37dc218bed44 edac: cpc925: use for_each_of_cpu_node iterator
 76ec23b127cd clk: mvebu: use for_each_of_cpu_node iterator
 7de8f4aa2f35 x86: DT: use for_each_of_cpu_node iterator
 8cabf5bc1049 SH: use for_each_of_cpu_node iterator
 38959a091e4a powerpc: 8xx: get cpu node with of_get_cpu_node
 84dbc69a2ff3 powerpc: 4xx: get cpu node with of_get_cpu_node
 a94fe366340a powerpc: use for_each_of_cpu_node iterator
 5e5abae858b5 openrisc: use for_each_of_cpu_node iterator
 1f0fe1f67cef nios2: get cpu node with of_get_cpu_node
 5a931a3c80b5 c6x: use for_each_of_cpu_node iterator
 de76e70a8d4e arm64: use for_each_of_cpu_node iterator
 5af5d40c4015 ARM: shmobile: use for_each_of_cpu_node iterator
 07d44f1f82b7 ARM: topology: remove unneeded check for /cpus node
 d4866f751edf ARM: use for_each_of_cpu_node iterator
 6487c15f1cc9 of: Support matching cpu nodes with no 'reg' property
 f1f207e43b8a of: Add cpu node iterator for_each_of_cpu_node()
 f6707fd6241e of: make PowerMac cache node search conditional on CONFIG_PPC_PMAC
 6d0a70a284be vsprintf: print OF node name using full_name
 a613b26a5013 of: Convert to using %pOFn instead of device_node.name
 6901378c799d of/unittest: add printf tests for node name
 b610e2ff4622 of/unittest: remove use of node name pointer in overlay high level test
 57361846b52b (tag: v4.19-rc2) Linux 4.19-rc2


So if we think the suspect commit is in there, we would confirm that by
checking out v4.19-rc2 and testing it works. And then checkout out
4c29e5934f6c and testing that it's broken.

Assuming the former worked and the latter was broken, we do:

 $ git bisect good v4.19-rc2
 $ git bisect bad 4c29e5934f6c 

And then just follow the prompts.

One thing to watch out for is hitting an unrelated bug, that can
sometimes derail your bisection.

In this case the bug we're looking for is that CPU 1 isn't onlined
properly. But if the system doesn't boot entirely for example then you
shouldn't mark the commit as bad, instead it's better to skip it. Then
git will choose a different commit for you to test.

Anyway hope that helps.

cheers
On 29 October 2018 at 6:00PM, Christian Zigotzky wrote:
quoted
Hello,

I figured out that the problem is in the OF source code of the commit: 
Merge tag devicetree-for-4.20. [1]

I reverted the following OF files and SMP works!

drivers/of/base.c
drivers/of/device.c
drivers/of/of_mdio.c
drivers/of/of_numa.c
drivers/of/of_private.h
drivers/of/overlay.c
drivers/of/platform.c
drivers/of/unittest-data/overlay_15.dts
drivers/of/unittest-data/tests-overlay.dtsi
drivers/of/unittest.c
include/linux/of.h

Cheers,
Christian

[1] 
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b27186abb37b7bd19e0ca434f4f425c807dbd708


On 29 October 2018 at 10:56AM, Christian Zigotzky wrote:
quoted
Hello,

I have figured out that the commit 'devicetree-for-4.20' [1] is 
responsible for the SMP problem. I was able to revert this commit 
with 'git revert b27186abb37b7bd19e0ca434f4f425c807dbd708 -m 1' today.

[master ec81438] Revert "Merge tag 'devicetree-for-4.20' of 
git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux"
138 files changed, 931 insertions(+), 1538 deletions(-)
rename Documentation/devicetree/bindings/arm/{atmel-sysregs.txt => 
atmel-at91.txt} (67%)
delete mode 100644 
Documentation/devicetree/bindings/arm/freescale/fsl,layerscape-dcfg.txt
delete mode 100644 
Documentation/devicetree/bindings/arm/freescale/fsl,layerscape-scfg.txt
rename Documentation/devicetree/bindings/arm/{zte,sysctrl.txt => 
zte.txt} (62%)
delete mode 100644 Documentation/devicetree/bindings/misc/lwn-bk4.txt
create mode 100644 arch/c6x/boot/dts/linked_dtb.S
delete mode 100644 arch/nios2/boot/dts/Makefile
create mode 100644 arch/nios2/boot/linked_dtb.S
delete mode 100644 arch/powerpc/boot/dts/Makefile
delete mode 100644 arch/powerpc/boot/dts/fsl/Makefile
delete mode 100644 scripts/dtc/yamltree.c

It solves the SMP problem! SMP works again on my P5020 board and on 
virtual e5500 QEMU machines.

QEMU command: ./qemu-system-ppc64 -M ppce500 -cpu e5500 -m 2048 
-kernel /home/christian/Downloads/uImage-4.20-alpha5 -drive 
format=raw,file=/home/christian/Dokumente/ubuntu_MATE_16.04.3_LTS_PowerPC_QEMU/ubuntu_MATE_16.04_PowerPC.img,index=0,if=virtio 
-nic user,model=e1000 -append "rw root=/dev/vda3" -device virtio-vga 
-device virtio-mouse-pci -device virtio-keyboard-pci -soundhw es1370 
-smp 4

Screenshot: 
https://plus.google.com/u/0/photos/photo/115515624056477014971/6617705776207990082

Do we need a new dtb file or is it a bug?

Thanks,
Christian

[1] 
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b27186abb37b7bd19e0ca434f4f425c807dbd708


On 28 October 2018 at 5:35PM, Christian Zigotzky wrote:
quoted
Hello,

SMP doesn't work anymore with the latest Git kernel (28/10/18 
11:12AM GMT) on my P5020 board and on virtual e5500 QEMU machines.

Board with P5020 dual core CPU:

[    0.000000] -----------------------------------------------------
[    0.000000] phys_mem_size     = 0x200000000
[    0.000000] dcache_bsize      = 0x40
[    0.000000] icache_bsize      = 0x40
[    0.000000] cpu_features      = 0x00000003008003b4
[    0.000000]   possible        = 0x00000003009003b4
[    0.000000]   always          = 0x00000003008003b4
[    0.000000] cpu_user_features = 0xcc008000 0x08000000
[    0.000000] mmu_features      = 0x000a0010
[    0.000000] firmware_features = 0x0000000000000000
[    0.000000] -----------------------------------------------------
[    0.000000] CoreNet Generic board

    ...

[    0.002161] smp: Bringing up secondary CPUs ...
[    0.002339] No cpu-release-addr for cpu 1
[    0.002347] smp: failed starting cpu 1 (rc -2)
[    0.002401] smp: Brought up 1 node, 1 CPU

Virtual e5500 quad core QEMU machine:

[    0.026394] smp: Bringing up secondary CPUs ...
[    0.027831] No cpu-release-addr for cpu 1
[    0.027989] smp: failed starting cpu 1 (rc -2)
[    0.030143] No cpu-release-addr for cpu 2
[    0.030304] smp: failed starting cpu 2 (rc -2)
[    0.032400] No cpu-release-addr for cpu 3
[    0.032533] smp: failed starting cpu 3 (rc -2)
[    0.033117] smp: Brought up 1 node, 1 CPU

QEMU command: ./qemu-system-ppc64 -M ppce500 -cpu e5500 -m 2048 
-kernel 
/home/christian/Downloads/vmlinux-4.20-alpha4-AmigaOne_X1000_X5000/X5000_and_QEMU_e5500/uImage-4.20 
-drive 
format=raw,file=/home/christian/Downloads/MATE_PowerPC_Remix_2017_0.9.img,index=0,if=virtio 
-nic user,model=e1000 -append "rw root=/dev/vda" -device virtio-vga 
-device virtio-mouse-pci -device virtio-keyboard-pci -usb -soundhw 
es1370 -smp 4

.config:

...
CONFIG_SMP=y
CONFIG_NR_CPUS=4
...

Please test the latest Git kernel on your NXP P50XX boards.

Thanks,
Christian

Re: NXP P50XX/e5500: SMP doesn't work anymore with the latest Git kernel

From: Christian Zigotzky <hidden>
Date: 2018-10-31 13:41:42

Hi Michael,

Many thanks for this good explanation. I will try to learn more about 
bisecting. Sometimes the problem is the time. I usually work for a Linux 
first level support for our AmigaOne machines. That means my main work 
is end user support. Therefore I have to learn more about second and 
third level Linux support.

Cheers,
Christian

On 31 October 2018 at 2:20PM, Michael Ellerman wrote:
Christian Zigotzky [off-list ref] writes:
quoted
Little progress ...

I reverted the following two OF files of the commit 'Merge tag
devicetree-for-4.20' and SMP works! The problematic code is somewhere in
these two files.

a/include/linux/of.h
a/drivers/of/base.c
Hi Christian,

Trying to debug things by reverting like this can work, but it's quite
error prone and is usually only used *after* a bisect has identified the
suspect code, or if a bisect can't work for some reason.

I know you said you'd had trouble bisecting in the past, but this one
should be a good one to practice on.

You already identified that the merge of the devicetree changes was the
problem, ie.

   b27186abb37b Merge tag 'devicetree-for-4.20' of git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux


So you do:
   $ git show b27186abb37b
   commit b27186abb37b7bd19e0ca434f4f425c807dbd708
   Merge: 0ef7791e2bfb d061864b89c3
   Author: Linus Torvalds [off-list ref]
   Date:   Fri Oct 26 12:09:58 2018 -0700
   
       Merge tag 'devicetree-for-4.20' of git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux


And that shows you the two commits that were merged 0ef7791e2bfb and
d061864b89c3. If you look at them you see:

   $ git log -1 --oneline 0ef7791e2bfb
   0ef7791e2bfb Merge branch 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git/evalenti/linux-soc-thermal
    
   $ git log -1 --oneline d061864b89c3
   d061864b89c3 ARM: dt: relicense two DT binding IRQ headers

You can see that the first one is the previous commit on Linus' branch,
ie. an unrelated merge. The 2nd commit is the commit that was on top of
robh's tree, ie. that's the start of the interesting commits for us.

You can also get to that 2nd commit using b27186abb37b^2.

If you look at what came in via Rob's branch with:

   $ git log --oneline d061864b89c3
   or
   $ git log --oneline b27186abb37b^2

You see there's quite a few commits, and in particular there's another
merge:

   389d0a8a7af8 Merge branch 'dt/cpu-type-rework' into dt/next

If we log the 2nd parent of that, we see:

  $ git log --oneline 389d0a8a7af8^2
  4c29e5934f6c microblaze: get cpu node with of_get_cpu_node
  a691240e36e3 fbdev: fsl-diu: get cpu node with of_get_cpu_node
  651d44f9679c of: use for_each_of_cpu_node iterator
  a9a455e854cd iommu: fsl_pamu: use for_each_of_cpu_node iterator
  37dc218bed44 edac: cpc925: use for_each_of_cpu_node iterator
  76ec23b127cd clk: mvebu: use for_each_of_cpu_node iterator
  7de8f4aa2f35 x86: DT: use for_each_of_cpu_node iterator
  8cabf5bc1049 SH: use for_each_of_cpu_node iterator
  38959a091e4a powerpc: 8xx: get cpu node with of_get_cpu_node
  84dbc69a2ff3 powerpc: 4xx: get cpu node with of_get_cpu_node
  a94fe366340a powerpc: use for_each_of_cpu_node iterator
  5e5abae858b5 openrisc: use for_each_of_cpu_node iterator
  1f0fe1f67cef nios2: get cpu node with of_get_cpu_node
  5a931a3c80b5 c6x: use for_each_of_cpu_node iterator
  de76e70a8d4e arm64: use for_each_of_cpu_node iterator
  5af5d40c4015 ARM: shmobile: use for_each_of_cpu_node iterator
  07d44f1f82b7 ARM: topology: remove unneeded check for /cpus node
  d4866f751edf ARM: use for_each_of_cpu_node iterator
  6487c15f1cc9 of: Support matching cpu nodes with no 'reg' property
  f1f207e43b8a of: Add cpu node iterator for_each_of_cpu_node()
  f6707fd6241e of: make PowerMac cache node search conditional on CONFIG_PPC_PMAC
  6d0a70a284be vsprintf: print OF node name using full_name
  a613b26a5013 of: Convert to using %pOFn instead of device_node.name
  6901378c799d of/unittest: add printf tests for node name
  b610e2ff4622 of/unittest: remove use of node name pointer in overlay high level test
  57361846b52b (tag: v4.19-rc2) Linux 4.19-rc2


So if we think the suspect commit is in there, we would confirm that by
checking out v4.19-rc2 and testing it works. And then checkout out
4c29e5934f6c and testing that it's broken.

Assuming the former worked and the latter was broken, we do:

  $ git bisect good v4.19-rc2
  $ git bisect bad 4c29e5934f6c

And then just follow the prompts.

One thing to watch out for is hitting an unrelated bug, that can
sometimes derail your bisection.

In this case the bug we're looking for is that CPU 1 isn't onlined
properly. But if the system doesn't boot entirely for example then you
shouldn't mark the commit as bad, instead it's better to skip it. Then
git will choose a different commit for you to test.

Anyway hope that helps.

cheers
quoted
On 29 October 2018 at 6:00PM, Christian Zigotzky wrote:
quoted
Hello,

I figured out that the problem is in the OF source code of the commit:
Merge tag devicetree-for-4.20. [1]

I reverted the following OF files and SMP works!

drivers/of/base.c
drivers/of/device.c
drivers/of/of_mdio.c
drivers/of/of_numa.c
drivers/of/of_private.h
drivers/of/overlay.c
drivers/of/platform.c
drivers/of/unittest-data/overlay_15.dts
drivers/of/unittest-data/tests-overlay.dtsi
drivers/of/unittest.c
include/linux/of.h

Cheers,
Christian

[1]
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b27186abb37b7bd19e0ca434f4f425c807dbd708


On 29 October 2018 at 10:56AM, Christian Zigotzky wrote:
quoted
Hello,

I have figured out that the commit 'devicetree-for-4.20' [1] is
responsible for the SMP problem. I was able to revert this commit
with 'git revert b27186abb37b7bd19e0ca434f4f425c807dbd708 -m 1' today.

[master ec81438] Revert "Merge tag 'devicetree-for-4.20' of
git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux"
138 files changed, 931 insertions(+), 1538 deletions(-)
rename Documentation/devicetree/bindings/arm/{atmel-sysregs.txt =>
atmel-at91.txt} (67%)
delete mode 100644
Documentation/devicetree/bindings/arm/freescale/fsl,layerscape-dcfg.txt
delete mode 100644
Documentation/devicetree/bindings/arm/freescale/fsl,layerscape-scfg.txt
rename Documentation/devicetree/bindings/arm/{zte,sysctrl.txt =>
zte.txt} (62%)
delete mode 100644 Documentation/devicetree/bindings/misc/lwn-bk4.txt
create mode 100644 arch/c6x/boot/dts/linked_dtb.S
delete mode 100644 arch/nios2/boot/dts/Makefile
create mode 100644 arch/nios2/boot/linked_dtb.S
delete mode 100644 arch/powerpc/boot/dts/Makefile
delete mode 100644 arch/powerpc/boot/dts/fsl/Makefile
delete mode 100644 scripts/dtc/yamltree.c

It solves the SMP problem! SMP works again on my P5020 board and on
virtual e5500 QEMU machines.

QEMU command: ./qemu-system-ppc64 -M ppce500 -cpu e5500 -m 2048
-kernel /home/christian/Downloads/uImage-4.20-alpha5 -drive
format=raw,file=/home/christian/Dokumente/ubuntu_MATE_16.04.3_LTS_PowerPC_QEMU/ubuntu_MATE_16.04_PowerPC.img,index=0,if=virtio
-nic user,model=e1000 -append "rw root=/dev/vda3" -device virtio-vga
-device virtio-mouse-pci -device virtio-keyboard-pci -soundhw es1370
-smp 4

Screenshot:
https://plus.google.com/u/0/photos/photo/115515624056477014971/6617705776207990082

Do we need a new dtb file or is it a bug?

Thanks,
Christian

[1]
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b27186abb37b7bd19e0ca434f4f425c807dbd708


On 28 October 2018 at 5:35PM, Christian Zigotzky wrote:
quoted
Hello,

SMP doesn't work anymore with the latest Git kernel (28/10/18
11:12AM GMT) on my P5020 board and on virtual e5500 QEMU machines.

Board with P5020 dual core CPU:

[    0.000000] -----------------------------------------------------
[    0.000000] phys_mem_size     = 0x200000000
[    0.000000] dcache_bsize      = 0x40
[    0.000000] icache_bsize      = 0x40
[    0.000000] cpu_features      = 0x00000003008003b4
[    0.000000]   possible        = 0x00000003009003b4
[    0.000000]   always          = 0x00000003008003b4
[    0.000000] cpu_user_features = 0xcc008000 0x08000000
[    0.000000] mmu_features      = 0x000a0010
[    0.000000] firmware_features = 0x0000000000000000
[    0.000000] -----------------------------------------------------
[    0.000000] CoreNet Generic board

     ...

[    0.002161] smp: Bringing up secondary CPUs ...
[    0.002339] No cpu-release-addr for cpu 1
[    0.002347] smp: failed starting cpu 1 (rc -2)
[    0.002401] smp: Brought up 1 node, 1 CPU

Virtual e5500 quad core QEMU machine:

[    0.026394] smp: Bringing up secondary CPUs ...
[    0.027831] No cpu-release-addr for cpu 1
[    0.027989] smp: failed starting cpu 1 (rc -2)
[    0.030143] No cpu-release-addr for cpu 2
[    0.030304] smp: failed starting cpu 2 (rc -2)
[    0.032400] No cpu-release-addr for cpu 3
[    0.032533] smp: failed starting cpu 3 (rc -2)
[    0.033117] smp: Brought up 1 node, 1 CPU

QEMU command: ./qemu-system-ppc64 -M ppce500 -cpu e5500 -m 2048
-kernel
/home/christian/Downloads/vmlinux-4.20-alpha4-AmigaOne_X1000_X5000/X5000_and_QEMU_e5500/uImage-4.20
-drive
format=raw,file=/home/christian/Downloads/MATE_PowerPC_Remix_2017_0.9.img,index=0,if=virtio
-nic user,model=e1000 -append "rw root=/dev/vda" -device virtio-vga
-device virtio-mouse-pci -device virtio-keyboard-pci -usb -soundhw
es1370 -smp 4

.config:

...
CONFIG_SMP=y
CONFIG_NR_CPUS=4
...

Please test the latest Git kernel on your NXP P50XX boards.

Thanks,
Christian

Re: arch/powerpc/kvm/trace.h:9:0: error: "TRACE_INCLUDE_PATH" redefined

From: Christian Zigotzky <hidden>
Date: 2018-11-05 07:12:59

Hello,

I compiled the RC1 of kernel 4.20 today. The error 'TRACE_INCLUDE_PATH 
redefined' still exist. Please find attached the kernel config.

Cheers,
Christian


On 31 October 2018 at 11:09AM, Christian Zigotzky wrote:
Hello,

I compiled the latest Git kernel today. The error 'TRACE_INCLUDE_PATH 
redefined' still exist.

Cheers,
Christian


On 29 October 2018 at 11:22AM, Christian Zigotzky wrote:
quoted
Hello,

The latest Git kernel doesn't compile currently because of the 
following error:


christian@christian-virtual-machine:~/Downloads/a$ env LANG=C make 
CROSS_COMPILE=powerpc-linux-gnu- ARCH=powerpc uImage
  CALL    scripts/checksyscalls.sh
  CHK     include/generated/compile.h
  CALL    arch/powerpc/kernel/systbl_chk.sh
  CC      arch/powerpc/kvm/powerpc.o
In file included from arch/powerpc/kvm/powerpc.c:51:0:
arch/powerpc/kvm/trace.h:9:0: error: "TRACE_INCLUDE_PATH" redefined 
[-Werror]
 #define TRACE_INCLUDE_PATH .
 ^
In file included from arch/powerpc/kvm/../mm/mmu_decl.h:25:0,
                 from arch/powerpc/kvm/powerpc.c:48:
./arch/powerpc/include/asm/trace.h:224:0: note: this is the location 
of the previous definition
 #define TRACE_INCLUDE_PATH asm
 ^
cc1: all warnings being treated as errors
scripts/Makefile.build:305: recipe for target 
'arch/powerpc/kvm/powerpc.o' failed
make[2]: *** [arch/powerpc/kvm/powerpc.o] Error 1
scripts/Makefile.build:546: recipe for target 'arch/powerpc/kvm' failed
make[1]: *** [arch/powerpc/kvm] Error 2
Makefile:1052: recipe for target 'arch/powerpc' failed
make: *** [arch/powerpc] Error 2

---

I deleted the definition of 'TRACE_INCLUDE_PATH' in 
'arch/powerpc/kvm/trace.h'. After that the kernel compiled without 
any problems.

-- Christian

Re: NXP P50XX/e5500: SMP doesn't work anymore with the latest Git kernel

From: Scott Wood <oss@buserror.net>
Date: 2018-11-07 02:15:59

On Sun, 2018-10-28 at 17:35 +0100, Christian Zigotzky wrote:
Hello,

SMP doesn't work anymore with the latest Git kernel (28/10/18 11:12AM 
GMT) on my P5020 board and on virtual e5500 QEMU machines.

Board with P5020 dual core CPU:

[    0.000000] -----------------------------------------------------
[    0.000000] phys_mem_size     = 0x200000000
[    0.000000] dcache_bsize      = 0x40
[    0.000000] icache_bsize      = 0x40
[    0.000000] cpu_features      = 0x00000003008003b4
[    0.000000]   possible        = 0x00000003009003b4
[    0.000000]   always          = 0x00000003008003b4
[    0.000000] cpu_user_features = 0xcc008000 0x08000000
[    0.000000] mmu_features      = 0x000a0010
[    0.000000] firmware_features = 0x0000000000000000
[    0.000000] -----------------------------------------------------
[    0.000000] CoreNet Generic board

     ...

[    0.002161] smp: Bringing up secondary CPUs ...
[    0.002339] No cpu-release-addr for cpu 1
[    0.002347] smp: failed starting cpu 1 (rc -2)
[    0.002401] smp: Brought up 1 node, 1 CPU

Virtual e5500 quad core QEMU machine:

[    0.026394] smp: Bringing up secondary CPUs ...
[    0.027831] No cpu-release-addr for cpu 1
[    0.027989] smp: failed starting cpu 1 (rc -2)
[    0.030143] No cpu-release-addr for cpu 2
[    0.030304] smp: failed starting cpu 2 (rc -2)
[    0.032400] No cpu-release-addr for cpu 3
[    0.032533] smp: failed starting cpu 3 (rc -2)
[    0.033117] smp: Brought up 1 node, 1 CPU

QEMU command: ./qemu-system-ppc64 -M ppce500 -cpu e5500 -m 2048 -kernel 
/home/christian/Downloads/vmlinux-4.20-alpha4-
AmigaOne_X1000_X5000/X5000_and_QEMU_e5500/uImage-4.20 
-drive 
format=raw,file=/home/christian/Downloads/MATE_PowerPC_Remix_2017_0.9.img,in
dex=0,if=virtio 
-nic user,model=e1000 -append "rw root=/dev/vda" -device virtio-vga 
-device virtio-mouse-pci -device virtio-keyboard-pci -usb -soundhw 
es1370 -smp 4

.config:

...
CONFIG_SMP=y
CONFIG_NR_CPUS=4
...

Please test the latest Git kernel on your NXP P50XX boards.
I wasn't able to reproduce this with top-of-tree (commit 8053e5b93eca9b) with
either qemu (e5500 on ppce500) or a hardware t4240.

-Scott

Re: NXP P50XX/e5500: SMP doesn't work anymore with the latest Git kernel

From: Christian Zigotzky <hidden>
Date: 2018-11-07 06:49:13

On 07 November 2018 at 03:11AM, Scott Wood wrote:
On Sun, 2018-10-28 at 17:35 +0100, Christian Zigotzky wrote:
quoted
Hello,

SMP doesn't work anymore with the latest Git kernel (28/10/18 11:12AM
GMT) on my P5020 board and on virtual e5500 QEMU machines.

Board with P5020 dual core CPU:

[    0.000000] -----------------------------------------------------
[    0.000000] phys_mem_size     = 0x200000000
[    0.000000] dcache_bsize      = 0x40
[    0.000000] icache_bsize      = 0x40
[    0.000000] cpu_features      = 0x00000003008003b4
[    0.000000]   possible        = 0x00000003009003b4
[    0.000000]   always          = 0x00000003008003b4
[    0.000000] cpu_user_features = 0xcc008000 0x08000000
[    0.000000] mmu_features      = 0x000a0010
[    0.000000] firmware_features = 0x0000000000000000
[    0.000000] -----------------------------------------------------
[    0.000000] CoreNet Generic board

      ...

[    0.002161] smp: Bringing up secondary CPUs ...
[    0.002339] No cpu-release-addr for cpu 1
[    0.002347] smp: failed starting cpu 1 (rc -2)
[    0.002401] smp: Brought up 1 node, 1 CPU

Virtual e5500 quad core QEMU machine:

[    0.026394] smp: Bringing up secondary CPUs ...
[    0.027831] No cpu-release-addr for cpu 1
[    0.027989] smp: failed starting cpu 1 (rc -2)
[    0.030143] No cpu-release-addr for cpu 2
[    0.030304] smp: failed starting cpu 2 (rc -2)
[    0.032400] No cpu-release-addr for cpu 3
[    0.032533] smp: failed starting cpu 3 (rc -2)
[    0.033117] smp: Brought up 1 node, 1 CPU

QEMU command: ./qemu-system-ppc64 -M ppce500 -cpu e5500 -m 2048 -kernel
/home/christian/Downloads/vmlinux-4.20-alpha4-
AmigaOne_X1000_X5000/X5000_and_QEMU_e5500/uImage-4.20
-drive
format=raw,file=/home/christian/Downloads/MATE_PowerPC_Remix_2017_0.9.img,in
dex=0,if=virtio
-nic user,model=e1000 -append "rw root=/dev/vda" -device virtio-vga
-device virtio-mouse-pci -device virtio-keyboard-pci -usb -soundhw
es1370 -smp 4

.config:

...
CONFIG_SMP=y
CONFIG_NR_CPUS=4
...

Please test the latest Git kernel on your NXP P50XX boards.
I wasn't able to reproduce this with top-of-tree (commit 8053e5b93eca9b) with
either qemu (e5500 on ppce500) or a hardware t4240.

-Scott
Hi Scott,


Thanks for testing but your test was too late because Rob Herring fixed 
this issue last week. [1]


Cheers,

Christian


[1] 
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=c961cb3be9064d1097ccc019390f8b5739daafc6
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help