8daeffb058
in sirfsoc gpio probe(), we create 5 irq_domains for 5 gpio banks. but in irq_create_of_mapping() of irqchip core level, irq_find_host() can only return the 1st irq_domain attached the pinctrl dt device node as we can see from the codes: unsigned int irq_create_of_mapping(struct device_node *controller, const u32 *intspec, unsigned int intsize) { struct irq_domain *domain; ... domain = controller ? irq_find_host(controller) : irq_default_domain; } struct irq_domain *irq_find_host(struct device_node *node) { struct irq_domain *h, *found = NULL; int rc; /* We might want to match the legacy controller last since * it might potentially be set to match all interrupts in * the absence of a device node. This isn't a problem so far * yet though... */ mutex_lock(&irq_domain_mutex); list_for_each_entry(h, &irq_domain_list, link) { if (h->ops->match) rc = h->ops->match(h, node); else rc = (h->of_node != NULL) && (h->of_node == node); if (rc) { found = h; break; } } mutex_unlock(&irq_domain_mutex); return found; } for sirfsoc, the 1st irq_domain attached to the device_node(controller) only can do linear for the 1st 32 gpios. so for devices who use gpio hwirq above 32 and put the information in dt like: tangoc-ts@5c{ compatible = "pixcir,tangoc-ts"; + interrupt-parent = <&gpio>; + interrupts = <34 0>; }; we will fail to get the virq for these devices as hwirq will be bigger than domain->revmap_data.linear.size in: unsigned int irq_linear_revmap(struct irq_domain *domain, irq_hw_number_t hwirq) { /* Check revmap bounds; complain if exceeded */ if (WARN_ON(hwirq >= domain->revmap_data.linear.size)) return 0; return domain->revmap_data.linear.revmap[hwirq]; } this patch drops redundant irq_domain and keep only one to fix the problem. Signed-off-by: Barry Song <Baohua.Song@csr.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org> |
||
---|---|---|
.. | ||
mvebu | ||
sh-pfc | ||
sirf | ||
spear | ||
vt8500 | ||
core.c | ||
core.h | ||
devicetree.c | ||
devicetree.h | ||
Kconfig | ||
Makefile | ||
pinconf-generic.c | ||
pinconf.c | ||
pinconf.h | ||
pinctrl-ab8500.c | ||
pinctrl-ab8505.c | ||
pinctrl-ab8540.c | ||
pinctrl-ab9540.c | ||
pinctrl-abx500.c | ||
pinctrl-abx500.h | ||
pinctrl-adi2-bf54x.c | ||
pinctrl-adi2-bf60x.c | ||
pinctrl-adi2.c | ||
pinctrl-adi2.h | ||
pinctrl-as3722.c | ||
pinctrl-at91.c | ||
pinctrl-baytrail.c | ||
pinctrl-bcm2835.c | ||
pinctrl-coh901.c | ||
pinctrl-coh901.h | ||
pinctrl-exynos.c | ||
pinctrl-exynos.h | ||
pinctrl-exynos5440.c | ||
pinctrl-falcon.c | ||
pinctrl-imx.c | ||
pinctrl-imx.h | ||
pinctrl-imx1-core.c | ||
pinctrl-imx1.h | ||
pinctrl-imx6dl.c | ||
pinctrl-imx6q.c | ||
pinctrl-imx6sl.c | ||
pinctrl-imx23.c | ||
pinctrl-imx25.c | ||
pinctrl-imx27.c | ||
pinctrl-imx28.c | ||
pinctrl-imx35.c | ||
pinctrl-imx50.c | ||
pinctrl-imx51.c | ||
pinctrl-imx53.c | ||
pinctrl-lantiq.c | ||
pinctrl-lantiq.h | ||
pinctrl-msm.c | ||
pinctrl-msm.h | ||
pinctrl-msm8x74.c | ||
pinctrl-mxs.c | ||
pinctrl-mxs.h | ||
pinctrl-nomadik-db8500.c | ||
pinctrl-nomadik-db8540.c | ||
pinctrl-nomadik-stn8815.c | ||
pinctrl-nomadik.c | ||
pinctrl-nomadik.h | ||
pinctrl-palmas.c | ||
pinctrl-rockchip.c | ||
pinctrl-s3c24xx.c | ||
pinctrl-s3c64xx.c | ||
pinctrl-samsung.c | ||
pinctrl-samsung.h | ||
pinctrl-single.c | ||
pinctrl-st.c | ||
pinctrl-sunxi-pins.h | ||
pinctrl-sunxi.c | ||
pinctrl-sunxi.h | ||
pinctrl-tb10x.c | ||
pinctrl-tegra.c | ||
pinctrl-tegra.h | ||
pinctrl-tegra20.c | ||
pinctrl-tegra30.c | ||
pinctrl-tegra114.c | ||
pinctrl-tegra124.c | ||
pinctrl-tz1090-pdc.c | ||
pinctrl-tz1090.c | ||
pinctrl-u300.c | ||
pinctrl-utils.c | ||
pinctrl-utils.h | ||
pinctrl-vf610.c | ||
pinctrl-xway.c | ||
pinmux.c | ||
pinmux.h |