Commit 8850ada6 authored by Rafael J. Wysocki's avatar Rafael J. Wysocki
Browse files

Merge branch 'acpica'

Merge ACPICA material for 6.6-rc1.

This includes some fixes, cleanups and new material, mostly related to
parsing tables.

Specifics:

 - Suppress a GCC 12 dangling-pointer warning (Philip Prindeville).

 - Reformat the ACPI_STATE_COMMON macro and its users (George Guo).

 - Replace the ternary operator with ACPI_MIN() (Jiangshan Yi).

 - Add support for _DSC as per ACPI 6.5 (Saket Dumbre).

 - Remove a duplicate macro from zephyr header (Najumon B.A).

 - Add data structures for GED and _EVT tracking (Jose Marinho).

 - Fix misspelled CDAT DSMAS define (Dave Jiang).

 - Simplify an error message in acpi_ds_result_push() (Christophe
   Jaillet).

 - Add a struct size macro related to SRAT (Dave Jiang).

 - Add AML_NO_OPERAND_RESOLVE flag to Timer (Abhishek Mainkar).

 - Add support for RISC-V external interrupt controllers in MADT (Sunil
   V L).

 - Add RHCT flags, CMO and MMU nodes (Sunil V L).

 - Change ACPICA version to 20230628 (Bob Moore).

* acpica:
  ACPICA: Update version to 20230628
  ACPICA: RHCT: Add flags, CMO and MMU nodes
  ACPICA: MADT: Add RISC-V external interrupt controllers
  ACPICA: Add AML_NO_OPERAND_RESOLVE flag to Timer
  ACPICA: Add a define for size of struct acpi_srat_generic_affinity device_handle
  ACPICA: Slightly simplify an error message in acpi_ds_result_push()
  ACPICA: Fix misspelled CDAT DSMAS define
  ACPICA: Add interrupt command to acpiexec
  ACPICA: Detect GED device and keep track of _EVT
  ACPICA: fix for conflict macro definition on zephyr interface
  ACPICA: Add support for _DSC as per ACPI 6.5
  ACPICA: exserial.c: replace ternary operator with ACPI_MIN()
  ACPICA: Modify ACPI_STATE_COMMON
  ACPICA: Fix GCC 12 dangling-pointer warning
parents 93f5de5f f3b091a9
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -287,4 +287,6 @@ struct acpi_namespace_node *acpi_db_local_ns_lookup(char *name);

void acpi_db_uint32_to_hex_string(u32 value, char *buffer);

void acpi_db_generate_interrupt(char *gsiv_arg);

#endif				/* __ACDEBUG_H__ */
+1 −0
Original line number Diff line number Diff line
@@ -129,6 +129,7 @@ ACPI_GLOBAL(acpi_table_handler, acpi_gbl_table_handler);
ACPI_GLOBAL(void *, acpi_gbl_table_handler_context);
ACPI_GLOBAL(acpi_interface_handler, acpi_gbl_interface_handler);
ACPI_GLOBAL(struct acpi_sci_handler_info *, acpi_gbl_sci_handler_list);
ACPI_GLOBAL(struct acpi_ged_handler_info *, acpi_gbl_ged_handler_list);

/* Owner ID support */

+27 −11
Original line number Diff line number Diff line
@@ -543,6 +543,14 @@ struct acpi_field_info {
	u32 pkg_length;
};

/* Information about the interrupt ID and _EVT of a GED device */

struct acpi_ged_handler_info {
	struct acpi_ged_handler_info *next;
	u32 int_id;		/* The interrupt ID that triggers the execution ofthe evt_method. */
	struct acpi_namespace_node *evt_method;	/* The _EVT method to be executed when an interrupt with ID = int_ID is received */
};

/*****************************************************************************
 *
 * Generic "state" object for stacks
@@ -560,25 +568,28 @@ struct acpi_field_info {
	u8                              descriptor_type; /* To differentiate various internal objs */\
	u8                              flags; \
	u16                             value; \
	u16                             state;
	u16                             state

	/* There are 2 bytes available here until the next natural alignment boundary */

struct acpi_common_state {
ACPI_STATE_COMMON};
	ACPI_STATE_COMMON;
};

/*
 * Update state - used to traverse complex objects such as packages
 */
struct acpi_update_state {
	ACPI_STATE_COMMON union acpi_operand_object *object;
	ACPI_STATE_COMMON;
	union acpi_operand_object *object;
};

/*
 * Pkg state - used to traverse nested package structures
 */
struct acpi_pkg_state {
	ACPI_STATE_COMMON u32 index;
	ACPI_STATE_COMMON;
	u32 index;
	union acpi_operand_object *source_object;
	union acpi_operand_object *dest_object;
	struct acpi_walk_state *walk_state;
@@ -591,7 +602,8 @@ struct acpi_pkg_state {
 * Allows nesting of these constructs
 */
struct acpi_control_state {
	ACPI_STATE_COMMON u16 opcode;
	ACPI_STATE_COMMON;
	u16 opcode;
	union acpi_parse_object *predicate_op;
	u8 *aml_predicate_start;	/* Start of if/while predicate */
	u8 *package_end;	/* End of if/while block */
@@ -602,11 +614,13 @@ struct acpi_control_state {
 * Scope state - current scope during namespace lookups
 */
struct acpi_scope_state {
	ACPI_STATE_COMMON struct acpi_namespace_node *node;
	ACPI_STATE_COMMON;
	struct acpi_namespace_node *node;
};

struct acpi_pscope_state {
	ACPI_STATE_COMMON u32 arg_count;	/* Number of fixed arguments */
	ACPI_STATE_COMMON;
	u32 arg_count;		/* Number of fixed arguments */
	union acpi_parse_object *op;	/* Current op being parsed */
	u8 *arg_end;		/* Current argument end */
	u8 *pkg_end;		/* Current package end */
@@ -618,7 +632,8 @@ struct acpi_pscope_state {
 * states are created when there are nested control methods executing.
 */
struct acpi_thread_state {
	ACPI_STATE_COMMON u8 current_sync_level;	/* Mutex Sync (nested acquire) level */
	ACPI_STATE_COMMON;
	u8 current_sync_level;	/* Mutex Sync (nested acquire) level */
	struct acpi_walk_state *walk_state_list;	/* Head of list of walk_states for this thread */
	union acpi_operand_object *acquired_mutex_list;	/* List of all currently acquired mutexes */
	acpi_thread_id thread_id;	/* Running thread ID */
@@ -629,7 +644,7 @@ struct acpi_thread_state {
 * AML arguments
 */
struct acpi_result_values {
	ACPI_STATE_COMMON
	ACPI_STATE_COMMON;
	union acpi_operand_object *obj_desc[ACPI_RESULTS_FRAME_OBJ_NUM];
};

@@ -652,7 +667,8 @@ struct acpi_global_notify_handler {
 * handler/dispatcher.
 */
struct acpi_notify_info {
	ACPI_STATE_COMMON u8 handler_list_id;
	ACPI_STATE_COMMON;
	u8 handler_list_id;
	struct acpi_namespace_node *node;
	union acpi_operand_object *handler_list_head;
	struct acpi_global_notify_handler *global;
+3 −0
Original line number Diff line number Diff line
@@ -440,6 +440,9 @@ const union acpi_predefined_info acpi_gbl_predefined_methods[] = {
	{{"_DOS", METHOD_1ARGS(ACPI_TYPE_INTEGER),
	  METHOD_NO_RETURN_VALUE}},

	{{"_DSC", METHOD_0ARGS,
	  METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},

	{{"_DSD", METHOD_0ARGS,	/* ACPI 6.0 */
	  METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}},	/* Variable-length (Pkgs) each: 1 Buf, 1 Pkg */
	PACKAGE_INFO(ACPI_PTYPE2_UUID_PAIR, ACPI_RTYPE_BUFFER, 1,
+58 −0
Original line number Diff line number Diff line
@@ -1010,6 +1010,64 @@ void acpi_db_display_resources(char *object_arg)
	acpi_db_set_output_destination(ACPI_DB_CONSOLE_OUTPUT);
}

/*******************************************************************************
 *
 * FUNCTION:    acpi_db_generate_ged
 *
 * PARAMETERS:  ged_arg             - Raw GED number, ascii string
 *
 * RETURN:      None
 *
 * DESCRIPTION: Simulate firing of a GED
 *
 ******************************************************************************/

void acpi_db_generate_interrupt(char *gsiv_arg)
{
	u32 gsiv_number;
	struct acpi_ged_handler_info *ged_info = acpi_gbl_ged_handler_list;

	if (!ged_info) {
		acpi_os_printf("No GED handling present\n");
	}

	gsiv_number = strtoul(gsiv_arg, NULL, 0);

	while (ged_info) {

		if (ged_info->int_id == gsiv_number) {
			struct acpi_object_list arg_list;
			union acpi_object arg0;
			acpi_handle evt_handle = ged_info->evt_method;
			acpi_status status;

			acpi_os_printf("Evaluate GED _EVT (GSIV=%d)\n",
				       gsiv_number);

			if (!evt_handle) {
				acpi_os_printf("Undefined _EVT method\n");
				return;
			}

			arg0.integer.type = ACPI_TYPE_INTEGER;
			arg0.integer.value = gsiv_number;

			arg_list.count = 1;
			arg_list.pointer = &arg0;

			status =
			    acpi_evaluate_object(evt_handle, NULL, &arg_list,
						 NULL);
			if (ACPI_FAILURE(status)) {
				acpi_os_printf("Could not evaluate _EVT\n");
				return;
			}

		}
		ged_info = ged_info->next;
	}
}

#if (!ACPI_REDUCED_HARDWARE)
/*******************************************************************************
 *
Loading