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.

Linux/AM5728: IPU firmware load fails

Part Number: AM5728
Other Parts Discussed in Thread: BEAGLEBOARD-X15,

Tool/software: Linux

Hi - when I try loading a pdk_am57xx_1_0_10 example project (built into packages/MyExampleProjects using the pdkProjectCreate.sh script), I'm getting the error below posted on the Linux A15 side:

[ 4765.421123] ------------[ cut here ]------------
[ 4765.425778] WARNING: CPU: 0 PID: 0 at drivers/bus/omap_l3_noc.c:147 l3_interrupt_handler+0x25c/0x36c
[ 4765.434951] 44000000.ocp:L3 Custom Error: MASTER IPU2 TARGET L4_PER1_P3 (Idle): Data Access in User mode during Functional access
[ 4765.446650] Modules linked in: sha512_generic sha512_arm sha256_generic sha1_generic sha1_arm_neon sha1_arm md5 cbc xfrm_user xfrm4_tunnel ipcomp xfrm_ipcomp esp4 ah4 af_key xfrm_algo bluetooth bc_example(O) xhci_plat_hcd xhci_hcd dwc3 udc_core pru_rproc pruss_intc rpmsg_proto rpmsg_rpc pruss ahci_platform libahci_platform libahci libata scsi_mod snd_soc_simple_card snd_soc_simple_card_utils snd_soc_omap_hdmi_audio omap_sham snd_soc_tlv320aic3x pvrsrvkm(O) omap_aes_driver omap_wdt pruss_soc_bus rtc_ds1307 dwc3_omap rtc_palmas ti_vpe rtc_omap ti_sc ti_csc ti_vpdma extcon_palmas extcon_core omap_des des_generic crypto_engine omap_remoteproc virtio_rpmsg_bus rpmsg_core remoteproc sch_fq_codel uio_module_drv(O) uio ftdi_sio usbserial usbcore usb_common gdbserverproxy(O) cryptodev(O) cmemk(O)
[ 4765.517291] CPU: 0 PID: 0 Comm: swapper/0 Tainted: G W O 4.9.69-g9ce43c71ae #1
[ 4765.525503] Hardware name: Generic DRA74X (Flattened Device Tree)
[ 4765.531620] Backtrace:
[ 4765.534093] [<c020b2bc>] (dump_backtrace) from [<c020b578>] (show_stack+0x18/0x1c)
[ 4765.541697] r7:00000009 r6:600b0193 r5:00000000 r4:c1022668
[ 4765.547384] [<c020b560>] (show_stack) from [<c04ce720>] (dump_stack+0x8c/0xa0)
[ 4765.554641] [<c04ce694>] (dump_stack) from [<c022e3ec>] (__warn+0xec/0x104)
[ 4765.561633] r7:00000009 r6:c0bc2f08 r5:00000000 r4:c1001d10
[ 4765.567318] [<c022e300>] (__warn) from [<c022e444>] (warn_slowpath_fmt+0x40/0x48)
[ 4765.574836] r9:00000006 r8:eea1c6d0 r7:c0bc32a0 r6:00000000 r5:c0bc2e34 r4:c0bc2ed8
[ 4765.582616] [<c022e408>] (warn_slowpath_fmt) from [<c04fe560>] (l3_interrupt_handler+0x25c/0x36c)
[ 4765.591524] r3:eea1c540 r2:c0bc2ed8
[ 4765.595112] r4:80080003
[ 4765.597659] [<c04fe304>] (l3_interrupt_handler) from [<c027fd6c>] (__handle_irq_event_percpu+0xb4/0x138)
[ 4765.607181] r10:c104dfaf r9:eea1a300 r8:00000017 r7:c1001e34 r6:00000000 r5:eea1a300
[ 4765.615041] r4:eea1ca40
[ 4765.617587] [<c027fcb8>] (__handle_irq_event_percpu) from [<c027fe14>] (handle_irq_event_percpu+0x24/0x60)
[ 4765.627283] r10:c10030ac r9:c1000000 r8:ee808000 r7:00000000 r6:c1008bf4 r5:eea1a300
[ 4765.635145] r4:eea1a300
[ 4765.637690] [<c027fdf0>] (handle_irq_event_percpu) from [<c027fe90>] (handle_irq_event+0x40/0x64)
[ 4765.646600] r5:eea1a360 r4:eea1a300
[ 4765.650194] [<c027fe50>] (handle_irq_event) from [<c0283540>] (handle_fasteoi_irq+0xc0/0x190)
[ 4765.658755] r7:00000000 r6:c1008bf4 r5:eea1a360 r4:eea1a300
[ 4765.664443] [<c0283480>] (handle_fasteoi_irq) from [<c027efa8>] (generic_handle_irq+0x2c/0x3c)
[ 4765.673091] r7:00000000 r6:00000000 r5:00000017 r4:c0e5cde0
[ 4765.678776] [<c027ef7c>] (generic_handle_irq) from [<c027f51c>] (__handle_domain_irq+0x64/0xbc)
[ 4765.687515] [<c027f4b8>] (__handle_domain_irq) from [<c02014a0>] (gic_handle_irq+0x40/0x7c)
[ 4765.695903] r9:c1000000 r8:fa213000 r7:fa212000 r6:c1001ef0 r5:fa21200c r4:c1003424
[ 4765.703681] [<c0201460>] (gic_handle_irq) from [<c020c038>] (__irq_svc+0x58/0x8c)
[ 4765.711193] Exception stack(0xc1001ef0 to 0xc1001f38)
[ 4765.716265] 1ee0: 00000001 00000000 fe600000 00000000
[ 4765.724479] 1f00: c1000000 c100303c 00000001 c10030a4 00000000 00000000 c10030ac c1001f4c
[ 4765.732691] 1f20: c1001f2c c1001f40 c0220e74 c0208714 600b0013 ffffffff
[ 4765.739335] r9:c1000000 r8:00000000 r7:c1001f24 r6:ffffffff r5:600b0013 r4:c0208714
[ 4765.747116] [<c02086ec>] (arch_cpu_idle) from [<c08d6934>] (default_idle_call+0x28/0x34)
[ 4765.755245] [<c08d690c>] (default_idle_call) from [<c026eb9c>] (cpu_startup_entry+0x1b4/0x230)
[ 4765.763899] [<c026e9e8>] (cpu_startup_entry) from [<c08d1c60>] (rest_init+0x8c/0x90)
[ 4765.771672] r7:ffffffff
[ 4765.774222] [<c08d1bd4>] (rest_init) from [<c0e00d80>] (start_kernel+0x3e0/0x3ec)
[ 4765.781734] r5:00000000 r4:c105104c
[ 4765.785329] [<c0e009a0>] (start_kernel) from [<80008090>] (0x80008090)
[ 4765.791881] ---[ end trace adeeca7fb9773f53 ]---

