diff options
Diffstat (limited to 'meta-seattle/recipes-kernel/linux/files/412-1-styx-linux-tracking.git-2a3f98071e81b66033f6272f6c632023d1dcb1d2.patch')
-rw-r--r-- | meta-seattle/recipes-kernel/linux/files/412-1-styx-linux-tracking.git-2a3f98071e81b66033f6272f6c632023d1dcb1d2.patch | 350 |
1 files changed, 0 insertions, 350 deletions
diff --git a/meta-seattle/recipes-kernel/linux/files/412-1-styx-linux-tracking.git-2a3f98071e81b66033f6272f6c632023d1dcb1d2.patch b/meta-seattle/recipes-kernel/linux/files/412-1-styx-linux-tracking.git-2a3f98071e81b66033f6272f6c632023d1dcb1d2.patch deleted file mode 100644 index 1f392a48..00000000 --- a/meta-seattle/recipes-kernel/linux/files/412-1-styx-linux-tracking.git-2a3f98071e81b66033f6272f6c632023d1dcb1d2.patch +++ /dev/null @@ -1,350 +0,0 @@ -From 2f12ab9f8409067cd3a977994659c1a0e8f3088b Mon Sep 17 00:00:00 2001 -From: Adrian Calianu <adrian.calianu@enea.com> -Date: Mon, 10 Aug 2015 17:19:12 +0200 -Subject: [PATCH] Subject: [PATCH] ACPI / scan: Add support for ACPI _CLS - device matching - -Device drivers typically use ACPI _HIDs/_CIDs listed in struct device_driver -acpi_match_table to match devices. However, for generic drivers, we do not -want to list _HID for all supported devices. Also, certain classes of devices -do not have _CID (e.g. SATA, USB). Instead, we can leverage ACPI _CLS, -which specifies PCI-defined class code (i.e. base-class, subclass and -programming interface). This patch adds support for matching ACPI devices using -the _CLS method. - -To support loadable module, current design uses _HID or _CID to match device's -modalias. With the new way of matching with _CLS this would requires modification -to the current ACPI modalias key to include _CLS. This patch appends PCI-defined -class-code to the existing ACPI modalias as following. - - acpi:<HID>:<CID1>:<CID2>:..:<CIDn>:<bbsspp>: -E.g: - # cat /sys/devices/platform/AMDI0600:00/modalias - acpi:AMDI0600:010601: - -where bb is th base-class code, ss is te sub-class code, and pp is the -programming interface code - -Since there would not be _HID/_CID in the ACPI matching table of the driver, -this patch adds a field to acpi_device_id to specify the matching _CLS. - - static const struct acpi_device_id ahci_acpi_match[] = { - { "", 0, PCI_CLASS_STORAGE_SATA_AHCI }, - {}, - }; - -In this case, the corresponded entry in modules.alias file would be: - - alias acpi*:010601:* ahci_platform - -Signed-off-by: Suravee Suthikulpanit <Suravee.Suthikulpanit@amd.com> - -Upstream-Status: Pending - -Ported from 3.19 kernel, patch provided by AMD. - -Signed-off-by: Adrian Calianu <adrian.calianu@enea.com> ---- - drivers/acpi/acpica/acutils.h | 3 ++ - drivers/acpi/acpica/nsxfname.c | 21 ++++++++++-- - drivers/acpi/acpica/utids.c | 71 +++++++++++++++++++++++++++++++++++++++ - drivers/acpi/scan.c | 20 ++++++++--- - include/acpi/acnames.h | 1 + - include/acpi/actypes.h | 4 ++- - include/linux/mod_devicetable.h | 1 + - scripts/mod/devicetable-offsets.c | 1 + - scripts/mod/file2alias.c | 14 ++++++-- - 9 files changed, 126 insertions(+), 10 deletions(-) - -diff --git a/drivers/acpi/acpica/acutils.h b/drivers/acpi/acpica/acutils.h -index 2b3c5bd..218ddfd 100644 ---- a/drivers/acpi/acpica/acutils.h -+++ b/drivers/acpi/acpica/acutils.h -@@ -430,6 +430,9 @@ acpi_status - acpi_ut_execute_CID(struct acpi_namespace_node *device_node, - struct acpi_pnp_device_id_list ** return_cid_list); - -+acpi_status -+acpi_ut_execute_CLS(struct acpi_namespace_node *device_node, -+ struct acpi_pnp_device_id **return_id); - /* - * utlock - reader/writer locks - */ -diff --git a/drivers/acpi/acpica/nsxfname.c b/drivers/acpi/acpica/nsxfname.c -index d66c326..3754db5 100644 ---- a/drivers/acpi/acpica/nsxfname.c -+++ b/drivers/acpi/acpica/nsxfname.c -@@ -276,11 +276,12 @@ acpi_get_object_info(acpi_handle handle, - struct acpi_pnp_device_id *hid = NULL; - struct acpi_pnp_device_id *uid = NULL; - struct acpi_pnp_device_id *sub = NULL; -+ struct acpi_pnp_device_id *cls = NULL; - char *next_id_string; - acpi_object_type type; - acpi_name name; - u8 param_count = 0; -- u8 valid = 0; -+ u16 valid = 0; - u32 info_size; - u32 i; - acpi_status status; -@@ -320,7 +321,7 @@ acpi_get_object_info(acpi_handle handle, - if ((type == ACPI_TYPE_DEVICE) || (type == ACPI_TYPE_PROCESSOR)) { - /* - * Get extra info for ACPI Device/Processor objects only: -- * Run the Device _HID, _UID, _SUB, and _CID methods. -+ * Run the Device _HID, _UID, _SUB, _CID and _CLS methods. - * - * Note: none of these methods are required, so they may or may - * not be present for this device. The Info->Valid bitfield is used -@@ -351,6 +352,14 @@ acpi_get_object_info(acpi_handle handle, - valid |= ACPI_VALID_SUB; - } - -+ /* Execute the Device._CLS method */ -+ -+ status = acpi_ut_execute_CLS(node, &cls); -+ if (ACPI_SUCCESS(status)) { -+ info_size += cls->length; -+ valid |= ACPI_VALID_CLS; -+ } -+ - /* Execute the Device._CID method */ - - status = acpi_ut_execute_CID(node, &cid_list); -@@ -468,6 +477,11 @@ acpi_get_object_info(acpi_handle handle, - sub, next_id_string); - } - -+ if (cls) { -+ next_id_string = acpi_ns_copy_device_id(&info->cls, -+ cls, next_id_string); -+ } -+ - if (cid_list) { - info->compatible_id_list.count = cid_list->count; - info->compatible_id_list.list_size = cid_list->list_size; -@@ -510,6 +524,9 @@ cleanup: - if (cid_list) { - ACPI_FREE(cid_list); - } -+ if (cls) { -+ ACPI_FREE(cls); -+ } - return (status); - } - -diff --git a/drivers/acpi/acpica/utids.c b/drivers/acpi/acpica/utids.c -index 27431cf..bc77122 100644 ---- a/drivers/acpi/acpica/utids.c -+++ b/drivers/acpi/acpica/utids.c -@@ -416,3 +416,74 @@ cleanup: - acpi_ut_remove_reference(obj_desc); - return_ACPI_STATUS(status); - } -+ -+/******************************************************************************* -+ * -+ * FUNCTION: acpi_ut_execute_CLS -+ * -+ * PARAMETERS: device_node - Node for the device -+ * return_id - Where the string UID is returned -+ * -+ * RETURN: Status -+ * -+ * DESCRIPTION: Executes the _CLS control method that returns PCI-defined -+ * class code of the device. The ACPI spec define _CLS as a -+ * package with three integers. The returned string has format: -+ * -+ * "bbsspp" -+ * where: -+ * bb = Base-class code -+ * ss = Sub-class code -+ * pp = Programming Interface code -+ * -+ ******************************************************************************/ -+ -+acpi_status -+acpi_ut_execute_CLS(struct acpi_namespace_node *device_node, -+ struct acpi_pnp_device_id **return_id) -+{ -+ struct acpi_pnp_device_id *cls; -+ union acpi_operand_object *obj_desc; -+ union acpi_operand_object **cls_objects; -+ acpi_status status; -+ -+ ACPI_FUNCTION_TRACE(ut_execute_CLS); -+ status = acpi_ut_evaluate_object(device_node, METHOD_NAME__CLS, -+ ACPI_BTYPE_PACKAGE, &obj_desc); -+ if (ACPI_FAILURE(status)) -+ return_ACPI_STATUS(status); -+ -+ cls_objects = obj_desc->package.elements; -+ -+ if (obj_desc->common.type == ACPI_TYPE_PACKAGE && -+ obj_desc->package.count == 3 && -+ cls_objects[0]->common.type == ACPI_TYPE_INTEGER && -+ cls_objects[1]->common.type == ACPI_TYPE_INTEGER && -+ cls_objects[2]->common.type == ACPI_TYPE_INTEGER) { -+ -+ /* Allocate a buffer for the CLS */ -+ cls = ACPI_ALLOCATE_ZEROED(sizeof(struct acpi_pnp_device_id) + -+ (acpi_size) 7); -+ if (!cls) { -+ status = AE_NO_MEMORY; -+ goto cleanup; -+ } -+ -+ cls->string = -+ ACPI_ADD_PTR(char, cls, sizeof(struct acpi_pnp_device_id)); -+ -+ sprintf(cls->string, "%02x%02x%02x", -+ (u8)ACPI_TO_INTEGER(cls_objects[0]->integer.value), -+ (u8)ACPI_TO_INTEGER(cls_objects[1]->integer.value), -+ (u8)ACPI_TO_INTEGER(cls_objects[2]->integer.value)); -+ cls->length = 7; -+ *return_id = cls; -+ } -+ -+cleanup: -+ -+ /* On exit, we must delete the return object */ -+ -+ acpi_ut_remove_reference(obj_desc); -+ return_ACPI_STATUS(status); -+} -diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c -index 03141aa..ca6297b1 100644 ---- a/drivers/acpi/scan.c -+++ b/drivers/acpi/scan.c -@@ -1031,11 +1031,18 @@ static const struct acpi_device_id *__acpi_match_device( - if (!device || !device->status.present) - return NULL; - -- list_for_each_entry(hwid, &device->pnp.ids, list) { -- /* First, check the ACPI/PNP IDs provided by the caller. */ -- for (id = ids; id->id[0]; id++) -- if (!strcmp((char *) id->id, hwid->id)) -- return id; -+ list_for_each_entry(hwid, &device->pnp.ids, list) { -+ for (id = ids; id->id[0] || id->cls; id++) { -+ if (id->id[0] && !strcmp((char *) id->id, hwid->id)) { -+ return id; -+ } else if (id->cls) { -+ char buf[7]; -+ -+ sprintf(buf, "%06x", id->cls); -+ if (!strcmp(buf, hwid->id)) -+ return id; -+ } -+ } - - /* - * Next, check the special "PRP0001" ID and try to match the -@@ -2057,6 +2064,9 @@ static void acpi_set_pnp_ids(acpi_handle handle, struct acpi_device_pnp *pnp, - pnp->unique_id = kstrdup(info->unique_id.string, - GFP_KERNEL); - -+ if (info->valid & ACPI_VALID_CLS) -+ acpi_add_id(pnp, info->cls.string); -+ - kfree(info); - - /* -diff --git a/include/acpi/acnames.h b/include/acpi/acnames.h -index 273de70..b52c0dc 100644 ---- a/include/acpi/acnames.h -+++ b/include/acpi/acnames.h -@@ -51,6 +51,7 @@ - #define METHOD_NAME__BBN "_BBN" - #define METHOD_NAME__CBA "_CBA" - #define METHOD_NAME__CID "_CID" -+#define METHOD_NAME__CLS "_CLS" - #define METHOD_NAME__CRS "_CRS" - #define METHOD_NAME__DDN "_DDN" - #define METHOD_NAME__HID "_HID" -diff --git a/include/acpi/actypes.h b/include/acpi/actypes.h -index 1c3002e..0ad0c61 100644 ---- a/include/acpi/actypes.h -+++ b/include/acpi/actypes.h -@@ -1166,7 +1166,7 @@ struct acpi_device_info { - u32 name; /* ACPI object Name */ - acpi_object_type type; /* ACPI object Type */ - u8 param_count; /* If a method, required parameter count */ -- u8 valid; /* Indicates which optional fields are valid */ -+ u16 valid; /* Indicates which optional fields are valid */ - u8 flags; /* Miscellaneous info */ - u8 highest_dstates[4]; /* _sx_d values: 0xFF indicates not valid */ - u8 lowest_dstates[5]; /* _sx_w values: 0xFF indicates not valid */ -@@ -1175,6 +1175,7 @@ struct acpi_device_info { - struct acpi_pnp_device_id hardware_id; /* _HID value */ - struct acpi_pnp_device_id unique_id; /* _UID value */ - struct acpi_pnp_device_id subsystem_id; /* _SUB value */ -+ struct acpi_pnp_device_id cls; /* _CLS value */ - struct acpi_pnp_device_id_list compatible_id_list; /* _CID list <must be last> */ - }; - -@@ -1192,6 +1193,7 @@ struct acpi_device_info { - #define ACPI_VALID_CID 0x20 - #define ACPI_VALID_SXDS 0x40 - #define ACPI_VALID_SXWS 0x80 -+#define ACPI_VALID_CLS 0x100 - - /* Flags for _STA return value (current_status above) */ - -diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h -index 3bfd567..8a958d1 100644 ---- a/include/linux/mod_devicetable.h -+++ b/include/linux/mod_devicetable.h -@@ -35,6 +35,7 @@ struct ieee1394_device_id { - __u32 specifier_id; - __u32 version; - kernel_ulong_t driver_data; -+ __u32 cls; - }; - - -diff --git a/scripts/mod/devicetable-offsets.c b/scripts/mod/devicetable-offsets.c -index fce36d0..aac0be3 100644 ---- a/scripts/mod/devicetable-offsets.c -+++ b/scripts/mod/devicetable-offsets.c -@@ -63,6 +63,7 @@ int main(void) - - DEVID(acpi_device_id); - DEVID_FIELD(acpi_device_id, id); -+ DEVID_FIELD(acpi_device_id, cls); - - DEVID(pnp_device_id); - DEVID_FIELD(pnp_device_id, id); -diff --git a/scripts/mod/file2alias.c b/scripts/mod/file2alias.c -index 78691d5..f5599ad 100644 ---- a/scripts/mod/file2alias.c -+++ b/scripts/mod/file2alias.c -@@ -511,12 +511,22 @@ static int do_serio_entry(const char *filename, - } - ADD_TO_DEVTABLE("serio", serio_device_id, do_serio_entry); - --/* looks like: "acpi:ACPI0003 or acpi:PNP0C0B" or "acpi:LNXVIDEO" */ -+/* looks like: "acpi:ACPI0003" or "acpi:PNP0C0B" or "acpi:LNXVIDEO" or -+ * "acpi:bbsspp" (bb=base-class, ss=sub-class, pp=prog-if) -+ * -+ * NOTE: * Each driver should use one of the following : _HID, _CIDs or _CLS. -+ */ - static int do_acpi_entry(const char *filename, - void *symval, char *alias) - { - DEF_FIELD_ADDR(symval, acpi_device_id, id); -- sprintf(alias, "acpi*:%s:*", *id); -+ DEF_FIELD_ADDR(symval, acpi_device_id, cls); -+ -+ if (id && strlen((const char *)*id)) -+ sprintf(alias, "acpi*:%s:*", *id); -+ else if (cls) -+ sprintf(alias, "acpi*:%06x:*", *cls); -+ - return 1; - } - ADD_TO_DEVTABLE("acpi", acpi_device_id, do_acpi_entry); --- -1.9.1 - |