* [PATCH] PNP: have quirk_system_pci_resources() include io resources.
@ 2008-06-25 17:58 Rene Herman
2008-06-25 21:16 ` Andrew Morton
0 siblings, 1 reply; 4+ messages in thread
From: Rene Herman @ 2008-06-25 17:58 UTC (permalink / raw)
To: Andrew Morton; +Cc: Bjorn Helgaas, Linux Kernel
[-- Attachment #1: Type: text/plain, Size: 889 bytes --]
Hi Andrew.
quirk_system_pci_resources() disables a PnP mem resource that overlaps a
PCI BAR so as to not keep the PCI driver from claiming the resource.
Have it do the same for io resources.
Here, ACPI claims ports that overlap with my soundcard causing the
soundcard driver to fail to load. It's unknown why my ACPI BIOS claims
those ports; it did not use to but this is not a (kernel) regression.
Some odd BIOS reconfig triggered by temporarily removing the card seems
to have brought this on.
This is not urgent -- I now all of a sudden need this on any kernel
anyway. It applies on top of Bjorn's PNP patches you have in the tree.
Strictly, Bjorn's ACK was on another version of this that rolled its own
private pnp_resource_type_name(), an interface introduced by those new
PNP patches. I took the liberty to consider that trivial enough of a
change to keep it though.
Rene.
[-- Attachment #2: 0001-PNP-have-quirk_system_pci_resources-include-io-re.patch --]
[-- Type: text/plain, Size: 2282 bytes --]
>From 4c6191498771b0e2b087db988f74e4b902b99d32 Mon Sep 17 00:00:00 2001
From: Rene Herman <rene.herman@gmail.com>
Date: Wed, 25 Jun 2008 19:45:41 +0200
Subject: [PATCH] PNP: have quirk_system_pci_resources() include io resources.
quirk_system_pci_resources() disables a PnP mem resource that overlaps
a PCI BAR so as to not keep the PCI driver from claiming the resource.
Have it do the same for io resources.
Here, ACPI claims ports that overlap with my soundcard causing the
soundcard driver to fail to load. It's unknown why my ACPI BIOS
claims those ports; it did not use to but this is not a (kernel)
regression. Some odd BIOS reconfig triggered by temporarily removing
the card seems to have brought this on.
Signed-off-by: Rene Herman <rene.herman@gmail.com>
Acked-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
---
drivers/pnp/quirks.c | 13 ++++++++-----
1 files changed, 8 insertions(+), 5 deletions(-)
diff --git a/drivers/pnp/quirks.c b/drivers/pnp/quirks.c
index 55f55ed..0bdf9b8 100644
--- a/drivers/pnp/quirks.c
+++ b/drivers/pnp/quirks.c
@@ -245,15 +245,17 @@ static void quirk_system_pci_resources(struct pnp_dev *dev)
*/
for_each_pci_dev(pdev) {
for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) {
- if (!(pci_resource_flags(pdev, i) & IORESOURCE_MEM) ||
- pci_resource_len(pdev, i) == 0)
+ unsigned int type;
+
+ type = pci_resource_flags(pdev, i) &
+ (IORESOURCE_IO | IORESOURCE_MEM);
+ if (!type || pci_resource_len(pdev, i) == 0)
continue;
pci_start = pci_resource_start(pdev, i);
pci_end = pci_resource_end(pdev, i);
for (j = 0;
- (res = pnp_get_resource(dev, IORESOURCE_MEM, j));
- j++) {
+ (res = pnp_get_resource(dev, type, j)); j++) {
if (res->start == 0 && res->end == 0)
continue;
@@ -283,9 +285,10 @@ static void quirk_system_pci_resources(struct pnp_dev *dev)
* the PCI region, and that might prevent a PCI
* driver from requesting its resources.
*/
- dev_warn(&dev->dev, "mem resource "
+ dev_warn(&dev->dev, "%s resource "
"(0x%llx-0x%llx) overlaps %s BAR %d "
"(0x%llx-0x%llx), disabling\n",
+ pnp_resource_type_name(res),
(unsigned long long) pnp_start,
(unsigned long long) pnp_end,
pci_name(pdev), i,
--
1.5.5
^ permalink raw reply related [flat|nested] 4+ messages in thread* Re: [PATCH] PNP: have quirk_system_pci_resources() include io resources.
2008-06-25 17:58 [PATCH] PNP: have quirk_system_pci_resources() include io resources Rene Herman
@ 2008-06-25 21:16 ` Andrew Morton
2008-06-25 21:46 ` Rene Herman
0 siblings, 1 reply; 4+ messages in thread
From: Andrew Morton @ 2008-06-25 21:16 UTC (permalink / raw)
To: Rene Herman; +Cc: bjorn.helgaas, linux-kernel
On Wed, 25 Jun 2008 19:58:20 +0200
Rene Herman <rene.herman@keyaccess.nl> wrote:
> + unsigned int type;
> +
> + type = pci_resource_flags(pdev, i) &
> + (IORESOURCE_IO | IORESOURCE_MEM);
pci_resource_flags() returns an unsigned long.
But I think you're right and resource.flags is wrong. Because there's
no way in which we'll ever be able to use bits 32-63 of that field
anyway.
I suppose that Someone(tm) should convert resource.flags to a u32 or
something. Minor issue.
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] PNP: have quirk_system_pci_resources() include io resources.
2008-06-25 21:16 ` Andrew Morton
@ 2008-06-25 21:46 ` Rene Herman
2008-06-25 22:16 ` Rene Herman
0 siblings, 1 reply; 4+ messages in thread
From: Rene Herman @ 2008-06-25 21:46 UTC (permalink / raw)
To: Andrew Morton; +Cc: bjorn.helgaas, linux-kernel
On 25-06-08 23:16, Andrew Morton wrote:
> On Wed, 25 Jun 2008 19:58:20 +0200
> Rene Herman <rene.herman@keyaccess.nl> wrote:
>
>> + unsigned int type;
>> +
>> + type = pci_resource_flags(pdev, i) &
>> + (IORESOURCE_IO | IORESOURCE_MEM);
>
> pci_resource_flags() returns an unsigned long.
>
> But I think you're right and resource.flags is wrong. Because there's
> no way in which we'll ever be able to use bits 32-63 of that field
> anyway.
>
> I suppose that Someone(tm) should convert resource.flags to a u32 or
> something. Minor issue.
Yes, did notice but pnp_get_resource() then takes those same flags as an
unsigned int -- had to pick one or the other and "the smallest one" then
seemed best...
Rene.
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] PNP: have quirk_system_pci_resources() include io resources.
2008-06-25 21:46 ` Rene Herman
@ 2008-06-25 22:16 ` Rene Herman
0 siblings, 0 replies; 4+ messages in thread
From: Rene Herman @ 2008-06-25 22:16 UTC (permalink / raw)
To: Andrew Morton; +Cc: bjorn.helgaas, linux-kernel
[-- Attachment #1: Type: text/plain, Size: 983 bytes --]
On 25-06-08 23:46, Rene Herman wrote:
> On 25-06-08 23:16, Andrew Morton wrote:
>
>> On Wed, 25 Jun 2008 19:58:20 +0200
>> Rene Herman <rene.herman@keyaccess.nl> wrote:
>>
>>> + unsigned int type;
>>> +
>>> + type = pci_resource_flags(pdev, i) &
>>> + (IORESOURCE_IO | IORESOURCE_MEM);
>>
>> pci_resource_flags() returns an unsigned long.
>>
>> But I think you're right and resource.flags is wrong. Because there's
>> no way in which we'll ever be able to use bits 32-63 of that field
>> anyway.
>>
>> I suppose that Someone(tm) should convert resource.flags to a u32 or
>> something. Minor issue.
>
> Yes, did notice but pnp_get_resource() then takes those same flags as an
> unsigned int -- had to pick one or the other and "the smallest one" then
> seemed best...
semi-arguably, the pnp_get_resource() is simply wrong though, so maybe
this patch. After this, the quirks one should indeed be an unsigned long
also. Bjorn?
Rene.
[-- Attachment #2: 0001-PNP-make-the-resource-type-an-unsigned-long.patch --]
[-- Type: text/plain, Size: 2114 bytes --]
>From c54f1a8a4d82a5b2891c3b15c9935ba5f8ece531 Mon Sep 17 00:00:00 2001
From: Rene Herman <rene.herman@gmail.com>
Date: Thu, 26 Jun 2008 00:14:08 +0200
Subject: [PATCH] PNP: make the resource type an unsigned long
PnP encodes the resource type directly as it's struct resource->flags
value which is an unsigned long. Make it so...
Signed-off-by: Rene Herman <rene.herman@gmail.com>
---
drivers/pnp/base.h | 2 +-
drivers/pnp/resource.c | 4 ++--
include/linux/pnp.h | 2 +-
3 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/drivers/pnp/base.h b/drivers/pnp/base.h
index e3fa9a2..45690ff 100644
--- a/drivers/pnp/base.h
+++ b/drivers/pnp/base.h
@@ -148,7 +148,7 @@ char *pnp_resource_type_name(struct resource *res);
void dbg_pnp_show_resources(struct pnp_dev *dev, char *desc);
void pnp_free_resources(struct pnp_dev *dev);
-int pnp_resource_type(struct resource *res);
+unsigned long pnp_resource_type(struct resource *res);
struct pnp_resource {
struct list_head list;
diff --git a/drivers/pnp/resource.c b/drivers/pnp/resource.c
index e0e853d..5d27df1 100644
--- a/drivers/pnp/resource.c
+++ b/drivers/pnp/resource.c
@@ -468,14 +468,14 @@ int pnp_check_dma(struct pnp_dev *dev, struct resource *res)
#endif
}
-int pnp_resource_type(struct resource *res)
+unsigned long pnp_resource_type(struct resource *res)
{
return res->flags & (IORESOURCE_IO | IORESOURCE_MEM |
IORESOURCE_IRQ | IORESOURCE_DMA);
}
struct resource *pnp_get_resource(struct pnp_dev *dev,
- unsigned int type, unsigned int num)
+ unsigned long type, unsigned int num)
{
struct pnp_resource *pnp_res;
struct resource *res;
diff --git a/include/linux/pnp.h b/include/linux/pnp.h
index 116abdc..c2e844c 100644
--- a/include/linux/pnp.h
+++ b/include/linux/pnp.h
@@ -21,7 +21,7 @@ struct pnp_dev;
/*
* Resource Management
*/
-struct resource *pnp_get_resource(struct pnp_dev *, unsigned int, unsigned int);
+struct resource *pnp_get_resource(struct pnp_dev *, unsigned long, unsigned int);
static inline int pnp_resource_valid(struct resource *res)
{
--
1.5.5
^ permalink raw reply related [flat|nested] 4+ messages in thread
end of thread, other threads:[~2008-06-25 22:16 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-06-25 17:58 [PATCH] PNP: have quirk_system_pci_resources() include io resources Rene Herman
2008-06-25 21:16 ` Andrew Morton
2008-06-25 21:46 ` Rene Herman
2008-06-25 22:16 ` Rene Herman
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox