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 WKUPUART for boot logs in SPL ?

Part Number: J721S2XSOMXEVM

Tool/software:

How to enable wkup uart for for getting the boot logs?

  • HI Gokul,

    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.

    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

    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 {

    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:

    • 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 "bl32.bin" from this this optee folder to the below path:
      • Path :<SDK>/board-support/prebuilt-images 

    Regards

    Gokul