On 26-01-20, 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.
> 
> Signed-off-by: Ahmad Fatoum <[email protected]>
> ---
>  .../devicetree/bindings/barebox/barebox,status.rst        | 8 ++++++++
>  drivers/of/base.c                                         | 4 +++-
>  2 files changed, 11 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..06524b218fb1
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/barebox/barebox,status.rst
> @@ -0,0 +1,8 @@
> +barebox,status property
> +=======================
> +
> +barebox interprets ``barebox,status`` the same as it does ``status``,
> +but gives the former precedence if both exist.
> +
> +Use this property only for devices for which barebox has a driver, but
> +that barebox should not be probing on a per-board basis.

I would rephrase the 2nd sentence a bit:

"""
The purpose of this property is to keep the status property of the
upstream DT, provided by Linux, untouched.

This may be necessary to temporary workaround broken barebox drivers on
a per-board basis in case you can't disable the driver due to a
multi-config build.
"""

Regards,
  Marco


> 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    |

Reply via email to