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.

SK-AM62: Enable BT_EN and UART4 to control and connect an external BT/WLAN Combo chip (ESP32-WROOM-32)

Part Number: SK-AM62
Other Parts Discussed in Thread: AM625, TPS65988, LM34936, LM61460-Q1, TCA6424, WL1837, TLV320AIC3106,

Tool/software:

Hello TI Expert, 

My customer board hardware (AM254A - ALW) is similar to E3 and I am using SDK 9.0

UART4 (TX: GPMC0_CSn3, RX: GPMC0_CSn2) is used as an HW interface to communicate with external BT/WLAN combo chip.

And  BT_EN (MCU_GPIO0_1) is to enable the chip (pull up to 3.3v).   

I referred to a similiar top: https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1166852/am625-use-wkup_uart0-as-bt-connect-port/4490741#4490741

But I failed to see the UART4 (no ttyS4) and unable to control BT_EN gpio

May you help to correct my DTS? or provide a patch for this purpose?

==========My modification patch==============

diff --git a/arch/arm64/boot/dts/ti/k3-am625-sk.dts b/arch/arm64/boot/dts/ti/k3-am625-sk.dts
index b1737978103b..ff371140cb74 100644
--- a/arch/arm64/boot/dts/ti/k3-am625-sk.dts
+++ b/arch/arm64/boot/dts/ti/k3-am625-sk.dts
@@ -13,6 +13,11 @@ / {
compatible = "ti,am625-sk", "ti,am625";
model = "Texas Instruments AM625 SK";

+ aliases {
+ serial6 = &main_uart4;
+ gpio2 = &mcu_gpio0;
+ };
+
opp-table {
/* Add 1.4GHz OPP for am625-sk board. Requires VDD_CORE to be at 0.85V */
opp-1400000000 {
@@ -68,9 +73,10 @@ vdd_mmc1: regulator-3 {
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-boot-on;
- enable-active-high;
+ /* enable-active-high; */
vin-supply = <&vcc_3v3_sys>;
- gpio = <&exp1 3 GPIO_ACTIVE_HIGH>;
+ regulator-always-on;
+ /* gpio = <&exp1 3 GPIO_ACTIVE_HIGH>; */
};

vdd_sd_dv: regulator-4 {
@@ -82,7 +88,8 @@ vdd_sd_dv: regulator-4 {
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <3300000>;
regulator-boot-on;
- vin-supply = <&vcc_5v0>;
+ regulator-always-on;
+ vin-supply = <&vcc_3v3_sys>;
gpios = <&main_gpio0 31 GPIO_ACTIVE_HIGH>;
states = <1800000 0x0>,
<3300000 0x1>;
@@ -105,7 +112,7 @@ wlan_lten: regulator-6 {
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
vin-supply = <&vcc_3v3_sys>;
- regulator-always-on;
+ /* regulator-always-on;*/
gpios = <&exp1 11 GPIO_ACTIVE_LOW>;
};

@@ -120,6 +127,18 @@ wlan_en: regulator-7 {
pinctrl-names = "default";
pinctrl-0 = <&wlan_en_pins_default>;
};
+
+ btwlan_en: regulator-8 {
+ compatible = "regulator-fixed";
+ regulator-name = "btwlan_en";
+ regulator-min-microvolt = <3300000>;
+ regulator-max-microvolt = <3300000>;
+ vin-supply = <&wlan_lten>;
+ enable-active-high;
+ gpios = <&mcu_gpio0 1 GPIO_ACTIVE_HIGH>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&mcu_btwlan_en_pins_default>;
+ };
};

&main_pmx0 {
@@ -191,6 +210,34 @@ main_wlirq_pins_default: main-wlirq-pins-default {
AM62X_IOPAD(0x128, PIN_INPUT, 7) /* (B23) MMC2_SDWP.GPIO0_72 */
>;
};
+
+ /* For BT/WLAN connection interface */
+ main_uart4_pins_default: main-uart4-default-pins {
+ pinctrl-single,pins = <
+ AM62X_IOPAD(0x00b0, PIN_OUTPUT, 3) /* (K22) GPMC0_CSn2.UART4_RXD */
+ AM62X_IOPAD(0x00b4, PIN_OUTPUT, 3) /* (K24) GPMC0_CSn3.UART4_TXD */
+ >;
+ };
+};
+
+&main_uart4 {
+ status = "okay";
+ pinctrl-names = "default";
+ pinctrl-0 = <&main_uart4_pins_default &mcu_btwlan_en_pins_default>;
+
+ bluetooth {
+ enable-gpios = <&mcu_gpio0 1 GPIO_ACTIVE_HIGH>;
+ };
+
+};
+
+&mcu_pmx0 {
+ /* Enable BT/WLAN Pin */
+ mcu_btwlan_en_pins_default: mcu-btwlan-en-pins-default {
+ pinctrl-single,pins = <
+ AM62X_MCU_IOPAD(0x0004, PIN_OUTPUT_PULLUP, 7) /* (B8) MCU_SPI0_CS1.MCU_GPIO0_1 */
+ >;
+ };
};

&main_i2c1 {
@@ -223,6 +270,7 @@ exp1: gpio@22 {
};

&sdhci1 {
+ status = "okay";
vmmc-supply = <&vdd_mmc1>;
vqmmc-supply = <&vdd_sd_dv>;
};

==========Result==========================

A) No ttyS4 device file

root@am62xx-evm:/# dmesg | grep ttyS
[ 0.000000] Kernel command line: console=ttyS2,115200n8 earlycon=ns16550a,mmio32,0x02800000 mtdparts=spi-nand0:512k(ospi.tiboot3),2m(ospi.tispl),4m(ospi.u-boot),256k(ospi.env),256k(ospi.env.backup),98048k@32m(ospi.rootfs),256k@130816k(ospi.phypattern);omap2-nand.0:2m(NAND.tiboot3),2m(NAND.tispl),2m(NAND.tiboot3.backup),4m(NAND.u-boot),256k(NAND.u-boot-env),256k(NAND.u-boot-env.backup),-(NAND.file-system) root=PARTUUID=3aa7079c-02 rw rootfstype=ext4 rootwait
[ 1.212018] printk: console [ttyS2] disabled
[ 1.216499] 2800000.serial: ttyS2 at MMIO 0x2800000 (irq = 239, base_baud = 3000000) is a 8250
[ 1.225425] printk: console [ttyS2] enabled
root@am62xx-evm:/# ls /dev/ttyS*
/dev/ttyS0 /dev/ttyS1 /dev/ttyS2 /dev/ttyS3
root@am62xx-evm:/#

B) Unable to control GPIO0_1 to high/low (measured by Voltmeter)

root@am62xx-evm:/sys/kernel/debug# cat gpio
gpiochip2: GPIOs 344-395, parent: platform/601000.gpio, 601000.gpio:
gpio-393 ( |am62-sk:green:heartb) out lo

gpiochip1: GPIOs 396-487, parent: platform/600000.gpio, 600000.gpio:
gpio-427 ( |tlv71033 ) out lo

gpiochip0: GPIOs 488-511, parent: platform/4201000.gpio, 4201000.gpio:

root@am62xx-evm:/sys/kernel/debug# echo 489 > /sys/class/gpio/export
root@am62xx-evm:/sys/kernel/debug# echo out > /sys/class/gpio/gpio489/direction
root@am62xx-evm:/sys/kernel/debug# echo 1 > /sys/class/gpio/gpio489/value
root@am62xx-evm:/sys/kernel/debug# cat /sys/class/gpio/gpio489/value
0
root@am62xx-evm:/sys/kernel/debug#

  • Hi Paul,

    Let's try to solve one problem at a time.

    A) No ttyS4 device file

    Please run the following command on your board to check the number of UARTs configured in your kernel .config. If it is 4 or a small number, please configure them to a bigger number, such as 12, in kernel menuconfig, then rebuild the kernel.

    root@am62xx-evm:~# zcat /proc/config.gz | grep '8250.*UARTS'

  • Hello Bin Liu

    yes, i see "4"

    root@am62xx-evm:~# zcat /proc/config.gz | grep '8250.*UARTS'
    CONFIG_SERIAL_8250_NR_UARTS=4
    CONFIG_SERIAL_8250_RUNTIME_UARTS=4

    "please configure them to a bigger number, such as 12, in kernel menuconfig",  may you give me more detail? Thanks.

    FYI, 

    My custom HW connection interface is fixed with UART4.

    By default, in k3-am62-main.dtsi,  main_uart6 is the exisiting biggest number. 

    main_uart6: serial@2860000 {
    compatible = "ti,am64-uart", "ti,am654-uart";
    reg = <0x00 0x02860000 0x00 0x100>;
    interrupts = <GIC_SPI 184 IRQ_TYPE_LEVEL_HIGH>;
    power-domains = <&k3_pds 158 TI_SCI_PD_EXCLUSIVE>;
    clocks = <&k3_clks 158 0>;
    clock-names = "fclk";
    status = "disabled";
    };

    And my default work-shared/am62xx-evm/kernel-source/arch/arm64/configs/deconfig about serial.
    CONFIG_SERIAL_8250=y
    CONFIG_SERIAL_8250_CONSOLE=y
    CONFIG_SERIAL_8250_EXTENDED=y
    CONFIG_SERIAL_8250_SHARE_IRQ=y
    CONFIG_SERIAL_8250_BCM2835AUX=y
    CONFIG_SERIAL_8250_DW=y
    CONFIG_SERIAL_8250_EM=y
    CONFIG_SERIAL_8250_OMAP=y
    CONFIG_SERIAL_8250_MT6577=y
    CONFIG_SERIAL_8250_UNIPHIER=y

  • Hi Paul,

    "please configure them to a bigger number, such as 12, in kernel menuconfig",  may you give me more detail? Thanks.

    You can refer to the instruction linked below to understand how to rebuild kernel and use kernel menuconfig.

    https://software-dl.ti.com/processor-sdk-linux/esd/AM64X/09_01_00_08/exports/docs/linux/Foundational_Components_Kernel_Users_Guide.html

    However, instead of using menuconfig, if you have already compiled the kernel source once, you can directly modify the file .config in kernel to update these two CONFIG_* settings from 4 to 10, then recompile the kernel again.

  • Hello Bin Liu,

    May you help to provide additonal guideline or correct my DTS? 

    My Yocto SDK build dose not have .config (I don't build kernel with make menuconfig; but only " bitbake -k tisdk-default-image",  so I added below two configs to "deconfig" file. 

    CONFIG_SERIAL_8250_NR_UARTS=12
    CONFIG_SERIAL_8250_RUNTIME_UARTS=12

    Check result:

    root@am62xx-evm:/dev# zcat /proc/config.gz | grep '8250.*UARTS'
    CONFIG_SERIAL_8250_NR_UARTS=12
    CONFIG_SERIAL_8250_RUNTIME_UARTS=12

    root@am62xx-evm:/# ls /dev/ttyS*
    /dev/ttyS0 /dev/ttyS1 /dev/ttyS10 /dev/ttyS11 /dev/ttyS2 /dev/ttyS3 /dev/ttyS4 /dev/ttyS5 /dev/ttyS6 /dev/ttyS7 /dev/ttyS8 /dev/ttyS9

    root@am62xx-evm:/# echo "hello" > /dev/ttyS4
    -sh: echo: write error: Input/output error
    root@am62xx-evm:/#

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

    Below is my entire/modified dts "k3-am625-sk.dts"

    // SPDX-License-Identifier: GPL-2.0
    /*
    * AM625 SK: www.ti.com/.../sprr448
    *
    * Copyright (C) 2021-2022 Texas Instruments Incorporated - https://www.ti.com/
    */

    /dts-v1/;

    #include "k3-am62x-sk-common.dtsi"

    / {
    compatible = "ti,am625-sk", "ti,am625";
    model = "Texas Instruments AM625 SK";

    aliases {
    serial4 = &main_uart4;
    gpio2 = &mcu_gpio0;
    };

    opp-table {
    /* Add 1.4GHz OPP for am625-sk board. Requires VDD_CORE to be at 0.85V */
    opp-1400000000 {
    opp-hz = /bits/ 64 <1400000000>;
    opp-supported-hw = <0x01 0x0004>;
    clock-latency-ns = <6000000>;
    };
    };

    memory@80000000 {
    device_type = "memory";
    /* 2G RAM */
    reg = <0x00000000 0x80000000 0x00000000 0x80000000>;

    };

    vmain_pd: regulator-0 {
    /* TPS65988 PD CONTROLLER OUTPUT */
    compatible = "regulator-fixed";
    regulator-name = "vmain_pd";
    regulator-min-microvolt = <5000000>;
    regulator-max-microvolt = <5000000>;
    regulator-always-on;
    regulator-boot-on;
    };

    vcc_5v0: regulator-1 {
    /* Output of LM34936 */
    compatible = "regulator-fixed";
    regulator-name = "vcc_5v0";
    regulator-min-microvolt = <5000000>;
    regulator-max-microvolt = <5000000>;
    vin-supply = <&vmain_pd>;
    regulator-always-on;
    regulator-boot-on;
    };

    vcc_3v3_sys: regulator-2 {
    /* output of LM61460-Q1 */
    compatible = "regulator-fixed";
    regulator-name = "vcc_3v3_sys";
    regulator-min-microvolt = <3300000>;
    regulator-max-microvolt = <3300000>;
    vin-supply = <&vmain_pd>;
    regulator-always-on;
    regulator-boot-on;
    };

    vdd_mmc1: regulator-3 {
    /* TPS22918DBVR */
    compatible = "regulator-fixed";
    regulator-name = "vdd_mmc1";
    regulator-min-microvolt = <3300000>;
    regulator-max-microvolt = <3300000>;
    regulator-boot-on;
    /* enable-active-high; */
    vin-supply = <&vcc_3v3_sys>;
    regulator-always-on;
    /* gpio = <&exp1 3 GPIO_ACTIVE_HIGH>; */
    };

    vdd_sd_dv: regulator-4 {
    /* Output of TLV71033 */
    compatible = "regulator-gpio";
    regulator-name = "tlv71033";
    pinctrl-names = "default";
    pinctrl-0 = <&vdd_sd_dv_pins_default>;
    regulator-min-microvolt = <1800000>;
    regulator-max-microvolt = <3300000>;
    regulator-boot-on;
    regulator-always-on;
    vin-supply = <&vcc_3v3_sys>;
    gpios = <&main_gpio0 31 GPIO_ACTIVE_HIGH>;
    states = <1800000 0x0>,
    <3300000 0x1>;
    };

    vcc_1v8: regulator-5 {
    /* output of TPS6282518DMQ */
    compatible = "regulator-fixed";
    regulator-name = "vcc_1v8";
    regulator-min-microvolt = <1800000>;
    regulator-max-microvolt = <1800000>;
    vin-supply = <&vcc_3v3_sys>;
    regulator-always-on;
    regulator-boot-on;
    };

    wlan_lten: regulator-6 {
    compatible = "regulator-fixed";
    regulator-name = "wlan_lten";
    regulator-min-microvolt = <3300000>;
    regulator-max-microvolt = <3300000>;
    vin-supply = <&vcc_3v3_sys>;
    /* regulator-always-on; */
    gpios = <&exp1 11 GPIO_ACTIVE_LOW>;
    };

    wlan_en: regulator-7 {
    compatible = "regulator-fixed";
    regulator-name = "wlan_en";
    regulator-min-microvolt = <1800000>;
    regulator-max-microvolt = <1800000>;
    vin-supply = <&wlan_lten>;
    enable-active-high;
    gpios = <&main_gpio0 71 GPIO_ACTIVE_HIGH>;
    pinctrl-names = "default";
    pinctrl-0 = <&wlan_en_pins_default>;
    };

    btwlan_en: regulator-8 {
    compatible = "regulator-fixed";
    regulator-name = "btwlan_en";
    regulator-min-microvolt = <3300000>;
    regulator-max-microvolt = <3300000>;
    vin-supply = <&wlan_lten>;
    enable-active-high;
    gpios = <&mcu_gpio0 1 GPIO_ACTIVE_HIGH>;
    pinctrl-names = "default";
    pinctrl-0 = <&mcu_btwlan_en_pins_default>;
    };

    };

    &main_pmx0 {
    main_rgmii2_pins_default: main-rgmii2-pins-default {
    pinctrl-single,pins = <
    AM62X_IOPAD(0x184, PIN_INPUT, 0) /* (AE23) RGMII2_RD0 */
    AM62X_IOPAD(0x188, PIN_INPUT, 0) /* (AB20) RGMII2_RD1 */
    AM62X_IOPAD(0x18c, PIN_INPUT, 0) /* (AC21) RGMII2_RD2 */
    AM62X_IOPAD(0x190, PIN_INPUT, 0) /* (AE22) RGMII2_RD3 */
    AM62X_IOPAD(0x180, PIN_INPUT, 0) /* (AD23) RGMII2_RXC */
    AM62X_IOPAD(0x17c, PIN_INPUT, 0) /* (AD22) RGMII2_RX_CTL */
    AM62X_IOPAD(0x16c, PIN_OUTPUT, 0) /* (Y18) RGMII2_TD0 */
    AM62X_IOPAD(0x170, PIN_OUTPUT, 0) /* (AA18) RGMII2_TD1 */
    AM62X_IOPAD(0x174, PIN_OUTPUT, 0) /* (AD21) RGMII2_TD2 */
    AM62X_IOPAD(0x178, PIN_OUTPUT, 0) /* (AC20) RGMII2_TD3 */
    AM62X_IOPAD(0x168, PIN_OUTPUT, 0) /* (AE21) RGMII2_TXC */
    AM62X_IOPAD(0x164, PIN_OUTPUT, 0) /* (AA19) RGMII2_TX_CTL */
    >;
    };

    ospi0_pins_default: ospi0-pins-default {
    pinctrl-single,pins = <
    AM62X_IOPAD(0x000, PIN_OUTPUT, 0) /* (H24) OSPI0_CLK */
    AM62X_IOPAD(0x02c, PIN_OUTPUT, 0) /* (F23) OSPI0_CSn0 */
    AM62X_IOPAD(0x00c, PIN_INPUT, 0) /* (E25) OSPI0_D0 */
    AM62X_IOPAD(0x010, PIN_INPUT, 0) /* (G24) OSPI0_D1 */
    AM62X_IOPAD(0x014, PIN_INPUT, 0) /* (F25) OSPI0_D2 */
    AM62X_IOPAD(0x018, PIN_INPUT, 0) /* (F24) OSPI0_D3 */
    AM62X_IOPAD(0x01c, PIN_INPUT, 0) /* (J23) OSPI0_D4 */
    AM62X_IOPAD(0x020, PIN_INPUT, 0) /* (J25) OSPI0_D5 */
    AM62X_IOPAD(0x024, PIN_INPUT, 0) /* (H25) OSPI0_D6 */
    AM62X_IOPAD(0x028, PIN_INPUT, 0) /* (J22) OSPI0_D7 */
    AM62X_IOPAD(0x008, PIN_INPUT, 0) /* (J24) OSPI0_DQS */
    >;
    };

    vdd_sd_dv_pins_default: vdd-sd-dv-pins-default {
    pinctrl-single,pins = <
    AM62X_IOPAD(0x07c, PIN_OUTPUT, 7) /* (P25) GPMC0_CLK.GPIO0_31 */
    >;
    };

    main_gpio1_ioexp_intr_pins_default: main-gpio1-ioexp-intr-pins-default {
    pinctrl-single,pins = <
    AM62X_IOPAD(0x01d4, PIN_INPUT, 7) /* (B15) UART0_RTSn.GPIO1_23 */
    >;
    };

    wlan_en_pins_default: wlan-en-pins-default {
    pinctrl-single,pins = <
    AM62X_IOPAD(0x124, PIN_OUTPUT, 7) /* (A23) MMC2_SDCD.GPIO0_71 */
    >;
    };

    main_mmc2_pins_default: main-mmc2-pins-default {
    pinctrl-single,pins = <
    AM62X_IOPAD(0x120, PIN_INPUT, 0) /* (C24) MMC2_CMD */
    AM62X_IOPAD(0x118, PIN_INPUT, 0) /* (D25) MMC2_CLK */
    AM62X_IOPAD(0x114, PIN_INPUT, 0) /* (B24) MMC2_DAT0 */
    AM62X_IOPAD(0x110, PIN_INPUT, 0) /* (C25) MMC2_DAT1 */
    AM62X_IOPAD(0x10c, PIN_INPUT, 0) /* (E23) MMC2_DAT2 */
    AM62X_IOPAD(0x108, PIN_INPUT, 0) /* (D24) MMC2_DAT3 */
    AM62X_IOPAD(0x11c, PIN_INPUT, 0) /* (#N/A) MMC2_CLKB */
    >;
    };

    main_wlirq_pins_default: main-wlirq-pins-default {
    pinctrl-single,pins = <
    AM62X_IOPAD(0x128, PIN_INPUT, 7) /* (B23) MMC2_SDWP.GPIO0_72 */
    >;
    };

    /* For BT/WLAN connection interface */
    main_uart4_pins_default: main-uart4-default-pins {
    pinctrl-single,pins = <
    AM62X_IOPAD(0x00b0, PIN_INPUT, 3) /* (K22) GPMC0_CSn2.UART4_RXD */
    AM62X_IOPAD(0x00b4, PIN_OUTPUT, 3) /* (K24) GPMC0_CSn3.UART4_TXD */
    >;
    };
    };

    &main_uart4 {
    status = "okay";
    pinctrl-names = "default";
    pinctrl-0 = <&main_uart4_pins_default>;

    /*
    bluetooth {
    enable-gpios = <&mcu_gpio0 1 GPIO_ACTIVE_HIGH>;
    };
    */

    };

    &mcu_pmx0 {
    /* Enable BT/WLAN Pin */
    mcu_btwlan_en_pins_default: mcu-btwlan-en-pins-default {
    pinctrl-single,pins = <
    AM62X_MCU_IOPAD(0x0004, PIN_OUTPUT_PULLUP, 7) /* (B8) MCU_SPI0_CS1.MCU_GPIO0_1 */
    >;
    };
    };

    &main_i2c1 {
    exp1: gpio@22 {
    compatible = "ti,tca6424";
    reg = <0x22>;
    gpio-controller;
    #gpio-cells = <2>;
    gpio-line-names = "GPIO_CPSW2_RST", "GPIO_CPSW1_RST",
    "PRU_DETECT", "MMC1_SD_EN",
    "VPP_LDO_EN", "EXP_PS_3V3_En",
    "EXP_PS_5V0_En", "EXP_HAT_DETECT",
    "GPIO_AUD_RSTn", "GPIO_eMMC_RSTn",
    "UART1_FET_BUF_EN", "WL_LT_EN",
    "GPIO_HDMI_RSTn", "CSI_GPIO1",
    "CSI_GPIO2", "PRU_3V3_EN",
    "HDMI_INTn", "PD_I2C_IRQ",
    "MCASP1_FET_EN", "MCASP1_BUF_BT_EN",
    "MCASP1_FET_SEL", "UART1_FET_SEL",
    "TSINT#", "IO_EXP_TEST_LED";

    interrupt-parent = <&main_gpio1>;
    interrupts = <23 IRQ_TYPE_EDGE_FALLING>;
    interrupt-controller;
    #interrupt-cells = <2>;

    pinctrl-names = "default";
    pinctrl-0 = <&main_gpio1_ioexp_intr_pins_default>;
    };
    };

    &sdhci1 {
    status = "okay";
    vmmc-supply = <&vdd_mmc1>;
    vqmmc-supply = <&vdd_sd_dv>;
    };

    &sdhci2 {
    status = "okay";
    vmmc-supply = <&wlan_en>;
    pinctrl-names = "default";
    pinctrl-0 = <&main_mmc2_pins_default>;
    bus-width = <4>;
    non-removable;
    ti,fails-without-test-cd;
    cap-power-off-card;
    keep-power-in-suspend;
    ti,driver-strength-ohm = <50>;
    assigned-clocks = <&k3_clks 157 158>;
    assigned-clock-parents = <&k3_clks 157 160>;

    #address-cells = <1>;
    #size-cells = <0>;
    wlcore: wlcore@2 {
    compatible = "ti,wl1837";
    reg = <2>;
    pinctrl-names = "default";
    pinctrl-0 = <&main_wlirq_pins_default>;
    interrupt-parent = <&main_gpio0>;
    interrupts = <72 IRQ_TYPE_EDGE_RISING>;
    };
    };

    &cpsw3g {
    pinctrl-names = "default";
    pinctrl-0 = <&main_rgmii1_pins_default
    &main_rgmii2_pins_default>;

    cpts@3d000 {
    /* MAP HW3_TS_PUSH to GENF1 */
    ti,pps = <2 1>;
    };
    };

    &cpsw_port2 {
    phy-mode = "rgmii-rxid";
    phy-handle = <&cpsw3g_phy1>;
    };

    &cpsw3g_mdio {
    cpsw3g_phy1: ethernet-phy@1 {
    reg = <1>;
    ti,rx-internal-delay = <DP83867_RGMIIDCTL_2_00_NS>;
    ti,fifo-depth = <DP83867_PHYCR_FIFO_DEPTH_4_B_NIB>;
    ti,min-output-impedance;
    };
    };

    &mailbox0_cluster0 {
    mbox_m4_0: mbox-m4-0 {
    ti,mbox-rx = <0 0 0>;
    ti,mbox-tx = <1 0 0>;
    };
    };

    &ospi0 {
    status = "okay";
    pinctrl-names = "default";
    pinctrl-0 = <&ospi0_pins_default>;

    flash@0{
    compatible = "jedec,spi-nor";
    reg = <0x0>;
    spi-tx-bus-width = <8>;
    spi-rx-bus-width = <8>;
    spi-max-frequency = <25000000>;
    cdns,tshsl-ns = <60>;
    cdns,tsd2d-ns = <60>;
    cdns,tchsh-ns = <60>;
    cdns,tslch-ns = <60>;
    cdns,read-delay = <4>;

    partitions {
    compatible = "fixed-partitions";
    #address-cells = <1>;
    #size-cells = <1>;

    partition@0 {
    label = "ospi.tiboot3";
    reg = <0x0 0x80000>;
    };

    partition@80000 {
    label = "ospi.tispl";
    reg = <0x80000 0x200000>;
    };

    partition@280000 {
    label = "ospi.u-boot";
    reg = <0x280000 0x400000>;
    };

    partition@680000 {
    label = "ospi.env";
    reg = <0x680000 0x40000>;
    };

    partition@6c0000 {
    label = "ospi.env.backup";
    reg = <0x6c0000 0x40000>;
    };

    partition@800000 {
    label = "ospi.rootfs";
    reg = <0x800000 0x37c0000>;
    };

    partition@3fc0000 {
    label = "ospi.phypattern";
    reg = <0x3fc0000 0x40000>;
    };
    };
    };
    };

    &tlv320aic3106 {
    DVDD-supply = <&vcc_1v8>;
    };

    #define K3_TS_OFFSET(pa, val) (0x4+(pa)*4) (0x10000 | val)

    &timesync_router {
    status = "okay";
    pinctrl-names = "default";
    pinctrl-0 = <&cpsw_cpts>;

    /* Use Time Sync Router to map GENF1 input to HW3_TS_PUSH output */
    cpsw_cpts: cpsw-cpts {
    pinctrl-single,pins = <
    /* pps [cpsw cpts genf1] in17 -> out12 [cpsw cpts hw3_push] */
    K3_TS_OFFSET(12, 17)
    >;
    };
    };

  • Please attach the Linux console boot log.

    Whenever provide files or logs, please attach the file. copy&paste it to the post, makes the post difficult to read because 1) it is very long and 2) the indentation is lost.

  • Hello Bin Liu, 

    Linux console boot log, and my modification dts are here. please check.

    kernel_log_uart4.txt

    // SPDX-License-Identifier: GPL-2.0
    /*
     * AM625 SK: https://www.ti.com/lit/zip/sprr448
     *
     * Copyright (C) 2021-2022 Texas Instruments Incorporated - https://www.ti.com/
     */
    
    /dts-v1/;
    
    #include "k3-am62x-sk-common.dtsi"
    
    / {
    	compatible = "ti,am625-sk", "ti,am625";
    	model = "Texas Instruments AM625 SK";
    
    	aliases {
    		serial4 = &main_uart4;
    		gpio2 = &mcu_gpio0;
    	};
    
    	opp-table {
    		/* Add 1.4GHz OPP for am625-sk board. Requires VDD_CORE to be at 0.85V */
    		opp-1400000000 {
    			opp-hz = /bits/ 64 <1400000000>;
    			opp-supported-hw = <0x01 0x0004>;
    			clock-latency-ns = <6000000>;
    		};
    	};
    
    	memory@80000000 {
    		device_type = "memory";
    		/* 2G RAM */
    		reg = <0x00000000 0x80000000 0x00000000 0x80000000>;
    
    	};
    
    	vmain_pd: regulator-0 {
    		/* TPS65988 PD CONTROLLER OUTPUT */
    		compatible = "regulator-fixed";
    		regulator-name = "vmain_pd";
    		regulator-min-microvolt = <5000000>;
    		regulator-max-microvolt = <5000000>;
    		regulator-always-on;
    		regulator-boot-on;
    	};
    
    	vcc_5v0: regulator-1 {
    		/* Output of LM34936 */
    		compatible = "regulator-fixed";
    		regulator-name = "vcc_5v0";
    		regulator-min-microvolt = <5000000>;
    		regulator-max-microvolt = <5000000>;
    		vin-supply = <&vmain_pd>;
    		regulator-always-on;
    		regulator-boot-on;
    	};
    
    	vcc_3v3_sys: regulator-2 {
    		/* output of LM61460-Q1 */
    		compatible = "regulator-fixed";
    		regulator-name = "vcc_3v3_sys";
    		regulator-min-microvolt = <3300000>;
    		regulator-max-microvolt = <3300000>;
    		vin-supply = <&vmain_pd>;
    		regulator-always-on;
    		regulator-boot-on;
    	};
    
    	vdd_mmc1: regulator-3 {
    		/* TPS22918DBVR */
    		compatible = "regulator-fixed";
    		regulator-name = "vdd_mmc1";
    		regulator-min-microvolt = <3300000>;
    		regulator-max-microvolt = <3300000>;
    		regulator-boot-on;
    		/* enable-active-high; */
    		vin-supply = <&vcc_3v3_sys>;
    		regulator-always-on; 
    		/* gpio = <&exp1 3 GPIO_ACTIVE_HIGH>; */
    	};
    
    	vdd_sd_dv: regulator-4 {
    		/* Output of TLV71033 */
    		compatible = "regulator-gpio";
    		regulator-name = "tlv71033";
    		pinctrl-names = "default";
    		pinctrl-0 = <&vdd_sd_dv_pins_default>;
    		regulator-min-microvolt = <1800000>;
    		regulator-max-microvolt = <3300000>;
    		regulator-boot-on;
    		regulator-always-on;
    		vin-supply = <&vcc_3v3_sys>;
    		gpios = <&main_gpio0 31 GPIO_ACTIVE_HIGH>;
    		states = <1800000 0x0>,
    			 <3300000 0x1>;
    	};
    
    	vcc_1v8: regulator-5 {
    		/* output of TPS6282518DMQ */
    		compatible = "regulator-fixed";
    		regulator-name = "vcc_1v8";
    		regulator-min-microvolt = <1800000>;
    		regulator-max-microvolt = <1800000>;
    		vin-supply = <&vcc_3v3_sys>;
    		regulator-always-on;
    		regulator-boot-on;
    	};
    
    	wlan_lten: regulator-6 {
    		compatible = "regulator-fixed";
    		regulator-name = "wlan_lten";
    		regulator-min-microvolt = <3300000>;
    		regulator-max-microvolt = <3300000>;
    		vin-supply = <&vcc_3v3_sys>;
    		/* regulator-always-on; */
    		gpios = <&exp1 11 GPIO_ACTIVE_LOW>;
    	};
    
    	wlan_en: regulator-7 {
    		compatible = "regulator-fixed";
    		regulator-name = "wlan_en";
    		regulator-min-microvolt = <1800000>;
    		regulator-max-microvolt = <1800000>;
    		vin-supply = <&wlan_lten>;
    		enable-active-high;
    		gpios = <&main_gpio0 71 GPIO_ACTIVE_HIGH>;
    		pinctrl-names = "default";
    		pinctrl-0 = <&wlan_en_pins_default>;
    	};
    
           btwlan_en: regulator-8 {
                   compatible = "regulator-fixed";
                   regulator-name = "btwlan_en";
                   regulator-min-microvolt = <3300000>;
                   regulator-max-microvolt = <3300000>;
                   vin-supply = <&wlan_lten>;
                   enable-active-high;
                   gpios = <&mcu_gpio0 1 GPIO_ACTIVE_HIGH>;
                   pinctrl-names = "default";
                   pinctrl-0 = <&mcu_btwlan_en_pins_default>;
           };
    
    };
    
    &main_pmx0 {
    	main_rgmii2_pins_default: main-rgmii2-pins-default {
    		pinctrl-single,pins = <
    			AM62X_IOPAD(0x184, PIN_INPUT, 0) /* (AE23) RGMII2_RD0 */
    			AM62X_IOPAD(0x188, PIN_INPUT, 0) /* (AB20) RGMII2_RD1 */
    			AM62X_IOPAD(0x18c, PIN_INPUT, 0) /* (AC21) RGMII2_RD2 */
    			AM62X_IOPAD(0x190, PIN_INPUT, 0) /* (AE22) RGMII2_RD3 */
    			AM62X_IOPAD(0x180, PIN_INPUT, 0) /* (AD23) RGMII2_RXC */
    			AM62X_IOPAD(0x17c, PIN_INPUT, 0) /* (AD22) RGMII2_RX_CTL */
    			AM62X_IOPAD(0x16c, PIN_OUTPUT, 0) /* (Y18) RGMII2_TD0 */
    			AM62X_IOPAD(0x170, PIN_OUTPUT, 0) /* (AA18) RGMII2_TD1 */
    			AM62X_IOPAD(0x174, PIN_OUTPUT, 0) /* (AD21) RGMII2_TD2 */
    			AM62X_IOPAD(0x178, PIN_OUTPUT, 0) /* (AC20) RGMII2_TD3 */
    			AM62X_IOPAD(0x168, PIN_OUTPUT, 0) /* (AE21) RGMII2_TXC */
    			AM62X_IOPAD(0x164, PIN_OUTPUT, 0) /* (AA19) RGMII2_TX_CTL */
    		>;
    	};
    
    	ospi0_pins_default: ospi0-pins-default {
    		pinctrl-single,pins = <
    			AM62X_IOPAD(0x000, PIN_OUTPUT, 0) /* (H24) OSPI0_CLK */
    			AM62X_IOPAD(0x02c, PIN_OUTPUT, 0) /* (F23) OSPI0_CSn0 */
    			AM62X_IOPAD(0x00c, PIN_INPUT, 0) /* (E25) OSPI0_D0 */
    			AM62X_IOPAD(0x010, PIN_INPUT, 0) /* (G24) OSPI0_D1 */
    			AM62X_IOPAD(0x014, PIN_INPUT, 0) /* (F25) OSPI0_D2 */
    			AM62X_IOPAD(0x018, PIN_INPUT, 0) /* (F24) OSPI0_D3 */
    			AM62X_IOPAD(0x01c, PIN_INPUT, 0) /* (J23) OSPI0_D4 */
    			AM62X_IOPAD(0x020, PIN_INPUT, 0) /* (J25) OSPI0_D5 */
    			AM62X_IOPAD(0x024, PIN_INPUT, 0) /* (H25) OSPI0_D6 */
    			AM62X_IOPAD(0x028, PIN_INPUT, 0) /* (J22) OSPI0_D7 */
    			AM62X_IOPAD(0x008, PIN_INPUT, 0) /* (J24) OSPI0_DQS */
    		>;
    	};
    
    	vdd_sd_dv_pins_default: vdd-sd-dv-pins-default {
    		pinctrl-single,pins = <
    			AM62X_IOPAD(0x07c, PIN_OUTPUT, 7) /* (P25) GPMC0_CLK.GPIO0_31 */
    		>;
    	};
    
    	main_gpio1_ioexp_intr_pins_default: main-gpio1-ioexp-intr-pins-default {
    		pinctrl-single,pins = <
    			AM62X_IOPAD(0x01d4, PIN_INPUT, 7) /* (B15) UART0_RTSn.GPIO1_23 */
    		>;
    	};
    
    	wlan_en_pins_default: wlan-en-pins-default {
    		pinctrl-single,pins = <
    				AM62X_IOPAD(0x124, PIN_OUTPUT, 7) /* (A23) MMC2_SDCD.GPIO0_71 */
    		>;
    	};
    
    	main_mmc2_pins_default: main-mmc2-pins-default {
    		pinctrl-single,pins = <
    			AM62X_IOPAD(0x120, PIN_INPUT, 0) /* (C24) MMC2_CMD */
    			AM62X_IOPAD(0x118, PIN_INPUT, 0) /* (D25) MMC2_CLK */
    			AM62X_IOPAD(0x114, PIN_INPUT, 0) /* (B24) MMC2_DAT0 */
    			AM62X_IOPAD(0x110, PIN_INPUT, 0) /* (C25) MMC2_DAT1 */
    			AM62X_IOPAD(0x10c, PIN_INPUT, 0) /* (E23) MMC2_DAT2 */
    			AM62X_IOPAD(0x108, PIN_INPUT, 0) /* (D24) MMC2_DAT3 */
    			AM62X_IOPAD(0x11c, PIN_INPUT, 0) /* (#N/A) MMC2_CLKB */
    		>;
    	};
    
    	main_wlirq_pins_default: main-wlirq-pins-default {
    		pinctrl-single,pins = <
    			AM62X_IOPAD(0x128, PIN_INPUT, 7) /* (B23) MMC2_SDWP.GPIO0_72 */
    		>;
    	};
    
    	/* For BT/WLAN connection interface  */
            main_uart4_pins_default: main-uart4-default-pins {
                    pinctrl-single,pins = <
                            AM62X_IOPAD(0x00b0, PIN_INPUT, 3) /* (K22) GPMC0_CSn2.UART4_RXD */
                            AM62X_IOPAD(0x00b4, PIN_OUTPUT, 3) /* (K24) GPMC0_CSn3.UART4_TXD */
                    >;
            };
    };
    
    &main_uart4 {
           status = "okay";
           pinctrl-names = "default";
           pinctrl-0 = <&main_uart4_pins_default>;
    
           /*
    	bluetooth {
                   enable-gpios = <&mcu_gpio0 1 GPIO_ACTIVE_HIGH>;
           };
    	*/
    
    };
    
    &mcu_pmx0 {
           /* Enable BT/WLAN Pin */
           mcu_btwlan_en_pins_default: mcu-btwlan-en-pins-default {
                   pinctrl-single,pins = <
                           AM62X_MCU_IOPAD(0x0004, PIN_OUTPUT_PULLUP, 7) /* (B8) MCU_SPI0_CS1.MCU_GPIO0_1 */
                   >;
           };
    };
    
    &main_i2c1 {
    	exp1: gpio@22 {
    		compatible = "ti,tca6424";
    		reg = <0x22>;
    		gpio-controller;
    		#gpio-cells = <2>;
    		gpio-line-names = "GPIO_CPSW2_RST", "GPIO_CPSW1_RST",
    				   "PRU_DETECT", "MMC1_SD_EN",
    				   "VPP_LDO_EN", "EXP_PS_3V3_En",
    				   "EXP_PS_5V0_En", "EXP_HAT_DETECT",
    				   "GPIO_AUD_RSTn", "GPIO_eMMC_RSTn",
    				   "UART1_FET_BUF_EN", "WL_LT_EN",
    				   "GPIO_HDMI_RSTn", "CSI_GPIO1",
    				   "CSI_GPIO2", "PRU_3V3_EN",
    				   "HDMI_INTn", "PD_I2C_IRQ",
    				   "MCASP1_FET_EN", "MCASP1_BUF_BT_EN",
    				   "MCASP1_FET_SEL", "UART1_FET_SEL",
    				   "TSINT#", "IO_EXP_TEST_LED";
    
    		interrupt-parent = <&main_gpio1>;
    		interrupts = <23 IRQ_TYPE_EDGE_FALLING>;
    		interrupt-controller;
    		#interrupt-cells = <2>;
    
    		pinctrl-names = "default";
    		pinctrl-0 = <&main_gpio1_ioexp_intr_pins_default>;
    	};
    };
    
    &sdhci1 {
    	status = "okay";
    	vmmc-supply = <&vdd_mmc1>;
    	vqmmc-supply = <&vdd_sd_dv>;
    };
    
    &sdhci2 {
    	status = "okay";
    	vmmc-supply = <&wlan_en>;
    	pinctrl-names = "default";
    	pinctrl-0 = <&main_mmc2_pins_default>;
    	bus-width = <4>;
    	non-removable;
    	ti,fails-without-test-cd;
    	cap-power-off-card;
    	keep-power-in-suspend;
    	ti,driver-strength-ohm = <50>;
    	assigned-clocks = <&k3_clks 157 158>;
    	assigned-clock-parents = <&k3_clks 157 160>;
    
    	#address-cells = <1>;
    	#size-cells = <0>;
    	wlcore: wlcore@2 {
    		compatible = "ti,wl1837";
    		reg = <2>;
    		pinctrl-names = "default";
    		pinctrl-0 = <&main_wlirq_pins_default>;
    		interrupt-parent = <&main_gpio0>;
    		interrupts = <72 IRQ_TYPE_EDGE_RISING>;
    	};
    };
    
    &cpsw3g {
    	pinctrl-names = "default";
    	pinctrl-0 = <&main_rgmii1_pins_default
    		     &main_rgmii2_pins_default>;
    
    	cpts@3d000 {
    		/* MAP HW3_TS_PUSH to GENF1 */
    		ti,pps = <2 1>;
    	};
    };
    
    &cpsw_port2 {
    	phy-mode = "rgmii-rxid";
    	phy-handle = <&cpsw3g_phy1>;
    };
    
    &cpsw3g_mdio {
    	cpsw3g_phy1: ethernet-phy@1 {
    		reg = <1>;
    		ti,rx-internal-delay = <DP83867_RGMIIDCTL_2_00_NS>;
    		ti,fifo-depth = <DP83867_PHYCR_FIFO_DEPTH_4_B_NIB>;
    		ti,min-output-impedance;
    	};
    };
    
    &mailbox0_cluster0 {
    	mbox_m4_0: mbox-m4-0 {
    		ti,mbox-rx = <0 0 0>;
    		ti,mbox-tx = <1 0 0>;
    	};
    };
    
    &ospi0 {
    	status = "okay";
    	pinctrl-names = "default";
    	pinctrl-0 = <&ospi0_pins_default>;
    
    	flash@0{
    		compatible = "jedec,spi-nor";
    		reg = <0x0>;
    		spi-tx-bus-width = <8>;
    		spi-rx-bus-width = <8>;
    		spi-max-frequency = <25000000>;
    		cdns,tshsl-ns = <60>;
    		cdns,tsd2d-ns = <60>;
    		cdns,tchsh-ns = <60>;
    		cdns,tslch-ns = <60>;
    		cdns,read-delay = <4>;
    
    		partitions {
    			compatible = "fixed-partitions";
    			#address-cells = <1>;
    			#size-cells = <1>;
    
    			partition@0 {
    				label = "ospi.tiboot3";
    				reg = <0x0 0x80000>;
    			};
    
    			partition@80000 {
    				label = "ospi.tispl";
    				reg = <0x80000 0x200000>;
    			};
    
    			partition@280000 {
    				label = "ospi.u-boot";
    				reg = <0x280000 0x400000>;
    			};
    
    			partition@680000 {
    				label = "ospi.env";
    				reg = <0x680000 0x40000>;
    			};
    
    			partition@6c0000 {
    				label = "ospi.env.backup";
    				reg = <0x6c0000 0x40000>;
    			};
    
    			partition@800000 {
    				label = "ospi.rootfs";
    				reg = <0x800000 0x37c0000>;
    			};
    
    			partition@3fc0000 {
    				label = "ospi.phypattern";
    				reg = <0x3fc0000 0x40000>;
    			};
    		};
    	};
    };
    
    &tlv320aic3106 {
    	DVDD-supply = <&vcc_1v8>;
    };
    
    #define K3_TS_OFFSET(pa, val)	(0x4+(pa)*4) (0x10000 | val)
    
    &timesync_router {
    	status = "okay";
    	pinctrl-names = "default";
    	pinctrl-0 = <&cpsw_cpts>;
    
    	/* Use Time Sync Router to map GENF1 input to HW3_TS_PUSH output */
    	cpsw_cpts: cpsw-cpts {
    		pinctrl-single,pins = <
    			/* pps [cpsw cpts genf1] in17 -> out12 [cpsw cpts hw3_push] */
    			K3_TS_OFFSET(12, 17)
    			>;
    	};
    };
    
    diff --git a/arch/arm64/boot/dts/ti/k3-am62-main.dtsi b/arch/arm64/boot/dts/ti/k3-am62-main.dtsi
    index 74e34b84419a..048d96cfd1a2 100644
    --- a/arch/arm64/boot/dts/ti/k3-am62-main.dtsi
    +++ b/arch/arm64/boot/dts/ti/k3-am62-main.dtsi
    @@ -581,7 +581,7 @@ sdhci1: mmc@fa00000 {
     		ti,itap-del-sel-sdr12 = <0xa>;
     		ti,itap-del-sel-sdr25 = <0x1>;
     		ti,clkbuf-sel = <0x7>;
    -		bus-width = <4>;
    +		bus-width = <1>;
     		status = "disabled";
     	};
     
    diff --git a/arch/arm64/boot/dts/ti/k3-am625-sk.dts b/arch/arm64/boot/dts/ti/k3-am625-sk.dts
    index b1737978103b..9b617259261b 100644
    --- a/arch/arm64/boot/dts/ti/k3-am625-sk.dts
    +++ b/arch/arm64/boot/dts/ti/k3-am625-sk.dts
    @@ -13,6 +13,11 @@ / {
     	compatible = "ti,am625-sk", "ti,am625";
     	model = "Texas Instruments AM625 SK";
     
    +	aliases {
    +		serial4 = &main_uart4;
    +		gpio2 = &mcu_gpio0;
    +	};
    +
     	opp-table {
     		/* Add 1.4GHz OPP for am625-sk board. Requires VDD_CORE to be at 0.85V */
     		opp-1400000000 {
    @@ -68,9 +73,10 @@ vdd_mmc1: regulator-3 {
     		regulator-min-microvolt = <3300000>;
     		regulator-max-microvolt = <3300000>;
     		regulator-boot-on;
    -		enable-active-high;
    +		/* enable-active-high; */
     		vin-supply = <&vcc_3v3_sys>;
    -		gpio = <&exp1 3 GPIO_ACTIVE_HIGH>;
    +		regulator-always-on; 
    +		/* gpio = <&exp1 3 GPIO_ACTIVE_HIGH>; */
     	};
     
     	vdd_sd_dv: regulator-4 {
    @@ -82,7 +88,8 @@ vdd_sd_dv: regulator-4 {
     		regulator-min-microvolt = <1800000>;
     		regulator-max-microvolt = <3300000>;
     		regulator-boot-on;
    -		vin-supply = <&vcc_5v0>;
    +		regulator-always-on;
    +		vin-supply = <&vcc_3v3_sys>;
     		gpios = <&main_gpio0 31 GPIO_ACTIVE_HIGH>;
     		states = <1800000 0x0>,
     			 <3300000 0x1>;
    @@ -105,7 +112,7 @@ wlan_lten: regulator-6 {
     		regulator-min-microvolt = <3300000>;
     		regulator-max-microvolt = <3300000>;
     		vin-supply = <&vcc_3v3_sys>;
    -		regulator-always-on;
    +		/* regulator-always-on; */
     		gpios = <&exp1 11 GPIO_ACTIVE_LOW>;
     	};
     
    @@ -120,6 +127,19 @@ wlan_en: regulator-7 {
     		pinctrl-names = "default";
     		pinctrl-0 = <&wlan_en_pins_default>;
     	};
    +
    +       btwlan_en: regulator-8 {
    +               compatible = "regulator-fixed";
    +               regulator-name = "btwlan_en";
    +               regulator-min-microvolt = <3300000>;
    +               regulator-max-microvolt = <3300000>;
    +               vin-supply = <&wlan_lten>;
    +               enable-active-high;
    +               gpios = <&mcu_gpio0 1 GPIO_ACTIVE_HIGH>;
    +               pinctrl-names = "default";
    +               pinctrl-0 = <&mcu_btwlan_en_pins_default>;
    +       };
    +
     };
     
     &main_pmx0 {
    @@ -191,6 +211,36 @@ main_wlirq_pins_default: main-wlirq-pins-default {
     			AM62X_IOPAD(0x128, PIN_INPUT, 7) /* (B23) MMC2_SDWP.GPIO0_72 */
     		>;
     	};
    +
    +	/* For BT/WLAN connection interface  */
    +        main_uart4_pins_default: main-uart4-default-pins {
    +                pinctrl-single,pins = <
    +                        AM62X_IOPAD(0x00b0, PIN_INPUT, 3) /* (K22) GPMC0_CSn2.UART4_RXD */
    +                        AM62X_IOPAD(0x00b4, PIN_OUTPUT, 3) /* (K24) GPMC0_CSn3.UART4_TXD */
    +                >;
    +        };
    +};
    +
    +&main_uart4 {
    +       status = "okay";
    +       pinctrl-names = "default";
    +       pinctrl-0 = <&main_uart4_pins_default>;
    +
    +       /*
    +	bluetooth {
    +               enable-gpios = <&mcu_gpio0 1 GPIO_ACTIVE_HIGH>;
    +       };
    +	*/
    +
    +};
    +
    +&mcu_pmx0 {
    +       /* Enable BT/WLAN Pin */
    +       mcu_btwlan_en_pins_default: mcu-btwlan-en-pins-default {
    +               pinctrl-single,pins = <
    +                       AM62X_MCU_IOPAD(0x0004, PIN_OUTPUT_PULLUP, 7) /* (B8) MCU_SPI0_CS1.MCU_GPIO0_1 */
    +               >;
    +       };
     };
     
     &main_i2c1 {
    @@ -223,6 +273,7 @@ exp1: gpio@22 {
     };
     
     &sdhci1 {
    +	status = "okay";
     	vmmc-supply = <&vdd_mmc1>;
     	vqmmc-supply = <&vdd_sd_dv>;
     };
    diff --git a/arch/arm64/configs/defconfig b/arch/arm64/configs/defconfig
    index e56a47228ac3..2ad55192aba2 100644
    --- a/arch/arm64/configs/defconfig
    +++ b/arch/arm64/configs/defconfig
    @@ -1,6 +1,48 @@
     CONFIG_SYSVIPC=y
     CONFIG_POSIX_MQUEUE=y
     CONFIG_AUDIT=y
    +#
    +# IRQ subsystem
    +#
    +CONFIG_GENERIC_IRQ_PROBE=y
    +CONFIG_GENERIC_IRQ_SHOW=y
    +CONFIG_GENERIC_IRQ_EFFECTIVE_AFF_MASK=y
    +CONFIG_GENERIC_PENDING_IRQ=y
    +CONFIG_GENERIC_IRQ_MIGRATION=y
    +CONFIG_HARDIRQS_SW_RESEND=y
    +CONFIG_GENERIC_IRQ_CHIP=y
    +CONFIG_IRQ_DOMAIN=y
    +CONFIG_IRQ_SIM=y
    +CONFIG_IRQ_DOMAIN_HIERARCHY=y
    +CONFIG_GENERIC_MSI_IRQ=y
    +CONFIG_GENERIC_MSI_IRQ_DOMAIN=y
    +CONFIG_IRQ_MSI_IOMMU=y
    +CONFIG_GENERIC_IRQ_MATRIX_ALLOCATOR=y
    +CONFIG_GENERIC_IRQ_RESERVATION_MODE=y
    +CONFIG_IRQ_FORCED_THREADING=y
    +CONFIG_SPARSE_IRQ=y
    +# CONFIG_GENERIC_IRQ_DEBUGFS is not set
    +# end of IRQ subsystem
    +
    +CONFIG_CLOCKSOURCE_WATCHDOG=y
    +CONFIG_ARCH_CLOCKSOURCE_INIT=y
    +CONFIG_CLOCKSOURCE_VALIDATE_LAST_CYCLE=y
    +CONFIG_GENERIC_TIME_VSYSCALL=y
    +CONFIG_GENERIC_CLOCKEVENTS=y
    +CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
    +CONFIG_GENERIC_CLOCKEVENTS_MIN_ADJUST=y
    +CONFIG_GENERIC_CMOS_UPDATE=y
    +CONFIG_HAVE_POSIX_CPU_TIMERS_TASK_WORK=y
    +CONFIG_POSIX_CPU_TIMERS_TASK_WORK=y
    +CONFIG_CONTEXT_TRACKING=y
    +CONFIG_CONTEXT_TRACKING_IDLE=y
    +
    +#
    +# Timers subsystem
    +#
    +CONFIG_TICK_ONESHOT=y
    +CONFIG_NO_HZ_COMMON=y
    +# CONFIG_HZ_PERIODIC is not set
     CONFIG_NO_HZ_IDLE=y
     CONFIG_HIGH_RES_TIMERS=y
     CONFIG_BPF_SYSCALL=y
    @@ -218,9 +260,9 @@ CONFIG_CGROUP_NET_PRIO=y
     CONFIG_CAN=m
     CONFIG_BT=m
     CONFIG_BT_HIDP=m
    -# CONFIG_BT_LE is not set
    +CONFIG_BT_LE=m
     CONFIG_BT_LEDS=y
    -# CONFIG_BT_DEBUGFS is not set
    +CONFIG_BT_DEBUGFS=m
     CONFIG_BT_HCIBTUSB=m
     CONFIG_BT_HCIUART=m
     CONFIG_BT_HCIUART_LL=y
    @@ -526,6 +568,8 @@ CONFIG_SERIAL_FSL_LINFLEXUART_CONSOLE=y
     CONFIG_SERIAL_MVEBU_UART=y
     CONFIG_SERIAL_OWL=y
     CONFIG_SERIAL_DEV_BUS=y
    +CONFIG_SERIAL_8250_NR_UARTS=12
    +CONFIG_SERIAL_8250_RUNTIME_UARTS=12
     CONFIG_VIRTIO_CONSOLE=y
     CONFIG_IPMI_HANDLER=m
     CONFIG_IPMI_DEVICE_INTERFACE=m
    @@ -644,6 +688,15 @@ CONFIG_GPIO_PCA953X_IRQ=y
     CONFIG_GPIO_BD9571MWV=m
     CONFIG_GPIO_MAX77620=y
     CONFIG_GPIO_SL28CPLD=m
    +CONFIG_GPIOLIB=y
    +CONFIG_GPIOLIB_FASTPATH_LIMIT=512
    +CONFIG_GPIO_ACPI=y
    +CONFIG_GPIOLIB_IRQCHIP=y
    +CONFIG_DEBUG_GPIO=y
    +CONFIG_GPIO_SYSFS=y
    +CONFIG_GPIO_CDEV=y
    +CONFIG_GPIO_CDEV_V1=y
    +CONFIG_GPIO_GENERIC=y
     CONFIG_POWER_RESET_MSM=y
     CONFIG_POWER_RESET_QCOM_PON=m
     CONFIG_POWER_RESET_XGENE=y
    

  • Hi Paul,

    [    1.245455] pinctrl-single f4000.pinctrl: pin PIN44 already requested by 20020000.i2c; cannot claim for 2840000.serial
    [    1.256161] pinctrl-single f4000.pinctrl: pin-44 (2840000.serial) status -22
    [    1.263206] pinctrl-single f4000.pinctrl: could not request pin 44 (PIN44) from group main-uart4-default-pins  on device pinctrl-single
    [    1.275362] omap8250 2840000.serial: Error applying setting, reverse things back

    Check your kernel boot log, there is pinmux conflict between UART4 and i2c2.

  • Hello Bin Liu

    Thank for your tip; we fixed uart4 issue.

    Then, may you help to correct our DTS, using the BT_EN (MCU_GPIO0_1) to enable[]3v3]/disable the BT/WIFI combo chip ?

  • Hi Paul,

    I don't know much about BT/WIFI control, but by default mcu_gpio and mcu_gpio_intr nodes are disabled in k3-am62x-sk-common.dtsi. So you first should enable both nodes to use MCU_GPIO0_1 pin.

  • Hello Bin Liu, 

    thank for your support. Everything is working properly now.

  • Hi Paul,

    I'm using SK-AM62 processor EVM board which runs Debian OS. I also have the same problem. I want to enable Bluetooth in the on board chip. WiFi is working properly. I don't have a much knowledge on Kernel build and DTS. Could you please give the steps to follow as step by step clearly.

    Regards,

    Kasun

  • I modify k3-am625-sk.dts as below, hope it helps.


    &main_pmx0 {
    /* For BT/WLAN connection interface */
    main_uart4_pins_default: main-uart4-default-pins {
    pinctrl-single,pins = <
    AM62X_IOPAD(0x00b0, PIN_INPUT, 3) /* (K22) GPMC0_CSn2.UART4_RXD */
    AM62X_IOPAD(0x00b4, PIN_OUTPUT, 3) /* (K24) GPMC0_CSn3.UART4_TXD */
    >;
    };
    }

    &mcu_pmx0 {
    /* Enable BT/WLAN Pin */
    mcu_btwlan_en_pins_default: mcu-btwlan-en-pins-default {
    pinctrl-single,pins = <
    AM62X_MCU_IOPAD(0x0004, PIN_OUTPUT_PULLUP, 7) /* (B8) MCU_SPI0_CS1.MCU_GPIO0_1 */
    >;
    };
    }

    &mcu_gpio0 {
    status = "okay";
    };
    &mcu_gpio_intr {
    status = "okay";
    };

    &main_uart4 {
    status = "okay";
    pinctrl-names = "default";
    pinctrl-0 = <&main_uart4_pins_default &mcu_btwlan_en_pins_default>;

    bluetooth {
    enable-gpios = <&mcu_gpio0 1 GPIO_ACTIVE_HIGH>;
    };

    };

  • Hi Paul,

    I have attached the modified k3-am625-sk.dts below.

    // SPDX-License-Identifier: GPL-2.0
    /*
     * AM625 SK: https://www.ti.com/lit/zip/sprr448
     *
     * Copyright (C) 2021-2022 Texas Instruments Incorporated - https://www.ti.com/
     */
    
    /dts-v1/;
    
    #include "k3-am62x-sk-common.dtsi"
    
    / {
    	compatible = "ti,am625-sk", "ti,am625";
    	model = "Texas Instruments AM625 SK";
    	
    	aliases {
    		serial4 = &main_uart1;
    	};	
    
    	opp-table {
    		/* Add 1.4GHz OPP for am625-sk board. Requires VDD_CORE to be at 0.85V */
    		opp-1400000000 {
    			opp-hz = /bits/ 64 <1400000000>;
    			opp-supported-hw = <0x01 0x0004>;
    			clock-latency-ns = <6000000>;
    		};
    		
    		
    	};
    
    
    
    	memory@80000000 {
    		device_type = "memory";
    		/* 2G RAM */
    		reg = <0x00000000 0x80000000 0x00000000 0x80000000>;
    
    	};
    
    	vmain_pd: regulator-0 {
    		/* TPS65988 PD CONTROLLER OUTPUT */
    		bootph-all;
    		compatible = "regulator-fixed";
    		regulator-name = "vmain_pd";
    		regulator-min-microvolt = <5000000>;
    		regulator-max-microvolt = <5000000>;
    		regulator-always-on;
    		regulator-boot-on;
    	};
    
    	vcc_5v0: regulator-1 {
    		/* Output of LM34936 */
    		bootph-all;
    		compatible = "regulator-fixed";
    		regulator-name = "vcc_5v0";
    		regulator-min-microvolt = <5000000>;
    		regulator-max-microvolt = <5000000>;
    		vin-supply = <&vmain_pd>;
    		regulator-always-on;
    		regulator-boot-on;
    	};
    
    	vcc_3v3_sys: regulator-2 {
    		/* output of LM61460-Q1 */
    		bootph-all;
    		compatible = "regulator-fixed";
    		regulator-name = "vcc_3v3_sys";
    		regulator-min-microvolt = <3300000>;
    		regulator-max-microvolt = <3300000>;
    		vin-supply = <&vmain_pd>;
    		regulator-always-on;
    		regulator-boot-on;
    	};
    
    	vdd_mmc1: regulator-3 {
    		/* TPS22918DBVR */
    		bootph-all;
    		compatible = "regulator-fixed";
    		regulator-name = "vdd_mmc1";
    		regulator-min-microvolt = <3300000>;
    		regulator-max-microvolt = <3300000>;
    		regulator-boot-on;
    		enable-active-high;
    		vin-supply = <&vcc_3v3_sys>;
    		gpio = <&exp1 3 GPIO_ACTIVE_HIGH>;
    	};
    
    	vdd_sd_dv: regulator-4 {
    		/* Output of TLV71033 */
    		bootph-all;
    		compatible = "regulator-gpio";
    		regulator-name = "tlv71033";
    		pinctrl-names = "default";
    		pinctrl-0 = <&vdd_sd_dv_pins_default>;
    		regulator-min-microvolt = <1800000>;
    		regulator-max-microvolt = <3300000>;
    		regulator-boot-on;
    		vin-supply = <&vcc_5v0>;
    		gpios = <&main_gpio0 31 GPIO_ACTIVE_HIGH>;
    		states = <1800000 0x0>,
    			 <3300000 0x1>;
    	};
    
    	vcc_1v8: regulator-5 {
    		/* output of TPS6282518DMQ */
    		compatible = "regulator-fixed";
    		regulator-name = "vcc_1v8";
    		regulator-min-microvolt = <1800000>;
    		regulator-max-microvolt = <1800000>;
    		vin-supply = <&vcc_3v3_sys>;
    		regulator-always-on;
    		regulator-boot-on;
    	};
    };
    
    &main_uart1 {
    	status = "okay";
    	pinctrl-names = "default";
    	pinctrl-0 = <&main_uart1_pins_custom &mcu_bt_en_pins_default>;
    
    	bluetooth {
    		enable-gpios = <&mcu_gpio0 1 GPIO_ACTIVE_HIGH>;
    	};
    };
    
    
    &mcu_pmx0 {
    	mcu_bt_en_pins_default: bt-en-pins-default {
    		pinctrl-single,pins = <
    			AM62X_MCU_IOPAD(0x000, PIN_OUTPUT, 7) /* MCU_SPI0_CS0.MCU_GPIO0_0 */ 
    		>;
    	};
    };
    
    &main_pmx0 {
    	main_rgmii2_pins_default: main-rgmii2-default-pins {
    		bootph-all;
    		pinctrl-single,pins = <
    			AM62X_IOPAD(0x184, PIN_INPUT, 0) /* (AE23) RGMII2_RD0 */
    			AM62X_IOPAD(0x188, PIN_INPUT, 0) /* (AB20) RGMII2_RD1 */
    			AM62X_IOPAD(0x18c, PIN_INPUT, 0) /* (AC21) RGMII2_RD2 */
    			AM62X_IOPAD(0x190, PIN_INPUT, 0) /* (AE22) RGMII2_RD3 */
    			AM62X_IOPAD(0x180, PIN_INPUT, 0) /* (AD23) RGMII2_RXC */
    			AM62X_IOPAD(0x17c, PIN_INPUT, 0) /* (AD22) RGMII2_RX_CTL */
    			AM62X_IOPAD(0x16c, PIN_OUTPUT, 0) /* (Y18) RGMII2_TD0 */
    			AM62X_IOPAD(0x170, PIN_OUTPUT, 0) /* (AA18) RGMII2_TD1 */
    			AM62X_IOPAD(0x174, PIN_OUTPUT, 0) /* (AD21) RGMII2_TD2 */
    			AM62X_IOPAD(0x178, PIN_OUTPUT, 0) /* (AC20) RGMII2_TD3 */
    			AM62X_IOPAD(0x168, PIN_OUTPUT, 0) /* (AE21) RGMII2_TXC */
    			AM62X_IOPAD(0x164, PIN_OUTPUT, 0) /* (AA19) RGMII2_TX_CTL */
    		>;
    	};
    
    	main_uart1_pins_custom: main-uart1-pins-default {
    		pinctrl-single,pins = <
    			AM62X_IOPAD(0x1ac, PIN_INPUT, 2) /* (E19) MCASP0_AFSR.UART1_RXD */
    			AM62X_IOPAD(0x1b0, PIN_OUTPUT, 2) /* (A20) MCASP0_ACLKR.UART1_TXD */
    			AM62X_IOPAD(0x198, PIN_OUTPUT, 2) /* (A19) MCASP0_AXR2.UART1_RTSn */
    			AM62X_IOPAD(0x194, PIN_INPUT, 2) /* (B19) MCASP0_AXR3.UART1_CTSn */
    		>;
    	};
    
    	ospi0_pins_default: ospi0-default-pins {
    		bootph-all;
    		pinctrl-single,pins = <
    			AM62X_IOPAD(0x000, PIN_OUTPUT, 0) /* (H24) OSPI0_CLK */
    			AM62X_IOPAD(0x02c, PIN_OUTPUT, 0) /* (F23) OSPI0_CSn0 */
    			AM62X_IOPAD(0x00c, PIN_INPUT, 0) /* (E25) OSPI0_D0 */
    			AM62X_IOPAD(0x010, PIN_INPUT, 0) /* (G24) OSPI0_D1 */
    			AM62X_IOPAD(0x014, PIN_INPUT, 0) /* (F25) OSPI0_D2 */
    			AM62X_IOPAD(0x018, PIN_INPUT, 0) /* (F24) OSPI0_D3 */
    			AM62X_IOPAD(0x01c, PIN_INPUT, 0) /* (J23) OSPI0_D4 */
    			AM62X_IOPAD(0x020, PIN_INPUT, 0) /* (J25) OSPI0_D5 */
    			AM62X_IOPAD(0x024, PIN_INPUT, 0) /* (H25) OSPI0_D6 */
    			AM62X_IOPAD(0x028, PIN_INPUT, 0) /* (J22) OSPI0_D7 */
    			AM62X_IOPAD(0x008, PIN_INPUT, 0) /* (J24) OSPI0_DQS */
    		>;
    	};
    
    	vdd_sd_dv_pins_default: vdd-sd-dv-default-pins {
    		bootph-all;
    		pinctrl-single,pins = <
    			AM62X_IOPAD(0x07c, PIN_OUTPUT, 7) /* (P25) GPMC0_CLK.GPIO0_31 */
    		>;
    	};
    
    	main_gpio1_ioexp_intr_pins_default: main-gpio1-ioexp-intr-default-pins {
    		bootph-all;
    		pinctrl-single,pins = <
    			AM62X_IOPAD(0x01d4, PIN_INPUT, 7) /* (B15) UART0_RTSn.GPIO1_23 */
    		>;
    	};
    };
    
    
    &main_gpio0 {
    	bootph-all;
    };
    
    &main_gpio1 {
    	bootph-all;
    };
    
    &main_i2c1 {
    	bootph-all;
    	exp1: gpio@22 {
    		bootph-all;
    		compatible = "ti,tca6424";
    		reg = <0x22>;
    		gpio-controller;
    		#gpio-cells = <2>;
    		gpio-line-names = "GPIO_CPSW2_RST", "GPIO_CPSW1_RST",
    				   "PRU_DETECT", "MMC1_SD_EN",
    				   "VPP_LDO_EN", "EXP_PS_3V3_En",
    				   "EXP_PS_5V0_En", "EXP_HAT_DETECT",
    				   "GPIO_AUD_RSTn", "GPIO_eMMC_RSTn",
    				   "UART1_FET_BUF_EN", "WL_LT_EN",
    				   "GPIO_HDMI_RSTn", "CSI_GPIO1",
    				   "CSI_GPIO2", "PRU_3V3_EN",
    				   "HDMI_INTn", "PD_I2C_IRQ",
    				   "MCASP1_FET_EN", "MCASP1_BUF_BT_EN",
    				   "MCASP1_FET_SEL", "UART1_FET_SEL",
    				   "TSINT#", "IO_EXP_TEST_LED";
    
    		interrupt-parent = <&main_gpio1>;
    		interrupts = <23 IRQ_TYPE_EDGE_FALLING>;
    		interrupt-controller;
    		#interrupt-cells = <2>;
    
    		pinctrl-names = "default";
    		pinctrl-0 = <&main_gpio1_ioexp_intr_pins_default>;
    	    buf_en {
    			gpio-hog;
    			gpios = <10 GPIO_ACTIVE_LOW>;
    			output-high;
    			line-name = "UART1_BUF_EN";
    		};
    	};
    };
    
    &sdhci1 {
    	vmmc-supply = <&vdd_mmc1>;
    	vqmmc-supply = <&vdd_sd_dv>;
    };
    
    &cpsw3g {
    	pinctrl-names = "default";
    	pinctrl-0 = <&main_rgmii1_pins_default
    		     &main_rgmii2_pins_default>;
    
    	cpts@3d000 {
    		/* MAP HW3_TS_PUSH to GENF1 */
    		ti,pps = <2 1>;
    	};
    };
    
    &cpsw_port2 {
    	phy-mode = "rgmii-rxid";
    	phy-handle = <&cpsw3g_phy1>;
    };
    
    &cpsw3g_mdio {
    	cpsw3g_phy1: ethernet-phy@1 {
    		reg = <1>;
    		ti,rx-internal-delay = <DP83867_RGMIIDCTL_2_00_NS>;
    		ti,fifo-depth = <DP83867_PHYCR_FIFO_DEPTH_4_B_NIB>;
    		ti,min-output-impedance;
    	};
    };
    
    &mailbox0_cluster0 {
    	mbox_m4_0: mbox-m4-0 {
    		ti,mbox-rx = <0 0 0>;
    		ti,mbox-tx = <1 0 0>;
    	};
    };
    
    &fss {
    	bootph-all;
    };
    
    &ospi0 {
    	bootph-all;
    	status = "okay";
    	pinctrl-names = "default";
    	pinctrl-0 = <&ospi0_pins_default>;
    
    	flash@0 {
    		bootph-all;
    		compatible = "jedec,spi-nor";
    		reg = <0x0>;
    		spi-tx-bus-width = <8>;
    		spi-rx-bus-width = <8>;
    		spi-max-frequency = <25000000>;
    		cdns,tshsl-ns = <60>;
    		cdns,tsd2d-ns = <60>;
    		cdns,tchsh-ns = <60>;
    		cdns,tslch-ns = <60>;
    		cdns,read-delay = <4>;
    
    		partitions {
    			bootph-all;
    			compatible = "fixed-partitions";
    			#address-cells = <1>;
    			#size-cells = <1>;
    
    			partition@0 {
    				label = "ospi.tiboot3";
    				reg = <0x0 0x80000>;
    			};
    
    			partition@80000 {
    				label = "ospi.tispl";
    				reg = <0x80000 0x200000>;
    			};
    
    			partition@280000 {
    				label = "ospi.u-boot";
    				reg = <0x280000 0x400000>;
    			};
    
    			partition@680000 {
    				label = "ospi.env";
    				reg = <0x680000 0x40000>;
    			};
    
    			partition@6c0000 {
    				label = "ospi.env.backup";
    				reg = <0x6c0000 0x40000>;
    			};
    
    			partition@800000 {
    				label = "ospi.rootfs";
    				reg = <0x800000 0x37c0000>;
    			};
    
    			partition@3fc0000 {
    				bootph-pre-ram;
    				label = "ospi.phypattern";
    				reg = <0x3fc0000 0x40000>;
    			};
    		};
    	};
    };
    
    &mcu_gpio0 {
    status = "okay";
    };
    &mcu_gpio_intr {
    status = "okay";
    };
    
    &tlv320aic3106 {
    	DVDD-supply = <&vcc_1v8>;
    };
    
    #define K3_TS_OFFSET(pa, val)	(0x4+(pa)*4) (0x10000 | val)
    
    &timesync_router {
    	status = "okay";
    	pinctrl-names = "default";
    	pinctrl-0 = <&cpsw_cpts>;
    
    	/* Use Time Sync Router to map GENF1 input to HW3_TS_PUSH output */
    	cpsw_cpts: cpsw-cpts {
    		pinctrl-single,pins = <
    			/* pps [cpsw cpts genf1] in17 -> out12 [cpsw cpts hw3_push] */
    			K3_TS_OFFSET(12, 17)
    			>;
    	};
    };
    
    
    

    Also I tested BT_EN_SOC from a multimeter. It was active HIGH. But I'm getting following output.

    Agent registered 
    [bluetooth]# power on 
    No default controller available 
    [bluetooth]# scan on 
    No default controller available

    Also, no any hci0 device is shown when hciconfig is typed on the terminal.
    Could you please help me in this.

    Thank you.

    Regards,

    Kasun

  • Hello Kasun

    In my case, i use UART4 as a connection interface to an external Combo BT/WiFi chip, and control the chip to on and off (BT/WiFi) by a gpio as defiined in DTS. So, we verify only Tx and Rx of UART4 between AM62x and the combo BT/WiFi, plus control the BT/WiFi on and off.

    Probably, you may need help from TI engineer .