2008-06-05 19:23:26

by Andres Salomon

[permalink] [raw]
Subject: [PATCH] OLPC: pci: fix up PCI stuff so that PCI_GOANY supports OLPC

Previously, one would have to specifically choose CONFIG_OLPC and
CONFIG_PCI_GOOLPC in order to enable PCI_OLPC. That doesn't really
work for distro kernels, so this patch allows one to choose
CONFIG_OLPC and CONFIG_PCI_GOANY in order to build in OLPC support in
a generic kernel (as requested by Robert Millan).

This also moves GOOLPC before GOANY in the menuconfig list.

Finally, make pci_access_init return early if we detect OLPC hardware.
There's no need to continue probing stuff, and pci_pcbios_init
specifically trashes our settings (we didn't run into that before
because PCI_GOANY wasn't supported).

It would be great if we could sneak this in for 2.6.26.. *cough* :)

Signed-off-by: Andres Salomon <[email protected]>
---
arch/x86/Kconfig | 11 +++++------
arch/x86/pci/init.c | 3 ++-
arch/x86/pci/olpc.c | 5 +++--
arch/x86/pci/pci.h | 2 +-
4 files changed, 11 insertions(+), 10 deletions(-)

diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index dcbec34..52e18e6 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -1508,13 +1508,13 @@ config PCI_GOMMCONFIG
config PCI_GODIRECT
bool "Direct"

-config PCI_GOANY
- bool "Any"
-
config PCI_GOOLPC
bool "OLPC"
depends on OLPC

+config PCI_GOANY
+ bool "Any"
+
endchoice

config PCI_BIOS
@@ -1531,9 +1531,8 @@ config PCI_MMCONFIG
depends on X86_32 && PCI && ACPI && (PCI_GOMMCONFIG || PCI_GOANY)

config PCI_OLPC
- bool
- depends on PCI && PCI_GOOLPC
- default y
+ def_bool y
+ depends on PCI && OLPC && (PCI_GOOLPC || PCI_GOANY)

config PCI_DOMAINS
def_bool y
diff --git a/arch/x86/pci/init.c b/arch/x86/pci/init.c
index e70b9c5..b821f44 100644
--- a/arch/x86/pci/init.c
+++ b/arch/x86/pci/init.c
@@ -15,7 +15,8 @@ static __init int pci_access_init(void)
pci_mmcfg_early_init();

#ifdef CONFIG_PCI_OLPC
- pci_olpc_init();
+ if (!pci_olpc_init())
+ return 0; /* skip additional checks if it's an XO */
#endif
#ifdef CONFIG_PCI_BIOS
pci_pcbios_init();
diff --git a/arch/x86/pci/olpc.c b/arch/x86/pci/olpc.c
index 5e76365..e11e9e8 100644
--- a/arch/x86/pci/olpc.c
+++ b/arch/x86/pci/olpc.c
@@ -302,12 +302,13 @@ static struct pci_raw_ops pci_olpc_conf = {
.write = pci_olpc_write,
};

-void __init pci_olpc_init(void)
+int __init pci_olpc_init(void)
{
if (!machine_is_olpc() || olpc_has_vsa())
- return;
+ return -ENODEV;

printk(KERN_INFO "PCI: Using configuration type OLPC\n");
raw_pci_ops = &pci_olpc_conf;
is_lx = is_geode_lx();
+ return 0;
}
diff --git a/arch/x86/pci/pci.h b/arch/x86/pci/pci.h
index f3972b1..720c4c5 100644
--- a/arch/x86/pci/pci.h
+++ b/arch/x86/pci/pci.h
@@ -101,7 +101,7 @@ extern struct pci_raw_ops pci_direct_conf1;
extern int pci_direct_probe(void);
extern void pci_direct_init(int type);
extern void pci_pcbios_init(void);
-extern void pci_olpc_init(void);
+extern int pci_olpc_init(void);

/* pci-mmconfig.c */

--
1.5.5.1


2008-06-05 19:43:52

by Andrew Morton

[permalink] [raw]
Subject: Re: [PATCH] OLPC: pci: fix up PCI stuff so that PCI_GOANY supports OLPC

On Thu, 5 Jun 2008 15:29:14 -0400
Andres Salomon <[email protected]> wrote:

> Previously, one would have to specifically choose CONFIG_OLPC and
> CONFIG_PCI_GOOLPC in order to enable PCI_OLPC. That doesn't really
> work for distro kernels, so this patch allows one to choose
> CONFIG_OLPC and CONFIG_PCI_GOANY in order to build in OLPC support in
> a generic kernel (as requested by Robert Millan).
>
> This also moves GOOLPC before GOANY in the menuconfig list.
>
> Finally, make pci_access_init return early if we detect OLPC hardware.
> There's no need to continue probing stuff, and pci_pcbios_init
> specifically trashes our settings (we didn't run into that before
> because PCI_GOANY wasn't supported).
>
> It would be great if we could sneak this in for 2.6.26.. *cough* :)
>

It looks harmless enough.

> ---
> arch/x86/Kconfig | 11 +++++------
> arch/x86/pci/init.c | 3 ++-
> arch/x86/pci/olpc.c | 5 +++--
> arch/x86/pci/pci.h | 2 +-

But I never know whether arch/x86/pci is a Jesse thing or an Ingo
thing. Usual answer: it's an everyone thing and we all make a big mess ;)

2008-06-05 20:07:53

by Randy Dunlap

[permalink] [raw]
Subject: Re: [PATCH] OLPC: pci: fix up PCI stuff so that PCI_GOANY supports OLPC

On Thu, 5 Jun 2008, Andres Salomon wrote:

> Previously, one would have to specifically choose CONFIG_OLPC and
> CONFIG_PCI_GOOLPC in order to enable PCI_OLPC. That doesn't really
> work for distro kernels, so this patch allows one to choose
> CONFIG_OLPC and CONFIG_PCI_GOANY in order to build in OLPC support in
> a generic kernel (as requested by Robert Millan).
>
> This also moves GOOLPC before GOANY in the menuconfig list.

Please say why... (for above)

> Finally, make pci_access_init return early if we detect OLPC hardware.
> There's no need to continue probing stuff, and pci_pcbios_init
> specifically trashes our settings (we didn't run into that before
> because PCI_GOANY wasn't supported).
>
> It would be great if we could sneak this in for 2.6.26.. *cough* :)
>
> Signed-off-by: Andres Salomon <[email protected]>
> ---
> arch/x86/Kconfig | 11 +++++------
> arch/x86/pci/init.c | 3 ++-
> arch/x86/pci/olpc.c | 5 +++--
> arch/x86/pci/pci.h | 2 +-
> 4 files changed, 11 insertions(+), 10 deletions(-)
>
> diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
> index dcbec34..52e18e6 100644
> --- a/arch/x86/Kconfig
> +++ b/arch/x86/Kconfig
> @@ -1508,13 +1508,13 @@ config PCI_GOMMCONFIG
> config PCI_GODIRECT
> bool "Direct"
>
> -config PCI_GOANY
> - bool "Any"
> -
> config PCI_GOOLPC
> bool "OLPC"
> depends on OLPC
>
> +config PCI_GOANY
> + bool "Any"
> +
> endchoice
>
> config PCI_BIOS
> @@ -1531,9 +1531,8 @@ config PCI_MMCONFIG
> depends on X86_32 && PCI && ACPI && (PCI_GOMMCONFIG || PCI_GOANY)
>
> config PCI_OLPC
> - bool
> - depends on PCI && PCI_GOOLPC
> - default y
> + def_bool y
> + depends on PCI && OLPC && (PCI_GOOLPC || PCI_GOANY)
>
> config PCI_DOMAINS
> def_bool y
> diff --git a/arch/x86/pci/init.c b/arch/x86/pci/init.c
> index e70b9c5..b821f44 100644
> --- a/arch/x86/pci/init.c
> +++ b/arch/x86/pci/init.c
> @@ -15,7 +15,8 @@ static __init int pci_access_init(void)
> pci_mmcfg_early_init();
>
> #ifdef CONFIG_PCI_OLPC
> - pci_olpc_init();
> + if (!pci_olpc_init())
> + return 0; /* skip additional checks if it's an XO */
> #endif
> #ifdef CONFIG_PCI_BIOS
> pci_pcbios_init();
> diff --git a/arch/x86/pci/olpc.c b/arch/x86/pci/olpc.c
> index 5e76365..e11e9e8 100644
> --- a/arch/x86/pci/olpc.c
> +++ b/arch/x86/pci/olpc.c
> @@ -302,12 +302,13 @@ static struct pci_raw_ops pci_olpc_conf = {
> .write = pci_olpc_write,
> };
>
> -void __init pci_olpc_init(void)
> +int __init pci_olpc_init(void)
> {
> if (!machine_is_olpc() || olpc_has_vsa())
> - return;
> + return -ENODEV;
>
> printk(KERN_INFO "PCI: Using configuration type OLPC\n");
> raw_pci_ops = &pci_olpc_conf;
> is_lx = is_geode_lx();
> + return 0;
> }
> diff --git a/arch/x86/pci/pci.h b/arch/x86/pci/pci.h
> index f3972b1..720c4c5 100644
> --- a/arch/x86/pci/pci.h
> +++ b/arch/x86/pci/pci.h
> @@ -101,7 +101,7 @@ extern struct pci_raw_ops pci_direct_conf1;
> extern int pci_direct_probe(void);
> extern void pci_direct_init(int type);
> extern void pci_pcbios_init(void);
> -extern void pci_olpc_init(void);
> +extern int pci_olpc_init(void);
>
> /* pci-mmconfig.c */
>
>

