[flashrom] [PATCH 2/4] Add pci_init_common() to unify PCI init.
Stefan Tauner
stefan.tauner at student.tuwien.ac.at
Mon Dec 31 21:53:25 CET 2012
Previously the internal programmer used its own code to initialize pcilib.
This patch extracts the common code from the internal programmer and
pcidev_init() into pcidev_init_common().
This fixes the non-existent PCI cleanup of the internal programmer.
Signed-off-by: Stefan Tauner <stefan.tauner at student.tuwien.ac.at>
---
internal.c | 6 ++----
pcidev.c | 15 +++++++++++----
programmer.h | 1 +
3 files changed, 14 insertions(+), 8 deletions(-)
diff --git a/internal.c b/internal.c
index eda4d59..9b34715 100644
--- a/internal.c
+++ b/internal.c
@@ -245,10 +245,8 @@ int internal_init(void)
internal_buses_supported = BUS_NONSPI;
/* Initialize PCI access for flash enables */
- pacc = pci_alloc(); /* Get the pci_access structure */
- /* Set all options you want -- here we stick with the defaults */
- pci_init(pacc); /* Initialize the PCI library */
- pci_scan_bus(pacc); /* We want to get the list of devices */
+ if(pci_init_common() != 0)
+ return 1;
if (processor_flash_enable()) {
msg_perr("Processor detection/init failed.\n"
diff --git a/pcidev.c b/pcidev.c
index 37bcc22..7f1f243 100644
--- a/pcidev.c
+++ b/pcidev.c
@@ -162,6 +162,16 @@ static int pcidev_shutdown(void *data)
return 0;
}
+int pcidev_init_common(void)
+{
+ pacc = pci_alloc(); /* Get the pci_access structure */
+ pci_init(pacc); /* Initialize the PCI library */
+ if (register_shutdown(pcidev_shutdown, NULL))
+ return 1;
+ pci_scan_bus(pacc); /* We want to get the list of devices */
+ return 0;
+}
+
uintptr_t pcidev_init(int bar, const struct dev_entry *devs)
{
struct pci_dev *dev;
@@ -172,11 +182,8 @@ uintptr_t pcidev_init(int bar, const struct dev_entry *devs)
int i;
uintptr_t addr = 0, curaddr = 0;
- pacc = pci_alloc(); /* Get the pci_access structure */
- pci_init(pacc); /* Initialize the PCI library */
- if (register_shutdown(pcidev_shutdown, NULL))
+ if(pcidev_init_common() != 0)
return 1;
- pci_scan_bus(pacc); /* We want to get the list of devices */
pci_filter_init(pacc, &filter);
/* Filter by bb:dd.f (if supplied by the user). */
diff --git a/programmer.h b/programmer.h
index 8de42bc..7703ec1 100644
--- a/programmer.h
+++ b/programmer.h
@@ -238,6 +238,7 @@ void internal_delay(int usecs);
extern uint32_t io_base_addr;
extern struct pci_access *pacc;
extern struct pci_dev *pcidev_dev;
+int pcidev_init_common(void);
uintptr_t pcidev_readbar(struct pci_dev *dev, int bar);
uintptr_t pcidev_init(int bar, const struct dev_entry *devs);
/* rpci_write_* are reversible writes. The original PCI config space register
--
Kind regards, Stefan Tauner
More information about the flashrom
mailing list