From: Ed Swierk <eswierk@aristanetworks.com>
To: tglx@linutronix.de, mingo@redhat.com, hpa@zytor.com,
linux-kernel@vger.kernel.org, lenb@kernel.org,
linux-acpi@vger.kernel.org, jbarnes@virtuousgeek.org,
linux-pci@vger.kernel.org
Subject: [RFC] [PATCH] PCI mmconfig without ACPI
Date: Wed, 04 Feb 2009 08:59:46 -0800 [thread overview]
Message-ID: <1233766786.16414.26.camel@localhost.localdomain> (raw)
Make it possible to use memory-mapped PCI configuration space on systems
with a supported PCI host bridge without CONFIG_ACPI.
The acpi_mcfg_allocation struct serves double duty, as a template for
parsing the ACPI MCFG table and also to store the mmconfig data, which
doesn't necessarily come from ACPI. Should I leave the struct in
acpi/actbl1.h for ACPI parsing, and create a new one for storing
mmconfig data?
---
Index: linux-2.6.27.4/arch/x86/Kconfig
===================================================================
--- linux-2.6.27.4.orig/arch/x86/Kconfig
+++ linux-2.6.27.4/arch/x86/Kconfig
@@ -1599,7 +1599,7 @@ config PCI_DIRECT
config PCI_MMCONFIG
def_bool y
- depends on X86_32 && PCI && ACPI && (PCI_GOMMCONFIG || PCI_GOANY)
+ depends on X86_32 && PCI && (PCI_GOMMCONFIG || PCI_GOANY)
config PCI_OLPC
def_bool y
@@ -1611,7 +1611,7 @@ config PCI_DOMAINS
config PCI_MMCONFIG
bool "Support mmconfig PCI config space access"
- depends on X86_64 && PCI && ACPI
+ depends on X86_64 && PCI
config DMAR
bool "Support for DMA Remapping Devices (EXPERIMENTAL)"
Index: linux-2.6.27.4/arch/x86/kernel/acpi/boot.c
===================================================================
--- linux-2.6.27.4.orig/arch/x86/kernel/acpi/boot.c
+++ linux-2.6.27.4/arch/x86/kernel/acpi/boot.c
@@ -156,10 +156,6 @@ char *__init __acpi_map_table(unsigned l
}
#ifdef CONFIG_PCI_MMCONFIG
-/* The physical address of the MMCONFIG aperture. Set from ACPI tables. */
-struct acpi_mcfg_allocation *pci_mmcfg_config;
-int pci_mmcfg_config_num;
-
static int __init acpi_mcfg_oem_check(struct acpi_table_mcfg *mcfg)
{
if (!strcmp(mcfg->header.oem_id, "SGI"))
Index: linux-2.6.27.4/arch/x86/pci/mmconfig-shared.c
===================================================================
--- linux-2.6.27.4.orig/arch/x86/pci/mmconfig-shared.c
+++ linux-2.6.27.4/arch/x86/pci/mmconfig-shared.c
@@ -18,6 +18,10 @@
#include "pci.h"
+/* The physical address of the MMCONFIG aperture. Set from ACPI tables. */
+struct acpi_mcfg_allocation *pci_mmcfg_config;
+int pci_mmcfg_config_num;
+
/* aperture is up to 256MB but BIOS may reserve less */
#define MMCONFIG_APER_MIN (2 * 1024*1024)
#define MMCONFIG_APER_MAX (256 * 1024*1024)
@@ -264,6 +268,8 @@ static void __init pci_mmcfg_insert_reso
pci_mmcfg_resources_inserted = 1;
}
+#ifdef CONFIG_ACPI
+
static acpi_status __init check_mcfg_resource(struct acpi_resource *res,
void *data)
{
@@ -425,6 +431,8 @@ reject:
pci_mmcfg_config_num = 0;
}
+#endif
+
static int __initdata known_bridge;
static void __init __pci_mmcfg_init(int early)
@@ -446,10 +454,12 @@ static void __init __pci_mmcfg_init(int
known_bridge = 1;
}
+#ifdef CONFIG_ACPI
if (!known_bridge) {
acpi_table_parse(ACPI_SIG_MCFG, acpi_parse_mcfg);
pci_mmcfg_reject_broken(early);
}
+#endif
if ((pci_mmcfg_config_num == 0) ||
(pci_mmcfg_config == NULL) ||
Index: linux-2.6.27.4/include/acpi/actbl1.h
===================================================================
--- linux-2.6.27.4.orig/include/acpi/actbl1.h
+++ linux-2.6.27.4/include/acpi/actbl1.h
@@ -1045,16 +1045,6 @@ struct acpi_table_mcfg {
u8 reserved[8];
};
-/* Subtable */
-
-struct acpi_mcfg_allocation {
- u64 address; /* Base address, processor-relative */
- u16 pci_segment; /* PCI segment group number */
- u8 start_bus_number; /* Starting PCI Bus number */
- u8 end_bus_number; /* Final PCI Bus number */
- u32 reserved;
-};
-
/*******************************************************************************
*
* SBST - Smart Battery Specification Table
Index: linux-2.6.27.4/include/linux/acpi.h
===================================================================
--- linux-2.6.27.4.orig/include/linux/acpi.h
+++ linux-2.6.27.4/include/linux/acpi.h
@@ -118,9 +118,6 @@ int acpi_unregister_ioapic(acpi_handle h
void acpi_irq_stats_init(void);
extern u32 acpi_irq_handled;
-extern struct acpi_mcfg_allocation *pci_mmcfg_config;
-extern int pci_mmcfg_config_num;
-
extern int sbf_port;
extern unsigned long acpi_realmode_flags;
Index: linux-2.6.27.4/arch/x86/pci/pci.h
===================================================================
--- linux-2.6.27.4.orig/arch/x86/pci/pci.h
+++ linux-2.6.27.4/arch/x86/pci/pci.h
@@ -159,3 +159,18 @@ static inline void mmio_config_writel(vo
{
asm volatile("movl %%eax,(%1)" :: "a" (val), "r" (pos) : "memory");
}
+
+#ifdef CONFIG_PCI_MMCONFIG
+
+struct acpi_mcfg_allocation {
+ u64 address; /* Base address, processor-relative */
+ u16 pci_segment; /* PCI segment group number */
+ u8 start_bus_number; /* Starting PCI Bus number */
+ u8 end_bus_number; /* Final PCI Bus number */
+ u32 reserved;
+};
+
+extern struct acpi_mcfg_allocation *pci_mmcfg_config;
+extern int pci_mmcfg_config_num;
+
+#endif
next reply other threads:[~2009-02-04 16:59 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-02-04 16:59 Ed Swierk [this message]
2009-02-04 18:17 ` [RFC] [PATCH] PCI mmconfig without ACPI Ingo Molnar
2009-02-13 20:40 ` Jesse Barnes
2009-02-16 19:32 ` Ed Swierk
2009-05-05 17:57 ` Jesse Barnes
2009-05-05 20:09 ` Ed Swierk
2009-05-05 20:09 ` Ed Swierk
2009-05-05 20:32 ` Jesse Barnes
2009-05-05 20:32 ` Jesse Barnes
2009-02-21 5:55 ` Len Brown
2009-02-22 9:22 ` Ingo Molnar
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1233766786.16414.26.camel@localhost.localdomain \
--to=eswierk@aristanetworks.com \
--cc=hpa@zytor.com \
--cc=jbarnes@virtuousgeek.org \
--cc=lenb@kernel.org \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=tglx@linutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.