Skip to content

Commit 9be94d5

Browse files
committed
raspberry-pi: fix DTB name mapping for U-Boot
- Gate on rpiVersion instead of architecture; skip for Pi 4+ where vendor and upstream DTB names already match - Fix bcm2835-rpi-zero.dtb: was copied from bcm2708-rpi-b-plus (wrong board), now uses bcm2708-rpi-zero - Drop bcm2711-rpi-4-b -> bcm2838-rpi-4-b copy; nothing uses bcm2838-* Ref: https://github.com/u-boot/u-boot/blob/master/board/raspberrypi/rpi/rpi.c
1 parent 2096f3f commit 9be94d5

1 file changed

Lines changed: 33 additions & 38 deletions

File tree

raspberry-pi/common/kernel.nix

Lines changed: 33 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -72,42 +72,37 @@ lib.overrideDerivation
7272
sed -i $buildRoot/include/config/auto.conf -e 's/^CONFIG_LOCALVERSION=.*/CONFIG_LOCALVERSION=""/'
7373
'';
7474

75-
# Make copies of the DTBs named after the upstream names so that U-Boot finds them.
76-
# This is ugly as heck, but I don't know a better solution so far.
77-
postFixup = ''
78-
dtbDir=${if stdenv.hostPlatform.isAarch64 then "$out/dtbs/broadcom" else "$out/dtbs"}
79-
rm $dtbDir/bcm283*.dtb
80-
copyDTB() {
81-
cp -v "$dtbDir/$1" "$dtbDir/$2"
82-
}
83-
''
84-
+ lib.optionalString (lib.elem stdenv.hostPlatform.system [ "armv6l-linux" ]) ''
85-
copyDTB bcm2708-rpi-zero-w.dtb bcm2835-rpi-zero.dtb
86-
copyDTB bcm2708-rpi-zero-w.dtb bcm2835-rpi-zero-w.dtb
87-
copyDTB bcm2708-rpi-b.dtb bcm2835-rpi-a.dtb
88-
copyDTB bcm2708-rpi-b.dtb bcm2835-rpi-b.dtb
89-
copyDTB bcm2708-rpi-b.dtb bcm2835-rpi-b-rev2.dtb
90-
copyDTB bcm2708-rpi-b-plus.dtb bcm2835-rpi-a-plus.dtb
91-
copyDTB bcm2708-rpi-b-plus.dtb bcm2835-rpi-b-plus.dtb
92-
copyDTB bcm2708-rpi-b-plus.dtb bcm2835-rpi-zero.dtb
93-
copyDTB bcm2708-rpi-cm.dtb bcm2835-rpi-cm.dtb
94-
''
95-
+ lib.optionalString (lib.elem stdenv.hostPlatform.system [ "armv7l-linux" ]) ''
96-
copyDTB bcm2709-rpi-2-b.dtb bcm2836-rpi-2-b.dtb
97-
''
98-
+
99-
lib.optionalString
100-
(lib.elem stdenv.hostPlatform.system [
101-
"armv7l-linux"
102-
"aarch64-linux"
103-
])
104-
''
105-
copyDTB bcm2710-rpi-zero-2.dtb bcm2837-rpi-zero-2.dtb
106-
copyDTB bcm2710-rpi-zero-2-w.dtb bcm2837-rpi-zero-2-w.dtb
107-
copyDTB bcm2710-rpi-3-b.dtb bcm2837-rpi-3-b.dtb
108-
copyDTB bcm2710-rpi-3-b-plus.dtb bcm2837-rpi-3-a-plus.dtb
109-
copyDTB bcm2710-rpi-3-b-plus.dtb bcm2837-rpi-3-b-plus.dtb
110-
copyDTB bcm2710-rpi-cm3.dtb bcm2837-rpi-cm3.dtb
111-
copyDTB bcm2711-rpi-4-b.dtb bcm2838-rpi-4-b.dtb
112-
'';
75+
# The vendor kernel uses different DTB names (bcm2708/bcm2709/bcm2710) than what
76+
# U-Boot expects (bcm2835/bcm2836/bcm2837). Starting with Pi 4, names match.
77+
# See: https://github.com/u-boot/u-boot/blob/master/board/raspberrypi/rpi/rpi.c
78+
postFixup = lib.optionalString (rpiVersion < 4) (
79+
''
80+
dtbDir=${if stdenv.hostPlatform.isAarch64 then "$out/dtbs/broadcom" else "$out/dtbs"}
81+
rm $dtbDir/bcm283*.dtb
82+
copyDTB() {
83+
cp -v "$dtbDir/$1" "$dtbDir/$2"
84+
}
85+
''
86+
+ lib.optionalString (rpiVersion == 1) ''
87+
copyDTB bcm2708-rpi-zero.dtb bcm2835-rpi-zero.dtb
88+
copyDTB bcm2708-rpi-zero-w.dtb bcm2835-rpi-zero-w.dtb
89+
copyDTB bcm2708-rpi-b.dtb bcm2835-rpi-a.dtb
90+
copyDTB bcm2708-rpi-b.dtb bcm2835-rpi-b.dtb
91+
copyDTB bcm2708-rpi-b.dtb bcm2835-rpi-b-rev2.dtb
92+
copyDTB bcm2708-rpi-b-plus.dtb bcm2835-rpi-a-plus.dtb
93+
copyDTB bcm2708-rpi-b-plus.dtb bcm2835-rpi-b-plus.dtb
94+
copyDTB bcm2708-rpi-cm.dtb bcm2835-rpi-cm.dtb
95+
''
96+
+ lib.optionalString (rpiVersion == 2) ''
97+
copyDTB bcm2709-rpi-2-b.dtb bcm2836-rpi-2-b.dtb
98+
''
99+
+ lib.optionalString (rpiVersion == 3) ''
100+
copyDTB bcm2710-rpi-zero-2.dtb bcm2837-rpi-zero-2.dtb
101+
copyDTB bcm2710-rpi-zero-2-w.dtb bcm2837-rpi-zero-2-w.dtb
102+
copyDTB bcm2710-rpi-3-b.dtb bcm2837-rpi-3-b.dtb
103+
copyDTB bcm2710-rpi-3-b-plus.dtb bcm2837-rpi-3-a-plus.dtb
104+
copyDTB bcm2710-rpi-3-b-plus.dtb bcm2837-rpi-3-b-plus.dtb
105+
copyDTB bcm2710-rpi-cm3.dtb bcm2837-rpi-cm3.dtb
106+
''
107+
);
113108
})

0 commit comments

Comments
 (0)