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.

PROCESSOR-SDK-J7200: ENET-FW running on U-Boot

Part Number: PROCESSOR-SDK-J7200

Hi TI

This issue was expected to be supported in SDK 8.4, but it still doesn't work.
Can you please check if it's reproducible from your side.

It looks like it was run from Uboot, but still no link is established.
The following is observed on top of PSDK 8.4.
And let us know how to make the function activated on U-BOOT. how to verify?



Thanks.
Regards,
Jack

  • Hi,

    The 8.4 Linux SDK has the native Linux driver for cpsw 5g.

    Do you want to use the ethernet firmware based solution?

    Also at U-Boot cpsw2g is enabled can you use that?

    Best Regards,

    Keerthy

  • Hi Keerthy

    We know that cpsw2g can be supported in U-boot.

    Can you please check if cpsw5g can be used in U-boot? It's the requirement of Customer' project. cpsw2g will not be required for the project.

    We've heard that cpsw5g can be activated on U-boot with latest SDK release. 

    Regards, 

    Jack 

  • Hi,

    Both ethfw and native-linux-driver can be used to control cpsw5g. From u-boot it is easier to use native-linux-driver. I will mention the changes required for the same in this post. If the customer wants to opt for Ethfw based solution, let me know. Different changed have to made in both ethfw and u-boot to enable that. The nattive-linux driver runs while booting u-boot and doesn't require rproc.

    Using cpsw5g in u-boot is not out-of-box configuration. If you want to use cpsw5g in u-boot, you would have to make changes in device-tree and add cpsw5g node and pin-ctrl nodes for the pin configurations of cpsw ports and mdio.

    For reference, you can see the " mcu_cpsw" node in [Linux-SDK-Install-dir]/board-support/u-boot-[commit-hash]/arch/arm/dts/k3-j7200-mcu-wakeup.dtsi for cpsw 5g node and "mcu_cpsw_pins_default" and "mcu_mdio_pins_default" nodes in [Linux-SDK-Install-dir]/board-support/u-boot-[commit-hash]/arch/arm/dts/k3-j7200-common-proc-board.dts for pin-ctrl.

    For clocks and register ranges, you can use the following reference :

    cpsw0: ethernet@c000000 {
    		compatible = "ti,j7200-cpswxg-nuss";
    		#address-cells = <2>;
    		#size-cells = <2>;
    		reg = <0x00 0xc000000 0x00 0x200000>;
    		reg-names = "cpsw_nuss";
    		ranges = <0x00 0x00 0x00 0xc000000 0x00 0x200000>;
    		clocks = <&k3_clks 19 33>;
    		clock-names = "fck";
    		power-domains = <&k3_pds 19 TI_SCI_PD_EXCLUSIVE>;
    
    		dmas = <&main_udmap 0xca00>,
    		       <&main_udmap 0xca01>,
    		       <&main_udmap 0xca02>,
    		       <&main_udmap 0xca03>,
    		       <&main_udmap 0xca04>,
    		       <&main_udmap 0xca05>,
    		       <&main_udmap 0xca06>,
    		       <&main_udmap 0xca07>,
    		       <&main_udmap 0x4a00>;
    		dma-names = "tx0", "tx1", "tx2", "tx3",
    			    "tx4", "tx5", "tx6", "tx7",
    			    "rx";
    
    		ethernet-ports {
    			#address-cells = <1>;
    			#size-cells = <0>;
    			cpsw0_port1: port@1 {
    				reg = <1>;
    				ti,mac-only;
    				label = "port1";
    			};
    
    			cpsw0_port2: port@2 {
    				reg = <2>;
    				ti,mac-only;
    				label = "port2";
    			};
    
    			cpsw0_port3: port@3 {
    				reg = <3>;
    				ti,mac-only;
    				label = "port3";
    			};
    
    			cpsw0_port4: port@4 {
    				reg = <4>;
    				ti,mac-only;
    				label = "port4";
    			};
    		};
    
    		cpsw5g_mdio: mdio@f00 {
    			compatible = "ti,cpsw-mdio","ti,davinci_mdio";
    			reg = <0x00 0xf00 0x00 0x100>;
    			#address-cells = <1>;
    			#size-cells = <0>;
    			clocks = <&k3_clks 19 33>;
    			clock-names = "fck";
    			bus_freq = <1000000>;
    		};
    
    		cpts@3d000 {
    			compatible = "ti,j721e-cpts";
    			reg = <0x00 0x3d000 0x00 0x400>;
    			clocks = <&k3_clks 19 16>;
    			clock-names = "cpts";
    			interrupts-extended = <&gic500 GIC_SPI 16 IRQ_TYPE_LEVEL_HIGH>;
    			interrupt-names = "cpts";
    			ti,cpts-ext-ts-inputs = <4>;
    			ti,cpts-periodic-outputs = <2>;
    		};
    	};

  • Hi Tanmay

    The following error log is found even though the above node from the reference has been added into the original dts file. 

    Customer engineer said the above changes were added into the file below.

    [Linux-SDK-Install-dir]/board-support/u-boot-[commit-hash]/arch/arm/dts/k3-j7200-mcu-wakeup.dtsi

    Then the test result is same as below.

    => rproc init
    k3_r5f_rproc r5f@41000000: Core 1 is already in use. No rproc commands work
    k3_r5f_rproc r5f@41400000: Core 2 is already in use. No rproc commands work
    => load mmc 0:2 0x90000000 /lib/firmware/j7200-main-r5f0_0-fw
    634196 bytes read in 5 ms (121 MiB/s)
    => rproc load 2 0x90000000 0x${filesize}
    Load Remote Processor 2 with data@addr=0x90000000 634196 bytes: Success!
    => rproc start 2
    =>
    k3_r5f_rproc r5f@5c00000: Invalid op: Trying to load/start on already running core 6
    Operation Failed with error (-22)
    =>
    

    Please check the issue as we have no capability to deep dive the issue.

    And could you please also provide us with dts file which the functionality on EVM Kit is identified as a HotFix ?

    Thanks.

    Regards, 

    Jack

  • Hi Jack,

    As stated in the my previous reply, the native-linux driver runs while booting u-boot and doesn't require rproc. Hence, rproc should not be used with this method. rproc is used to load the firmware in a "remote-core". As native-linux-driver runs on A72 (as opposed the ethfw, which runs on R5F), please don't use rproc.

    The driver should be enabled by default while booting and ideally, you should be able to ping from the u-boot prompt. you can see this thread for testing ping from u-boot prompt.

    May I know you use-case for network application so that I will be able to assist you in deciding weather to continue with this or port ethfw to work with u-boot.

    Regards,
    Tanmay