diff options
-rw-r--r-- | drivers/acpi/pptt.c | 33 |
1 files changed, 13 insertions, 20 deletions
diff --git a/drivers/acpi/pptt.c b/drivers/acpi/pptt.c index d1e26cb599bf..da031b1df6f5 100644 --- a/drivers/acpi/pptt.c +++ b/drivers/acpi/pptt.c | |||
@@ -338,9 +338,6 @@ static struct acpi_pptt_cache *acpi_find_cache_node(struct acpi_table_header *ta | |||
338 | return found; | 338 | return found; |
339 | } | 339 | } |
340 | 340 | ||
341 | /* total number of attributes checked by the properties code */ | ||
342 | #define PPTT_CHECKED_ATTRIBUTES 4 | ||
343 | |||
344 | /** | 341 | /** |
345 | * update_cache_properties() - Update cacheinfo for the given processor | 342 | * update_cache_properties() - Update cacheinfo for the given processor |
346 | * @this_leaf: Kernel cache info structure being updated | 343 | * @this_leaf: Kernel cache info structure being updated |
@@ -357,25 +354,15 @@ static void update_cache_properties(struct cacheinfo *this_leaf, | |||
357 | struct acpi_pptt_cache *found_cache, | 354 | struct acpi_pptt_cache *found_cache, |
358 | struct acpi_pptt_processor *cpu_node) | 355 | struct acpi_pptt_processor *cpu_node) |
359 | { | 356 | { |
360 | int valid_flags = 0; | ||
361 | |||
362 | this_leaf->fw_token = cpu_node; | 357 | this_leaf->fw_token = cpu_node; |
363 | if (found_cache->flags & ACPI_PPTT_SIZE_PROPERTY_VALID) { | 358 | if (found_cache->flags & ACPI_PPTT_SIZE_PROPERTY_VALID) |
364 | this_leaf->size = found_cache->size; | 359 | this_leaf->size = found_cache->size; |
365 | valid_flags++; | 360 | if (found_cache->flags & ACPI_PPTT_LINE_SIZE_VALID) |
366 | } | ||
367 | if (found_cache->flags & ACPI_PPTT_LINE_SIZE_VALID) { | ||
368 | this_leaf->coherency_line_size = found_cache->line_size; | 361 | this_leaf->coherency_line_size = found_cache->line_size; |
369 | valid_flags++; | 362 | if (found_cache->flags & ACPI_PPTT_NUMBER_OF_SETS_VALID) |
370 | } | ||
371 | if (found_cache->flags & ACPI_PPTT_NUMBER_OF_SETS_VALID) { | ||
372 | this_leaf->number_of_sets = found_cache->number_of_sets; | 363 | this_leaf->number_of_sets = found_cache->number_of_sets; |
373 | valid_flags++; | 364 | if (found_cache->flags & ACPI_PPTT_ASSOCIATIVITY_VALID) |
374 | } | ||
375 | if (found_cache->flags & ACPI_PPTT_ASSOCIATIVITY_VALID) { | ||
376 | this_leaf->ways_of_associativity = found_cache->associativity; | 365 | this_leaf->ways_of_associativity = found_cache->associativity; |
377 | valid_flags++; | ||
378 | } | ||
379 | if (found_cache->flags & ACPI_PPTT_WRITE_POLICY_VALID) { | 366 | if (found_cache->flags & ACPI_PPTT_WRITE_POLICY_VALID) { |
380 | switch (found_cache->attributes & ACPI_PPTT_MASK_WRITE_POLICY) { | 367 | switch (found_cache->attributes & ACPI_PPTT_MASK_WRITE_POLICY) { |
381 | case ACPI_PPTT_CACHE_POLICY_WT: | 368 | case ACPI_PPTT_CACHE_POLICY_WT: |
@@ -402,11 +389,17 @@ static void update_cache_properties(struct cacheinfo *this_leaf, | |||
402 | } | 389 | } |
403 | } | 390 | } |
404 | /* | 391 | /* |
405 | * If the above flags are valid, and the cache type is NOCACHE | 392 | * If cache type is NOCACHE, then the cache hasn't been specified |
406 | * update the cache type as well. | 393 | * via other mechanisms. Update the type if a cache type has been |
394 | * provided. | ||
395 | * | ||
396 | * Note, we assume such caches are unified based on conventional system | ||
397 | * design and known examples. Significant work is required elsewhere to | ||
398 | * fully support data/instruction only type caches which are only | ||
399 | * specified in PPTT. | ||
407 | */ | 400 | */ |
408 | if (this_leaf->type == CACHE_TYPE_NOCACHE && | 401 | if (this_leaf->type == CACHE_TYPE_NOCACHE && |
409 | valid_flags == PPTT_CHECKED_ATTRIBUTES) | 402 | found_cache->flags & ACPI_PPTT_CACHE_TYPE_VALID) |
410 | this_leaf->type = CACHE_TYPE_UNIFIED; | 403 | this_leaf->type = CACHE_TYPE_UNIFIED; |
411 | } | 404 | } |
412 | 405 | ||