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.

[参考译文] TDA4VM:[TDA4]在 u-boot 引导时将 GPIO 复位切换到以太网 phy

Guru**** 1949000 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1117209/tda4vm-tda4-toggle-gpio-reset-to-ethernet-phy-when-u-boot-boot

器件型号:TDA4VM

您好、专家  

当 u-boot 启动时、我需要将 GPIO 引脚切换为以太网 phy 芯片复位。

这个复位引脚为低电平有效、我希望这个切换引脚在上电大约2秒后保持低电平。

感谢 E2E 为我提供一些信息、但这些信息对我不起作用

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/937659/am4378-ethernet-initialization

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1114738/processor-sdk-am335x-am335x-using-two-gpio-to-reset-two-different-ethernet-phy/4132350?tisearch=e2e-quicksearch&keymatch=reset-gpios#4132350

https://patchwork.kernel.org/project/linux-omap/patch/daa29a99-0a17-d316-57eb-3e6162938d8d@ti.com/

TOGGLE 引脚为 GPIO0_30 (AF21)

因此、我尝试在 u-boot 中修改器件树

上电后、我将 GPIO0_30复位为低电平有效

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
&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>;
};
};
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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";
};
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

我是否错过了什么?

我认为这应该是可行的…

非常感谢

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

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="453606" url="~/support/processors-group/processors/f/processors-forum/1117209/tda4vm-tda4-tda4-toggle-gpo-reset-to-ethernet-phy-when -u-boot-boot/4143478#4143478"]我修改了有关 eMMC/quote 源代码启动的某些设备树属性,并在源代码中使用。]

    您可以共享该 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个月前回复的这个主题、

    它应该很有用

    此处提供其他信息:

    e2e.ti.com/.../tda4vm-q1-how-to-control-gpio-on-tda4-uboot

x 出现错误。请重试或与管理员联系。