Message ID | 20210302075105.11515-3-yung-chuan.liao@linux.intel.com |
---|---|
State | New |
Headers | show |
Series | soundwire: add DMI quirks for overridind addr | expand |
On 3/1/21 11:51 PM, Bard Liao wrote: > +++ b/drivers/soundwire/dmi-quirks.c > @@ -0,0 +1,66 @@ > +// SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause) > +// Copyright(c) 2021 Intel Corporation. It looks like this is already in intel-next, so this may be moot. But, is there a specific reason this is dual licensed? If so, can you please include information about the license choice in the cover letter of any future version? If there is no specific reason for this contribution to be dual licensed, please make it GPL-2.0 only.
On 12-04-21, 14:37, Dave Hansen wrote: > On 3/1/21 11:51 PM, Bard Liao wrote: > > +++ b/drivers/soundwire/dmi-quirks.c > > @@ -0,0 +1,66 @@ > > +// SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause) > > +// Copyright(c) 2021 Intel Corporation. > > It looks like this is already in intel-next, so this may be moot. But, > is there a specific reason this is dual licensed? If so, can you please > include information about the license choice in the cover letter of any > future version? The soundwire module from Intel and core soundwire core was always dual licensed, so it kind of followed that.. > If there is no specific reason for this contribution to be dual > licensed, please make it GPL-2.0 only. This module, I would say NO. Unless someone from Intel disagree.. Pierre/Bard..? If all agree I dont see a reason why this cant be updated to GPL only. Thanks
On 4/13/21 11:08 PM, Vinod Koul wrote: > On 12-04-21, 14:37, Dave Hansen wrote: >> On 3/1/21 11:51 PM, Bard Liao wrote: >>> +++ b/drivers/soundwire/dmi-quirks.c >>> @@ -0,0 +1,66 @@ >>> +// SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause) >>> +// Copyright(c) 2021 Intel Corporation. >> >> It looks like this is already in intel-next, so this may be moot. But, >> is there a specific reason this is dual licensed? If so, can you please >> include information about the license choice in the cover letter of any >> future version? > > The soundwire module from Intel and core soundwire core was always dual > licensed, so it kind of followed that.. > >> If there is no specific reason for this contribution to be dual >> licensed, please make it GPL-2.0 only. > > This module, I would say NO. Unless someone from Intel disagree.. > Pierre/Bard..? > > If all agree I dont see a reason why this cant be updated to GPL only. The initial version of those quirks was contributed as a change to drivers/soundwire/slave.c, which is dual-licensed. the code was split to a different file and the dual-license followed. I am personally favorable to keeping the code as is, the quirks are just referring to low-level hardware descriptors that are not aligned with DevID hardware registers in external SoundWire devices. If enumeration was handled at a lower level, e.g. in DSP firmware the same information would be quite useful. That said, it's been agreed with Dave that moving forward all new contributions from Intel with a dual-license would include an explicit statement in the commit message as to why it was selected over plain vanilla GPL-2.0-only.
diff --git a/drivers/soundwire/Makefile b/drivers/soundwire/Makefile index bf1e250d50dd..986776787b9e 100644 --- a/drivers/soundwire/Makefile +++ b/drivers/soundwire/Makefile @@ -20,7 +20,7 @@ soundwire-cadence-y := cadence_master.o obj-$(CONFIG_SOUNDWIRE_CADENCE) += soundwire-cadence.o #Intel driver -soundwire-intel-y := intel.o intel_init.o +soundwire-intel-y := intel.o intel_init.o dmi-quirks.o obj-$(CONFIG_SOUNDWIRE_INTEL) += soundwire-intel.o #Qualcomm driver diff --git a/drivers/soundwire/bus.h b/drivers/soundwire/bus.h index 2e049d39c6e5..40354469860a 100644 --- a/drivers/soundwire/bus.h +++ b/drivers/soundwire/bus.h @@ -7,6 +7,8 @@ #define DEFAULT_BANK_SWITCH_TIMEOUT 3000 #define DEFAULT_PROBE_TIMEOUT 2000 +u64 sdw_dmi_override_adr(struct sdw_bus *bus, u64 addr); + #if IS_ENABLED(CONFIG_ACPI) int sdw_acpi_find_slaves(struct sdw_bus *bus); #else diff --git a/drivers/soundwire/dmi-quirks.c b/drivers/soundwire/dmi-quirks.c new file mode 100644 index 000000000000..249e476e49ea --- /dev/null +++ b/drivers/soundwire/dmi-quirks.c @@ -0,0 +1,66 @@ +// SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause) +// Copyright(c) 2021 Intel Corporation. + +/* + * Soundwire DMI quirks + */ + +#include <linux/device.h> +#include <linux/dmi.h> +#include <linux/soundwire/sdw.h> +#include "bus.h" + +struct adr_remap { + u64 adr; + u64 remapped_adr; +}; + +/* + * HP Spectre 360 Convertible devices do not expose the correct _ADR + * in the DSDT. + * Remap the bad _ADR values to the ones reported by hardware + */ +static const struct adr_remap hp_spectre_360[] = { + { + 0x000010025D070100, + 0x000020025D071100 + }, + { + 0x000110025d070100, + 0x000120025D130800 + }, + {} +}; + +static const struct dmi_system_id adr_remap_quirk_table[] = { + { + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "HP"), + DMI_MATCH(DMI_PRODUCT_NAME, "HP Spectre x360 Convertible"), + }, + .driver_data = (void *)hp_spectre_360, + }, + {} +}; + +u64 sdw_dmi_override_adr(struct sdw_bus *bus, u64 addr) +{ + const struct dmi_system_id *dmi_id; + + /* check if any address remap quirk applies */ + dmi_id = dmi_first_match(adr_remap_quirk_table); + if (dmi_id) { + struct adr_remap *map = dmi_id->driver_data; + + for (map = dmi_id->driver_data; map->adr; map++) { + if (map->adr == addr) { + dev_dbg(bus->dev, "remapped _ADR 0x%llx as 0x%llx\n", + addr, map->remapped_adr); + addr = map->remapped_adr; + break; + } + } + } + + return addr; +} diff --git a/drivers/soundwire/intel.c b/drivers/soundwire/intel.c index a2d5cdaa9998..a401e270a47f 100644 --- a/drivers/soundwire/intel.c +++ b/drivers/soundwire/intel.c @@ -1302,6 +1302,7 @@ static int intel_prop_read(struct sdw_bus *bus) static struct sdw_master_ops sdw_intel_ops = { .read_prop = sdw_master_read_prop, + .override_adr = sdw_dmi_override_adr, .xfer_msg = cdns_xfer_msg, .xfer_msg_defer = cdns_xfer_msg_defer, .reset_page_addr = cdns_reset_page_addr,