Specifically, the I2C basic example and the UART basic example from the pdk_am57xx_1_0_10 packages are the ones giving this error. 

I read from another E2E thread that it may be related to the resources requested already being enabled through the device tree source on the linux side.  I'm trying to figure out which I2C bus is being used and which UART is being used but I can't determine which I2C bus or which UART is being used in order to ensure it's being disabled in the board device tree.

Any ideas on this and if there are any other possible causes that I should be checking would be a great help!

Thanks,

Dermot

  • Hi, Dermot,

    Usually, the PDK examples are for RTOS environment only though it can be used in Linux/RTOS setup but not taken as is. It needs to build for IPC environment such as including resource table, etc.

    The L3_NoC error in your logs indicates that there is a violation on "Data Access in User mode during Functional access". Likely if the pdk example is not built with resource table or a conflict with the peripheral usage.

    For info on resource table, please refer to Resource Table User's Guide, processors.wiki.ti.com/.../IPC_Resource_customTable, if you haven't read it.

    RTOS application does board_init to initialize peripherals used in the application. However, Linux by default will also initialize peripherals during kernel boot up. It can't be both doing the initialization.

    Rex
  • Thanks Rex,

    Actually, that's exactly what I'm attempting to do. I'm working through the document at this link:

    processors.wiki.ti.com/.../Linux_IPC_on_AM57xx

    That document gives the following instructions:

    1. Build and run the out-of-box UART M4 example on the EVM using Code Composer Studio (CCS)
    2. Build and run the ex02_messageQ example from the IPC software bundle and turn it into a CCS project. Build it and modify the Linux startup code to use this new image. This is just a sanity check step to make sure we can build the IPC examples in CCS and have them run at boot up on the EVM.
    3. In CCS, make a clone of the out-of-box UART M4 example and rename it to denote it's the IPC version of the example. Then using the ex02_messageq example as a reference, add in the IPC pieces to the UART example code. Build from CCS then add it to the Linux firmware folder.

    So I'm attempting to complete the first step by running the UART M4 example on my board using CCS. One thing I should mention is that my board is a BeagleBoard X15 which I believe the EVM is based upon.

    I see the board_init being done by the RTOS app using boardCfg and I'm attempting to find out what BOARD_INIT_PINMUX_CONFIG is attempting to do so that I can make sure there's no conflict on the Linux side (maybe disable a UART, etc. in the device tree) but I can't find where this is defined.

    boardCfg = BOARD_INIT_PINMUX_CONFIG |
    BOARD_INIT_MODULE_CLOCK |
    BOARD_INIT_UART_STDIO;

    Hopefully that makes sense.

    Thanks,
    Dermot
  • Hi, Dermot,

    For step 1, it is purely RTOS environment and Linux should not be run on ARM. I'll have a DSP engineer to help you with what you try to do.

    When Linux boot up, do you see the following logs from u-boot? What matter is the Board name. Under the same model, we have different type of boards.

    CPU : DRA752-GP ES2.0
    Model: TI AM5728 BeagleBoard-X15
    Board: AM572x EVM REV A.30

    Rex
  • Hi Rex,

    I appreciate all your help. Here's what u-boot posts for my board:

    CPU : DRA752-GP ES2.0
    Model: TI AM5728 BeagleBoard-X15 rev B1
    Board: BeagleBoard X15 REV C.00

    Thanks,
    Dermot
  • Hi Dermot,

    As you've probably already seen here:

    You will need to disable the uart3 instance in the Linux device tree. This definition can be found at /ti-processor-sdk-linux-am57xx-evm-04.03.00.05/board-support/linux-4.9.69+gitAUTOINC+9ce43c71ae-g9ce43c71ae/arch/arm/boot/dts/am57xx-beagle-x15-common.dtsi

    You will need to rebuild the binaries after making these changes. This can be done from the top-level by doing "make linux" in ~/ti-processor-sdk-linux-am57xx-evm-04.03.00.05/ or by following the steps here:

  • Thanks Sahin & Rex,

    Yes - I read further ahead in the documentation and disabled uart3 in the device tree on the Linux side.

    I can see that working during the boot process, where the console output stops once the kernel starts booting. I decided to try and work through to the end of the document and get everything set up for inter-processor communication before attempting to load any firmware images using remoteproc.

    Thanks again for your help,
    Dermot