Hi,
I'm trying to enable KGDB in linux-imx kernel for debugging. I did the following steps:
The panic info is blew:
[ 74.652531] sysrq: SysRq : DEBUG
[ 74.655892] Unhandled fault: imprecise external abort (0x1c06) at 0x76ee328c
[ 74.662958] pgd = 8866c000
[ 74.665676] [76ee328c] *pgd=88644831, *pte=830f259f, *ppte=830f2e7e
[ 74.672018] Internal error: : 1c06 [#1] PREEMPT SMP ARM
[ 74.677294] KGDB: re-enter exception: ALL breakpoints killed
[ 74.682969] ---[ end trace d61e9a1fd52b50df ]---
[ 74.687606] Unhandled fault: imprecise external abort (0x1c06) at 0x76ee328c
[ 74.694664] pgd = 8866c000
[ 74.697382] [76ee328c] *pgd=88644831, *pte=830f259f, *ppte=830f2e7e
[ 74.703711] Internal error: : 1c06 [#2] PREEMPT SMP ARM
[ 74.708992] CPU: 0 PID: 152 Comm: sh Tainted: G D 4.1.15-00158-g30278abfe097-dirty #1
[ 74.717959] Hardware name: Freescale i.MX6 Ultralite (Device Tree)
[ 74.724191] [<800161e0>] (unwind_backtrace) from [<80012748>] (show_stack+0x10/0x14)
[ 74.731967] [<80012748>] (show_stack) from [<80809434>] (dump_stack+0x84/0xc4)
[ 74.739220] [<80809434>] (dump_stack) from [<8009d8fc>] (kgdb_handle_exception+0x1fc/0x20c)
[ 74.747600] [<8009d8fc>] (kgdb_handle_exception) from [<800157dc>] (kgdb_notify+0x24/0x3c)
[ 74.755891] [<800157dc>] (kgdb_notify) from [<8004fe04>] (notifier_call_chain+0x44/0x84)
[ 74.764010] [<8004fe04>] (notifier_call_chain) from [<80050088>] (atomic_notifier_call_chain+0x34/0x48)
[ 74.773429] [<80050088>] (atomic_notifier_call_chain) from [<80050608>] (notify_die+0x38/0x40)
[ 74.782066] [<80050608>] (notify_die) from [<80012848>] (die+0xfc/0x3f0)
[ 74.788789] [<80012848>] (die) from [<80009304>] (do_DataAbort+0xb4/0xb8)
[ 74.795600] [<80009304>] (do_DataAbort) from [<800131d8>] (__dabt_svc+0x38/0x60)
[ 74.803009] Exception stack(0x88799be0 to 0x88799c28)
[ 74.808082] 9be0: 8829c410 0000000a 00005008 a0950000 80c57f19 80c57f18 80c57f18 0000002b
[ 74.816279] 9c00: 80c589d8 80c58ae8 80c53aac 00000000 881bd000 88799c28 8009f838 803618d0
[ 74.824467] 9c20: 000d0093 ffffffff
[ 74.827987] [<800131d8>] (__dabt_svc) from [<803618d0>] (imx_poll_put_char+0x20/0x2c)
[ 74.835844] [<803618d0>] (imx_poll_put_char) from [<8009f838>] (vkdb_printf+0x1d4/0xa30)
[ 74.843961] [<8009f838>] (vkdb_printf) from [<800a00b8>] (kdb_printf+0x24/0x34)
[ 74.851296] [<800a00b8>] (kdb_printf) from [<800a41b0>] (kdb_main_loop+0x100/0x7d0)
[ 74.858974] [<800a41b0>] (kdb_main_loop) from [<800a7080>] (kdb_stub+0x2ac/0x508)
[ 74.866480] [<800a7080>] (kdb_stub) from [<8009d2e0>] (kgdb_cpu_enter+0x414/0x710)
[ 74.874073] [<8009d2e0>] (kgdb_cpu_enter) from [<8009d7f8>] (kgdb_handle_exception+0xf8/0x20c)
[ 74.882707] [<8009d7f8>] (kgdb_handle_exception) from [<80015790>] (kgdb_compiled_brk_fn+0x28/0x30)
[ 74.891774] [<80015790>] (kgdb_compiled_brk_fn) from [<800090f8>] (do_undefinstr+0xe4/0x190)
[ 74.900231] [<800090f8>] (do_undefinstr) from [<800132ec>] (__und_svc_finish+0x0/0x34)
[ 74.908159] Exception stack(0x88799e70 to 0x88799eb8)
[ 74.913226] 9e60: 00000067 80a485c4 00000000 00000000
[ 74.921422] 9e80: 80c53aa0 80c53aa4 80b9a504 00000067 00000000 88798000 00000000 013f7008
[ 74.929614] 9ea0: 00000000 88799eb8 8034fa1c 8009c884 600d0013 ffffffff
[ 74.936251] [<800132ec>] (__und_svc_finish) from [<8009c884>] (kgdb_breakpoint+0x44/0x78)
[ 74.944454] [<8009c884>] (kgdb_breakpoint) from [<8034fa1c>] (__handle_sysrq+0xac/0x178)
[ 74.952570] [<8034fa1c>] (__handle_sysrq) from [<8034ff14>] (write_sysrq_trigger+0x38/0x48)
[ 74.960951] [<8034ff14>] (write_sysrq_trigger) from [<80146c64>] (proc_reg_write+0x5c/0x84)
[ 74.969330] [<80146c64>] (proc_reg_write) from [<800f4e10>] (__vfs_write+0x20/0xdc)
[ 74.977011] [<800f4e10>] (__vfs_write) from [<800f55ec>] (vfs_write+0x90/0x164)
[ 74.984345] [<800f55ec>] (vfs_write) from [<800f5e10>] (SyS_write+0x44/0x9c)
[ 74.991419] [<800f5e10>] (SyS_write) from [<8000f480>] (ret_fast_syscall+0x0/0x3c)
[ 74.999003] Kernel panic - not syncing: Recursive entry to debugger
----------------------------------------------------------------------------------------------------------------
It seems that there may be some errors in the functionimx_poll_putchar.After several nights of debugging, I have found that this panic is caused because the TXEN bit in UCR2 register for uart2(ttymxc1) is not enable.
And I think which should be enable in imx_poll_init:
static int imx_poll_init(struct uart_port *port)
{
struct imx_port *sport = (struct imx_port *)port;
unsigned long flags;
unsigned long temp;
int retval;
retval = clk_prepare_enable(sport->clk_ipg);
if (retval)
return retval;
retval = clk_prepare_enable(sport->clk_per);
if (retval)
clk_disable_unprepare(sport->clk_ipg);
imx_setup_ufcr(sport, 0);
spin_lock_irqsave(&sport->port.lock, flags);
temp = readl(sport->port.membase + UCR1);
if (is_imx1_uart(sport))
temp |= IMX1_UCR1_UARTCLKEN;
temp |= UCR1_UARTEN | UCR1_RRDYEN;
temp &= ~(UCR1_TXMPTYEN | UCR1_RTSDEN);
writel(temp, sport->port.membase + UCR1);
temp = readl(sport->port.membase + UCR2);
temp |= UCR2_RXEN;
writel(temp, sport->port.membase + UCR2);
spin_unlock_irqrestore(&sport->port.lock, flags);
return 0;
}
At the fourth to last line, maybe should aslo enable UCR2_TXEN . like this:
temp |= (UCR2_RXEN | UCR2_TXEN);
After modify that line, my problem has been solved . I'm not sure if this is a bug.
I hope someone could check about this. And if this is a bug, I'd like to submit a patch or pull request to this.
Thanks.
Hi 972931182
reason may be versions incompatibility of software components, so one can try
to rebuild all image from scratch using revisions described in Release Notes document for
each BSP on linux documentation link:
Recommended to try latest Linux 5.4.47_2.2.0 i.MX Linux Release Notes
Best regards
igor
Thanks for your reply, I will try to use the latest Linux 5.4.47_2.2.0 and post the result at here later.