I am confronted with an occasional hang on the Radxa Rock 3A during PCI probe. The board has no PCI devices connected.
This hang doesn't happen in Linux and doesn't happen on the QNAP TS433-eU, which is also RK3568, but actually has PCIe devices, which are probed normally. For such purposes, add a barebox,status property as setting the status to disabled, would impact Linux as well if barebox were to pass along its own device tree, e.g. when installing the UEFI device tree configuration table. Signed-off-by: Ahmad Fatoum <[email protected]> --- v1 -> v2: - rework to make clearer when to use the new property. (Marco) - add example with UEFI device tree configuration table into commit message (Marco) --- .../devicetree/bindings/barebox/barebox,status.rst | 14 ++++++++++++++ drivers/of/base.c | 4 +++- 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 Documentation/devicetree/bindings/barebox/barebox,status.rst diff --git a/Documentation/devicetree/bindings/barebox/barebox,status.rst b/Documentation/devicetree/bindings/barebox/barebox,status.rst new file mode 100644 index 000000000000..03f484cdcfe1 --- /dev/null +++ b/Documentation/devicetree/bindings/barebox/barebox,status.rst @@ -0,0 +1,14 @@ +barebox,status property +======================= + +barebox interprets ``barebox,status`` the same as it does ``status``, +but gives the barebox-specific property precedence if both exist. + +The purpose of this property is to keep the ``status`` property of the +upstream DT, imported from Linux, untouched. + +Using ``barebox,status`` may be necessary to temporarily workaround +barebox drivers that misbehave on a given board; Disabling the driver +may be undesirable if it can handle other instances of the same device +on the board or if barebox is being built to support other boards +at the same time, where the driver functions correctly. diff --git a/drivers/of/base.c b/drivers/of/base.c index 54fd458bd9a1..4e83a757a4e9 100644 --- a/drivers/of/base.c +++ b/drivers/of/base.c @@ -2149,7 +2149,9 @@ int of_device_is_available(const struct device_node *device) const char *status; int statlen; - status = of_get_property(device, "status", &statlen); + status = of_get_property(device, "barebox,status", &statlen); + if (status == NULL) + status = of_get_property(device, "status", &statlen); if (status == NULL) return 1; -- 2.47.3
