efi/apple-properties: Reinstate support for boolean properties
Since commit4466bf8282
("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". Commit6e98503dba
("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. Commit4466bf8282
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:4466bf8282
("efi/apple-properties: use PROPERTY_ENTRY_U8_ARRAY_LEN") Cc: <stable@vger.kernel.org> Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Signed-off-by: Lukas Wunner <lukas@wunner.de> Link: https://lore.kernel.org/r/be958bda75331a011d53c696d1deec8dccd06fd2.1609388549.git.lukas@wunner.de Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
This commit is contained in:
parent
5c8fe583cc
commit
355845b738
|
@ -3,8 +3,9 @@
|
|||
* apple-properties.c - EFI device properties on Macs
|
||||
* Copyright (C) 2016 Lukas Wunner <lukas@wunner.de>
|
||||
*
|
||||
* 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,
|
||||
|
|
Loading…
Reference in New Issue