* [Linux-ia64] Re: [Pcihpd-discuss] Re: PCI Hotplug Drivers for 2.5
@ 2002-10-24 17:44 Scott Murray
2002-10-24 21:49 ` Greg KH
` (5 more replies)
0 siblings, 6 replies; 7+ messages in thread
From: Scott Murray @ 2002-10-24 17:44 UTC (permalink / raw)
To: linux-ia64
On Thu, 24 Oct 2002, Greg KH wrote:
> On Thu, Oct 24, 2002 at 10:52:09AM -0400, Jeff Garzik wrote:
> > Greg KH wrote:
> > >I think we now all agree that resource management should move into a
> > >place where it can be shared by all pci hotplug drivers, right?
> > >
> > >If so, anyone want to propose some common code?
> >
> >
> > drivers/pci/setup* is not enough?
> >
> > I am surprised that anything needed to be added here...
>
> There was some reason that code would not work out when I looked at it
> over a year ago. But I don't remember why, so I'll go look at it again,
> thanks for pointing it out.
I don't know if you looked at my cPCI driver patch in detail, but it uses
the setup-*.c code for all of its resource management. The only things
that were really missing in 2.4.x were:
- exports of a few things, most notably pci_scan_bridge
- code to update the resource windows of a newly added bridge (recursively)
- a pci_write_bridge_bases
- PCI resource reservation to allow hot insertion on dumb cPCI hardware
- on x86, the smarts to work back to the root PCI bus to figure out the
IRQ pin to use when looking in the pirq table
Since I've been swamped with other stuff, I just started finally porting
my cPCI stuff to 2.5 yesterday. :( I think I can get it up and running
relatively quickly, but figuring out Ivan's newer hotplug helper code
and how to take advantage of it might take me a couple of days.
Scott
--
Scott Murray
SOMA Networks, Inc.
Toronto, Ontario
e-mail: scottm@somanetworks.com
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Linux-ia64] Re: [Pcihpd-discuss] Re: PCI Hotplug Drivers for 2.5
2002-10-24 17:44 [Linux-ia64] Re: [Pcihpd-discuss] Re: PCI Hotplug Drivers for 2.5 Scott Murray
@ 2002-10-24 21:49 ` Greg KH
2002-10-24 22:22 ` Scott Murray
` (4 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Greg KH @ 2002-10-24 21:49 UTC (permalink / raw)
To: linux-ia64
On Thu, Oct 24, 2002 at 01:44:06PM -0400, Scott Murray wrote:
>
> I don't know if you looked at my cPCI driver patch in detail, but it uses
> the setup-*.c code for all of its resource management.
I'm sorry, but I only glanced at it and missed this point.
> The only things that were really missing in 2.4.x were:
>
> - exports of a few things, most notably pci_scan_bridge
> - code to update the resource windows of a newly added bridge (recursively)
> - a pci_write_bridge_bases
> - PCI resource reservation to allow hot insertion on dumb cPCI hardware
> - on x86, the smarts to work back to the root PCI bus to figure out the
> IRQ pin to use when looking in the pirq table
All of these seem like things that should belong in the setup-*.c files
for others to use.
> Since I've been swamped with other stuff, I just started finally porting
> my cPCI stuff to 2.5 yesterday. :( I think I can get it up and running
> relatively quickly, but figuring out Ivan's newer hotplug helper code
> and how to take advantage of it might take me a couple of days.
Nice, I was wondering what happened. I'll go dig up your older patch
and take a closer look at it.
thanks,
greg k-h
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Linux-ia64] Re: [Pcihpd-discuss] Re: PCI Hotplug Drivers for 2.5
2002-10-24 17:44 [Linux-ia64] Re: [Pcihpd-discuss] Re: PCI Hotplug Drivers for 2.5 Scott Murray
2002-10-24 21:49 ` Greg KH
@ 2002-10-24 22:22 ` Scott Murray
2002-10-25 15:37 ` Ivan Kokshaysky
` (3 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Scott Murray @ 2002-10-24 22:22 UTC (permalink / raw)
To: linux-ia64
On Thu, 24 Oct 2002, Greg KH wrote:
> On Thu, Oct 24, 2002 at 01:44:06PM -0400, Scott Murray wrote:
> >
> > I don't know if you looked at my cPCI driver patch in detail, but it uses
> > the setup-*.c code for all of its resource management.
>
> I'm sorry, but I only glanced at it and missed this point.
No problemo, I kind of vanished off the face of the earth after my last
mention of releasing a 2.5 patch, which was over a month and a half ago.
Now that we've got our new hardware platform up and running here at SOMA,
I'm back in a position to work on hotplug stuff again.
> > The only things that were really missing in 2.4.x were:
> >
> > - exports of a few things, most notably pci_scan_bridge
> > - code to update the resource windows of a newly added bridge (recursively)
> > - a pci_write_bridge_bases
> > - PCI resource reservation to allow hot insertion on dumb cPCI hardware
> > - on x86, the smarts to work back to the root PCI bus to figure out the
> > IRQ pin to use when looking in the pirq table
>
> All of these seem like things that should belong in the setup-*.c files
> for others to use.
I think Ivan's new code in setup-bus.c (pbus_size_bridges and friends)
removes the need for a pci_write_bridge_bases and my code to update the
bridge resource windows. I hope so, since I've changed my driver to use
it! ;)
> > Since I've been swamped with other stuff, I just started finally porting
> > my cPCI stuff to 2.5 yesterday. :( I think I can get it up and running
> > relatively quickly, but figuring out Ivan's newer hotplug helper code
> > and how to take advantage of it might take me a couple of days.
>
> Nice, I was wondering what happened. I'll go dig up your older patch
> and take a closer look at it.
I hopefully will have something working against 2.5.44 tomorrow. I think
the only potentially contentious piece that I'd like to get reviewed and
maybe integrated before the feature freeze is the resource reservation
stuff. There seemed to be no serious objections to the 2.4.x version I
posted a while back, so maybe this won't be a big deal. Everything else
is either __devinit/export tweaks or driver code.
Scott
--
Scott Murray
SOMA Networks, Inc.
Toronto, Ontario
e-mail: scottm@somanetworks.com
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Linux-ia64] Re: [Pcihpd-discuss] Re: PCI Hotplug Drivers for 2.5
2002-10-24 17:44 [Linux-ia64] Re: [Pcihpd-discuss] Re: PCI Hotplug Drivers for 2.5 Scott Murray
2002-10-24 21:49 ` Greg KH
2002-10-24 22:22 ` Scott Murray
@ 2002-10-25 15:37 ` Ivan Kokshaysky
2002-10-25 22:02 ` Scott Murray
` (2 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Ivan Kokshaysky @ 2002-10-25 15:37 UTC (permalink / raw)
To: linux-ia64
On Thu, Oct 24, 2002 at 06:22:44PM -0400, Scott Murray wrote:
> I hopefully will have something working against 2.5.44 tomorrow. I think
> the only potentially contentious piece that I'd like to get reviewed and
> maybe integrated before the feature freeze is the resource reservation
> stuff. There seemed to be no serious objections to the 2.4.x version I
> posted a while back, so maybe this won't be a big deal. Everything else
> is either __devinit/export tweaks or driver code.
The setup-bus code already does resource reservation, but only for
cardbus. It can be easily extended for any type of hotplug
controller though. Other enhancements (like configurable amount
of reserved IO/memory) also shouldn't be a problem.
Also I have a patch (appended) that allows to use pbus_size_bridges()
for cardbus bridges (which have different resource layout vs. PCI-to-PCI
ones).
BTW, 2.5 setup-* stuff went into 2.4 recently. :-)
Ivan.
--- 2.5.36/drivers/pci/setup-res.c Wed Sep 18 04:59:13 2002
+++ linux/drivers/pci/setup-res.c Thu Sep 19 19:31:45 2002
@@ -137,7 +137,7 @@ pci_assign_resource(struct pci_dev *dev,
}
/* Sort resources by alignment */
-void __init
+void __devinit
pdev_sort_resources(struct pci_dev *dev, struct resource_list *head)
{
int i;
--- 2.5.36/drivers/pci/setup-bus.c Wed Sep 18 04:58:56 2002
+++ linux/drivers/pci/setup-bus.c Thu Sep 19 19:29:04 2002
@@ -35,7 +35,7 @@
#define ROUND_UP(x, a) (((x) + (a) - 1) & ~((a) - 1))
-static int __init
+static int __devinit
pbus_assign_resources_sorted(struct pci_bus *bus)
{
struct list_head *ln;
@@ -85,7 +85,7 @@ pbus_assign_resources_sorted(struct pci_
requires that if there is no I/O ports or memory behind the
bridge, corresponding range must be turned off by writing base
value greater than limit to the bridge's base/limit registers. */
-static void __init
+static void __devinit
pci_setup_bridge(struct pci_bus *bus)
{
struct pbus_set_ranges_data ranges;
@@ -168,7 +168,7 @@ pci_setup_bridge(struct pci_bus *bus)
/* Check whether the bridge supports optional I/O and
prefetchable memory ranges. If not, the respective
base/limit registers must be read-only and read as 0. */
-static void __init
+static void __devinit
pci_bridge_check_ranges(struct pci_bus *bus)
{
u16 io;
@@ -206,20 +206,38 @@ pci_bridge_check_ranges(struct pci_bus *
b_res[2].flags |= IORESOURCE_MEM | IORESOURCE_PREFETCH;
}
+/* Find first free bus resource of a given type */
+static struct resource * __devinit
+pbus_find_resource(struct pci_bus *bus, unsigned long type)
+{
+ int i;
+ struct resource *r;
+
+ for (i = 0; i < PCI_BUS_NUM_RESOURCES; i++) {
+ r = bus->resource[i];
+ if (r && !((r->flags ^ type) & type) && !r->parent)
+ return r;
+ }
+ return NULL;
+}
+
/* Sizing the IO windows of the PCI-PCI bridge is trivial,
since these windows have 4K granularity and the IO ranges
of non-bridge PCI devices are limited to 256 bytes.
We must be careful with the ISA aliasing though. */
-static void __init
+static void __devinit
pbus_size_io(struct pci_bus *bus)
{
struct list_head *ln;
- struct resource *b_res = bus->resource[0];
+ struct resource *b_res = pbus_find_resource(bus, IORESOURCE_IO);
unsigned long size = 0, size1 = 0;
- if (!(b_res->flags & IORESOURCE_IO))
+ if (!b_res)
return;
+ DBGC((KERN_INFO "PCI: found %s resource %ld for IO\n",
+ bus->name, b_res - bus->resource[0]));
+
for (ln=bus->devices.next; ln != &bus->devices; ln=ln->next) {
struct pci_dev *dev = pci_dev_b(ln);
int i;
@@ -259,15 +277,21 @@ pbus_size_io(struct pci_bus *bus)
/* Calculate the size of the bus and minimal alignment which
guarantees that all child resources fit in this size. */
-static void __init
+static int __devinit
pbus_size_mem(struct pci_bus *bus, unsigned long mask, unsigned long type)
{
struct list_head *ln;
unsigned long min_align, align, size;
unsigned long aligns[12]; /* Alignments from 1Mb to 2Gb */
int order, max_order;
- struct resource *b_res = (type & IORESOURCE_PREFETCH) ?
- bus->resource[2] : bus->resource[1];
+ struct resource *b_res = pbus_find_resource(bus, type);
+
+ if (!b_res)
+ return 0;
+
+ DBGC((KERN_INFO "PCI: found %s resource %ld for %s\n",
+ bus->name, b_res - bus->resource[0],
+ type & IORESOURCE_PREFETCH ? "PREF" : "MEM"));
memset(aligns, 0, sizeof(aligns));
max_order = 0;
@@ -325,17 +349,18 @@ pbus_size_mem(struct pci_bus *bus, unsig
size = ROUND_UP(size, min_align);
if (!size) {
b_res->flags = 0;
- return;
+ return 1;
}
b_res->start = min_align;
b_res->end = size + min_align - 1;
+ return 1;
}
-void __init
+void __devinit
pbus_size_bridges(struct pci_bus *bus)
{
struct list_head *ln;
- unsigned long mask, type;
+ unsigned long mask, prefetch;
for (ln=bus->children.next; ln != &bus->children; ln=ln->next)
pbus_size_bridges(pci_bus_b(ln));
@@ -348,17 +373,15 @@ pbus_size_bridges(struct pci_bus *bus)
pbus_size_io(bus);
- mask = type = IORESOURCE_MEM;
+ mask = IORESOURCE_MEM;
+ prefetch = IORESOURCE_MEM | IORESOURCE_PREFETCH;
/* If the bridge supports prefetchable range, size it separately. */
- if (bus->resource[2] &&
- bus->resource[2]->flags & IORESOURCE_PREFETCH) {
- pbus_size_mem(bus, IORESOURCE_PREFETCH, IORESOURCE_PREFETCH);
- mask |= IORESOURCE_PREFETCH; /* Size non-prefetch only. */
- }
- pbus_size_mem(bus, mask, type);
+ if (pbus_size_mem(bus, prefetch, prefetch))
+ mask = prefetch; /* Size non-prefetch only. */
+ pbus_size_mem(bus, mask, IORESOURCE_MEM);
}
-void __init
+void __devinit
pbus_assign_resources(struct pci_bus *bus)
{
struct list_head *ln;
@@ -367,7 +390,8 @@ pbus_assign_resources(struct pci_bus *bu
if (found_vga) {
struct pci_bus *b;
- /* Propagate presence of the VGA to upstream bridges */
+ /* Propagate presence of the VGA to upstream bridges.
+ This hack eventually will go away. */
for (b = bus; b->parent; b = b->parent) {
b->resource[0]->flags |= IORESOURCE_BUS_HAS_VGA;
}
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Linux-ia64] Re: [Pcihpd-discuss] Re: PCI Hotplug Drivers for 2.5
2002-10-24 17:44 [Linux-ia64] Re: [Pcihpd-discuss] Re: PCI Hotplug Drivers for 2.5 Scott Murray
` (2 preceding siblings ...)
2002-10-25 15:37 ` Ivan Kokshaysky
@ 2002-10-25 22:02 ` Scott Murray
2002-10-25 22:25 ` Russell King
2002-10-26 23:36 ` Scott Murray
5 siblings, 0 replies; 7+ messages in thread
From: Scott Murray @ 2002-10-25 22:02 UTC (permalink / raw)
To: linux-ia64
On Fri, 25 Oct 2002, Ivan Kokshaysky wrote:
> On Thu, Oct 24, 2002 at 06:22:44PM -0400, Scott Murray wrote:
> > I hopefully will have something working against 2.5.44 tomorrow. I think
> > the only potentially contentious piece that I'd like to get reviewed and
> > maybe integrated before the feature freeze is the resource reservation
> > stuff. There seemed to be no serious objections to the 2.4.x version I
> > posted a while back, so maybe this won't be a big deal. Everything else
> > is either __devinit/export tweaks or driver code.
>
> The setup-bus code already does resource reservation, but only for
> cardbus. It can be easily extended for any type of hotplug
> controller though. Other enhancements (like configurable amount
> of reserved IO/memory) also shouldn't be a problem.
Unfortunately, my take on the scheme used to reserve space for CardBus
bridges was that it only works on platforms that use the setup-*.c code
to do their complete PCI subsystem initialization. On platforms like
x86, where the BIOS configures all the devices, something like my patch
is needed to fixup things to handle the desired reservation. I'm not
finished getting things ported to 2.5 yet, I'll post a patch ASAP once
I've got everything workin. If you're keen on devising an alternative
method, check put my old patch against 2.4.19 at:
http://marc.theaimsgroup.com/?l=linux-kernel&m\x102866931731553&w=2
[snip]
> BTW, 2.5 setup-* stuff went into 2.4 recently. :-)
Cool, that definitely will make my life easier.
Thanks,
Scott
--
Scott Murray
SOMA Networks, Inc.
Toronto, Ontario
e-mail: scottm@somanetworks.com
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Linux-ia64] Re: [Pcihpd-discuss] Re: PCI Hotplug Drivers for 2.5
2002-10-24 17:44 [Linux-ia64] Re: [Pcihpd-discuss] Re: PCI Hotplug Drivers for 2.5 Scott Murray
` (3 preceding siblings ...)
2002-10-25 22:02 ` Scott Murray
@ 2002-10-25 22:25 ` Russell King
2002-10-26 23:36 ` Scott Murray
5 siblings, 0 replies; 7+ messages in thread
From: Russell King @ 2002-10-25 22:25 UTC (permalink / raw)
To: linux-ia64
On Fri, Oct 25, 2002 at 06:02:31PM -0400, Scott Murray wrote:
> Unfortunately, my take on the scheme used to reserve space for CardBus
> bridges was that it only works on platforms that use the setup-*.c code
> to do their complete PCI subsystem initialization. On platforms like
> x86, where the BIOS configures all the devices, something like my patch
> is needed to fixup things to handle the desired reservation. I'm not
> finished getting things ported to 2.5 yet, I'll post a patch ASAP once
> I've got everything workin. If you're keen on devising an alternative
> method, check put my old patch against 2.4.19 at:
I've been working on this in 2.5 this week - I've got something working,
Alan's happy with the concept as far as the resource allocation goes.
The cardbus reservation method is actually flawed in setup-*.c if you
want to get rid of the stuff in yenta.c - again, I've fixed this lot
in my 2.5 tree already, and the patch is pending an update to the x86
code to do what yenta.c was doing (only setup bridge resources of the
ones already programmed are bad/wrong.)
--
Russell King (rmk@arm.linux.org.uk) The developer of ARM Linux
http://www.arm.linux.org.uk/personal/aboutme.html
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Linux-ia64] Re: [Pcihpd-discuss] Re: PCI Hotplug Drivers for 2.5
2002-10-24 17:44 [Linux-ia64] Re: [Pcihpd-discuss] Re: PCI Hotplug Drivers for 2.5 Scott Murray
` (4 preceding siblings ...)
2002-10-25 22:25 ` Russell King
@ 2002-10-26 23:36 ` Scott Murray
5 siblings, 0 replies; 7+ messages in thread
From: Scott Murray @ 2002-10-26 23:36 UTC (permalink / raw)
To: linux-ia64
On Fri, 25 Oct 2002, Russell King wrote:
> On Fri, Oct 25, 2002 at 06:02:31PM -0400, Scott Murray wrote:
> > Unfortunately, my take on the scheme used to reserve space for CardBus
> > bridges was that it only works on platforms that use the setup-*.c code
> > to do their complete PCI subsystem initialization. On platforms like
> > x86, where the BIOS configures all the devices, something like my patch
> > is needed to fixup things to handle the desired reservation. I'm not
> > finished getting things ported to 2.5 yet, I'll post a patch ASAP once
> > I've got everything workin. If you're keen on devising an alternative
> > method, check put my old patch against 2.4.19 at:
>
> I've been working on this in 2.5 this week - I've got something working,
> Alan's happy with the concept as far as the resource allocation goes.
>
> The cardbus reservation method is actually flawed in setup-*.c if you
> want to get rid of the stuff in yenta.c - again, I've fixed this lot
> in my 2.5 tree already, and the patch is pending an update to the x86
> code to do what yenta.c was doing (only setup bridge resources of the
> ones already programmed are bad/wrong.)
This sounds like it could remove the need for my manually specified
resource reservation scheme, does your code currently support arbitrary
bridges, i.e. non-CardBus?
Thanks,
Scott
--
Scott Murray
SOMA Networks, Inc.
Toronto, Ontario
e-mail: scottm@somanetworks.com
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2002-10-26 23:36 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2002-10-24 17:44 [Linux-ia64] Re: [Pcihpd-discuss] Re: PCI Hotplug Drivers for 2.5 Scott Murray
2002-10-24 21:49 ` Greg KH
2002-10-24 22:22 ` Scott Murray
2002-10-25 15:37 ` Ivan Kokshaysky
2002-10-25 22:02 ` Scott Murray
2002-10-25 22:25 ` Russell King
2002-10-26 23:36 ` Scott Murray
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox