From: Andy Shevchenko <andy.shevchenko@gmail.com>
To: Thomas Gleixner <tglx@linutronix.de>
Cc: Herve Codina <herve.codina@bootlin.com>,
Simon Horman <horms@kernel.org>,
Sai Krishna Gajula <saikrishnag@marvell.com>,
Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Lee Jones <lee@kernel.org>, Arnd Bergmann <arnd@arndb.de>,
Horatiu Vultur <horatiu.vultur@microchip.com>,
UNGLinuxDriver@microchip.com, Andrew Lunn <andrew@lunn.ch>,
Heiner Kallweit <hkallweit1@gmail.com>,
Russell King <linux@armlinux.org.uk>,
Saravana Kannan <saravanak@google.com>,
Bjorn Helgaas <bhelgaas@google.com>,
Philipp Zabel <p.zabel@pengutronix.de>,
Lars Povlsen <lars.povlsen@microchip.com>,
Steen Hegelund <Steen.Hegelund@microchip.com>,
Daniel Machon <daniel.machon@microchip.com>,
Alexandre Belloni <alexandre.belloni@bootlin.com>,
linux-kernel@vger.kernel.org, devicetree@vger.kernel.org,
netdev@vger.kernel.org, linux-pci@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
Allan Nielsen <allan.nielsen@microchip.com>,
Luca Ceresoli <luca.ceresoli@bootlin.com>,
Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Subject: Re: [PATCH v2 11/19] irqchip: Add support for LAN966x OIC
Date: Wed, 5 Jun 2024 23:14:20 +0300 [thread overview]
Message-ID: <ZmDHHFF-qD2UBkMT@surfacebook.localdomain> (raw)
In-Reply-To: <87frtr4goe.ffs@tglx>
Wed, Jun 05, 2024 at 04:17:53PM +0200, Thomas Gleixner kirjoitti:
> On Mon, May 27 2024 at 18:14, Herve Codina wrote:
...
> > + irq_reg_writel(gc, ~0, gc->chip_types[0].regs.disable);
>
> ~0U
>
> > + irq_reg_writel(gc, ~0, gc->chip_types[0].regs.ack);
...
Below just to annoy people a bit :)
(Yes, I understand that this is a prototype, it's just a pre-review in case one
want to blindly copy'n'paste it).
Other than that, I like the result!
> I just did a quick conversion to the template approach. Unsurprisingly
> it removes 30 lines of boiler plate code:
>
> +static void lan966x_oic_chip_init(struct irq_chip_generic *gc)
> +{
> + struct lan966x_oic_data *lan966x_oic = gc->domain->host_data;
> + struct lan966x_oic_chip_regs *chip_regs;
> +
> + gc->reg_base = lan966x_oic->regs;
> +
> + chip_regs = lan966x_oic_chip_regs + gc->irq_base / 32;
> + gc->chip_types[0].regs.enable = chip_regs->reg_off_ena_set;
> + gc->chip_types[0].regs.disable = chip_regs->reg_off_ena_clr;
> + gc->chip_types[0].regs.ack = chip_regs->reg_off_sticky;
> +
> + gc->chip_types[0].chip.irq_startup = lan966x_oic_irq_startup;
> + gc->chip_types[0].chip.irq_shutdown = lan966x_oic_irq_shutdown;
> + gc->chip_types[0].chip.irq_set_type = lan966x_oic_irq_set_type;
> + gc->chip_types[0].chip.irq_mask = irq_gc_mask_disable_reg;
> + gc->chip_types[0].chip.irq_unmask = irq_gc_unmask_enable_reg;
> + gc->chip_types[0].chip.irq_ack = irq_gc_ack_set_bit;
> + gc->private = chip_regs;
> +
> + /* Disable all interrupts handled by this chip */
> + irq_reg_writel(gc, ~0, chip_regs->reg_off_ena_clr);
> +}
> +
> +static void lan966x_oic_chip_exit(struct irq_chip_generic *gc)
> +{
> + /* Disable and ack all interrupts handled by this chip */
> + irq_reg_writel(gc, ~0, gc->chip_types[0].regs.disable);
> + irq_reg_writel(gc, ~0, gc->chip_types[0].regs.ack);
~0U :-)
But I, for example, think that GENMASK() even better as it shows exactly what
bits we set for the HW writes.
> +}
> +
> +static void lan966x_oic_domain_init(struct irq_domain *d)
> +{
> + struct lan966x_oic_data *lan966x_oic = d->host_data;
> +
> + irq_set_chained_handler_and_data(lan966x_oic->irq, lan966x_oic_irq_handler, d);
> +}
> +
> +static int lan966x_oic_probe(struct platform_device *pdev)
> +{
> + struct irq_domain_chip_generic_info gc_info = {
> + .irqs_per_chip = 32,
> + .num_chips = 1,
> + .name = "lan966x-oic"
> + .handler = handle_level_irq,
> + .init = lan966x_oic_chip_init,
> + .destroy = lan966x_oic_chip_exit,
> + };
> +
> + struct irq_domain_info info = {
> + .fwnode = of_node_to_fwnode(pdev->dev.of_node),
It's as simple as dev_fwnode()
> + .size = LAN966X_OIC_NR_IRQ,
> + .hwirq_max = LAN966X_OIC_NR_IRQ,
> + .ops = &irq_generic_chip_ops,
> + .gc_info = &gc_info,
> + .init = lan966x_oic_domain_init,
> + };
> + struct lan966x_oic_data *lan966x_oic;
> + struct device *dev = &pdev->dev;
> +
> + lan966x_oic = devm_kmalloc(dev, sizeof(*lan966x_oic), GFP_KERNEL);
> + if (!lan966x_oic)
> + return -ENOMEM;
> +
> + lan966x_oic->regs = devm_platform_ioremap_resource(pdev, 0);
> + if (IS_ERR(lan966x_oic->regs))
> + return dev_err_probe(dev, PTR_ERR(lan966x_oic->regs), "failed to map resource\n");
> +
> + lan966x_oic->irq = platform_get_irq(pdev, 0);
> + if (lan966x_oic->irq < 0)
> + return dev_err_probe(dev, lan966x_oic->irq, "failed to get the IRQ\n");
> +
> + lan966x_oic->domain = irq_domain_instantiate(&info);
> + if (!lan966x_oic->domain)
> + return -ENOMEM;
> +
> + platform_set_drvdata(pdev, lan966x_oic);
> + return 0;
> +}
> +
> +static void lan966x_oic_remove(struct platform_device *pdev)
> +{
> + struct lan966x_oic_data *lan966x_oic = platform_get_drvdata(pdev);
> +
> + irq_set_chained_handler_and_data(lan966x_oic->irq, NULL, NULL);
> + irq_domain_remove(lan966x_oic->domain);
> +}
--
With Best Regards,
Andy Shevchenko
WARNING: multiple messages have this Message-ID (diff)
From: Andy Shevchenko <andy.shevchenko@gmail.com>
To: Thomas Gleixner <tglx@linutronix.de>
Cc: Herve Codina <herve.codina@bootlin.com>,
Simon Horman <horms@kernel.org>,
Sai Krishna Gajula <saikrishnag@marvell.com>,
Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Lee Jones <lee@kernel.org>, Arnd Bergmann <arnd@arndb.de>,
Horatiu Vultur <horatiu.vultur@microchip.com>,
UNGLinuxDriver@microchip.com, Andrew Lunn <andrew@lunn.ch>,
Heiner Kallweit <hkallweit1@gmail.com>,
Russell King <linux@armlinux.org.uk>,
Saravana Kannan <saravanak@google.com>,
Bjorn Helgaas <bhelgaas@google.com>,
Philipp Zabel <p.zabel@pengutronix.de>,
Lars Povlsen <lars.povlsen@microchip.com>,
Steen Hegelund <Steen.Hegelund@microchip.com>,
Daniel Machon <daniel.machon@microchip.com>,
Alexandre Belloni <alexandre.belloni@bootlin.com>,
linux-kernel@vger.kernel.org, devicetree@vger.kernel.org,
netdev@vger.kernel.org, linux-pci@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
Allan Nielsen <allan.nielsen@microchip.com>,
Luca Ceresoli <luca.ceresoli@bootlin.com>,
Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Subject: Re: [PATCH v2 11/19] irqchip: Add support for LAN966x OIC
Date: Wed, 5 Jun 2024 23:14:20 +0300 [thread overview]
Message-ID: <ZmDHHFF-qD2UBkMT@surfacebook.localdomain> (raw)
In-Reply-To: <87frtr4goe.ffs@tglx>
Wed, Jun 05, 2024 at 04:17:53PM +0200, Thomas Gleixner kirjoitti:
> On Mon, May 27 2024 at 18:14, Herve Codina wrote:
...
> > + irq_reg_writel(gc, ~0, gc->chip_types[0].regs.disable);
>
> ~0U
>
> > + irq_reg_writel(gc, ~0, gc->chip_types[0].regs.ack);
...
Below just to annoy people a bit :)
(Yes, I understand that this is a prototype, it's just a pre-review in case one
want to blindly copy'n'paste it).
Other than that, I like the result!
> I just did a quick conversion to the template approach. Unsurprisingly
> it removes 30 lines of boiler plate code:
>
> +static void lan966x_oic_chip_init(struct irq_chip_generic *gc)
> +{
> + struct lan966x_oic_data *lan966x_oic = gc->domain->host_data;
> + struct lan966x_oic_chip_regs *chip_regs;
> +
> + gc->reg_base = lan966x_oic->regs;
> +
> + chip_regs = lan966x_oic_chip_regs + gc->irq_base / 32;
> + gc->chip_types[0].regs.enable = chip_regs->reg_off_ena_set;
> + gc->chip_types[0].regs.disable = chip_regs->reg_off_ena_clr;
> + gc->chip_types[0].regs.ack = chip_regs->reg_off_sticky;
> +
> + gc->chip_types[0].chip.irq_startup = lan966x_oic_irq_startup;
> + gc->chip_types[0].chip.irq_shutdown = lan966x_oic_irq_shutdown;
> + gc->chip_types[0].chip.irq_set_type = lan966x_oic_irq_set_type;
> + gc->chip_types[0].chip.irq_mask = irq_gc_mask_disable_reg;
> + gc->chip_types[0].chip.irq_unmask = irq_gc_unmask_enable_reg;
> + gc->chip_types[0].chip.irq_ack = irq_gc_ack_set_bit;
> + gc->private = chip_regs;
> +
> + /* Disable all interrupts handled by this chip */
> + irq_reg_writel(gc, ~0, chip_regs->reg_off_ena_clr);
> +}
> +
> +static void lan966x_oic_chip_exit(struct irq_chip_generic *gc)
> +{
> + /* Disable and ack all interrupts handled by this chip */
> + irq_reg_writel(gc, ~0, gc->chip_types[0].regs.disable);
> + irq_reg_writel(gc, ~0, gc->chip_types[0].regs.ack);
~0U :-)
But I, for example, think that GENMASK() even better as it shows exactly what
bits we set for the HW writes.
> +}
> +
> +static void lan966x_oic_domain_init(struct irq_domain *d)
> +{
> + struct lan966x_oic_data *lan966x_oic = d->host_data;
> +
> + irq_set_chained_handler_and_data(lan966x_oic->irq, lan966x_oic_irq_handler, d);
> +}
> +
> +static int lan966x_oic_probe(struct platform_device *pdev)
> +{
> + struct irq_domain_chip_generic_info gc_info = {
> + .irqs_per_chip = 32,
> + .num_chips = 1,
> + .name = "lan966x-oic"
> + .handler = handle_level_irq,
> + .init = lan966x_oic_chip_init,
> + .destroy = lan966x_oic_chip_exit,
> + };
> +
> + struct irq_domain_info info = {
> + .fwnode = of_node_to_fwnode(pdev->dev.of_node),
It's as simple as dev_fwnode()
> + .size = LAN966X_OIC_NR_IRQ,
> + .hwirq_max = LAN966X_OIC_NR_IRQ,
> + .ops = &irq_generic_chip_ops,
> + .gc_info = &gc_info,
> + .init = lan966x_oic_domain_init,
> + };
> + struct lan966x_oic_data *lan966x_oic;
> + struct device *dev = &pdev->dev;
> +
> + lan966x_oic = devm_kmalloc(dev, sizeof(*lan966x_oic), GFP_KERNEL);
> + if (!lan966x_oic)
> + return -ENOMEM;
> +
> + lan966x_oic->regs = devm_platform_ioremap_resource(pdev, 0);
> + if (IS_ERR(lan966x_oic->regs))
> + return dev_err_probe(dev, PTR_ERR(lan966x_oic->regs), "failed to map resource\n");
> +
> + lan966x_oic->irq = platform_get_irq(pdev, 0);
> + if (lan966x_oic->irq < 0)
> + return dev_err_probe(dev, lan966x_oic->irq, "failed to get the IRQ\n");
> +
> + lan966x_oic->domain = irq_domain_instantiate(&info);
> + if (!lan966x_oic->domain)
> + return -ENOMEM;
> +
> + platform_set_drvdata(pdev, lan966x_oic);
> + return 0;
> +}
> +
> +static void lan966x_oic_remove(struct platform_device *pdev)
> +{
> + struct lan966x_oic_data *lan966x_oic = platform_get_drvdata(pdev);
> +
> + irq_set_chained_handler_and_data(lan966x_oic->irq, NULL, NULL);
> + irq_domain_remove(lan966x_oic->domain);
> +}
--
With Best Regards,
Andy Shevchenko
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2024-06-05 20:14 UTC|newest]
Thread overview: 96+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-05-27 16:14 [PATCH v2 00/19] Add support for the LAN966x PCI device using a DT overlay Herve Codina
2024-05-27 16:14 ` Herve Codina
2024-05-27 16:14 ` [PATCH v2 01/19] mfd: syscon: Add reference counting and device managed support Herve Codina
2024-05-27 16:14 ` Herve Codina
2024-06-18 14:53 ` Arnd Bergmann
2024-06-18 15:55 ` Herve Codina
2024-05-27 16:14 ` [PATCH v2 02/19] reset: mchp: sparx5: Remove dependencies and allow building as a module Herve Codina
2024-05-27 16:14 ` Herve Codina
2024-05-27 16:14 ` [PATCH v2 03/19] reset: mchp: sparx5: Release syscon when not use anymore Herve Codina
2024-05-27 16:14 ` Herve Codina
2024-05-27 16:14 ` [PATCH v2 04/19] reset: core: add get_device()/put_device on rcdev Herve Codina
2024-05-27 16:14 ` Herve Codina
2024-05-27 16:14 ` [PATCH v2 05/19] reset: mchp: sparx5: set the dev member of the reset controller Herve Codina
2024-05-27 16:14 ` Herve Codina
2024-05-27 16:14 ` [PATCH v2 06/19] dt-bindings: net: mscc-miim: Add resets property Herve Codina
2024-05-27 16:14 ` Herve Codina
2024-05-27 19:14 ` Andrew Lunn
2024-05-27 19:14 ` Andrew Lunn
2024-05-28 6:44 ` Krzysztof Kozlowski
2024-05-28 6:44 ` Krzysztof Kozlowski
2024-05-27 16:14 ` [PATCH v2 07/19] net: mdio: mscc-miim: Handle the switch reset Herve Codina
2024-05-27 16:14 ` Herve Codina
2024-05-27 19:16 ` Andrew Lunn
2024-05-27 19:16 ` Andrew Lunn
2024-05-27 16:14 ` [PATCH v2 08/19] dt-bindings: interrupt-controller: Add support for Microchip LAN966x OIC Herve Codina
2024-05-27 16:14 ` Herve Codina
2024-05-27 16:14 ` [PATCH v2 09/19] irqdomain: Add missing parameter descriptions in docs Herve Codina
2024-05-27 16:14 ` Herve Codina
2024-06-04 19:02 ` Thomas Gleixner
2024-06-04 19:02 ` Thomas Gleixner
2024-06-05 15:44 ` [tip: irq/core] irqdomain: Add missing parameter descriptions in kernel-doc comments tip-bot2 for Herve Codina
2024-06-05 20:02 ` [PATCH v2 09/19] irqdomain: Add missing parameter descriptions in docs Andy Shevchenko
2024-06-05 20:02 ` Andy Shevchenko
2024-06-06 7:14 ` Herve Codina
2024-06-06 7:14 ` Herve Codina
2024-06-06 8:46 ` Andy Shevchenko
2024-06-06 8:46 ` Andy Shevchenko
2024-06-06 10:16 ` Herve Codina
2024-06-06 10:16 ` Herve Codina
2024-05-27 16:14 ` [PATCH v2 10/19] irqdomain: Introduce irq_domain_alloc() and irq_domain_publish() Herve Codina
2024-05-27 16:14 ` Herve Codina
2024-06-04 19:59 ` Thomas Gleixner
2024-06-04 19:59 ` Thomas Gleixner
2024-06-05 13:02 ` Thomas Gleixner
2024-06-05 13:02 ` Thomas Gleixner
2024-06-06 15:52 ` Herve Codina
2024-06-06 15:52 ` Herve Codina
2024-06-06 18:11 ` Thomas Gleixner
2024-06-06 18:11 ` Thomas Gleixner
2024-06-07 8:06 ` Herve Codina
2024-06-07 8:06 ` Herve Codina
2024-05-27 16:14 ` [PATCH v2 11/19] irqchip: Add support for LAN966x OIC Herve Codina
2024-05-27 16:14 ` Herve Codina
2024-06-05 14:17 ` Thomas Gleixner
2024-06-05 14:17 ` Thomas Gleixner
2024-06-05 20:14 ` Andy Shevchenko [this message]
2024-06-05 20:14 ` Andy Shevchenko
2024-06-06 15:53 ` Herve Codina
2024-06-06 15:53 ` Herve Codina
2024-05-27 16:14 ` [PATCH v2 12/19] MAINTAINERS: Add the Microchip LAN966x OIC driver entry Herve Codina
2024-05-27 16:14 ` Herve Codina
2024-05-27 16:14 ` [PATCH v2 13/19] of: dynamic: Constify parameter in of_changeset_add_prop_string_array() Herve Codina
2024-05-27 16:14 ` Herve Codina
2024-05-27 16:14 ` [PATCH v2 14/19] of: unittest: Add tests for changeset properties adding Herve Codina
2024-05-27 16:14 ` Herve Codina
2024-05-27 16:14 ` [PATCH v2 15/19] of: dynamic: Introduce of_changeset_add_prop_bool() Herve Codina
2024-05-27 16:14 ` Herve Codina
2024-05-27 16:14 ` [PATCH v2 16/19] of: unittest: Add a test case for of_changeset_add_prop_bool() Herve Codina
2024-05-27 16:14 ` Herve Codina
2024-05-27 16:14 ` [PATCH v2 17/19] PCI: of_property: Add interrupt-controller property in PCI device nodes Herve Codina
2024-05-27 16:14 ` Herve Codina
2024-06-06 19:26 ` Bjorn Helgaas
2024-06-06 19:26 ` Bjorn Helgaas
2024-06-10 21:37 ` Rob Herring
2024-06-10 21:37 ` Rob Herring
2024-06-11 17:13 ` Bjorn Helgaas
2024-05-27 16:14 ` [PATCH v2 18/19] mfd: Add support for LAN966x PCI device Herve Codina
2024-05-27 16:14 ` Herve Codina
2024-06-05 20:24 ` Andy Shevchenko
2024-06-05 20:24 ` Andy Shevchenko
[not found] ` <20240620175646.24455efb@bootlin.com>
2024-06-20 16:43 ` Herve Codina
[not found] ` <CAHp75VdDkv-dxWa60=OLfXAQ8T5CkFiKALbDHaVVKQOK3gJehA@mail.gmail.com>
2024-06-20 16:43 ` Herve Codina
2024-06-20 17:19 ` Herve Codina
2024-06-21 15:45 ` Andy Shevchenko
2024-06-21 18:49 ` Bjorn Helgaas
2024-06-24 11:46 ` Steen Hegelund
2024-06-26 6:52 ` Herve Codina
2024-06-26 7:17 ` Steen Hegelund
2024-06-24 8:20 ` Herve Codina
2024-06-05 21:34 ` Bjorn Helgaas
2024-06-05 21:34 ` Bjorn Helgaas
2024-05-27 16:14 ` [PATCH v2 19/19] MAINTAINERS: Add the Microchip LAN966x PCI driver entry Herve Codina
2024-05-27 16:14 ` Herve Codina
2024-05-30 0:08 ` [PATCH v2 00/19] Add support for the LAN966x PCI device using a DT overlay Jakub Kicinski
2024-05-30 0:08 ` Jakub Kicinski
2024-06-11 19:33 ` Rob Herring
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ZmDHHFF-qD2UBkMT@surfacebook.localdomain \
--to=andy.shevchenko@gmail.com \
--cc=Steen.Hegelund@microchip.com \
--cc=UNGLinuxDriver@microchip.com \
--cc=alexandre.belloni@bootlin.com \
--cc=allan.nielsen@microchip.com \
--cc=andrew@lunn.ch \
--cc=arnd@arndb.de \
--cc=bhelgaas@google.com \
--cc=conor+dt@kernel.org \
--cc=daniel.machon@microchip.com \
--cc=davem@davemloft.net \
--cc=devicetree@vger.kernel.org \
--cc=edumazet@google.com \
--cc=herve.codina@bootlin.com \
--cc=hkallweit1@gmail.com \
--cc=horatiu.vultur@microchip.com \
--cc=horms@kernel.org \
--cc=krzk+dt@kernel.org \
--cc=kuba@kernel.org \
--cc=lars.povlsen@microchip.com \
--cc=lee@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=linux@armlinux.org.uk \
--cc=luca.ceresoli@bootlin.com \
--cc=netdev@vger.kernel.org \
--cc=p.zabel@pengutronix.de \
--cc=pabeni@redhat.com \
--cc=robh@kernel.org \
--cc=saikrishnag@marvell.com \
--cc=saravanak@google.com \
--cc=tglx@linutronix.de \
--cc=thomas.petazzoni@bootlin.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.