Skip to content

Commit 9cb31aa

Browse files
committed
Merge branch 'acpica'
Merge ACPICA updates for 5.16-rc1: - Fix system-wide resume issue caused by evaluating control methods too early in the resume path (Rafael Wysocki). - Add support for Windows 2020 _OSI string (Mario Limonciello). - Add Generic Port Affinity type for SRAT (Alison Schofield). - Add disassembly support for the NHLT ACPI table (Bob Moore). * acpica: ACPICA: Update version to 20210930 ACPICA: iASL table disassembler: Added disassembly support for the NHLT ACPI table ACPICA: ACPI 6.4 SRAT: add Generic Port Affinity type ACPICA: Add support for Windows 2020 _OSI string ACPICA: Avoid evaluating methods too early during system resume
2 parents d5a8fb6 + 93792be commit 9cb31aa

File tree

9 files changed

+274
-17
lines changed

9 files changed

+274
-17
lines changed

drivers/acpi/acpica/acglobal.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,8 @@ extern struct acpi_bit_register_info
226226
acpi_gbl_bit_register_info[ACPI_NUM_BITREG];
227227
ACPI_GLOBAL(u8, acpi_gbl_sleep_type_a);
228228
ACPI_GLOBAL(u8, acpi_gbl_sleep_type_b);
229+
ACPI_GLOBAL(u8, acpi_gbl_sleep_type_a_s0);
230+
ACPI_GLOBAL(u8, acpi_gbl_sleep_type_b_s0);
229231

230232
/*****************************************************************************
231233
*

drivers/acpi/acpica/hwesleep.c

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -147,17 +147,13 @@ acpi_status acpi_hw_extended_sleep(u8 sleep_state)
147147

148148
acpi_status acpi_hw_extended_wake_prep(u8 sleep_state)
149149
{
150-
acpi_status status;
151150
u8 sleep_type_value;
152151

153152
ACPI_FUNCTION_TRACE(hw_extended_wake_prep);
154153

155-
status = acpi_get_sleep_type_data(ACPI_STATE_S0,
156-
&acpi_gbl_sleep_type_a,
157-
&acpi_gbl_sleep_type_b);
158-
if (ACPI_SUCCESS(status)) {
154+
if (acpi_gbl_sleep_type_a_s0 != ACPI_SLEEP_TYPE_INVALID) {
159155
sleep_type_value =
160-
((acpi_gbl_sleep_type_a << ACPI_X_SLEEP_TYPE_POSITION) &
156+
((acpi_gbl_sleep_type_a_s0 << ACPI_X_SLEEP_TYPE_POSITION) &
161157
ACPI_X_SLEEP_TYPE_MASK);
162158

163159
(void)acpi_write((u64)(sleep_type_value | ACPI_X_SLEEP_ENABLE),

drivers/acpi/acpica/hwsleep.c

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ acpi_status acpi_hw_legacy_sleep(u8 sleep_state)
179179

180180
acpi_status acpi_hw_legacy_wake_prep(u8 sleep_state)
181181
{
182-
acpi_status status;
182+
acpi_status status = AE_OK;
183183
struct acpi_bit_register_info *sleep_type_reg_info;
184184
struct acpi_bit_register_info *sleep_enable_reg_info;
185185
u32 pm1a_control;
@@ -192,10 +192,7 @@ acpi_status acpi_hw_legacy_wake_prep(u8 sleep_state)
192192
* This is unclear from the ACPI Spec, but it is required
193193
* by some machines.
194194
*/
195-
status = acpi_get_sleep_type_data(ACPI_STATE_S0,
196-
&acpi_gbl_sleep_type_a,
197-
&acpi_gbl_sleep_type_b);
198-
if (ACPI_SUCCESS(status)) {
195+
if (acpi_gbl_sleep_type_a_s0 != ACPI_SLEEP_TYPE_INVALID) {
199196
sleep_type_reg_info =
200197
acpi_hw_get_bit_register_info(ACPI_BITREG_SLEEP_TYPE);
201198
sleep_enable_reg_info =
@@ -216,9 +213,9 @@ acpi_status acpi_hw_legacy_wake_prep(u8 sleep_state)
216213

217214
/* Insert the SLP_TYP bits */
218215

219-
pm1a_control |= (acpi_gbl_sleep_type_a <<
216+
pm1a_control |= (acpi_gbl_sleep_type_a_s0 <<
220217
sleep_type_reg_info->bit_position);
221-
pm1b_control |= (acpi_gbl_sleep_type_b <<
218+
pm1b_control |= (acpi_gbl_sleep_type_b_s0 <<
222219
sleep_type_reg_info->bit_position);
223220

224221
/* Write the control registers and ignore any errors */

drivers/acpi/acpica/hwxfsleep.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,13 @@ acpi_status acpi_enter_sleep_state_prep(u8 sleep_state)
217217
return_ACPI_STATUS(status);
218218
}
219219

220+
status = acpi_get_sleep_type_data(ACPI_STATE_S0,
221+
&acpi_gbl_sleep_type_a_s0,
222+
&acpi_gbl_sleep_type_b_s0);
223+
if (ACPI_FAILURE(status)) {
224+
acpi_gbl_sleep_type_a_s0 = ACPI_SLEEP_TYPE_INVALID;
225+
}
226+
220227
/* Execute the _PTS method (Prepare To Sleep) */
221228

222229
arg_list.count = 1;

drivers/acpi/acpica/utosi.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ static struct acpi_interface_info acpi_default_supported_interfaces[] = {
7373
{"Windows 2018", NULL, 0, ACPI_OSI_WIN_10_RS4}, /* Windows 10 version 1803 - Added 11/2018 */
7474
{"Windows 2018.2", NULL, 0, ACPI_OSI_WIN_10_RS5}, /* Windows 10 version 1809 - Added 11/2018 */
7575
{"Windows 2019", NULL, 0, ACPI_OSI_WIN_10_19H1}, /* Windows 10 version 1903 - Added 08/2019 */
76+
{"Windows 2020", NULL, 0, ACPI_OSI_WIN_10_20H1}, /* Windows 10 version 2004 - Added 08/2021 */
7677

7778
/* Feature Group Strings */
7879

include/acpi/acpixf.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
/* Current ACPICA subsystem version in YYYYMMDD format */
1414

15-
#define ACPI_CA_VERSION 0x20210730
15+
#define ACPI_CA_VERSION 0x20210930
1616

1717
#include <acpi/acconfig.h>
1818
#include <acpi/actypes.h>

include/acpi/actbl2.h

Lines changed: 249 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
#define ACPI_SIG_MSCT "MSCT" /* Maximum System Characteristics Table */
3636
#define ACPI_SIG_MSDM "MSDM" /* Microsoft Data Management Table */
3737
#define ACPI_SIG_NFIT "NFIT" /* NVDIMM Firmware Interface Table */
38+
#define ACPI_SIG_NHLT "NHLT" /* Non HD Audio Link Table */
3839
#define ACPI_SIG_PCCT "PCCT" /* Platform Communications Channel Table */
3940
#define ACPI_SIG_PDTT "PDTT" /* Platform Debug Trigger Table */
4041
#define ACPI_SIG_PHAT "PHAT" /* Platform Health Assessment Table */
@@ -46,7 +47,6 @@
4647
#define ACPI_SIG_SBST "SBST" /* Smart Battery Specification Table */
4748
#define ACPI_SIG_SDEI "SDEI" /* Software Delegated Exception Interface Table */
4849
#define ACPI_SIG_SDEV "SDEV" /* Secure Devices table */
49-
#define ACPI_SIG_NHLT "NHLT" /* Non-HDAudio Link Table */
5050
#define ACPI_SIG_SVKL "SVKL" /* Storage Volume Key Location Table */
5151

5252
/*
@@ -1409,6 +1409,254 @@ struct nfit_device_handle {
14091409
#define ACPI_NFIT_GET_NODE_ID(handle) \
14101410
(((handle) & ACPI_NFIT_NODE_ID_MASK) >> ACPI_NFIT_NODE_ID_OFFSET)
14111411

1412+
/*******************************************************************************
1413+
*
1414+
* NHLT - Non HD Audio Link Table
1415+
*
1416+
* Conforms to: Intel Smart Sound Technology NHLT Specification
1417+
* Version 0.8.1, January 2020.
1418+
*
1419+
******************************************************************************/
1420+
1421+
/* Main table */
1422+
1423+
struct acpi_table_nhlt {
1424+
struct acpi_table_header header; /* Common ACPI table header */
1425+
u8 endpoint_count;
1426+
};
1427+
1428+
struct acpi_nhlt_endpoint {
1429+
u32 descriptor_length;
1430+
u8 link_type;
1431+
u8 instance_id;
1432+
u16 vendor_id;
1433+
u16 device_id;
1434+
u16 revision_id;
1435+
u32 subsystem_id;
1436+
u8 device_type;
1437+
u8 direction;
1438+
u8 virtual_bus_id;
1439+
};
1440+
1441+
/* Types for link_type field above */
1442+
1443+
#define ACPI_NHLT_RESERVED_HD_AUDIO 0
1444+
#define ACPI_NHLT_RESERVED_DSP 1
1445+
#define ACPI_NHLT_PDM 2
1446+
#define ACPI_NHLT_SSP 3
1447+
#define ACPI_NHLT_RESERVED_SLIMBUS 4
1448+
#define ACPI_NHLT_RESERVED_SOUNDWIRE 5
1449+
#define ACPI_NHLT_TYPE_RESERVED 6 /* 6 and above are reserved */
1450+
1451+
/* All other values above are reserved */
1452+
1453+
/* Values for device_id field above */
1454+
1455+
#define ACPI_NHLT_PDM_DMIC 0xAE20
1456+
#define ACPI_NHLT_BT_SIDEBAND 0xAE30
1457+
#define ACPI_NHLT_I2S_TDM_CODECS 0xAE23
1458+
1459+
/* Values for device_type field above */
1460+
1461+
/* SSP Link */
1462+
1463+
#define ACPI_NHLT_LINK_BT_SIDEBAND 0
1464+
#define ACPI_NHLT_LINK_FM 1
1465+
#define ACPI_NHLT_LINK_MODEM 2
1466+
/* 3 is reserved */
1467+
#define ACPI_NHLT_LINK_SSP_ANALOG_CODEC 4
1468+
1469+
/* PDM Link */
1470+
1471+
#define ACPI_NHLT_PDM_ON_CAVS_1P8 0
1472+
#define ACPI_NHLT_PDM_ON_CAVS_1P5 1
1473+
1474+
/* Values for Direction field above */
1475+
1476+
#define ACPI_NHLT_DIR_RENDER 0
1477+
#define ACPI_NHLT_DIR_CAPTURE 1
1478+
#define ACPI_NHLT_DIR_RENDER_LOOPBACK 2
1479+
#define ACPI_NHLT_DIR_RENDER_FEEDBACK 3
1480+
#define ACPI_NHLT_DIR_RESERVED 4 /* 4 and above are reserved */
1481+
1482+
struct acpi_nhlt_device_specific_config {
1483+
u32 capabilities_size;
1484+
u8 virtual_slot;
1485+
u8 config_type;
1486+
};
1487+
1488+
struct acpi_nhlt_device_specific_config_a {
1489+
u32 capabilities_size;
1490+
u8 virtual_slot;
1491+
u8 config_type;
1492+
u8 array_type;
1493+
};
1494+
1495+
/* Values for Config Type above */
1496+
1497+
#define ACPI_NHLT_TYPE_MIC_ARRAY 0x01
1498+
#define ACPI_NHLT_TYPE_GENERIC 0x00
1499+
1500+
/* Mask for Extension field of array_type */
1501+
1502+
#define ACPI_NHLT_ARRAY_TYPE_MASK 0x10
1503+
1504+
struct acpi_nhlt_device_specific_config_b {
1505+
u32 capabilities_size;
1506+
};
1507+
1508+
struct acpi_nhlt_device_specific_config_c {
1509+
u32 capabilities_size;
1510+
u8 virtual_slot;
1511+
};
1512+
1513+
struct acpi_nhlt_wave_extensible {
1514+
u16 format_tag;
1515+
u16 channel_count;
1516+
u32 samples_per_sec;
1517+
u32 avg_bytes_per_sec;
1518+
u16 block_align;
1519+
u16 bits_per_sample;
1520+
u16 extra_format_size;
1521+
u16 valid_bits_per_sample;
1522+
u32 channel_mask;
1523+
u8 sub_format_guid[16];
1524+
};
1525+
1526+
/* Values for channel_mask above */
1527+
1528+
#define ACPI_NHLT_SPKR_FRONT_LEFT 0x1
1529+
#define ACPI_NHLT_SPKR_FRONT_RIGHT 0x2
1530+
#define ACPI_NHLT_SPKR_FRONT_CENTER 0x4
1531+
#define ACPI_NHLT_SPKR_LOW_FREQ 0x8
1532+
#define ACPI_NHLT_SPKR_BACK_LEFT 0x10
1533+
#define ACPI_NHLT_SPKR_BACK_RIGHT 0x20
1534+
#define ACPI_NHLT_SPKR_FRONT_LEFT_OF_CENTER 0x40
1535+
#define ACPI_NHLT_SPKR_FRONT_RIGHT_OF_CENTER 0x80
1536+
#define ACPI_NHLT_SPKR_BACK_CENTER 0x100
1537+
#define ACPI_NHLT_SPKR_SIDE_LEFT 0x200
1538+
#define ACPI_NHLT_SPKR_SIDE_RIGHT 0x400
1539+
#define ACPI_NHLT_SPKR_TOP_CENTER 0x800
1540+
#define ACPI_NHLT_SPKR_TOP_FRONT_LEFT 0x1000
1541+
#define ACPI_NHLT_SPKR_TOP_FRONT_CENTER 0x2000
1542+
#define ACPI_NHLT_SPKR_TOP_FRONT_RIGHT 0x4000
1543+
#define ACPI_NHLT_SPKR_TOP_BACK_LEFT 0x8000
1544+
#define ACPI_NHLT_SPKR_TOP_BACK_CENTER 0x10000
1545+
#define ACPI_NHLT_SPKR_TOP_BACK_RIGHT 0x20000
1546+
1547+
struct acpi_nhlt_format_config {
1548+
struct acpi_nhlt_wave_extensible format;
1549+
u32 capability_size;
1550+
u8 capabilities[];
1551+
};
1552+
1553+
struct acpi_nhlt_formats_config {
1554+
u8 formats_count;
1555+
};
1556+
1557+
struct acpi_nhlt_device_specific_hdr {
1558+
u8 virtual_slot;
1559+
u8 config_type;
1560+
};
1561+
1562+
/* Types for config_type above */
1563+
1564+
#define ACPI_NHLT_GENERIC 0
1565+
#define ACPI_NHLT_MIC 1
1566+
#define ACPI_NHLT_RENDER 3
1567+
1568+
struct acpi_nhlt_mic_device_specific_config {
1569+
struct acpi_nhlt_device_specific_hdr device_config;
1570+
u8 array_type_ext;
1571+
};
1572+
1573+
/* Values for array_type_ext above */
1574+
1575+
#define SMALL_LINEAR_2ELEMENT 0x0A
1576+
#define BIG_LINEAR_2ELEMENT 0x0B
1577+
#define FIRST_GEOMETRY_LINEAR_4ELEMENT 0x0C
1578+
#define PLANAR_LSHAPED_4ELEMENT 0x0D
1579+
#define SECOND_GEOMETRY_LINEAR_4ELEMENT 0x0E
1580+
#define VENDOR_DEFINED 0x0F
1581+
#define ARRAY_TYPE_MASK 0x0F
1582+
#define ARRAY_TYPE_EXT_MASK 0x10
1583+
1584+
#define NO_EXTENSION 0x0
1585+
#define MIC_SNR_SENSITIVITY_EXT 0x1
1586+
1587+
struct acpi_nhlt_vendor_mic_config {
1588+
u8 type;
1589+
u8 panel;
1590+
u16 speaker_position_distance; // mm
1591+
u16 horizontal_offset; // mm
1592+
u16 vertical_offset; // mm
1593+
u8 frequency_low_band; // 5*hz
1594+
u8 frequency_high_band; // 500*hz
1595+
u16 direction_angle; // -180 - + 180
1596+
u16 elevation_angle; // -180 - + 180
1597+
u16 work_vertical_angle_begin; // -180 - + 180 with 2 deg step
1598+
u16 work_vertical_angle_end; // -180 - + 180 with 2 deg step
1599+
u16 work_horizontal_angle_begin; // -180 - + 180 with 2 deg step
1600+
u16 work_horizontal_angle_end; // -180 - + 180 with 2 deg step
1601+
};
1602+
1603+
/* Values for Type field above */
1604+
1605+
#define MIC_OMNIDIRECTIONAL 0
1606+
#define MIC_SUBCARDIOID 1
1607+
#define MIC_CARDIOID 2
1608+
#define MIC_SUPER_CARDIOID 3
1609+
#define MIC_HYPER_CARDIOID 4
1610+
#define MIC_8_SHAPED 5
1611+
#define MIC_VENDOR_DEFINED 7
1612+
1613+
/* Values for Panel field above */
1614+
1615+
#define MIC_TOP 0
1616+
#define MIC_BOTTOM 1
1617+
#define MIC_LEFT 2
1618+
#define MIC_RIGHT 3
1619+
#define MIC_FRONT 4
1620+
#define MIC_REAR 5
1621+
1622+
struct acpi_nhlt_vendor_mic_device_specific_config {
1623+
struct acpi_nhlt_mic_device_specific_config mic_array_device_config;
1624+
u8 number_of_microphones;
1625+
struct acpi_nhlt_vendor_mic_config mic_config[]; // indexed by number_of_microphones
1626+
};
1627+
1628+
/* Microphone SNR and Sensitivity extension */
1629+
1630+
struct acpi_nhlt_mic_snr_sensitivity_extension {
1631+
u32 SNR;
1632+
u32 sensitivity;
1633+
};
1634+
1635+
struct acpi_nhlt_render_feedback_device_specific_config {
1636+
struct acpi_nhlt_device_specific_config device_config;
1637+
u8 feedback_virtual_slot; // render slot in case of capture
1638+
u16 feedback_channels; // informative only
1639+
u16 feedback_valid_bits_per_sample;
1640+
};
1641+
1642+
/* Linux-specific structures */
1643+
1644+
struct acpi_nhlt_linux_specific_count {
1645+
u8 structure_count;
1646+
};
1647+
1648+
struct acpi_nhlt_linux_specific_data {
1649+
u8 device_id[16];
1650+
u8 device_instance_id;
1651+
u8 device_port_id;
1652+
u8 filler[18];
1653+
};
1654+
1655+
struct acpi_nhlt_table_terminator {
1656+
u32 terminator_value;
1657+
u32 terminator_signature;
1658+
};
1659+
14121660
/*******************************************************************************
14131661
*
14141662
* PCCT - Platform Communications Channel Table (ACPI 5.0)

include/acpi/actbl3.h

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,8 @@ enum acpi_srat_type {
191191
ACPI_SRAT_TYPE_GICC_AFFINITY = 3,
192192
ACPI_SRAT_TYPE_GIC_ITS_AFFINITY = 4, /* ACPI 6.2 */
193193
ACPI_SRAT_TYPE_GENERIC_AFFINITY = 5, /* ACPI 6.3 */
194-
ACPI_SRAT_TYPE_RESERVED = 6 /* 5 and greater are reserved */
194+
ACPI_SRAT_TYPE_GENERIC_PORT_AFFINITY = 6, /* ACPI 6.4 */
195+
ACPI_SRAT_TYPE_RESERVED = 7 /* 7 and greater are reserved */
195196
};
196197

197198
/*
@@ -272,7 +273,11 @@ struct acpi_srat_gic_its_affinity {
272273
u32 its_id;
273274
};
274275

275-
/* 5: Generic Initiator Affinity Structure (ACPI 6.3) */
276+
/*
277+
* Common structure for SRAT subtable types:
278+
* 5: ACPI_SRAT_TYPE_GENERIC_AFFINITY
279+
* 6: ACPI_SRAT_TYPE_GENERIC_PORT_AFFINITY
280+
*/
276281

277282
struct acpi_srat_generic_affinity {
278283
struct acpi_subtable_header header;

include/acpi/actypes.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1281,6 +1281,7 @@ typedef enum {
12811281
#define ACPI_OSI_WIN_10_RS4 0x12
12821282
#define ACPI_OSI_WIN_10_RS5 0x13
12831283
#define ACPI_OSI_WIN_10_19H1 0x14
1284+
#define ACPI_OSI_WIN_10_20H1 0x15
12841285

12851286
/* Definitions of getopt */
12861287

0 commit comments

Comments
 (0)