forked from Minki/linux
platform-drivers-x86 for v5.18-3
Highlights: - asus-wmi bug-fixes - intel-sdsu bug-fixes - build (warning) fixes - couple of hw-id additions The following is an automated git shortlog grouped by driver: asus-wmi: - Fix driver not binding when fan curve control probe fails - Potential buffer overflow in asus_wmi_evaluate_method_buf() dell-laptop: - Add quirk entry for Latitude 7520 gigabyte-wmi: - added support for B660 GAMING X DDR4 motherboard intel-uncore-freq: - Prevent driver loading in guests platform/x86/intel: - pmc/core: change pmc_lpm_modes to static platform/x86/intel/sdsi: - Fix bug in multi packet reads - Poll on ready bit for writes - Handle leaky bucket tools/power/x86/intel-speed-select: - fix build failure when using -Wl,--as-needed -----BEGIN PGP SIGNATURE----- iQFIBAABCAAyFiEEuvA7XScYQRpenhd+kuxHeUQDJ9wFAmJqiAAUHGhkZWdvZWRl QHJlZGhhdC5jb20ACgkQkuxHeUQDJ9yOeQf9FGjQFo9pkv6ziRiww+kdtGkFkB5C 2mJsIoUtmtO7IkytiUrh6KvAQCtYUSwBDeBTuzmVBL2KDBxt2wvQoZfeprD8iYFL pOLhQi00pSmtwQKsn+uPjGEQHU3Mcz7tD9TI2tpjphfuC/GSvsNPxOxQ7evTOFlY h2gGnVnN8YFejPHPTh+pLLe/tuXySULVR8xKtw4bksPUlus0pbLCR4H5PkdVmpIJ nkBz9JSPImJy3os9QFdGbCSuJBG/5Y+ur4qRy5wUE5zY3C9PEIMSxvHRDHPot8P9 8nzeus1a+d2rojPylu9TJXsdcjwxrWJwcVziWfLBWrZw14asSdw3ciGk9w== =M/mz -----END PGP SIGNATURE----- Merge tag 'platform-drivers-x86-v5.18-3' of git://git.kernel.org/pub/scm/linux/kernel/git/pdx86/platform-drivers-x86 Pull x86 platform driver fixes from Hans de Goede: "Highlights: - asus-wmi bug-fixes - intel-sdsu bug-fixes - build (warning) fixes - couple of hw-id additions" * tag 'platform-drivers-x86-v5.18-3' of git://git.kernel.org/pub/scm/linux/kernel/git/pdx86/platform-drivers-x86: platform/x86/intel: pmc/core: change pmc_lpm_modes to static platform/x86/intel/sdsi: Fix bug in multi packet reads platform/x86/intel/sdsi: Poll on ready bit for writes platform/x86/intel/sdsi: Handle leaky bucket platform/x86: intel-uncore-freq: Prevent driver loading in guests platform/x86: gigabyte-wmi: added support for B660 GAMING X DDR4 motherboard platform/x86: dell-laptop: Add quirk entry for Latitude 7520 platform/x86: asus-wmi: Fix driver not binding when fan curve control probe fails platform/x86: asus-wmi: Potential buffer overflow in asus_wmi_evaluate_method_buf() tools/power/x86/intel-speed-select: fix build failure when using -Wl,--as-needed
This commit is contained in:
commit
259b897e5a
@ -371,10 +371,14 @@ static int asus_wmi_evaluate_method_buf(u32 method_id,
|
||||
|
||||
switch (obj->type) {
|
||||
case ACPI_TYPE_BUFFER:
|
||||
if (obj->buffer.length > size)
|
||||
if (obj->buffer.length > size) {
|
||||
err = -ENOSPC;
|
||||
if (obj->buffer.length == 0)
|
||||
break;
|
||||
}
|
||||
if (obj->buffer.length == 0) {
|
||||
err = -ENODATA;
|
||||
break;
|
||||
}
|
||||
|
||||
memcpy(ret_buffer, obj->buffer.pointer, obj->buffer.length);
|
||||
break;
|
||||
@ -2223,9 +2227,10 @@ static int fan_curve_check_present(struct asus_wmi *asus, bool *available,
|
||||
|
||||
err = fan_curve_get_factory_default(asus, fan_dev);
|
||||
if (err) {
|
||||
if (err == -ENODEV || err == -ENODATA)
|
||||
return 0;
|
||||
return err;
|
||||
pr_debug("fan_curve_get_factory_default(0x%08x) failed: %d\n",
|
||||
fan_dev, err);
|
||||
/* Don't cause probe to fail on devices without fan-curves */
|
||||
return 0;
|
||||
}
|
||||
|
||||
*available = true;
|
||||
|
@ -80,6 +80,10 @@ static struct quirk_entry quirk_dell_inspiron_1012 = {
|
||||
.kbd_led_not_present = true,
|
||||
};
|
||||
|
||||
static struct quirk_entry quirk_dell_latitude_7520 = {
|
||||
.kbd_missing_ac_tag = true,
|
||||
};
|
||||
|
||||
static struct platform_driver platform_driver = {
|
||||
.driver = {
|
||||
.name = "dell-laptop",
|
||||
@ -336,6 +340,15 @@ static const struct dmi_system_id dell_quirks[] __initconst = {
|
||||
},
|
||||
.driver_data = &quirk_dell_inspiron_1012,
|
||||
},
|
||||
{
|
||||
.callback = dmi_matched,
|
||||
.ident = "Dell Latitude 7520",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Latitude 7520"),
|
||||
},
|
||||
.driver_data = &quirk_dell_latitude_7520,
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
|
@ -148,6 +148,7 @@ static const struct dmi_system_id gigabyte_wmi_known_working_platforms[] = {
|
||||
DMI_EXACT_MATCH_GIGABYTE_BOARD_NAME("B550I AORUS PRO AX"),
|
||||
DMI_EXACT_MATCH_GIGABYTE_BOARD_NAME("B550M AORUS PRO-P"),
|
||||
DMI_EXACT_MATCH_GIGABYTE_BOARD_NAME("B550M DS3H"),
|
||||
DMI_EXACT_MATCH_GIGABYTE_BOARD_NAME("B660 GAMING X DDR4"),
|
||||
DMI_EXACT_MATCH_GIGABYTE_BOARD_NAME("Z390 I AORUS PRO WIFI-CF"),
|
||||
DMI_EXACT_MATCH_GIGABYTE_BOARD_NAME("X570 AORUS ELITE"),
|
||||
DMI_EXACT_MATCH_GIGABYTE_BOARD_NAME("X570 GAMING X"),
|
||||
|
@ -236,7 +236,7 @@ enum ppfear_regs {
|
||||
#define ADL_LPM_STATUS_LATCH_EN_OFFSET 0x1704
|
||||
#define ADL_LPM_LIVE_STATUS_OFFSET 0x1764
|
||||
|
||||
const char *pmc_lpm_modes[] = {
|
||||
static const char *pmc_lpm_modes[] = {
|
||||
"S0i2.0",
|
||||
"S0i2.1",
|
||||
"S0i2.2",
|
||||
|
@ -51,6 +51,8 @@
|
||||
#define MBOX_TIMEOUT_US 2000
|
||||
#define MBOX_TIMEOUT_ACQUIRE_US 1000
|
||||
#define MBOX_POLLING_PERIOD_US 100
|
||||
#define MBOX_ACQUIRE_NUM_RETRIES 5
|
||||
#define MBOX_ACQUIRE_RETRY_DELAY_MS 500
|
||||
#define MBOX_MAX_PACKETS 4
|
||||
|
||||
#define MBOX_OWNER_NONE 0x00
|
||||
@ -81,7 +83,7 @@ enum sdsi_command {
|
||||
|
||||
struct sdsi_mbox_info {
|
||||
u64 *payload;
|
||||
u64 *buffer;
|
||||
void *buffer;
|
||||
int size;
|
||||
};
|
||||
|
||||
@ -163,9 +165,7 @@ static int sdsi_mbox_cmd_read(struct sdsi_priv *priv, struct sdsi_mbox_info *inf
|
||||
total = 0;
|
||||
loop = 0;
|
||||
do {
|
||||
int offset = SDSI_SIZE_MAILBOX * loop;
|
||||
void __iomem *addr = priv->mbox_addr + offset;
|
||||
u64 *buf = info->buffer + offset / SDSI_SIZE_CMD;
|
||||
void *buf = info->buffer + (SDSI_SIZE_MAILBOX * loop);
|
||||
u32 packet_size;
|
||||
|
||||
/* Poll on ready bit */
|
||||
@ -196,7 +196,7 @@ static int sdsi_mbox_cmd_read(struct sdsi_priv *priv, struct sdsi_mbox_info *inf
|
||||
break;
|
||||
}
|
||||
|
||||
sdsi_memcpy64_fromio(buf, addr, round_up(packet_size, SDSI_SIZE_CMD));
|
||||
sdsi_memcpy64_fromio(buf, priv->mbox_addr, round_up(packet_size, SDSI_SIZE_CMD));
|
||||
|
||||
total += packet_size;
|
||||
|
||||
@ -243,8 +243,8 @@ static int sdsi_mbox_cmd_write(struct sdsi_priv *priv, struct sdsi_mbox_info *in
|
||||
FIELD_PREP(CTRL_PACKET_SIZE, info->size);
|
||||
writeq(control, priv->control_addr);
|
||||
|
||||
/* Poll on run_busy bit */
|
||||
ret = readq_poll_timeout(priv->control_addr, control, !(control & CTRL_RUN_BUSY),
|
||||
/* Poll on ready bit */
|
||||
ret = readq_poll_timeout(priv->control_addr, control, control & CTRL_READY,
|
||||
MBOX_POLLING_PERIOD_US, MBOX_TIMEOUT_US);
|
||||
|
||||
if (ret)
|
||||
@ -263,7 +263,7 @@ static int sdsi_mbox_acquire(struct sdsi_priv *priv, struct sdsi_mbox_info *info
|
||||
{
|
||||
u64 control;
|
||||
u32 owner;
|
||||
int ret;
|
||||
int ret, retries = 0;
|
||||
|
||||
lockdep_assert_held(&priv->mb_lock);
|
||||
|
||||
@ -273,13 +273,29 @@ static int sdsi_mbox_acquire(struct sdsi_priv *priv, struct sdsi_mbox_info *info
|
||||
if (owner != MBOX_OWNER_NONE)
|
||||
return -EBUSY;
|
||||
|
||||
/* Write first qword of payload */
|
||||
writeq(info->payload[0], priv->mbox_addr);
|
||||
/*
|
||||
* If there has been no recent transaction and no one owns the mailbox,
|
||||
* we should acquire it in under 1ms. However, if we've accessed it
|
||||
* recently it may take up to 2.1 seconds to acquire it again.
|
||||
*/
|
||||
do {
|
||||
/* Write first qword of payload */
|
||||
writeq(info->payload[0], priv->mbox_addr);
|
||||
|
||||
/* Check for ownership */
|
||||
ret = readq_poll_timeout(priv->control_addr, control,
|
||||
FIELD_GET(CTRL_OWNER, control) & MBOX_OWNER_INBAND,
|
||||
MBOX_POLLING_PERIOD_US, MBOX_TIMEOUT_ACQUIRE_US);
|
||||
/* Check for ownership */
|
||||
ret = readq_poll_timeout(priv->control_addr, control,
|
||||
FIELD_GET(CTRL_OWNER, control) == MBOX_OWNER_INBAND,
|
||||
MBOX_POLLING_PERIOD_US, MBOX_TIMEOUT_ACQUIRE_US);
|
||||
|
||||
if (FIELD_GET(CTRL_OWNER, control) == MBOX_OWNER_NONE &&
|
||||
retries++ < MBOX_ACQUIRE_NUM_RETRIES) {
|
||||
msleep(MBOX_ACQUIRE_RETRY_DELAY_MS);
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Either we got it or someone else did. */
|
||||
break;
|
||||
} while (true);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -212,6 +212,9 @@ static int __init intel_uncore_init(void)
|
||||
const struct x86_cpu_id *id;
|
||||
int ret;
|
||||
|
||||
if (cpu_feature_enabled(X86_FEATURE_HYPERVISOR))
|
||||
return -ENODEV;
|
||||
|
||||
id = x86_match_cpu(intel_uncore_cpu_ids);
|
||||
if (!id)
|
||||
return -ENODEV;
|
||||
|
@ -42,7 +42,7 @@ ISST_IN := $(OUTPUT)intel-speed-select-in.o
|
||||
$(ISST_IN): prepare FORCE
|
||||
$(Q)$(MAKE) $(build)=intel-speed-select
|
||||
$(OUTPUT)intel-speed-select: $(ISST_IN)
|
||||
$(QUIET_LINK)$(CC) $(CFLAGS) $(LDFLAGS) $< -o $@
|
||||
$(QUIET_LINK)$(CC) $(CFLAGS) $< $(LDFLAGS) -o $@
|
||||
|
||||
clean:
|
||||
rm -f $(ALL_PROGRAMS)
|
||||
|
Loading…
Reference in New Issue
Block a user