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.

AM3352: [Kernel 6.12.49] Boot Hang at "Starting Kernel" when enabling UART5 (Migration from 4.19)

Part Number: AM3352

Hi TI Experts,

Kernel Version: 6.12.49 

Previous Working Version: 4.19

I am migrating a custom board from Kernel 4.19 to 6.12.49. When attempting to enable UART5 in the Device Tree (DTS), the boot process hangs indefinitely at the message Starting kernel....

If I set the status of UART5 to "disabled", the kernel boots normally using UART0 as the console. I have stripped the DTS down to the bare essentials (UART0, SD Card, and UART5), but the conflict persists.

Current DTS Configuration:

I am using the following node definition (simplified):

DTS attached below:

/dts-v1/;

#include "am33xx.dtsi"

/ {
	model = "AM335x-P1-512";
	compatible = "ti,am335x-company-product-nxt", "ti,am33xx";

	cpus {
		cpu@0 {
			cpu0-supply = <&vdd_mpu_supply>;
		};
	};

	memory@80000000 {
		device_type = "memory";
		reg = <0x80000000 0x20000000>; /* 512MB */
	};

	chosen {
		stdout-path = &uart0;
	};

	vmmcsd_fixed: fixedregulator-sd {
		compatible = "regulator-fixed";
		regulator-name = "vmmcsd_fixed";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
		enable-active-high;
	};

	vdd_mpu_supply: fixedregulator-mpu {
		compatible = "regulator-fixed";
		regulator-name = "vdd_mpu_supply";
		regulator-min-microvolt = <912500>;
		regulator-max-microvolt = <1351500>;
		regulator-boot-on;
	};

	
};

&am33xx_pinmux {

	uart0_pins: pinmux_uart0_pins {
		pinctrl-single,pins = <
			AM33XX_PADCONF(AM335X_PIN_UART0_RXD, PIN_INPUT_PULLUP, MUX_MODE0)	/* uart0_rxd.uart0_rxd */
			AM33XX_PADCONF(AM335X_PIN_UART0_TXD, PIN_OUTPUT_PULLDOWN, MUX_MODE0)	/* uart0_txd.uart0_txd */
		>;
	};

	mmc1_pins_default: pinmux_mmc1_pins {
		pinctrl-single,pins = <
			AM33XX_PADCONF(AM335X_PIN_MMC0_DAT0, PIN_INPUT_PULLUP, MUX_MODE0)    /* mmc0_dat3.mmc0_dat3 */
			AM33XX_PADCONF(AM335X_PIN_MMC0_DAT1, PIN_INPUT_PULLUP, MUX_MODE0)    /* mmc0_dat2.mmc0_dat2 */
			AM33XX_PADCONF(AM335X_PIN_MMC0_DAT2, PIN_INPUT_PULLUP, MUX_MODE0)    /* mmc0_dat1.mmc0_dat1 */
			AM33XX_PADCONF(AM335X_PIN_MMC0_DAT3, PIN_INPUT_PULLUP, MUX_MODE0)    /* mmc0_dat0.mmc0_dat0 */
			AM33XX_PADCONF(AM335X_PIN_MMC0_CMD, PIN_INPUT_PULLUP, MUX_MODE0)    /* mmc0_clk.mmc0_clk */
			AM33XX_PADCONF(AM335X_PIN_MMC0_CLK, PIN_INPUT_PULLUP, MUX_MODE0)    /* mmc0_cmd.mmc0_cmd */
			AM33XX_PADCONF(AM335X_PIN_MCASP0_ACLKX, PIN_INPUT, MUX_MODE7)           /* mcasp0_aclkx.gpio3_14 */
		>;
	};	

	
      	uart5_pins: pinmux_uart5_pins {
		pinctrl-single,pins = <
			AM33XX_PADCONF(AM335X_PIN_LCD_DATA9, PIN_INPUT_PULLUP, MUX_MODE4 )	/* () uart5_rxd */
			AM33XX_PADCONF(AM335X_PIN_LCD_DATA8, PIN_OUTPUT_PULLDOWN, MUX_MODE4 )   /* () uart5_txd */
		>;
	};

};


&uart0 {
        pinctrl-names = "default";
        pinctrl-0 = <&uart0_pins>;

        status = "okay";
};


&uart5 {
    pinctrl-names = "default";
    pinctrl-0 = <&uart5_pins>;
    status = "okay";
};

&mmc1 {
        status = "okay";
        vmmc-supply = <&vmmcsd_fixed>;
        bus-width = <4>;
        pinctrl-names = "default", "sleep";
        pinctrl-0 = <&mmc1_pins_default>;
	cd-gpios = <&gpio3 14 GPIO_ACTIVE_LOW>;
};

 

Observations & Debugging Done:

  • 4.19 Behavior: The same hardware and pinmux configuration work perfectly.

  • 6.12 Behavior: The hang occurs very early. No panic or oops is printed to the console.

    Questions:

    1. Are there known regressions or changes in the System Firmware (SYSFW/TISCI) requirements for UART5 between these kernel versions?

    2. Does Kernel 6.12 require specific power-domains or clocks properties that were previously handled implicitly in 4.19?

    3. Is there a specific debug flag I should enable to see if this is a data abort during the UART5 probe function?

    Regards.

     

  • Hi Amh,

    The follow kernel patch should fix the issue.

    diff --git a/arch/arm/configs/multi_v7_defconfig b/arch/arm/configs/multi_v7_defconfig
    index bdbbfbdac72a..05d4b2134062 100644
    --- a/arch/arm/configs/multi_v7_defconfig
    +++ b/arch/arm/configs/multi_v7_defconfig
    @@ -357,8 +357,8 @@ CONFIG_INPUT_STPMIC1_ONKEY=y
     CONFIG_SERIO_AMBAKMI=y
     CONFIG_SERIAL_8250=y
     CONFIG_SERIAL_8250_CONSOLE=y
    -CONFIG_SERIAL_8250_NR_UARTS=5
    -CONFIG_SERIAL_8250_RUNTIME_UARTS=5
    +CONFIG_SERIAL_8250_NR_UARTS=6
    +CONFIG_SERIAL_8250_RUNTIME_UARTS=6
     CONFIG_SERIAL_8250_EXTENDED=y
     CONFIG_SERIAL_8250_MANY_PORTS=y
     CONFIG_SERIAL_8250_ASPEED_VUART=m