linux-gbmc: Verify npcm7xx pinctrl pins from the common file
We want to make sure our common file pinctrl names match the source
file, we have changes to the names between versions that can cause us to
go out of sync.
Tested: Verified that this was working by deleting our file override which produced an error during the build
```
| Missing pin: GPIO20/HGPIO0/SMB4CSDA/SMB15SDA
| Missing pin: GPIO20/HGPIO0/SMB4CSDA/SMB15SDA
| Missing pin: GPIO20/HGPIO0/SMB4CSDA/SMB15SDA
| Missing pin: GPIO21/HGPIO1/SMB4CSCL/SMB15SCL
| Missing pin: GPIO21/HGPIO1/SMB4CSCL/SMB15SCL
| Missing pin: GPIO22/HGPIO2/SMB4DSDA/SMB14SDA
| Missing pin: GPIO22/HGPIO2/SMB4DSDA/SMB14SDA
| Missing pin: GPIO23/HGPIO3/SMB4DSCL/SMB14SCL
| Missing pin: GPIO23/HGPIO3/SMB4DSCL/SMB14SCL
| Missing pin: GPIO24/HGPIO4/IOXHDO
| Missing pin: GPIO24/HGPIO4/IOXHDO
| Missing pin: GPIO24/HGPIO4/IOXHDO
| Missing pin: GPIO25/HGPIO5/IOXHDI
| Missing pin: GPIO25/HGPIO5/IOXHDI
| Missing pin: GPIO25/HGPIO5/IOXHDI
| Missing pin: GPIO59/HGPIO6/SMB3DSDA
| Missing pin: GPIO59/HGPIO6/SMB3DSDA
| Missing pin: GPIO59/HGPIO6/SMB3DSDA
| Missing pin: GPIO60/HGPIO7/SMB3DSCL
| Missing pin: GPIO60/HGPIO7/SMB3DSCL
| Missing pin: GPIO60/HGPIO7/SMB3DSCL
```
Change-Id: I165be26385ec7114e8db6c139b17f499830995bf
Signed-off-by: William A. Kennington III <wak@google.com>
diff --git a/recipes-kernel/linux/files/gbmc-verify-pins.sh b/recipes-kernel/linux/files/gbmc-verify-pins.sh
new file mode 100755
index 0000000..073ee5d
--- /dev/null
+++ b/recipes-kernel/linux/files/gbmc-verify-pins.sh
@@ -0,0 +1,20 @@
+#!/bin/bash
+i_file="$1"
+dts="$2"
+
+# Map out all of the pins from the pre-processed file
+declare -A i_pins
+while read -r pin; do
+ i_pins["$pin"]=1
+done < <(sed -n '/{ .number = [0-9]*, .name = /s,.*"\([^"]*\)".*,\1,p' "$i_file")
+rc=0
+
+# For each pin in the dtsi, make sure the string exists in the source code
+# Otherwise, we will have silent pin mapping issues at runtime
+while read -r pin; do
+ if [ -z "${i_pins["$pin"]-}" ]; then
+ echo "Missing pin: $pin" >&2
+ rc=1
+ fi
+done < <(grep 'pins = ' "$dts" | sed 's,.*"\(.*\)".*,\1,')
+exit $rc
diff --git a/recipes-kernel/linux/linux-gbmc.inc b/recipes-kernel/linux/linux-gbmc.inc
index b2e5c3e..e8317b7 100644
--- a/recipes-kernel/linux/linux-gbmc.inc
+++ b/recipes-kernel/linux/linux-gbmc.inc
@@ -15,6 +15,7 @@
file://DOWNSTREAM_0001-gBMC-Splice.patch \
file://linux-gbmc \
file://gbmc-trim-kconfig.sh \
+ file://gbmc-verify-pins.sh \
file://DOWNSTREAM_0001-misc-Add-gBMC-subfolder.patch \
${@bb.utils.contains('PACKAGECONFIG', 'emmc', 'file://emmc.cfg', '', d)} \
${@bb.utils.contains('PACKAGECONFIG', 'usb-host', 'file://usb-host.cfg', '', d)} \
@@ -81,6 +82,12 @@
mkdir -p ${S}/arch/arm/boot/dts/nuvoton
cp ${WORKDIR}/npcm7xx-gbmc-common.dtsi ${S}/arch/arm/boot/dts/nuvoton/
}
+do_compile:prepend:npcm7xx() {
+ # We need the file after running the preprocessor so we get the macro expanded struct values
+ oe_runmake -C ${S} O=${B} drivers/pinctrl/nuvoton/pinctrl-npcm7xx.i
+ # Compare the struct values to the values in the dtsi
+ bash ${WORKDIR}/gbmc-verify-pins.sh ${B}/drivers/pinctrl/nuvoton/pinctrl-npcm7xx.i ${S}/arch/arm/boot/dts/nuvoton/npcm7xx-gbmc-common.dtsi
+}
# Rewrite the splice patch to include all of the dropped-in files
do_ksrc_splice_post() {