diff options
Diffstat (limited to 'drivers/acpi/tables/tbfadt.c')
-rw-r--r-- | drivers/acpi/tables/tbfadt.c | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/drivers/acpi/tables/tbfadt.c b/drivers/acpi/tables/tbfadt.c index 949d4114eb9f..ccb5b64bbef3 100644 --- a/drivers/acpi/tables/tbfadt.c +++ b/drivers/acpi/tables/tbfadt.c | |||
@@ -124,7 +124,7 @@ static struct acpi_fadt_info fadt_info_table[] = { | |||
124 | 124 | ||
125 | static void inline | 125 | static void inline |
126 | acpi_tb_init_generic_address(struct acpi_generic_address *generic_address, | 126 | acpi_tb_init_generic_address(struct acpi_generic_address *generic_address, |
127 | u8 bit_width, u64 address) | 127 | u8 byte_width, u64 address) |
128 | { | 128 | { |
129 | 129 | ||
130 | /* | 130 | /* |
@@ -136,7 +136,7 @@ acpi_tb_init_generic_address(struct acpi_generic_address *generic_address, | |||
136 | /* All other fields are byte-wide */ | 136 | /* All other fields are byte-wide */ |
137 | 137 | ||
138 | generic_address->space_id = ACPI_ADR_SPACE_SYSTEM_IO; | 138 | generic_address->space_id = ACPI_ADR_SPACE_SYSTEM_IO; |
139 | generic_address->bit_width = bit_width; | 139 | generic_address->bit_width = byte_width << 3; |
140 | generic_address->bit_offset = 0; | 140 | generic_address->bit_offset = 0; |
141 | generic_address->access_width = 0; | 141 | generic_address->access_width = 0; |
142 | } | 142 | } |
@@ -155,7 +155,7 @@ acpi_tb_init_generic_address(struct acpi_generic_address *generic_address, | |||
155 | * | 155 | * |
156 | ******************************************************************************/ | 156 | ******************************************************************************/ |
157 | 157 | ||
158 | void acpi_tb_parse_fadt(acpi_native_uint table_index, u8 flags) | 158 | void acpi_tb_parse_fadt(u32 table_index, u8 flags) |
159 | { | 159 | { |
160 | u32 length; | 160 | u32 length; |
161 | struct acpi_table_header *table; | 161 | struct acpi_table_header *table; |
@@ -280,7 +280,7 @@ static void acpi_tb_convert_fadt(void) | |||
280 | { | 280 | { |
281 | u8 pm1_register_length; | 281 | u8 pm1_register_length; |
282 | struct acpi_generic_address *target; | 282 | struct acpi_generic_address *target; |
283 | acpi_native_uint i; | 283 | u32 i; |
284 | 284 | ||
285 | /* Update the local FADT table header length */ | 285 | /* Update the local FADT table header length */ |
286 | 286 | ||
@@ -343,9 +343,11 @@ static void acpi_tb_convert_fadt(void) | |||
343 | * | 343 | * |
344 | * The PM event blocks are split into two register blocks, first is the | 344 | * The PM event blocks are split into two register blocks, first is the |
345 | * PM Status Register block, followed immediately by the PM Enable Register | 345 | * PM Status Register block, followed immediately by the PM Enable Register |
346 | * block. Each is of length (pm1_event_length/2) | 346 | * block. Each is of length (xpm1x_event_block.bit_width/2) |
347 | */ | 347 | */ |
348 | pm1_register_length = (u8) ACPI_DIV_2(acpi_gbl_FADT.pm1_event_length); | 348 | WARN_ON(ACPI_MOD_16(acpi_gbl_FADT.xpm1a_event_block.bit_width)); |
349 | pm1_register_length = (u8) ACPI_DIV_16(acpi_gbl_FADT | ||
350 | .xpm1a_event_block.bit_width); | ||
349 | 351 | ||
350 | /* The PM1A register block is required */ | 352 | /* The PM1A register block is required */ |
351 | 353 | ||
@@ -360,14 +362,17 @@ static void acpi_tb_convert_fadt(void) | |||
360 | /* The PM1B register block is optional, ignore if not present */ | 362 | /* The PM1B register block is optional, ignore if not present */ |
361 | 363 | ||
362 | if (acpi_gbl_FADT.xpm1b_event_block.address) { | 364 | if (acpi_gbl_FADT.xpm1b_event_block.address) { |
365 | WARN_ON(ACPI_MOD_16(acpi_gbl_FADT.xpm1b_event_block.bit_width)); | ||
366 | pm1_register_length = (u8) ACPI_DIV_16(acpi_gbl_FADT | ||
367 | .xpm1b_event_block | ||
368 | .bit_width); | ||
363 | acpi_tb_init_generic_address(&acpi_gbl_xpm1b_enable, | 369 | acpi_tb_init_generic_address(&acpi_gbl_xpm1b_enable, |
364 | pm1_register_length, | 370 | pm1_register_length, |
365 | (acpi_gbl_FADT.xpm1b_event_block. | 371 | (acpi_gbl_FADT.xpm1b_event_block. |
366 | address + pm1_register_length)); | 372 | address + pm1_register_length)); |
367 | /* Don't forget to copy space_id of the GAS */ | 373 | /* Don't forget to copy space_id of the GAS */ |
368 | acpi_gbl_xpm1b_enable.space_id = | 374 | acpi_gbl_xpm1b_enable.space_id = |
369 | acpi_gbl_FADT.xpm1a_event_block.space_id; | 375 | acpi_gbl_FADT.xpm1b_event_block.space_id; |
370 | |||
371 | } | 376 | } |
372 | } | 377 | } |
373 | 378 | ||
@@ -396,7 +401,7 @@ static void acpi_tb_validate_fadt(void) | |||
396 | u32 *address32; | 401 | u32 *address32; |
397 | struct acpi_generic_address *address64; | 402 | struct acpi_generic_address *address64; |
398 | u8 length; | 403 | u8 length; |
399 | acpi_native_uint i; | 404 | u32 i; |
400 | 405 | ||
401 | /* Examine all of the 64-bit extended address fields (X fields) */ | 406 | /* Examine all of the 64-bit extended address fields (X fields) */ |
402 | 407 | ||