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: Board hangs on kernel start

Part Number: AM3352
Other Parts Discussed in Thread: AM3351

Dear All,
we engineered a customized board equipped with the AM3352 processor, 256MBytes DDR3 and 4GBytes emmc.

For the first boot of the board we are trying SD card boot (we tried also USBNet boot with the same results) and the AM3352 correctly loads SPL, U-Boot then U-Boot correctly loads ramdisk, devicetree and kernel but it hangs at "Starting Kernel" as reported into the enclosed log.

Before this design based on AM3352 we engineered another board based on AM3351 that's basically the same hardware except for the different CPU and this one boots correctly, starts the kernel and everything works fine.

Into the AM3352 based board, of course, we setup the U-Boot/SPL clock configuration to 300Mhz instead of the 600Mhz we used with AM3351 and we built a minimal device tree for the AM3352 that configures only the UART0 pins.

Which other configurations we could have mistaken on the new board that  hangs the kernel starting ?

Thank You and Regards

Filippo

--------------------------------------------

U-Boot SPL 2015.07-00115-g10a5043-dirty (Nov 14 2019 - 12:54:45)
Could not probe the EEPROM; something fundamentally wrong on the I2C bus.
Could not get board ID.


U-Boot 2015.07-00115-g10a5043-dirty (Nov 14 2019 - 12:54:45 +0100)

Watchdog enabled
I2C: ready
DRAM: 256 MiB
NAND: 0 MiB
MMC: OMAP SD/MMC: 0, OMAP SD/MMC: 1

** Unable to use mmc 0:1 for loading the env **
Using default environment

Could not probe the EEPROM; something fundamentally wrong on the I2C bus.
Could not get board ID.
Net: <ethaddr> not set. Validating first E-fuse MAC
Could not probe the EEPROM; something fundamentally wrong on the I2C bus.
Could not get board ID.
cpsw, usb_ether
Hit any key to stop autoboot: 0

Kernel image found. Booting...
6922056 bytes read in 758 ms (8.7 MiB/s)
4466460 bytes read in 503 ms (8.5 MiB/s)
44287 bytes read in 62 ms (697.3 KiB/s)
Kernel image @ 0x82000000 [ 0x000000 - 0x699f48 ]
## Flattened Device Tree blob at 88000000
Booting using the fdt blob at 0x88000000
Loading Ramdisk to 8eaef000, end 8ef3171c ... OK
Loading Device Tree to 8eae1000, end 8eaeecfe ... OK

Starting kernel ...

