Other Parts Discussed in Thread: TPS51200
Hi All,
First time posting on the forum so I'll try my best to make this a good post.
We have been working with the TI AM335x-ICEV2 board for some time now to develop our embedded linux Application and we
received our own custom board design. After a lot of debugging and reading, we were able to make U-Boot load properly and then
we went on to load the kernel with a very basic FDT.
Device: AM3359BZCZ
Memory: MT41J128M16JT
We encountered an issue when we tried to load our Filesystem. We tried loading both Arago and Debian (Which both worked on the ICEV2 board)
and we started having weird issues. The most recurrent one is the repeated SEGV in systemd initialisation scripts (generators) when using Debian
and a simple "Caught <SEGV>, dumped core as pid 65. Freezing execution." when loading Arago from the Base file system given in the TI Linux SDK 07.03.00.005.
We followed the complete Board Port (https://software-dl.ti.com/processor-sdk-linux/esd/docs/latest/linux/How_to_Guides_Board_Port.html) Sequence.
The first theory was that the FDT (.DTB) might be missing critical components, but even on the ICEV2 board I could reduce the am335x-icev2.dts to a simple
UART + MMC initialization and the distribution could still run without a scratch. I am far from a Linux expert and had to ramp-up a lot to understand U-Boot + Kernel
but with Distribution and Systemd, I have reached a point where I have no clue what to do next.
From similar posts (https://e2e.ti.com/support/processors-group/processors/f/processors-forum/316533/linux-boot-freezing-on-custom-board) I am suspecting a hardware issue
although I did verify that the PMIC supplied proper voltages even if we are not actively controlling it.
Could it be a DDR3 issue? Is there any test I could run to verify the integrity and sturdiness of my DDR3? It does run the SPL + Uboot + Kernel without any issues, so my understanding is that
the DDR3 is running properly. (Could even read/write the whole address range over JTAG and CCS).
Here is a log of my Kernel Boot + Distro Boot.
Starting kernel ... [ 0.000000] Booting Linux on physical CPU 0x0 [ 0.000000] Linux version 5.4.106-g023faefa70 (oe-user@oe-host) (gcc version 9.2.1 20191025 (GNU T oolchain for the A-profile Architecture 9.2-2019.12 (arm-9.10))) #1 PREEMPT Mon May 24 09:04:10 UTC 2 021 [ 0.000000] CPU: ARMv7 Processor [413fc082] revision 2 (ARMv7), cr=10c5387d [ 0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache [ 0.000000] OF: fdt: Machine model: AM335x HELLO [ 0.000000] Memory policy: Data cache writeback [ 0.000000] efi: Getting EFI parameters from FDT: [ 0.000000] efi: UEFI not found. [ 0.000000] cma: Reserved 48 MiB at 0x8a800000 [ 0.000000] CPU: All CPU(s) started in SVC mode. [ 0.000000] AM335X ES2.1 (sgx neon) [ 0.000000] Built 1 zonelists, mobility grouping on. Total pages: 64706 [ 0.000000] Kernel command line: console=ttyO1,115200n8 root=PARTUUID=d869d71e-01 rw rootfstype=ex t4 rootwait [ 0.000000] Dentry cache hash table entries: 32768 (order: 5, 131072 bytes, linear) [ 0.000000] Inode-cache hash table entries: 16384 (order: 4, 65536 bytes, linear) [ 0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off [ 0.000000] Memory: 194208K/261120K available (9216K kernel code, 295K rwdata, 3092K rodata, 1024K init, 254K bss, 17760K reserved, 49152K cma-reserved, 0K highmem) [ 0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1 [ 0.000000] rcu: Preemptible hierarchical RCU implementation. [ 0.000000] Tasks RCU enabled. [ 0.000000] rcu: RCU calculated value of scheduler-enlistment delay is 10 jiffies. [ 0.000000] NR_IRQS: 16, nr_irqs: 16, preallocated irqs: 16 [ 0.000000] IRQ: Found an INTC at 0x(ptrval) (revision 5.0) with 128 interrupts [ 0.000000] random: get_random_bytes called from start_kernel+0x2b4/0x470 with crng_init=0 [ 0.000000] OMAP clockevent source: timer2 at 24000000 Hz [ 0.000020] sched_clock: 32 bits at 24MHz, resolution 41ns, wraps every 89478484971ns [ 0.000047] clocksource: timer1: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 79635851949 ns [ 0.000060] OMAP clocksource: timer1 at 24000000 Hz [ 0.000378] timer_probe: no matching timers found [ 0.000606] Console: colour dummy device 80x30 [ 0.000647] WARNING: Your 'console=ttyO1' has been replaced by 'ttyS1' [ 0.000655] This ensures that you still see kernel messages. Please [ 0.000661] update your kernel commandline. [ 0.000719] Calibrating delay loop... 597.60 BogoMIPS (lpj=2988032) [ 0.058759] pid_max: default: 32768 minimum: 301 [ 0.059056] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes, linear) [ 0.059076] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes, linear) [ 0.060207] CPU: Testing write buffer coherency: ok [ 0.060288] CPU0: Spectre v2: using BPIALL workaround [ 0.061334] Setting up static identity map for 0x80100000 - 0x80100060 [ 0.061527] rcu: Hierarchical SRCU implementation. [ 0.061634] EFI services will not be available. [ 0.062091] devtmpfs: initialized [ 0.075689] VFP support v0.3: implementor 41 architecture 3 part 30 variant c rev 3 [ 0.076187] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 1911260446 2750000 ns [ 0.076219] futex hash table entries: 256 (order: -1, 3072 bytes, linear) [ 0.081151] pinctrl core: initialized pinctrl subsystem [ 0.082137] DMI not present or invalid. [ 0.082723] NET: Registered protocol family 16 [ 0.085759] DMA: preallocated 256 KiB pool for atomic coherent allocations [ 0.114183] l3-aon-clkctrl:0000:0: failed to disable [ 0.116761] cpuidle: using governor ladder [ 0.116807] cpuidle: using governor menu [ 0.139831] No ATAGs? [ 0.139845] hw-breakpoint: debug architecture 0x4 unsupported. [ 0.161882] debugfs: Directory '49000000.edma' with parent 'dmaengine' already present! [ 0.161926] edma 49000000.edma: TI EDMA DMA engine driver [ 0.164737] iommu: Default domain type: Translated [ 0.167500] SCSI subsystem initialized [ 0.168115] mc: Linux media interface: v0.10 [ 0.168169] videodev: Linux video capture interface: v2.00 [ 0.168289] pps_core: LinuxPPS API ver. 1 registered [ 0.168300] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.i t> [ 0.168328] PTP clock support registered [ 0.168375] EDAC MC: Ver: 3.0.0 [ 0.170291] Advanced Linux Sound Architecture Driver Initialized. [ 0.171833] clocksource: Switched to clocksource timer1 [ 0.182815] thermal_sys: Registered thermal governor 'fair_share' [ 0.182826] thermal_sys: Registered thermal governor 'bang_bang' [ 0.182847] thermal_sys: Registered thermal governor 'step_wise' [ 0.182856] thermal_sys: Registered thermal governor 'user_space' [ 0.182864] thermal_sys: Registered thermal governor 'power_allocator' [ 0.183528] NET: Registered protocol family 2 [ 0.184495] tcp_listen_portaddr_hash hash table entries: 512 (order: 0, 4096 bytes, linear) [ 0.184536] TCP established hash table entries: 2048 (order: 1, 8192 bytes, linear) [ 0.184575] TCP bind hash table entries: 2048 (order: 1, 8192 bytes, linear) [ 0.184610] TCP: Hash tables configured (established 2048 bind 2048) [ 0.184741] UDP hash table entries: 256 (order: 0, 4096 bytes, linear) [ 0.184767] UDP-Lite hash table entries: 256 (order: 0, 4096 bytes, linear) [ 0.184969] NET: Registered protocol family 1 [ 0.185700] RPC: Registered named UNIX socket transport module. [ 0.185718] RPC: Registered udp transport module. [ 0.185726] RPC: Registered tcp transport module. [ 0.185734] RPC: Registered tcp NFSv4.1 backchannel transport module. [ 0.185753] PCI: CLS 0 bytes, default 64 [ 0.186903] hw perfevents: enabled with armv7_cortex_a8 PMU driver, 5 counters available [ 0.188527] Initialise system trusted keyrings [ 0.188918] workingset: timestamp_bits=14 max_order=16 bucket_order=2 [ 0.196030] squashfs: version 4.0 (2009/01/31) Phillip Lougher [ 0.197037] NFS: Registering the id_resolver key type [ 0.197090] Key type id_resolver registered [ 0.197100] Key type id_legacy registered [ 0.197159] ntfs: driver 2.1.32 [Flags: R/O]. [ 0.198081] Key type asymmetric registered [ 0.198101] Asymmetric key parser 'x509' registered [ 0.198168] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 244) [ 0.198182] io scheduler mq-deadline registered [ 0.198192] io scheduler kyber registered [ 0.205293] OMAP GPIO hardware version 0.1 [ 0.247954] omap-mailbox 480c8000.mailbox: omap mailbox rev 0x400 [ 0.275645] pinctrl-single 44e10800.pinmux: 142 pins, size 568 [ 0.346474] Serial: 8250/16550 driver, 10 ports, IRQ sharing enabled [ 0.352501] 48022000.serial: ttyS1 at MMIO 0x48022000 (irq = 33, base_baud = 3000000) is a 8250 [ 0.964411] printk: console [ttyS1] enabled [ 0.972076] omap_rng 48310000.rng: Random Number Generator ver. 20 [ 0.982020] random: fast init done [ 0.985750] random: crng init done [ 1.008286] brd: module loaded [ 1.020696] loop: module loaded [ 1.030295] libphy: Fixed MDIO Bus: probed [ 1.038346] i2c /dev entries driver [ 1.046344] cpuidle: enable-method property 'ti,am3352' found operations [ 1.054166] sdhci: Secure Digital Host Controller Interface driver [ 1.060382] sdhci: Copyright(c) Pierre Ossman [ 1.093327] omap_hsmmc 47810000.mmc: RX DMA channel request failed [ 1.103449] sdhci-pltfm: SDHCI platform and OF driver helper [ 1.111222] ledtrig-cpu: registered to indicate activity on CPUs [ 1.122986] NET: Registered protocol family 10 [ 1.128582] Segment Routing with IPv6 [ 1.132505] sit: IPv6, IPv4 and MPLS over IPv4 tunneling driver [ 1.139331] NET: Registered protocol family 17 [ 1.144293] Key type dns_resolver registered [ 1.148737] omap_voltage_late_init: Voltage driver support not added [ 1.155949] Loading compiled-in X.509 certificates [ 1.176713] hctosys: unable to open rtc device (rtc0) [ 1.181944] mmc0: host does not support reading read-only switch, assuming write-enable [ 1.190810] ALSA device list: [ 1.193986] No soundcards found. [ 1.198177] mmc0: new high speed SDHC card at address e624 [ 1.204013] Waiting for root device PARTUUID=d869d71e-01... [ 1.210454] mmcblk0: mmc0:e624 SU32G 29.7 GiB [ 1.217278] mmcblk0: p1 [ 1.284382] EXT4-fs (mmcblk0p1): recovery complete [ 1.292810] EXT4-fs (mmcblk0p1): mounted filesystem with ordered data mode. Opts: (null) [ 1.301041] VFS: Mounted root (ext4 filesystem) on device 179:1. [ 1.309354] devtmpfs: mounted [ 1.314506] Freeing unused kernel memory: 1024K [ 1.319700] Run /sbin/init as init process [ 1.656618] systemd[1]: System time before build time, advancing clock. [ 1.713214] systemd[1]: systemd 244.5+ running in system mode. (+PAM -AUDIT -SELINUX +IMA -APPARMO R -SMACK +SYSVINIT +UTMP -LIBCRYPTSETUP -GCRYPT -GNUTLS +ACL +XZ -LZ4 -SECCOMP +BLKID -ELFUTILS +KMOD -IDN2 -IDN -PCRE2 default-hierarchy=hybrid) [ 1.735854] systemd[1]: Detected architecture arm. Welcome to Arago 2020.09! [ 1.783609] systemd[1]: Set hostname to <am335x-evm>. [ 1.801568] systemd[1]: Initializing machine ID from random generator. [ 3.147485] systemd[1]: Caught <SEGV>, dumped core as pid 65. [ 3.153741] systemd[1]: Freezing execution. [ 31.201943] vbat: disabling
Thank you kindly for your help and let me know if I can provide more information.
P.S. our custom board does have multiple peripherals, but I am trying to keep it to a simple UART + MMC for now and will integrate each peripherals when the system is stable.
Here is my .DTS
/* * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. */ /dts-v1/; #include "am33xx.dtsi" / { model = "AM335x HELLO"; compatible = "ti,am335x-hello", "ti,am33xx"; chosen { stdout-path = &uart3; tick-timer = &timer2; }; memory { device_type = "memory"; reg = <0x80000000 0x10000000>; /* 256 MB */ }; vbat: fixedregulator@0 { compatible = "regulator-fixed"; regulator-name = "vbat"; regulator-min-microvolt = <5000000>; regulator-max-microvolt = <5000000>; regulator-boot-on; }; vmmc: fixedregulator@1 { compatible = "regulator-fixed"; regulator-name = "vmmc"; regulator-min-microvolt = <3300000>; regulator-max-microvolt = <3300000>; regulator-always-on; regulator-boot-on; }; }; &am33xx_pinmux { mmc0_pins_default: mmc0_pins_default { pinctrl-single,pins = < AM33XX_PADCONF(AM335X_PIN_MMC0_DAT3, PIN_INPUT_PULLUP, MUX_MODE0) AM33XX_PADCONF(AM335X_PIN_MMC0_DAT2, PIN_INPUT_PULLUP, MUX_MODE0) AM33XX_PADCONF(AM335X_PIN_MMC0_DAT1, PIN_INPUT_PULLUP, MUX_MODE0) AM33XX_PADCONF(AM335X_PIN_MMC0_DAT0, PIN_INPUT_PULLUP, MUX_MODE0) AM33XX_PADCONF(AM335X_PIN_MMC0_CLK, PIN_INPUT_PULLUP, MUX_MODE0) AM33XX_PADCONF(AM335X_PIN_MMC0_CMD, PIN_INPUT_PULLUP, MUX_MODE0) >; }; uart1_pins: uart1_pins { pinctrl-single,pins = < 0x180 (PIN_INPUT_PULLUP | MUX_MODE0) /* uart1_rxd.uart1_rxd */ 0x184 (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* uart1_txd.uart1_txd */ >; }; }; &uart1 { pinctrl-names = "default"; pinctrl-0 = <&uart1_pins>; status = "okay"; }; &mmc1 { status = "okay"; vmmc-supply = <&vmmc>; bus-width = <4>; pinctrl-names = "default"; pinctrl-0 = <&mmc0_pins_default>; };