mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
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

      reply	other threads:[~2026-11-08 21:17 UTC|newest]

Thread overview: 12+ 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-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-11-08 21:17   ` Thomas Gleixner [this message]

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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®