Hi,
We have a custom board based on imx6sx.
We have two revisions for a custom board.
Revision#1: Have 1GB RAM ==> Working fine with boot (Memory part: MT41K256M16TW-107 XIT:P)
Revision#2: Have 512MB RAM ==> Stuck in kernel loading.(Memory part: MT41K128M16JT-107 IT:K TR)
Both revisions have same thing except the RAM part number as mentioned above.
In revision#2, we are facing below issue:
================
U-Boot 2016.03-nxp/imx_v2016.03_4.1.15_2.0.0_ga+g7a2ba64 (Jun 26 2020 - 16:12:40 +0530)
CPU: Freescale i.MX6SX rev1.4 at 792MHz
CPU: Automotive temperature grade (-40C to 125C) at 47C
Reset cause: POR
DEBUG: Board: MX6SX SABRE SDB
I2C: ready
DEBUG1 DRAM: 512 MiB
PMIC: PFUZE100 ID=0x10
MMC: FSL_SDHC: 0, FSL_SDHC: 1, FSL_SDHC: 2
*** Warning - bad CRC, using default environment
Display: Hannstar-XGA (1024x768)
Video: 1024x768x18
In: serial
Out: serial
Err: serial
switch to partitions #0, OK
mmc2(part 0) is current device
Net: FEC [PRIME]
Error: FEC address not set.
Normal Boot
Hit any key to stop autoboot: 0
reading m4_pzt_application.bin
29632 bytes read in 18 ms (1.6 MiB/s)
## Starting auxiliary core at 0x007F8000 ...
switch to partitions #0, OK
mmc2(part 0) is current device
switch to partitions #0, OK
mmc2(part 0) is current device
reading boot.scr
** Unable to read file boot.scr **
reading zImage
5582288 bytes read in 158 ms (33.7 MiB/s)
Booting from mmc ...
reading imx6sx-sdb-m4.dtb
38271 bytes read in 18 ms (2 MiB/s)
Kernel image @ 0x80800000 [ 0x000000 - 0x552dd0 ]
## Flattened Device Tree blob at 83000000
Booting using the fdt blob at 0x83000000
Using Device Tree in place at 83000000, end 8300c57e
switch to ldo_bypass mode!
## else Transferring control to Linux (at address 80800000)...
DEBUG: =====Starting kernel ...
DEBUG: Before bootstage_mark_name
DEBUG: after bootstage_mark_name
DEBUG: Before cleanup_before_linux
DEBUG: After cleanup_before_linux
==DEBUG: Before kernel_entry
Uncompressing Linux... done, booting the kernel.DEBUG
================
We have changed below things:
1) u-boot DCD values as per NXP register Xls in imximage.cfg file. I also performed calibration and updated values accordingly.
2) kernel dts file for memory
memory {
reg = <0x80000000 0x20000000>;
linux,usable-memory = <0x80000000 0x1CD00000>;
};
Do you have an idea for how to solve this?
Solved! Go to Solution.
Hi Rakesh
if you already run ddr test for that board and updated dcd, next may be
check board power supplies: voltage values, ripples as described in
Hardware Development Guide for i.MX 6SoloX Applications Processors - IMX6SXHDG
If this is just one board, issue may be caused by poor soldering. One can try to resolder chip.
Try nxp uboot and linux from nxp source.codeaurora.org/external/imx/ repository
Best regards
igor
-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------
That may be some changes for HW poor soldering. But in this case.. Uboot loading also should not work.. Right ?
This is only stucking while loading kernel.
Waiting for your reply.
can you confirm that for revision#2 you separately run ddr test,
updated dcd header and not used dcd header from revision#1.
Best regards
igor
one can try to decrease cma size in dts:
imx6sx.dtsi\dts\boot\arm\arch - linux-imx - i.MX Linux kernel
Best regards
igor
I already have decreased CMA from 14000000 to 14000000/2.
I found the issue: It is because of rpmsg driver static address.
diff --git a/arch/arm/mach-imx/imx_rpmsg.c b/arch/arm/mach-imx/imx_rpmsg.c
index 06a846b..9b58965 100644
--- a/arch/arm/mach-imx/imx_rpmsg.c
+++ b/arch/arm/mach-imx/imx_rpmsg.c
@@ -300,15 +300,15 @@ static int imx_rpmsg_probe(struct platform_device *pdev)
rpdev->vring[1] = res->start + size;
} else {
/* hardcodes here now. */
- rpdev->vring[0] = 0xBFFF0000;
- rpdev->vring[1] = 0xBFFF8000;
+ rpdev->vring[0] = 0x9FFF0000;
+ rpdev->vring[1] = 0x9FFF8000;
}
}
} else {
break;
}
Now, it is not hanging up..
But again, rpmsg is not loading well.
Revision#1:
virtio_rpmsg_bus virtio0: rpmsg host is online
virtio_rpmsg_bus virtio0: creating channel rpmsg-openamp-demo-channel addr 0x0
imx rpmsg driver is registered.
Revision#2:
virtio_rpmsg_bus virtio0: rpmsg host is online
imx rpmsg driver is registered.
so,
"modprobe imx_rpmsg_tty" does not generating /dev/ttyRPMSG node.
Do you have an idea about this?
While debugging, I observed this thing:
Revision#1 boot logs:
Virtual kernel memory layout:
vector : 0xffff0000 - 0xffff1000 ( 4 kB)
fixmap : 0xffc00000 - 0xfff00000 (3072 kB)
vmalloc : 0xbd800000 - 0xff000000 (1048 MB)
lowmem : 0x80000000 - 0xbd000000 ( 976 MB)
pkmap : 0x7fe00000 - 0x80000000 ( 2 MB)
modules : 0x7f000000 - 0x7fe00000 ( 14 MB)
.text : 0x80008000 - 0x80b017c0 (11238 kB)
.init : 0x80b02000 - 0x80b70000 ( 440 kB)
.data : 0x80b70000 - 0x80bdeb20 ( 443 kB)
.bss : 0x80be1000 - 0x80c517c0 ( 450 kB)
Revision#2 boot logs:
Virtual kernel memory layout:
vector : 0xffff0000 - 0xffff1000 ( 4 kB)
fixmap : 0xffc00000 - 0xfff00000 (3072 kB)
vmalloc : 0x9d000000 - 0xff000000 (1568 MB)
lowmem : 0x80000000 - 0x9cd00000 ( 461 MB)
pkmap : 0x7fe00000 - 0x80000000 ( 2 MB)
modules : 0x7f000000 - 0x7fe00000 ( 14 MB)
.text : 0x80008000 - 0x80b017c0 (11238 kB)
.init : 0x80b02000 - 0x80b70000 ( 440 kB)
.data : 0x80b70000 - 0x80bdeb20 ( 443 kB)
.bss : 0x80be1000 - 0x80c517c0 ( 450 kB)
Do you have idea for how to resolve this?
Hi Rakesh
for rpmsg remapping one can look below:
Best regards
igor