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/66AK2G12: Unable to set LPSC for peripherals used by DSP

Part Number: 66AK2G12
Other Parts Discussed in Thread: OMAP-L138,

Tool/software: Linux

Hello,

I am using Processor SDK 4.2.0.9 with CCSv7.3.0.  The various component versions are those that came with that release.

I have modified the MCASP example project to use the hardware configuration on my custom K2G board.  I merged this project with an IPC example so that I could get the DSP running at the same time as Linux, and it does do that.  The catch is that I must manually enable the LPSC in charge of the McASP.  My procedure goes something like this:

- Power up system, let Linux boot.
- Get audio clocks running and IIS routed around the board
- Launch target config and connect DSP
- Load DSP GEL, enable all PSC
- resume processor
- use mpmcl to reset, load, and run the DSP.

This works some of the time.  Sometimes the McASP gets stuck transmitting a single buffer (as though the processor has been halted), or I get an Event Combiner error saying that the event I have connected to the DSP through the CIC (DSP Event 64) is "unplugged".  Sometimes CCS just crashes when I try to connect the processor.  The event combiner error happens whenever I try to restart the program using mpmcl, i.e. if the program was running and I reset and reloaded it.

I encountered similar behavior when I was developing this project using the OMAP-L138.  That post is located here: https://e2e.ti.com/support/dsp/omap_applications_processors/f/42/t/612298?tisearch=e2e-sitesearch&keymatch=%20user:301823

How would I go about setting up the LPSC in Linux for the DSP to use?  I would like for Linux to do all of the chip level configuration.  I have:

- Enabled McASP0 in the device tree
- Added reserved slot ranges in the device tree (  ti,edma-reserved-slot-ranges = <24 2>, <128 48>;  )

Any ideas of where to look/what to do to make these two coexist on this platform?

Jeff

  • Hi Jeff,

    I suggest first to verify with CCS (no OS) that your DSP firmware is working as you intended.

    The approach for enabling PSC for 66AK2G12 upon linux bootup should be similar. Of course you should respect the 66AK2G12 clock structure (you can use the Clock Tree Tool for this: www.ti.com/.../clocktreetool). Then after loading the dsp firmware with mpmcl it should be able to operate with every peripheral that linux enabled, you shouldn't have to use CCS to enable anything manually.

    Maybe you have some dts setting worng. Can you attach your dts?

    Best Regards,
    Yordan
  • Yordan,

    I have verified its function without Linux running.  I have to leave the pinmux settings and SOC setup code in place for it to work by itself (as is expected).  If I leave this code in place, it breaks Linux when run side-by-side, also not surprising.  The function I am referring to is "configureAudio()" located in audio_evmInit.c.  It is hard, however, to set it up by itself because the ARM is in control of most of the PCB level configuration.  That said, I have made it work.  

    Attached are the DTS files.  Where lines are commented out, it can be assumed that I have tried both with and without the commented sections.

    /cfs-file/__key/communityserver-discussions-components-files/791/8508.K2G_5F00_DTS.zip

    As always, thank you for your help.

    Jeff

  • Hello Yordan,
    I was wondering if you have had a chance to look this over and if you have any new input.

    Jeff
  • Hi Jeff,

    I am very sorry for the delay. I've missed the e-mail notification.

    I had a look at your dts files and they are correct. Nothing suspicious there.
    I just have one suggestion to test. Can you add full mcasp configuration (as used in your dsp app) with the following definitions inserted in your keystone-k2g-evm.dts:
    assigned-clocks
    assigned-clock-parents
    op-mode // if applicable to your use case
    tdm-slots
    serial-dir
    tx-num-evt
    rx-num-evt

    This is to check if linux will fully configure your mcasp module on boot up and from then on you will let the dsp application to control it.

    Also I forgot to ask the bootlog, to see exactly what the Combiner error reports. Can you share it?

    Best Regards,
    Yordan
  • Yordan.

    I have confirmed that the configuration is working via the following process:

    1. Power on board with Linux
    2. Use Linux to configure board
    3. Use CCS debugger to do system reset
    4. Use GEL to release reset on DSP
    5. Use GEL to initialize SOC clocks
    6. Use CCS to load program
    7. Run program

    This is the same program that is loaded using mpmcl in Linux.

    Next, I tried this:

    1. Power on board with Linux
    2. Use Linux to configure board
    3. Use CCS and GEL to turn all LPSC on
    4. Reset dsp using mpmcl
    5. Load dsp using mpmcl
    6. Run program

    This resulted in no output.

    Then I added the following to my DTS:

    op-mode = <0>;
    tdm-slots=<2>;
    serial-dir = <
      2 2 2 2
      2 2 2 2
      1 1 1 1
      1 1 1 1 >;
    tx-num-evt = <1>;
    rx-num-evt = <1>;
    assigned-clocks = <&k2g_clks K2G_DEV_MCASP0 K2G_DEV_MCASP_VBUS_CLK>;
    assigned-clock-parents = <&k2g_clks K2G_DEV_MCASP0 K2G_DEV_MCASP_AUX_CLK_PARENT_SYS_OSCCLK>;

    and I followed the steps above with the same results.  Finally, I built the McASP driver into the Linux kernel, and followed the previous steps with zero results.  Even with the McASP driver built into the kernel, the LPSC is still showing that it is not enabled.

    For all three of these test cases, if I used the debugger to enable the PSCs and load the program, the system functions as it should.  It appears to only fail when being loaded with mpmcl.  

    The Event Combiner error is on the RTOS side of things, and so it only shows up on the DSP trace.  There is no new dmesg output when the error occurs.  This error only occurs if the program is re-loaded and re-started after a "successful" run (i.e. it makes past the McASP priming).  It looks like this:

    [t=0x00039b1a] ti.sysbios.family.c64p.EventCombiner: ERROR: line 229: E_unpluggedEvent: Event# 64 is unplugged
    ti.sysbios.family.c64p.EventCombiner: line 229: E_unpluggedEvent: Event# 64 is unplugged
    xdc.runtime.Error.raise: terminating execution
    [t=0x00044023] ti.sysbios.gates.GateMutex: ERROR: line 99: assertion failure: A_badContext: bad calling context. See GateMutex API doc for details.
    ti.sysbios.gates.GateMutex: line 99: assertion failure: A_badContext: bad calling context. See GateMutex API doc for details.
    xdc.runtime.Error.raise: terminating execution

    Event 64 is the CIC event I have the rx mux out event routed to.  The source where this is set is configMcasp_SocHwInfo.

    Thank you again for your help.

    Jeff

  • Another finding, though I have not done testing to see how reproducible it is.

    I started and ran the DSP application using CCS with Linux running and the following appeared on dmesg:

    [ 1127.828312] irq 47: nobody cared (try booting with the "irqpoll" option)     
    [ 1127.835343] CPU: 0 PID: 0 Comm: swapper/0 Tainted: G           O    4.9.59-g8
    [ 1127.844083] Hardware name: Keystone                                          
    [ 1127.847733] Backtrace:                                                       
    [ 1127.850324] [<c020b220>] (dump_backtrace) from [<c020b4dc>] (show_stack+0x18)
    [ 1127.858251]  r7:0000002f r6:200e0193 r5:00000000 r4:c1017728                 
    [ 1127.864182] [<c020b4c4>] (show_stack) from [<c04b901c>] (dump_stack+0x8c/0xa)
    [ 1127.871750] [<c04b8f90>] (dump_stack) from [<c0272158>] (__report_bad_irq+0x)
    [ 1127.879855]  r7:0000002f r6:c1003438 r5:00000000 r4:ef0e9a00                 
    [ 1127.885785] [<c0272128>] (__report_bad_irq) from [<c0272570>] (note_interrup)
    [ 1127.894438]  r9:c1000000 r8:ef008000 r7:0000002f r6:c1003438 r5:00000000 r4:0
    [ 1127.902548] [<c02722dc>] (note_interrupt) from [<c026f800>] (handle_irq_even)
    [ 1127.911652]  r10:c10030ac r9:c1000000 r8:ef008000 r7:00000000 r6:c1003438 r50
    [ 1127.919844]  r4:00000000 r3:00000000                                         
    [ 1127.923592] [<c026f7ac>] (handle_irq_event_percpu) from [<c026f84c>] (handle)
    [ 1127.932875]  r5:ef0e9a60 r4:ef0e9a00                                         
    [ 1127.936624] [<c026f80c>] (handle_irq_event) from [<c0272ef8>] (handle_fasteo)
    [ 1127.945544]  r7:00000000 r6:c1003438 r5:ef0e9a60 r4:ef0e9a00                 
    [ 1127.951473] [<c0272e38>] (handle_fasteoi_irq) from [<c026e964>] (generic_han)
    [ 1127.960485]  r7:00000000 r6:00000000 r5:0000002f r4:c0e4fde0                 
    [ 1127.966413] [<c026e938>] (generic_handle_irq) from [<c026eed8>] (__handle_do)
    [ 1127.975519] [<c026ee74>] (__handle_domain_irq) from [<c0201408>] (gic_handle)
    [ 1127.984259]  r9:c1000000 r8:f0803000 r7:f0802000 r6:c1001ef0 r5:f080200c r4:8
    [ 1127.992366] [<c02013c8>] (gic_handle_irq) from [<c020c078>] (__irq_svc+0x58/)
    [ 1128.000195] Exception stack(0xc1001ef0 to 0xc1001f38)                        
    [ 1128.005482] 1ee0:                                     00000001 00000000 00000
    [ 1128.014042] 1f00: c1000000 c100303c 00000001 c10030a4 00000000 00000000 c100c
    [ 1128.022599] 1f20: c1001f50 c1001f40 c0208688 c020868c 600e0013 ffffffff      
    [ 1128.029524]  r9:c1000000 r8:00000000 r7:c1001f24 r6:ffffffff r5:600e0013 r4:c
    [ 1128.037636] [<c020864c>] (arch_cpu_idle) from [<c087d6ac>] (default_idle_cal)
    [ 1128.046108] [<c087d684>] (default_idle_call) from [<c025e56c>] (cpu_startup_)
    [ 1128.055126] [<c025e3b8>] (cpu_startup_entry) from [<c08789e4>] (rest_init+0x)
    [ 1128.063227]  r7:ffffffff                                                     
    [ 1128.065890] [<c0878958>] (rest_init) from [<c0e00d7c>] (start_kernel+0x3dc/0)
    [ 1128.073718]  r5:00000001 r4:c104104c                                         
    [ 1128.077466] [<c0e009a0>] (start_kernel) from [<80008090>] (0x80008090)       
    [ 1128.084293] handlers:                                                        
    [ 1128.086675] [<c054fac8>] dma_irq_handler                                     
    [ 1128.090787] Disabling IRQ #47  

  • That interrupt number is the same as is used in configMcASP_SocHwInfo
  • Hi Jeff,

    Apologies for the delayed reply. Let us have a look at this.

    Best Regards,
    Yordan
  • Hi Jeff,

    I checked linux sources (all keystone related dts & dtsi files), and I couldn't see IRQ 47 being used...
    Is it possible that the interrupts you use in your DSP app are never enabled in the CIC? Have a look at the CIC enable registers.

    Best Regards,
    Yordan
  • I will check this. If the interrupts were not being enabled, wouldn't the application fail to work in all cases?
    From first examination, the MAP registers appear to be set correctly. I'll have to dig into the enable registers some.

    Another finding:
    The Event combiner error mentioned above appears when the DSP loses audio signal as well.
  • Hello Jeff,

    On enabling the McASP LPSC in Linux:
    Confirming Yordan's review of dts file: keystone-k2g.dtsi soc{mcasp0{power-domains and clocks}} looks as expected, as does keystone-k2g-evm.dts &mcasp0. I would expect the McASP driver to enable the appropriate lpsc domain.

    Could you get some more debug info for us after Linux has booted?
    * boot log
    * lsmod, look for davinchi-mcasp (make sure module loaded)
    * lpsc registers: MDSTAT15, MDCTL15 (verify lpsc state)

    Regards,
    Nick
  • Yordan:

    When I start the app using CCS, CIC_ENABLE_REG5 = 0x00003003

    The same happens when I start the app using mpmcl. To the best of my understanding, this means that CIC Interrupts 172 and 173 are enabled.

    Not certain what I changed that made a difference here, but the application will now get through a few samples before the events stop (when loaded with mpmcl). When loaded through CCS, it does not stop.

    Another possibly useful piece of info, I have disabled the "BIOS.addUserStartupFunction('&IpcMgr_ipcStartup');" line in my config. If I uncomment this line, the application does not get through EDMA configuration.

    I have some concerns about the memory map. It seems to me that I should be able to start the application using mpmcl and connect the debugger using CCS. When I do this, however, even with the correct symbols loaded, the debugger cannot find any symbols for the current PC address. I have made some changes to the DSP application's memory map in order to utilize the DDR and fit the application into memory, but I made no changes to the MPMCL conf.

    I would attach my map file but the forum won't seem to let me. I'd rather not paste 800+ lines into the post...

    All of this aside, this thread seems to be getting somewhat off-topic. That's not to say I don't appreciate the help, but it doesn't seem like we're working to get the LPSC working. Every time I run the application, I must use the GEL file to enable the PSCs. I do need help with respect to the topic we're currently on (getting the app to run using mpmcl), but I wonder if we should migrate that discussion to another, more appropriately titled, thread?

    Nick:

    I will do that and report back with my findings. I do not currently have mcasp driver support built into my kernel. I will try it built in and as a module. At the present moment, MDSTAT15 comes up as 0x00000A00 and MDCTL15 comes up 0x00000100. Both of these, I believe, indicate that they are off, which is why I have had to use the GEL to enable the LPSCs.


    Jeff

  • Nick:

    Here is the output of lsmod:

    Module                  Size  Used by
    sha512_arm             12252  0
    sha256_generic         10178  0
    sha1_generic            2864  0
    sha1_arm_neon           6261  0
    sha1_arm                3862  1 sha1_arm_neon
    md5                     2219  0
    des_generic            17608  0
    cbc                     2388  0
    xfrm_user              22909  2
    xfrm4_tunnel            2040  0
    ipcomp                  2473  0
    xfrm_ipcomp             4567  1 ipcomp
    ah4                     5665  0
    af_key                 27996  0
    xhci_plat_hcd           6347  0
    xhci_hcd              108653  1 xhci_plat_hcd
    usbcore               201157  2 xhci_plat_hcd,xhci_hcd
    pru_rproc              10520  0
    pruss_intc              7227  1 pru_rproc
    dwc3                   27562  0
    usb_common              4737  2 usbcore,dwc3
    pruss                   9774  1 pru_rproc
    phy_generic             5372  2
    keystone_dsp_mem        4318  1
    snd_soc_davinci_mcasp    18124  0
    snd_soc_edma            1169  1 snd_soc_davinci_mcasp
    snd_soc_core          146331  2 snd_soc_davinci_mcasp,snd_soc_edma
    snd_pcm_dmaengine       5453  1 snd_soc_core
    dwc3_keystone           2458  0
    snd_pcm                91264  3 snd_soc_davinci_mcasp,snd_pcm_dmaengine,snd_soc_core
    snd_timer              21210  1 snd_pcm
    snd                    53045  3 snd_timer,snd_soc_core,snd_pcm
    soundcore               1176  1 snd
    davinci_wdt             3001  0
    keystone_remoteproc    10828  3
    pruss_soc_bus           4207  0
    sch_fq_codel            8911  1
    uio_module_drv          7417  0
    uio                     9201  4 keystone_remoteproc,uio_module_drv
    rpmsg_proto             6870  0
    virtio_rpmsg_bus        9418  1 rpmsg_proto
    rpmsg_core              7124  2 rpmsg_proto,virtio_rpmsg_bus
    remoteproc             28325  3 pru_rproc,keystone_remoteproc,rpmsg_proto
    ipsecmgr_mod           17822  0
    xfrm_algo               6989  5 xfrm_user,ipsecmgr_mod,ah4,af_key,xfrm_ipcomp
    hplibmod                6093  0
    cryptodev              37775  1
    cmemk                  35419  4
    

    And the output of dmesg:

    [    0.000000] Booting Linux on physical CPU 0x0
    [    0.000000] Linux version 4.9.59-ga75d8e9305 (jeff@l-serv) (gcc version 6.2.1 20161016 (Linaro GCC 6.2-2016.11) ) #109 SMP PREEMPT Fri Jun 8 12:59:50 MDT 2018
    [    0.000000] CPU: ARMv7 Processor [412fc0f4] revision 4 (ARMv7), cr=30c5387d
    [    0.000000] CPU: div instructions available: patching division code
    [    0.000000] CPU: PIPT / VIPT nonaliasing data cache, PIPT instruction cache
    [    0.000000] OF: fdt:Machine model: Texas Instruments K2G General Purpose EVM
    [    0.000000] Switching physical address space to 0x800000000
    [    0.000000] efi: Getting EFI parameters from FDT:
    [    0.000000] efi: UEFI not found.
    [    0.000000] Reserved memory: created DMA memory pool at 0x000000081d000000, size 40 MiB
    [    0.000000] OF: reserved mem: initialized node dsp_common_mpm_pool@81d000000, compatible id shared-dma-pool
    [    0.000000] Reserved memory: created CMA memory pool at 0x000000081f800000, size 8 MiB
    [    0.000000] OF: reserved mem: initialized node dsp_common_cma_pool@81f800000, compatible id shared-dma-pool
    [    0.000000] cma: Reserved 48 MiB at 0x000000083d000000
    [    0.000000] Memory policy: Data cache writealloc
    [    0.000000] On node 0 totalpages: 231424
    [    0.000000] free_area_init_node: node 0, pgdat c103cd40, node_mem_map ef6f5000
    [    0.000000]   DMA zone: 1728 pages used for memmap
    [    0.000000]   DMA zone: 0 pages reserved
    [    0.000000]   DMA zone: 165888 pages, LIFO batch:31
    [    0.000000]   HighMem zone: 65536 pages, LIFO batch:15
    [    0.000000] percpu: Embedded 14 pages/cpu @ef6cd000 s26252 r8192 d22900 u57344
    [    0.000000] pcpu-alloc: s26252 r8192 d22900 u57344 alloc=14*4096
    [    0.000000] pcpu-alloc: [0] 0 
    [    0.000000] Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 229696
    [    0.000000] Kernel command line: console=ttyS0,115200n8 rootwait=5 rootfstype=nfs root=/dev/nfs rw nfsroot=192.168.0.14:/export/targetNFS_02,v3,tcp,rsize=4096,wsize=4096 ip=dhcp
    [    0.000000] PID hash table entries: 4096 (order: 2, 16384 bytes)
    [    0.000000] Dentry cache hash table entries: 131072 (order: 7, 524288 bytes)
    [    0.000000] Inode-cache hash table entries: 65536 (order: 6, 262144 bytes)
    [    0.000000] Memory: 844248K/925696K available (8192K kernel code, 254K rwdata, 2248K rodata, 2048K init, 299K bss, 24104K reserved, 57344K cma-reserved, 212992K highmem)
    [    0.000000] Virtual kernel memory layout:
    [    0.000000]     vector  : 0xffff0000 - 0xffff1000   (   4 kB)
    [    0.000000]     fixmap  : 0xffc00000 - 0xfff00000   (3072 kB)
    [    0.000000]     vmalloc : 0xf0800000 - 0xff800000   ( 240 MB)
    [    0.000000]     lowmem  : 0xc0000000 - 0xf0000000   ( 768 MB)
    [    0.000000]     pkmap   : 0xbfe00000 - 0xc0000000   (   2 MB)
    [    0.000000]     modules : 0xbf000000 - 0xbfe00000   (  14 MB)
    [    0.000000]       .text : 0xc0008000 - 0xc0a00000   (10208 kB)
    [    0.000000]       .init : 0xc0e00000 - 0xc1000000   (2048 kB)
    [    0.000000]       .data : 0xc1000000 - 0xc103fbf8   ( 255 kB)
    [    0.000000]        .bss : 0xc1041000 - 0xc108bd30   ( 300 kB)
    [    0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
    [    0.000000] Preemptible hierarchical RCU implementation.
    [    0.000000] 	Build-time adjustment of leaf fanout to 32.
    [    0.000000] 	RCU restricting CPUs from NR_CPUS=8 to nr_cpu_ids=1.
    [    0.000000] RCU: Adjusting geometry for rcu_fanout_leaf=32, nr_cpu_ids=1
    [    0.000000] NR_IRQS:16 nr_irqs:16 16
    [    0.000000] GIC: Using split EOI/Deactivate mode
    [    0.000000] arm_arch_timer: Architected cp15 timer(s) running at 24.00MHz (phys).
    [    0.000000] clocksource: arch_sys_counter: mask: 0xffffffffffffff max_cycles: 0x588fe9dc0, max_idle_ns: 440795202592 ns
    [    0.000007] sched_clock: 56 bits at 24MHz, resolution 41ns, wraps every 4398046511097ns
    [    0.000024] Switching to timer-based delay loop, resolution 41ns
    [    0.000201] keystone_timer_init: failed to get clock
    [    0.000222] Failed to initialize '/soc/timer@2210000': -517
    [    0.000595] Console: colour dummy device 80x30
    [    0.000634] Calibrating delay loop (skipped), value calculated using timer frequency.. 48.00 BogoMIPS (lpj=240000)
    [    0.000657] pid_max: default: 32768 minimum: 301
    [    0.000817] Mount-cache hash table entries: 2048 (order: 1, 8192 bytes)
    [    0.000834] Mountpoint-cache hash table entries: 2048 (order: 1, 8192 bytes)
    [    0.001847] CPU: Testing write buffer coherency: ok
    [    0.001975] mount_fs: security_sb_copy_data Error: 0
    [    0.002206] /cpus/cpu@0 missing clock-frequency property
    [    0.002228] CPU0: thread -1, cpu 0, socket 0, mpidr 80000000
    [    0.002253] Setting up static identity map for 0x80200000 - 0x80200138
    [    0.080310] EFI services will not be available.
    [    0.100114] Brought up 1 CPUs
    [    0.100132] SMP: Total of 1 processors activated (48.00 BogoMIPS).
    [    0.100144] CPU: All CPU(s) started in HYP mode.
    [    0.100154] CPU: Virtualization extensions available.
    [    0.100659] mount_fs: security_sb_copy_data Error: 0
    [    0.100742] do_new_mount: Complete. Return Value: 0
    [    0.100794] devtmpfs: initialized
    [    0.120366] VFP support v0.3: implementor 41 architecture 4 part 30 variant f rev 0
    [    0.120799] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
    [    0.120827] futex hash table entries: 256 (order: 2, 16384 bytes)
    [    0.122557] pinctrl core: initialized pinctrl subsystem
    [    0.123905] NET: Registered protocol family 16
    [    0.125410] DMA: preallocated 256 KiB pool for atomic coherent allocations
    [    0.150296] cpuidle: using governor ladder
    [    0.180331] cpuidle: using governor menu
    [    0.180899] No ATAGs?
    [    0.180929] hw-breakpoint: found 5 (+1 reserved) breakpoint and 4 watchpoint registers.
    [    0.180945] hw-breakpoint: maximum watchpoint size is 8 bytes.
    [    0.185246] omap-gpmc 21818000.gpmc: could not find pctldev for node /soc/pinmux@02621000/pinmux_gpmc_pins, deferring probe
    [    0.188740] davinci_gpio 2603000.gpio: could not find pctldev for node /soc/pinmux@02621000/pinmux_gpio0_pins, deferring probe
    [    0.189633] davinci_gpio 260a000.gpio: could not find pctldev for node /soc/pinmux@02621000/pinmux_gpio1_pins, deferring probe
    [    0.196550] irq: no irq domain found for /soc/keystone_irq@026202a0 !
    [    0.285627] SCSI subsystem initialized
    [    0.286126] i2c_davinci 2530000.i2c: could not find pctldev for node /soc/pinmux@02621000/pinmux_i2c0_pins, deferring probe
    [    0.286189] i2c_davinci 2530400.i2c: could not find pctldev for node /soc/pinmux@02621000/pinmux_i2c1_pins, deferring probe
    [    0.286245] i2c_davinci 2530800.i2c: could not find pctldev for node /soc/pinmux@02621000/pinmux_i2c2_pins, deferring probe
    [    0.286452] pps_core: LinuxPPS API ver. 1 registered
    [    0.286466] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
    [    0.286500] PTP clock support registered
    [    0.286533] EDAC MC: Ver: 3.0.0
    [    0.290905] clocksource: Switched to clocksource arch_sys_counter
    [    0.306274] NET: Registered protocol family 2
    [    0.307236] TCP established hash table entries: 8192 (order: 3, 32768 bytes)
    [    0.307344] TCP bind hash table entries: 8192 (order: 4, 65536 bytes)
    [    0.307553] TCP: Hash tables configured (established 8192 bind 8192)
    [    0.307635] UDP hash table entries: 512 (order: 2, 16384 bytes)
    [    0.307687] UDP-Lite hash table entries: 512 (order: 2, 16384 bytes)
    [    0.307913] NET: Registered protocol family 1
    [    0.341096] RPC: Registered named UNIX socket transport module.
    [    0.341115] RPC: Registered udp transport module.
    [    0.341126] RPC: Registered tcp transport module.
    [    0.341137] RPC: Registered tcp NFSv4.1 backchannel transport module.
    [    0.341156] PCI: CLS 0 bytes, default 64
    [    0.341480] Trying to unpack rootfs image as initramfs...
    [    0.345578] Freeing initrd memory: 36K
    [    0.345990] hw perfevents: enabled with armv7_cortex_a15 PMU driver, 7 counters available
    [    0.347264] platform alarmtimer: set dma_pfn_offset00780000
    [    0.361046] workingset: timestamp_bits=14 max_order=18 bucket_order=4
    [    0.374052] squashfs: version 4.0 (2009/01/31) Phillip Lougher
    [    0.391613] NFS: Registering the id_resolver key type
    [    0.391678] Key type id_resolver registered
    [    0.391691] Key type id_legacy registered
    [    0.391760] ntfs: driver 2.1.32 [Flags: R/O].
    [    0.392670] mount_fs: security_sb_copy_data Error: 0
    [    0.394268] bounce: pool size: 64 pages
    [    0.394529] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 247)
    [    0.394547] io scheduler noop registered
    [    0.394560] io scheduler deadline registered
    [    0.394783] io scheduler cfq registered (default)
    [    0.395220] keystone_irq soc:keystone_irq@026202a0: irqchip registered, nr_irqs 28
    [    0.396308] pinctrl-single 2621000.pinmux: please update dts to use #pinctrl-cells = <1>
    [    0.397018] pinctrl-single 2621000.pinmux: 260 pins at pa f0850000 size 1040
    [    0.397865] gpio-syscon soc:keystone_dsp_gpio@02620240: can't read the dir register offset!
    [    0.397905] gpiochip_find_base: found new base at 484
    [    0.397936] gpio gpiochip0: (soc:keystone_dsp_gpio@02620240): added GPIO chardev (254:0)
    [    0.398433] gpiochip_setup_dev: registered GPIOs 484 to 511 on device: gpiochip0 (soc:keystone_dsp_gpio@02620240)
    [    0.398527] gpio-syscon soc:keystone_pruss_gpio0: can't read the dir register offset!
    [    0.398553] gpiochip_find_base: found new base at 456
    [    0.398579] gpio gpiochip1: (soc:keystone_pruss_gpio0): added GPIO chardev (254:1)
    [    0.398936] gpiochip_setup_dev: registered GPIOs 456 to 483 on device: gpiochip1 (soc:keystone_pruss_gpio0)
    [    0.399023] gpio-syscon soc:keystone_pruss_gpio1: can't read the dir register offset!
    [    0.399044] gpiochip_find_base: found new base at 428
    [    0.399071] gpio gpiochip2: (soc:keystone_pruss_gpio1): added GPIO chardev (254:2)
    [    0.399419] gpiochip_setup_dev: registered GPIOs 428 to 455 on device: gpiochip2 (soc:keystone_pruss_gpio1)
    [    0.399504] gpio-syscon soc:keystone_pruss_gpio2: can't read the dir register offset!
    [    0.399527] gpiochip_find_base: found new base at 400
    [    0.399551] gpio gpiochip3: (soc:keystone_pruss_gpio2): added GPIO chardev (254:3)
    [    0.399904] gpiochip_setup_dev: registered GPIOs 400 to 427 on device: gpiochip3 (soc:keystone_pruss_gpio2)
    [    0.399989] gpio-syscon soc:keystone_pruss_gpio3: can't read the dir register offset!
    [    0.400019] gpiochip_find_base: found new base at 372
    [    0.400044] gpio gpiochip4: (soc:keystone_pruss_gpio3): added GPIO chardev (254:4)
    [    0.400392] gpiochip_setup_dev: registered GPIOs 372 to 399 on device: gpiochip4 (soc:keystone_pruss_gpio3)
    [    0.513804] Serial: 8250/16550 driver, 10 ports, IRQ sharing disabled
    [    0.513970] platform serial8250: set dma_pfn_offset00780000
    [    0.519113] console [ttyS0] disabled
    [    0.519220] 2530c00.serial: ttyS0 at MMIO 0x2530c00 (irq = 23, base_baud = 12500000) is a TI DA8xx/66AK2x
    [    1.321446] console [ttyS0] enabled
    [    1.326704] 2531000.serial: ttyS1 at MMIO 0x2531000 (irq = 24, base_baud = 12500000) is a TI DA8xx/66AK2x
    [    1.338356] 2531400.serial: ttyS2 at MMIO 0x2531400 (irq = 25, base_baud = 12500000) is a TI DA8xx/66AK2x
    [    1.350276] [drm] Initialized
    [    1.684713] brd: module loaded
    [    1.841779] loop: module loaded
    [    1.849935] platform Fixed MDIO bus.0: set dma_pfn_offset00780000
    [    1.856698] libphy: Fixed MDIO Bus: probed
    [    1.864211] mousedev: PS/2 mouse device common for all mice
    [    1.870584] i2c /dev entries driver
    [    1.876051] pwm-fan soc:pwm-fan: Could not get PWM
    [    1.883099] ledtrig-cpu: registered to indicate activity on CPUs
    [    1.892649] NET: Registered protocol family 10
    [    1.911540] sit: IPv6, IPv4 and MPLS over IPv4 tunneling driver
    [    1.918752] NET: Registered protocol family 17
    [    1.923823] Key type dns_resolver registered
    [    1.928509] Registering SWP/SWPB emulation handler
    [    1.943643] pwm-fan soc:pwm-fan: Could not get PWM
    [    1.949254] ti-sci 2921c00.pmmc: ABI: 2.4 (firmware rev 0x0011 '0.1.1-50-g129ef (Eagle)')
    [    1.984063] random: fast init done
    [    2.004256] ti-sci-clk 2921c00.pmmc:k2g_clks: Hole in clock list. NODEV: 35, IDX:1
    [    2.012284] ti-sci-clk 2921c00.pmmc:k2g_clks: Hole in clock list. NODEV: 35, IDX:2
    [    2.020267] ti-sci-clk 2921c00.pmmc:k2g_clks: Hole in clock list. NODEV: 35, IDX:3
    [    2.028269] ti-sci-clk 2921c00.pmmc:k2g_clks: Hole in clock list. NODEV: 35, IDX:4
    [    2.036270] ti-sci-clk 2921c00.pmmc:k2g_clks: Hole in clock list. NODEV: 35, IDX:5
    [    2.044270] ti-sci-clk 2921c00.pmmc:k2g_clks: Hole in clock list. NODEV: 35, IDX:6
    [    2.052270] ti-sci-clk 2921c00.pmmc:k2g_clks: Hole in clock list. NODEV: 35, IDX:7
    [    2.060246] ti-sci-clk 2921c00.pmmc:k2g_clks: Hole in clock list. NODEV: 35, IDX:8
    [    2.070304] ti-sci-clk 2921c00.pmmc:k2g_clks: Hole in clock list. NODEV: 43, IDX:4
    [    2.085728] ti-sci-clk 2921c00.pmmc:k2g_clks: Hole in clock list. NODEV: 67, IDX:3
    [    2.093816] ti-sci-clk 2921c00.pmmc:k2g_clks: Hole in clock list. NODEV: 67, IDX:4
    [    2.106241] ti-sci-clk 2921c00.pmmc:k2g_clks: Hole in clock list. NODEV: 76, IDX:9
    [    2.114687] ti-sci-clk 2921c00.pmmc:k2g_clks: get-parent failed for dev=76, clk=11, ret=-19
    [    2.123620] ti-sci-clk 2921c00.pmmc:k2g_clks: get-parent failed for dev=76, clk=11, ret=-19
    [    2.132778] ti-sci-clk 2921c00.pmmc:k2g_clks: get-parent failed for dev=76, clk=11, ret=-19
    [    2.151290] keystone timer clock @100000000 Hz
    [    2.156419] omap-gpmc 21818000.gpmc: GPMC revision 6.0
    [    2.161874] gpiochip_find_base: found new base at 370
    [    2.161916] gpio gpiochip5: (omap-gpmc): added GPIO chardev (254:5)
    [    2.162351] gpiochip_setup_dev: registered GPIOs 370 to 371 on device: gpiochip5 (omap-gpmc)
    [    2.163271] omap2-nand 30000000.nand: GPIO lookup for consumer rb
    [    2.163284] omap2-nand 30000000.nand: using device tree for GPIO lookup
    [    2.163298] of_get_named_gpiod_flags: can't parse 'rb-gpios' property of node '/soc/gpmc@21818000/nand@0,0[0]'
    [    2.163310] of_get_named_gpiod_flags: can't parse 'rb-gpio' property of node '/soc/gpmc@21818000/nand@0,0[0]'
    [    2.163321] omap2-nand 30000000.nand: using lookup tables for GPIO lookup
    [    2.163332] omap2-nand 30000000.nand: lookup for GPIO rb failed
    [    2.163630] nand: No NAND device found
    [    2.167561] omap2-nand 30000000.nand: scan failed, may be bus-width mismatch
    [    2.175505] GPIO line 125 (gpio0-lowDefaults) hogged as output/low
    [    2.182027] gpio gpiochip6: (Davinci): added GPIO chardev (254:6)
    [    2.182439] gpiochip_setup_dev: registered GPIOs 0 to 143 on device: gpiochip6 (Davinci)
    [    2.191150] GPIO line 183 (gpio1-defaults) hogged as output/high
    [    2.197455] gpio gpiochip7: (Davinci): added GPIO chardev (254:7)
    [    2.197848] gpiochip_setup_dev: registered GPIOs 144 to 211 on device: gpiochip7 (Davinci)
    [    2.211820] edma 2700000.edma: TI EDMA DMA engine driver
    [    2.218100] edma 2728000.edma: memcpy is disabled
    [    2.231260] edma 2728000.edma: TI EDMA DMA engine driver
    [    2.240935] lm75 2-0048: Config 00
    [    2.241849] lm75 2-0048: hwmon0: sensor 'lm75'
    [    2.247553] keystone-navigator-qmss soc:qmss@4020000: qmgr start queue 0, number of queues 128
    [    2.256804] keystone-navigator-qmss soc:qmss@4020000: added qmgr start queue 0, num of queues 128, reg_peek f0e3d000, reg_status   (null), reg_config f0e49000, reg_region f0e4b000, reg_push f0e4d000, reg_pop f0e4d000
    [    2.278572] keystone-navigator-dma soc:knav_dmas@0: DMA dma_gbe registered 53 logical channels, flows 32, tx chans: 21, rx chans: 32
    [    2.292557] of_get_named_gpiod_flags: can't parse 'cs-gpios' property of node '/soc/spi@21805400[0]'
    [    2.292571] of_get_named_gpiod_flags: can't parse 'cs-gpios' property of node '/soc/spi@21805400[1]'
    [    2.292590] spi_davinci 21805400.spi: DMA is not supported (-19)
    [    2.300829] spi_davinci 21805400.spi: Controller at 0xf0e5d400
    [    2.307964] of_get_named_gpiod_flags: can't parse 'cs-gpios' property of node '/soc/spi@21805800[0]'
    [    2.307978] of_get_named_gpiod_flags: can't parse 'cs-gpios' property of node '/soc/spi@21805800[1]'
    [    2.307995] spi_davinci 21805800.spi: DMA is not supported (-19)
    [    2.316255] spi_davinci 21805800.spi: Controller at 0xf0e5f800
    [    2.323386] of_get_named_gpiod_flags: can't parse 'cs-gpios' property of node '/soc/spi@21805c00[0]'
    [    2.323399] of_get_named_gpiod_flags: can't parse 'cs-gpios' property of node '/soc/spi@21805c00[1]'
    [    2.323421] of_get_named_gpiod_flags: parsed 'cs-gpios' property of node '/soc/spi@21805c00[2]' - status (0)
    [    2.323446] spi_davinci 21805c00.spi: DMA is not supported (-19)
    [    2.329852] of_get_named_gpiod_flags: can't parse 'cs-gpios' property of node '/soc/spi@21805c00[0]'
    [    2.329863] of_get_named_gpiod_flags: can't parse 'cs-gpios' property of node '/soc/spi@21805c00[1]'
    [    2.329880] of_get_named_gpiod_flags: parsed 'cs-gpios' property of node '/soc/spi@21805c00[2]' - status (0)
    [    2.332375] spi_davinci 21805c00.spi: Controller at 0xf0e61c00
    [    2.339439] of_get_named_gpiod_flags: can't parse 'cs-gpios' property of node '/soc/spi@21806000[0]'
    [    2.339452] of_get_named_gpiod_flags: can't parse 'cs-gpios' property of node '/soc/spi@21806000[1]'
    [    2.339469] spi_davinci 21806000.spi: DMA is not supported (-19)
    [    2.346922] m25p80 spi32763.0: s25sl032p (4096 Kbytes)
    [    2.352398] 1 ofpart partitions found on MTD device spi32763.0
    [    2.358504] Creating 1 MTD partitions on "spi32763.0":
    [    2.363913] 0x000000000000-0x000000100000 : "xmos-img"
    [    2.381801] spi_davinci 21806000.spi: Controller at 0xf0e63000
    [    2.440958] davinci_mdio 4200f00.mdio: davinci mdio revision 1.7
    [    2.447247] libphy: 4200f00.mdio: probed
    [    2.452067] davinci_mdio 4200f00.mdio: phy[0]: device 4200f00.mdio:00, driver TI DP83867
    [    2.461348] netcp-1.0 2620110.netcp: ALE enabled
    [    2.466434] netcp-1.0 2620110.netcp: device node lookup for pps timer failed
    [    2.474009] netcp-1.0 2620110.netcp: cpts: overflow check period 500 (jiffies)
    [    2.481674] netcp-1.0 2620110.netcp: CPTS: ref_clk_freq:250000000 calc_mult:2147483648 calc_shift:29 error:0 nsec/sec
    [    2.492845] netcp-1.0 2620110.netcp: initialized cpsw ale version 1.4
    [    2.499589] netcp-1.0 2620110.netcp: ALE Table size 64
    [    2.506388] netcp-1.0 2620110.netcp: module(netcp-xgbe) not used for device
    [    2.513738] netcp-1.0 2620110.netcp: module(netcp-pa) not used for device
    [    2.520851] netcp-1.0 2620110.netcp: module(netcp-pa2) not used for device
    [    2.528079] netcp-1.0 2620110.netcp: module(netcp-sa) not used for device
    [    2.538420] hctosys: unable to open rtc device (rtc0)
    [    2.543824] initcall late: efi_shutdown_init
    [    2.544005] late initcall: tcp_congestion_default
    [    2.545708] netcp-1.0 2620110.netcp eth0: Link is Down
    [    2.551706] cpts ptp bc clkid 0
    [    2.555665] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
    [    5.681341] netcp-1.0 2620110.netcp eth0: Link is Up - 100Mbps/Half - flow control off
    [    5.710964] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
    [    5.741032] Sending DHCP requests ., OK
    [    5.810944] IP-Config: Got DHCP answer from 192.168.0.1, my address is 192.168.0.209
    [    5.819049] IP-Config: Complete:
    [    5.822460]      device=eth0, hwaddr=58:7a:62:6a:e9:2a, ipaddr=192.168.0.209, mask=255.255.255.0, gw=192.168.0.1
    [    5.833129]      host=192.168.0.209, domain=grace.local, nis-domain=(none)
    [    5.840325]      bootserver=0.0.0.0, rootserver=192.168.0.14, rootpath=     nameserver0=8.8.8.8, nameserver1=4.2.2.2
    [    5.879384] Preparing Namespace
    [    5.882952] NFS: Mounting NFS Root
    [    5.882976] NFS: Doing mount root
    [    5.882985] NFS: Mount Root try #1
    [    5.883141] type->Mount: Trying NFS Mount
    [    5.883148] NFS: nfs_try_mount: Trying Mount...
    [    5.883154] NFS: nfs_try_mount: Need Mount...
    [    5.883165] NFS: Request: Server 192.168.0.14:/export/targetNFS_02 | Protocol: 6 | Version: 3
    [    5.883173] NFS: sending MNT request for 192.168.0.14:/export/targetNFS_02
    [    5.883209] RPC:       created transport eea5e000 with 65536 slots
    [    5.883216] RPC: rpc_create_xprt: Creating XPRT
    [    5.883265] RPC: Pinging...
    [    5.883323] RPC:       created transport eea5f000 with 65536 slots
    [    5.883329] RPC: rpc_create_xprt: Creating XPRT
    [    5.897382] NFS: MNT request succeeded
    [    5.897586] RPC:       created transport eeb48800 with 65536 slots
    [    5.897594] RPC: rpc_create_xprt: Creating XPRT
    [    5.897622] RPC: Pinging...
    [    5.897669] RPC:       created transport eeb4a000 with 65536 slots
    [    5.897675] RPC: rpc_create_xprt: Creating XPRT
    [    5.900399] RPC: Pinging...
    [    5.901906] type->Mount: rpc_ops->try_mount retval: -288205216
    [    5.901948] do_new_mount: Complete. Return Value: 0
    [    5.902367] VFS: Mounted root (nfs filesystem) on device 0:14.
    [    5.908929] do_new_mount: Complete. Return Value: 0
    [    5.908940] devtmpfs: mounted
    [    5.912196] Namespace Prepared
    [    5.915394] Loading Default Modules
    [    5.921100] Freeing unused kernel memory: 2048K
    [   11.774715] do_new_mount: Complete. Return Value: 0
    [   11.787458] do_new_mount: Complete. Return Value: 0
    [   11.788616] systemd[1]: System time before build time, advancing clock.
    [   11.798863] mount_fs: security_sb_copy_data Error: 0
    [   11.804259] do_new_mount: Complete. Return Value: 0
    [   11.804423] mount_fs: security_sb_copy_data Error: 0
    [   11.809810] do_new_mount: Complete. Return Value: 0
    [   11.816925] mount_fs: security_sb_copy_data Error: 0
    [   11.822382] do_new_mount: Complete. Return Value: 0
    [   11.824695] mount_fs: security_sb_copy_data Error: 0
    [   11.829965] do_new_mount: Complete. Return Value: 0
    [   11.830221] mount_fs: security_sb_copy_data Error: 0
    [   11.835830] do_new_mount: Complete. Return Value: 0
    [   12.558002] systemd[1]: Configuration file /etc/systemd/system.conf is marked executable. Please remove executable permission bits. Proceeding anyway.
    [   12.572243] systemd[1]: Configuration file /etc/systemd/system.conf is marked world-writable. Please remove world writability permission bits. Proceeding anyway.
    [   12.599031] mount_fs: security_sb_copy_data Error: 0
    [   12.604625] do_new_mount: Complete. Return Value: 0
    [   12.604889] mount_fs: security_sb_copy_data Error: 0
    [   12.610422] do_new_mount: Complete. Return Value: 0
    [   12.611596] mount_fs: security_sb_copy_data Error: 0
    [   12.617132] do_new_mount: Complete. Return Value: 0
    [   12.617479] mount_fs: security_sb_copy_data Error: 0
    [   12.623029] do_new_mount: Complete. Return Value: 0
    [   12.623267] mount_fs: security_sb_copy_data Error: 0
    [   12.630003] do_new_mount: Complete. Return Value: 0
    [   12.630248] mount_fs: security_sb_copy_data Error: 0
    [   12.635836] do_new_mount: Complete. Return Value: 0
    [   12.636078] mount_fs: security_sb_copy_data Error: 0
    [   12.641571] do_new_mount: Complete. Return Value: 0
    [   12.641704] systemd[1]: systemd 230 running in system mode. (+PAM -AUDIT -SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP -LIBCRYPTSETUP -GCRYPT -GNUTLS +ACL +XZ -LZ4 -SECCOMP +BLKID -ELFUTILS +KMOD -IDN)
    [   12.661417] systemd[1]: Detected architecture arm.
    [   12.702690] systemd[1]: Set hostname to <m908-002>.
    [   13.712366] systemd[1]: Configuration file /lib/systemd/system/remote-fs.target is marked executable. Please remove executable permission bits. Proceeding anyway.
    [   13.727690] systemd[1]: Configuration file /lib/systemd/system/remote-fs.target is marked world-writable. Please remove world writability permission bits. Proceeding anyway.
    [   13.747110] systemd[1]: Configuration file /lib/systemd/system/shutdown.target is marked executable. Please remove executable permission bits. Proceeding anyway.
    [   13.762367] systemd[1]: Configuration file /lib/systemd/system/shutdown.target is marked world-writable. Please remove world writability permission bits. Proceeding anyway.
    [   13.780269] systemd[1]: Configuration file /lib/systemd/system/remote-fs-pre.target is marked executable. Please remove executable permission bits. Proceeding anyway.
    [   13.796077] systemd[1]: Configuration file /lib/systemd/system/remote-fs-pre.target is marked world-writable. Please remove world writability permission bits. Proceeding anyway.
    [   13.815224] systemd[1]: Configuration file /lib/systemd/system/-.slice is marked executable. Please remove executable permission bits. Proceeding anyway.
    [   14.520256] do_new_mount: Complete. Return Value: 0
    [   14.583202] mount_fs: security_sb_copy_data Error: 0
    [   14.589061] do_new_mount: Complete. Return Value: 0
    [   14.624109] do_new_mount: Complete. Return Value: 0
    [   16.115896] cmemk: loading out-of-tree module taints kernel.
    [   16.130376] CMEMK module: reference Linux version 4.9.59
    [   16.139787] allocated heap buffer 0xc0a0000 of size 0x57000
    [   16.146966] cmemk initialized
    [   16.185572] cryptodev: driver 1.8 loaded.
    [   16.227842] HPLIBMOD Debug: init
    [   16.227901] HPLIBMOD Debug: Allocated major number: 245
    [   16.248244] HPLIBMOD Debug: hplibmod_init_module: Allocated 0xf00000 size memory from CMA.
    [   16.248259] HPLIBMOD Debug: hplibmod_init_module: dmaAddr 0xbd100000
    [   16.248266] HPLIBMOD Debug: module loaded
    [   16.348756] NET: Registered protocol family 43
    [   16.377682] uio_module_drv soc:mpax: registered misc device mpax
    [   16.408480] uio_module_drv soc:edma3: registered misc device edma3
    [   16.418035] uio_module_drv soc:secmgr: registered misc device secmgr
    [   16.426534] uio_module_drv soc:qmss: registered misc device qmss
    [   17.052171] systemd-journald[100]: Configuration file /etc/systemd/journald.conf is marked executable. Please remove executable permission bits. Proceeding anyway.
    [   17.094672] systemd-journald[100]: Configuration file /etc/systemd/journald.conf is marked world-writable. Please remove world writability permission bits. Proceeding anyway.
    [   17.117876] do_new_mount: Complete. Return Value: 0
    [   17.695201] random: crng init done
    [   17.949388] systemd[1]: Starting udev Coldplug all Devices...
    [   18.059949] systemd[1]: Started Journal Service.
    [   19.751967] systemd-journald[100]: Received request to flush runtime journal from PID 1
    [   19.913233] mount_fs: security_sb_copy_data Error: 0
    [   19.918538] do_new_mount: Complete. Return Value: 0
    [   19.936708] mount_fs: security_sb_copy_data Error: 0
    [   19.961648] do_new_mount: Complete. Return Value: 0
    [   21.433107] mount_fs: security_sb_copy_data Error: 0
    [   21.438386] do_new_mount: Complete. Return Value: 0
    [   22.999413] of_get_named_gpiod_flags: parsed 'kick-gpio' property of node '/soc/dsp@10800000[0]' - status (0)
    [   22.999478] keystone-rproc 10800000.dsp: assigned reserved memory node dsp_common_cma_pool@81f800000
    [   23.099513] remoteproc remoteproc0: 10800000.dsp is available
    [   24.901526] davinci-wdt 2250000.wdt: heartbeat 60 sec
    [   27.456465] platform snd-soc-dummy: set dma_pfn_offset00780000
    [   27.982373] clk: failed to reparent 2921c00.pmmc:k2g_clks:4:0 to 2921c00.pmmc:k2g_clks:4:5: -22
    [   28.782642] keystone-dsp-mem 9d000000.dspmem: registered misc device dspmem
    [   33.997597] usb_phy_generic soc:usb-phy@0: GPIO lookup for consumer reset
    [   33.997614] usb_phy_generic soc:usb-phy@0: using device tree for GPIO lookup
    [   33.997629] of_get_named_gpiod_flags: can't parse 'reset-gpios' property of node '/soc/usb-phy@0[0]'
    [   33.997642] of_get_named_gpiod_flags: can't parse 'reset-gpio' property of node '/soc/usb-phy@0[0]'
    [   33.997653] usb_phy_generic soc:usb-phy@0: using lookup tables for GPIO lookup
    [   33.997666] usb_phy_generic soc:usb-phy@0: lookup for GPIO reset failed
    [   33.997679] usb_phy_generic soc:usb-phy@0: GPIO lookup for consumer vbus-detect
    [   33.997688] usb_phy_generic soc:usb-phy@0: using device tree for GPIO lookup
    [   33.997700] of_get_named_gpiod_flags: can't parse 'vbus-detect-gpios' property of node '/soc/usb-phy@0[0]'
    [   33.997711] of_get_named_gpiod_flags: can't parse 'vbus-detect-gpio' property of node '/soc/usb-phy@0[0]'
    [   33.997720] usb_phy_generic soc:usb-phy@0: using lookup tables for GPIO lookup
    [   33.997731] usb_phy_generic soc:usb-phy@0: lookup for GPIO vbus-detect failed
    [   33.997760] soc:usb-phy@0 supply vcc not found, using dummy regulator
    [   42.258943] ti-pruss 20a80000.pruss: creating PRU cores and other child platform devices
    [   42.286384] irq: no irq domain found for /soc/pruss_soc_bus@20aa6000/pruss@20a80000/intc@20aa0000 !
    [   42.299903] irq: no irq domain found for /soc/pruss_soc_bus@20aa6000/pruss@20a80000/intc@20aa0000 !
    [   42.340221] ti-pruss 20ac0000.pruss: creating PRU cores and other child platform devices
    [   42.365230] irq: no irq domain found for /soc/pruss_soc_bus@20ae6000/pruss@20ac0000/intc@20ae0000 !
    [   42.376297] irq: no irq domain found for /soc/pruss_soc_bus@20ae6000/pruss@20ac0000/intc@20ae0000 !
    [   44.230671] platform xhci-hcd.0.auto: set dma_pfn_offset00780000
    [   49.348905] remoteproc remoteproc1: 20ab4000.pru0 is available
    [   49.355297] pru-rproc 20ab4000.pru0: PRU rproc node /soc/pruss_soc_bus@20aa6000/pruss@20a80000/pru@20ab4000 probed successfully
    [   49.375794] remoteproc remoteproc2: 20ab8000.pru1 is available
    [   49.397479] pru-rproc 20ab8000.pru1: PRU rproc node /soc/pruss_soc_bus@20aa6000/pruss@20a80000/pru@20ab8000 probed successfully
    [   49.420533] remoteproc remoteproc0: powering up 10800000.dsp
    [   49.434718] remoteproc remoteproc3: 20af4000.pru0 is available
    [   49.435043] pru-rproc 20af4000.pru0: PRU rproc node /soc/pruss_soc_bus@20ae6000/pruss@20ac0000/pru@20af4000 probed successfully
    [   49.441908] remoteproc remoteproc4: 20af8000.pru1 is available
    [   49.442018] pru-rproc 20af8000.pru1: PRU rproc node /soc/pruss_soc_bus@20ae6000/pruss@20ac0000/pru@20af8000 probed successfully
    [   49.576731] remoteproc remoteproc0: Booting unspecified pre-loaded fw image
    [   49.639213] virtio_rpmsg_bus virtio0: rpmsg host is online
    [   49.645132] virtio_rpmsg_bus virtio0: creating channel rpmsg-proto addr 0x3d
    [   49.658736] remoteproc remoteproc0: registered virtio0 (type 7)
    [   49.670594] remoteproc remoteproc0: remote processor 10800000.dsp is now up
    [   50.212905] usbcore: registered new interface driver usbfs
    [   50.220174] usbcore: registered new interface driver hub
    [   50.232043] usbcore: registered new device driver usb
    [   50.987560] xhci-hcd xhci-hcd.0.auto: xHCI Host Controller
    [   50.994322] xhci-hcd xhci-hcd.0.auto: new USB bus registered, assigned bus number 1
    [   51.012438] xhci-hcd xhci-hcd.0.auto: hcc params 0x0298f66d hci version 0x100 quirks 0x02010010
    [   51.027137] xhci-hcd xhci-hcd.0.auto: irq 26, io mem 0x02690000
    [   51.036920] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002
    [   51.046588] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
    [   51.056826] usb usb1: Product: xHCI Host Controller
    [   51.064563] usb usb1: Manufacturer: Linux 4.9.59-ga75d8e9305 xhci-hcd
    [   51.073818] usb usb1: SerialNumber: xhci-hcd.0.auto
    [   51.085750] hub 1-0:1.0: USB hub found
    [   51.089764] hub 1-0:1.0: 1 port detected
    [   51.101359] xhci-hcd xhci-hcd.0.auto: xHCI Host Controller
    [   51.107131] xhci-hcd xhci-hcd.0.auto: new USB bus registered, assigned bus number 2
    [   51.121722] usb usb2: We don't know the algorithms for LPM for this host, disabling LPM.
    [   51.130421] usb usb2: New USB device found, idVendor=1d6b, idProduct=0003
    [   51.141859] usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1
    [   51.149429] usb usb2: Product: xHCI Host Controller
    [   51.158804] usb usb2: Manufacturer: Linux 4.9.59-ga75d8e9305 xhci-hcd
    [   51.168194] usb usb2: SerialNumber: xhci-hcd.0.auto
    [   51.178241] hub 2-0:1.0: USB hub found
    [   51.185947] hub 2-0:1.0: 1 port detected
    [   52.508274] NET: Registered protocol family 15
    [   52.894233] IPsec: esp4_init: can't add xfrm type
    [   53.562676] Initializing XFRM netlink socket
    

  • Edited because of lack of scroll bar.

  • Even with the McASP drivers loaded, the MDSTAT and MDCTL registers are not changed.
  • I also found something in my bootlog that seems to indicate that my dts changes indicated in previous posts were incorrect.

    I added :

    assigned-clocks = <&k2g_clks K2G_DEV_MCASP0 K2G_DEV_MCASP_VBUS_CLK>;
    assigned-clock-parents = <&k2g_clks K2G_DEV_MCASP0 K2G_DEV_MCASP_AUX_CLK_PARENT_SYS_OSCCLK>;

    to the mcasp0 node, and now I see

    [ 27.982373] clk: failed to reparent 2921c00.pmmc:k2g_clks:4:0 to 2921c00.pmmc:k2g_clks:4:5: -22

    in my bootlog.

  • Hello Jeff,

    1) we definitely need the McASP driver to be loaded if you want Linux to enable the McASP's LPSC

    2) If the driver is loaded but the LPSC is still not on, my working hypothesis is that the Linux power manager is turning the clocks to the McASP off because it doesn't think anyone is using the McASP. I think you can hack the linux driver at sound/soc/davinvi/davinvi-mcasp.c by adding an extra "pm_runtime_get_sync(mcasp->dev); " into the davinci_mcasp_probe() function - not sure if it needs to be in a certain part of that function, or if anywhere in the probe function works. I would expect that to trick Linux into thinking that the McASP was in use by something from the Linux side, so it would keep the LPSC on.

    What I proposed in 2) is almost certainly not the "right" way to do it, but it might give us more debug information. I need to dig deeper into how to share peripherals between ARM and DSP on this end. I think the davinci-mcasp driver might have been modified for automotive processors to allow the ARM to share the McASP with a DSP, so that is somewhere I can start looking for a more elegant solution.

    3) Looks like the code you posted above doesn't have a scroll bar to it, so it might be good to try to attach those files. Changing the file extension might allow you to post file types that it complains about initially.

    4) Looking at your startup sequence: when you reset/load the DSP using mpmcl, is your GEL file doing anything other than enabling LPSC 15?

    Regards,
    Nick
  • Hi Nick,

    1) Good to know. I'll make sure it's loaded.

    2) That seems like a possibility. I'll dig into the driver. It's somewhat hard to know how the PM is controlling everything, since this part seems to be the only one in existence that uses the SCI protocol with a PMMC. Any docs you can point me to on how that works would be appreciated. I've read through the TI-SCI docs and the related header files in the Linux source, but some sort of indicator of where it gets used in the source would be cool.

    3) Yep, I noticed that. It had a scroll bar in the preview... I tried changing the file extension to txt, but it still wasn't happy.

    4) I am using the K2G EVM gel and not loading it until after connection so that onConnect() does not run. I am calling the setAllPscOn() function from the "scripts" menu, so to the best of my knowledge (and looking at the registers), it's just setting every PSC on.

    I'll reply with my findings. Thanks for your help.

    Jeff
  • I inserted "pm_runtime_get_sync(mcasp->dev);" into the device probe function near the end and now the pm_genpd debugfs shows the mcasp as active, and the debugger shows MDSTAT15 as active as well. Unfortunately, since adding this, I cannot get my application to run, even with the debugger. The behavior I see seems to indicate that the edma interrupts are not being handled by the dsp. This will take further investigation, but that's for another forum topic.

    Nick, let me know what you find with respect to a more elegant solution, and I will update the thread and mark it as resolved.

    Jeff
  • Scratch that, it runs under the debugger. My test equipment needed a reboot. Now I see the same behavior as before, except that I do not need to manually enable the LPSC.
  • Hello Jeff,

    Good to know that we can force the LPSC to be enabled by tricking the PM into thinking that something in Linux is using it - hopefully that means we are on the right track.

    1) Could you verify your initialization sequence now? Following up on a snippet from one of our RTOS engineers: "He should not be connecting to the DSP using GEL in CCS. To properly debug the DSP side, he needs to connect to the core (without using GEL) after it’s already been loaded by Linux and then load only the symbols to debug"

    2) Is everything behaving as expected, or are there issues? (e.g., interrupts working now?)

    3) any other observations we should know about?

    If this seems like an appropriate solution, I will keep digging for a more elegant implementation.
  • Nick,

    To Clarify, here is my old, working procedure where I load the DSP using CCS:

    1. Power on board with Linux
    2. Use Linux to configure SOC, Power on DSP, set up external devices necessary for signal path
    3. Connect debugger using target configuration, no GEL loaded
    4. After connecting to DSP, load gel.  This avoids OnConnect() running, which would cause the situation the RTOS engineer is concerned about
    5. Use ONLY the SetAllPscOn() function to enable the PSC
    6. Remove GEL so that I don't forget it's loaded next time I connect, accidentally configuring the device through GEL.
    7. Use CCS to load program
    8. Run program

    The new working procedure, still using CCS, is as follows:

    1. Power on board with Linux
    2. Use Linux to configure SOC, Power on DSP, set up external devices necessary for signal path
    3. Connect debugger using target configuration, no GEL loaded
    4. Use CCS to load program
    5. Run program

    I am now having some difficulty seeing the debug console output, as it only seems to print on crash.  It's probable that I am not using the logging resources properly.

    The procedure that still does not work is this:

    1. Power on board with Linux
    2. Use Linux to configure SOC, Power on DSP, set up external devices necessary for signal path
    3. Reset DSP
      1. mpmcl reset dsp0
    4. Load DSP
      1. mpmcl load dsp0 ./filename.out
    5. Run program
      1. mpmcl run dsp0

    If I then connect the debugger (no GEL) and load the symbols, the debugger claims there are no loaded symbols for the PC location.  I am unable to stop the processor anywhere there is a recognized symbol.  
    Also worth noting, when the processor is started in this manner, a few samples get through (not exactly sure how many), but the data flow stops shortly after it starts.  This combination of issues is what led me to think there might be a memory mapping issue, since the symbols/breakpoints all seem to work when the application is loaded through CCS.

  • Hello Jeff,

    Further clarification on the procedure that still does not work: Do you mean the application runs as expected, but the CCS debugging process does not work? Or is the application not running properly, and debugging in CCS does not work properly?

    Regards,
    Nick
  • The application neither runs as expected, nor does the debugging in CCS work.

    The behavior of the application is different when loaded from CCS vs MPMCL. When loaded from CCS, the application runs, enters the audio task, sets up the McASP and EDMA, primes the buffers, begins transfers, and does not stop passing audio. When loaded through MPMCL, the application runs until the first couple of transfers (to the best of my knowledge) and then stops executing transfers. I only have what information I am able to pipe through the DSP Trace using the debugfs and what I can observe externally, since the debug symbols/breakpoints aren't working.
  • Hello Jeff, 

    I think I misunderstood your application. The DSP is the only core using the McASP, right? In that case, we would not want to give Linux the chance to mess with the McASP. In the Linux device tree, McASP should be status = disabled.

    Does the DSP McASP setup code follow the process described in K2G TRM: 5.2.2.6.2 Module State Transitions ?

    Regards, 

    Nick

  • Nick,

    The DSP is the only core using the McASP; however, it was recommended to me that I let one core handle all device configuration. If I were to change the status to disabled, it is my understanding that Linux would not enable the LPSC and the application would require the RTOS to control the LPSC. I chose this path (ARM configuring everything) because of this post: e2e.ti.com/.../612298
    It is certainly possible that this is not the correct course of action, but I found with both the OMAP-L138 evm I worked with prior and this custom K2G board that enabling the PSC from RTOS caused problems.

    All McASP setup code is directly from the McASP example projects that ship with the PDK/RTOS installation. My PDK Version is 1.0.8. The example uses the McASP Driver, which follows the process described in the TRM as far as I know.

    Jeff
  • Hello Jeff,

    I'm sorry for the delay. The RTOS guys tell me that it makes sense to do system initialization in ARM (pinmux, PRCM, DDR init, PLL setup), but the DSP should do the McASP initialization - and that includes enabling the LPSC.

    To start, disable McASP in the device tree so ARM does not try to mess with it.

    The MCASP Loopback example has board init code which should be removed (enabling PSC for all modules and pinmuxing should be done in ARM). I was told the EDMA used in the McASP loopback example might provide an issue since they do not know how/if the Linux size is reserving DMA resources from the RTOS DSP. Let's try setting the LPSC registers directly from the DSP and see if the clocks will stay enabled if Linux does not know about them.

    Note: I was told the DSP should interact with BOOTCFG_KICK0 and BOOTCFG_KICK1 when trying to set BOOT_CFG registers (which include LPSC registers). "Due to an erratum in C6678, Usage Note 4 in www.ti.com/.../sprz334h.pdf, all multicore platforms will inherit this from C66x. Linux initialization will leave it unlocked due to the erratum. When DSP tries to access the kick register, I have seen issues in e2e forum that Linux gets hung. It usually happens when CSL tries to do CSL_xbarDmaConfigure or CSL_xbarIrqConfigure in AM5x and KS2 and CSL_sysCfgUnlockKicker in OMAP-L138... The correct behavior for DSP or CSL is to read the kick register value first, if unlocked then don’t do unlock again. When locking it, it should restore the previous value instead of writing value to lock it directly."

    Regards,
    Nick
  • Nick,

    No worries about the delay.   I've been able to continue development without starting from Linux without issue, so this has become a bit of a side project.  

    So, if I understand you correctly, I need to:

    1. Undo the changes to the McASP driver in the Linux source.
    2. Disable McASP in device tree (but leave pinmux in place)
    3. Ensure that the necessary DMA resources are reserved in Linux Device Tree (I think I did this.)
    4. Re-write the hardware setup function (audio_evminit.c:configureAudio(void)) to enable LPSC for McASP

    and this should yield a somewhat happier system... or at least a more elegant solution.

    It may be a few days before I get to this, as I'm working on other parts of the hardware validation for this product.

    Also, I just want to check on something.  I made my own RTSC platform following one of the various CCSv5 tutorials on the matter.  I can't edit the platform I made, but that's another issue.  This allowed me to change the DSP memory map a little bit.  Is it possible that changes on the CCS side of things to the DSP memory map (without necessarily changing how mpm deals with the memory map) could impact my ability to load/run software on the DSP from Linux?  I have a very limited understanding of how mpmcl chooses where to load the program, but I have observed that the debugger can't seem to find the program when I load the program through mpmcl and load the symbols in CCS.  This leads me to believe that there is something wrong with the memory map between MPM and CCS.

    Thanks for all of your help,

    Jeff

  • Hi, Jeff,

    The memory map defined in DSP needs to match with that in resource table which is used by Linux to program the MMU. Changing the memory map on the CCS side would impact what Linux kernel. I looped in DSP engineer who would have more insight on the DSP memory mapping.

    Rex
  • Hello Jeff,

    1. Yes.
    2. Yes.
    3. Maybe? I haven't looked into this. Stick with what you've got for now, DMA was just flagged as a potential future tripping point by the RTOS team depending on your use case.  
    4. Yes. Comment out the call to Board_init(arg), since this function does a lot of that initialization we want the ARM to do and might mess up something on the Linux side. If you need to see the details of what that function is doing, it is defined in pdk_k2g_1_0_9_packages/ti/board/src/evmK2G/ . Then you can implement the kick check and set the LPSC.

    Double checking on your use case: is this purely in DSP? e.g. audio in at McASP, DSP processes it, DSP sends it out somewhere? Or is the audio data passed back from the DSP into ARM, eg if you wanted to stream it to the cloud for voice recognition?

    Regards, 

    Nick

  • Nick,

    Sounds good. I'll let you know when I get to it.

    For now, yes, it's entirely in the DSP. DSP receives, DSP processes, DSP transmits. It might be nice to be able to pass audio data via IPC from the ARM to the DSP so that the ARM could use the DSP as a sort of media player, but that's a task for later, and in this case the ARM still would not have control of the McASP.

    Rex,

    Thank you for the input. I look forward to hearing what the DSP engineer has to say. I'll post any progress I make on the memory map here.

    Jeff
  • Nick,

    With respect to the LPSC setting from RTOS, I noticed that the McASP driver attempts to set the LPSC (at least the source references it mcasp_drv.c:5563:Mcasp_localLpscOn()).  Wouldn't this negate the need to manually enable the LPSC?

    I have yet to implement the device tree changes.  That will likely happen sometime this week.

    Jeff

  • Hello Jeff,

    Maybe? That function returns a "MCASP_COMPLETED" regardless of whether it accomplishes anything if BIOS_PWRM_ENABLE is not defined. I would be interested to see if a) BIOS_PWRM_ENABLE is defined for you, and b) what the function returns when it is called. It didn't look like the Power_setDependency function that Mcasp_localLpscOn calls messes with the kick registers, but I did not drill down far enough to be sure.

    Regards,
    Nick
  • Hi Nick,

    It's hard to tell if BIOS_PWRM_ENABLE is defined since the McASP libraries came precompiled with the SDK. That said, a text search on the entire PDK directory structure shows no mention of it being defined, so I am going to assume not.

    I did some searching for what that compiler switch does and found this post: e2e.ti.com/.../123279
    which seems to suggest that I wouldn't need to enable the switch for my purposes. I don't need any frequency/voltage scaling for this product, and that is what the post says the compiler switch would enable. That said, that's for another processor, so things could be different here.

    In this processor, the power management is being handled by the M4 Core running the SCI firmware, correct? Are there rules about which cores can interface with the power manager? Could it be that having the SCI processor running is preventing the LPSC function from enabling the peripheral?

    Jeff
  • Hello Nick,

    I have some updates.  I have finally been able to implement the suggested changes.  I removed the change I made to the McASP linux driver, disabled the device tree node, and modified the board init function.  I simply modified the pscConfigs array in evmK2G_clock.c to only include the PSC I needed, then I changed the Board_init(arg) call to only take BOARD_INIT_MODULE_CLOCK as a parameter.  With this change, the program will run when I start it with the debugger.

    At the present moment, I cannot get the application to run through MPMCL.  The log (/var/log/messages) shows that the memory allocation is failing.  I suspect this has something to do with the memory map.  I'm still waiting to hear from the DSP engineer that was mentioned earlier.

    Jeff

  • Hello Jeff,

    Sorry for the delay. I pinged our DSP experts to see if they can comment.

    EDIT 7/16/2018: I moved Jeff's response asking about the resource table and IPC here. This particular thread will continue discussing the issue of LPSC, but might be influenced by the discussion at that new thread.


    Regards,
    Nick

  • Since the new topic has been split to a new thread, I will mark this issue as resolved.

    Summary of the solution:
    Since ARM never needs to take control of the peripheral, the DSP can do the initialization for the McASP, including the LPSC. To do this, the board library was used and modified such that calling Board_init( BOARD_INIT_MODULE_CLOCK) sets up only the LPSC needed. There may be more elegant solutions to this problem (i.e. call the LPSC setup function directly) but this solution works for me. It was required that the Linux device tree set up only the pinmux for the McASP and that the McASP remain "disabled" in the device tree.

    Much thanks to Yordan and Nick for their assistance on this issue.

    Jeff