From: Thomas Gleixner <tglx@kernel.org>
To: Alex Elder <elder@riscstar.com>,
radu@rendec.net, robh@kernel.org, krzk+dt@kernel.org,
conor+dt@kernel.org
Cc: Daniel Thompson <daniel@riscstar.com>,
p.zabel@pengutronix.de, mohd.anwar@oss.qualcomm.com,
lorenzo.bianconi@oss.qualcomm.com, danielt@kernel.org,
devicetree@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 2/2] irqchip: introduce TC9564 SoC MSIGEN support
Date: Sun, 08 Nov 2026 22:17:34 +0100 [thread overview]
Message-ID: <871p8vvx8x.ffs@fw13> (raw)
In-Reply-To: <20261012190245.3988619-3-elder@riscstar.com>
On Mon, Oct 12 2026 at 14:02, Alex Elder wrote:
> +config TC9564_MSIGEN
> + tristate "Toshiba TC9564 MSI distributor"
> + depends on TC9564_PCI
> + depends on GENERIC_IRQ_CHIP
s/depends/select/
Otherwise this relies on some other driver to select GENERIC_IRQ_CHIP...
> +/**
> + * struct tc9564_msigen - Context for MSIGEN IRQ domain
> + * @ioaddr: Pointer to mapped MSIGEN memory
> + * @irq: IRQ number for MSIGEN
> + */
> +struct tc9564_msigen {
> + void __iomem *ioaddr;
> + unsigned int irq;
https://docs.kernel.org/process/maintainer-tip.html#struct-declarations-and-initializers
> +};
> +
> +#define HWIRQ_COUNT 25
> +
> +#define MSI_OUT_EN_OFFSET 0x0000
> +#define MSI_MASK_CLR_OFFSET 0x000c
> +#define MSI_MASK_VALUE BIT(0)
> +#define MSI_INT_STS_OFFSET 0x0010
> +
> +static void tc9564_msigen_irq_handler(struct irq_desc *desc)
> +{
> + struct irq_domain *irq_domain = irq_desc_get_handler_data(desc);
> + struct irq_chip *chip = irq_desc_get_chip(desc);
> + struct irq_chip_generic *gc;
> + unsigned long status;
> + unsigned long hwirq;
> +
> + gc = irq_get_domain_generic_chip(irq_domain, 0);
> +
> + chained_irq_enter(chip, desc);
> +
> + status = irq_reg_readl(gc, MSI_INT_STS_OFFSET);
> + for_each_set_bit(hwirq, &status, HWIRQ_COUNT)
> + generic_handle_domain_irq(irq_domain, hwirq);
You want to use generic_handle_demux_domain_irq(), which allows you to
actually implement affinity settings for individual interrupts.
> + /*
> + * Clear the MSI flag. Most interrupts within TC9564 are level-high
> + * type. If any interrupts are still asserted then clearing this flag
> + * will cause the (edge-triggered) MSI to be regenerated.
> + */
> + irq_reg_writel(gc, MSI_MASK_VALUE, MSI_MASK_CLR_OFFSET);
> +
> + chained_irq_exit(chip, desc);
> +}
> +static int tc9564_msigen_irq_domain_init(struct irq_domain *irq_domain)
> +{
> + struct tc9564_msigen *msigen = irq_domain->host_data;
> +
> + irq_set_chained_handler_and_data(msigen->irq, tc9564_msigen_irq_handler,
> + irq_domain);
No line break required. You have 100 characters. All over the place.
> +/* Find the PCI device we're associated with (not necessarily the parent) */
What does that mean and why is this platform device driver dealing with
a PCI device in the first place?
This really wants proper comments explaining this in the source _and_
the change log of this patch. And no, your sloppy cover letter
explanation does not cut it at all.
> +static struct pci_dev *tc9564_msigen_find_pci_dev(struct device *dev)
> +static int tc9564_msigen_probe(struct platform_device *pdev)
> +{
> + struct irq_domain_chip_generic_info dgc_info;
Struct is uninitialized.
> + struct device *dev = &pdev->dev;
> + struct irq_domain *irq_domain;
> + struct tc9564_msigen *msigen;
> + struct irq_domain_info info;
Ditto. Look at other drivers how this is done correctly.
> + struct reset_control *reset;
> + struct pci_dev *pci_dev;
> + struct clk *clk;
> + int ret;
> +
> + pci_dev = tc9564_msigen_find_pci_dev(dev);
> + if (IS_ERR(pci_dev))
> + return dev_err_probe(dev, PTR_ERR(pci_dev),
> + "failed to find PCI device\n");
See bracket rules in the documentation I linked to or simply get rid of
that line break. Same all over the place.
> + dgc_info.name = "tc9564-msigen";
> + dgc_info.handler = handle_level_irq;
> + dgc_info.irqs_per_chip = HWIRQ_COUNT;
> + dgc_info.num_ct = 1;
> + dgc_info.init = tc9564_msigen_irq_chip_init;
> + dgc_info.exit = tc9564_msigen_irq_chip_exit;
> +
> + info.fwnode = of_fwnode_handle(dev->of_node);
> + info.domain_flags = IRQ_DOMAIN_FLAG_DESTROY_GC;
> + info.size = HWIRQ_COUNT;
> + info.hwirq_max = HWIRQ_COUNT;
> + info.ops = &irq_generic_chip_ops;
> + info.host_data = msigen;
> + info.dgc_info = &dgc_info;
> + info.init = tc9564_msigen_irq_domain_init;
> + info.exit = tc9564_msigen_irq_domain_exit;
Both initializations (except for info.host_data) can be done at the
declaration with a static initialization, which avoids that parts of the
structs contain random stack content. No?
Please look through the sashiko comments as well.
Thanks,
tglx
next prev parent reply other threads:[~2026-11-08 21:17 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-12 19:02 [PATCH 0/2] irqchip: add TC9564 support Alex Elder
2026-10-12 19:02 ` [PATCH 1/2] dt-bindings: interrupt-controller: introduce toshiba,tc9564-msigen.yaml Alex Elder
2026-10-12 19:07 ` sashiko-bot
2026-10-12 19:22 ` Alex Elder
2026-10-13 17:54 ` Conor Dooley
2026-10-14 10:15 ` Krzysztof Kozlowski
2026-10-14 10:22 ` Krzysztof Kozlowski
2026-10-14 14:55 ` Alex Elder
2026-10-14 16:41 ` Conor Dooley
2026-10-14 16:57 ` Alex Elder
2026-10-19 19:49 ` Conor Dooley
2026-10-20 9:04 ` Daniel Thompson
2026-10-12 19:02 ` [PATCH 2/2] irqchip: introduce TC9564 SoC MSIGEN support Alex Elder
2026-10-12 19:16 ` sashiko-bot
2026-10-12 20:08 ` Alex Elder
2026-11-08 21:17 ` Thomas Gleixner [this message]
2026-11-09 22:37 ` Alex Elder
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=871p8vvx8x.ffs@fw13 \
--to=tglx@kernel.org \
--cc=conor+dt@kernel.org \
--cc=daniel@riscstar.com \
--cc=danielt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=elder@riscstar.com \
--cc=krzk+dt@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lorenzo.bianconi@oss.qualcomm.com \
--cc=mohd.anwar@oss.qualcomm.com \
--cc=p.zabel@pengutronix.de \
--cc=radu@rendec.net \
--cc=robh@kernel.org \
/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.