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.

AM437x eMMC boot

Hi,

We have a custom design based on TI-AM437x-EVM.

I am using ti-processor-sdk-linux-am437x-evm-02.00.01.07-Linux-x86-Install.bin as base source for my development.

By mistake we configured eMMC as same as AM437x-EVM design then we wired up eMMC to bootable pins.

This activity is done to verify eMMC-boot for Production version.

Default pinmuxing:


emmc_pins_default: emmc_pins_default {
pinctrl-single,pins = <
 0x00 (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad0.mmc1_dat0 */
 0x04 (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad1.mmc1_dat1 */
 0x08 (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad2.mmc1_dat2 */
 0x0c (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad3.mmc1_dat3 */
 0x10 (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad4.mmc1_dat4 */
 0x14 (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad5.mmc1_dat5 */
 0x18 (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad6.mmc1_dat6 */
 0x1c (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad7.mmc1_dat7 */
 0x80 (PIN_INPUT_PULLUP | MUX_MODE2) /* gpmc_csn1.mmc1_clk */
 0x84 (PIN_INPUT_PULLUP | MUX_MODE2) /* gpmc_csn2.mmc1_cmd */
>;
};

Pinmux after hardware rework to bootable pins:


emmc_pins_default: emmc_pins_default {
pinctrl-single,pins = <
0x20 (PIN_INPUT_PULLUP | MUX_MODE2) /* (B10) gpmc_ad8.mmc1_dat0 */
0x24 (PIN_INPUT_PULLUP | MUX_MODE2) /* (A10) gpmc_ad9.mmc1_dat1 */
0x28 (PIN_INPUT_PULLUP | MUX_MODE2) /* (F11) gpmc_ad10.mmc1_dat2 */
0x2c (PIN_INPUT_PULLUP | MUX_MODE2) /* (D11) gpmc_ad11.mmc1_dat3 */
0x80 (PIN_INPUT_PULLUP | MUX_MODE2) /* gpmc_csn1.mmc1_clk */
0x84 (PIN_INPUT_PULLUP | MUX_MODE2) /* gpmc_csn2.mmc1_cmd */
>;
};

unused_pins: unused_pins {
pinctrl-single,pins = <
0x00 (PIN_INPUT_PULLDOWN | MUX_MODE7)
0x04 (PIN_INPUT_PULLDOWN | MUX_MODE7)
0x08 (PIN_INPUT_PULLDOWN | MUX_MODE7)
0x0c (PIN_INPUT_PULLDOWN | MUX_MODE7)
0x10 (PIN_INPUT_PULLDOWN | MUX_MODE7)
0x14 (PIN_INPUT_PULLDOWN | MUX_MODE7)
0x18 (PIN_INPUT_PULLDOWN | MUX_MODE7)
0x1c (PIN_INPUT_PULLDOWN | MUX_MODE7)

....

>;

};

when we boot with eMMC-boot, We are get some access errors as mentioned below log

boot log:

....

[ 2.401056] mmc1: new high speed MMC card at address 0001
[ 2.407382] mmcblk1: mmc1:0001 MMC04G 3.60 GiB
[ 2.412394] mmcblk1boot0: mmc1:0001 MMC04G partition 1 16.0 MiB
[ 2.433452] mmcblk1boot1: mmc1:0001 MMC04G partition 2 16.0 MiB
[ 2.450605] mmcblk1: p1 p2

.....

[ 9.951324] EXT3-fs (mmcblk1p2): using internal journal
[ 9.959201] EXT3-fs (mmcblk1p2): recovery complete
[ 9.964099] EXT3-fs (mmcblk1p2): mounted filesystem with ordered data mode
[ 15.672560] FAT-fs (mmcblk1p1): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.

...

When we are trying to access emmc files we get below errors continously :


[ 32.124214] mmcblk1: error -84 transferring data, sector 1709109, nr 256, cmd response 0x900, card status 0xb00
[ 32.135635] mmc1: tried to reset card
[ 32.139448] mmcblk1: retrying using single block read
[ 33.703020] mmcblk1: error -84 transferring data, sector 1733285, nr 256, cmd response 0x900, card status 0xb00
[ 33.713354] mmc1: tried to reset card
[ 33.717078] mmcblk1: retrying using single block read
[ 34.342339] mmcblk1: error -84 transferring data, sector 1678525, nr 256, cmd response 0x900, card status 0xb00
[ 34.353376] mmc1: tried to reset card
[ 34.357148] mmcblk1: retrying using single block read
[ 35.357600] mmcblk1: error -84 transferring data, sector 2488949, nr 256, cmd response 0x900, card status 0xb00
[ 35.367877] mmc1: tried to reset card
[ 35.371622] mmcblk1: retrying using single block read
[ 36.627173] mmcblk1: error -84 transferring data, sector 1747205, nr 256, cmd response 0x900, card status 0xb00
[ 36.637487] mmc1: tried to reset card
[ 36.641238] mmcblk1: retrying using single block read
[ 52.395642] mmcblk1: error -84 transferring data, sector 1816661, nr 184, cmd response 0x900, card status 0xb00
[ 52.406984] mmc1: tried to reset card
[ 52.410784] mmcblk1: retrying using single block read
[ 55.812295] mmcblk1: error -84 transferring data, sector 2490461, nr 176, cmd response 0x900, card status 0xb00
[ 55.823309] mmc1: tried to reset card
[ 55.827068] mmcblk1: retrying using single block read
[ 87.540630] mmcblk1: error -84 transferring data, sector 1089181, nr 144, cmd response 0x900, card status 0xb00
[ 87.559613] mmc1: tried to reset card
[ 87.563607] mmcblk1: retrying using single block read
root@am437x-pdi:~#

Another issue is when we are trying to dump mmc1 registers we get following errors from devmem2.

 

root@am437x-pdi:~# devmem2 0x481d8240
/dev/mem opened.[ 547.318846] Unhandled fault: external abort on non-linefetch (0x1018) at 0xb6f32240
[ 547.327761] pgd = e7204000
[ 547.330481] [b6f32240] *pgd=a6fe4831, *pte=481d8303, *ppte=481d8a33
[ 547.336830] ------------[ cut here ]------------
[ 547.341499] WARNING: CPU: 0 PID: 1061 at drivers/bus/omap_l3_noc.c:147 l3_interrupt_handler+0x21c/0x348()
[ 547.351113] 44000000.ocp:L3 Custom Error: MASTER M2 (64-bit) TARGET L4_PER_0 (Read): Data Access in User mode during Functional access
[ 547.363249] Modules linked in: ipv6 cryptodev(O) rpmsg_pru wl18xx(O) wlcore(O) mac80211(O) ti_am335x_adc kfifo_buf cfg80211(O) industrialio virtio_rpmsg_bus evdev joydev snd_soc_simple_card omapdrm_pvr(O) pm33xx pruss_remoteproc leds_gpio wlcore_sdio(O) compat(O) snd_soc_tlv320aic3x pixcir_i2c_ts omap_rng rng_core ti_am335x_tsc ti_am335x_tscadc omap_wdt rtc_omap
[ 547.395708] CPU: 0 PID: 1061 Comm: devmem2 Tainted: G W O 4.1.13-g8dc6617 #6
[ 547.403746] Hardware name: am437xevm
[ 547.407336] Backtrace:
[ 547.409828] [<c0012b78>] (dump_backtrace) from [<c0012d98>] (show_stack+0x18/0x1c)
[ 547.417429] r7:c087d528 r6:00000093 r5:00000009 r4:00000000
[ 547.423168] [<c0012d80>] (show_stack) from [<c06c369c>] (dump_stack+0x20/0x28)
[ 547.430444] [<c06c367c>] (dump_stack) from [<c0039e94>] (warn_slowpath_common+0x7c/0xb4)
[ 547.438580] [<c0039e18>] (warn_slowpath_common) from [<c0039f04>] (warn_slowpath_fmt+0x38/0x40)
[ 547.447316] r8:c087d600 r7:00000002 r6:ee8e7610 r5:c087d454 r4:c087d4f8
[ 547.454099] [<c0039ed0>] (warn_slowpath_fmt) from [<c0314044>] (l3_interrupt_handler+0x21c/0x348)
[ 547.463009] r3:ee8e7400 r2:c087d4f8
[ 547.466613] r4:80080003
[ 547.469180] [<c0313e28>] (l3_interrupt_handler) from [<c006c6d4>] (handle_irq_event_percpu+0x7c/0x148)
[ 547.478527] r10:c09a671b r9:ee8e2840 r8:00000013 r7:00000000 r6:00000000 r5:ee8e7980
[ 547.486432] r4:ee8e7980
[ 547.488992] [<c006c658>] (handle_irq_event_percpu) from [<c006c808>] (handle_irq_event+0x68/0x90)
[ 547.497902] r10:bed9eb24 r9:ee876000 r8:ee808000 r7:00000001 r6:00000000 r5:ee8e7980
[ 547.505808] r4:ee8e2840
[ 547.508370] [<c006c7a0>] (handle_irq_event) from [<c006f1a0>] (handle_fasteoi_irq+0xb8/0x1ec)
[ 547.516931] r5:c0964000 r4:ee8e2840
[ 547.520547] [<c006f0e8>] (handle_fasteoi_irq) from [<c006bdfc>] (generic_handle_irq+0x30/0x44)
[ 547.529194] r5:c09788dc r4:00000013
[ 547.532809] [<c006bdcc>] (generic_handle_irq) from [<c006c05c>] (__handle_domain_irq+0x50/0xb0)
[ 547.541544] r5:c09788dc r4:00000013
[ 547.545158] [<c006c00c>] (__handle_domain_irq) from [<c00094b4>] (gic_handle_irq+0x28/0x60)
[ 547.553545] r9:ee876000 r8:00000000 r7:fa240100 r6:c095e48c r5:ee877f48 r4:fa24010c
[ 547.561377] [<c000948c>] (gic_handle_irq) from [<c06c8cc0>] (__irq_svc+0x40/0x74)
[ 547.568894] Exception stack(0xee877f48 to 0xee877f90)
[ 547.573973] 7f40: ee877fb0 00000001 00000000 600b0010 ee876000 00000000
[ 547.582193] 7f60: ee877fb0 10c5387d 00000000 ee876000 bed9eb24 ee877fac ee877fb0 ee877f90
[ 547.590410] 7f80: c000f92c c00127e0 600b0113 ffffffff
[ 547.595481] r7:ee877f7c r6:ffffffff r5:600b0113 r4:c00127e0
[ 547.601209] [<c0012790>] (do_work_pending) from [<c000f92c>] (work_pending+0xc/0x20)
[ 547.608985] r7:10c5387d r6:ffffffff r5:600b0010 r4:00010854
[ 547.614703] ---[ end trace 26203a2591a69ed7 ]---

Memory mapped at address 0xb6f32000.
Bus error
root@am437x-pdi:~#

Due to which we helpless to debug the issue further, please let us know if you have any suggestions regarding this.

Please reply to us ASAP.

Thanks & Regards

Sadasivappa

 

  • Hi,

    One possible reason for this behavior is the wiring you have used to change the eMMC pins. Another possible reason could be that you don't have all 8 data lines from the eMMC connected and the kernel driver trying to access eMMC over the 8-bit interface.
  • Hi,

    Thanks for your quick reply.

    Hardware wiring is perfect and the kernel is configured for 4-bit access.

    We are not getting this issue when we are flashing to eMMC from SD on SD-boot mode. More over eMMC boots up completely..

    Is anything that we are missing?

    Thanks & Regards
    Sadasivappa
  • I will ask the software team for additional comments.
  • Hi,

    The following message:
    /dev/mem opened.[ 547.318846] Unhandled fault: external abort on non-linefetch (0x1018) at 0xb6f32240

    Usually indicates that you're trying to read/write to a location without any clock enabled... Could you share your &mmcX node?

    Do you have the vmmc-supply & ti,non-removable; specified?

    Best Regards,
    Yordan
  • Hi,

    We did measure the timings. I see the clock signaling is good, we are able to boot access the eMMC with above mentioned errors.

    below is the node:

    /* eMMC sits on mmc2 */ (MMC interface noted as MMC1 MMC2 MMC3)
    &mmc2 {

    status = "okay";
    vmmc-supply = <&evm_v3_3d>;
    bus-width = <4>;
    pinctrl-names = "default", "sleep";
    pinctrl-0 = <&emmc_pins_default>;
    pinctrl-1 = <&emmc_pins_sleep>;
    /* ti,needs-special-hs-handling; */ (if enable MMC2 failed to load)
    cap-mmc-highspeed;
    ti,non-removable;
    };

    Let me know if you need any further details.

    Thanks & Regards
    Sadasivappa