This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好、专家
当 u-boot 启动时、我需要将 GPIO 引脚切换为以太网 phy 芯片复位。
这个复位引脚为低电平有效、我希望这个切换引脚在上电大约2秒后保持低电平。
感谢 E2E 为我提供一些信息、但这些信息对我不起作用
https://patchwork.kernel.org/project/linux-omap/patch/daa29a99-0a17-d316-57eb-3e6162938d8d@ti.com/
TOGGLE 引脚为 GPIO0_30 (AF21)
因此、我尝试在 u-boot 中修改器件树
上电后、我将 GPIO0_30复位为低电平有效
&davinci_mdio { status = "okay"; reset-gpios = <&main_gpio0 30 GPIO_ACTIVE_LOW>; reset-delay-us = <2000000>; initially-in-reset = <1>; phy0: ethernet-phy@0 { reg = <0>; max-speed = <100>; }; };
main_gpio0: gpio@600000 { compatible = "ti,j721e-gpio", "ti,keystone-gpio"; reg = <0x0 0x00600000 0x0 0x100>; gpio-controller; #gpio-cells = <2>; interrupt-parent = <&main_gpio_intr>; interrupts = <256>, <257>, <258>, <259>, <260>, <261>, <262>, <263>; interrupt-controller; #interrupt-cells = <2>; ti,ngpio = <128>; ti,davinci-gpio-unbanked = <0>; power-domains = <&k3_pds 105 TI_SCI_PD_EXCLUSIVE>; clocks = <&k3_clks 105 0>; clock-names = "gpio"; };
我是否错过了什么?
我认为这应该是可行的…
非常感谢
Gibbs
您好、Gibbs、
我相信您所指的 E2E DaVinci_MDIO 节点来自内核、而不是 U-Boot。
MDIO 的 U-boot 代码位于:drivers/net/ti/cpsw_mdio.c 下、此代码没有任何代码可用于处理或解析已添加的重置 GPIO 属性:
RESET-GPIO =<&MAIN_GPIO0 30 GPIO_ACTIVE_LOW>;
RESET-DELAY_us =<2000000>;
因此、即使在添加该值之后、您也不会看到任何差异。
建议您仔细查看:
drivers/net/sun8i_emac.c 并解析属性并根据需要使用它们来设置 GPIO。
关闭此项。
-凯尔西
谢谢 Keerty。
好的~让我再次检查一件事!
因为我在 u-boot 源代码中找到了设备树配置,所以路径如下所示:
TI-processor-sdk-linux-j7-evm-08_02_00_03\board-support\u-boot-2021.01+gitAUTOINC+44a87e3ab8-g44a87e3ab8\arch\arm\dts\ k3-j721e-common-proc-board.dts
TI-processor-sdk-linux-j7-evm-08_02_00_03\board-support\u-boot-2021.01+gitAUTOINC+44a87e3ab8-g44a87e3ab8\arch\arm\dts\ k3-j721e.dtsi
等等
我在 u-boot 源码中修改一些有关 eMMC 的器件树属性、它起作用。
您是否意味着这些器件树代码无用?
我感觉有点困惑、我需要再次仔细检查您的意思。
非常感谢
Gibbs
您可以共享该 DT 代码吗? 当我在"drivers"下搜索"reset-GPIO"时、我会看到这种情况:
drivers/i2c/acpi_i2c.c: acpi_dp_add_gpio (dsd、"reset-gpio"、path、
drivers/i2c/acpi_i2c.c:gpio_request_by_name (dev、"reset-gpios"、0、&priv->reset_gpio、
drivers/i2c/muxs/pca954x.c: err = GPIO_request_by_name (dev、"reset-gpios"、0、
drivers/MISC/IHS_FPGA.c: RET = GPIO_REQUEST_BY_NAME (dev、"RESET-GPIOs"、0、&priv->RESET_GPIO、
drivers/MMC/meson_GX_MMC.c: RET = GPIO_request_by_name (dev、"reset-GPIOs"、0、&RESET、GPIOD_IS_OUT);
drivers/MMC/Rockchip_dw_MMC.c: RET = GPIO_request_by_name (dev、"reset-GPIOs"、0、&reset、GPIOD_IS_OUT);
drivers/net/DWC_eth_qos.c: RET = GPIO_request_by_name (dev、"phy-reset-gpios"、0、
drivers/net/DWC_eth_QoS.c: //在 phy 节点中搜索"reset-GPIO"*/
drivers/net/DWC_eth_QoS.c: "reset-GPIOs"、0、
drivers/net/fec_mxc.c: RET = GPIO_Request_by_name (dev、"phy-reset-gpios"、0、
drivers/net/mtk_eth.c: GPIO_request_by_name (dev、"reset-GPIOs"、0、
drivers/net/mvneta.c: GPIO_request_by_name (dev、"phy-reset-gpios"、0、
drivers/net/mvpp2.c: GPIO_request_by_name (dev、"phy-reset-gpio"、0、
drivers/net/cic32_eth.c: GPIO_request_by_name_nodev (dev_ofnode (dev)、"reset-gpio"、0、
drivers/net/ravb.c: GPIO_request_by_name_nodev (phandle_args.node、"reset-GPIOs"、0、
drivers/net/ravb.c: GPIO_request_by_name (dev、"reset-gpio"、0、Ð-> reset_gpio、
drivers/net/sh_eth.c: GPIO_request_by_name_nodev (phandle_args.node、"reset-gpios"、0、
drivers/net/sh_eth.c: gpio_request_by_name (udev、"reset-gpios"、0、&priv->reset_gpio、
drivers/PCI/PCI-aardvark.c: GPIO_request_by_name (dev、"reset-gpio"、0、&pcie->reset_gpio、
drivers/sysinfo/gazerbeam.c: gpio_num = gpio_request_list_by_name (dev、"reset-gpios"、
drivers/sysinfo/gazerbeam.c: 调试("%s":获取 GPIO 列表时出错"设置-GPIOs"(err =%d)\n"、
drivers/video/bridge/video-bridge-uclass.c: RET = GPIO_request_by_name (dev、"reset-gpios"、0、&uC_priv->reset、
drivers/video/bridge/video-bridge-uclass.c: debug ("%s:无法解码 reset-GPIO (%d)\n"、__func__、ret);
drivers/video/orisetech_otm8009a.c: RET = GPIO_request_by_name (dev、"reset-GPIOs"、0、&priv->reset、
drivers/video/raydium-rm68200.c: RET = GPIO_request_by_name (dev、"reset-gpios"、0、&priv->reset、
通常、上述驱动程序会解析 RESET-GPIO 属性并根据需要进行切换。
当您说 eMMC 正常工作时、您能在您的一侧确认吗? 您所做的 DT diff 和更改是什么?
-凯尔西
大家好、Keerty
我不确定 GPIO 切换是否在器件树中工作、因为我正在找到答案。
关于 GPIO 切换、修改器件树不是唯一的解决方案、修改源代码也很好。
我可能会尝试找到方法。
例如 、我在 u-boot *。dts 中的体验、与您共享信息:
我们的客户板仅支持低速 SD 引导、
SD 引导分两级、u-boot 引导和 Linux 引导。
SD u-boot 启动基于低速3.3V、Linux 启动基于高速1.8V
因此,您需要禁用1.8V,并保持低速启动
如下所示。
SD 卡 Linux 引导、具有"低速"、3.3V 驱动、
这是正常工作的、因此应该是一些函数在 u-boot 器件树中工作。
Gibbs
您好、Gibbs、
驱动程序/视频/射频-rm68200.c
在 U-boot 文件中。函数:rm68200_panel_ofdata_TO_platdata
RET = GPIO_REQUEST_BY_NAME (dev、"RESET-GPIOs"、0、&priv->reset、
GPIOD_IC_OUT);
如果(RET){
DEV_ERR (dev、"警告:无法获得复位 GPIO\n");
if (ret!=-ENOENT)
回程;
}
在您想要控制 GPIO 的驱动程序中添加一些如上所示的代码。
您将在 priv->reset 中获得 GPIO 句柄
然后、您可以使用如下所示的内容:
/*重置面板*/
dm_gpio_set_value (&priv->reset、true);
mdelay (1);
dm_gpio_set_value (&priv->reset、false);
mdelay (10);
进行切换。
您还需要确保为 GPIO 输出模式正确设置 pinmux、如下例所示。
sw10_button_pins_default:sw10-button-pine-default{
pinctrl-single、pins =<
J721E_IOPAD (0x0、PIN_INPUT、7)/*(AC18) EXTINTn.GPIO0_0 *
>;
};
文件中:arch/arm/dts/k3-j721e-common-proc-board.dts
-凯尔西
大家好、Keerty
谢谢
我还找到了您4个月前回复的这个主题、
它应该很有用
此处提供其他信息: