[PATCH] ARM: dts: Add empty "chosen" node to WM8xxx device trees

From: Brigham Campbell
Date: Fri Oct 09 2020 - 12:57:52 EST


The following patch is a bug fix for an issue introduced by commit
abe60a3a7afb4058278864aa18c5faf62094c11a which removed the deprecated
device tree skeletons.

For the devices corresponding to these device trees, an updated version
of U-Boot is not available. Therefore, we must append DTBs to the kernel
instead of counting on the bootloader to load one into memory and pass
the pointer to the kernel during init.

For some reason, when this method of appending DTBs to the kernel is
used with any revision after abe60a3a7, the DTB seems to load correctly,
but the kernel parameters aren't loaded correctly. Regardless of whether
the kernel parameters are built into the kernel or passed in via U-Boot,
they simply aren't registered by the running kernel.

Adding an empty "chosen" node to the device tree fixes this issue. I've
tested this with a WM8650-based laptop. Regrettably, I'd be lying if I
said that I know exactly why this fixes the problem. However, I know
that this solution works. I'm happy to hear suggestions/ridicule
regarding these changes.

Finally, I have my suspicions that the WM8xxx series devices aren't the
only ones affected by this issue. I think this solution, if acceptable,
could be applied to other devices which may or may not be having issues
related to appended DTBs and kernel parameters. Perhaps other devices
which commit abe60a3a7 changed?

This is my first patch submission to the Linux kernel, so please tear it
apart. Let me know what I've done incorrectly. And thanks, Alexey, for
helping me along. I have much to learn and I wouldn't have made it half
as far without his patience.

Thanks,
Brigham Campbell

Signed-off-by: Brigham Campbell <me@xxxxxxxxxxxxxxxxxxx>

---
arch/arm/boot/dts/wm8505.dtsi | 2 ++
arch/arm/boot/dts/wm8650.dtsi | 2 ++
arch/arm/boot/dts/wm8850.dtsi | 2 ++
3 files changed, 6 insertions(+)

diff --git a/arch/arm/boot/dts/wm8505.dtsi b/arch/arm/boot/dts/wm8505.dtsi
index 168cd12b07bc..2b814b48b458 100644
--- a/arch/arm/boot/dts/wm8505.dtsi
+++ b/arch/arm/boot/dts/wm8505.dtsi
@@ -10,6 +10,8 @@ / {
#size-cells = <1>;
compatible = "wm,wm8505";

+ chosen {};
+
cpus {
#address-cells = <0>;
#size-cells = <0>;
diff --git a/arch/arm/boot/dts/wm8650.dtsi b/arch/arm/boot/dts/wm8650.dtsi
index bc057b6f7d16..a68c82c8035e 100644
--- a/arch/arm/boot/dts/wm8650.dtsi
+++ b/arch/arm/boot/dts/wm8650.dtsi
@@ -10,6 +10,8 @@ / {
#size-cells = <1>;
compatible = "wm,wm8650";

+ chosen {};
+
cpus {
#address-cells = <0>;
#size-cells = <0>;
diff --git a/arch/arm/boot/dts/wm8850.dtsi b/arch/arm/boot/dts/wm8850.dtsi
index 65c9271050e6..c864883ae777 100644
--- a/arch/arm/boot/dts/wm8850.dtsi
+++ b/arch/arm/boot/dts/wm8850.dtsi
@@ -10,6 +10,8 @@ / {
#size-cells = <1>;
compatible = "wm,wm8850";

+ chosen {};
+
cpus {
#address-cells = <1>;
#size-cells = <0>;
--
2.28.0