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();
|
||||
}
|
||||
|
||||
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
|
||||
*/
|
||||
int bad_virq(int irq);
|
||||
void virqs_show(int pirq);
|
||||
void virq_free_handler(int irq);
|
||||
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);
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
struct virq_desc *desc;
|
||||
|
|
|
|||
Loading…
Reference in New Issue