--------------------------------------------

  • Hi Filippo,

    The uboot code is checking for ID from EEPROM. Have you put the EEPROM in ur custom board and programmed it ?

    If EEPROM is used follow this link : 

    if EEPROM is not used follow here:

    e2e.ti.com/.../360286

  • Hi Dwarakesh,

    thank you for your indication but this doesn't seem to be the reason of the kernel hanging.

    The log after the failed eprom probing shows that kernel image, device tree and ramdisk are loaded correctly.

    Best Regards

    Filippo

  • Hello Filippo,

    Most probably the RAMDISK is causing that hang. Can you try to boot without using RAMDISK (=> bootz 0x82000000 - 0x88000000), refer to this post to see the other possible causes which may lead to that hang. Furthermore upgrade to the latest Processor SDK version and hardcode the EEPROM content in U-Boot by following the linked instruction in this post. If none of these suggestions help, I would suggest you to revise your hardware design and schematic connection for bad tying, soldering and etc..

    Best regards,
    Kemal

  • Hi Kemal,

    thank you, I tried a boot without the ramdisk but the result doesn't change, always hung at "starting kernel":

    6922056 bytes read in 758 ms (8.7 MiB/s)
    44287 bytes read in 61 ms (709 KiB/s)
    Kernel image @ 0x82000000 [ 0x000000 - 0x699f48 ]
    ## Flattened Device Tree blob at 88000000
    Booting using the fdt blob at 0x88000000
    Loading Device Tree to 8ef23000, end 8ef30cfe ... OK

    Starting kernel ...

    (no ramdisk loaded)

    Best Regards

    Filippo

  • Hi,

    I want to add to what Kemal pointed out in the e2e post that he recommends concerning the RTC, is there a RTC on the custom board? How was the DDR verified to be functioning correctly?

    What happens if the kernel and DTB for the previous AM3351 design is run on the board? Use the AM3352 u-boot though since that appears to be working. If the same UART is used for console then something should appear on the console. The root file system should not matter as you simply want to see something on the console.

    Best Regards,

    Schuyler

  • Hi Filippo,

    Have you tried enabling early printk in kernel? It might give clue.

  • Hi Schuyler,

    the DDR chips and the DDR parameters are the same that work on the old board with the AM3351. 

    If we use the AM3351 design DTB the behavior remains the same, hangs on kernel start.

    I tried also compiling the U-Boot dts and using it with the kernel and again it hangs in the same way.

    Best Regards

    Filippo

  • Yes Dwarakesh, I tried but nothing appears on the console after "Starting kernel ..."

    Best Regards

    Filippo

  • Hi Filippo,

    By this:

    "If we use the AM3351 design DTB the behavior remains the same, hangs on kernel start."

    Does it mean, you have tried the kernel and bootloader(as suggested by Schuyler) from the old AM3351 board, or just the DTB ? 

  • Hi Filippo,

    You mentioned that the boards are essentially the same, could you please describe the differences? Anything else besides the processor? Same DDR manufacturer and size?

    A couple of things to look at would be making sure the kernel got fully loaded, look at performing checksums after loading into memory. Follow the boot commands for SD card boot and load the images and then use the crc32 command. Use the same kernel for the two boards and compare the crc32 value on the working board. DDR viability has to be verified.

    Strip as much as possible out of the DTS, leave the processor node, memory and the UART definition, the root file system interface can be dropped too for the moment.

    Best Regards,

    Schuyler

  • Hi Schuyler,

    the only difference between the two boards is the processor, DDR is same size and manufacturer.

    I performed the checksum to check differences between the two boards but it's correct:

    New board
    run loadimage
    6951640 bytes read in 979 ms (6.8 MiB/s)
    crc32 82000000 6A12D8
    crc32 for 82000000 ... 826a12d7 ==> 8e8ac1aa

    Old board
    run loadimage
    6951640 bytes read in 5265 ms (1.3 MiB/s)
    crc32 82000000 6A12D8
    crc32 for 82000000 ... 826a12d7 ==> 8e8ac1aa

    Concerning the DTB I used the U_Boot DTB that should have nothing more than UART I think.

    Best Regards

    Filippo

  • Hello Filippo,

    As Schuyler mentioned RTC. Please, see this post. Can you remove the RTC node from am33xx.dtsi and try to boot in that way?

    Best regards,
    Kemal

  • Hi Kemal,

    I tried commenting the RTC node into am33xx.dtsi and using this minimalist device tree:

    --------------------------------------------

    #include "am33xx.dtsi"
    #include "am335x-bone-common.dtsi"

    &ldo3_reg {
    regulator-min-microvolt = <1800000>;
    regulator-max-microvolt = <1800000>;
    regulator-always-on;
    };

    --------------------------------------------

    Always hangs at starting kernel.

    Thank You and Regards

    Filippo

  • Hi Filippo,

    I would suggest to use a JTAG if there is provision. Otherwise would suggest to write a simple UART TX code in kernel(referring to uboot uart code) & add logs to debug.

  • There are many interfaces in am335x-bone-common.dtsi. Have you tried to trim some of them?

  • Hi Filippo,

    Adding to and emphasizing the comment Kemal posted in that he is saying that you need to really trim down the DTS since there could be something in the common dtsi that is hanging the kernel. Attached is a really minimal DTS, it is intended to provide enough support to get the kernel going but will not fully boot. Please compare the UART used to the one you are using. It was developed on a Beagle Bone Black. 

    Best  Regards,

    Schuyler

    /dts-v1/;
    
    #include "am33xx.dtsi"
    
    / {
          model = "TI AM3359 New Product";
          compatible = "ti,am3359-new-product", "ti,am33xx";
    
          memory@80000000 {
              device_type = "memory";
              reg = <0x80000000 0x10000000>; /* 256 MB */
          };
          chosen {
              stdout-path = &uart0;
          };
    };  
    &am33xx_pinmux {
    
        uart0_pins: pinmux_uart0_pins {
            pinctrl-single,pins = <
               AM33XX_IOPAD(0x970, PIN_INPUT_PULLUP | MUX_MODE0)    /* uart0_rxd.uart0_rxd */
               AM33XX_IOPAD(0x974, PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* uart0_txd.uart0_txd */
            >;
        };
    };
    &uart0 {
    	pinctrl-names = "default";
    	pinctrl-0 = <&uart0_pins>;
    	status = "okay";
    };
    

  • Hi,

    Since we have not heard back I am assuming that you were able to move past the boot issue. I will close the thread for now. 

    Best Regards,

    Schuyler