Merge tag 'acpi-4.18-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
Pull ACPI updates from Rafael Wysocki: "These update the ACPICA code in the kernel to the 20180508 upstream revision and make it support the RT patch, add CPPC v3 support to the ACPI CPPC library, add a WDAT-based watchdog quirk to prevent clashes with the RTC, add quirks to the ACPI AC and battery drivers, and update the ACPI SoC drivers. Specifics: - Update the ACPICA code in the kernel to the 20180508 upstream revision including: * iASL -tc option enhancement (Bob Moore). * Debugger improvements (Bob Moore). * Support for tables larger than 1 MB in acpidump/acpixtract (Bob Moore). * Minor fixes and cleanups (Colin Ian King, Toomas Soome). - Make the ACPICA code in the kernel support the RT patch (Sebastian Andrzej Siewior, Steven Rostedt). - Add a kmemleak annotation to the ACPICA code (Larry Finger). - Add CPPC v3 support to the ACPI CPPC library and fix two issues related to CPPC (Prashanth Prakash, Al Stone). - Add an ACPI WDAT-based watchdog quirk to prefer iTCO_wdt on systems where WDAT clashes with the RTC SRAM (Mika Westerberg). - Add some quirks to the ACPI AC and battery drivers (Carlo Caione, Hans de Goede). - Update the ACPI SoC drivers for Intel (LPSS) and AMD (APD) platforms (Akshu Agrawal, Hans de Goede). - Fix up some assorted minor issues (Al Stone, Laszlo Toth, Mathieu Malaterre)" * tag 'acpi-4.18-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm: (32 commits) ACPICA: Mark acpi_ut_create_internal_object_dbg() memory allocations as non-leaks ACPI / watchdog: Prefer iTCO_wdt always when WDAT table uses RTC SRAM mailbox: PCC: erroneous error message when parsing ACPI PCCT ACPICA: Update version to 20180508 ACPICA: acpidump/acpixtract: Support for tables larger than 1MB ACPI: APD: Add AMD misc clock handler support clk: x86: Add ST oscout platform clock ACPICA: Update version to 20180427 ACPICA: Debugger: Removed direct support for EC address space in "Test Objects" ACPICA: Debugger: Add Package support for "test objects" command ACPICA: Improve error messages for the namespace root node ACPICA: Fix potential infinite loop in acpi_rs_dump_byte_list ACPICA: vsnprintf: this statement may fall through ACPICA: Tables: Fix spelling mistake in comment ACPICA: iASL: Enhance the -tc option (create AML hex file in C) ACPI: Add missing prototype_for arch_post_acpi_subsys_init() ACPI / tables: improve comments regarding acpi_parse_entries_array() ACPICA: Convert acpi_gbl_hardware lock back to an acpi_raw_spinlock ACPICA: provide abstraction for raw_spinlock_t ACPI / CPPC: Fix invalid PCC channel status errors ...
Dieser Commit ist enthalten in:
@@ -143,6 +143,8 @@ acpi_status
|
||||
fl_split_input_pathname(char *input_path,
|
||||
char **out_directory_path, char **out_filename);
|
||||
|
||||
char *fl_get_file_basename(char *file_pathname);
|
||||
|
||||
char *ad_generate_filename(char *prefix, char *table_id);
|
||||
|
||||
void
|
||||
|
@@ -82,7 +82,7 @@ ACPI_GLOBAL(u8, acpi_gbl_global_lock_pending);
|
||||
* interrupt level
|
||||
*/
|
||||
ACPI_GLOBAL(acpi_spinlock, acpi_gbl_gpe_lock); /* For GPE data structs and registers */
|
||||
ACPI_GLOBAL(acpi_spinlock, acpi_gbl_hardware_lock); /* For ACPI H/W except GPE registers */
|
||||
ACPI_GLOBAL(acpi_raw_spinlock, acpi_gbl_hardware_lock); /* For ACPI H/W except GPE registers */
|
||||
ACPI_GLOBAL(acpi_spinlock, acpi_gbl_reference_count_lock);
|
||||
|
||||
/* Mutex for _OSI support */
|
||||
|
@@ -189,9 +189,15 @@ void acpi_db_dump_namespace(char *start_arg, char *depth_arg)
|
||||
}
|
||||
|
||||
acpi_db_set_output_destination(ACPI_DB_DUPLICATE_OUTPUT);
|
||||
acpi_os_printf("ACPI Namespace (from %4.4s (%p) subtree):\n",
|
||||
((struct acpi_namespace_node *)subtree_entry)->name.
|
||||
ascii, subtree_entry);
|
||||
|
||||
if (((struct acpi_namespace_node *)subtree_entry)->parent) {
|
||||
acpi_os_printf("ACPI Namespace (from %4.4s (%p) subtree):\n",
|
||||
((struct acpi_namespace_node *)subtree_entry)->
|
||||
name.ascii, subtree_entry);
|
||||
} else {
|
||||
acpi_os_printf("ACPI Namespace (from %s):\n",
|
||||
ACPI_NAMESPACE_ROOT);
|
||||
}
|
||||
|
||||
/* Display the subtree */
|
||||
|
||||
|
@@ -30,6 +30,8 @@ acpi_db_test_buffer_type(struct acpi_namespace_node *node, u32 bit_length);
|
||||
static acpi_status
|
||||
acpi_db_test_string_type(struct acpi_namespace_node *node, u32 byte_length);
|
||||
|
||||
static acpi_status acpi_db_test_package_type(struct acpi_namespace_node *node);
|
||||
|
||||
static acpi_status
|
||||
acpi_db_read_from_object(struct acpi_namespace_node *node,
|
||||
acpi_object_type expected_type,
|
||||
@@ -273,6 +275,11 @@ acpi_db_test_one_object(acpi_handle obj_handle,
|
||||
bit_length = byte_length * 8;
|
||||
break;
|
||||
|
||||
case ACPI_TYPE_PACKAGE:
|
||||
|
||||
local_type = ACPI_TYPE_PACKAGE;
|
||||
break;
|
||||
|
||||
case ACPI_TYPE_FIELD_UNIT:
|
||||
case ACPI_TYPE_BUFFER_FIELD:
|
||||
case ACPI_TYPE_LOCAL_REGION_FIELD:
|
||||
@@ -305,6 +312,7 @@ acpi_db_test_one_object(acpi_handle obj_handle,
|
||||
|
||||
acpi_os_printf("%14s: %4.4s",
|
||||
acpi_ut_get_type_name(node->type), node->name.ascii);
|
||||
|
||||
if (!obj_desc) {
|
||||
acpi_os_printf(" Ignoring, no attached object\n");
|
||||
return (AE_OK);
|
||||
@@ -322,14 +330,13 @@ acpi_db_test_one_object(acpi_handle obj_handle,
|
||||
case ACPI_ADR_SPACE_SYSTEM_MEMORY:
|
||||
case ACPI_ADR_SPACE_SYSTEM_IO:
|
||||
case ACPI_ADR_SPACE_PCI_CONFIG:
|
||||
case ACPI_ADR_SPACE_EC:
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
acpi_os_printf
|
||||
(" %s space is not supported [%4.4s]\n",
|
||||
(" %s space is not supported in this command [%4.4s]\n",
|
||||
acpi_ut_get_region_name(region_obj->region.
|
||||
space_id),
|
||||
region_obj->region.node->name.ascii);
|
||||
@@ -359,6 +366,11 @@ acpi_db_test_one_object(acpi_handle obj_handle,
|
||||
status = acpi_db_test_buffer_type(node, bit_length);
|
||||
break;
|
||||
|
||||
case ACPI_TYPE_PACKAGE:
|
||||
|
||||
status = acpi_db_test_package_type(node);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
acpi_os_printf(" Ignoring, type not implemented (%2.2X)",
|
||||
@@ -366,6 +378,13 @@ acpi_db_test_one_object(acpi_handle obj_handle,
|
||||
break;
|
||||
}
|
||||
|
||||
/* Exit on error, but don't abort the namespace walk */
|
||||
|
||||
if (ACPI_FAILURE(status)) {
|
||||
status = AE_OK;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
switch (node->type) {
|
||||
case ACPI_TYPE_LOCAL_REGION_FIELD:
|
||||
|
||||
@@ -373,12 +392,14 @@ acpi_db_test_one_object(acpi_handle obj_handle,
|
||||
acpi_os_printf(" (%s)",
|
||||
acpi_ut_get_region_name(region_obj->region.
|
||||
space_id));
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
exit:
|
||||
acpi_os_printf("\n");
|
||||
return (status);
|
||||
}
|
||||
@@ -431,7 +452,6 @@ acpi_db_test_integer_type(struct acpi_namespace_node *node, u32 bit_length)
|
||||
if (temp1->integer.value == value_to_write) {
|
||||
value_to_write = 0;
|
||||
}
|
||||
|
||||
/* Write a new value */
|
||||
|
||||
write_value.type = ACPI_TYPE_INTEGER;
|
||||
@@ -706,6 +726,35 @@ exit:
|
||||
return (status);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: acpi_db_test_package_type
|
||||
*
|
||||
* PARAMETERS: node - Parent NS node for the object
|
||||
*
|
||||
* RETURN: Status
|
||||
*
|
||||
* DESCRIPTION: Test read for a Package object.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
static acpi_status acpi_db_test_package_type(struct acpi_namespace_node *node)
|
||||
{
|
||||
union acpi_object *temp1 = NULL;
|
||||
acpi_status status;
|
||||
|
||||
/* Read the original value */
|
||||
|
||||
status = acpi_db_read_from_object(node, ACPI_TYPE_PACKAGE, &temp1);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
return (status);
|
||||
}
|
||||
|
||||
acpi_os_printf(" %8.8X Elements", temp1->package.count);
|
||||
acpi_os_free(temp1);
|
||||
return (status);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: acpi_db_read_from_object
|
||||
@@ -746,8 +795,8 @@ acpi_db_read_from_object(struct acpi_namespace_node *node,
|
||||
acpi_gbl_method_executing = TRUE;
|
||||
status = acpi_evaluate_object(read_handle, NULL,
|
||||
¶m_objects, &return_obj);
|
||||
acpi_gbl_method_executing = FALSE;
|
||||
|
||||
acpi_gbl_method_executing = FALSE;
|
||||
if (ACPI_FAILURE(status)) {
|
||||
acpi_os_printf("Could not read from object, %s",
|
||||
acpi_format_exception(status));
|
||||
@@ -760,6 +809,7 @@ acpi_db_read_from_object(struct acpi_namespace_node *node,
|
||||
case ACPI_TYPE_INTEGER:
|
||||
case ACPI_TYPE_BUFFER:
|
||||
case ACPI_TYPE_STRING:
|
||||
case ACPI_TYPE_PACKAGE:
|
||||
/*
|
||||
* Did we receive the type we wanted? Most important for the
|
||||
* Integer/Buffer case (when a field is larger than an Integer,
|
||||
@@ -771,6 +821,7 @@ acpi_db_read_from_object(struct acpi_namespace_node *node,
|
||||
acpi_ut_get_type_name(expected_type),
|
||||
acpi_ut_get_type_name(ret_value->type));
|
||||
|
||||
acpi_os_free(return_obj.pointer);
|
||||
return (AE_TYPE);
|
||||
}
|
||||
|
||||
|
@@ -115,7 +115,7 @@ acpi_ds_scope_stack_push(struct acpi_namespace_node *node,
|
||||
acpi_ut_get_type_name(old_scope_info->
|
||||
common.value)));
|
||||
} else {
|
||||
ACPI_DEBUG_PRINT_RAW((ACPI_DB_EXEC, "[\\___] (%s)", "ROOT"));
|
||||
ACPI_DEBUG_PRINT_RAW((ACPI_DB_EXEC, ACPI_NAMESPACE_ROOT));
|
||||
}
|
||||
|
||||
ACPI_DEBUG_PRINT_RAW((ACPI_DB_EXEC,
|
||||
@@ -166,14 +166,14 @@ acpi_status acpi_ds_scope_stack_pop(struct acpi_walk_state *walk_state)
|
||||
|
||||
new_scope_info = walk_state->scope_info;
|
||||
if (new_scope_info) {
|
||||
ACPI_DEBUG_PRINT_RAW((ACPI_DB_EXEC,
|
||||
"[%4.4s] (%s)\n",
|
||||
ACPI_DEBUG_PRINT_RAW((ACPI_DB_EXEC, "[%4.4s] (%s)\n",
|
||||
acpi_ut_get_node_name(new_scope_info->
|
||||
scope.node),
|
||||
acpi_ut_get_type_name(new_scope_info->
|
||||
common.value)));
|
||||
} else {
|
||||
ACPI_DEBUG_PRINT_RAW((ACPI_DB_EXEC, "[\\___] (ROOT)\n"));
|
||||
ACPI_DEBUG_PRINT_RAW((ACPI_DB_EXEC, "%s\n",
|
||||
ACPI_NAMESPACE_ROOT));
|
||||
}
|
||||
|
||||
acpi_ut_delete_generic_state(scope_info);
|
||||
|
@@ -390,14 +390,14 @@ acpi_status acpi_hw_clear_acpi_status(void)
|
||||
ACPI_BITMASK_ALL_FIXED_STATUS,
|
||||
ACPI_FORMAT_UINT64(acpi_gbl_xpm1a_status.address)));
|
||||
|
||||
lock_flags = acpi_os_acquire_lock(acpi_gbl_hardware_lock);
|
||||
lock_flags = acpi_os_acquire_raw_lock(acpi_gbl_hardware_lock);
|
||||
|
||||
/* Clear the fixed events in PM1 A/B */
|
||||
|
||||
status = acpi_hw_register_write(ACPI_REGISTER_PM1_STATUS,
|
||||
ACPI_BITMASK_ALL_FIXED_STATUS);
|
||||
|
||||
acpi_os_release_lock(acpi_gbl_hardware_lock, lock_flags);
|
||||
acpi_os_release_raw_lock(acpi_gbl_hardware_lock, lock_flags);
|
||||
|
||||
if (ACPI_FAILURE(status)) {
|
||||
goto exit;
|
||||
|
@@ -227,7 +227,7 @@ acpi_status acpi_write_bit_register(u32 register_id, u32 value)
|
||||
return_ACPI_STATUS(AE_BAD_PARAMETER);
|
||||
}
|
||||
|
||||
lock_flags = acpi_os_acquire_lock(acpi_gbl_hardware_lock);
|
||||
lock_flags = acpi_os_acquire_raw_lock(acpi_gbl_hardware_lock);
|
||||
|
||||
/*
|
||||
* At this point, we know that the parent register is one of the
|
||||
@@ -288,7 +288,7 @@ acpi_status acpi_write_bit_register(u32 register_id, u32 value)
|
||||
|
||||
unlock_and_exit:
|
||||
|
||||
acpi_os_release_lock(acpi_gbl_hardware_lock, lock_flags);
|
||||
acpi_os_release_raw_lock(acpi_gbl_hardware_lock, lock_flags);
|
||||
return_ACPI_STATUS(status);
|
||||
}
|
||||
|
||||
|
@@ -539,7 +539,7 @@ static void acpi_rs_out_title(const char *title)
|
||||
|
||||
static void acpi_rs_dump_byte_list(u16 length, u8 * data)
|
||||
{
|
||||
u8 i;
|
||||
u16 i;
|
||||
|
||||
for (i = 0; i < length; i++) {
|
||||
acpi_os_printf("%25s%2.2X : %2.2X\n", "Byte", i, data[i]);
|
||||
|
@@ -88,7 +88,7 @@ acpi_tb_install_table_with_override(struct acpi_table_desc *new_table_desc,
|
||||
* DESCRIPTION: This function is called to verify and install an ACPI table.
|
||||
* When this function is called by "Load" or "LoadTable" opcodes,
|
||||
* or by acpi_load_table() API, the "Reload" parameter is set.
|
||||
* After sucessfully returning from this function, table is
|
||||
* After successfully returning from this function, table is
|
||||
* "INSTALLED" but not "VALIDATED".
|
||||
*
|
||||
******************************************************************************/
|
||||
|
@@ -53,7 +53,7 @@ void acpi_ut_dump_buffer(u8 *buffer, u32 count, u32 display, u32 base_offset)
|
||||
|
||||
/* Print current offset */
|
||||
|
||||
acpi_os_printf("%6.4X: ", (base_offset + i));
|
||||
acpi_os_printf("%8.4X: ", (base_offset + i));
|
||||
|
||||
/* Print 16 hex chars */
|
||||
|
||||
@@ -219,7 +219,7 @@ acpi_ut_dump_buffer_to_file(ACPI_FILE file,
|
||||
|
||||
/* Print current offset */
|
||||
|
||||
fprintf(file, "%6.4X: ", (base_offset + i));
|
||||
fprintf(file, "%8.4X: ", (base_offset + i));
|
||||
|
||||
/* Print 16 hex chars */
|
||||
|
||||
|
@@ -52,7 +52,7 @@ acpi_status acpi_ut_mutex_initialize(void)
|
||||
return_ACPI_STATUS (status);
|
||||
}
|
||||
|
||||
status = acpi_os_create_lock (&acpi_gbl_hardware_lock);
|
||||
status = acpi_os_create_raw_lock(&acpi_gbl_hardware_lock);
|
||||
if (ACPI_FAILURE (status)) {
|
||||
return_ACPI_STATUS (status);
|
||||
}
|
||||
@@ -109,7 +109,7 @@ void acpi_ut_mutex_terminate(void)
|
||||
/* Delete the spinlocks */
|
||||
|
||||
acpi_os_delete_lock(acpi_gbl_gpe_lock);
|
||||
acpi_os_delete_lock(acpi_gbl_hardware_lock);
|
||||
acpi_os_delete_raw_lock(acpi_gbl_hardware_lock);
|
||||
acpi_os_delete_lock(acpi_gbl_reference_count_lock);
|
||||
|
||||
/* Delete the reader/writer lock */
|
||||
|
@@ -8,6 +8,7 @@
|
||||
*****************************************************************************/
|
||||
|
||||
#include <acpi/acpi.h>
|
||||
#include <linux/kmemleak.h>
|
||||
#include "accommon.h"
|
||||
#include "acnamesp.h"
|
||||
|
||||
@@ -70,6 +71,7 @@ union acpi_operand_object *acpi_ut_create_internal_object_dbg(const char
|
||||
if (!object) {
|
||||
return_PTR(NULL);
|
||||
}
|
||||
kmemleak_not_leak(object);
|
||||
|
||||
switch (type) {
|
||||
case ACPI_TYPE_REGION:
|
||||
|
@@ -470,6 +470,7 @@ int vsnprintf(char *string, acpi_size size, const char *format, va_list args)
|
||||
case 'X':
|
||||
|
||||
type |= ACPI_FORMAT_UPPER;
|
||||
/* FALLTHROUGH */
|
||||
|
||||
case 'x':
|
||||
|
||||
|
@@ -141,7 +141,7 @@ void acpi_ut_repair_name(char *name)
|
||||
* Special case for the root node. This can happen if we get an
|
||||
* error during the execution of module-level code.
|
||||
*/
|
||||
if (ACPI_COMPARE_NAME(name, "\\___")) {
|
||||
if (ACPI_COMPARE_NAME(name, ACPI_ROOT_PATHNAME)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
In neuem Issue referenzieren
Einen Benutzer sperren