Skip to content

Commit b7ab6b9

Browse files
committed
Merge branches 'acpi-resource', 'acpi-pmic', 'acpi-battery' and 'acpi-apei'
Merge ACPI resources handling changes, ACPI PMIC and battery drivers changes and ACPI APEI changes for 6.3-rc1: - Add two more entries to the ACPI IRQ override quirk list (Adam Niederer, Werner Sembach). - Add a pmic_i2c_address entry for Intel Bay Trail Crystal Cove to allow intel_soc_pmic_exec_mipi_pmic_seq_element() to be used with the Bay Trail Crystal Cove PMIC OpRegion driver (Hans de Goede). - Add comments with DSDT power OpRegion field names to the ACPI PMIC driver (Hans de Goede). - Fix string termination handling in the ACPI battery driver (Armin Wolf). - Limit error type to 32-bit width in the ACPI APEI error injection code (Shuai Xue). * acpi-resource: ACPI: resource: Do IRQ override on all TongFang GMxRGxx ACPI: resource: Add IRQ overrides for MAINGEAR Vector Pro 2 models * acpi-pmic: ACPI: PMIC: Add comments with DSDT power opregion field names ACPI: PMIC: Add pmic_i2c_address to BYT Crystal Cove support * acpi-battery: ACPI: battery: Increase maximum string length ACPI: battery: Fix buffer overread if not NUL-terminated ACPI: battery: Fix missing NUL-termination with large strings * acpi-apei: ACPI: APEI: EINJ: Limit error type to 32-bit width
5 parents 9f4512c + 17bb704 + 7de6c3f + 91507d2 + 53fc7e8 commit b7ab6b9

File tree

5 files changed

+63
-29
lines changed

5 files changed

+63
-29
lines changed

drivers/acpi/apei/einj.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -616,6 +616,10 @@ static int error_type_set(void *data, u64 val)
616616
u32 available_error_type = 0;
617617
u32 tval, vendor;
618618

