Re: [PATCH v2] arm: dts: am335x-boneblack: add gpio-line-names
From: Drew Fustini
Date: Thu May 28 2020 - 09:16:31 EST
On Thu, May 21, 2020 at 10:09:26PM +0200, Drew Fustini wrote:
> The BeagleBone Black has P8 and P9 headers [0] which expose many of the
> AM3358 ZCZ SoC balls to stacking expansion boards called "capes", or to
> other external connections like jumper wires connected to a breadboard.
> BeagleBone users will often refer to the "Cape Exanpsion Headers" pin
> diagram [1] as it is in the "Bone101" getting started tutorial. [2]
>
> Most of the P8 and P9 header pins can muxed to a GPIO line. The
> gpio-line-names describe which P8 or P9 pin that line goes to and the
> default mux for that P8 or P9 pin if it is not GPIO.
>
> For example, gpiochip 1 line 0 is connected to P8 header pin 25 (P8_25)
> however the default device tree has the corresponding BGA ball (ZCZ U7)
> muxed to mmc1_dat0 as it is used for the on-board eMMC chip. For that
> GPIO line to be used, one would need to modify the device tree to
> disable the eMMC and change the pin mux for that ball to GPIO mode.
>
> Some of the AM3358 ZCZ balls corresponding to GPIO lines are not routed
> to a P8 or P9 header, but are instead wired to some peripheral device
> like on-board eMMC, HDMI framer IC, or status LEDs. Those names are in
> brackets to denote those GPIO lines can not be used.
>
> Some GPIO lines are named "[NC]" as the corresponding balls are not
> routed to anything on the PCB.
>
> The goal for these names is to make it easier for a user viewing the
> output of gpioinfo to determine which P8 or P9 pin is connected to a
> GPIO line. The output of gpioinfo on a BeagleBone Black would be:
>
> gpiochip0 - 32 lines:
> line 0: "[ethernet]" unused input active-high
> line 1: "[ethernet]" unused input active-high
> line 2: "P9_22 [spi0_sclk]" unused input active-high
> line 3: "P9_21 [spi0_d0]" unused input active-high
> line 4: "P9_18 [spi0_d1]" unused input active-high
> line 5: "P9_17 [spi0_cs0]" unused input active-high
> line 6: "[sd card]" "cd" input active-low [used]
> line 7: "P9_42A [ecappwm0]" unused input active-high
> line 8: "P8_35 [hdmi]" unused input active-high
> line 9: "P8_33 [hdmi]" unused input active-high
> line 10: "P8_31 [hdmi]" unused input active-high
> line 11: "P8_32 [hdmi]" unused input active-high
> line 12: "P9_20 [i2c2_sda]" unused input active-high
> line 13: "P9_19 [i2c2_scl]" unused input active-high
> line 14: "P9_26 [uart1_rxd]" unused input active-high
> line 15: "P9_24 [uart1_txd]" unused input active-high
> line 16: "[ethernet]" unused input active-high
> line 17: "[ethernet]" unused input active-high
> line 18: "[usb]" unused input active-high
> line 19: "[hdmi]" unused input active-high
> line 20: "P9_41B" unused input active-high
> line 21: "[ethernet]" unused input active-high
> line 22: "P8_19 [ehrpwm2a]" unused input active-high
> line 23: "P8_13 [ehrpwm2b]" unused input active-high
> line 24: "[NC]" unused input active-high
> line 25: "[NC]" unused input active-high
> line 26: "P8_14" unused input active-high
> line 27: "P8_17" unused input active-high
> line 28: "[ethernet]" unused input active-high
> line 29: "[ethernet]" unused input active-high
> line 30: "P9_11 [uart4_rxd]" unused input active-high
> line 31: "P9_13 [uart4_txd]" unused input active-high
> gpiochip1 - 32 lines:
> line 0: "P8_25 [emmc]" unused input active-high
> line 1: "[emmc]" unused input active-high
> line 2: "P8_5 [emmc]" unused input active-high
> line 3: "P8_6 [emmc]" unused input active-high
> line 4: "P8_23 [emmc]" unused input active-high
> line 5: "P8_22 [emmc]" unused input active-high
> line 6: "P8_3 [emmc]" unused input active-high
> line 7: "P8_4 [emmc]" unused input active-high
> line 8: "[NC]" unused input active-high
> line 9: "[NC]" unused input active-high
> line 10: "[NC]" unused input active-high
> line 11: "[NC]" unused input active-high
> line 12: "P8_12" unused input active-high
> line 13: "P8_11" unused input active-high
> line 14: "P8_16" unused input active-high
> line 15: "P8_15" unused input active-high
> line 16: "P9_15A" unused input active-high
> line 17: "P9_23" unused input active-high
> line 18: "P9_14 [ehrpwm1a]" unused input active-high
> line 19: "P9_16 [ehrpwm1b]" unused input active-high
> line 20: "[emmc]" unused input active-high
> line 21: "[usr0 led]" "beaglebone:green:heartbeat" output active-high [used]
> line 22: "[usr1 led]" "beaglebone:green:mmc0" output active-high [used]
> line 23: "[usr2 led]" "beaglebone:green:usr2" output active-high [used]
> line 24: "[usr3 led]" "beaglebone:green:usr3" output active-high [used]
> line 25: "[hdmi]" "interrupt" input active-high [used]
> line 26: "[usb]" unused input active-high
> line 27: "[hdmi audio]" "enable" output active-high [used]
> line 28: "P9_12" unused input active-high
> line 29: "P8_26" unused input active-high
> line 30: "P8_21 [emmc]" unused input active-high
> line 31: "P8_20 [emmc]" unused input active-high
> gpiochip2 - 32 lines:
> line 0: "P9_15B" unused input active-high
> line 1: "P8_18" unused input active-high
> line 2: "P8_7" unused input active-high
> line 3: "P8_8" unused input active-high
> line 4: "P8_10" unused input active-high
> line 5: "P8_9" unused input active-high
> line 6: "P8_45 [hdmi]" unused input active-high
> line 7: "P8_46 [hdmi]" unused input active-high
> line 8: "P8_43 [hdmi]" unused input active-high
> line 9: "P8_44 [hdmi]" unused input active-high
> line 10: "P8_41 [hdmi]" unused input active-high
> line 11: "P8_42 [hdmi]" unused input active-high
> line 12: "P8_39 [hdmi]" unused input active-high
> line 13: "P8_40 [hdmi]" unused input active-high
> line 14: "P8_37 [hdmi]" unused input active-high
> line 15: "P8_38 [hdmi]" unused input active-high
> line 16: "P8_36 [hdmi]" unused input active-high
> line 17: "P8_34 [hdmi]" unused input active-high
> line 18: "[ethernet]" unused input active-high
> line 19: "[ethernet]" unused input active-high
> line 20: "[ethernet]" unused input active-high
> line 21: "[ethernet]" unused input active-high
> line 22: "P8_27 [hdmi]" unused input active-high
> line 23: "P8_29 [hdmi]" unused input active-high
> line 24: "P8_28 [hdmi]" unused input active-high
> line 25: "P8_30 [hdmi]" unused input active-high
> line 26: "[emmc]" unused input active-high
> line 27: "[emmc]" unused input active-high
> line 28: "[emmc]" unused input active-high
> line 29: "[emmc]" unused input active-high
> line 30: "[emmc]" unused input active-high
> line 31: "[emmc]" unused input active-high
> gpiochip3 - 32 lines:
> line 0: "[ethernet]" unused input active-high
> line 1: "[ethernet]" unused input active-high
> line 2: "[ethernet]" unused input active-high
> line 3: "[ethernet]" unused input active-high
> line 4: "[ethernet]" unused input active-high
> line 5: "[i2c0]" unused input active-high
> line 6: "[i2c0]" unused input active-high
> line 7: "[emu]" unused input active-high
> line 8: "[emu]" unused input active-high
> line 9: "[ethernet]" unused input active-high
> line 10: "[ethernet]" unused input active-high
> line 11: "[NC]" unused input active-high
> line 12: "[NC]" unused input active-high
> line 13: "[usb]" unused input active-high
> line 14: "P9_31 [spi1_sclk]" unused input active-high
> line 15: "P9_29 [spi1_d0]" unused input active-high
> line 16: "P9_30 [spi1_d1]" unused input active-high
> line 17: "P9_28 [spi1_cs0]" unused input active-high
> line 18: "P9_42B [ecappwm0]" unused input active-high
> line 19: "P9_27" unused input active-high
> line 20: "P9_41A" unused input active-high
> line 21: "P9_25" unused input active-high
> line 22: "[NC]" unused input active-high
> line 23: "[NC]" unused input active-high
> line 24: "[NC]" unused input active-high
> line 25: "[NC]" unused input active-high
> line 26: "[NC]" unused input active-high
> line 27: "[NC]" unused input active-high
> line 28: "[NC]" unused input active-high
> line 29: "[NC]" unused input active-high
> line 30: "[NC]" unused input active-high
> line 31: "[NC]" unused input active-high
>
> [0] https://git.io/JfgOd
> [1] https://beagleboard.org/capes
> [1] https://beagleboard.org/Support/bone101
> [2] https://beagleboard.org/static/images/cape-headers.png
>
> Reviewed-by: Jason Kridner <jason@xxxxxxxxxxxxxxx>
> Reviewed-by: Robert Nelson <robertcnelson@xxxxxxxxx>
> Signed-off-by: Drew Fustini <drew@xxxxxxxxxxxxxxx>
> ---
> V2 change:
> - include output of gpioinfo to illustrate how the gpio-line-names
> will appear. My apologies for forgetting to include in V1.
>
> V1 note:
> I had posted a patch with these line names for am335x-bone-common.dtsi
> but Grygorii Strashko pointed out that the names are not applicable to
> all BeagleBone models. Thus I have created this patch to add these
> names just for the BeagleBone Black.
>
> arch/arm/boot/dts/am335x-boneblack.dts | 144 +++++++++++++++++++++++++
> 1 file changed, 144 insertions(+)
>
> diff --git a/arch/arm/boot/dts/am335x-boneblack.dts b/arch/arm/boot/dts/am335x-boneblack.dts
> index d3928662aed4..5f31e832eb82 100644
> --- a/arch/arm/boot/dts/am335x-boneblack.dts
> +++ b/arch/arm/boot/dts/am335x-boneblack.dts
> @@ -23,3 +23,147 @@ oppnitro-1000000000 {
> opp-supported-hw = <0x06 0x0100>;
> };
> };
> +
> +&gpio0 {
> + gpio-line-names =
> + "[ethernet]",
> + "[ethernet]",
> + "P9_22 [spi0_sclk]",
> + "P9_21 [spi0_d0]",
> + "P9_18 [spi0_d1]",
> + "P9_17 [spi0_cs0]",
> + "[sd card]",
> + "P9_42A [ecappwm0]",
> + "P8_35 [hdmi]",
> + "P8_33 [hdmi]",
> + "P8_31 [hdmi]",
> + "P8_32 [hdmi]",
> + "P9_20 [i2c2_sda]",
> + "P9_19 [i2c2_scl]",
> + "P9_26 [uart1_rxd]",
> + "P9_24 [uart1_txd]",
> + "[ethernet]",
> + "[ethernet]",
> + "[usb]",
> + "[hdmi]",
> + "P9_41B",
> + "[ethernet]",
> + "P8_19 [ehrpwm2a]",
> + "P8_13 [ehrpwm2b]",
> + "[NC]",
> + "[NC]",
> + "P8_14",
> + "P8_17",
> + "[ethernet]",
> + "[ethernet]",
> + "P9_11 [uart4_rxd]",
> + "P9_13 [uart4_txd]";
> +};
> +
> +&gpio1 {
> + gpio-line-names =
> + "P8_25 [emmc]",
> + "[emmc]",
> + "P8_5 [emmc]",
> + "P8_6 [emmc]",
> + "P8_23 [emmc]",
> + "P8_22 [emmc]",
> + "P8_3 [emmc]",
> + "P8_4 [emmc]",
> + "[NC]",
> + "[NC]",
> + "[NC]",
> + "[NC]",
> + "P8_12",
> + "P8_11",
> + "P8_16",
> + "P8_15",
> + "P9_15A",
> + "P9_23",
> + "P9_14 [ehrpwm1a]",
> + "P9_16 [ehrpwm1b]",
> + "[emmc]",
> + "[usr0 led]",
> + "[usr1 led]",
> + "[usr2 led]",
> + "[usr3 led]",
> + "[hdmi]",
> + "[usb]",
> + "[hdmi audio]",
> + "P9_12",
> + "P8_26",
> + "P8_21 [emmc]",
> + "P8_20 [emmc]";
> +};
> +
> +&gpio2 {
> + gpio-line-names =
> + "P9_15B",
> + "P8_18",
> + "P8_7",
> + "P8_8",
> + "P8_10",
> + "P8_9",
> + "P8_45 [hdmi]",
> + "P8_46 [hdmi]",
> + "P8_43 [hdmi]",
> + "P8_44 [hdmi]",
> + "P8_41 [hdmi]",
> + "P8_42 [hdmi]",
> + "P8_39 [hdmi]",
> + "P8_40 [hdmi]",
> + "P8_37 [hdmi]",
> + "P8_38 [hdmi]",
> + "P8_36 [hdmi]",
> + "P8_34 [hdmi]",
> + "[ethernet]",
> + "[ethernet]",
> + "[ethernet]",
> + "[ethernet]",
> + "P8_27 [hdmi]",
> + "P8_29 [hdmi]",
> + "P8_28 [hdmi]",
> + "P8_30 [hdmi]",
> + "[emmc]",
> + "[emmc]",
> + "[emmc]",
> + "[emmc]",
> + "[emmc]",
> + "[emmc]";
> +};
> +
> +&gpio3 {
> + gpio-line-names =
> + "[ethernet]",
> + "[ethernet]",
> + "[ethernet]",
> + "[ethernet]",
> + "[ethernet]",
> + "[i2c0]",
> + "[i2c0]",
> + "[emu]",
> + "[emu]",
> + "[ethernet]",
> + "[ethernet]",
> + "[NC]",
> + "[NC]",
> + "[usb]",
> + "P9_31 [spi1_sclk]",
> + "P9_29 [spi1_d0]",
> + "P9_30 [spi1_d1]",
> + "P9_28 [spi1_cs0]",
> + "P9_42B [ecappwm0]",
> + "P9_27",
> + "P9_41A",
> + "P9_25",
> + "[NC]",
> + "[NC]",
> + "[NC]",
> + "[NC]",
> + "[NC]",
> + "[NC]",
> + "[NC]",
> + "[NC]",
> + "[NC]",
> + "[NC]";
> +};
> --
> 2.25.1
>
FYI - Linus W. provided an Acked-by in related thread [0].
Anyone else have any review comments?
thank you,
drew
[0] https://lore.kernel.org/linux-devicetree/CACRpkdZLRjcE0FGwVR-Q7a50aEmpB=xO4q6H8_EaV199fGr0OA@xxxxxxxxxxxxxx/