Re: [PATCH v2] efi/apple-properties: Reinstate support for boolean properties

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, 31 Dec 2020 at 06:19, Lukas Wunner <lukas@xxxxxxxxx> wrote:
>
> Since commit 4466bf82821b ("efi/apple-properties: use
> PROPERTY_ENTRY_U8_ARRAY_LEN"), my MacBook Pro issues a -ENODATA error
> when trying to assign EFI properties to the discrete GPU:
>
> pci 0000:01:00.0: assigning 56 device properties
> pci 0000:01:00.0: error -61 assigning properties
>
> That's because some of the properties have no value.  They're booleans
> whose presence can be checked by drivers, e.g. "use-backlight-blanking".
>
> Commit 6e98503dba64 ("efi/apple-properties: Remove redundant attribute
> initialization from unmarshal_key_value_pairs()") employed a trick to
> store such booleans as u8 arrays (which is the data type used for all
> other EFI properties on Macs):  It cleared the property_entry's
> "is_array" flag, thereby denoting that the value is stored inline in the
> property_entry.
>
> Commit 4466bf82821b erroneously removed that trick.  It was probably a
> little fragile to begin with.
>
> Reinstate support for boolean properties by explicitly invoking the
> PROPERTY_ENTRY_BOOL() initializer for properties with zero-length value.
>
> Fixes: 4466bf82821b ("efi/apple-properties: use PROPERTY_ENTRY_U8_ARRAY_LEN")
> Signed-off-by: Lukas Wunner <lukas@xxxxxxxxx>
> Reviewed-by: Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx>
> Cc: stable@xxxxxxxxxxxxxxx # v5.5+
> Cc: Dmitry Torokhov <dmitry.torokhov@xxxxxxxxx>
> ---
> v1 -> v2: Check for entry_len instead of !entry_len. (Andy)

Thanks Lukas. I will queue this as a fix.


>
>  drivers/firmware/efi/apple-properties.c | 13 +++++++++----
>  1 file changed, 9 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/firmware/efi/apple-properties.c b/drivers/firmware/efi/apple-properties.c
> index 34f53d898acb..e1926483ae2f 100644
> --- a/drivers/firmware/efi/apple-properties.c
> +++ b/drivers/firmware/efi/apple-properties.c
> @@ -3,8 +3,9 @@
>   * apple-properties.c - EFI device properties on Macs
>   * Copyright (C) 2016 Lukas Wunner <lukas@xxxxxxxxx>
>   *
> - * Note, all properties are considered as u8 arrays.
> - * To get a value of any of them the caller must use device_property_read_u8_array().
> + * Properties are stored either as:
> + * u8 arrays which can be retrieved with device_property_read_u8_array() or
> + * booleans which can be queried with device_property_present().
>   */
>
>  #define pr_fmt(fmt) "apple-properties: " fmt
> @@ -88,8 +89,12 @@ static void __init unmarshal_key_value_pairs(struct dev_header *dev_header,
>
>                 entry_data = ptr + key_len + sizeof(val_len);
>                 entry_len = val_len - sizeof(val_len);
> -               entry[i] = PROPERTY_ENTRY_U8_ARRAY_LEN(key, entry_data,
> -                                                      entry_len);
> +               if (entry_len)
> +                       entry[i] = PROPERTY_ENTRY_U8_ARRAY_LEN(key, entry_data,
> +                                                              entry_len);
> +               else
> +                       entry[i] = PROPERTY_ENTRY_BOOL(key);
> +
>                 if (dump_properties) {
>                         dev_info(dev, "property: %s\n", key);
>                         print_hex_dump(KERN_INFO, pr_fmt(), DUMP_PREFIX_OFFSET,
> --
> 2.29.2
>



[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux