genirq: Move irqchip runtime PM over to irq domain
Subsystems (12)
Marc Zyngier
maintainercover genirq: Move irqchip runtime PM over to irq domain
Our irq_chip data structure currently suffers from two problems:
(1) the 'name' field is often dynamically populated with a reference to the underlying HW (DT node dame, for example)
(2) the 'parent_device' which is used to implement runtime PM is also dynamically populated
(3) there is at least one instance of a subsystem messing with the internals of irq_chip structures (gpiochip_set_irq_hooks is what I know about)
These things mean that although the primary use of irq_chip is to only contain function pointers and other *static* information, the above two fields result in these structures being copied in a number of drivers. Eventually, it would be much better if the various drivers would use irq_chip as an 'ops' data structure (potentially made read-only), and keep the dynamic information somewhere more suitable.
For (2) we already have the irqdomain structure that is designed to deal with the context in which interrupts are used, and it makes sense to move the 'parent_device' field over to this structure. This is what this small series is doing, with some minor cleanup on the way.
(1) and (3) will be dealt in separate series (and I don't have a good solution for (3) yet).
Thanks,
M.
Marc Zyngier (12):
genirq: Allow the PM device to originate from irq domain irqchip/gic: Move PM device over to irq domain irqchip/renesas-intc-gpio: Move PM device over to irq domain irqchip/renesas-irqc: Move PM device over to irq domain irqchip/imx-intmux: Move PM device over to irq domain
gpio: mt7621: Kill parent_device usage
gpio: omap: Move PM device over to irq domain
gpio: rcar: Move PM device over to irq domain
gpio: tpmx86: Move PM device over to irq domain
pinctrl: npcm: Fix broken references to chip->parent_device
pinctrl: starfive: Move PM device over to irq domain
genirq: Kill irq_chip::parent_device
drivers/gpio/gpio-mt7621.c | 1 - drivers/gpio/gpio-omap.c | 7 ++++--- drivers/gpio/gpio-rcar.c | 2 +- drivers/gpio/gpio-tqmx86.c | 3 ++- drivers/irqchip/irq-gic.c | 12 +++++------ drivers/irqchip/irq-imx-intmux.c | 8 +++----- drivers/irqchip/irq-renesas-intc-irqpin.c | 3 ++- drivers/irqchip/irq-renesas-irqc.c | 3 ++- drivers/pinctrl/nuvoton/pinctrl-npcm7xx.c | 25 +++++++++++------------ drivers/pinctrl/pinctrl-starfive.c | 3 ++- include/linux/irq.h | 2 -- include/linux/irqdomain.h | 10 +++++++++ kernel/irq/chip.c | 20 +++++++++++++----- 13 files changed, 59 insertions(+), 40 deletions(-)
Signature · 1 line
2.30.2
Marc Zyngier
maintainerPATCH 1/12 genirq: Allow the PM device to originate from irq domain
As a preparation to moving the reference to the device used for runtime power management, add a new 'dev' field to the irqdomain structure for that exact purpose.
The irq_chip_pm_{get,put}() helpers are made aware of the dual location via a new private helper.
No functional change intended.
--- include/linux/irqdomain.h | 10 ++++++++++ kernel/irq/chip.c | 23 ++++++++++++++++++----- 2 files changed, 28 insertions(+), 5 deletions(-)
include/linux/irqdomain.h +10 -0
@@ -151,6 +151,8 @@ struct irq_domain_chip_generic;* @gc: Pointer to a list of generic chips. There is a helper function for * setting up one or more generic chips for interrupt controllers * drivers using the generic chip library which uses this pointer. +* @dev: Pointer to a device that the domain represent, and that will be +* used for power management purposes. * @parent: Pointer to parent irq_domain to support hierarchy irq_domains * * Revmap data, used internally by irq_domain
@@ -171,6 +173,7 @@ struct irq_domain {struct fwnode_handle *fwnode;enum irq_domain_bus_token bus_token;struct irq_domain_chip_generic *gc; +struct device *dev;#ifdef CONFIG_IRQ_DOMAIN_HIERARCHY struct irq_domain *parent;#endif
@@ -226,6 +229,13 @@ static inline struct device_node *irq_domain_get_of_node(struct irq_domain *d)return to_of_node (d->fwnode); } +static inline void irq_domain_set_pm_device (struct irq_domain *d, +struct device *dev) +{ +if (d) + d->dev = dev; +} +#ifdef CONFIG_IRQ_DOMAIN struct fwnode_handle *__irq_domain_alloc_fwnode (unsigned int type,int id,const char *name,phys_addr_t *pa);
kernel/irq/chip.c +18 -5
@@ -1558,6 +1558,17 @@ int irq_chip_compose_msi_msg(struct irq_data *data, struct msi_msg *msg)return 0 ; } +static struct device *irq_get_parent_device (struct irq_data *data) +{ +if (data->chip->parent_device) +return data->chip->parent_device; + +if (data->domain) +return data->domain->dev; + +return NULL ; +} +/** * irq_chip_pm_get - Enable power for an IRQ chip * @data: Pointer to interrupt specific data
@@ -1567,12 +1578,13 @@ int irq_chip_compose_msi_msg(struct irq_data *data, struct msi_msg *msg)*/ int irq_chip_pm_get (struct irq_data *data) { +struct device *dev =irq_get_parent_device (data);int retval; -if (IS_ENABLED (CONFIG_PM ) && data->chip->parent_device) { - retval =pm_runtime_get_sync (data->chip->parent_device); +if (IS_ENABLED (CONFIG_PM ) && dev) { + retval =pm_runtime_get_sync (dev);if (retval <0 ) { -pm_runtime_put_noidle (data->chip->parent_device); +pm_runtime_put_noidle (dev);return retval; } }
@@ -1590,10 +1602,11 @@ int irq_chip_pm_get(struct irq_data *data)*/ int irq_chip_pm_put (struct irq_data *data) { +struct device *dev =irq_get_parent_device (data);int retval =0 ; -if (IS_ENABLED (CONFIG_PM ) && data->chip->parent_device) - retval =pm_runtime_put (data->chip->parent_device); +if (IS_ENABLED (CONFIG_PM ) && dev) + retval =pm_runtime_put (dev);return (retval <0 ) ? retval :0 ; }
Signature · 1 line
2.30.2
Re: [PATCH 01/12] genirq: Allow the PM device to originate from irq domain
Quoted 10 lines · Marc Zyngier
As a preparation to moving the reference to the device used for runtime power management, add a new 'dev' field to the irqdomain structure for that exact purpose.
The irq_chip_pm_{get,put}() helpers are made aware of the dual location via a new private helper.
No functional change intended.
Signed-off-by Marc Zyngier <[email protected]>
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]
In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
Re: [PATCH 01/12] genirq: Allow the PM device to originate from irq domain
In reply to Marc ZyngierQuoted 8 lines · Marc Zyngier
As a preparation to moving the reference to the device used for runtime power management, add a new 'dev' field to the irqdomain structure for that exact purpose.
The irq_chip_pm_{get,put}() helpers are made aware of the dual location via a new private helper.
No functional change intended.
Works for me:
[irqchip: irq/irqchip-next] genirq: Allow the PM device to originate from irq domain
In reply to Marc ZyngierThe following commit has been merged into the irq/irqchip-next branch of irqchip:
The following commit has been merged into the irq/irqchip-next branch of irqchip:
Commit-ID: 1f8863bfb5ca500ea1c7669b16b1931ba27fce20 Gitweb: https://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms/1f8863bfb5ca500ea1c7669b16b1931ba27fce20 Author: Marc Zyngier <[email protected]> AuthorDate: Tue, 01 Feb 2022 12:02:59 Committer: Marc Zyngier <[email protected]> CommitterDate: Wed, 09 Feb 2022 13:35:56
genirq: Allow the PM device to originate from irq domain
As a preparation to moving the reference to the device used for runtime power management, add a new 'dev' field to the irqdomain structure for that exact purpose.
The irq_chip_pm_{get,put}() helpers are made aware of the dual location via a new private helper.
No functional change intended.
--- include/linux/irqdomain.h | 10 ++++++++++ kernel/irq/chip.c | 23 ++++++++++++++++++----- 2 files changed, 28 insertions(+), 5 deletions(-)
include/linux/irqdomain.h +10 -0
@@ -151,6 +151,8 @@ struct irq_domain_chip_generic;* @gc: Pointer to a list of generic chips. There is a helper function for * setting up one or more generic chips for interrupt controllers * drivers using the generic chip library which uses this pointer. +* @dev: Pointer to a device that the domain represent, and that will be +* used for power management purposes. * @parent: Pointer to parent irq_domain to support hierarchy irq_domains * * Revmap data, used internally by irq_domain
@@ -171,6 +173,7 @@ struct irq_domain {struct fwnode_handle *fwnode;enum irq_domain_bus_token bus_token;struct irq_domain_chip_generic *gc; +struct device *dev;#ifdef CONFIG_IRQ_DOMAIN_HIERARCHY struct irq_domain *parent;#endif
@@ -226,6 +229,13 @@ static inline struct device_node *irq_domain_get_of_node(struct irq_domain *d)return to_of_node (d->fwnode); } +static inline void irq_domain_set_pm_device (struct irq_domain *d, +struct device *dev) +{ +if (d) + d->dev = dev; +} +#ifdef CONFIG_IRQ_DOMAIN struct fwnode_handle *__irq_domain_alloc_fwnode (unsigned int type,int id,const char *name,phys_addr_t *pa);
kernel/irq/chip.c +18 -5
@@ -1558,6 +1558,17 @@ int irq_chip_compose_msi_msg(struct irq_data *data, struct msi_msg *msg)return 0 ; } +static struct device *irq_get_parent_device (struct irq_data *data) +{ +if (data->chip->parent_device) +return data->chip->parent_device; + +if (data->domain) +return data->domain->dev; + +return NULL ; +} +/** * irq_chip_pm_get - Enable power for an IRQ chip * @data: Pointer to interrupt specific data
@@ -1567,12 +1578,13 @@ int irq_chip_compose_msi_msg(struct irq_data *data, struct msi_msg *msg)*/ int irq_chip_pm_get (struct irq_data *data) { +struct device *dev =irq_get_parent_device (data);int retval; -if (IS_ENABLED (CONFIG_PM ) && data->chip->parent_device) { - retval =pm_runtime_get_sync (data->chip->parent_device); +if (IS_ENABLED (CONFIG_PM ) && dev) { + retval =pm_runtime_get_sync (dev);if (retval <0 ) { -pm_runtime_put_noidle (data->chip->parent_device); +pm_runtime_put_noidle (dev);return retval; } }
@@ -1590,10 +1602,11 @@ int irq_chip_pm_get(struct irq_data *data)*/ int irq_chip_pm_put (struct irq_data *data) { +struct device *dev =irq_get_parent_device (data);int retval =0 ; -if (IS_ENABLED (CONFIG_PM ) && data->chip->parent_device) - retval =pm_runtime_put (data->chip->parent_device); +if (IS_ENABLED (CONFIG_PM ) && dev) + retval =pm_runtime_put (dev);return (retval <0 ) ? retval :0 ; }
Marc Zyngier
maintainerPATCH 2/12 irqchip/gic: Move PM device over to irq domain
In reply to Marc ZyngierMove the reference to the GIC device over to the irq domain. This allows for some localised cleanup.
--- drivers/irqchip/irq-gic.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)
drivers/irqchip/irq-gic.c +6 -6
@@ -1127,13 +1127,12 @@ static const struct irq_domain_ops gic_irq_domain_ops = { .unmap = gic_irq_domain_unmap, }; -static void gic_init_chip (struct gic_chip_data *gic,struct device *dev, -const char *name,bool use_eoimode1) +static void gic_init_chip (struct gic_chip_data *gic,const char *name, +bool use_eoimode1) {/* Initialize irq_chip */ gic->chip = gic_chip; gic->chip.name = name; - gic->chip.parent_device = dev;if (use_eoimode1) { gic->chip.irq_mask = gic_eoimode1_mask_irq;
@@ -1268,10 +1267,10 @@ static int __init __gic_init_bases(struct gic_chip_data *gic,if (static_branch_likely (&supports_deactivate_key) && gic == &gic_data[0 ]) { name =kasprintf (GFP_KERNEL ,"GICv2" ); -gic_init_chip (gic,NULL , name, true); +gic_init_chip (gic, name, true); }else { name =kasprintf (GFP_KERNEL ,"GIC-%d" , (int )(gic-&gic_data[0 ])); -gic_init_chip (gic,NULL , name, false); +gic_init_chip (gic, name, false); } ret =gic_init_bases (gic, handle);
@@ -1460,7 +1459,7 @@ int gic_of_init_child(struct device *dev, struct gic_chip_data **gic, int irq)if (!*gic)return -ENOMEM ; -gic_init_chip (*gic, dev, dev->of_node->name, false); +gic_init_chip (*gic, dev->of_node->name, false); ret =gic_of_setup (*gic, dev->of_node);if (ret)
@@ -1472,6 +1471,7 @@ int gic_of_init_child(struct device *dev, struct gic_chip_data **gic, int irq)return ret; } +irq_domain_set_pm_device ((*gic)->domain, dev);irq_set_chained_handler_and_data (irq, gic_handle_cascade_irq, *gic);return 0 ;
Signature · 1 line
2.30.2
Re: [PATCH 02/12] irqchip/gic: Move PM device over to irq domain
Quoted 4 lines · Marc Zyngier
Move the reference to the GIC device over to the irq domain. This allows for some localised cleanup.
Signed-off-by Marc Zyngier <[email protected]>
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]
In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
[irqchip: irq/irqchip-next] irqchip/gic: Move PM device over to irq domain
In reply to Marc ZyngierThe following commit has been merged into the irq/irqchip-next branch of irqchip:
The following commit has been merged into the irq/irqchip-next branch of irqchip:
Commit-ID: e95f3efdeb499accf2b05333a1eac7862f5a10f6 Gitweb: https://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms/e95f3efdeb499accf2b05333a1eac7862f5a10f6 Author: Marc Zyngier <[email protected]> AuthorDate: Tue, 01 Feb 2022 12:03:00 Committer: Marc Zyngier <[email protected]> CommitterDate: Wed, 09 Feb 2022 13:35:56
irqchip/gic: Move PM device over to irq domain
Move the reference to the GIC device over to the irq domain. This allows for some localised cleanup.
--- drivers/irqchip/irq-gic.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)
drivers/irqchip/irq-gic.c +6 -6
@@ -1127,13 +1127,12 @@ static const struct irq_domain_ops gic_irq_domain_ops = { .unmap = gic_irq_domain_unmap, }; -static void gic_init_chip (struct gic_chip_data *gic,struct device *dev, -const char *name,bool use_eoimode1) +static void gic_init_chip (struct gic_chip_data *gic,const char *name, +bool use_eoimode1) {/* Initialize irq_chip */ gic->chip = gic_chip; gic->chip.name = name; - gic->chip.parent_device = dev;if (use_eoimode1) { gic->chip.irq_mask = gic_eoimode1_mask_irq;
@@ -1268,10 +1267,10 @@ static int __init __gic_init_bases(struct gic_chip_data *gic,if (static_branch_likely (&supports_deactivate_key) && gic == &gic_data[0 ]) { name =kasprintf (GFP_KERNEL ,"GICv2" ); -gic_init_chip (gic,NULL , name, true); +gic_init_chip (gic, name, true); }else { name =kasprintf (GFP_KERNEL ,"GIC-%d" , (int )(gic-&gic_data[0 ])); -gic_init_chip (gic,NULL , name, false); +gic_init_chip (gic, name, false); } ret =gic_init_bases (gic, handle);
@@ -1460,7 +1459,7 @@ int gic_of_init_child(struct device *dev, struct gic_chip_data **gic, int irq)if (!*gic)return -ENOMEM ; -gic_init_chip (*gic, dev, dev->of_node->name, false); +gic_init_chip (*gic, dev->of_node->name, false); ret =gic_of_setup (*gic, dev->of_node);if (ret)
@@ -1472,6 +1471,7 @@ int gic_of_init_child(struct device *dev, struct gic_chip_data **gic, int irq)return ret; } +irq_domain_set_pm_device ((*gic)->domain, dev);irq_set_chained_handler_and_data (irq, gic_handle_cascade_irq, *gic);return 0 ;
Marc Zyngier
maintainerPATCH 3/12 irqchip/renesas-intc-gpio: Move PM device over to irq domain
In reply to Marc ZyngierMove the reference to the device over to the irq domain.
--- drivers/irqchip/irq-renesas-intc-irqpin.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/irqchip/irq-renesas-intc-irqpin.c +2 -1
@@ -508,7 +508,6 @@ static int intc_irqpin_probe(struct platform_device *pdev) irq_chip = &p->irq_chip; irq_chip->name ="intc-irqpin" ; - irq_chip->parent_device = dev; irq_chip->irq_mask = disable_fn; irq_chip->irq_unmask = enable_fn; irq_chip->irq_set_type = intc_irqpin_irq_set_type;
@@ -523,6 +522,8 @@ static int intc_irqpin_probe(struct platform_device *pdev) goto err0; } +irq_domain_set_pm_device (p->irq_domain, dev); +if (p->shared_irqs) {/* request one shared interrupt */ if (devm_request_irq(dev, p->irq[0].requested_irq,
Signature · 1 line
2.30.2
Re: [PATCH 03/12] irqchip/renesas-intc-gpio: Move PM device over to irq domain
Hi Marc,
Quoted 3 lines · Marc Zyngier
Move the reference to the device over to the irq domain.
Signed-off-by Marc Zyngier <[email protected]>
Thanks for your patch!
s/gpio/irqpin/ in the one-line summary?
Wake-up still works fine on R-Mobile A1 and SH-Mobile AG5, so
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]
In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
Marc Zyngier
maintainerRe: [PATCH 03/12] irqchip/renesas-intc-gpio: Move PM device over to irq domain
Quoted 10 lines · Geert Uytterhoeven
Hi Marc,
Quoted 3 lines · Marc Zyngier
Move the reference to the device over to the irq domain.
Signed-off-by Marc Zyngier <[email protected]>Thanks for your patch!
s/gpio/irqpin/ in the one-line summary?
Indeed, now fixed.
Thanks,
M.
Signature · 1 line
Jazz is not dead. It just smells funny...
[irqchip: irq/irqchip-next] irqchip/renesas-intc-irqpin: Move PM device over to irq domain
In reply to Marc ZyngierThe following commit has been merged into the irq/irqchip-next branch of irqchip:
The following commit has been merged into the irq/irqchip-next branch of irqchip:
Commit-ID: c2ea6b9b03c1acde89c6100aff894e64386e72cc Gitweb: https://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms/c2ea6b9b03c1acde89c6100aff894e64386e72cc Author: Marc Zyngier <[email protected]> AuthorDate: Tue, 01 Feb 2022 12:03:01 Committer: Marc Zyngier <[email protected]> CommitterDate: Wed, 09 Feb 2022 13:36:44
irqchip/renesas-intc-irqpin: Move PM device over to irq domain
Move the reference to the device over to the irq domain.
--- drivers/irqchip/irq-renesas-intc-irqpin.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/irqchip/irq-renesas-intc-irqpin.c +2 -1
@@ -508,7 +508,6 @@ static int intc_irqpin_probe(struct platform_device *pdev) irq_chip = &p->irq_chip; irq_chip->name ="intc-irqpin" ; - irq_chip->parent_device = dev; irq_chip->irq_mask = disable_fn; irq_chip->irq_unmask = enable_fn; irq_chip->irq_set_type = intc_irqpin_irq_set_type;
@@ -523,6 +522,8 @@ static int intc_irqpin_probe(struct platform_device *pdev) goto err0; } +irq_domain_set_pm_device (p->irq_domain, dev); +if (p->shared_irqs) {/* request one shared interrupt */ if (devm_request_irq(dev, p->irq[0].requested_irq,
Marc Zyngier
maintainerPATCH 4/12 irqchip/renesas-irqc: Move PM device over to irq domain
In reply to Marc ZyngierMove the reference to the device over to the irq domain.
--- drivers/irqchip/irq-renesas-irqc.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/irqchip/irq-renesas-irqc.c +2 -1
@@ -188,13 +188,14 @@ static int irqc_probe(struct platform_device *pdev) p->gc->reg_base = p->cpu_int_base; p->gc->chip_types[0 ].regs.enable =IRQC_EN_SET ; p->gc->chip_types[0 ].regs.disable =IRQC_EN_STS ; - p->gc->chip_types[0 ].chip.parent_device = dev; p->gc->chip_types[0 ].chip.irq_mask = irq_gc_mask_disable_reg; p->gc->chip_types[0 ].chip.irq_unmask = irq_gc_unmask_enable_reg; p->gc->chip_types[0 ].chip.irq_set_type = irqc_irq_set_type; p->gc->chip_types[0 ].chip.irq_set_wake = irqc_irq_set_wake; p->gc->chip_types[0 ].chip.flags =IRQCHIP_MASK_ON_SUSPEND ; +irq_domain_set_pm_device (p->irq_domain, dev); +/* request interrupts one by one */ for (k =0 ; k < p->number_of_irqs; k++) { if (devm_request_irq(dev, p->irq[k].requested_irq,
Signature · 1 line
2.30.2
Re: [PATCH 04/12] irqchip/renesas-irqc: Move PM device over to irq domain
Quoted 3 lines · Marc Zyngier
Move the reference to the device over to the irq domain.
Signed-off-by Marc Zyngier <[email protected]>
Wake-up still works fine on R-Mobile APE6 and R-Car M2-W, so
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]
In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
[irqchip: irq/irqchip-next] irqchip/renesas-irqc: Move PM device over to irq domain
In reply to Marc ZyngierThe following commit has been merged into the irq/irqchip-next branch of irqchip:
The following commit has been merged into the irq/irqchip-next branch of irqchip:
Commit-ID: c3ec838e3a390e62cb71a11041db43d0b3b42c99 Gitweb: https://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms/c3ec838e3a390e62cb71a11041db43d0b3b42c99 Author: Marc Zyngier <[email protected]> AuthorDate: Tue, 01 Feb 2022 12:03:02 Committer: Marc Zyngier <[email protected]> CommitterDate: Wed, 09 Feb 2022 13:36:53
irqchip/renesas-irqc: Move PM device over to irq domain
Move the reference to the device over to the irq domain.
--- drivers/irqchip/irq-renesas-irqc.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/irqchip/irq-renesas-irqc.c +2 -1
@@ -188,13 +188,14 @@ static int irqc_probe(struct platform_device *pdev) p->gc->reg_base = p->cpu_int_base; p->gc->chip_types[0 ].regs.enable =IRQC_EN_SET ; p->gc->chip_types[0 ].regs.disable =IRQC_EN_STS ; - p->gc->chip_types[0 ].chip.parent_device = dev; p->gc->chip_types[0 ].chip.irq_mask = irq_gc_mask_disable_reg; p->gc->chip_types[0 ].chip.irq_unmask = irq_gc_unmask_enable_reg; p->gc->chip_types[0 ].chip.irq_set_type = irqc_irq_set_type; p->gc->chip_types[0 ].chip.irq_set_wake = irqc_irq_set_wake; p->gc->chip_types[0 ].chip.flags =IRQCHIP_MASK_ON_SUSPEND ; +irq_domain_set_pm_device (p->irq_domain, dev); +/* request interrupts one by one */ for (k =0 ; k < p->number_of_irqs; k++) { if (devm_request_irq(dev, p->irq[k].requested_irq,
Marc Zyngier
maintainerPATCH 5/12 irqchip/imx-intmux: Move PM device over to irq domain
In reply to Marc ZyngierMove the reference to the device over to the irq domain. This allows the irq_chip structure to be directly used instead of taking a copy for each instance.
--- drivers/irqchip/irq-imx-intmux.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-)
drivers/irqchip/irq-imx-intmux.c +3 -5
@@ -61,7 +61,6 @@#define CHAN_MAX_NUM 0x8struct intmux_irqchip_data { -struct irq_chip chip;u32 saved_reg;int chanidx;int irq;
@@ -114,7 +113,7 @@ static void imx_intmux_irq_unmask(struct irq_data *d)raw_spin_unlock_irqrestore (&data->lock, flags); } -static struct irq_chip imx_intmux_irq_chip = { +static struct irq_chip imx_intmux_irq_chip__ro_after_init = { .name ="intmux" , .irq_mask = imx_intmux_irq_mask, .irq_unmask = imx_intmux_irq_unmask,
@@ -126,7 +125,7 @@ static int imx_intmux_irq_map(struct irq_domain *h, unsigned int irq,struct intmux_irqchip_data *data = h->host_data;irq_set_chip_data (irq, data); -irq_set_chip_and_handler (irq, &data->chip, handle_level_irq); +irq_set_chip_and_handler (irq, &imx_intmux_irq_chip, handle_level_irq);return 0 ; }
@@ -241,8 +240,6 @@ static int imx_intmux_probe(struct platform_device *pdev) }for (i =0 ; i < channum; i++) { - data->irqchip_data[i].chip = imx_intmux_irq_chip; - data->irqchip_data[i].chip.parent_device = &pdev->dev; data->irqchip_data[i].chanidx = i; data->irqchip_data[i].irq =irq_of_parse_and_map (np, i);
@@ -260,6 +257,7 @@ static int imx_intmux_probe(struct platform_device *pdev) goto out; } data->irqchip_data[i].domain = domain; +irq_domain_set_pm_device (domain, &pdev->dev);/* disable all interrupt sources of this channel firstly */ writel_relaxed (0 , data->regs +CHANIER (i));
Signature · 1 line
2.30.2
[irqchip: irq/irqchip-next] irqchip/imx-intmux: Move PM device over to irq domain
The following commit has been merged into the irq/irqchip-next branch of irqchip:
The following commit has been merged into the irq/irqchip-next branch of irqchip:
Commit-ID: fb140b9c0fe1109ac2269443216d114751a030c0 Gitweb: https://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms/fb140b9c0fe1109ac2269443216d114751a030c0 Author: Marc Zyngier <[email protected]> AuthorDate: Tue, 01 Feb 2022 12:03:03 Committer: Marc Zyngier <[email protected]> CommitterDate: Wed, 09 Feb 2022 13:36:53
irqchip/imx-intmux: Move PM device over to irq domain
Move the reference to the device over to the irq domain. This allows the irq_chip structure to be directly used instead of taking a copy for each instance.
--- drivers/irqchip/irq-imx-intmux.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-)
drivers/irqchip/irq-imx-intmux.c +3 -5
@@ -61,7 +61,6 @@#define CHAN_MAX_NUM 0x8struct intmux_irqchip_data { -struct irq_chip chip;u32 saved_reg;int chanidx;int irq;
@@ -114,7 +113,7 @@ static void imx_intmux_irq_unmask(struct irq_data *d)raw_spin_unlock_irqrestore (&data->lock, flags); } -static struct irq_chip imx_intmux_irq_chip = { +static struct irq_chip imx_intmux_irq_chip__ro_after_init = { .name ="intmux" , .irq_mask = imx_intmux_irq_mask, .irq_unmask = imx_intmux_irq_unmask,
@@ -126,7 +125,7 @@ static int imx_intmux_irq_map(struct irq_domain *h, unsigned int irq,struct intmux_irqchip_data *data = h->host_data;irq_set_chip_data (irq, data); -irq_set_chip_and_handler (irq, &data->chip, handle_level_irq); +irq_set_chip_and_handler (irq, &imx_intmux_irq_chip, handle_level_irq);return 0 ; }
@@ -241,8 +240,6 @@ static int imx_intmux_probe(struct platform_device *pdev) }for (i =0 ; i < channum; i++) { - data->irqchip_data[i].chip = imx_intmux_irq_chip; - data->irqchip_data[i].chip.parent_device = &pdev->dev; data->irqchip_data[i].chanidx = i; data->irqchip_data[i].irq =irq_of_parse_and_map (np, i);
@@ -260,6 +257,7 @@ static int imx_intmux_probe(struct platform_device *pdev) goto out; } data->irqchip_data[i].domain = domain; +irq_domain_set_pm_device (domain, &pdev->dev);/* disable all interrupt sources of this channel firstly */ writel_relaxed (0 , data->regs +CHANIER (i));
Marc Zyngier
maintainerPATCH 6/12 gpio: mt7621: Kill parent_device usage
In reply to Marc ZyngierThis gpio controller sets the parent_device field, but doesn't have any runtime PM functionality. Get rid of it.
--- drivers/gpio/gpio-mt7621.c | 1 - 1 file changed, 1 deletion(-)
drivers/gpio/gpio-mt7621.c +0 -1
@@ -239,7 +239,6 @@ mediatek_gpio_bank_probe(struct device *dev, int bank) rg->chip.offset = bank *MTK_BANK_WIDTH ; rg->irq_chip.name =dev_name (dev); - rg->irq_chip.parent_device = dev; rg->irq_chip.irq_unmask = mediatek_gpio_irq_unmask; rg->irq_chip.irq_mask = mediatek_gpio_irq_mask; rg->irq_chip.irq_mask_ack = mediatek_gpio_irq_mask;
Signature · 1 line
2.30.2
[irqchip: irq/irqchip-next] gpio: mt7621: Kill parent_device usage
The following commit has been merged into the irq/irqchip-next branch of irqchip:
The following commit has been merged into the irq/irqchip-next branch of irqchip:
Commit-ID: 4b9558f92036c968119e1de383f604c19b3ca99b Gitweb: https://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms/4b9558f92036c968119e1de383f604c19b3ca99b Author: Marc Zyngier <[email protected]> AuthorDate: Tue, 01 Feb 2022 12:03:04 Committer: Marc Zyngier <[email protected]> CommitterDate: Wed, 09 Feb 2022 13:36:53
gpio: mt7621: Kill parent_device usage
This gpio controller sets the parent_device field, but doesn't have any runtime PM functionality. Get rid of it.
--- drivers/gpio/gpio-mt7621.c | 1 - 1 file changed, 1 deletion(-)
drivers/gpio/gpio-mt7621.c +0 -1
@@ -239,7 +239,6 @@ mediatek_gpio_bank_probe(struct device *dev, int bank) rg->chip.offset = bank *MTK_BANK_WIDTH ; rg->irq_chip.name =dev_name (dev); - rg->irq_chip.parent_device = dev; rg->irq_chip.irq_unmask = mediatek_gpio_irq_unmask; rg->irq_chip.irq_mask = mediatek_gpio_irq_mask; rg->irq_chip.irq_mask_ack = mediatek_gpio_irq_mask;
Marc Zyngier
maintainerPATCH 7/12 gpio: omap: Move PM device over to irq domain
In reply to Marc ZyngierMove the reference to the device over to the irq domain.
--- drivers/gpio/gpio-omap.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)
drivers/gpio/gpio-omap.c +4 -3
@@ -986,7 +986,8 @@ static void omap_gpio_mod_init(struct gpio_bank *bank)writel_relaxed (0 , base + bank->regs->ctrl); } -static int omap_gpio_chip_init (struct gpio_bank *bank,struct irq_chip *irqc) +static int omap_gpio_chip_init (struct gpio_bank *bank,struct irq_chip *irqc, +struct device *pm_dev) {struct gpio_irq_chip *irq;static int gpio;
@@ -1052,6 +1053,7 @@ static int omap_gpio_chip_init(struct gpio_bank *bank, struct irq_chip *irqc)if (ret)return dev_err_probe (bank->chip.parent, ret,"Could not register gpio chip\n" ); +irq_domain_set_pm_device (bank->chip.irq.domain, pm_dev); ret =devm_request_irq (bank->chip.parent, bank->irq, omap_gpio_irq_handler,0 ,dev_name (bank->chip.parent), bank);
@@ -1402,7 +1404,6 @@ static int omap_gpio_probe(struct platform_device *pdev) irqc->irq_bus_sync_unlock = gpio_irq_bus_sync_unlock, irqc->name =dev_name (&pdev->dev); irqc->flags =IRQCHIP_MASK_ON_SUSPEND ; - irqc->parent_device = dev; bank->irq =platform_get_irq (pdev,0 );if (bank->irq <=0 ) {
@@ -1466,7 +1467,7 @@ static int omap_gpio_probe(struct platform_device *pdev)omap_gpio_mod_init (bank); - ret =omap_gpio_chip_init (bank, irqc); + ret =omap_gpio_chip_init (bank, irqc, dev);if (ret) {pm_runtime_put_sync (dev);pm_runtime_disable (dev);
Signature · 1 line
2.30.2
Re: [PATCH 07/12] gpio: omap: Move PM device over to irq domain
Quoted 1 line · Marc Zyngier
Move the reference to the device over to the irq domain.
PM still work for me:
[irqchip: irq/irqchip-next] gpio: omap: Move PM device over to irq domain
In reply to Marc ZyngierThe following commit has been merged into the irq/irqchip-next branch of irqchip:
The following commit has been merged into the irq/irqchip-next branch of irqchip:
Commit-ID: 989c78f25ade0af66426b935f1113d4b0fe390c5 Gitweb: https://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms/989c78f25ade0af66426b935f1113d4b0fe390c5 Author: Marc Zyngier <[email protected]> AuthorDate: Tue, 01 Feb 2022 12:03:05 Committer: Marc Zyngier <[email protected]> CommitterDate: Wed, 09 Feb 2022 13:36:53
gpio: omap: Move PM device over to irq domain
Move the reference to the device over to the irq domain.
--- drivers/gpio/gpio-omap.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)
drivers/gpio/gpio-omap.c +4 -3
@@ -986,7 +986,8 @@ static void omap_gpio_mod_init(struct gpio_bank *bank)writel_relaxed (0 , base + bank->regs->ctrl); } -static int omap_gpio_chip_init (struct gpio_bank *bank,struct irq_chip *irqc) +static int omap_gpio_chip_init (struct gpio_bank *bank,struct irq_chip *irqc, +struct device *pm_dev) {struct gpio_irq_chip *irq;static int gpio;
@@ -1052,6 +1053,7 @@ static int omap_gpio_chip_init(struct gpio_bank *bank, struct irq_chip *irqc)if (ret)return dev_err_probe (bank->chip.parent, ret,"Could not register gpio chip\n" ); +irq_domain_set_pm_device (bank->chip.irq.domain, pm_dev); ret =devm_request_irq (bank->chip.parent, bank->irq, omap_gpio_irq_handler,0 ,dev_name (bank->chip.parent), bank);
@@ -1402,7 +1404,6 @@ static int omap_gpio_probe(struct platform_device *pdev) irqc->irq_bus_sync_unlock = gpio_irq_bus_sync_unlock, irqc->name =dev_name (&pdev->dev); irqc->flags =IRQCHIP_MASK_ON_SUSPEND ; - irqc->parent_device = dev; bank->irq =platform_get_irq (pdev,0 );if (bank->irq <=0 ) {
@@ -1466,7 +1467,7 @@ static int omap_gpio_probe(struct platform_device *pdev)omap_gpio_mod_init (bank); - ret =omap_gpio_chip_init (bank, irqc); + ret =omap_gpio_chip_init (bank, irqc, dev);if (ret) {pm_runtime_put_sync (dev);pm_runtime_disable (dev);
Marc Zyngier
maintainerPATCH 8/12 gpio: rcar: Move PM device over to irq domain
In reply to Marc ZyngierMove the reference to the device over to the irq domain.
--- drivers/gpio/gpio-rcar.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/gpio/gpio-rcar.c +1 -1
@@ -530,7 +530,6 @@ static int gpio_rcar_probe(struct platform_device *pdev) irq_chip = &p->irq_chip; irq_chip->name ="gpio-rcar" ; - irq_chip->parent_device = dev; irq_chip->irq_mask = gpio_rcar_irq_disable; irq_chip->irq_unmask = gpio_rcar_irq_enable; irq_chip->irq_set_type = gpio_rcar_irq_set_type;
@@ -552,6 +551,7 @@ static int gpio_rcar_probe(struct platform_device *pdev) goto err0; } +irq_domain_set_pm_device (gpio_chip->irq.domain, dev); ret =devm_request_irq (dev, p->irq_parent, gpio_rcar_irq_handler,IRQF_SHARED , name, p);if (ret) {
Signature · 1 line
2.30.2
Re: [PATCH 08/12] gpio: rcar: Move PM device over to irq domain
Quoted 3 lines · Marc Zyngier
Move the reference to the device over to the irq domain.
Signed-off-by Marc Zyngier <[email protected]>
Wake-up still works fine on R-Car M2-W, so
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]
In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
[irqchip: irq/irqchip-next] gpio: rcar: Move PM device over to irq domain
In reply to Marc ZyngierThe following commit has been merged into the irq/irqchip-next branch of irqchip:
The following commit has been merged into the irq/irqchip-next branch of irqchip:
Commit-ID: 373d664b7d3babe1743f64746bc3c553ac23a1bd Gitweb: https://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms/373d664b7d3babe1743f64746bc3c553ac23a1bd Author: Marc Zyngier <[email protected]> AuthorDate: Tue, 01 Feb 2022 12:03:06 Committer: Marc Zyngier <[email protected]> CommitterDate: Wed, 09 Feb 2022 13:36:53
gpio: rcar: Move PM device over to irq domain
Move the reference to the device over to the irq domain.
--- drivers/gpio/gpio-rcar.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/gpio/gpio-rcar.c +1 -1
@@ -530,7 +530,6 @@ static int gpio_rcar_probe(struct platform_device *pdev) irq_chip = &p->irq_chip; irq_chip->name ="gpio-rcar" ; - irq_chip->parent_device = dev; irq_chip->irq_mask = gpio_rcar_irq_disable; irq_chip->irq_unmask = gpio_rcar_irq_enable; irq_chip->irq_set_type = gpio_rcar_irq_set_type;
@@ -552,6 +551,7 @@ static int gpio_rcar_probe(struct platform_device *pdev) goto err0; } +irq_domain_set_pm_device (gpio_chip->irq.domain, dev); ret =devm_request_irq (dev, p->irq_parent, gpio_rcar_irq_handler,IRQF_SHARED , name, p);if (ret) {
Marc Zyngier
maintainerPATCH 9/12 gpio: tpmx86: Move PM device over to irq domain
In reply to Marc ZyngierMove the reference to the device over to the irq domain.
--- drivers/gpio/gpio-tqmx86.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/gpio/gpio-tqmx86.c +2 -1
@@ -281,7 +281,6 @@ static int tqmx86_gpio_probe(struct platform_device *pdev)u8 irq_status; irq_chip->name = chip->label; - irq_chip->parent_device = &pdev->dev; irq_chip->irq_mask = tqmx86_gpio_irq_mask; irq_chip->irq_unmask = tqmx86_gpio_irq_unmask; irq_chip->irq_set_type = tqmx86_gpio_irq_set_type;
@@ -316,6 +315,8 @@ static int tqmx86_gpio_probe(struct platform_device *pdev) goto out_pm_dis; } +irq_domain_set_pm_device (girq->domain, dev); +dev_info (dev,"GPIO functionality initialized with %d pins\n" , chip->ngpio);
Signature · 7 lines
2.30.2 _______________________________________________ Linux-mediatek mailing list [email protected] http://lists.infradead.org/mailman/listinfo/linux-mediatek
[irqchip: irq/irqchip-next] gpio: tpmx86: Move PM device over to irq domain
The following commit has been merged into the irq/irqchip-next branch of irqchip:
The following commit has been merged into the irq/irqchip-next branch of irqchip:
Commit-ID: 924610607f191bee4379bc3775b0fd025ad7e922 Gitweb: https://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms/924610607f191bee4379bc3775b0fd025ad7e922 Author: Marc Zyngier <[email protected]> AuthorDate: Tue, 01 Feb 2022 12:03:07 Committer: Marc Zyngier <[email protected]> CommitterDate: Wed, 09 Feb 2022 13:36:54
gpio: tpmx86: Move PM device over to irq domain
Move the reference to the device over to the irq domain.
--- drivers/gpio/gpio-tqmx86.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/gpio/gpio-tqmx86.c +2 -1
@@ -281,7 +281,6 @@ static int tqmx86_gpio_probe(struct platform_device *pdev)u8 irq_status; irq_chip->name = chip->label; - irq_chip->parent_device = &pdev->dev; irq_chip->irq_mask = tqmx86_gpio_irq_mask; irq_chip->irq_unmask = tqmx86_gpio_irq_unmask; irq_chip->irq_set_type = tqmx86_gpio_irq_set_type;
@@ -316,6 +315,8 @@ static int tqmx86_gpio_probe(struct platform_device *pdev) goto out_pm_dis; } +irq_domain_set_pm_device (girq->domain, dev); +dev_info (dev,"GPIO functionality initialized with %d pins\n" , chip->ngpio);
Marc Zyngier
maintainerPATCH 10/12 pinctrl: npcm: Fix broken references to chip->parent_device
In reply to Marc ZyngierThe npcm driver has a bunch of references to the irq_chip parent_device field, but never sets it.
Fix it by fishing that reference from somewhere else, but it is obvious that these debug statements were never used. Also remove an unused field in a local data structure.
--- drivers/pinctrl/nuvoton/pinctrl-npcm7xx.c | 25 +++++++++++------------ 1 file changed, 12 insertions(+), 13 deletions(-)
drivers/pinctrl/nuvoton/pinctrl-npcm7xx.c +12 -13
@@ -78,7 +78,6 @@ struct npcm7xx_gpio {struct gpio_chip gc;int irqbase;int irq; -void *priv;struct irq_chip irq_chip;u32 pinctrl_id;int (*direction_input)(struct gpio_chip *chip,unsigned offset);
@@ -226,7 +225,7 @@ static void npcmgpio_irq_handler(struct irq_desc *desc)chained_irq_enter (chip, desc); sts =ioread32 (bank->base +NPCM7XX_GP_N_EVST ); en =ioread32 (bank->base +NPCM7XX_GP_N_EVEN ); -dev_dbg (chip->parent_device,"==> got irq sts %.8x %.8x\n" , sts, +dev_dbg (bank->gc.parent,"==> got irq sts %.8x %.8x\n" , sts, en); sts &= en;
@@ -241,33 +240,33 @@ static int npcmgpio_set_irq_type(struct irq_data *d, unsigned int type)gpiochip_get_data (irq_data_get_irq_chip_data (d));unsigned int gpio =BIT (d->hwirq); -dev_dbg (d->chip->parent_device,"setirqtype: %u.%u = %u\n" , gpio, +dev_dbg (bank->gc.parent,"setirqtype: %u.%u = %u\n" , gpio, d->irq, type);switch (type) {case IRQ_TYPE_EDGE_RISING : -dev_dbg (d->chip->parent_device,"edge.rising\n" ); +dev_dbg (bank->gc.parent,"edge.rising\n" );npcm_gpio_clr (&bank->gc, bank->base +NPCM7XX_GP_N_EVBE , gpio);npcm_gpio_clr (&bank->gc, bank->base +NPCM7XX_GP_N_POL , gpio);break ;case IRQ_TYPE_EDGE_FALLING : -dev_dbg (d->chip->parent_device,"edge.falling\n" ); +dev_dbg (bank->gc.parent,"edge.falling\n" );npcm_gpio_clr (&bank->gc, bank->base +NPCM7XX_GP_N_EVBE , gpio);npcm_gpio_set (&bank->gc, bank->base +NPCM7XX_GP_N_POL , gpio);break ;case IRQ_TYPE_EDGE_BOTH : -dev_dbg (d->chip->parent_device,"edge.both\n" ); +dev_dbg (bank->gc.parent,"edge.both\n" );npcm_gpio_set (&bank->gc, bank->base +NPCM7XX_GP_N_EVBE , gpio);break ;case IRQ_TYPE_LEVEL_LOW : -dev_dbg (d->chip->parent_device,"level.low\n" ); +dev_dbg (bank->gc.parent,"level.low\n" );npcm_gpio_set (&bank->gc, bank->base +NPCM7XX_GP_N_POL , gpio);break ;case IRQ_TYPE_LEVEL_HIGH : -dev_dbg (d->chip->parent_device,"level.high\n" ); +dev_dbg (bank->gc.parent,"level.high\n" );npcm_gpio_clr (&bank->gc, bank->base +NPCM7XX_GP_N_POL , gpio);break ;default : -dev_dbg (d->chip->parent_device,"invalid irq type\n" ); +dev_dbg (bank->gc.parent,"invalid irq type\n" );return -EINVAL ; }
@@ -289,7 +288,7 @@ static void npcmgpio_irq_ack(struct irq_data *d)gpiochip_get_data (irq_data_get_irq_chip_data (d));unsigned int gpio = d->hwirq; -dev_dbg (d->chip->parent_device,"irq_ack: %u.%u\n" , gpio, d->irq); +dev_dbg (bank->gc.parent,"irq_ack: %u.%u\n" , gpio, d->irq);iowrite32 (BIT (gpio), bank->base +NPCM7XX_GP_N_EVST ); }
@@ -301,7 +300,7 @@ static void npcmgpio_irq_mask(struct irq_data *d)unsigned int gpio = d->hwirq;/* Clear events */ -dev_dbg (d->chip->parent_device,"irq_mask: %u.%u\n" , gpio, d->irq); +dev_dbg (bank->gc.parent,"irq_mask: %u.%u\n" , gpio, d->irq);iowrite32 (BIT (gpio), bank->base +NPCM7XX_GP_N_EVENC ); }
@@ -313,7 +312,7 @@ static void npcmgpio_irq_unmask(struct irq_data *d)unsigned int gpio = d->hwirq;/* Enable events */ -dev_dbg (d->chip->parent_device,"irq_unmask: %u.%u\n" , gpio, d->irq); +dev_dbg (bank->gc.parent,"irq_unmask: %u.%u\n" , gpio, d->irq);iowrite32 (BIT (gpio), bank->base +NPCM7XX_GP_N_EVENS ); }
@@ -323,7 +322,7 @@ static unsigned int npcmgpio_irq_startup(struct irq_data *d)unsigned int gpio = d->hwirq;/* active-high, input, clear interrupt, enable interrupt */ -dev_dbg (d->chip->parent_device,"startup: %u.%u\n" , gpio, d->irq); +dev_dbg (gc_parent,"startup: %u.%u\n" , gpio, d->irq);npcmgpio_direction_input (gc, gpio);npcmgpio_irq_ack (d);npcmgpio_irq_unmask (d);
Signature · 1 line
2.30.2
[irqchip: irq/irqchip-next] pinctrl: npcm: Fix broken references to chip->parent_device
The following commit has been merged into the irq/irqchip-next branch of irqchip:
The following commit has been merged into the irq/irqchip-next branch of irqchip:
Commit-ID: 03182a20db448774a4cf5f2e5b1c4bd660746ebe Gitweb: https://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms/03182a20db448774a4cf5f2e5b1c4bd660746ebe Author: Marc Zyngier <[email protected]> AuthorDate: Tue, 01 Feb 2022 12:03:08 Committer: Marc Zyngier <[email protected]> CommitterDate: Wed, 09 Feb 2022 13:36:54
pinctrl: npcm: Fix broken references to chip->parent_device
The npcm driver has a bunch of references to the irq_chip parent_device field, but never sets it.
Fix it by fishing that reference from somewhere else, but it is obvious that these debug statements were never used. Also remove an unused field in a local data structure.
--- drivers/pinctrl/nuvoton/pinctrl-npcm7xx.c | 25 ++++++++++------------ 1 file changed, 12 insertions(+), 13 deletions(-)
drivers/pinctrl/nuvoton/pinctrl-npcm7xx.c +12 -13
@@ -78,7 +78,6 @@ struct npcm7xx_gpio {struct gpio_chip gc;int irqbase;int irq; -void *priv;struct irq_chip irq_chip;u32 pinctrl_id;int (*direction_input)(struct gpio_chip *chip,unsigned offset);
@@ -226,7 +225,7 @@ static void npcmgpio_irq_handler(struct irq_desc *desc)chained_irq_enter (chip, desc); sts =ioread32 (bank->base +NPCM7XX_GP_N_EVST ); en =ioread32 (bank->base +NPCM7XX_GP_N_EVEN ); -dev_dbg (chip->parent_device,"==> got irq sts %.8x %.8x\n" , sts, +dev_dbg (bank->gc.parent,"==> got irq sts %.8x %.8x\n" , sts, en); sts &= en;
@@ -241,33 +240,33 @@ static int npcmgpio_set_irq_type(struct irq_data *d, unsigned int type)gpiochip_get_data (irq_data_get_irq_chip_data (d));unsigned int gpio =BIT (d->hwirq); -dev_dbg (d->chip->parent_device,"setirqtype: %u.%u = %u\n" , gpio, +dev_dbg (bank->gc.parent,"setirqtype: %u.%u = %u\n" , gpio, d->irq, type);switch (type) {case IRQ_TYPE_EDGE_RISING : -dev_dbg (d->chip->parent_device,"edge.rising\n" ); +dev_dbg (bank->gc.parent,"edge.rising\n" );npcm_gpio_clr (&bank->gc, bank->base +NPCM7XX_GP_N_EVBE , gpio);npcm_gpio_clr (&bank->gc, bank->base +NPCM7XX_GP_N_POL , gpio);break ;case IRQ_TYPE_EDGE_FALLING : -dev_dbg (d->chip->parent_device,"edge.falling\n" ); +dev_dbg (bank->gc.parent,"edge.falling\n" );npcm_gpio_clr (&bank->gc, bank->base +NPCM7XX_GP_N_EVBE , gpio);npcm_gpio_set (&bank->gc, bank->base +NPCM7XX_GP_N_POL , gpio);break ;case IRQ_TYPE_EDGE_BOTH : -dev_dbg (d->chip->parent_device,"edge.both\n" ); +dev_dbg (bank->gc.parent,"edge.both\n" );npcm_gpio_set (&bank->gc, bank->base +NPCM7XX_GP_N_EVBE , gpio);break ;case IRQ_TYPE_LEVEL_LOW : -dev_dbg (d->chip->parent_device,"level.low\n" ); +dev_dbg (bank->gc.parent,"level.low\n" );npcm_gpio_set (&bank->gc, bank->base +NPCM7XX_GP_N_POL , gpio);break ;case IRQ_TYPE_LEVEL_HIGH : -dev_dbg (d->chip->parent_device,"level.high\n" ); +dev_dbg (bank->gc.parent,"level.high\n" );npcm_gpio_clr (&bank->gc, bank->base +NPCM7XX_GP_N_POL , gpio);break ;default : -dev_dbg (d->chip->parent_device,"invalid irq type\n" ); +dev_dbg (bank->gc.parent,"invalid irq type\n" );return -EINVAL ; }
@@ -289,7 +288,7 @@ static void npcmgpio_irq_ack(struct irq_data *d)gpiochip_get_data (irq_data_get_irq_chip_data (d));unsigned int gpio = d->hwirq; -dev_dbg (d->chip->parent_device,"irq_ack: %u.%u\n" , gpio, d->irq); +dev_dbg (bank->gc.parent,"irq_ack: %u.%u\n" , gpio, d->irq);iowrite32 (BIT (gpio), bank->base +NPCM7XX_GP_N_EVST ); }
@@ -301,7 +300,7 @@ static void npcmgpio_irq_mask(struct irq_data *d)unsigned int gpio = d->hwirq;/* Clear events */ -dev_dbg (d->chip->parent_device,"irq_mask: %u.%u\n" , gpio, d->irq); +dev_dbg (bank->gc.parent,"irq_mask: %u.%u\n" , gpio, d->irq);iowrite32 (BIT (gpio), bank->base +NPCM7XX_GP_N_EVENC ); }
@@ -313,7 +312,7 @@ static void npcmgpio_irq_unmask(struct irq_data *d)unsigned int gpio = d->hwirq;/* Enable events */ -dev_dbg (d->chip->parent_device,"irq_unmask: %u.%u\n" , gpio, d->irq); +dev_dbg (bank->gc.parent,"irq_unmask: %u.%u\n" , gpio, d->irq);iowrite32 (BIT (gpio), bank->base +NPCM7XX_GP_N_EVENS ); }
@@ -323,7 +322,7 @@ static unsigned int npcmgpio_irq_startup(struct irq_data *d)unsigned int gpio = d->hwirq;/* active-high, input, clear interrupt, enable interrupt */ -dev_dbg (d->chip->parent_device,"startup: %u.%u\n" , gpio, d->irq); +dev_dbg (gc_parent,"startup: %u.%u\n" , gpio, d->irq);npcmgpio_direction_input (gc, gpio);npcmgpio_irq_ack (d);npcmgpio_irq_unmask (d);
[irqchip: irq/irqchip-next] pinctrl: npcm: Fix broken references to chip->parent_device
In reply to Marc ZyngierThe following commit has been merged into the irq/irqchip-next branch of irqchip:
The following commit has been merged into the irq/irqchip-next branch of irqchip:
Commit-ID: f7e53e2255808ca3abcc8f38d18ad0823425e771 Gitweb: https://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms/f7e53e2255808ca3abcc8f38d18ad0823425e771 Author: Marc Zyngier <[email protected]> AuthorDate: Tue, 01 Feb 2022 12:03:08 Committer: Marc Zyngier <[email protected]> CommitterDate: Thu, 10 Feb 2022 11:07:04
pinctrl: npcm: Fix broken references to chip->parent_device
The npcm driver has a bunch of references to the irq_chip parent_device field, but never sets it.
Fix it by fishing that reference from somewhere else, but it is obvious that these debug statements were never used. Also remove an unused field in a local data structure.
--- drivers/pinctrl/nuvoton/pinctrl-npcm7xx.c | 25 ++++++++++------------ 1 file changed, 12 insertions(+), 13 deletions(-)
drivers/pinctrl/nuvoton/pinctrl-npcm7xx.c +12 -13
@@ -78,7 +78,6 @@ struct npcm7xx_gpio {struct gpio_chip gc;int irqbase;int irq; -void *priv;struct irq_chip irq_chip;u32 pinctrl_id;int (*direction_input)(struct gpio_chip *chip,unsigned offset);
@@ -226,7 +225,7 @@ static void npcmgpio_irq_handler(struct irq_desc *desc)chained_irq_enter (chip, desc); sts =ioread32 (bank->base +NPCM7XX_GP_N_EVST ); en =ioread32 (bank->base +NPCM7XX_GP_N_EVEN ); -dev_dbg (chip->parent_device,"==> got irq sts %.8x %.8x\n" , sts, +dev_dbg (bank->gc.parent,"==> got irq sts %.8x %.8x\n" , sts, en); sts &= en;
@@ -241,33 +240,33 @@ static int npcmgpio_set_irq_type(struct irq_data *d, unsigned int type)gpiochip_get_data (irq_data_get_irq_chip_data (d));unsigned int gpio =BIT (d->hwirq); -dev_dbg (d->chip->parent_device,"setirqtype: %u.%u = %u\n" , gpio, +dev_dbg (bank->gc.parent,"setirqtype: %u.%u = %u\n" , gpio, d->irq, type);switch (type) {case IRQ_TYPE_EDGE_RISING : -dev_dbg (d->chip->parent_device,"edge.rising\n" ); +dev_dbg (bank->gc.parent,"edge.rising\n" );npcm_gpio_clr (&bank->gc, bank->base +NPCM7XX_GP_N_EVBE , gpio);npcm_gpio_clr (&bank->gc, bank->base +NPCM7XX_GP_N_POL , gpio);break ;case IRQ_TYPE_EDGE_FALLING : -dev_dbg (d->chip->parent_device,"edge.falling\n" ); +dev_dbg (bank->gc.parent,"edge.falling\n" );npcm_gpio_clr (&bank->gc, bank->base +NPCM7XX_GP_N_EVBE , gpio);npcm_gpio_set (&bank->gc, bank->base +NPCM7XX_GP_N_POL , gpio);break ;case IRQ_TYPE_EDGE_BOTH : -dev_dbg (d->chip->parent_device,"edge.both\n" ); +dev_dbg (bank->gc.parent,"edge.both\n" );npcm_gpio_set (&bank->gc, bank->base +NPCM7XX_GP_N_EVBE , gpio);break ;case IRQ_TYPE_LEVEL_LOW : -dev_dbg (d->chip->parent_device,"level.low\n" ); +dev_dbg (bank->gc.parent,"level.low\n" );npcm_gpio_set (&bank->gc, bank->base +NPCM7XX_GP_N_POL , gpio);break ;case IRQ_TYPE_LEVEL_HIGH : -dev_dbg (d->chip->parent_device,"level.high\n" ); +dev_dbg (bank->gc.parent,"level.high\n" );npcm_gpio_clr (&bank->gc, bank->base +NPCM7XX_GP_N_POL , gpio);break ;default : -dev_dbg (d->chip->parent_device,"invalid irq type\n" ); +dev_dbg (bank->gc.parent,"invalid irq type\n" );return -EINVAL ; }
@@ -289,7 +288,7 @@ static void npcmgpio_irq_ack(struct irq_data *d)gpiochip_get_data (irq_data_get_irq_chip_data (d));unsigned int gpio = d->hwirq; -dev_dbg (d->chip->parent_device,"irq_ack: %u.%u\n" , gpio, d->irq); +dev_dbg (bank->gc.parent,"irq_ack: %u.%u\n" , gpio, d->irq);iowrite32 (BIT (gpio), bank->base +NPCM7XX_GP_N_EVST ); }
@@ -301,7 +300,7 @@ static void npcmgpio_irq_mask(struct irq_data *d)unsigned int gpio = d->hwirq;/* Clear events */ -dev_dbg (d->chip->parent_device,"irq_mask: %u.%u\n" , gpio, d->irq); +dev_dbg (bank->gc.parent,"irq_mask: %u.%u\n" , gpio, d->irq);iowrite32 (BIT (gpio), bank->base +NPCM7XX_GP_N_EVENC ); }
@@ -313,7 +312,7 @@ static void npcmgpio_irq_unmask(struct irq_data *d)unsigned int gpio = d->hwirq;/* Enable events */ -dev_dbg (d->chip->parent_device,"irq_unmask: %u.%u\n" , gpio, d->irq); +dev_dbg (bank->gc.parent,"irq_unmask: %u.%u\n" , gpio, d->irq);iowrite32 (BIT (gpio), bank->base +NPCM7XX_GP_N_EVENS ); }
@@ -323,7 +322,7 @@ static unsigned int npcmgpio_irq_startup(struct irq_data *d)unsigned int gpio = d->hwirq;/* active-high, input, clear interrupt, enable interrupt */ -dev_dbg (d->chip->parent_device,"startup: %u.%u\n" , gpio, d->irq); +dev_dbg (gc->parent,"startup: %u.%u\n" , gpio, d->irq);npcmgpio_direction_input (gc, gpio);npcmgpio_irq_ack (d);npcmgpio_irq_unmask (d);
Re: [PATCH 10/12] pinctrl: npcm: Fix broken references to chip->parent_device
In reply to Marc ZyngierQuoted 8 lines · Marc Zyngier
The npcm driver has a bunch of references to the
irq_chipparent_devicefield, but never sets it.Fix it by fishing that reference from somewhere else, but it is obvious that these debug statements were never used. Also remove an unused field in a local data structure.
Signed-off-by Marc Zyngier <[email protected]>
Yours,
Linus Walleij
Marc Zyngier
maintainerPATCH 11/12 pinctrl: starfive: Move PM device over to irq domain
In reply to Marc ZyngierMove the reference to the device over to the irq domain.
--- drivers/pinctrl/pinctrl-starfive.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/pinctrl/pinctrl-starfive.c +2 -1
@@ -1307,7 +1307,6 @@ static int starfive_probe(struct platform_device *pdev) sfp->gc.base =-1 ; sfp->gc.ngpio =NR_GPIOS ; - starfive_irq_chip.parent_device = dev; starfive_irq_chip.name = sfp->gc.label; sfp->gc.irq.chip = &starfive_irq_chip;
@@ -1330,6 +1329,8 @@ static int starfive_probe(struct platform_device *pdev)if (ret)return dev_err_probe (dev, ret,"could not register gpiochip\n" ); +irq_domain_set_pm_device (sfp->gc.irq.domain, dev); + out_pinctrl_enable:return pinctrl_enable (sfp->pctl); }
Signature · 1 line
2.30.2
Re: [PATCH 11/12] pinctrl: starfive: Move PM device over to irq domain
Quoted 21 lines · Marc Zyngier
Move the reference to the device over to the irq domain.
Signed-off-by Marc Zyngier <[email protected]>--- drivers/pinctrl/pinctrl-starfive.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)drivers/pinctrl/pinctrl-starfive.c +0
-1@@ -1307,7 +1307,6 @@ static int starfive_probe(struct platform_device *pdev) sfp->gc.base =-1 ; sfp->gc.ngpio =NR_GPIOS ; - starfive_irq_chip.parent_device = dev; starfive_irq_chip.name = sfp->gc.label; sfp->gc.irq.chip = &starfive_irq_chip;
drivers/pinctrl/pinctrl-starfive.c static int starfive_probe(struct platform_device *pdev) · line 1333
Quoted 5 lines
drivers/pinctrl/pinctrl-starfive.c +2
-0@@ -1330,6 +1329,8 @@ static int starfive_probe(struct platform_device *pdev)if (ret)return dev_err_probe (dev, ret,"could not register gpiochip\n" ); +irq_domain_set_pm_device (sfp->gc.irq.domain, dev); +
The gpio framework uses the irq_domain at sfp->gc.irq.domain, so shouldn't this be set before registering the gpio_chip with devm_gpiochip_add_data above?
Quoted 6 lines
drivers/pinctrl/pinctrl-starfive.c +0
-1out_pinctrl_enable:return pinctrl_enable (sfp->pctl); } --2.30.2
Emil Renner Berthing
Reviewed-byRe: [PATCH 11/12] pinctrl: starfive: Move PM device over to irq domain
Quoted 25 lines · Emil Renner Berthing
Quoted 24 lines · Marc Zyngier
Move the reference to the device over to the irq domain.
Signed-off-by Marc Zyngier <[email protected]>--- drivers/pinctrl/pinctrl-starfive.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)drivers/pinctrl/pinctrl-starfive.c +0
-1@@ -1307,7 +1307,6 @@ static int starfive_probe(struct platform_device *pdev) sfp->gc.base =-1 ; sfp->gc.ngpio =NR_GPIOS ; - starfive_irq_chip.parent_device = dev; starfive_irq_chip.name = sfp->gc.label; sfp->gc.irq.chip = &starfive_irq_chip;@@ -1330,6 +1329,8 @@ static int starfive_probe(struct platform_device *pdev)if (ret)return dev_err_probe (dev, ret,"could not register gpiochip\n" );
Quoted 6 lines
drivers/pinctrl/pinctrl-starfive.c static int starfive_probe(struct platform_device *pdev) · line 1333
Quoted 2 lines
drivers/pinctrl/pinctrl-starfive.c +2
-0+irq_domain_set_pm_device (sfp->gc.irq.domain, dev); +The gpio framework uses the
irq_domainatsfp->gc.irq.domain, so shouldn't this be set before registering thegpio_chipwithdevm_gpiochip_add_dataabove?
Ah, no. sfp->gc.irq.domain is a pointer to an irq_domain that is initialised when adding the gpio_chip.
Marc Zyngier
maintainerRe: [PATCH 11/12] pinctrl: starfive: Move PM device over to irq domain
In reply to Emil Renner BerthingQuoted 26 lines · Emil Renner Berthing
Quoted 24 lines · Marc Zyngier
Move the reference to the device over to the irq domain.
Signed-off-by Marc Zyngier <[email protected]>--- drivers/pinctrl/pinctrl-starfive.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)drivers/pinctrl/pinctrl-starfive.c +0
-1@@ -1307,7 +1307,6 @@ static int starfive_probe(struct platform_device *pdev) sfp->gc.base =-1 ; sfp->gc.ngpio =NR_GPIOS ; - starfive_irq_chip.parent_device = dev; starfive_irq_chip.name = sfp->gc.label; sfp->gc.irq.chip = &starfive_irq_chip;@@ -1330,6 +1329,8 @@ static int starfive_probe(struct platform_device *pdev)if (ret)return dev_err_probe (dev, ret,"could not register gpiochip\n" );
Quoted 6 lines
drivers/pinctrl/pinctrl-starfive.c static int starfive_probe(struct platform_device *pdev) · line 1333
Quoted 2 lines
drivers/pinctrl/pinctrl-starfive.c +2
-0+irq_domain_set_pm_device (sfp->gc.irq.domain, dev); +The gpio framework uses the
irq_domainatsfp->gc.irq.domain, so shouldn't this be set before registering thegpio_chipwithdevm_gpiochip_add_dataabove?
It is devm_gpiochip_add_data() that create the domain, so there is nothing to set before.
Thanks,
M.
Signature · 1 line
Without deviation from the norm, progress is not possible.
[irqchip: irq/irqchip-next] pinctrl: starfive: Move PM device over to irq domain
In reply to Marc ZyngierThe following commit has been merged into the irq/irqchip-next branch of irqchip:
The following commit has been merged into the irq/irqchip-next branch of irqchip:
Commit-ID: de72f9429628e9c5b1124087c36bd7457b2ab241 Gitweb: https://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms/de72f9429628e9c5b1124087c36bd7457b2ab241 Author: Marc Zyngier <[email protected]> AuthorDate: Tue, 01 Feb 2022 12:03:09 Committer: Marc Zyngier <[email protected]> CommitterDate: Wed, 09 Feb 2022 13:36:54
pinctrl: starfive: Move PM device over to irq domain
Move the reference to the device over to the irq domain.
--- drivers/pinctrl/pinctrl-starfive.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/pinctrl/pinctrl-starfive.c +2 -1
@@ -1307,7 +1307,6 @@ static int starfive_probe(struct platform_device *pdev) sfp->gc.base =-1 ; sfp->gc.ngpio =NR_GPIOS ; - starfive_irq_chip.parent_device = dev; starfive_irq_chip.name = sfp->gc.label; sfp->gc.irq.chip = &starfive_irq_chip;
@@ -1330,6 +1329,8 @@ static int starfive_probe(struct platform_device *pdev)if (ret)return dev_err_probe (dev, ret,"could not register gpiochip\n" ); +irq_domain_set_pm_device (sfp->gc.irq.domain, dev); + out_pinctrl_enable:return pinctrl_enable (sfp->pctl); }
[irqchip: irq/irqchip-next] pinctrl: starfive: Move PM device over to irq domain
In reply to Marc ZyngierThe following commit has been merged into the irq/irqchip-next branch of irqchip:
The following commit has been merged into the irq/irqchip-next branch of irqchip:
Commit-ID: 0d872ed9e2148a8ba29de5a71c352fa54abf8e5e Gitweb: https://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms/0d872ed9e2148a8ba29de5a71c352fa54abf8e5e Author: Marc Zyngier <[email protected]> AuthorDate: Tue, 01 Feb 2022 12:03:09 Committer: Marc Zyngier <[email protected]> CommitterDate: Thu, 10 Feb 2022 11:07:04
pinctrl: starfive: Move PM device over to irq domain
Move the reference to the device over to the irq domain.
--- drivers/pinctrl/pinctrl-starfive.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/pinctrl/pinctrl-starfive.c +2 -1
@@ -1307,7 +1307,6 @@ static int starfive_probe(struct platform_device *pdev) sfp->gc.base =-1 ; sfp->gc.ngpio =NR_GPIOS ; - starfive_irq_chip.parent_device = dev; starfive_irq_chip.name = sfp->gc.label; sfp->gc.irq.chip = &starfive_irq_chip;
@@ -1330,6 +1329,8 @@ static int starfive_probe(struct platform_device *pdev)if (ret)return dev_err_probe (dev, ret,"could not register gpiochip\n" ); +irq_domain_set_pm_device (sfp->gc.irq.domain, dev); + out_pinctrl_enable:return pinctrl_enable (sfp->pctl); }
Marc Zyngier
maintainerPATCH 12/12 genirq: Kill irq_chip::parent_device
In reply to Marc ZyngierNow that noone is using irq_chip::parent_device in the tree, get rid of it.
--- include/linux/irq.h | 2 -- kernel/irq/chip.c | 3 --- 2 files changed, 5 deletions(-)
include/linux/irq.h +0 -2
@@ -456,7 +456,6 @@ static inline irq_hw_number_t irqd_to_hwirq(struct irq_data *d)/** * struct irq_chip - hardware interrupt chip descriptor * -* @parent_device: pointer to parent device for irqchip * @name: name for /proc/interrupts * @irq_startup: start up the interrupt (defaults to ->enable if NULL) * @irq_shutdown: shut down the interrupt (defaults to ->disable if NULL)
@@ -503,7 +502,6 @@ static inline irq_hw_number_t irqd_to_hwirq(struct irq_data *d)* @flags: chip specific flags */ struct irq_chip { -struct device *parent_device;const char *name;unsigned int (*irq_startup)(struct irq_data *data);void (*irq_shutdown)(struct irq_data *data);
kernel/irq/chip.c +0 -3
@@ -1560,9 +1560,6 @@ int irq_chip_compose_msi_msg(struct irq_data *data, struct msi_msg *msg)static struct device *irq_get_parent_device (struct irq_data *data) { -if (data->chip->parent_device) -return data->chip->parent_device; -if (data->domain)return data->domain->dev;
Signature · 7 lines
2.30.2 _______________________________________________ Linux-mediatek mailing list [email protected] http://lists.infradead.org/mailman/listinfo/linux-mediatek
[irqchip: irq/irqchip-next] genirq: Kill irq_chip::parent_device
The following commit has been merged into the irq/irqchip-next branch of irqchip:
The following commit has been merged into the irq/irqchip-next branch of irqchip:
Commit-ID: d3a33cefbb37d963bab883aca5b96109d61071a8 Gitweb: https://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms/d3a33cefbb37d963bab883aca5b96109d61071a8 Author: Marc Zyngier <[email protected]> AuthorDate: Tue, 01 Feb 2022 12:03:10 Committer: Marc Zyngier <[email protected]> CommitterDate: Wed, 09 Feb 2022 13:36:54
genirq: Kill irq_chip::parent_device
Now that noone is using irq_chip::parent_device in the tree, get rid of it.
--- include/linux/irq.h | 2 -- kernel/irq/chip.c | 3 --- 2 files changed, 5 deletions(-)
include/linux/irq.h +0 -2
@@ -456,7 +456,6 @@ static inline irq_hw_number_t irqd_to_hwirq(struct irq_data *d)/** * struct irq_chip - hardware interrupt chip descriptor * -* @parent_device: pointer to parent device for irqchip * @name: name for /proc/interrupts * @irq_startup: start up the interrupt (defaults to ->enable if NULL) * @irq_shutdown: shut down the interrupt (defaults to ->disable if NULL)
@@ -503,7 +502,6 @@ static inline irq_hw_number_t irqd_to_hwirq(struct irq_data *d)* @flags: chip specific flags */ struct irq_chip { -struct device *parent_device;const char *name;unsigned int (*irq_startup)(struct irq_data *data);void (*irq_shutdown)(struct irq_data *data);
kernel/irq/chip.c +0 -3
@@ -1560,9 +1560,6 @@ int irq_chip_compose_msi_msg(struct irq_data *data, struct msi_msg *msg)static struct device *irq_get_parent_device (struct irq_data *data) { -if (data->chip->parent_device) -return data->chip->parent_device; -if (data->domain)return data->domain->dev;
[irqchip: irq/irqchip-next] genirq: Kill irq_chip::parent_device
In reply to Marc ZyngierThe following commit has been merged into the irq/irqchip-next branch of irqchip:
The following commit has been merged into the irq/irqchip-next branch of irqchip:
Commit-ID: beb0622138cd2848dec06b0651a988c39d099574 Gitweb: https://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms/beb0622138cd2848dec06b0651a988c39d099574 Author: Marc Zyngier <[email protected]> AuthorDate: Tue, 01 Feb 2022 12:03:10 Committer: Marc Zyngier <[email protected]> CommitterDate: Thu, 10 Feb 2022 11:07:04
genirq: Kill irq_chip::parent_device
Now that noone is using irq_chip::parent_device in the tree, get rid of it.
--- include/linux/irq.h | 2 -- kernel/irq/chip.c | 3 --- 2 files changed, 5 deletions(-)
include/linux/irq.h +0 -2
@@ -456,7 +456,6 @@ static inline irq_hw_number_t irqd_to_hwirq(struct irq_data *d)/** * struct irq_chip - hardware interrupt chip descriptor * -* @parent_device: pointer to parent device for irqchip * @name: name for /proc/interrupts * @irq_startup: start up the interrupt (defaults to ->enable if NULL) * @irq_shutdown: shut down the interrupt (defaults to ->disable if NULL)
@@ -503,7 +502,6 @@ static inline irq_hw_number_t irqd_to_hwirq(struct irq_data *d)* @flags: chip specific flags */ struct irq_chip { -struct device *parent_device;const char *name;unsigned int (*irq_startup)(struct irq_data *data);void (*irq_shutdown)(struct irq_data *data);
kernel/irq/chip.c +0 -3
@@ -1560,9 +1560,6 @@ int irq_chip_compose_msi_msg(struct irq_data *data, struct msi_msg *msg)static struct device *irq_get_parent_device (struct irq_data *data) { -if (data->chip->parent_device) -return data->chip->parent_device; -if (data->domain)return data->domain->dev;
Quoted 61 lines · Marc Zyngier
Our
irq_chipdata structure currently suffers from two problems:(1) the 'name' field is often dynamically populated with a reference to the underlying HW (DT node dame, for example)
(2) the '
parent_device' which is used to implement runtime PM is also dynamically populated(3) there is at least one instance of a subsystem messing with the internals of
irq_chipstructures (gpiochip_set_irq_hooksis what I know about)These things mean that although the primary use of
irq_chipis to only contain function pointers and other *static* information, the above two fields result in these structures being copied in a number of drivers. Eventually, it would be much better if the various drivers would useirq_chipas an 'ops' data structure (potentially made read-only), and keep the dynamic information somewhere more suitable.For (2) we already have the irqdomain structure that is designed to deal with the context in which interrupts are used, and it makes sense to move the '
parent_device' field over to this structure. This is what this small series is doing, with some minor cleanup on the way.(1) and (3) will be dealt in separate series (and I don't have a good solution for (3) yet).
Thanks,
M.Marc Zyngier (12):
genirq: Allow the PM device to originate from irq domain irqchip/gic: Move PM device over to irq domain irqchip/renesas-intc-gpio: Move PM device over to irq domain irqchip/renesas-irqc: Move PM device over to irq domain irqchip/imx-intmux: Move PM device over to irq domain
gpio: mt7621: Killparent_deviceusage
gpio: omap: Move PM device over to irq domain
gpio: rcar: Move PM device over to irq domain
gpio: tpmx86: Move PM device over to irq domain
pinctrl: npcm: Fix broken references tochip->parent_device
pinctrl: starfive: Move PM device over to irq domain
genirq: Killirq_chip::parent_devicedrivers/gpio/gpio-mt7621.c | 1 - drivers/gpio/gpio-omap.c | 7 ++++--- drivers/gpio/gpio-rcar.c | 2 +- drivers/gpio/gpio-tqmx86.c | 3 ++- drivers/irqchip/irq-gic.c | 12 +++++------ drivers/irqchip/irq-imx-intmux.c | 8 +++----- drivers/irqchip/irq-renesas-intc-irqpin.c | 3 ++- drivers/irqchip/irq-renesas-irqc.c | 3 ++- drivers/pinctrl/nuvoton/pinctrl-npcm7xx.c | 25 +++++++++++------------ drivers/pinctrl/pinctrl-starfive.c | 3 ++- include/linux/irq.h | 2 -- include/linux/irqdomain.h | 10 +++++++++ kernel/irq/chip.c | 20 +++++++++++++----- 13 files changed, 59 insertions(+), 40 deletions(-)
Quoted 3 lines
--
2.30.2
The changes for GPIO are small so:
You can take it through your tree and if there are any conflicts, I'll just ask for an immutable branch.
Bart
_______________________________________________
Linux-mediatek mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/linux-mediatek