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.

PROCESSOR-SDK-AM62X: AM6254 : pressure test discover question !

Part Number: PROCESSOR-SDK-AM62X

Tool/software:

Hi,

Below are the SDK version we using:

ti-processor-sdk-linux-am62xx-evm-08.06.00.42

mcu_plus_sdk_am62x_08_06_00_18

We found the following two problems during a prolonged system stress test.

It will be repeated in about a day of testing.

When the system has a problem, it prints over and over again.

We can't solve it.

log attachments.

RCU stall :

[   69.781152] rcu: INFO: rcu_sched self-detected stall on CPU
[   69.786748] rcu:     0-....: (1 GPs behind) idle=d92/1/0x4000000000000004 softirq=900/901 fqs=5319
[   69.795514]     (t=15000 jiffies g=425 q=839)
[   69.799598] Task dump for CPU 0:
[   69.802816] task:weston-desktop- state:R  running task     stack:    0 pid:  624 ppid:   603 flags:0x00000002
[   69.812714] Call trace:
[   69.815169]  dump_backtrace+0x0/0x1b0
[   69.818822]  show_stack+0x18/0x30
[   69.822130]  sched_show_task+0x14c/0x178
[   69.826046]  dump_cpu_task+0x44/0x54
[   69.829610]  rcu_dump_cpu_stacks+0xbc/0x100
[   69.833791]  rcu_sched_clock_irq+0x710/0x910
[   69.838052]  update_process_times+0x60/0xa0
[   69.842231]  tick_sched_handle.isra.0+0x34/0x50
[   69.846749]  tick_sched_timer+0x4c/0xa8
[   69.850575]  __hrtimer_run_queues+0xe0/0x218
[   69.854832]  hrtimer_interrupt+0x114/0x328
[   69.858924]  arch_timer_handler_phys+0x34/0x48
[   69.863359]  handle_percpu_devid_irq+0x84/0x148
[   69.867876]  generic_handle_irq+0x30/0x48
[   69.871872]  __handle_domain_irq+0x64/0xc0
[   69.875959]  gic_handle_irq+0x58/0x128
[   69.879696]  el1_irq+0xcc/0x180
[   69.882831]  vblank_disable_fn+0x7c/0x110
[   69.886828]  call_timer_fn.isra.0+0x24/0x80
[   69.891000]  run_timer_softirq+0x40c/0x5b0
[   69.895083]  efi_header_end+0x120/0x268
[   69.898909]  irq_exit+0xc0/0xe0
[   69.902039]  __handle_domain_irq+0x68/0xc0
[   69.906122]  gic_handle_irq+0x58/0x128
[   69.909858]  el0_irq_naked+0x4c/0x54

i2c controller timed out,  and  i2c interface uses a touch screen:

starting qlauncher... done.
[   11.257199] omap_i2c 20010000.i2c: controller timed out
[   12.310039] omap_i2c 20010000.i2c: controller timed out
[   13.365289] omap_i2c 20010000.i2c: controller timed out
[   14.421260] omap_i2c 20010000.i2c: controller timed out
[   15.449234] omap_i2c 20010000.i2c: controller timed out
[   15.454518] <<-GTP-ERROR->> I2C Read: 0x8040, 2 bytes failed, errcode: -110!
[   16.501281] omap_i2c 20010000.i2c: controller timed out
[   17.557297] omap_i2c 20010000.i2c: controller timed out
[   18.613252] omap_i2c 20010000.i2c: controller timed out
[   19.669345] omap_i2c 20010000.i2c: controller timed out
[   20.725245] omap_i2c 20010000.i2c: controller timed out
[   20.730590] <<-GTP-ERROR->> I2C Read: 0x8040, 2 bytes failed, errcode: -110!
[   21.785238] omap_i2c 20010000.i2c: controller timed out
[   22.837287] omap_i2c 20010000.i2c: controller timed out
[   23.893273] omap_i2c 20010000.i2c: controller timed out
[   24.949264] omap_i2c 20010000.i2c: controller timed out
[   25.977276] omap_i2c 20010000.i2c: controller timed out

  • Hi,

    Please apply the kernel patch attached below to see if it resolves the issue.

    diff --git a/drivers/gpu/drm/tidss/tidss_dispc.c b/drivers/gpu/drm/tidss/tidss_dispc.c
    index 5bcc9153a977..2cd18955d174 100644
    --- a/drivers/gpu/drm/tidss/tidss_dispc.c
    +++ b/drivers/gpu/drm/tidss/tidss_dispc.c
    @@ -939,6 +954,7 @@ void dispc_k3_clear_irqstatus(struct dispc_device *dispc, dispc_irq_t clearmask)
     {
     	unsigned int i;
     	u32 top_clear = 0;
    +	u32 val;
     
     	for (i = 0; i < dispc->feat->num_vps; ++i) {
     		if (clearmask & DSS_IRQ_VP_MASK(i)) {
    @@ -955,10 +971,18 @@ void dispc_k3_clear_irqstatus(struct dispc_device *dispc, dispc_irq_t clearmask)
     	if (dispc->feat->subrev == DISPC_K2G)
     		return;
     
    +	val = dispc_read(dispc, DISPC_IRQSTATUS);
    +	if (val > top_clear) {
    +		dev_warn_ratelimited(dispc->dev,
    +			"lvl1 irq 0x%x, lvl2 irqmask 0x%x\n", val, top_clear);
    +		top_clear = val;
    +	}
     	dispc_write(dispc, DISPC_IRQSTATUS, top_clear);
     
     	/* Flush posted writes */
    -	dispc_read(dispc, DISPC_IRQSTATUS);
    +	val = dispc_read(dispc, DISPC_IRQSTATUS);
    +	if (val)
    +		dev_warn_ratelimited(dispc->dev, "irq 0x%x not cleared\n", val);
     }
     
     static