OSDN Git Service

ACPICA: add support for ClockInput resource (v6.5)
authorNiyas Sait <niyas.sait@linaro.org>
Wed, 5 Apr 2023 13:39:23 +0000 (15:39 +0200)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Thu, 6 Apr 2023 18:29:11 +0000 (20:29 +0200)
ACPICA commit 661feab5ee01a34af95a389a18c82e79f1aba05a

Link: https://github.com/acpica/acpica/commit/661feab5
Signed-off-by: Bob Moore <robert.moore@intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/acpi/acpica/aclocal.h
drivers/acpi/acpica/acresrc.h
drivers/acpi/acpica/acutils.h
drivers/acpi/acpica/amlresrc.h
drivers/acpi/acpica/rscalc.c
drivers/acpi/acpica/rsdumpinfo.c
drivers/acpi/acpica/rsinfo.c
drivers/acpi/acpica/rsserial.c
drivers/acpi/acpica/utresdecode.c
drivers/acpi/acpica/utresrc.c
include/acpi/acrestyp.h

index 2b876da..12d4a02 100644 (file)
@@ -1122,7 +1122,8 @@ struct acpi_port_info {
 #define ACPI_RESOURCE_NAME_PIN_GROUP            0x90
 #define ACPI_RESOURCE_NAME_PIN_GROUP_FUNCTION   0x91
 #define ACPI_RESOURCE_NAME_PIN_GROUP_CONFIG     0x92
-#define ACPI_RESOURCE_NAME_LARGE_MAX            0x92
+#define ACPI_RESOURCE_NAME_CLOCK_INPUT          0x93
+#define ACPI_RESOURCE_NAME_LARGE_MAX            0x94
 
 /*****************************************************************************
  *
index c2e6c84..d772ff9 100644 (file)
@@ -306,6 +306,7 @@ 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[];
+extern struct acpi_rsconvert_info acpi_rs_convert_clock_input[];
 
 /* These resources require separate get/set tables */
 
@@ -361,6 +362,7 @@ 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[];
+extern struct acpi_rsdump_info acpi_rs_dump_clock_input[];
 #endif
 
 #endif                         /* __ACRESRC_H__ */
index dd06084..edfdbbe 100644 (file)
@@ -53,6 +53,8 @@ extern const char *acpi_gbl_sb_decode[];
 extern const char *acpi_gbl_fc_decode[];
 extern const char *acpi_gbl_pt_decode[];
 extern const char *acpi_gbl_ptyp_decode[];
+extern const char *acpi_gbl_clock_input_mode[];
+extern const char *acpi_gbl_clock_input_scale[];
 #endif
 
 /*
index 8909311..48df447 100644 (file)
@@ -70,6 +70,8 @@
 #define ACPI_RESTAG_TYPE                        "_TTP" /* Translation(1), Static (0) */
 #define ACPI_RESTAG_XFERTYPE                    "_SIZ" /* 8(0), 8And16(1), 16(2) */
 #define ACPI_RESTAG_VENDORDATA                  "_VEN"
+#define ACPI_RESTAG_FQN                         "_FQN"
+#define ACPI_RESTAG_FQD                         "_FQD"
 
 /* Default sizes for "small" resource descriptors */
 
@@ -427,6 +429,20 @@ struct aml_resource_pin_config {
         */
 };
 
+#define AML_RESOURCE_CLOCK_INPUT_REVISION      1       /* ACPI 6.5 */
+
+struct aml_resource_clock_input {
+       AML_RESOURCE_LARGE_HEADER_COMMON u8 revision_id;
+       u16 flags;
+       u16 frequency_divisor;
+       u32 frequency_numerator;
+       /*
+        * Optional fields follow immediately:
+        * 1) Resource Source index
+        * 2) Resource Source String
+        */
+};
+
 #define AML_RESOURCE_PIN_CONFIG_REVISION      1        /* ACPI 6.2 */
 
 struct aml_resource_pin_group {
@@ -533,6 +549,7 @@ union aml_resource {
        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;
+       struct aml_resource_clock_input clock_input;
 
        /* Utility overlays */
 
index 90583db..ffb448f 100644 (file)
@@ -320,6 +320,16 @@ acpi_rs_get_aml_length(struct acpi_resource *resource,
 
                        break;
 
+               case ACPI_RESOURCE_TYPE_CLOCK_INPUT:
+
+                       total_size = (acpi_rs_length)(total_size +
+                                                     resource->data.
+                                                     clock_input.
+                                                     resource_source.
+                                                     string_length);
+
+                       break;
+
                case ACPI_RESOURCE_TYPE_SERIAL_BUS:
 
                        total_size =
@@ -650,6 +660,13 @@ acpi_rs_get_list_length(u8 *aml_buffer,
 
                        break;
 
+               case ACPI_RESOURCE_NAME_CLOCK_INPUT:
+                       extra_struct_bytes =
+                           acpi_rs_stream_option_length(resource_length,
+                                                        minimum_aml_resource_length);
+
+                       break;
+
                default:
 
                        break;
index b8b3744..998a79c 100644 (file)
@@ -301,6 +301,23 @@ struct acpi_rsdump_info acpi_rs_dump_pin_function[10] = {
         "VendorData", NULL},
 };
 
+struct acpi_rsdump_info acpi_rs_dump_clock_input[7] = {
+       {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_clock_input),
+        "ClockInput", NULL},
+       {ACPI_RSD_UINT8, ACPI_RSD_OFFSET(clock_input.revision_id), "RevisionId",
+        NULL},
+       {ACPI_RSD_UINT32, ACPI_RSD_OFFSET(clock_input.frequency_numerator),
+        "FrequencyNumerator", NULL},
+       {ACPI_RSD_UINT32, ACPI_RSD_OFFSET(clock_input.frequency_divisor),
+        "FrequencyDivisor", NULL},
+       {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(clock_input.scale), "Scale",
+        acpi_gbl_clock_input_scale},
+       {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(clock_input.mode), "Mode",
+        acpi_gbl_clock_input_mode},
+       {ACPI_RSD_SOURCE, ACPI_RSD_OFFSET(clock_input.resource_source),
+        "ResourceSource", NULL},
+};
+
 struct acpi_rsdump_info acpi_rs_dump_pin_config[11] = {
        {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_pin_config),
         "PinConfig", NULL},
index eaeb7ab..ad7465d 100644 (file)
@@ -49,6 +49,7 @@ struct acpi_rsconvert_info *acpi_gbl_set_resource_dispatch[] = {
        acpi_rs_convert_pin_group,      /* 0x16, ACPI_RESOURCE_TYPE_PIN_GROUP */
        acpi_rs_convert_pin_group_function,     /* 0x17, ACPI_RESOURCE_TYPE_PIN_GROUP_FUNCTION */
        acpi_rs_convert_pin_group_config,       /* 0x18, ACPI_RESOURCE_TYPE_PIN_GROUP_CONFIG */
+       acpi_rs_convert_clock_input,    /* 0x19, ACPI_RESOURCE_TYPE_CLOCK_INPUT */
 };
 
 /* Dispatch tables for AML-to-resource (Get Resource) conversion functions */
@@ -94,6 +95,7 @@ struct acpi_rsconvert_info *acpi_gbl_get_resource_dispatch[] = {
        acpi_rs_convert_pin_group,      /* 0x10, ACPI_RESOURCE_NAME_PIN_GROUP */
        acpi_rs_convert_pin_group_function,     /* 0x11, ACPI_RESOURCE_NAME_PIN_GROUP_FUNCTION */
        acpi_rs_convert_pin_group_config,       /* 0x12, ACPI_RESOURCE_NAME_PIN_GROUP_CONFIG */
+       acpi_rs_convert_clock_input,    /* 0x13, ACPI_RESOURCE_NAME_CLOCK_INPUT */
 };
 
 /* Subtype table for serial_bus -- I2C, SPI, UART, and CSI2 */
@@ -136,6 +138,7 @@ struct acpi_rsdump_info *acpi_gbl_dump_resource_dispatch[] = {
        acpi_rs_dump_pin_group, /* ACPI_RESOURCE_TYPE_PIN_GROUP */
        acpi_rs_dump_pin_group_function,        /* ACPI_RESOURCE_TYPE_PIN_GROUP_FUNCTION */
        acpi_rs_dump_pin_group_config,  /* ACPI_RESOURCE_TYPE_PIN_GROUP_CONFIG */
+       acpi_rs_dump_clock_input,       /* ACPI_RESOURCE_TYPE_CLOCK_INPUT */
 };
 
 struct acpi_rsdump_info *acpi_gbl_dump_serial_bus_dispatch[] = {
@@ -178,6 +181,7 @@ const u8 acpi_gbl_aml_resource_sizes[] = {
        sizeof(struct aml_resource_pin_group),  /* ACPI_RESOURCE_TYPE_PIN_GROUP */
        sizeof(struct aml_resource_pin_group_function), /* ACPI_RESOURCE_TYPE_PIN_GROUP_FUNCTION */
        sizeof(struct aml_resource_pin_group_config),   /* ACPI_RESOURCE_TYPE_PIN_GROUP_CONFIG */
+       sizeof(struct aml_resource_clock_input),        /* ACPI_RESOURCE_TYPE_CLOCK_INPUT */
 };
 
 const u8 acpi_gbl_resource_struct_sizes[] = {
@@ -221,6 +225,7 @@ const u8 acpi_gbl_resource_struct_sizes[] = {
        ACPI_RS_SIZE(struct acpi_resource_pin_group),
        ACPI_RS_SIZE(struct acpi_resource_pin_group_function),
        ACPI_RS_SIZE(struct acpi_resource_pin_group_config),
+       ACPI_RS_SIZE(struct acpi_resource_clock_input),
 };
 
 const u8 acpi_gbl_aml_resource_serial_bus_sizes[] = {
index f926795..279bfa2 100644 (file)
@@ -111,6 +111,55 @@ struct acpi_rsconvert_info acpi_rs_convert_gpio[18] = {
 
 /*******************************************************************************
  *
+ * acpi_rs_convert_clock_input
+ *
+ ******************************************************************************/
+
+struct acpi_rsconvert_info acpi_rs_convert_clock_input[8] = {
+       {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_CLOCK_INPUT,
+        ACPI_RS_SIZE(struct acpi_resource_clock_input),
+        ACPI_RSC_TABLE_SIZE(acpi_rs_convert_clock_input)},
+
+       {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_CLOCK_INPUT,
+        sizeof(struct aml_resource_clock_input),
+        0}
+       ,
+
+       {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.clock_input.revision_id),
+        AML_OFFSET(clock_input.revision_id),
+        1}
+       ,
+
+       {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.clock_input.mode),
+        AML_OFFSET(clock_input.flags),
+        0}
+       ,
+
+       {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET(data.clock_input.scale),
+        AML_OFFSET(clock_input.flags),
+        1}
+       ,
+
+       {ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.clock_input.frequency_divisor),
+        AML_OFFSET(clock_input.frequency_divisor),
+        2}
+       ,
+
+       {ACPI_RSC_MOVE32, ACPI_RS_OFFSET(data.clock_input.frequency_numerator),
+        AML_OFFSET(clock_input.frequency_numerator),
+        4}
+       ,
+
+       /* Resource Source */
+       {ACPI_RSC_SOURCE, ACPI_RS_OFFSET(data.clock_input.resource_source),
+        0,
+        sizeof(struct aml_resource_clock_input)}
+       ,
+
+};
+
+/*******************************************************************************
+ *
  * acpi_rs_convert_pinfunction
  *
  ******************************************************************************/
index 85730fc..d801d90 100644 (file)
@@ -284,4 +284,15 @@ const char *acpi_gbl_ptyp_decode[] = {
        "Input Schmitt Trigger",
 };
 
+const char *acpi_gbl_clock_input_mode[] = {
+       "Fixed",
+       "Variable",
+};
+
+const char *acpi_gbl_clock_input_scale[] = {
+       "Hz",
+       "KHz",
+       "MHz",
+};
+
 #endif
index 16f9a70..e1cc3d3 100644 (file)
@@ -57,6 +57,8 @@ const u8 acpi_gbl_resource_aml_sizes[] = {
        ACPI_AML_SIZE_LARGE(struct aml_resource_pin_group),
        ACPI_AML_SIZE_LARGE(struct aml_resource_pin_group_function),
        ACPI_AML_SIZE_LARGE(struct aml_resource_pin_group_config),
+       ACPI_AML_SIZE_LARGE(struct aml_resource_clock_input),
+
 };
 
 const u8 acpi_gbl_resource_aml_serial_bus_sizes[] = {
@@ -114,6 +116,7 @@ static const u8 acpi_gbl_resource_types[] = {
        ACPI_VARIABLE_LENGTH,   /* 10 pin_group */
        ACPI_VARIABLE_LENGTH,   /* 11 pin_group_function */
        ACPI_VARIABLE_LENGTH,   /* 12 pin_group_config */
+       ACPI_VARIABLE_LENGTH,   /* 13 clock_input */
 };
 
 /*******************************************************************************
index e5c875f..f913983 100644 (file)
@@ -536,6 +536,15 @@ struct acpi_resource_pin_config {
        u8 *vendor_data;
 };
 
+struct acpi_resource_clock_input {
+       u8 revision_id;
+       u8 mode;
+       u8 scale;
+       u16 frequency_divisor;
+       u32 frequency_numerator;
+       struct acpi_resource_source resource_source;
+};
+
 /* Values for pin_config_type field above */
 
 #define ACPI_PIN_CONFIG_DEFAULT                 0
@@ -613,7 +622,8 @@ struct acpi_resource_pin_group_config {
 #define ACPI_RESOURCE_TYPE_PIN_GROUP            22     /* ACPI 6.2 */
 #define ACPI_RESOURCE_TYPE_PIN_GROUP_FUNCTION   23     /* ACPI 6.2 */
 #define ACPI_RESOURCE_TYPE_PIN_GROUP_CONFIG     24     /* ACPI 6.2 */
-#define ACPI_RESOURCE_TYPE_MAX                  24
+#define ACPI_RESOURCE_TYPE_CLOCK_INPUT          25     /* ACPI 6.5 */
+#define ACPI_RESOURCE_TYPE_MAX                  25
 
 /* Master union for resource descriptors */
 
@@ -647,6 +657,7 @@ union acpi_resource_data {
        struct acpi_resource_pin_group pin_group;
        struct acpi_resource_pin_group_function pin_group_function;
        struct acpi_resource_pin_group_config pin_group_config;
+       struct acpi_resource_clock_input clock_input;
 
        /* Common fields */