Re: [PATCH V3 16/17] irqchip/gic: Prepare for adding platform driver
From: Marc Zyngier <hidden>
Date: 2016-05-06 14:27:38
Also in:
linux-omap, linux-tegra, lkml
From: Marc Zyngier <hidden>
Date: 2016-05-06 14:27:38
Also in:
linux-omap, linux-tegra, lkml
On Fri, 6 May 2016 15:09:51 +0100 Jon Hunter [off-list ref] wrote: Hi Jon, [...]
quoted
+int gic_of_setup(struct device_node *node, struct device *dev, + struct gic_chip_data **gicp) +{ + struct gic_chip_data *gic; - *cpu_base = of_iomap(node, 1); - if (WARN(!*cpu_base, "unable to map gic cpu registers\n")) { - iounmap(*dist_base); - return -ENOMEM; + if (!node || !gicp) + return -EINVAL; + + if (dev) { + *gicp = devm_kzalloc(dev, sizeof(*gic), GFP_KERNEL); + if (!*gicp) + return -ENOMEM; } - if (of_property_read_u32(node, "cpu-offset", percpu_offset)) - *percpu_offset = 0; + gic = *gicp; + + gic->raw_dist_base = of_iomap(node, 0); + if (WARN(!gic->raw_dist_base, "unable to map gic dist registers\n")) + goto err; + + gic->raw_cpu_base = of_iomap(node, 1); + if (WARN(!gic->raw_cpu_base, "unable to map gic cpu registers\n")) + goto err; + + if (of_property_read_u32(node, "cpu-offset", &gic->percpu_offset)) + gic->percpu_offset = 0; + gic->chip.parent_device = dev;We can't initialise the device here as it gets overwritten in the gic_init_bases. So I have had to re-organise things a bit. Good news is that I have eliminated the call from the platform driver to gic_init_bases so we only have a single call to initialise the GIC.
Ah, good. That sounds a lot better. Looking forward to v4. Thanks, M. -- Jazz is not dead. It just smells funny.