i386/x86_64: Insert HPET firmware resource after PCI enumeration has completed
PATCH 1/1 i386/x86_64: Insert HPET firmware resource after PCI enumeration has completed
Insert HPET resources after pci probing has been completed in order to avoid resource conflicts with PCI resource reservation. With this change the HPET firmware resources will be identified, but it should also not cause issues when the HPET address falls on a BAR in a PCI device, and the PCI enumeration cannot reserve the resources.
--- arch/i386/kernel/acpi/boot.c | 36 ++++++++++++++++++++++++++++++++++++ 1 files changed, 36 insertions(+), 0 deletions(-)
arch/i386/kernel/acpi/boot.c +36 -0
@@ -618,6 +618,8 @@ static int __init acpi_parse_sbf(struct#ifdef CONFIG_HPET_TIMER #include <asm/hpet.h> +static struct __initdata resource *hpet_res; +static int __init acpi_parse_hpet (struct acpi_table_header *table) {struct acpi_table_hpet *hpet_tbl;
@@ -638,8 +640,42 @@ static int __init acpi_parse_hpet(struct printk(KERN_INFO PREFIX "HPET id: %#x base: %#lx\n", hpet_tbl->id, hpet_address); +/* +* Allocate and initialize the HPET firmware resource for adding into +* the resource tree during the lateinit timeframe. +*/ +#define HPET_RESOURCE_NAME_SIZE 9 + hpet_res =alloc_bootmem (sizeof (*hpet_res) +HPET_RESOURCE_NAME_SIZE ); + +if (!hpet_res) +return 0 ; + +memset (hpet_res,0 ,sizeof (*hpet_res)); + hpet_res->name = (void *)&hpet_res[1 ]; + hpet_res->flags =IORESOURCE_MEM ; +snprintf ((char *)hpet_res->name,HPET_RESOURCE_NAME_SIZE ,"HPET %u" , + hpet_tbl->sequence); + + hpet_res->start = hpet_address; + hpet_res->end = hpet_address + (1 *1024 ) -1 ; + return 0; } + +/* +* hpet_insert_resource inserts the HPET resources used into the resource +* tree. +*/ +static __init int hpet_insert_resource (void ) +{ +if (!hpet_res) +return 1 ; + +return insert_resource (&iomem_resource, hpet_res); +} + +late_initcall (hpet_insert_resource); +#else #define acpi_parse_hpet NULL#endif
Signature · 1 line
1.4.1
Quoted 6 lines · On Friday 06 July 2007 00:27:24 Aaron Durbin wrote:
Insert HPET resources after pci probing has been completed in order to avoid resource conflicts with PCI resource reservation. With this change the HPET firmware resources will be identified, but it should also not cause issues when the HPET address falls on a BAR in a PCI device, and the PCI enumeration cannot reserve the resources.
But what advantage does it have when it's already reserved by PCI?
That's only a cosmetic change, isn't it? A lot of code for cosmetics.
-Andi
Aaron, I tested the patch on my affected system and unfortunately it did not work. The BAR1 resource still gets overridden and hence the same effects as before.
Thanks,
Matthias
Quoted 17 lines · Andi Kleen
Quoted 6 lines · On Friday 06 July 2007 00:27:24 Aaron Durbin wrote:
Insert HPET resources after pci probing has been completed in order to avoid resource conflicts with PCI resource reservation. With this change the HPET firmware resources will be identified, but it should also not cause issues when the HPET address falls on a BAR in a PCI device, and the PCI enumeration cannot reserve the resources.
But what advantage does it have when it's already reserved by PCI?
That's only a cosmetic change, isn't it? A lot of code for cosmetics.
-Andi
Andi, Aaron,
I retested the patch with Andi's patch not reverted (that's the way it's meant to be I guess) and then it works! I can now boot with HPET enabled.
Thanks,
Matthias
Quoted 27 lines · Matthias Lenk
Aaron, I tested the patch on my affected system and unfortunately it did not work. The BAR1 resource still gets overridden and hence the same effects as before.
Thanks,
Matthias
Quoted 17 lines · Andi Kleen
Quoted 6 lines · On Friday 06 July 2007 00:27:24 Aaron Durbin wrote:
Insert HPET resources after pci probing has been completed in order to avoid resource conflicts with PCI resource reservation. With this change the HPET firmware resources will be identified, but it should also not cause issues when the HPET address falls on a BAR in a PCI device, and the PCI enumeration cannot reserve the resources.
But what advantage does it have when it's already reserved by PCI?
That's only a cosmetic change, isn't it? A lot of code for cosmetics.
-Andi
Quoted 8 lines · Andi Kleen
Quoted 6 lines · On Friday 06 July 2007 00:27:24 Aaron Durbin wrote:
Insert HPET resources after pci probing has been completed in order to avoid resource conflicts with PCI resource reservation. With this change the HPET firmware resources will be identified, but it should also not cause issues when the HPET address falls on a BAR in a PCI device, and the PCI enumeration cannot reserve the resources.
Quoted 4 lines
But what advantage does it have when it's already reserved by PCI?
That's only a cosmetic change, isn't it? A lot of code for cosmetics.
To my knowledge, not every machine has the HPET live on a BAR in PCI space. It is cosmetic, but it shows what devices are using what memory address space in /proc/iomem so one doesn't need to dig through dmesg to piece things together.
I am going to work w/ Matthias to see if we can get a patch working with his system. I think that it is beneficial to easily view where resources are being used, but I do understand the prudence.
-Aaron