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

Commit b815d7b3 authored by Len Brown's avatar Len Brown
Browse files

Merge branch 'fadt-test' into test

parents 3156d1ed fcea94ba
Loading
Loading
Loading
Loading
+25 −7
Original line number Diff line number Diff line
@@ -50,7 +50,7 @@ ACPI_MODULE_NAME("tbfadt")
/* Local prototypes */
static void inline
acpi_tb_init_generic_address(struct acpi_generic_address *generic_address,
			     u8 bit_width, u64 address);
			     u8 byte_width, u64 address);

static void acpi_tb_convert_fadt(void);

@@ -111,7 +111,7 @@ static struct acpi_fadt_info fadt_info_table[] = {
 * FUNCTION:    acpi_tb_init_generic_address
 *
 * PARAMETERS:  generic_address     - GAS struct to be initialized
 *              bit_width           - Width of this register
 *              byte_width          - Width of this register
 *              Address             - Address of the register
 *
 * RETURN:      None
@@ -124,7 +124,7 @@ static struct acpi_fadt_info fadt_info_table[] = {

static void inline
acpi_tb_init_generic_address(struct acpi_generic_address *generic_address,
			     u8 bit_width, u64 address)
			     u8 byte_width, u64 address)
{

	/*
@@ -136,7 +136,7 @@ acpi_tb_init_generic_address(struct acpi_generic_address *generic_address,
	/* All other fields are byte-wide */

	generic_address->space_id = ACPI_ADR_SPACE_SYSTEM_IO;
	generic_address->bit_width = bit_width;
	generic_address->bit_width = byte_width << 3;
	generic_address->bit_offset = 0;
	generic_address->access_width = 0;
}
@@ -342,9 +342,20 @@ static void acpi_tb_convert_fadt(void)
	 * useful to calculate them once, here.
	 *
	 * The PM event blocks are split into two register blocks, first is the
	 * PM Status Register block, followed immediately by the PM Enable Register
	 * block. Each is of length (pm1_event_length/2)
	 * PM Status Register block, followed immediately by the PM Enable
	 * Register block. Each is of length (xpm1x_event_block.bit_width/2).
	 *
	 * On various systems the v2 fields (and particularly the bit widths)
	 * cannot be relied upon, though. Hence resort to using the v1 length
	 * here (and warn about the inconsistency).
	 */
	if (acpi_gbl_FADT.xpm1a_event_block.bit_width
	    != acpi_gbl_FADT.pm1_event_length * 8)
		printk(KERN_WARNING "FADT: "
		       "X_PM1a_EVT_BLK.bit_width (%u) does not match"
		       " PM1_EVT_LEN (%u)\n",
		       acpi_gbl_FADT.xpm1a_event_block.bit_width,
		       acpi_gbl_FADT.pm1_event_length);
	pm1_register_length = (u8) ACPI_DIV_2(acpi_gbl_FADT.pm1_event_length);

	/* The PM1A register block is required */
@@ -360,13 +371,20 @@ static void acpi_tb_convert_fadt(void)
	/* The PM1B register block is optional, ignore if not present */

	if (acpi_gbl_FADT.xpm1b_event_block.address) {
		if (acpi_gbl_FADT.xpm1b_event_block.bit_width
		    != acpi_gbl_FADT.pm1_event_length * 8)
			printk(KERN_WARNING "FADT: "
			       "X_PM1b_EVT_BLK.bit_width (%u) does not match"
			       " PM1_EVT_LEN (%u)\n",
			       acpi_gbl_FADT.xpm1b_event_block.bit_width,
			       acpi_gbl_FADT.pm1_event_length);
		acpi_tb_init_generic_address(&acpi_gbl_xpm1b_enable,
					     pm1_register_length,
					     (acpi_gbl_FADT.xpm1b_event_block.
					      address + pm1_register_length));
		/* Don't forget to copy space_id of the GAS */
		acpi_gbl_xpm1b_enable.space_id =
		    acpi_gbl_FADT.xpm1a_event_block.space_id;
		    acpi_gbl_FADT.xpm1b_event_block.space_id;

	}
}