Thread (3 messages) 3 messages, 3 authors, 2026-01-28

Re: [PATCH] dmaengine: stm32-mdma: Add missing check for device_property_read_u32_array

From: Amelie Delaunay <amelie.delaunay@foss.st.com>
Date: 2026-01-28 10:24:32
Also in: dmaengine, lkml


On 1/28/26 05:23, Chen Ni wrote:
quoted hunk ↗ jump to hunk
Add check for the return value of device_property_read_u32_array() and
return the error if it fails in order to catch the error.

Signed-off-by: Chen Ni <redacted>
---
  drivers/dma/stm32/stm32-mdma.c | 8 +++++---
  1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/drivers/dma/stm32/stm32-mdma.c b/drivers/dma/stm32/stm32-mdma.c
index b87d41b234df..f833724cf42c 100644
--- a/drivers/dma/stm32/stm32-mdma.c
+++ b/drivers/dma/stm32/stm32-mdma.c
@@ -1630,9 +1630,11 @@ static int stm32_mdma_probe(struct platform_device *pdev)
  
  	dmadev->nr_channels = nr_channels;
  	dmadev->nr_requests = nr_requests;
-	device_property_read_u32_array(&pdev->dev, "st,ahb-addr-masks",
-				       dmadev->ahb_addr_masks,
-				       count);
+	ret = device_property_read_u32_array(&pdev->dev, "st,ahb-addr-masks",
+					     dmadev->ahb_addr_masks,
+					     count);
+	if (ret)
+		return ret;
Your patch breaks MDMA on STM32MP1x platforms because 
"st,ahb-addr-masks" is an optional property. That is why the return 
value of device_property_read_u32_array() is intentionally ignored.

Count is used to check the presence of the property and to allocate 
dmadev->ahb_addr_masks accordingly:
	count = device_property_count_u32(&pdev->dev, "st,ahb-addr-masks");
	if (count < 0)
		count = 0;
	[...]
	dmadev->nr_ahb_addr_masks = count;

If the property is not present, dmadev->nr_ahb_addr_masks is set to 0, 
and MDMA behaves correctly.

With your patch, when the property is missing, the MDMA probe fails 
because device_property_read_u32_array() returns -EINVAL. This is 
incorrect since "st,ahb-addr-masks" is an optional property, not a 
required one.

Regards,
Amelie
  
  	dmadev->base = devm_platform_ioremap_resource(pdev, 0);
  	if (IS_ERR(dmadev->base))
  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help