More ACPI updates for 4.19-rc1
- Update the ACPICA code in the kernel to upstream revision 20180810 including: * Fix for AML parser regression causing it to mishandle opcodes that open a scope upon parse failures (Erik Schmauss). * Fix for a reference counting issue on large systems (Erik Schmauss). * Fix to discard values coming from register reads that have failed (Erik Schmauss). * Two acpiexec fixes (Bob Moore, Erik Schmauss). * Debugger cleanup (Bob Moore). * Cleanup of duplicate table error message (Bob Moore). * Cleanup of hex detection in the utilities (Erik Schmauss). - Make ACPICA clear the status of all ACPI events when entering sleep states again to avoid functional regressions (Rafael Wysocki). - Update the ACPI operation region driver for the CrystalCove PMIC to cover all of the known operation region fields (Hans de Goede). -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQIcBAABCAAGBQJbfSp2AAoJEILEb/54YlRxH1cQAJax3bEtxG9IK6kuQW1jvwde TIIvmVR2U45Wz5t69njKp9zetNzIwSU6vkjenimUJa8EuajclJx3ucfIV6dqWFbr 0efJO4wmo+3/ElGzXHU4xSF1z09xx4PBcZaOtoEzX/5zLNdy2sFY7T8iwlmAPNOs vCbvBcCSffkciP6e22og9i1+p73JKNYA75S2Fb2rQZDdidN1q2iGlq5B2ToKvCas +BJmqCuwStR1/gAYAdWC940s/rkzi5Kig6xum/EtIz1dgWVkwxIHUe6FZ0BSsv8c VBINqhLgEix2Rrnd+pRYdB8klrP3GmPEELQykV9qkpCKNKUgU4t0wBxjw8uW27sv ovrCULlrRYckIOSp/D+M1z7NRB3kekCKg340kz2cGdRo8xf1Dxj8w+P6Ca1yfAWt HBBBgb2utJWG4vm7raLjAlnHKi15MN8J01wz0cjmLRB/+mGPMwzQ6Jxon9SwjWBD qn7uGpIDDS3DjMwBxHXS4Vr4Fx8BftXeK6MB72vOXN4n0f+zArCqTLAf6+t9aASq 50VaSDfc8PJO8wl9GvyHaTedci6/iqORDTR9XHK3njfEr1j2uRhtfHUVUIvLDILT HqfYbFqq63qaaFLiUhB3UBfsr6BL4sSUmuY31kL9xXLzZGmTvkoB6P+ysjTvF18V +mcZdZ62o18NA1BXO8iH =g8r+ -----END PGP SIGNATURE----- Merge tag 'acpi-4.19-rc1-2' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm Pull more ACPI updates from Rafael Wysocki: "These update the ACPICA code in the kernel to the most recent upstream revision (which includes a regression fix and other improvements), make ACPICA clear the status of all ACPI events when entering sleep states (to restore the previous behavior) and update the ACPI operation region driver for the CrystalCove PMIC. Specifics: - Update the ACPICA code in the kernel to upstream revision 20180810 including: * Fix for AML parser regression causing it to mishandle opcodes that open a scope upon parse failures (Erik Schmauss) * Fix for a reference counting issue on large systems (Erik Schmauss) * Fix to discard values coming from register reads that have failed (Erik Schmauss) * Two acpiexec fixes (Bob Moore, Erik Schmauss) * Debugger cleanup (Bob Moore) * Cleanup of duplicate table error message (Bob Moore) * Cleanup of hex detection in the utilities (Erik Schmauss) - Make ACPICA clear the status of all ACPI events when entering sleep states again to avoid functional regressions (Rafael Wysocki) - Update the ACPI operation region driver for the CrystalCove PMIC to cover all of the known operation region fields (Hans de Goede)" * tag 'acpi-4.19-rc1-2' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm: ACPI / PMIC: CrystalCove: Extend PMOP support to support all possible fields ACPICA: Clear status of all events when entering sleep states ACPICA: Update version to 20180810 ACPICA: acpiexec: fix a small memory leak regression ACPICA: Reference Counts: increase max to 0x4000 for large servers ACPICA: Reference count: add additional debugging details ACPICA: acpi_exec: fixing -fi option ACPICA: Debugger: Cleanup interface to the AML disassembler ACPICA: AML Parser: skip opcodes that open a scope upon parse failure ACPICA: Utilities: split hex detection into smaller functions ACPICA: Update an error message for a duplicate table ACPICA: ACPICA: add status check for acpi_hw_read before assigning return value ACPICA: AML Parser: ignore all exceptions resulting from incorrect AML during table load
This commit is contained in:
commit
df2def49c5
@ -164,6 +164,7 @@ struct acpi_namespace_node {
|
||||
#define ANOBJ_SUBTREE_HAS_INI 0x10 /* Used to optimize device initialization */
|
||||
#define ANOBJ_EVALUATED 0x20 /* Set on first evaluation of node */
|
||||
#define ANOBJ_ALLOCATED_BUFFER 0x40 /* Method AML buffer is dynamic (install_method) */
|
||||
#define ANOBJ_NODE_EARLY_INIT 0x80 /* acpi_exec only: Node was create via init file (-fi) */
|
||||
|
||||
#define ANOBJ_IS_EXTERNAL 0x08 /* iASL only: This object created via External() */
|
||||
#define ANOBJ_METHOD_NO_RETVAL 0x10 /* iASL only: Method has no return value */
|
||||
|
@ -25,14 +25,15 @@
|
||||
/* Flags for acpi_ns_lookup, acpi_ns_search_and_enter */
|
||||
|
||||
#define ACPI_NS_NO_UPSEARCH 0
|
||||
#define ACPI_NS_SEARCH_PARENT 0x01
|
||||
#define ACPI_NS_DONT_OPEN_SCOPE 0x02
|
||||
#define ACPI_NS_NO_PEER_SEARCH 0x04
|
||||
#define ACPI_NS_ERROR_IF_FOUND 0x08
|
||||
#define ACPI_NS_PREFIX_IS_SCOPE 0x10
|
||||
#define ACPI_NS_EXTERNAL 0x20
|
||||
#define ACPI_NS_TEMPORARY 0x40
|
||||
#define ACPI_NS_OVERRIDE_IF_FOUND 0x80
|
||||
#define ACPI_NS_SEARCH_PARENT 0x0001
|
||||
#define ACPI_NS_DONT_OPEN_SCOPE 0x0002
|
||||
#define ACPI_NS_NO_PEER_SEARCH 0x0004
|
||||
#define ACPI_NS_ERROR_IF_FOUND 0x0008
|
||||
#define ACPI_NS_PREFIX_IS_SCOPE 0x0010
|
||||
#define ACPI_NS_EXTERNAL 0x0020
|
||||
#define ACPI_NS_TEMPORARY 0x0040
|
||||
#define ACPI_NS_OVERRIDE_IF_FOUND 0x0080
|
||||
#define ACPI_NS_EARLY_INIT 0x0100
|
||||
|
||||
/* Flags for acpi_ns_walk_namespace */
|
||||
|
||||
|
@ -180,6 +180,8 @@ char acpi_ut_remove_leading_zeros(char **string);
|
||||
|
||||
u8 acpi_ut_detect_hex_prefix(char **string);
|
||||
|
||||
void acpi_ut_remove_hex_prefix(char **string);
|
||||
|
||||
u8 acpi_ut_detect_octal_prefix(char **string);
|
||||
|
||||
/*
|
||||
|
@ -763,7 +763,12 @@ acpi_db_command_dispatch(char *input_buffer,
|
||||
case CMD_DISASSEMBLE:
|
||||
case CMD_DISASM:
|
||||
|
||||
#ifdef ACPI_DISASSEMBLER
|
||||
(void)acpi_db_disassemble_method(acpi_gbl_db_args[1]);
|
||||
#else
|
||||
acpi_os_printf
|
||||
("The AML Disassembler is not configured/present\n");
|
||||
#endif
|
||||
break;
|
||||
|
||||
case CMD_DUMP:
|
||||
@ -872,7 +877,12 @@ acpi_db_command_dispatch(char *input_buffer,
|
||||
|
||||
case CMD_LIST:
|
||||
|
||||
#ifdef ACPI_DISASSEMBLER
|
||||
acpi_db_disassemble_aml(acpi_gbl_db_args[1], op);
|
||||
#else
|
||||
acpi_os_printf
|
||||
("The AML Disassembler is not configured/present\n");
|
||||
#endif
|
||||
break;
|
||||
|
||||
case CMD_LOCKS:
|
||||
|
@ -216,6 +216,7 @@ cleanup:
|
||||
acpi_ut_remove_reference(obj_desc);
|
||||
}
|
||||
|
||||
#ifdef ACPI_DISASSEMBLER
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: acpi_db_disassemble_aml
|
||||
@ -242,9 +243,8 @@ void acpi_db_disassemble_aml(char *statements, union acpi_parse_object *op)
|
||||
if (statements) {
|
||||
num_statements = strtoul(statements, NULL, 0);
|
||||
}
|
||||
#ifdef ACPI_DISASSEMBLER
|
||||
|
||||
acpi_dm_disassemble(NULL, op, num_statements);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
@ -317,8 +317,6 @@ acpi_status acpi_db_disassemble_method(char *name)
|
||||
walk_state->parse_flags |= ACPI_PARSE_DISASSEMBLE;
|
||||
|
||||
status = acpi_ps_parse_aml(walk_state);
|
||||
|
||||
#ifdef ACPI_DISASSEMBLER
|
||||
(void)acpi_dm_parse_deferred_ops(op);
|
||||
|
||||
/* Now we can disassemble the method */
|
||||
@ -326,7 +324,6 @@ acpi_status acpi_db_disassemble_method(char *name)
|
||||
acpi_gbl_dm_opt_verbose = FALSE;
|
||||
acpi_dm_disassemble(NULL, op, 0);
|
||||
acpi_gbl_dm_opt_verbose = TRUE;
|
||||
#endif
|
||||
|
||||
acpi_ps_delete_parse_tree(op);
|
||||
|
||||
@ -337,6 +334,7 @@ acpi_status acpi_db_disassemble_method(char *name)
|
||||
acpi_ut_release_owner_id(&obj_desc->method.owner_id);
|
||||
return (AE_OK);
|
||||
}
|
||||
#endif
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
|
@ -10,6 +10,7 @@
|
||||
#include "amlcode.h"
|
||||
#include "acdebug.h"
|
||||
#include "acinterp.h"
|
||||
#include "acparser.h"
|
||||
|
||||
#define _COMPONENT ACPI_CA_DEBUGGER
|
||||
ACPI_MODULE_NAME("dbxface")
|
||||
@ -262,10 +263,17 @@ acpi_db_single_step(struct acpi_walk_state *walk_state,
|
||||
}
|
||||
}
|
||||
|
||||
/* Now we can display it */
|
||||
/* Now we can disassemble and display it */
|
||||
|
||||
#ifdef ACPI_DISASSEMBLER
|
||||
acpi_dm_disassemble(walk_state, display_op, ACPI_UINT32_MAX);
|
||||
#else
|
||||
/*
|
||||
* The AML Disassembler is not configured - at least we can
|
||||
* display the opcode value and name
|
||||
*/
|
||||
acpi_os_printf("AML Opcode: %4.4X %s\n", op->common.aml_opcode,
|
||||
acpi_ps_get_opcode_name(op->common.aml_opcode));
|
||||
#endif
|
||||
|
||||
if ((op->common.aml_opcode == AML_IF_OP) ||
|
||||
|
@ -15,6 +15,10 @@
|
||||
#include "acnamesp.h"
|
||||
#include "acparser.h"
|
||||
|
||||
#ifdef ACPI_EXEC_APP
|
||||
#include "aecommon.h"
|
||||
#endif
|
||||
|
||||
#define _COMPONENT ACPI_DISPATCHER
|
||||
ACPI_MODULE_NAME("dsfield")
|
||||
|
||||
@ -259,6 +263,13 @@ acpi_ds_get_field_names(struct acpi_create_field_info *info,
|
||||
u64 position;
|
||||
union acpi_parse_object *child;
|
||||
|
||||
#ifdef ACPI_EXEC_APP
|
||||
u64 value = 0;
|
||||
union acpi_operand_object *result_desc;
|
||||
union acpi_operand_object *obj_desc;
|
||||
char *name_path;
|
||||
#endif
|
||||
|
||||
ACPI_FUNCTION_TRACE_PTR(ds_get_field_names, info);
|
||||
|
||||
/* First field starts at bit zero */
|
||||
@ -391,6 +402,25 @@ acpi_ds_get_field_names(struct acpi_create_field_info *info,
|
||||
if (ACPI_FAILURE(status)) {
|
||||
return_ACPI_STATUS(status);
|
||||
}
|
||||
#ifdef ACPI_EXEC_APP
|
||||
name_path =
|
||||
acpi_ns_get_external_pathname(info->
|
||||
field_node);
|
||||
obj_desc =
|
||||
acpi_ut_create_integer_object
|
||||
(value);
|
||||
if (ACPI_SUCCESS
|
||||
(ae_lookup_init_file_entry
|
||||
(name_path, &value))) {
|
||||
acpi_ex_write_data_to_field
|
||||
(obj_desc,
|
||||
acpi_ns_get_attached_object
|
||||
(info->field_node),
|
||||
&result_desc);
|
||||
}
|
||||
acpi_ut_remove_reference(obj_desc);
|
||||
ACPI_FREE(name_path);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
@ -573,7 +603,9 @@ acpi_ds_init_field_objects(union acpi_parse_object *op,
|
||||
!(walk_state->parse_flags & ACPI_PARSE_MODULE_LEVEL)) {
|
||||
flags |= ACPI_NS_TEMPORARY;
|
||||
}
|
||||
|
||||
#ifdef ACPI_EXEC_APP
|
||||
flags |= ACPI_NS_OVERRIDE_IF_FOUND;
|
||||
#endif
|
||||
/*
|
||||
* Walk the list of entries in the field_list
|
||||
* Note: field_list can be of zero length. In this case, Arg will be NULL.
|
||||
|
@ -528,13 +528,18 @@ acpi_status acpi_hw_register_read(u32 register_id, u32 *return_value)
|
||||
|
||||
status =
|
||||
acpi_hw_read(&value64, &acpi_gbl_FADT.xpm2_control_block);
|
||||
value = (u32)value64;
|
||||
if (ACPI_SUCCESS(status)) {
|
||||
value = (u32)value64;
|
||||
}
|
||||
break;
|
||||
|
||||
case ACPI_REGISTER_PM_TIMER: /* 32-bit access */
|
||||
|
||||
status = acpi_hw_read(&value64, &acpi_gbl_FADT.xpm_timer_block);
|
||||
value = (u32)value64;
|
||||
if (ACPI_SUCCESS(status)) {
|
||||
value = (u32)value64;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case ACPI_REGISTER_SMI_COMMAND_BLOCK: /* 8-bit access */
|
||||
|
@ -56,14 +56,9 @@ acpi_status acpi_hw_legacy_sleep(u8 sleep_state)
|
||||
if (ACPI_FAILURE(status)) {
|
||||
return_ACPI_STATUS(status);
|
||||
}
|
||||
/*
|
||||
* If the target sleep state is S5, clear all GPEs and fixed events too
|
||||
*/
|
||||
if (sleep_state == ACPI_STATE_S5) {
|
||||
status = acpi_hw_clear_acpi_status();
|
||||
if (ACPI_FAILURE(status)) {
|
||||
return_ACPI_STATUS(status);
|
||||
}
|
||||
status = acpi_hw_clear_acpi_status();
|
||||
if (ACPI_FAILURE(status)) {
|
||||
return_ACPI_STATUS(status);
|
||||
}
|
||||
acpi_gbl_system_awake_and_running = FALSE;
|
||||
|
||||
|
@ -558,6 +558,14 @@ acpi_ns_lookup(union acpi_generic_state *scope_info,
|
||||
(char *)¤t_node->name,
|
||||
current_node));
|
||||
}
|
||||
#ifdef ACPI_EXEC_APP
|
||||
if ((status == AE_ALREADY_EXISTS) &&
|
||||
(this_node->flags & ANOBJ_NODE_EARLY_INIT)) {
|
||||
this_node->flags &= ~ANOBJ_NODE_EARLY_INIT;
|
||||
status = AE_OK;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef ACPI_ASL_COMPILER
|
||||
/*
|
||||
* If this ACPI name already exists within the namespace as an
|
||||
@ -676,6 +684,11 @@ acpi_ns_lookup(union acpi_generic_state *scope_info,
|
||||
}
|
||||
}
|
||||
}
|
||||
#ifdef ACPI_EXEC_APP
|
||||
if (flags & ACPI_NS_EARLY_INIT) {
|
||||
this_node->flags |= ANOBJ_NODE_EARLY_INIT;
|
||||
}
|
||||
#endif
|
||||
|
||||
*return_node = this_node;
|
||||
return_ACPI_STATUS(AE_OK);
|
||||
|
@ -22,6 +22,7 @@
|
||||
#include "acdispat.h"
|
||||
#include "amlcode.h"
|
||||
#include "acconvert.h"
|
||||
#include "acnamesp.h"
|
||||
|
||||
#define _COMPONENT ACPI_PARSER
|
||||
ACPI_MODULE_NAME("psloop")
|
||||
@ -527,12 +528,18 @@ acpi_status acpi_ps_parse_loop(struct acpi_walk_state *walk_state)
|
||||
if (ACPI_FAILURE(status)) {
|
||||
return_ACPI_STATUS(status);
|
||||
}
|
||||
if (walk_state->opcode == AML_SCOPE_OP) {
|
||||
if (acpi_ns_opens_scope
|
||||
(acpi_ps_get_opcode_info
|
||||
(walk_state->opcode)->object_type)) {
|
||||
/*
|
||||
* If the scope op fails to parse, skip the body of the
|
||||
* scope op because the parse failure indicates that the
|
||||
* device may not exist.
|
||||
* If the scope/device op fails to parse, skip the body of
|
||||
* the scope op because the parse failure indicates that
|
||||
* the device may not exist.
|
||||
*/
|
||||
ACPI_ERROR((AE_INFO,
|
||||
"Skip parsing opcode %s",
|
||||
acpi_ps_get_opcode_name
|
||||
(walk_state->opcode)));
|
||||
walk_state->parser_state.aml =
|
||||
walk_state->aml + 1;
|
||||
walk_state->parser_state.aml =
|
||||
@ -540,8 +547,6 @@ acpi_status acpi_ps_parse_loop(struct acpi_walk_state *walk_state)
|
||||
(&walk_state->parser_state);
|
||||
walk_state->aml =
|
||||
walk_state->parser_state.aml;
|
||||
ACPI_ERROR((AE_INFO,
|
||||
"Skipping Scope block"));
|
||||
}
|
||||
|
||||
continue;
|
||||
@ -709,20 +714,20 @@ acpi_status acpi_ps_parse_loop(struct acpi_walk_state *walk_state)
|
||||
} else
|
||||
if ((walk_state->
|
||||
parse_flags & ACPI_PARSE_MODULE_LEVEL)
|
||||
&& status != AE_CTRL_TRANSFER
|
||||
&& ACPI_FAILURE(status)) {
|
||||
&& (ACPI_AML_EXCEPTION(status)
|
||||
|| status == AE_ALREADY_EXISTS
|
||||
|| status == AE_NOT_FOUND)) {
|
||||
/*
|
||||
* ACPI_PARSE_MODULE_LEVEL flag means that we are currently
|
||||
* loading a table by executing it as a control method.
|
||||
* However, if we encounter an error while loading the table,
|
||||
* we need to keep trying to load the table rather than
|
||||
* aborting the table load (setting the status to AE_OK
|
||||
* continues the table load). If we get a failure at this
|
||||
* point, it means that the dispatcher got an error while
|
||||
* processing Op (most likely an AML operand error) or a
|
||||
* control method was called from module level and the
|
||||
* dispatcher returned AE_CTRL_TRANSFER. In the latter case,
|
||||
* leave the status alone, there's nothing wrong with it.
|
||||
* ACPI_PARSE_MODULE_LEVEL flag means that we
|
||||
* are currently loading a table by executing
|
||||
* it as a control method. However, if we
|
||||
* encounter an error while loading the table,
|
||||
* we need to keep trying to load the table
|
||||
* rather than aborting the table load (setting
|
||||
* the status to AE_OK continues the table
|
||||
* load). If we get a failure at this point, it
|
||||
* means that the dispatcher got an error while
|
||||
* trying to execute the Op.
|
||||
*/
|
||||
status = AE_OK;
|
||||
}
|
||||
|
@ -516,9 +516,9 @@ acpi_tb_verify_temp_table(struct acpi_table_desc *table_desc,
|
||||
acpi_tb_check_duplication(table_desc, table_index);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
if (status != AE_CTRL_TERMINATE) {
|
||||
ACPI_EXCEPTION((AE_INFO, AE_NO_MEMORY,
|
||||
ACPI_EXCEPTION((AE_INFO, status,
|
||||
"%4.4s 0x%8.8X%8.8X"
|
||||
" Table is duplicated",
|
||||
" Table is already loaded",
|
||||
acpi_ut_valid_nameseg
|
||||
(table_desc->signature.
|
||||
ascii) ? table_desc->
|
||||
|
@ -355,6 +355,7 @@ acpi_ut_update_ref_count(union acpi_operand_object *object, u32 action)
|
||||
u16 original_count;
|
||||
u16 new_count = 0;
|
||||
acpi_cpu_flags lock_flags;
|
||||
char *message;
|
||||
|
||||
ACPI_FUNCTION_NAME(ut_update_ref_count);
|
||||
|
||||
@ -391,6 +392,7 @@ acpi_ut_update_ref_count(union acpi_operand_object *object, u32 action)
|
||||
object, object->common.type,
|
||||
acpi_ut_get_object_type_name(object),
|
||||
new_count));
|
||||
message = "Incremement";
|
||||
break;
|
||||
|
||||
case REF_DECREMENT:
|
||||
@ -420,6 +422,7 @@ acpi_ut_update_ref_count(union acpi_operand_object *object, u32 action)
|
||||
if (new_count == 0) {
|
||||
acpi_ut_delete_internal_obj(object);
|
||||
}
|
||||
message = "Decrement";
|
||||
break;
|
||||
|
||||
default:
|
||||
@ -436,8 +439,8 @@ acpi_ut_update_ref_count(union acpi_operand_object *object, u32 action)
|
||||
*/
|
||||
if (new_count > ACPI_MAX_REFERENCE_COUNT) {
|
||||
ACPI_WARNING((AE_INFO,
|
||||
"Large Reference Count (0x%X) in object %p, Type=0x%.2X",
|
||||
new_count, object, object->common.type));
|
||||
"Large Reference Count (0x%X) in object %p, Type=0x%.2X Operation=%s",
|
||||
new_count, object, object->common.type, message));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -231,16 +231,36 @@ char acpi_ut_remove_whitespace(char **string)
|
||||
|
||||
u8 acpi_ut_detect_hex_prefix(char **string)
|
||||
{
|
||||
char *initial_position = *string;
|
||||
|
||||
if ((**string == ACPI_ASCII_ZERO) &&
|
||||
(tolower((int)*(*string + 1)) == 'x')) {
|
||||
*string += 2; /* Go past the leading 0x */
|
||||
return (TRUE);
|
||||
acpi_ut_remove_hex_prefix(string);
|
||||
if (*string != initial_position) {
|
||||
return (TRUE); /* String is past leading 0x */
|
||||
}
|
||||
|
||||
return (FALSE); /* Not a hex string */
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: acpi_ut_remove_hex_prefix
|
||||
*
|
||||
* PARAMETERS: string - Pointer to input ASCII string
|
||||
*
|
||||
* RETURN: none
|
||||
*
|
||||
* DESCRIPTION: Remove a hex "0x" prefix
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
void acpi_ut_remove_hex_prefix(char **string)
|
||||
{
|
||||
if ((**string == ACPI_ASCII_ZERO) &&
|
||||
(tolower((int)*(*string + 1)) == 'x')) {
|
||||
*string += 2; /* Go past the leading 0x */
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: acpi_ut_detect_octal_prefix
|
||||
|
@ -218,7 +218,7 @@ u64 acpi_ut_implicit_strtoul64(char *string)
|
||||
* implicit conversions, and the "0x" prefix is "not allowed".
|
||||
* However, allow a "0x" prefix as an ACPI extension.
|
||||
*/
|
||||
acpi_ut_detect_hex_prefix(&string);
|
||||
acpi_ut_remove_hex_prefix(&string);
|
||||
|
||||
if (!acpi_ut_remove_leading_zeros(&string)) {
|
||||
return_VALUE(0);
|
||||
|
@ -25,16 +25,121 @@
|
||||
#define PMIC_A0LOCK_REG 0xc5
|
||||
|
||||
static struct pmic_table power_table[] = {
|
||||
/* {
|
||||
.address = 0x00,
|
||||
.reg = ??,
|
||||
.bit = ??,
|
||||
}, ** VSYS */
|
||||
{
|
||||
.address = 0x04,
|
||||
.reg = 0x63,
|
||||
.bit = 0x00,
|
||||
}, /* SYSX -> VSYS_SX */
|
||||
{
|
||||
.address = 0x08,
|
||||
.reg = 0x62,
|
||||
.bit = 0x00,
|
||||
}, /* SYSU -> VSYS_U */
|
||||
{
|
||||
.address = 0x0c,
|
||||
.reg = 0x64,
|
||||
.bit = 0x00,
|
||||
}, /* SYSS -> VSYS_S */
|
||||
{
|
||||
.address = 0x10,
|
||||
.reg = 0x6a,
|
||||
.bit = 0x00,
|
||||
}, /* V50S -> V5P0S */
|
||||
{
|
||||
.address = 0x14,
|
||||
.reg = 0x6b,
|
||||
.bit = 0x00,
|
||||
}, /* HOST -> VHOST, USB2/3 host */
|
||||
{
|
||||
.address = 0x18,
|
||||
.reg = 0x6c,
|
||||
.bit = 0x00,
|
||||
}, /* VBUS -> VBUS, USB2/3 OTG */
|
||||
{
|
||||
.address = 0x1c,
|
||||
.reg = 0x6d,
|
||||
.bit = 0x00,
|
||||
}, /* HDMI -> VHDMI */
|
||||
/* {
|
||||
.address = 0x20,
|
||||
.reg = ??,
|
||||
.bit = ??,
|
||||
}, ** S285 */
|
||||
{
|
||||
.address = 0x24,
|
||||
.reg = 0x66,
|
||||
.bit = 0x00,
|
||||
},
|
||||
}, /* X285 -> V2P85SX, camera */
|
||||
/* {
|
||||
.address = 0x28,
|
||||
.reg = ??,
|
||||
.bit = ??,
|
||||
}, ** V33A */
|
||||
{
|
||||
.address = 0x2c,
|
||||
.reg = 0x69,
|
||||
.bit = 0x00,
|
||||
}, /* V33S -> V3P3S, display/ssd/audio */
|
||||
{
|
||||
.address = 0x30,
|
||||
.reg = 0x68,
|
||||
.bit = 0x00,
|
||||
}, /* V33U -> V3P3U, SDIO wifi&bt */
|
||||
/* {
|
||||
.address = 0x34 .. 0x40,
|
||||
.reg = ??,
|
||||
.bit = ??,
|
||||
}, ** V33I, V18A, REFQ, V12A */
|
||||
{
|
||||
.address = 0x44,
|
||||
.reg = 0x5c,
|
||||
.bit = 0x00,
|
||||
}, /* V18S -> V1P8S, SOC/USB PHY/SIM */
|
||||
{
|
||||
.address = 0x48,
|
||||
.reg = 0x5d,
|
||||
.bit = 0x00,
|
||||
},
|
||||
}, /* V18X -> V1P8SX, eMMC/camara/audio */
|
||||
{
|
||||
.address = 0x4c,
|
||||
.reg = 0x5b,
|
||||
.bit = 0x00,
|
||||
}, /* V18U -> V1P8U, LPDDR */
|
||||
{
|
||||
.address = 0x50,
|
||||
.reg = 0x61,
|
||||
.bit = 0x00,
|
||||
}, /* V12X -> V1P2SX, SOC SFR */
|
||||
{
|
||||
.address = 0x54,
|
||||
.reg = 0x60,
|
||||
.bit = 0x00,
|
||||
}, /* V12S -> V1P2S, MIPI */
|
||||
/* {
|
||||
.address = 0x58,
|
||||
.reg = ??,
|
||||
.bit = ??,
|
||||
}, ** V10A */
|
||||
{
|
||||
.address = 0x5c,
|
||||
.reg = 0x56,
|
||||
.bit = 0x00,
|
||||
}, /* V10S -> V1P0S, SOC GFX */
|
||||
{
|
||||
.address = 0x60,
|
||||
.reg = 0x57,
|
||||
.bit = 0x00,
|
||||
}, /* V10X -> V1P0SX, SOC display/DDR IO/PCIe */
|
||||
{
|
||||
.address = 0x64,
|
||||
.reg = 0x59,
|
||||
.bit = 0x00,
|
||||
}, /* V105 -> V1P05S, L2 SRAM */
|
||||
};
|
||||
|
||||
static struct pmic_table thermal_table[] = {
|
||||
|
@ -89,7 +89,7 @@
|
||||
|
||||
/* Maximum object reference count (detects object deletion issues) */
|
||||
|
||||
#define ACPI_MAX_REFERENCE_COUNT 0x1000
|
||||
#define ACPI_MAX_REFERENCE_COUNT 0x4000
|
||||
|
||||
/* Default page size for use in mapping memory for operation regions */
|
||||
|
||||
|
@ -59,6 +59,12 @@ struct acpi_exception_info {
|
||||
|
||||
#define AE_OK (acpi_status) 0x0000
|
||||
|
||||
#define ACPI_ENV_EXCEPTION(status) (status & AE_CODE_ENVIRONMENTAL)
|
||||
#define ACPI_AML_EXCEPTION(status) (status & AE_CODE_AML)
|
||||
#define ACPI_PROG_EXCEPTION(status) (status & AE_CODE_PROGRAMMER)
|
||||
#define ACPI_TABLE_EXCEPTION(status) (status & AE_CODE_ACPI_TABLES)
|
||||
#define ACPI_CNTL_EXCEPTION(status) (status & AE_CODE_CONTROL)
|
||||
|
||||
/*
|
||||
* Environmental exceptions
|
||||
*/
|
||||
|
@ -12,7 +12,7 @@
|
||||
|
||||
/* Current ACPICA subsystem version in YYYYMMDD format */
|
||||
|
||||
#define ACPI_CA_VERSION 0x20180629
|
||||
#define ACPI_CA_VERSION 0x20180810
|
||||
|
||||
#include <acpi/acconfig.h>
|
||||
#include <acpi/actypes.h>
|
||||
|
Loading…
Reference in New Issue
Block a user