Linux ATA/IDE development
 help / color / mirror / Atom feed
* [PATCH 0/5] ata: sata_dwc_460ex: cleanups and interrupt ordering fix
@ 2026-06-30 20:24 Rosen Penev
  2026-06-30 20:24 ` [PATCH 1/5] ata: sata_dwc_460ex: use device_property_present() Rosen Penev
  0 siblings, 1 reply; 4+ messages in thread
From: Rosen Penev @ 2026-06-30 20:24 UTC (permalink / raw)
  To: linux-ide; +Cc: Damien Le Moal, Niklas Cassel, open list

This series modernizes the sata_dwc_460ex driver by replacing legacy OF
APIs with their modern device-property and platform-device counterparts,
converting old DMA resource teardown to devm-managed cleanup, fixing a
latent interrupt-ordering bug, and dropping a redundant stack copy of
port_info.

Patch 4 fixes a real issue: sata_dwc_enable_interrupts() was called
before the IRQ handler was registered, so a probe failure or an
asserted interrupt could trigger an unhandled irq storm.

Rosen Penev (5):
  ata: sata_dwc_460ex: use device_property_present()
  ata: sata_dwc_460ex: use platform_get_irq()
  ata: sata_dwc_460ex: use devm for old DMA resource lifetime management
  ata: sata_dwc_460ex: enable SATA interrupts only after IRQ handler is
    registered
  ata: sata_dwc_460ex: drop redundant struct copy of port_info

 drivers/ata/sata_dwc_460ex.c | 66 +++++++++++++++---------------------
 1 file changed, 28 insertions(+), 38 deletions(-)

-- 
2.55.0


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH 1/5] ata: sata_dwc_460ex: use device_property_present()
  2026-06-30 20:24 [PATCH 0/5] ata: sata_dwc_460ex: cleanups and interrupt ordering fix Rosen Penev
@ 2026-06-30 20:24 ` Rosen Penev
  0 siblings, 0 replies; 4+ messages in thread
From: Rosen Penev @ 2026-06-30 20:24 UTC (permalink / raw)
  To: linux-ide; +Cc: Damien Le Moal, Niklas Cassel, open list

There's no need to use np here when dev is enough. Follows the similar
pattern elsewhere where of APIs are replaced with device ones,
especially when using platform_device.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
 drivers/ata/sata_dwc_460ex.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/ata/sata_dwc_460ex.c b/drivers/ata/sata_dwc_460ex.c
index 4fc22ce4bd9a..2bcb3ac5ae21 100644
--- a/drivers/ata/sata_dwc_460ex.c
+++ b/drivers/ata/sata_dwc_460ex.c
@@ -1180,7 +1180,7 @@ static int sata_dwc_probe(struct platform_device *ofdev)
 	}
 
 #ifdef CONFIG_SATA_DWC_OLD_DMA
-	if (!of_property_present(np, "dmas")) {
+	if (!device_property_present(dev, "dmas")) {
 		err = sata_dwc_dma_init_old(ofdev, hsdev);
 		if (err)
 			return err;
-- 
2.55.0


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH 1/5] ata: sata_dwc_460ex: use device_property_present()
  2026-06-30 20:24 [PATCH 0/5] ata: sata_dwc_460ex: cleanups and interrupt ordering fix Rosen Penev
@ 2026-06-30 20:24 ` Rosen Penev
  2026-06-30 20:36   ` sashiko-bot
  0 siblings, 1 reply; 4+ messages in thread
From: Rosen Penev @ 2026-06-30 20:24 UTC (permalink / raw)
  To: linux-ide; +Cc: Damien Le Moal, Niklas Cassel, open list

There's no need to use np here when dev is enough. Follows the similar
pattern elsewhere where of APIs are replaced with device ones,
especially when using platform_device.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
 drivers/ata/sata_dwc_460ex.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/ata/sata_dwc_460ex.c b/drivers/ata/sata_dwc_460ex.c
index 4fc22ce4bd9a..2bcb3ac5ae21 100644
--- a/drivers/ata/sata_dwc_460ex.c
+++ b/drivers/ata/sata_dwc_460ex.c
@@ -1180,7 +1180,7 @@ static int sata_dwc_probe(struct platform_device *ofdev)
 	}
 
 #ifdef CONFIG_SATA_DWC_OLD_DMA