--
~Randy

2008-06-05 20:21:27

by Andres Salomon

[permalink] [raw]
Subject: Re: [PATCH] OLPC: pci: fix up PCI stuff so that PCI_GOANY supports OLPC

On Thu, 5 Jun 2008 13:07:35 -0700 (PDT)
"Randy.Dunlap" <[email protected]> wrote:

> On Thu, 5 Jun 2008, Andres Salomon wrote:
>
> > Previously, one would have to specifically choose CONFIG_OLPC and
> > CONFIG_PCI_GOOLPC in order to enable PCI_OLPC. That doesn't really
> > work for distro kernels, so this patch allows one to choose
> > CONFIG_OLPC and CONFIG_PCI_GOANY in order to build in OLPC support
> > in a generic kernel (as requested by Robert Millan).
> >
> > This also moves GOOLPC before GOANY in the menuconfig list.
>
> Please say why... (for above)
>

The options above GOANY are included in GOANY.
Previously, GOANY did not support GOOLPC, so GOOLPC was listed after it.
Now that GOANY supports GOOLPC, it can be listed above w/ the others.

Plus, _I_ think it looks nicer. :) That hunk can easily be removed from
the patch if others disagree.

2008-06-05 20:35:06

by Jesse Barnes

[permalink] [raw]
Subject: Re: [PATCH] OLPC: pci: fix up PCI stuff so that PCI_GOANY supports OLPC

On Thursday, June 05, 2008 12:42 pm Andrew Morton wrote:
> On Thu, 5 Jun 2008 15:29:14 -0400
>
> Andres Salomon <[email protected]> wrote:
> > Previously, one would have to specifically choose CONFIG_OLPC and
> > CONFIG_PCI_GOOLPC in order to enable PCI_OLPC. That doesn't really
> > work for distro kernels, so this patch allows one to choose
> > CONFIG_OLPC and CONFIG_PCI_GOANY in order to build in OLPC support in
> > a generic kernel (as requested by Robert Millan).
> >
> > This also moves GOOLPC before GOANY in the menuconfig list.
> >
> > Finally, make pci_access_init return early if we detect OLPC hardware.
> > There's no need to continue probing stuff, and pci_pcbios_init
> > specifically trashes our settings (we didn't run into that before
> > because PCI_GOANY wasn't supported).
> >
> > It would be great if we could sneak this in for 2.6.26.. *cough* :)
>
> It looks harmless enough.
>
> > ---
> > arch/x86/Kconfig | 11 +++++------
> > arch/x86/pci/init.c | 3 ++-
> > arch/x86/pci/olpc.c | 5 +++--
> > arch/x86/pci/pci.h | 2 +-
>
> But I never know whether arch/x86/pci is a Jesse thing or an Ingo
> thing. Usual answer: it's an everyone thing and we all make a big mess ;)

Heh, yeah I've been taking quite a few x86 PCI patches (Ingo actually has a
queue of them for me now), so I can pick this one up and put it in what I
hope will be my final 2.6.26 pull request.

Jesse

2008-06-05 20:50:31

by Thomas Gleixner

[permalink] [raw]
Subject: Re: [PATCH] OLPC: pci: fix up PCI stuff so that PCI_GOANY supports OLPC

