On 26-01-21, Ahmad Fatoum wrote: > 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]>
Reviewed-by: Marco Felsch <[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 > > -- #gernperDu #CallMeByMyFirstName Pengutronix e.K. | | Steuerwalder Str. 21 | https://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-9 |
