在哪里可以找到有关内核设备树 pinctrl 参数的文档?
Posted
技术标签:
【中文标题】在哪里可以找到有关内核设备树 pinctrl 参数的文档?【英文标题】:Where to find documentation about the kernel device tree pinctrl parameters? 【发布时间】:2020-11-08 09:54:43 【问题描述】:我正在尝试将新的以太网设备添加到现有的 stm32mp1 板上,但我在设备树部分有点迷失了。
到目前为止我发现了什么:
在 board.dts 文件中,我可以找到连接到以太网 PHY 的引脚:
&pinctrl
ethernet0_rgmii_pins: rgmii-0
pins1
pinmux = <STM32_PINMUX('G', 4, AF11)>, /* ETH_RGMII_GTX_CLK */
<STM32_PINMUX('B', 12, AF11)>, /* ETH_RGMII_TXD0 */
<STM32_PINMUX('G', 14, AF11)>, /* ETH_RGMII_TXD1 */
<STM32_PINMUX('C', 2, AF11)>, /* ETH_RGMII_TXD2 */
<STM32_PINMUX('E', 2, AF11)>, /* ETH_RGMII_TXD3 */
<STM32_PINMUX('G', 11, AF11)>, /* ETH_RGMII_TX_CTL */
<STM32_PINMUX('C', 1, AF11)>; /* ETH_MDC */
bias-disable;
drive-push-pull;
slew-rate = <2>;
;
pins2
pinmux = <STM32_PINMUX('A', 2, AF11)>; /* ETH_MDIO */
bias-disable;
drive-push-pull;
slew-rate = <0>;
;
pins3
pinmux = <STM32_PINMUX('C', 4, AF11)>, /* ETH_RGMII_RXD0 */
<STM32_PINMUX('C', 5, AF11)>, /* ETH_RGMII_RXD1 */
<STM32_PINMUX('H', 6, AF11)>, /* ETH_RGMII_RXD2 */
<STM32_PINMUX('H', 7, AF11)>, /* ETH_RGMII_RXD3 */
<STM32_PINMUX('A', 1, AF11)>, /* ETH_RGMII_RX_CLK */
<STM32_PINMUX('A', 7, AF11)>; /* ETH_RGMII_RX_CTL */
bias-disable;
;
;
;
ðernet0
status = "okay";
pinctrl-0 = <ðernet0_rmii_pins>;
pinctrl-names = "default";
phy-mode = "rgmii";
phy-handle = <&phy0>;
st,eth_clk_sel = <1>;
max-speed = <1000>;
clock-names = "stmmaceth", "mac-clk-tx", "mac-clk-rx", "eth-ck", "syscfg-clk", "ethstp";
clocks = <&rcc ETHMAC>, <&rcc ETHTX>, <&rcc ETHRX>, <&rcc ETHCK_K>, <&rcc SYSCFG>, <&rcc ETHSTP>;
mdio0
#address-cells = <1>;
#size-cells = <0>;
compatible = "snps,dwmac-mdio";
phy0: ethernet-phy@0
reg = <0>;
ti,rx-internal-delay = <DP83867_RGMIIDCTL_2_25_NS>;
ti,tx-internal-delay = <DP83867_RGMIIDCTL_2_75_NS>;
ti,fifo-depth = <DP83867_PHYCR_FIFO_DEPTH_4_B_NIB>;
ti,dp83867-rxctrl-strap-quirk;
;
;
;
例如,在 pin1 部分中,连接了以下引脚:
pinmux = <STM32_PINMUX('G', 4, AF11)>, /* ETH_RGMII_GTX_CLK */
<STM32_PINMUX('B', 12, AF11)>, /* ETH_RGMII_TXD0 */
<STM32_PINMUX('G', 14, AF11)>, /* ETH_RGMII_TXD1 */
<STM32_PINMUX('C', 2, AF11)>, /* ETH_RGMII_TXD2 */
<STM32_PINMUX('E', 2, AF11)>, /* ETH_RGMII_TXD3 */
<STM32_PINMUX('G', 11, AF11)>, /* ETH_RGMII_TX_CTL */
<STM32_PINMUX('C', 1, AF11)>; /* ETH_MDC */
然后这里会用到pin-group:
pinctrl-0 = <ðernet0_rgmii_pins>;
pinctrl-names = "default";
但是顺序是如何以及在哪里定义的?之后如何传递给 PHY 设备驱动程序?如果我将 PHY 从 RGMII 更改为 RMII 会怎样?那么管脚的数量减少了,但是我必须按什么顺序放置管脚呢?
遗憾的是我找不到任何文档,也许有人可以在这里帮助我。
谢谢。
【问题讨论】:
【参考方案1】:顺序无关紧要。 pinctrl 所做的只是将物理引脚连接到正确的外围设备。作为 GMAC 外设的硅片并不关心使用的是哪个特定引脚。
如果这是您关心的问题,我怀疑是否可以交换引脚 B12 和 G14 的角色以充当 TXD1 和 TXD0。
【讨论】:
以上是关于在哪里可以找到有关内核设备树 pinctrl 参数的文档?的主要内容,如果未能解决你的问题,请参考以下文章