irq: add "dump_irqs" command support
Change-Id: Ia20bc3b0f4dc600f311ba3de0e75714b5d4c002c Signed-off-by: Joseph Chen <chenjh@rock-chips.com>
This commit is contained in:
parent
ae63f11992
commit
92f4f0904b
|
|
@ -405,3 +405,39 @@ int disable_interrupts(void)
|
||||||
{
|
{
|
||||||
return cpu_local_irq_disable();
|
return cpu_local_irq_disable();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int do_dump_irqs(cmd_tbl_t *cmdtp, int flag,
|
||||||
|
int argc, char * const argv[])
|
||||||
|
|
||||||
|
{
|
||||||
|
struct udevice *dev;
|
||||||
|
char *drv_name;
|
||||||
|
int pirq;
|
||||||
|
|
||||||
|
printf(" IRQ En Handler Driver Name Count\n");
|
||||||
|
printf("----------------------------------------------------------------------\n");
|
||||||
|
|
||||||
|
for (pirq = 0; pirq < PLATFORM_MAX_IRQ; pirq++) {
|
||||||
|
if (!irq_desc[pirq].handle_irq)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
dev = (struct udevice *)irq_desc[pirq].data;
|
||||||
|
if (strstr(dev->name, "gpio"))
|
||||||
|
drv_name = "IRQ";
|
||||||
|
else
|
||||||
|
drv_name = dev->driver->name;
|
||||||
|
|
||||||
|
printf(" %3d %d 0x%08lx %-12s %-12s %d\n",
|
||||||
|
pirq, irq_desc[pirq].flag & IRQ_FLG_ENABLE ? 1 : 0,
|
||||||
|
(ulong)irq_desc[pirq].handle_irq,
|
||||||
|
drv_name, dev->name, irq_desc[pirq].count);
|
||||||
|
|
||||||
|
virqs_show(pirq);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
U_BOOT_CMD(
|
||||||
|
dump_irqs, 1, 1, do_dump_irqs, "Dump IRQs", ""
|
||||||
|
);
|
||||||
|
|
|
||||||
|
|
@ -36,6 +36,7 @@ struct irq_chip *arch_virq_get_irqchip(void);
|
||||||
* IRQ-VIRTUAL
|
* IRQ-VIRTUAL
|
||||||
*/
|
*/
|
||||||
int bad_virq(int irq);
|
int bad_virq(int irq);
|
||||||
|
void virqs_show(int pirq);
|
||||||
void virq_free_handler(int irq);
|
void virq_free_handler(int irq);
|
||||||
int virq_install_handler(int irq, interrupt_handler_t *handler, void *data);
|
int virq_install_handler(int irq, interrupt_handler_t *handler, void *data);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -102,6 +102,34 @@ int bad_virq(int irq)
|
||||||
return !find_virq_desc(irq);
|
return !find_virq_desc(irq);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void virqs_show(int pirq)
|
||||||
|
{
|
||||||
|
struct virq_data *vdata;
|
||||||
|
struct virq_desc *desc;
|
||||||
|
struct udevice *dev;
|
||||||
|
int num;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
desc = find_virq_desc_by_pirq(pirq);
|
||||||
|
if (!desc)
|
||||||
|
return;
|
||||||
|
|
||||||
|
vdata = desc->virqs;
|
||||||
|
num = desc->irq_end - desc->irq_base;
|
||||||
|
|
||||||
|
for (i = 0; i < num; i++) {
|
||||||
|
if (!vdata[i].handle_irq)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
dev = (struct udevice *)vdata[i].data;
|
||||||
|
printf(" %3d %d 0x%08lx %-12s |-- %-12s %d\n",
|
||||||
|
vdata[i].irq,
|
||||||
|
vdata[i].flag & IRQ_FLG_ENABLE ? 1 : 0,
|
||||||
|
(ulong)vdata[i].handle_irq, dev->driver->name, dev->name,
|
||||||
|
vdata[i].count);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int virq_install_handler(int irq, interrupt_handler_t *handler, void *data)
|
int virq_install_handler(int irq, interrupt_handler_t *handler, void *data)
|
||||||
{
|
{
|
||||||
struct virq_desc *desc;
|
struct virq_desc *desc;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue