Commit 044b7239 authored by Mika Westerberg's avatar Mika Westerberg Committed by Rafael J. Wysocki
Browse files

ACPICA: ACPI 6.2: Add support for PinGroupConfig() resource

ACPICA commit 08b83591c0db751769d61fa889f4f50f575aeffb

PinGroupConfig() is analogous to PinGroupFunction() but instead of mode
(muxing), it is used to apply specific fine-grained configuration to a
set of referenced pins.

The format of this new resource is:

  PinGroupConfig (Shared/Exclusive, PinConfigType, PinConfigValue,
                  ResourceSource, ResourceSourceIndex, ResourceSourceLabel,
                  ResourceUsage, DescriptorName, VendorData)

The PinConfigType/PinConfigValue are the same used by PinConfig()
resource.

Here also the combination of ResourceSource and ResourceSourceLabel is
used to specify the PinGroup() this resource refers to.

Link: https://github.com/acpica/acpica/commit/08b83591


Signed-off-by: default avatarMika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: default avatarLv Zheng <lv.zheng@intel.com>
Signed-off-by: default avatarBob Moore <robert.moore@intel.com>
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent f8a6c866
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -1147,7 +1147,8 @@ struct acpi_port_info {
#define ACPI_RESOURCE_NAME_PIN_CONFIG           0x8F
#define ACPI_RESOURCE_NAME_PIN_GROUP            0x90
#define ACPI_RESOURCE_NAME_PIN_GROUP_FUNCTION   0x91
#define ACPI_RESOURCE_NAME_LARGE_MAX            0x91
#define ACPI_RESOURCE_NAME_PIN_GROUP_CONFIG     0x92
#define ACPI_RESOURCE_NAME_LARGE_MAX            0x92

/*****************************************************************************
 *
+2 −0
Original line number Diff line number Diff line
@@ -336,6 +336,7 @@ extern struct acpi_rsconvert_info acpi_rs_convert_pin_function[];
extern struct acpi_rsconvert_info acpi_rs_convert_pin_config[];
extern struct acpi_rsconvert_info acpi_rs_convert_pin_group[];
extern struct acpi_rsconvert_info acpi_rs_convert_pin_group_function[];
extern struct acpi_rsconvert_info acpi_rs_convert_pin_group_config[];

/* These resources require separate get/set tables */

@@ -389,6 +390,7 @@ extern struct acpi_rsdump_info acpi_rs_dump_general_flags[];
extern struct acpi_rsdump_info acpi_rs_dump_pin_config[];
extern struct acpi_rsdump_info acpi_rs_dump_pin_group[];
extern struct acpi_rsdump_info acpi_rs_dump_pin_group_function[];
extern struct acpi_rsdump_info acpi_rs_dump_pin_group_config[];
#endif

#endif				/* __ACRESRC_H__ */
+21 −0
Original line number Diff line number Diff line
@@ -483,6 +483,26 @@ struct aml_resource_pin_group_function {

#define AML_RESOURCE_PIN_GROUP_FUNCTION_REVISION    1	/* ACPI 6.2 */

struct aml_resource_pin_group_config {
	AML_RESOURCE_LARGE_HEADER_COMMON u8 revision_id;
	u16 flags;
	u8 pin_config_type;
	u32 pin_config_value;
	u8 res_source_index;
	u16 res_source_offset;
	u16 res_source_label_offset;
	u16 vendor_offset;
	u16 vendor_length;
	/*
	 * Optional fields follow immediately:
	 * 1) Resource Source String
	 * 2) Resource Source Label String
	 * 3) Vendor Data bytes
	 */
};

#define AML_RESOURCE_PIN_GROUP_CONFIG_REVISION    1	/* ACPI 6.2 */

/* restore default alignment */

#pragma pack()
@@ -529,6 +549,7 @@ union aml_resource {
	struct aml_resource_pin_config pin_config;
	struct aml_resource_pin_group pin_group;
	struct aml_resource_pin_group_function pin_group_function;
	struct aml_resource_pin_group_config pin_group_config;

	/* Utility overlays */

+26 −0
Original line number Diff line number Diff line
@@ -419,6 +419,23 @@ acpi_rs_get_aml_length(struct acpi_resource *resource,

			break;

		case ACPI_RESOURCE_TYPE_PIN_GROUP_CONFIG:

			total_size = (acpi_rs_length)(total_size +
						      resource->data.
						      pin_group_config.
						      resource_source.
						      string_length +
						      resource->data.
						      pin_group_config.
						      resource_source_label.
						      string_length +
						      resource->data.
						      pin_group_config.
						      vendor_length);

			break;

		default:

			break;
@@ -660,6 +677,15 @@ acpi_rs_get_list_length(u8 *aml_buffer,

			break;

		case ACPI_RESOURCE_NAME_PIN_GROUP_CONFIG:

			extra_struct_bytes +=
			    aml_resource->pin_group_config.vendor_offset -
			    aml_resource->pin_group_config.res_source_offset +
			    aml_resource->pin_group_config.vendor_length;

			break;

		default:

			break;
+24 −0
Original line number Diff line number Diff line
@@ -404,6 +404,30 @@ struct acpi_rsdump_info acpi_rs_dump_pin_group_function[9] = {
	 "VendorData", NULL},
};

struct acpi_rsdump_info acpi_rs_dump_pin_group_config[10] = {
	{ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_pin_group_config),
	 "PinGroupConfig", NULL},
	{ACPI_RSD_UINT8, ACPI_RSD_OFFSET(pin_group_config.revision_id),
	 "RevisionId", NULL},
	{ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(pin_group_config.producer_consumer),
	 "ProducerConsumer", acpi_gbl_consume_decode},
	{ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(pin_group_config.sharable),
	 "Sharing", acpi_gbl_shr_decode},
	{ACPI_RSD_UINT8, ACPI_RSD_OFFSET(pin_group_config.pin_config_type),
	 "PinConfigType", NULL},
	{ACPI_RSD_UINT32, ACPI_RSD_OFFSET(pin_group_config.pin_config_value),
	 "PinConfigValue", NULL},
	{ACPI_RSD_SOURCE_LABEL,
	 ACPI_RSD_OFFSET(pin_group_config.resource_source_label),
	 "ResourceSourceLabel", NULL},
	{ACPI_RSD_SOURCE, ACPI_RSD_OFFSET(pin_group_config.resource_source),
	 "ResourceSource", NULL},
	{ACPI_RSD_UINT16, ACPI_RSD_OFFSET(pin_group_config.vendor_length),
	 "VendorLength", NULL},
	{ACPI_RSD_SHORTLISTX, ACPI_RSD_OFFSET(pin_group_config.vendor_data),
	 "VendorData", NULL},
};

struct acpi_rsdump_info acpi_rs_dump_fixed_dma[4] = {
	{ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_fixed_dma),
	 "FixedDma", NULL},
Loading