On Thu, 5 Jun 2008, Andrew Morton wrote:
> On Thu, 5 Jun 2008 15:29:14 -0400
> Andres Salomon <[email protected]> wrote:
>
> > Previously, one would have to specifically choose CONFIG_OLPC and
> > CONFIG_PCI_GOOLPC in order to enable PCI_OLPC. That doesn't really
> > work for distro kernels, so this patch allows one to choose
> > CONFIG_OLPC and CONFIG_PCI_GOANY in order to build in OLPC support in
> > a generic kernel (as requested by Robert Millan).
> >
> > This also moves GOOLPC before GOANY in the menuconfig list.
> >
> > Finally, make pci_access_init return early if we detect OLPC hardware.
> > There's no need to continue probing stuff, and pci_pcbios_init
> > specifically trashes our settings (we didn't run into that before
> > because PCI_GOANY wasn't supported).
> >
> > It would be great if we could sneak this in for 2.6.26.. *cough* :)
> >
>
> It looks harmless enough.
>
> > ---
> > arch/x86/Kconfig | 11 +++++------
> > arch/x86/pci/init.c | 3 ++-
> > arch/x86/pci/olpc.c | 5 +++--
> > arch/x86/pci/pci.h | 2 +-
>
> But I never know whether arch/x86/pci is a Jesse thing or an Ingo
> thing. Usual answer: it's an everyone thing and we all make a big mess ;)

So the Salomonic solution is:

You pick it up and send it either to Jesse or [email protected] :)

I put it into my urgent bucket just to be on the safe side.

Thanks,
tglx

2008-06-06 12:12:24

by Pavel Machek

[permalink] [raw]
Subject: Re: [PATCH] OLPC: pci: fix up PCI stuff so that PCI_GOANY supports OLPC

On Thu 2008-06-05 15:29:14, Andres Salomon wrote:
> Previously, one would have to specifically choose CONFIG_OLPC and
> CONFIG_PCI_GOOLPC in order to enable PCI_OLPC. That doesn't really
> work for distro kernels, so this patch allows one to choose

How do distros work on OLPC, anyway? It lacks normal BIOS, so you
can't really use GRUB, right?
Pavel
--
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html

2008-06-06 12:40:36

by Andres Salomon

[permalink] [raw]
Subject: Re: [PATCH] OLPC: pci: fix up PCI stuff so that PCI_GOANY supports OLPC

On Fri, 6 Jun 2008 13:05:49 +0200
Pavel Machek <[email protected]> wrote:

> On Thu 2008-06-05 15:29:14, Andres Salomon wrote:
> > Previously, one would have to specifically choose CONFIG_OLPC and
> > CONFIG_PCI_GOOLPC in order to enable PCI_OLPC. That doesn't really
> > work for distro kernels, so this patch allows one to choose
>
> How do distros work on OLPC, anyway? It lacks normal BIOS, so you
> can't really use GRUB, right?
> Pavel

I believe Robert was actually working on grub support. I thought it made
little sense within the context of OFW, but if it is a requirement to make
installers happy, so be it.

2008-06-06 13:48:21

by Robert Millan

[permalink] [raw]
Subject: Re: [PATCH] OLPC: pci: fix up PCI stuff so that PCI_GOANY supports OLPC

On Fri, Jun 06, 2008 at 08:46:33AM -0400, Andres Salomon wrote:
> On Fri, 6 Jun 2008 13:05:49 +0200
> Pavel Machek <[email protected]> wrote:
>
> > On Thu 2008-06-05 15:29:14, Andres Salomon wrote:
> > > Previously, one would have to specifically choose CONFIG_OLPC and
> > > CONFIG_PCI_GOOLPC in order to enable PCI_OLPC. That doesn't really
> > > work for distro kernels, so this patch allows one to choose
> >
> > How do distros work on OLPC, anyway? It lacks normal BIOS, so you
> > can't really use GRUB, right?
> > Pavel
>
> I believe Robert was actually working on grub support.

The OLPC port of GRUB is mostly complete now. There's a problem with
finding the boot drive though (I'm working on that atm). Other details
at http://grub.enbug.org/OLPC

As for the BIOS dependency, GRUB 2 is very portable so it wasn't a problem
(we used the existing keyboard driver from the Coreboot port, and the OFW
client framework we already had for powerpc).

> I thought it made
> little sense within the context of OFW, but if it is a requirement to make
> installers happy, so be it.

Some might find it practical to have the GRUB menu & update-grub to autobuild
it :-)

--
Robert Millan

<GPLv2> I know my rights; I want my phone call!
<DRM> What good is a phone call… if you are unable to speak?
(as seen on /.)