Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3b3ea775 authored by Bob Moore's avatar Bob Moore Committed by Len Brown
Browse files

ACPICA: Table manager: deploy new firmware error/warning interfaces



Emit firmware error/warning messages where appropriate for table
and FADT errors.

Signed-off-by: default avatarBob Moore <robert.moore@intel.com>
Signed-off-by: default avatarLin Ming <ming.m.lin@intel.com>
Signed-off-by: default avatarLen Brown <len.brown@intel.com>
parent 62cdd141
Loading
Loading
Loading
Loading
+52 −50
Original line number Diff line number Diff line
@@ -303,7 +303,7 @@ void acpi_tb_create_local_fadt(struct acpi_table_header *table, u32 length)
	 * a warning.
	 */
	if (length > sizeof(struct acpi_table_fadt)) {
		ACPI_WARNING((AE_INFO,
		ACPI_BIOS_WARNING((AE_INFO,
				   "FADT (revision %u) is longer than ACPI 5.0 version, "
				   "truncating length %u to %u",
				   table->revision, length,
@@ -453,10 +453,12 @@ static void acpi_tb_convert_fadt(void)
		 */
		if (address64->address && address32 &&
		    (address64->address != (u64)address32)) {
			ACPI_ERROR((AE_INFO,
				    "32/64X address mismatch in %s: 0x%8.8X/0x%8.8X%8.8X, using 32",
			ACPI_BIOS_ERROR((AE_INFO,
					 "32/64X address mismatch in FADT/%s: "
					 "0x%8.8X/0x%8.8X%8.8X, using 32",
					 fadt_info_table[i].name, address32,
				    ACPI_FORMAT_UINT64(address64->address)));
					 ACPI_FORMAT_UINT64(address64->
							    address)));
		}

		/* Always use 32-bit address if it is valid (non-null) */
@@ -512,7 +514,7 @@ static void acpi_tb_validate_fadt(void)
	 */
	if (acpi_gbl_FADT.facs &&
	    (acpi_gbl_FADT.Xfacs != (u64)acpi_gbl_FADT.facs)) {
		ACPI_WARNING((AE_INFO,
		ACPI_BIOS_WARNING((AE_INFO,
				   "32/64X FACS address mismatch in FADT - "
				   "0x%8.8X/0x%8.8X%8.8X, using 32",
				   acpi_gbl_FADT.facs,
@@ -523,7 +525,7 @@ static void acpi_tb_validate_fadt(void)

	if (acpi_gbl_FADT.dsdt &&
	    (acpi_gbl_FADT.Xdsdt != (u64)acpi_gbl_FADT.dsdt)) {
		ACPI_WARNING((AE_INFO,
		ACPI_BIOS_WARNING((AE_INFO,
				   "32/64X DSDT address mismatch in FADT - "
				   "0x%8.8X/0x%8.8X%8.8X, using 32",
				   acpi_gbl_FADT.dsdt,
@@ -559,8 +561,8 @@ static void acpi_tb_validate_fadt(void)
		 */
		if (address64->address &&
		    (address64->bit_width != ACPI_MUL_8(length))) {
			ACPI_WARNING((AE_INFO,
				      "32/64X length mismatch in %s: %u/%u",
			ACPI_BIOS_WARNING((AE_INFO,
					   "32/64X length mismatch in FADT/%s: %u/%u",
					   name, ACPI_MUL_8(length),
					   address64->bit_width));
		}
@@ -571,8 +573,8 @@ static void acpi_tb_validate_fadt(void)
			 * Both the address and length must be non-zero.
			 */
			if (!address64->address || !length) {
				ACPI_ERROR((AE_INFO,
					    "Required field %s has zero address and/or length:"
				ACPI_BIOS_ERROR((AE_INFO,
						 "Required FADT field %s has zero address and/or length: "
						 "0x%8.8X%8.8X/0x%X",
						 name,
						 ACPI_FORMAT_UINT64(address64->
@@ -587,12 +589,12 @@ static void acpi_tb_validate_fadt(void)
			 */
			if ((address64->address && !length) ||
			    (!address64->address && length)) {
				ACPI_WARNING((AE_INFO,
					      "Optional field %s has zero address or length: "
				ACPI_BIOS_WARNING((AE_INFO,
						   "Optional FADT field %s has zero address or length: "
						   "0x%8.8X%8.8X/0x%X",
						   name,
					      ACPI_FORMAT_UINT64(address64->
								 address),
						   ACPI_FORMAT_UINT64
						   (address64->address),
						   length));
			}
		}
@@ -638,8 +640,8 @@ static void acpi_tb_setup_fadt_registers(void)
			    (fadt_info_table[i].default_length > 0) &&
			    (fadt_info_table[i].default_length !=
			     target64->bit_width)) {
				ACPI_WARNING((AE_INFO,
					      "Invalid length for %s: %u, using default %u",
				ACPI_BIOS_WARNING((AE_INFO,
						   "Invalid length for FADT/%s: %u, using default %u",
						   fadt_info_table[i].name,
						   target64->bit_width,
						   fadt_info_table[i].
+8 −7
Original line number Diff line number Diff line
@@ -138,12 +138,13 @@ acpi_tb_add_table(struct acpi_table_desc *table_desc, u32 *table_index)
	if ((table_desc->pointer->signature[0] != 0x00) &&
	    (!ACPI_COMPARE_NAME(table_desc->pointer->signature, ACPI_SIG_SSDT))
	    && (ACPI_STRNCMP(table_desc->pointer->signature, "OEM", 3))) {
		ACPI_ERROR((AE_INFO,
			    "Table has invalid signature [%4.4s] (0x%8.8X), must be SSDT or OEMx",
		ACPI_BIOS_ERROR((AE_INFO,
				 "Table has invalid signature [%4.4s] (0x%8.8X), "
				 "must be SSDT or OEMx",
				 acpi_ut_valid_acpi_name(*(u32 *)table_desc->
							 pointer->
						    signature) ? table_desc->
			    pointer->signature : "????",
							 signature) ?
				 table_desc->pointer->signature : "????",
				 *(u32 *)table_desc->pointer->signature));

		return_ACPI_STATUS(AE_BAD_SIGNATURE);
+19 −15
Original line number Diff line number Diff line
@@ -317,8 +317,9 @@ acpi_status acpi_tb_verify_checksum(struct acpi_table_header *table, u32 length)
	/* Checksum ok? (should be zero) */

	if (checksum) {
		ACPI_WARNING((AE_INFO,
			      "Incorrect checksum in table [%4.4s] - 0x%2.2X, should be 0x%2.2X",
		ACPI_BIOS_WARNING((AE_INFO,
				   "Incorrect checksum in table [%4.4s] - 0x%2.2X, "
				   "should be 0x%2.2X",
				   table->signature, table->checksum,
				   (u8)(table->checksum - checksum)));

@@ -377,8 +378,9 @@ void acpi_tb_check_dsdt_header(void)

	if (acpi_gbl_original_dsdt_header.length != acpi_gbl_DSDT->length ||
	    acpi_gbl_original_dsdt_header.checksum != acpi_gbl_DSDT->checksum) {
		ACPI_ERROR((AE_INFO,
			    "The DSDT has been corrupted or replaced - old, new headers below"));
		ACPI_BIOS_ERROR((AE_INFO,
				 "The DSDT has been corrupted or replaced - "
				 "old, new headers below"));
		acpi_tb_print_table_header(0, &acpi_gbl_original_dsdt_header);
		acpi_tb_print_table_header(0, acpi_gbl_DSDT);

@@ -480,9 +482,10 @@ acpi_tb_install_table(acpi_physical_address address,
	/* If a particular signature is expected (DSDT/FACS), it must match */

	if (signature && !ACPI_COMPARE_NAME(table->signature, signature)) {
		ACPI_ERROR((AE_INFO,
		ACPI_BIOS_ERROR((AE_INFO,
				 "Invalid signature 0x%X for ACPI table, expected [%s]",
			    *ACPI_CAST_PTR(u32, table->signature), signature));
				 *ACPI_CAST_PTR(u32, table->signature),
				 signature));
		goto unmap_and_exit;
	}

@@ -589,7 +592,7 @@ acpi_tb_get_root_table_entry(u8 *table_entry, u32 table_entry_size)

			/* Will truncate 64-bit address to 32 bits, issue warning */

			ACPI_WARNING((AE_INFO,
			ACPI_BIOS_WARNING((AE_INFO,
					   "64-bit Physical Address in XSDT is too large (0x%8.8X%8.8X),"
					   " truncating",
					   ACPI_FORMAT_UINT64(address64)));
@@ -694,7 +697,8 @@ acpi_tb_parse_root_table(acpi_physical_address rsdp_address)
	acpi_os_unmap_memory(table, sizeof(struct acpi_table_header));

	if (length < sizeof(struct acpi_table_header)) {
		ACPI_ERROR((AE_INFO, "Invalid length 0x%X in RSDT/XSDT",
		ACPI_BIOS_ERROR((AE_INFO,
				 "Invalid table length 0x%X in RSDT/XSDT",
				 length));
		return_ACPI_STATUS(AE_INVALID_TABLE_LENGTH);
	}
+1 −1
Original line number Diff line number Diff line
@@ -216,7 +216,7 @@ acpi_status acpi_find_root_pointer(acpi_size *table_address)

	/* A valid RSDP was not found */

	ACPI_ERROR((AE_INFO, "A valid RSDP was not found"));
	ACPI_BIOS_ERROR((AE_INFO, "A valid RSDP was not found"));
	return_ACPI_STATUS(AE_NOT_FOUND);
}