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.

[参考译文] 在 Linux 内核引导期间加载 ICSSG PRU 固件

Guru**** 2487425 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1412636/icssg-pru-firmware-loading-during-linux-kernel-boot

器件型号:AM6422
主题中讨论的其他器件:SK-AM64B

工具与软件:

您好!

我需要将 KSZ9477 ethernel 交换机 IC 连接到 AM642x。 使用的 SDK 版本是9.02.01.10

 AM642x 的 PRU 与 KSZ 开关之间的接口是 mii。因此下面是内核中更改的 k3-am642-sk.dts 文件。

kszpruicssg0miigrt1_pins_default: kszpruicssg0miigrt1-default-pins {
		pinctrl-single,pins = <
			AM64X_IOPAD(0x01f0, PIN_INPUT, 1) /* (AA4) PRG0_PRU1_GPO16.PR0_MII_MT1_CLK */
			AM64X_IOPAD(0x01ec, PIN_OUTPUT, 0) /* (U5) PRG0_PRU1_GPO15.PR0_MII1_TXEN */
			AM64X_IOPAD(0x01e8, PIN_OUTPUT, 0) /* (U6) PRG0_PRU1_GPO14.PR0_MII1_TXD3 */
			AM64X_IOPAD(0x01e4, PIN_OUTPUT, 0) /* (T6) PRG0_PRU1_GPO13.PR0_MII1_TXD2 */
			AM64X_IOPAD(0x01e0, PIN_OUTPUT, 0) /* (Y4) PRG0_PRU1_GPO12.PR0_MII1_TXD1 */
			AM64X_IOPAD(0x01dc, PIN_OUTPUT, 0) /* (W4) PRG0_PRU1_GPO11.PR0_MII1_TXD0 */
			AM64X_IOPAD(0x01c0, PIN_INPUT, 1) /* (W3) PRG0_PRU1_GPO4.PR0_MII1_RXDV */
			AM64X_IOPAD(0x01c8, PIN_INPUT, 1) /* (R5) PRG0_PRU1_GPO6.PR0_MII_MR1_CLK */
			AM64X_IOPAD(0x01bc, PIN_INPUT, 1) /* (T4) PRG0_PRU1_GPO3.PR0_MII1_RXD3 */
			AM64X_IOPAD(0x01b8, PIN_INPUT, 1) /* (V3) PRG0_PRU1_GPO2.PR0_MII1_RXD2 */
			AM64X_IOPAD(0x01c4, PIN_INPUT, 1) /* (P4) PRG0_PRU1_GPO5.PR0_MII1_RXER */
			AM64X_IOPAD(0x01b4, PIN_INPUT, 1) /* (W2) PRG0_PRU1_GPO1.PR0_MII1_RXD1 */
			AM64X_IOPAD(0x01b0, PIN_INPUT, 1) /* (Y2) PRG0_PRU1_GPO0.PR0_MII1_RXD0 */
			AM64X_IOPAD(0x01d0, PIN_INPUT, 1) /* (R1) PRG0_PRU1_GPO8.PR0_MII1_RXLINK */
		>;
	};
	
	
icssg1_eth: icssg1-eth {
		compatible = "ti,am642-icssg-prueth";
		pinctrl-names = "default";
		pinctrl-0 = <&kszpruicssg0miigrt1_pins_default>;

		sram = <&oc_sram>;
		ti,prus = <&pru1_0>, <&rtu1_0>, <&tx_pru1_0>, <&pru1_1>, <&rtu1_1>, <&tx_pru1_1>;
		firmware-name = "ti-pruss/am65x-sr2-pru0-prueth-fw.elf",
				"ti-pruss/am65x-sr2-rtu0-prueth-fw.elf",
				"ti-pruss/am65x-sr2-txpru0-prueth-fw.elf",
				"ti-pruss/am65x-sr2-pru1-prueth-fw.elf",
				"ti-pruss/am65x-sr2-rtu1-prueth-fw.elf",
				"ti-pruss/am65x-sr2-txpru1-prueth-fw.elf";

		ti,pruss-gp-mux-sel = <2>,	/* MII mode */
				      <2>,
				      <2>,
				      <2>,	/* MII mode */
				      <2>,
				      <2>;

		ti,mii-g-rt = <&icssg1_mii_g_rt>;
		ti,mii-rt = <&icssg1_mii_rt>;
		ti,pa-stats = <&icssg1_pa_stats>;
		iep = <&icssg1_iep0>,  <&icssg1_iep1>;

		interrupt-parent = <&icssg1_intc>;
		interrupts = <24 0 2>, <25 1 3>;
		interrupt-names = "tx_ts0", "tx_ts1";

		dmas = <&main_pktdma 0xc200 15>, /* egress slice 0 */
		       <&main_pktdma 0xc201 15>, /* egress slice 0 */
		       <&main_pktdma 0xc202 15>, /* egress slice 0 */
		       <&main_pktdma 0xc203 15>, /* egress slice 0 */
		       <&main_pktdma 0xc204 15>, /* egress slice 1 */
		       <&main_pktdma 0xc205 15>, /* egress slice 1 */
		       <&main_pktdma 0xc206 15>, /* egress slice 1 */
		       <&main_pktdma 0xc207 15>, /* egress slice 1 */
		       <&main_pktdma 0x4200 15>, /* ingress slice 0 */
		       <&main_pktdma 0x4201 15>, /* ingress slice 1 */
		       <&main_pktdma 0x4202 0>, /* mgmnt rsp slice 0 */
		       <&main_pktdma 0x4203 0>; /* mgmnt rsp slice 1 */
		dma-names = "tx0-0", "tx0-1", "tx0-2", "tx0-3",
			    "tx1-0", "tx1-1", "tx1-2", "tx1-3",
			    "rx0", "rx1";

		ethernet-ports {
			#address-cells = <1>;
			#size-cells = <0>;
			icssg1_emac0: port@0 {
				reg = <0>;
				phy-handle = <&icssg1_phy1>;
				phy-mode = "rgmii-id";
				ti,syscon-rgmii-delay = <&main_conf 0x4110>;
				/* Filled in by bootloader */
				local-mac-address = [00 00 00 00 00 00];
			};
			icssg1_emac1: port@1 {
				reg = <1>;
				ti,syscon-rgmii-delay = <&main_conf 0x4114>;
				/* Filled in by bootloader */
				local-mac-address = [00 00 00 00 00 00];
				status = "disabled";
			};
		};
	};
	
	
&icssg1_eth {
	pinctrl-0 = <&kszpruicssg0miigrt1_pins_default>;
	status = "okay";
};

&icssg1_emac0 {
	phy-mode = "mii";
};

&icssg1_emac1 {
	status = "okay";
	phy-handle = <&icssg1_phy2>;
	phy-mode = "mii";
}; 

这就是与 ICSSG PRU 相关的更改。 我的要求是 在内核启动期间自动加载位于/lib/firmware/pru/ti-prus 中的 PRU 固件。

根据我的了解、加载固件的方法有2种:

方法1:通过 uboot

方法2:通过内核引导。

如果我的陈述正确、请更正我的问题。

但我正在尝试方法2。 因此,请告诉我,如果需要在 DTS 中进行任何更改,因为在内核启动期间无法自动加载固件。 无法看到相同的任何内核日志消息。 我还按照以下链接启用了与 ICSSG PRU 相关的内核 confis : pru_icssg ethernel

下面还提供了完整的 DTS 文件供参考。 请你在这方面给我建议。

此致、

Ankush

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

    您好 Ankush:

    您是否有 AM64x EVM? 如果是、您可以通过在 uboot 中运行以下命令来测试加载 MII 接口:
    https://software-dl.ti.com/processor-sdk-linux/esd/AM64X/09_02_01_09/exports/docs/linux/Foundational_Components / PRU-ICSS / Linux_Drivers / PRU_ICSSG_ETHERNET.html#MII-support

    看起来您的 devicetre 文件附件实际上没有附加。

    下面是另一个使用 MII PRU 以太网的客户、就在 SDK 的早期版本上。 他们的线程可能会给您一些想法:
    https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1390617/am6422-linux-icssg0-mii

    此致、

    Nick

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

    您好 Ankush:

    我本周五想通读你们的代码并输出、但时间太短了。 如果我在周二之前没有再次回复、请 ping 该主题。

    此致、

    Nick

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

    您好、Nick。

    您可以看看这个问题并提供您的建议吗?

    此致、

    Ankush

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

    您好 Ankush:

    连接到外部 PHY 的 PRU 以太网端口有多少个? 1? 2?

    我提出问题的原因是、在 devicetre 文件的一部分中、您仅启用1个 PRU 以太网接口:

    			icssg0_emac0: port@0 {
    				reg = <0>;
    				phy-handle = <&icssg0_phy1>;
    				phy-mode = "mii";
    				/*ti,syscon-rgmii-delay = <&main_conf 0x4110>;*/
    				/* Filled in by bootloader */
    				local-mac-address = [00 00 00 00 00 00];
    			};
    			icssg0_emac1: port@1 {
    				reg = <1>;
    				/*ti,syscon-rgmii-delay = <&main_conf 0x4114>;*/
    				/* Filled in by bootloader */
    				local-mac-address = [00 00 00 00 00 00];
    				status = "disabled";
    			};

    但稍后在您的 devicetree 文件中、您会覆盖这些设置以启用两个 PRU 以太网接口。 我认为这段代码基于您的其他代码是错误的:

    &icssg0_emac0 {
    	phy-mode = "mii";
    };
    
    &icssg0_emac1 {
    	status = "okay";
    	phy-handle = <&icssg1_phy2>;
    	phy-mode = "mii";
    }; 

    AM64x MAC 与外部 ksz9477之间是否存在独立 PHY? 还是直接连接以太网布线?

    此致、

    Nick

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

    您好、Nick。

    [报价 userid="280115" url="~/support/processors-group/processors/f/processors-forum/1412636/icssg-pru-firmware-loading-during-linux-kernel-boot/5417036 #5417036"]但是稍后在您的 devicetre 文件中、您将覆盖这些设置以启用两个 PRU 以太网接口。 我假设此代码是基于您的其他代码的错误:

    我启用两个 PRU 接口的原因是、我不确定哪些接口可以使用。 如果需要进行任何更改才能更正此部分、请指导我。 。 KSZ9477的端口6 连接的电线 J10连接器 PRG0_PRU1接口 终止电压 MII LED 驱动器。 在 DTS 文件中的 PIN_MUX 设置中更新了相同的内容。

     

    AM64x MAC 与外部 ksz9477之间是否有单独的 PHY? 还是直接连接以太网布线?[/QUOT]

    打开了 没有单独的 PHY 在 AM64x MAC 和外部 KSZ9477 EVM 之间连接。 我 对是否应在 icssg0_eth 节点内更新 ksz 节点有疑问。 请建议我在这个.

    此致、

    Ankush

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

    您好 Ankush:

    我将在 devicetree 文件中对看起来不正确的内容发表评论。 但请记住、TI 不会生产 KSZ9477、而且我们不支持关于如何使其与 Linux 处理器配合使用的问题。 我们有常规 PHY 可以与我们的芯片一起使用、但我不知道 KSZ9477的行为是否像常规 PHY。 则需要从 Microchip 获取支持。

    我在中只看到了一个使用该器件的示例
    arm/boot/dts/microchip/at91-sama5d3_ksz9477_evb.dts

    其他器件说明

    也许不应该注释掉以太网端口{。

    查看您在数据表中设置的 MII 引脚复用-哪个 PRU 内核与这些信号相关联? 确保已启用 PRU 接口且另一个接口已禁用(即应禁用 devicetre 文件中的另一个 emacX 节点)。

    此致、

    Nick

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

    您好、Nick。

    请等待我们的答复。

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

    Nick、

    您可以建议、因为我一直在这个问题上。

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

    您好!

    有关此问题的任何更新?

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

    您好 Ankush:

    很抱歉您在此丢失了您的主题。 您是否仍需要帮助?

    此致、

    Nick

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

    您好、Nick。

    感谢您的延迟响应。 我们可以解决这个问题。