619+
/* Only low 32 bits for error type are valid */
620+
if (val & GENMASK_ULL(63, 32))
621+
return -EINVAL;
622+
619623
/*
620624
* Vendor defined types have 0x80000000 bit set, and
621625
* are not enumerated by ACPI_EINJ_GET_ERROR_TYPE

drivers/acpi/battery.c

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@
4242
#define ACPI_BATTERY_STATE_CHARGING 0x2
4343
#define ACPI_BATTERY_STATE_CRITICAL 0x4
4444

45+
#define MAX_STRING_LENGTH 64
46+
4547
MODULE_AUTHOR("Paul Diefenbaugh");
4648
MODULE_AUTHOR("Alexey Starikovskiy <[email protected]>");
4749
MODULE_DESCRIPTION("ACPI Battery Driver");
@@ -118,10 +120,10 @@ struct acpi_battery {
118120
int capacity_granularity_1;
119121
int capacity_granularity_2;
120122
int alarm;
121-
char model_number[32];
122-
char serial_number[32];
123-
char type[32];
124-
char oem_info[32];
123+
char model_number[MAX_STRING_LENGTH];
124+
char serial_number[MAX_STRING_LENGTH];
125+
char type[MAX_STRING_LENGTH];
126+
char oem_info[MAX_STRING_LENGTH];
125127
int state;
126128
int power_unit;
127129
unsigned long flags;
@@ -437,16 +439,25 @@ static int extract_package(struct acpi_battery *battery,
437439
element = &package->package.elements[i];
438440
if (offsets[i].mode) {
439441
u8 *ptr = (u8 *)battery + offsets[i].offset;
442+
u32 len = MAX_STRING_LENGTH;
443+
444+
switch (element->type) {
445+
case ACPI_TYPE_BUFFER:
446+
if (len > element->buffer.length + 1)
447+
len = element->buffer.length + 1;
448+
449+
fallthrough;
450+
case ACPI_TYPE_STRING:
451+
strscpy(ptr, element->string.pointer, len);
440452

441-
if (element->type == ACPI_TYPE_STRING ||
442-
element->type == ACPI_TYPE_BUFFER)
443-
strncpy(ptr, element->string.pointer, 32);
444-
else if (element->type == ACPI_TYPE_INTEGER) {
445-
strncpy(ptr, (u8 *)&element->integer.value,
446-
sizeof(u64));
447-
ptr[sizeof(u64)] = 0;
448-
} else
453+
break;
454+
case ACPI_TYPE_INTEGER:
455+
strscpy(ptr, (u8 *)&element->integer.value, sizeof(u64) + 1);
456+
457+
break;
458+
default:
449459
*ptr = 0; /* don't have value */
460+
}
450461
} else {
451462
int *x = (int *)((u8 *)battery + offsets[i].offset);
452463
*x = (element->type == ACPI_TYPE_INTEGER) ?

drivers/acpi/pmic/intel_pmic_bytcrc.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,7 @@ static const struct intel_pmic_opregion_data intel_crc_pmic_opregion_data = {
283283
.power_table_count= ARRAY_SIZE(power_table),
284284
.thermal_table = thermal_table,
285285
.thermal_table_count = ARRAY_SIZE(thermal_table),
286+
.pmic_i2c_address = 0x6e,
286287
};
287288

288289
static int intel_crc_pmic_opregion_probe(struct platform_device *pdev)

drivers/acpi/pmic/intel_pmic_chtdc_ti.c

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -20,19 +20,19 @@
2020
#define CHTDC_TI_GPADC 0x5a
2121

2222
static struct pmic_table chtdc_ti_power_table[] = {
23-
{ .address = 0x00, .reg = 0x41 },
24-
{ .address = 0x04, .reg = 0x42 },
25-
{ .address = 0x08, .reg = 0x43 },
26-
{ .address = 0x0c, .reg = 0x45 },
27-
{ .address = 0x10, .reg = 0x46 },
28-
{ .address = 0x14, .reg = 0x47 },
29-
{ .address = 0x18, .reg = 0x48 },
30-
{ .address = 0x1c, .reg = 0x49 },
31-
{ .address = 0x20, .reg = 0x4a },
32-
{ .address = 0x24, .reg = 0x4b },
33-
{ .address = 0x28, .reg = 0x4c },
34-
{ .address = 0x2c, .reg = 0x4d },
35-
{ .address = 0x30, .reg = 0x4e },
23+
{ .address = 0x00, .reg = 0x41 }, /* LDO1 */
24+
{ .address = 0x04, .reg = 0x42 }, /* LDO2 */
25+
{ .address = 0x08, .reg = 0x43 }, /* LDO3 */
26+
{ .address = 0x0c, .reg = 0x45 }, /* LDO5 */
27+
{ .address = 0x10, .reg = 0x46 }, /* LDO6 */
28+
{ .address = 0x14, .reg = 0x47 }, /* LDO7 */
29+
{ .address = 0x18, .reg = 0x48 }, /* LDO8 */
30+
{ .address = 0x1c, .reg = 0x49 }, /* LDO9 */
31+
{ .address = 0x20, .reg = 0x4a }, /* LD10 */
32+
{ .address = 0x24, .reg = 0x4b }, /* LD11 */
33+
{ .address = 0x28, .reg = 0x4c }, /* LD12 */
34+
{ .address = 0x2c, .reg = 0x4d }, /* LD13 */
35+
{ .address = 0x30, .reg = 0x4e }, /* LD14 */
3636
};
3737

3838
static struct pmic_table chtdc_ti_thermal_table[] = {

drivers/acpi/resource.c

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -467,17 +467,34 @@ static const struct dmi_system_id lenovo_laptop[] = {
467467
{ }
468468
};
469469

470-
static const struct dmi_system_id schenker_gm_rg[] = {
470+
static const struct dmi_system_id tongfang_gm_rg[] = {
471471
{
472-
.ident = "XMG CORE 15 (M22)",
472+
.ident = "TongFang GMxRGxx/XMG CORE 15 (M22)/TUXEDO Stellaris 15 Gen4 AMD",
473473
.matches = {
474-
DMI_MATCH(DMI_SYS_VENDOR, "SchenkerTechnologiesGmbH"),
475474
DMI_MATCH(DMI_BOARD_NAME, "GMxRGxx"),
476475
},
477476
},
478477
{ }
479478
};
480479

480+
static const struct dmi_system_id maingear_laptop[] = {
481+
{
482+
.ident = "MAINGEAR Vector Pro 2 15",
483+
.matches = {
484+
DMI_MATCH(DMI_SYS_VENDOR, "Micro Electronics Inc"),
485+
DMI_MATCH(DMI_PRODUCT_NAME, "MG-VCP2-15A3070T"),
486+
}
487+
},
488+
{
489+
.ident = "MAINGEAR Vector Pro 2 17",
490+
.matches = {
491+
DMI_MATCH(DMI_SYS_VENDOR, "Micro Electronics Inc"),
492+
DMI_MATCH(DMI_PRODUCT_NAME, "MG-VCP2-17A3070T"),
493+
},
494+
},
495+
{ }
496+
};
497+
481498
struct irq_override_cmp {
482499
const struct dmi_system_id *system;
483500
unsigned char irq;
@@ -492,7 +509,8 @@ static const struct irq_override_cmp override_table[] = {
492509
{ asus_laptop, 1, ACPI_LEVEL_SENSITIVE, ACPI_ACTIVE_LOW, 0, false },
493510
{ lenovo_laptop, 6, ACPI_LEVEL_SENSITIVE, ACPI_ACTIVE_LOW, 0, true },
494511
{ lenovo_laptop, 10, ACPI_LEVEL_SENSITIVE, ACPI_ACTIVE_LOW, 0, true },
495-
{ schenker_gm_rg, 1, ACPI_EDGE_SENSITIVE, ACPI_ACTIVE_LOW, 1, true },
512+
{ tongfang_gm_rg, 1, ACPI_EDGE_SENSITIVE, ACPI_ACTIVE_LOW, 1, true },
513+
{ maingear_laptop, 1, ACPI_EDGE_SENSITIVE, ACPI_ACTIVE_LOW, 1, true },
496514
};
497515

498516
static bool acpi_dev_irq_override(u32 gsi, u8 triggering, u8 polarity,

0 commit comments

Comments
 (0)