-	if (!of_property_present(np, "dmas")) {
+	if (!device_property_present(dev, "dmas")) {
 		err = sata_dwc_dma_init_old(ofdev, hsdev);
 		if (err)
 			return err;
-- 
2.55.0


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH 1/5] ata: sata_dwc_460ex: use device_property_present()
  2026-06-30 20:24 ` [PATCH 1/5] ata: sata_dwc_460ex: use device_property_present() Rosen Penev
@ 2026-06-30 20:36   ` sashiko-bot
  0 siblings, 0 replies; 4+ messages in thread
From: sashiko-bot @ 2026-06-30 20:36 UTC (permalink / raw)
  To: Rosen Penev; +Cc: cassel, linux-ide, dlemoal

Thank you for your contribution! Sashiko AI review found 3 potential issue(s) to consider:

New issues:
- [Low] Incomplete refactoring: missed identical `of_property_present` pattern.
- [Low] Direct usage of `device_property_present()` without including `<linux/property.h>`.

Pre-existing issues:
- [High] This problem wasn't introduced by this patch, but `clear_interrupt_bit()` ignores its `bit` argument and accidentally clears all pending interrupts.
--

commit 3c350702aea5f359b0516233c160076946c26124
Author: Rosen Penev <rosenp@gmail.com>

ata: sata_dwc_460ex: use device_property_present()

There's no need to use np here when dev is enough. Follows the similar
pattern elsewhere where of APIs are replaced with device ones,
especially when using platform_device.

> diff --git a/drivers/ata/sata_dwc_460ex.c b/drivers/ata/sata_dwc_460ex.c
> index 4fc22ce4bd9aa..2bcb3ac5ae211 100644
> --- a/drivers/ata/sata_dwc_460ex.c
> +++ b/drivers/ata/sata_dwc_460ex.c
> @@ -1180,7 +1180,7 @@ static int sata_dwc_probe(struct platform_device *ofdev)
>  	}
>  
>  #ifdef CONFIG_SATA_DWC_OLD_DMA
> -	if (!of_property_present(np, "dmas")) {
> +	if (!device_property_present(dev, "dmas")) {

[Severity: Low]
Does this require including linux/property.h? The build currently succeeds
due to transitive includes, but it might be safer to include the header
directly to prevent future build breakages if the include chain changes.

[Severity: Low]
Is the intention to replace all of_property_present usages? Looking at
sata_dwc_dma_get_channel() in the same file, it still uses the old function:

	if (!of_property_present(dev->of_node, "dmas"))

Should this be updated as well for consistency?

[Severity: High]
This is a pre-existing issue, but clear_interrupt_bit() seems to ignore its
bit argument and accidentally clears all pending interrupts:

static void clear_interrupt_bit(struct sata_dwc_device *hsdev, u32 bit)
{
	sata_dwc_writel(&hsdev->sata_dwc_regs->intpr,
			sata_dwc_readl(&hsdev->sata_dwc_regs->intpr));
}

Because it reads the entire intpr register and writes it back unmodified,
does this acknowledge and clear all pending interrupts in the write-1-to-clear
register instead of just the requested bit? This could drop device
interrupts when multiple interrupts are asserted simultaneously.

>  		err = sata_dwc_dma_init_old(ofdev, hsdev);
>  		if (err)
>  			return err;

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260630202415.234463-1-rosenp@gmail.com?part=1

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2026-06-30 20:36 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-06-30 20:24 [PATCH 0/5] ata: sata_dwc_460ex: cleanups and interrupt ordering fix Rosen Penev
2026-06-30 20:24 ` [PATCH 1/5] ata: sata_dwc_460ex: use device_property_present() Rosen Penev
  -- strict thread matches above, loose matches on Subject: below --
2026-06-30 20:24 [PATCH 0/5] ata: sata_dwc_460ex: cleanups and interrupt ordering fix Rosen Penev
2026-06-30 20:24 ` [PATCH 1/5] ata: sata_dwc_460ex: use device_property_present() Rosen Penev
2026-06-30 20:36   ` sashiko-bot

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox