Re: [PATCH 1/6] of: base: Add function to check for status = "reserved"
From: Rob Herring
Date: Wed Sep 29 2021 - 11:51:47 EST
On Wed, Sep 29, 2021 at 6:54 AM Zev Weiss <zev@xxxxxxxxxxxxxxxxx> wrote:
>
> Per v0.3 of the Devicetree Specification [0]:
>
> Indicates that the device is operational, but should not be used.
> Typically this is used for devices that are controlled by another
> software component, such as platform firmware.
>
> One use-case for this is in OpenBMC, where certain devices (such as a
> BIOS flash chip) may be shared by the host and the BMC, but cannot be
> accessed by the BMC during its usual boot-time device probing, because
> they require additional (potentially elaborate) coordination with the
> host to arbitrate which processor is controlling the device.
>
> Devices marked with this status should thus be instantiated, but not
> have a driver bound to them or be otherwise touched.
>
> [0] https://github.com/devicetree-org/devicetree-specification/releases/download/v0.3/devicetree-specification-v0.3.pdf
>
> Signed-off-by: Zev Weiss <zev@xxxxxxxxxxxxxxxxx>
> ---
> drivers/of/base.c | 53 +++++++++++++++++++++++++++++++++++++++-------
> include/linux/of.h | 6 ++++++
> 2 files changed, 51 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/of/base.c b/drivers/of/base.c
> index f720c0d246f2..c5cc178fc6bd 100644
> --- a/drivers/of/base.c
> +++ b/drivers/of/base.c
> @@ -579,14 +579,18 @@ int of_machine_is_compatible(const char *compat)
> EXPORT_SYMBOL(of_machine_is_compatible);
>
> /**
> - * __of_device_is_available - check if a device is available for use
> + * __of_device_check_status - check if a device's status matches a particular string
> *
> - * @device: Node to check for availability, with locks already held
> + * @device: Node to check status of, with locks already held
> + * @val: Status string to check for
> + * @alt: Optional alternate status string to check for (NULL to check only @val)
> + * @dflt: default to return if status property absent
> *
> - * Return: True if the status property is absent or set to "okay" or "ok",
> - * false otherwise
> + * Return: True if status property exists and matches either @val or @alt.
> + * @dflt if status property is absent. False otherwise.
> */
> -static bool __of_device_is_available(const struct device_node *device)
> +static bool __of_device_check_status(const struct device_node *device, const char *val,
> + const char *alt, bool dflt)
How about val==NULL means available/okay and then you can get rid of
alt and dflt.
Otherwise, I'd simply not try to share the implementation here and
just add of_device_is_reserved().
Rob