]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
fpga: of-fpga-region: Fail if any bridge is missing
authorRomain Gantois <romain.gantois@bootlin.com>
Thu, 27 Nov 2025 15:58:48 +0000 (16:58 +0100)
committerXu Yilun <yilun.xu@linux.intel.com>
Fri, 19 Dec 2025 15:39:20 +0000 (23:39 +0800)
When parsing the region bridge list from the "fpga-bridges" device tree
property, the of-fpga-region driver will silently ignore bridges which fail
to be obtained, for example due to a missing bridge driver or invalid
phandle.

This can lead to hardware issues if a region bridge stays coupled when
partial programming is performed.

Fail if any of the bridges specified in "fpga-bridges" cannot be obtained.

Signed-off-by: Romain Gantois <romain.gantois@bootlin.com>
Link: https://lore.kernel.org/r/20251127-of-fpga-region-fail-if-bridges-not-found-v1-1-ca674f8d07eb@bootlin.com
Reviewed-by: Xu Yilun <yilun.xu@intel.com>
Signed-off-by: Xu Yilun <yilun.xu@linux.intel.com>
drivers/fpga/of-fpga-region.c

index 43db4bb77138a8400873e5bb8d17c85e7e9903b6..caa091224dc54070b4fc6efe989cbd88a571f682 100644 (file)
@@ -83,7 +83,7 @@ static struct fpga_manager *of_fpga_region_get_mgr(struct device_node *np)
  * done with the bridges.
  *
  * Return: 0 for success (even if there are no bridges specified)
- * or -EBUSY if any of the bridges are in use.
+ * or an error code if any of the bridges are not available.
  */
 static int of_fpga_region_get_bridges(struct fpga_region *region)
 {
@@ -130,10 +130,10 @@ static int of_fpga_region_get_bridges(struct fpga_region *region)
                                                 &region->bridge_list);
                of_node_put(br);
 
-               /* If any of the bridges are in use, give up */
-               if (ret == -EBUSY) {
+               /* If any of the bridges are not available, give up */
+               if (ret) {
                        fpga_bridges_put(&region->bridge_list);
-                       return -EBUSY;
+                       return ret;
                }
        }