--- a/drivers/of/platform.c 2022-05-26 18:46:15.551656025 +0200 +++ b/drivers/of/platform.c 2022-05-22 21:52:31.000000000 +0200 @@ -114,31 +114,35 @@ struct platform_device *of_device_alloc( struct device *parent) { struct platform_device *dev; - int rc, i, num_reg = 0; + int rc, i, num_reg = 0, num_irq; struct resource *res, temp_res; dev = platform_device_alloc("", PLATFORM_DEVID_NONE); if (!dev) return NULL; - /* count the io resources */ + /* count the io and irq resources */ while (of_address_to_resource(np, num_reg, &temp_res) == 0) num_reg++; + num_irq = of_irq_count(np); /* Populate the resource table */ - if (num_reg) { - res = kcalloc(num_reg, sizeof(*res), GFP_KERNEL); + if (num_irq || num_reg) { + res = kcalloc(num_irq + num_reg, sizeof(*res), GFP_KERNEL); if (!res) { platform_device_put(dev); return NULL; } - dev->num_resources = num_reg; + dev->num_resources = num_reg + num_irq; dev->resource = res; for (i = 0; i < num_reg; i++, res++) { rc = of_address_to_resource(np, i, res); WARN_ON(rc); } + if (of_irq_to_resource_table(np, res, num_irq) != num_irq) + pr_debug("not all legacy IRQ resources mapped for %pOFn\n", + np); } dev->dev.of_node = of_node_get(np);