[coreboot] New patch to review for coreboot: 5d9b1d2 AMD Persimmon, ASRock E350M1: Set P_BLK length to 6 for all processors
Paul Menzel (paulepanter@users.sourceforge.net)
gerrit at coreboot.org
Thu Jan 24 13:51:09 CET 2013
Paul Menzel (paulepanter at users.sourceforge.net) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/2189
-gerrit
commit 5d9b1d221d5daf2fa93b09c9bab67f06ce7c06ce
Author: Paul Menzel <paulepanter at users.sourceforge.net>
Date: Mon Jan 21 18:43:12 2013 +0100
AMD Persimmon, ASRock E350M1: Set P_BLK length to 6 for all processors
Currently on AMD Persimmon and ASRock E350M1 Linux complains, that the
PBLK length is invalid [1].
ACPI: Invalid PBLK length [0]
Consequently, frequency scaling might not work correctly, though for
these two boards it seems to work according to PowerTOP run on the
ASRock E350M1.
Indeed, according to the ACPI specification [2], setting PBlockLength
to 0 is only allowed if there is no PBlockAddress. Otherwise it has to
be set to 6.
18.5.93 Processor (Declare Processor)
[…]
PBlockAddress provides the system I/O address for the processors
register block. Each processor can supply a different such
address. PBlockLength is the length of the processor register
block, in bytes and is either 0 (for no P_BLK) or 6. With one
exception, all processors are required to have the same
PBlockLength. The exception is that the boot processor can have
a non-zero PBlockLength when all other processors have a zero
PBlockLength. It is valid for every processor to have a
PBlockLength of 0.
And that is exactly what Linux is checking in
`drivers/acpi/processor_driver.c` [3].
static int acpi_processor_get_info(struct acpi_device *device)
{
[…]
/*
* On some boxes several processors use the same processor bus id.
* But they are located in different scope. For example:
* \_SB.SCK0.CPU0
* \_SB.SCK1.CPU0
* Rename the processor device bus id. And the new bus id will be
* generated as the following format:
* CPU+CPU ID.
*/
sprintf(acpi_device_bid(device), "CPU%X", pr->id);
ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Processor [%d:%d]\n", pr->id,
pr->acpi_id));
if (!object.processor.pblk_address)
ACPI_DEBUG_PRINT((ACPI_DB_INFO, "No PBLK (NULL address)\n"));
else if (object.processor.pblk_length != 6)
printk(KERN_ERR PREFIX "Invalid PBLK length [%d]\n",
object.processor.pblk_length);
else {
pr->throttling.address = object.processor.pblk_address;
pr->throttling.duty_offset = acpi_gbl_FADT.duty_offset;
pr->throttling.duty_width = acpi_gbl_FADT.duty_width;
pr->pblk = object.processor.pblk_address;
/*
* We don't care about error returns - we just try to mark
* these reserved so that nobody else is confused into thinking
* that this region might be unused..
*
* (In particular, allocating the IO range for Cardbus)
*/
request_region(pr->throttling.address, 6, "ACPI CPU throttle");
}
[…]
}
The DSDT of for example AMD Parmer and AMD Thatcher also set it to 6
everywhere.
[1] http://www.coreboot.org/pipermail/coreboot/2013-January/073636.html
[2] http://acpi.info/DOWNLOADS/ACPIspec40a.pdf
[3] http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=blob;f=drivers/acpi/processor_driver.c;h=e83311bf1ebdaaaea1adbf2de1351cca907d3465;hb=5da1f88b8b727dc3a66c52d4513e871be6d43d19#l351
Change-Id: Ie79fe4812532d124cc81747c75a4f3d88d00531c
Signed-off-by: Paul Menzel <paulepanter at users.sourceforge.net>
---
src/mainboard/amd/persimmon/dsdt.asl | 6 +++---
src/mainboard/asrock/e350m1/dsdt.asl | 6 +++---
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/src/mainboard/amd/persimmon/dsdt.asl b/src/mainboard/amd/persimmon/dsdt.asl
index dd7b4b1..22c0295 100644
--- a/src/mainboard/amd/persimmon/dsdt.asl
+++ b/src/mainboard/amd/persimmon/dsdt.asl
@@ -75,21 +75,21 @@ DefinitionBlock (
C001, /* name space name */
1, /* Unique number for this processor */
0x810, /* PBLK system I/O address !hardcoded! */
- 0x00 /* PBLKLEN for boot processor */
+ 0x06 /* PBLKLEN for boot processor */
) {
}
Processor(
C002, /* name space name */
2, /* Unique number for this processor */
0x810, /* PBLK system I/O address !hardcoded! */
- 0x00 /* PBLKLEN for boot processor */
+ 0x06 /* PBLKLEN for boot processor */
) {
}
Processor(
C003, /* name space name */
3, /* Unique number for this processor */
0x810, /* PBLK system I/O address !hardcoded! */
- 0x00 /* PBLKLEN for boot processor */
+ 0x06 /* PBLKLEN for boot processor */
) {
}
} /* End _PR scope */
diff --git a/src/mainboard/asrock/e350m1/dsdt.asl b/src/mainboard/asrock/e350m1/dsdt.asl
index 1cd88b8..e34f161 100644
--- a/src/mainboard/asrock/e350m1/dsdt.asl
+++ b/src/mainboard/asrock/e350m1/dsdt.asl
@@ -75,21 +75,21 @@ DefinitionBlock (
C001, /* name space name */
1, /* Unique number for this processor */
0x810, /* PBLK system I/O address !hardcoded! */
- 0x00 /* PBLKLEN for boot processor */
+ 0x06 /* PBLKLEN for boot processor */
) {
}
Processor(
C002, /* name space name */
2, /* Unique number for this processor */
0x810, /* PBLK system I/O address !hardcoded! */
- 0x00 /* PBLKLEN for boot processor */
+ 0x06 /* PBLKLEN for boot processor */
) {
}
Processor(
C003, /* name space name */
3, /* Unique number for this processor */
0x810, /* PBLK system I/O address !hardcoded! */
- 0x00 /* PBLKLEN for boot processor */
+ 0x06 /* PBLKLEN for boot processor */
) {
}
} /* End _PR scope */
More information about the coreboot
mailing list