SK-AM62B: Using MCU_I2C0 / WKUP_I2C0 on AM625 evaluation board from the A53

Part Number: SK-AM62B
Other Parts Discussed in Thread: TPIC2810, AM625SIP, AM625

Tool/software:

Hello, we are attempting to use the MCU_I2C0 on the AM62x evaluation board, I am using the default buildroot configuration for the am62x_evm and have enabled both I2C busses via setting the status to "okay" in the device tree. We also have custom hardware we would like to use this on and it exhibits the exact same issue as the AM62x evaluation board.

What steps, other then enabling these items in the device tree (via status = "okay"; ) are required for using these peripherals?

For both I2C busses the driver probes and we can devmem the region however no clock or data comes out of the device. The driver doesn't output any errors, it simply acts as if nothing is wrong. The only oddity I've noticed is when running i2cdetect on the bus it seems to take unusually long, almost timing out when attempting to probe each address. Other I2C busses like SOC_I2C0 work without any issue and I understand they are using the same driver.

A register dump of one of the non-functioning I2C busses (WKUP_I2C0 on the evaluation board with the TPIC2810 configured) is below:

Address,Hex,Value
0,0,0x0000080C
4,4,0x00005040
8,8,0x00000000
12,C,0x00000000
16,10,0x00000001
20,14,0x00000000
24,18,0x00000000
28,1C,0x00000000
32,20,0x00000000
36,24,0x00000000
40,28,0x00000000
44,2C,0x00000000
48,30,0x00000000
52,34,0x0000636F
56,38,0x00000000
60,3C,0x00000000
64,40,0x00000000
68,44,0x00000000
72,48,0x00000000
76,4C,0x00000000
80,50,0x00000000
84,54,0x00000000
88,58,0x00000000
92,5C,0x00000000
96,60,0x00000000
100,64,0x00000000
104,68,0x00000000
108,6C,0x00000000
112,70,0x00000000
116,74,0x00000000
120,78,0x00000000
124,7C,0x00000000
128,80,0x00000000
132,84,0x00000000
136,88,0x00000000
140,8C,0x00000000
144,90,0x00000001
148,94,0x00000000
152,98,0x00000000
156,9C,0x000000BF
160,A0,0x00000000
164,A4,0x00008000
168,A8,0x00000000
172,AC,0x000003FF
176,B0,0x00000017
180,B4,0x0000000D
184,B8,0x0000000F
188,BC,0x000001E0
192,C0,0x00008000
196,C4,0x00000000
200,C8,0x00000000
204,CC,0x00000000
208,D0,0x00000000
212,D4,0x00000000
216,D8,0x00000000
220,DC,0x00000000
224,E0,0x00000000
228,E4,0x00000000
232,E8,0x00000000
236,EC,0x00000000
240,F0,0x00000000
244,F4,0x00000000
248,F8,0x00000000
252,FC,0x00000000

  • Hello Jeremiah,

    1) Please share your boot logs showing the I2C bus getting probed

    2) Please share your devicetree modifications

    3) What version of Linux SDK are you using?

    4) What boot flow are you using? SBL? SPL?

    For more information about boot flows, refer to the AM62x academy's multicore module:

    https://dev.ti.com/tirex/explore/node?node=A__AZdBTlT8UK2hNwHKXaPieQ__AM62-ACADEMY__uiYMDcq__LATEST

    Regards,

    Nick

  • 1) The I2C driver probes without error and a /dev/i2c device is created, however the devices on the I2C bus fail to probe (a TMP42X sensor and a AT24x EEPROM both fail to probe).

    2) R5 device tree was modified to replace DDR config for the AM625 non SIP with DDR config for the AM625SIP from the SDK, we are including the buildroot k3-am625.dtsi and setting the mcu_i2c0 status to be equal to "okay". We have also tried this on the evaluation board with it's GPIO expander using the wkup_uart0, it observes the exact same behavior as the evaluation board.

    3) We are using buildroot 2025 with the latest versions of Linux and Uboot, no modifications or patches aside from those included in the buildroot defconfig for the am62x evaluation board have been made.

    4) We are using the Uboot SPL, the only change we have made was to enable DEBUG_UART in the R5 and the A53 SPLs.

    DTS for our custom hardware is attached, we are only using this DTS for the Linux image, uboot and everything else still use the same DTS as what's configured in buildroot, However I am currently WFH and not in the lab so I cannot share boot logs, however Monday I will boot the board and upload logs:

    #include "k3-am625.dtsi"
    
    #include <dt-bindings/gpio/gpio.h>
    
    / {
    	aliases {
    		serial2 = &main_uart0;
    		mmc0 = &sdhci0;
    		mmc1 = &sdhci1;
    		ethernet0 = &cpsw_port1;
    	};
    
    	chosen {
    		stdout-path = "serial2:115200n8";
    	};
    
    	memory@80000000 {
    		/* 512MB RAM */
    		reg = <0x00000000 0x80000000 0x00000000 0x20000000>;
    		device_type = "memory";
    		bootph-pre-ram;
    	};
    
    	reserved-memory {
    		#address-cells = <2>;
    		#size-cells = <2>;
    		ranges;
    
    		ramoops@9ca00000 {
    			compatible = "ramoops";
    			reg = <0x00 0x9ca00000 0x00 0x00100000>;
    			record-size = <0x8000>;
    			console-size = <0x8000>;
    			ftrace-size = <0x00>;
    			pmsg-size = <0x8000>;
    		};
    
    		/* global cma region */
    		linux,cma {
    			compatible = "shared-dma-pool";
    			reusable;
    			size = <0x00 0x8000000>;
    			linux,cma-default;
    		};
    
    		secure_tfa_ddr: tfa@9e780000 {
    			reg = <0x00 0x9e780000 0x00 0x80000>;
    			alignment = <0x1000>;
    			no-map;
    		};
    
    		secure_ddr: optee@9e800000 {
    			reg = <0x00 0x9e800000 0x00 0x01800000>; /* for OP-TEE */
    			alignment = <0x1000>;
    			no-map;
    		};
    
    		wkup_r5fss0_core0_dma_memory_region: r5f-dma-memory@9db00000 {
    			compatible = "shared-dma-pool";
    			reg = <0x00 0x9db00000 0x00 0xc00000>;
    			no-map;
    		};
    	};
    
    	tlv320_mclk: clk-0 {
    		#clock-cells = <0>;
    		compatible = "fixed-clock";
    		clock-frequency = <12288000>;
    	};
    };
    
    &main_uart0 {
    	bootph-all;
    	status = "okay";
    };
    
    &mcu_i2c0 {
    	status = "okay";
    
    	temp_u123 {   /* TI TMP42X sensor */
    		status = "okay";
    		compatible = "ti,tmp422";
    		reg = <0x4C>;
    
    		/* channels removed for proprietary data */
    	};
    
    	eeprom_u123 { /* AT 24 EEPROM */
    		status = "okay";
    		compatible = "atmel,24c02";
    		reg = <0x50>;
    	};
    };
    
    /* sdhci0 and sdhci1 removed for proprietary data */
    
    /* cpsw3g removed for proprietary data */
    
    /* The below nodes are magically make things work, leave them alone */
    
    &mailbox0_cluster0 {
    	mbox_m4_0: mbox-m4-0 {
    		ti,mbox-rx = <0 0 0>;
    		ti,mbox-tx = <1 0 0>;
    	};
    };
    
    /* The following device tree items are reserved for TI FW usage */
    
    &mcu_gpio0 {
    	status = "reserved";
    };
    
    &mcu_gpio_intr {
    	status = "reserved";
    };
    
    &wkup_uart0 {
    	/* WKUP UART0 is used by DM firmware */
    	bootph-pre-ram;
    	status = "reserved";
    };
    &main_uart1 {
    	/* Main UART1 is used by TIFS firmware */
    	bootph-pre-ram;
    	status = "reserved";
    };