Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2bdd1b03 authored by Andres Salomon's avatar Andres Salomon Committed by Jesse Barnes
Browse files

PCI/x86: 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).

Signed-off-by: default avatarAndres Salomon <dilinger@debian.org>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarJesse Barnes <jbarnes@virtuousgeek.org>
parent 53c8ba95
Loading
Loading
Loading
Loading
+5 −6
Original line number Original line Diff line number Diff line
@@ -1508,13 +1508,13 @@ config PCI_GOMMCONFIG
config PCI_GODIRECT
config PCI_GODIRECT
	bool "Direct"
	bool "Direct"


config PCI_GOANY
	bool "Any"

config PCI_GOOLPC
config PCI_GOOLPC
	bool "OLPC"
	bool "OLPC"
	depends on OLPC
	depends on OLPC


config PCI_GOANY
	bool "Any"

endchoice
endchoice


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


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


config PCI_DOMAINS
config PCI_DOMAINS
	def_bool y
	def_bool y
+2 −1
Original line number Original line Diff line number Diff line
@@ -15,7 +15,8 @@ static __init int pci_access_init(void)
	pci_mmcfg_early_init();
	pci_mmcfg_early_init();


#ifdef CONFIG_PCI_OLPC
#ifdef CONFIG_PCI_OLPC
	pci_olpc_init();
	if (!pci_olpc_init())
		return 0;	/* skip additional checks if it's an XO */
#endif
#endif
#ifdef CONFIG_PCI_BIOS
#ifdef CONFIG_PCI_BIOS
	pci_pcbios_init();
	pci_pcbios_init();
+3 −2
Original line number Original line Diff line number Diff line
@@ -302,12 +302,13 @@ static struct pci_raw_ops pci_olpc_conf = {
	.write = pci_olpc_write,
	.write = pci_olpc_write,
};
};


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


	printk(KERN_INFO "PCI: Using configuration type OLPC\n");
	printk(KERN_INFO "PCI: Using configuration type OLPC\n");
	raw_pci_ops = &pci_olpc_conf;
	raw_pci_ops = &pci_olpc_conf;
	is_lx = is_geode_lx();
	is_lx = is_geode_lx();
	return 0;
}
}
+1 −1
Original line number Original line Diff line number Diff line
@@ -101,7 +101,7 @@ extern struct pci_raw_ops pci_direct_conf1;
extern int pci_direct_probe(void);
extern int pci_direct_probe(void);
extern void pci_direct_init(int type);
extern void pci_direct_init(int type);
extern void pci_pcbios_init(void);
extern void pci_pcbios_init(void);
extern void pci_olpc_init(void);
extern int pci_olpc_init(void);


/* pci-mmconfig.c */
/* pci-mmconfig.c */