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.

[FAQ] J721S2XSOMXEVM: Enable Other Uarts for boot logs in SPL ?

Part Number: J721S2XSOMXEVM

Tool/software:

How to enable other uart for getting the boot logs?

  • HI Gokul,

    ============================================================================================================

                                                                                     WKUP UART

    ========================================================================

    The below patch will help in enabling WKUP UART for the boot logs in SPL Boot flow:

    NOTE: When using UART BOOT MODE, ensure that you are loading tiboot3.bin through MCU UART and tispl.bin and u-boot.img through WKUP UART.

    J7200:

    diff --git a/arch/arm/mach-k3/r5/j7200/clk-data.c b/arch/arm/mach-k3/r5/j7200/clk-data.c
    index eb8436de..b95d4435 100644
    --- a/arch/arm/mach-k3/r5/j7200/clk-data.c
    +++ b/arch/arm/mach-k3/r5/j7200/clk-data.c
    @@ -62,6 +62,17 @@ static const char * const wkup_i2c0_mcupll_bypass_clksel_out0_parents[] = {
     	"gluelogic_hfosc0_clkout",
     };
     
    +static const char * const wkupusart_clk_sel_out0_parents[] = {
    +	"hsdiv4_16fft_mcu_1_hsdivout3_clk",
    +	"postdiv2_16fft_main_1_hsdivout5_clk",
    +};
    +
    +static const char * const wkup_usart_mcupll_bypass_clksel_out0_parents[] = {
    +	"wkupusart_clk_sel_out0",
    +	"gluelogic_hfosc0_clkout",
    +};
    +
    +
     static const char * const main_pll_hfosc_sel_out0_parents[] = {
     	"gluelogic_hfosc0_clkout",
     	"board_0_hfosc1_clk_out",
    @@ -419,6 +430,8 @@ static const struct clk_data clk_list[] = {
     	CLK_DIV("osbclk0_div_out0", "obsclk0_mux_out0", 0x108000, 8, 8, 0, 0),
     	CLK_DIV("k3_pll_ctrl_wrap_main_0_chip_div24_clk_clk", "k3_pll_ctrl_wrap_main_0_sysclkout_clk", 0x41011c, 0, 5, 0, 0),
     	CLK_DIV("k3_pll_ctrl_wrap_wkup_0_chip_div24_clk_clk", "k3_pll_ctrl_wrap_wkup_0_sysclkout_clk", 0x4201011c, 0, 5, 0, 0),
    +CLK_MUX("wkupusart_clk_sel_out0", wkupusart_clk_sel_out0_parents, 2, 0x43008064, 0, 1, 0),
    +	CLK_MUX("wkup_usart_mcupll_bypass_clksel_out0", wkup_usart_mcupll_bypass_clksel_out0_parents, 2, 0x43008060, 0, 1, 0),
     };
     
     static const struct dev_clk soc_dev_clk_data[] = {
    @@ -554,6 +567,10 @@ static const struct dev_clk soc_dev_clk_data[] = {
     	DEV_CLK(323, 0, "main_pll8_sel_extwave_out0"),
     	DEV_CLK(323, 1, "pllfracf_ssmod_16fft_main_8_foutvcop_clk"),
     	DEV_CLK(323, 2, "hsdiv0_16fft_main_8_hsdivout0_clk"),
    +	DEV_CLK(287, 2, "wkup_usart_mcupll_bypass_clksel_out0"),
    +	DEV_CLK(287, 3, "wkupusart_clk_sel_out0"),
    +	DEV_CLK(287, 4, "gluelogic_hfosc0_clkout"),
    +	DEV_CLK(287, 5, "k3_pll_ctrl_wrap_wkup_0_chip_div1_clk_clk"),
     };
     
     const struct ti_k3_clk_platdata j7200_clk_platdata = {
    diff --git a/arch/arm/mach-k3/r5/j7200/dev-data.c b/arch/arm/mach-k3/r5/j7200/dev-data.c
    index 8ce6796f..ae24e573 100644
    --- a/arch/arm/mach-k3/r5/j7200/dev-data.c
    +++ b/arch/arm/mach-k3/r5/j7200/dev-data.c
    @@ -69,6 +69,7 @@ static struct ti_dev soc_dev_list[] = {
     	PSC_DEV(103, &soc_lpsc_list[14]),
     	PSC_DEV(104, &soc_lpsc_list[15]),
     	PSC_DEV(102, &soc_lpsc_list[16]),
    +	PSC_DEV(287, &soc_lpsc_list[13]),
     };
     
     const struct ti_k3_pd_platdata j7200_pd_platdata = {
    diff --git a/dts/upstream/src/arm64/ti/k3-j7200-common-proc-board.dts b/dts/upstream/src/arm64/ti/k3-j7200-common-proc-board.dts
    index 735ffd3f..2823ff13 100644
    --- a/dts/upstream/src/arm64/ti/k3-j7200-common-proc-board.dts
    +++ b/dts/upstream/src/arm64/ti/k3-j7200-common-proc-board.dts
    @@ -18,9 +18,9 @@
     	model = "Texas Instruments J7200 EVM";
     
     	aliases {
    -		serial0 = &wkup_uart0;
    +		serial0 = &main_uart0;
     		serial1 = &mcu_uart0;
    -		serial2 = &main_uart0;
    +		serial2 = &wkup_uart0;
     		serial3 = &main_uart1;
     		serial5 = &main_uart3;
     		mmc0 = &main_sdhci0;
    @@ -270,7 +270,7 @@
     
     &wkup_uart0 {
     	/* Wakeup UART is used by System firmware */
    -	status = "reserved";
    +	status = "okay";
     	pinctrl-names = "default";
     	pinctrl-0 = <&wkup_uart0_pins_default>;
     	bootph-all;
    diff --git a/dts/upstream/src/arm64/ti/k3-j7200-mcu-wakeup.dtsi b/dts/upstream/src/arm64/ti/k3-j7200-mcu-wakeup.dtsi
    index d9a40b48..c24b1c8f 100644
    --- a/dts/upstream/src/arm64/ti/k3-j7200-mcu-wakeup.dtsi
    +++ b/dts/upstream/src/arm64/ti/k3-j7200-mcu-wakeup.dtsi
    @@ -274,11 +274,10 @@
     		compatible = "ti,j721e-uart", "ti,am654-uart";
     		reg = <0x00 0x42300000 0x00 0x100>;
     		interrupts = <GIC_SPI 897 IRQ_TYPE_LEVEL_HIGH>;
    -		clock-frequency = <48000000>;
    +		clock-frequency = <96000000>;
     		power-domains = <&k3_pds 287 TI_SCI_PD_EXCLUSIVE>;
     		clocks = <&k3_clks 287 2>;
     		clock-names = "fclk";
    -		status = "disabled";
     	};
     
     	mcu_uart0: serial@40a00000 {
    
    diff --git a/board/ti/j721e/j721e.env b/board/ti/j721e/j721e.env
    index 54cffa52..37214c3c 100644
    --- a/board/ti/j721e/j721e.env
    +++ b/board/ti/j721e/j721e.env
    @@ -14,7 +14,7 @@ defined(CONFIG_TARGET_J721E_R5_EVM)
     
     name_kern=Image
     console=ttyS2,115200n8
    -args_all=setenv optargs ${optargs} earlycon=ns16550a,mmio32,0x02800000
    +args_all=setenv optargs ${optargs} earlycon=ns16550a,mmio32,0x42300000
     	${mtdparts}
     run_kern=booti ${loadaddr} ${rd_spec} ${fdtaddr}
     
    
    ===========
    ATF changes
    ===========
    diff --git a/plat/ti/k3/include/platform_def.h b/plat/ti/k3/include/platform_def.h
    index 6a05392ad..8a463ba05 100644
    --- a/plat/ti/k3/include/platform_def.h
    +++ b/plat/ti/k3/include/platform_def.h
    @@ -90,14 +90,14 @@
     
     /* Platform default console definitions */
     #ifndef K3_USART_BASE
    -#define K3_USART_BASE			(0x02800000 + 0x10000 * K3_USART)
    +#define K3_USART_BASE			0x42300000
     #endif
     
     /* USART has a default size for address space */
     #define K3_USART_SIZE 0x1000
     
     #ifndef K3_USART_CLK_SPEED
    -#define K3_USART_CLK_SPEED 48000000
    +#define K3_USART_CLK_SPEED 96000000
     #endif
     
     /* Crash console defaults */
     
    ===============
    OPTEE Changes
    ===============
    diff --git a/core/arch/arm/plat-k3/platform_config.h b/core/arch/arm/plat-k3/platform_config.h
    index cffca0a07..d15f9a08f 100644
    --- a/core/arch/arm/plat-k3/platform_config.h
    +++ b/core/arch/arm/plat-k3/platform_config.h
    @@ -9,11 +9,11 @@
     
     #include <mm/generic_ram_layout.h>
     
    -#define UART0_BASE      0x02800000
    +#define UART0_BASE      0x42300000
     
    -#define CONSOLE_UART_BASE       (UART0_BASE + CFG_CONSOLE_UART * 0x10000)
    +#define CONSOLE_UART_BASE       UART0_BASE 
     #define CONSOLE_BAUDRATE        115200
    -#define CONSOLE_UART_CLK_IN_HZ  48000000
    +#define CONSOLE_UART_CLK_IN_HZ  96000000
     
     #define DRAM0_BASE      0x80000000
     #define DRAM0_SIZE      0x80000000
    diff --git a/mk/clang.mk b/mk/clang.mk
    index d08b26e6f..8a01cd9db 100644
    --- a/mk/clang.mk
    +++ b/mk/clang.mk
    @@ -31,7 +31,7 @@ comp-cflags-warns-clang := -Wno-language-extension-token \
     
     # Note, use the compiler runtime library (libclang_rt.builtins.*.a) instead of
     # libgcc for clang
    -libgcc$(sm)	:= $(shell $(CC$(sm)) $(CFLAGS$(arch-bits-$(sm))) \
    +libgcc$(sm)	:= $(shell $(CC$(sm)) $(LIBGCC_LOCATE_CFLAGS) $(CFLAGS$(arch-bits-$(sm))) \
     			-rtlib=compiler-rt -print-libgcc-file-name 2> /dev/null)
     
     # Core ASLR relies on the executable being ready to run from its preferred load
     
     ==================
     Kernel Changes
     =================
     diff --git a/arch/arm64/boot/dts/ti/k3-j7200-common-proc-board.dts b/arch/arm64/boot/dts/ti/k3-j7200-common-proc-board.dts
    index 735ffd3f3..2823ff137 100644
    --- a/arch/arm64/boot/dts/ti/k3-j7200-common-proc-board.dts
    +++ b/arch/arm64/boot/dts/ti/k3-j7200-common-proc-board.dts
    @@ -18,9 +18,9 @@ / {
     	model = "Texas Instruments J7200 EVM";
     
     	aliases {
    -		serial0 = &wkup_uart0;
    +		serial0 = &main_uart0;
     		serial1 = &mcu_uart0;
    -		serial2 = &main_uart0;
    +		serial2 = &wkup_uart0;
     		serial3 = &main_uart1;
     		serial5 = &main_uart3;
     		mmc0 = &main_sdhci0;
    @@ -270,7 +270,7 @@ J721E_IOPAD(0x04, PIN_OUTPUT, 0) /* (T4) USB0_DRVVBUS */
     
     &wkup_uart0 {
     	/* Wakeup UART is used by System firmware */
    -	status = "reserved";
    +	status = "okay";
     	pinctrl-names = "default";
     	pinctrl-0 = <&wkup_uart0_pins_default>;
     	bootph-all;
    diff --git a/arch/arm64/boot/dts/ti/k3-j7200-mcu-wakeup.dtsi b/arch/arm64/boot/dts/ti/k3-j7200-mcu-wakeup.dtsi
    index d9a40b480..c24b1c8f2 100644
    --- a/arch/arm64/boot/dts/ti/k3-j7200-mcu-wakeup.dtsi
    +++ b/arch/arm64/boot/dts/ti/k3-j7200-mcu-wakeup.dtsi
    @@ -274,11 +274,10 @@ wkup_uart0: serial@42300000 {
     		compatible = "ti,j721e-uart", "ti,am654-uart";
     		reg = <0x00 0x42300000 0x00 0x100>;
     		interrupts = <GIC_SPI 897 IRQ_TYPE_LEVEL_HIGH>;
    -		clock-frequency = <48000000>;
    +		clock-frequency = <96000000>;
     		power-domains = <&k3_pds 287 TI_SCI_PD_EXCLUSIVE>;
     		clocks = <&k3_clks 287 2>;
     		clock-names = "fclk";
    -		status = "disabled";
     	};
     
     	mcu_uart0: serial@40a00000 {

    J721S2:

    https://e2e.ti.com/cfs-file/__key/communityserver-discussions-components-files/791/enable_5F00_wkupuart_5F00_j721s2.patch

    J784S4:

    https://e2e.ti.com/cfs-file/__key/communityserver-discussions-components-files/791/wkup_5F00_uart_5F00_enable_5F00_j784s4.patch

    J722S:

    =========
    UBOOT CHANGES
    =============
    
    From dd2971e89ff151de3eaf75361c02f1daa906ce8b Mon Sep 17 00:00:00 2001
    From: Gokul Praveen <g-praveen@ti.com>
    Date: Thu, 13 Nov 2025 12:10:36 +0530
    Subject: [PATCH] Enable wkup uart in j722s
    
    ---
     arch/arm/dts/k3-am62p-wakeup.dtsi    | 4 +++-
     arch/arm/dts/k3-j722s-evm.dts        | 9 +++++----
     arch/arm/dts/k3-j722s-r5-evm.dts     | 4 ++--
     arch/arm/mach-k3/r5/j722s/clk-data.c | 5 +++++
     arch/arm/mach-k3/r5/j722s/dev-data.c | 1 +
     board/ti/j722s/j722s.env             | 2 +-
     6 files changed, 17 insertions(+), 8 deletions(-)
    
    diff --git a/arch/arm/dts/k3-am62p-wakeup.dtsi b/arch/arm/dts/k3-am62p-wakeup.dtsi
    index c71d9624..05d20de6 100644
    --- a/arch/arm/dts/k3-am62p-wakeup.dtsi
    +++ b/arch/arm/dts/k3-am62p-wakeup.dtsi
    @@ -37,7 +37,9 @@
     		power-domains = <&k3_pds 114 TI_SCI_PD_EXCLUSIVE>;
     		clocks = <&k3_clks 114 0>;
     		clock-names = "fclk";
    -		status = "disabled";
    +		current-speed = <115200>;
    +		status = "okay";
    +		clock-frequency = <96000000>;
     	};
     
     	wkup_i2c0: i2c@2b200000 {
    diff --git a/arch/arm/dts/k3-j722s-evm.dts b/arch/arm/dts/k3-j722s-evm.dts
    index d799be55..0b8181db 100644
    --- a/arch/arm/dts/k3-j722s-evm.dts
    +++ b/arch/arm/dts/k3-j722s-evm.dts
    @@ -19,8 +19,8 @@
     	model = "Texas Instruments J722S EVM";
     
     	aliases {
    -		serial0 = &wkup_uart0;
    -		serial2 = &main_uart0;
    +		serial0 = &main_uart0;
    +		serial2 = &wkup_uart0;
     		mmc0 = &sdhci0;
     		mmc1 = &sdhci1;
     		usb0 = &usb0;
    @@ -28,7 +28,7 @@
     	};
     
     	chosen {
    -		stdout-path = &main_uart0;
    +		stdout-path = &wkup_uart0;
     	};
     
     	memory@80000000 {
    @@ -338,7 +338,8 @@
     	/* WKUP UART0 is used by Device Manager firmware */
     	pinctrl-names = "default";
     	pinctrl-0 = <&wkup_uart0_pins_default>;
    -	status = "reserved";
    +	clock-frequency = <96000000>;	
    +	status = "okay";
     	bootph-all;
     };
     
    diff --git a/arch/arm/dts/k3-j722s-r5-evm.dts b/arch/arm/dts/k3-j722s-r5-evm.dts
    index b1788e40..b81b5a97 100644
    --- a/arch/arm/dts/k3-j722s-r5-evm.dts
    +++ b/arch/arm/dts/k3-j722s-r5-evm.dts
    @@ -14,8 +14,8 @@
     	aliases {
     		remoteproc0 = &sysctrler;
     		remoteproc1 = &a53_0;
    -		serial0 = &wkup_uart0;
    -		serial2 = &main_uart0;
    +		serial0 = &main_uart0;
    +		serial2 = &wkup_uart0;
     	};
     
     	a53_0: a53@0 {
    diff --git a/arch/arm/mach-k3/r5/j722s/clk-data.c b/arch/arm/mach-k3/r5/j722s/clk-data.c
    index b4f27af3..ff1edbf3 100644
    --- a/arch/arm/mach-k3/r5/j722s/clk-data.c
    +++ b/arch/arm/mach-k3/r5/j722s/clk-data.c
    @@ -206,6 +206,7 @@ static const struct clk_data clk_list[] = {
     	CLK_MUX("main_usart0_fclk_sel_out0", main_usart0_fclk_sel_out0_parents, 2, 0x108280, 0, 1, 0),
     	CLK_DIV("sam62_pll_ctrl_wrap_main_0_chip_div24_clk_clk", "sam62_pll_ctrl_wrap_main_0_sysclkout_clk", 0x41011c, 0, 5, 0, 0),
     	CLK_DIV("sam62_pll_ctrl_wrap_mcu_0_chip_div24_clk_clk", "sam62_pll_ctrl_wrap_mcu_0_sysclkout_clk", 0x402011c, 0, 5, 0, 0),
    +	CLK_DIV("hsdiv4_16fft_mcu_0_hsdivout2_clk", "pllfracf2_ssmod_16fft_mcu_0_foutvcop_clk", 0x4040088, 0, 7, 0, 0),
     };
     
     static const struct dev_clk soc_dev_clk_data[] = {
    @@ -302,6 +303,10 @@ static const struct dev_clk soc_dev_clk_data[] = {
     	DEV_CLK(170, 1, "hsdiv0_16fft_main_12_hsdivout0_clk"),
     	DEV_CLK(170, 2, "board_0_tck_out"),
     	DEV_CLK(170, 3, "sam62_pll_ctrl_wrap_main_0_chip_div1_clk_clk"),
    +	DEV_CLK(114, 0, "hsdiv4_16fft_mcu_0_hsdivout2_clk"),
    +	DEV_CLK(114, 3, "wkup_clksel_out0"),
    +	DEV_CLK(114, 4, "hsdiv3_16fft_main_15_hsdivout0_clk"),
    +	DEV_CLK(114, 5, "hsdiv4_16fft_mcu_0_hsdivout0_clk"),	
     };
     
     const struct ti_k3_clk_platdata j722s_clk_platdata = {
    diff --git a/arch/arm/mach-k3/r5/j722s/dev-data.c b/arch/arm/mach-k3/r5/j722s/dev-data.c
    index 59176c98..ea2a69b9 100644
    --- a/arch/arm/mach-k3/r5/j722s/dev-data.c
    +++ b/arch/arm/mach-k3/r5/j722s/dev-data.c
    @@ -55,6 +55,7 @@ static struct ti_dev soc_dev_list[] = {
     	PSC_DEV(170, &soc_lpsc_list[10]),
     	PSC_DEV(177, &soc_lpsc_list[11]),
     	PSC_DEV(55, &soc_lpsc_list[12]),
    +	PSC_DEV(114, &soc_lpsc_list[0]),
     };
     
     const struct ti_k3_pd_platdata j722s_pd_platdata = {
    diff --git a/board/ti/j722s/j722s.env b/board/ti/j722s/j722s.env
    index 4cc66e8d..a211277c 100644
    --- a/board/ti/j722s/j722s.env
    +++ b/board/ti/j722s/j722s.env
    @@ -8,7 +8,7 @@
     
     name_kern=Image
     console=ttyS2,115200n8
    -args_all=setenv optargs ${optargs} earlycon=ns16550a,mmio32,0x02800000
    +args_all=setenv optargs ${optargs} earlycon=ns16550a,mmio32,0x2B300000
     	${mtdparts}
     run_kern=booti ${loadaddr} ${rd_spec} ${fdtaddr}
     
    -- 
    2.34.1
    
    
    ============
    KERNEL CHANGES
    =============
    
    From d61b6a289604ae25811b03e1091b3e8cd07b3c0c Mon Sep 17 00:00:00 2001
    From: Gokul Praveen <g-praveen@ti.com>
    Date: Tue, 30 Sep 2025 12:28:54 +0530
    Subject: [PATCH] ENable wkup uart in Linux for J722S
    
    ---
     arch/arm64/boot/dts/ti/k3-am62p-wakeup.dtsi | 1 +
     arch/arm64/boot/dts/ti/k3-j722s-evm.dts     | 8 ++++----
     2 files changed, 5 insertions(+), 4 deletions(-)
    
    diff --git a/arch/arm64/boot/dts/ti/k3-am62p-wakeup.dtsi b/arch/arm64/boot/dts/ti/k3-am62p-wakeup.dtsi
    index c105ea4e9..1afae4262 100644
    --- a/arch/arm64/boot/dts/ti/k3-am62p-wakeup.dtsi
    +++ b/arch/arm64/boot/dts/ti/k3-am62p-wakeup.dtsi
    @@ -61,6 +61,7 @@ SYSC_OMAP2_SOFTRESET |
     		power-domains = <&k3_pds 114 TI_SCI_PD_EXCLUSIVE>;
     		clocks = <&k3_clks 114 0>;
     		clock-names = "fck";
    +		clock-frequency = <96000000>;	
     		#address-cells = <1>;
     		#size-cells = <1>;
     		ranges = <0 0 0x2b300000 0x100000>;
    diff --git a/arch/arm64/boot/dts/ti/k3-j722s-evm.dts b/arch/arm64/boot/dts/ti/k3-j722s-evm.dts
    index 146c5580f..c51918b5d 100644
    --- a/arch/arm64/boot/dts/ti/k3-j722s-evm.dts
    +++ b/arch/arm64/boot/dts/ti/k3-j722s-evm.dts
    @@ -18,15 +18,15 @@ / {
     	model = "Texas Instruments J722S EVM";
     
     	aliases {
    -		serial0 = &wkup_uart0;
    -		serial2 = &main_uart0;
    +		serial0 = &main_uart0;;
    +		serial2 = &wkup_uart0;
     		serial3 = &main_uart5;
     		mmc0 = &sdhci0;
     		mmc1 = &sdhci1;
     	};
     
     	chosen {
    -		stdout-path = &main_uart0;
    +		stdout-path = &wkup_uart0;
     	};
     
     	memory@80000000 {
    @@ -534,7 +534,7 @@ &wkup_uart0 {
     	/* WKUP UART0 is used by Device Manager firmware */
     	pinctrl-names = "default";
     	pinctrl-0 = <&wkup_uart0_pins_default>;
    -	status = "reserved";
    +	status = "okay";
     	bootph-all;
     };
     
    -- 
    2.34.1

    Additional patch in Linux kernel for J722S to solve hang issue for wkup uart:

    diff --git a/drivers/bus/ti-sysc.c b/drivers/bus/ti-sysc.c
    index 9ed9239b1228..947df3fa6cdd 100644
    --- a/drivers/bus/ti-sysc.c
    +++ b/drivers/bus/ti-sysc.c
    @@ -937,7 +937,7 @@ static int sysc_map_and_check_registers(struct sysc *ddata)
            if (error)
                    return error;
     
    -       error = sysc_defer_non_critical(ddata);
    +       // error = sysc_defer_non_critical(ddata);
            if (error)
                    return error;

    [ 13.204416] 

    This solves the issue platform 2b300050.target-module: deferred probe pending.

    This issue has already been fixed upstream.

    Commit no: 36305857b1ead8f6ca033a913162ebc09bee0b43

    Reference E2E for the same:

    (+) J722SXH01EVM: J722S EVM: Enable WKUP_UART for boot logs in SPL - Processors forum - Processors - TI E2E support forums

    Build Steps:

    ============

    Building UBOOT:

    • Run make u-boot from the <SDK dir> and taken tiboot3.bin ,tispl.bin and u-boot,img from board-support/<TI UBOOT folder>/build folder.

    Building ATF:

    NOTE: Since, ATF AND OPTEE Prints will now come in wkup uart,the boot might hang some times due to system firmware using wkup uart for logging.

    Hence, in case that happens, please remove the atf/optee related patches so that the ATF/OPTEE prints come in main uart itself.

    • Switch to the below directory:
      • Path: <SDK>/board-support/<trusted-firmware folder>
    • Follow the steps under "Setting up the toolchain paths" and "Building ATF" from the below link
    • Copy the file named "bl31.bin" from this this trusted firmware folder to the below path:
      • Path :<SDK>/board-support/prebuilt-images 

    Building OPTEE:

    • Switch to the below directory:
      • Path: <SDK>/board-support/<optee folder>
    • Follow the steps under "Setting up the toolchain paths" and the command under "Building the OPTEE image" section within"Building OP-TEE OS" section from the below link:
    • Copy the file named "tee-pager_v2.bin" from this this optee folder to the below path and rename it to bl32.bin.
      • Path :<SDK>/board-support/prebuilt-images 

    =======================================================================================================================

    MAIN UART 

    ===========================================================================

    This is an example of main uart 3 for j784s4. Similar approach can be followed for other main uarts in other boards as well:

    • Step 1: Ensure that the clk-data and dev-data for the main uartX(X is the uart number) is enabled by looking in to the below FAQ:
    • Follow the steps under "Setting up the toolchain paths" from the below link:
    • Build  ATF using the below command:
      • make CROSS_COMPILE="$CROSS_COMPILE_64" ARCH=aarch64 PLAT=k3 TARGET_BOARD=generic SPD=opteed K3_USART=0x3
    • Copy the file named "bl31.bin" from this this trusted firmware folder to the below path:
      • Path :<SDK>/board-support/prebuilt-images 

    OPTEE Changes:

    UBOOT Changes:

    Enable main uart 3 in the device tree for j784s4. 

    On top of that, the below patch also has to be applied in the u-boot directory.

    diff --git a/board/ti/j784s4/j784s4.env b/board/ti/j784s4/j784s4.env
    index e174fac8..c0567a40 100644
    --- a/board/ti/j784s4/j784s4.env
    +++ b/board/ti/j784s4/j784s4.env
    @@ -9,7 +9,7 @@
     
     name_kern=Image
     console=ttyS2,115200n8
    -args_all=setenv optargs ${optargs} earlycon=ns16550a,mmio32,0x02880000
    +args_all=setenv optargs ${optargs} earlycon=ns16550a,mmio32,0x02830000
            ${mtdparts}
     run_kern=booti ${loadaddr} ${rd_spec} ${fdtaddr}

    Kernel changes:

    The same changes you have done for enabling main uart 3 in uboot needs to be the device tree used in linux kernel as well.

    Regards

    Gokul