[U-Boot] [PATCH v3 3/7] pci: Make pci apis usable before relocation

2014-12-30 Thread Bin Meng
Introduce a gd-hose to save the pci hose in the early phase so that
apis in drivers/pci/pci.c can be used before relocation. Architecture
codes need assign a valid gd-hose in the early phase.

Some variables are declared as static so change them to be either
stack variable or global data member so that they can be used before
relocation, except the 'indent' used by CONFIG_PCI_SCAN_SHOW which
just affects some print format.

Signed-off-by: Bin Meng bmeng...@gmail.com
Acked-by: Simon Glass s...@chromium.org

---

Changes in v3: None
Changes in v2:
- New patch to make pci apis usable before relocation

 arch/x86/cpu/pci.c |  8 
 arch/x86/include/asm/global_data.h |  1 -
 arch/x86/include/asm/pci.h |  2 +-
 drivers/pci/pci.c  | 25 +
 include/asm-generic/global_data.h  |  6 ++
 5 files changed, 28 insertions(+), 14 deletions(-)

diff --git a/arch/x86/cpu/pci.c b/arch/x86/cpu/pci.c
index 1eee08b..ab1 100644
--- a/arch/x86/cpu/pci.c
+++ b/arch/x86/cpu/pci.c
@@ -30,7 +30,7 @@ int pci_early_init_hose(struct pci_controller **hosep)
board_pci_setup_hose(hose);
pci_setup_type1(hose);
hose-last_busno = pci_hose_scan(hose);
-   gd-arch.hose = hose;
+   gd-hose = hose;
*hosep = hose;
 
return 0;
@@ -51,7 +51,7 @@ void pci_init_board(void)
struct pci_controller *hose = x86_hose;
 
/* Stop using the early hose */
-   gd-arch.hose = NULL;
+   gd-hose = NULL;
 
board_pci_setup_hose(hose);
pci_setup_type1(hose);
@@ -64,8 +64,8 @@ void pci_init_board(void)
 
 static struct pci_controller *get_hose(void)
 {
-   if (gd-arch.hose)
-   return gd-arch.hose;
+   if (gd-hose)
+   return gd-hose;
 
return pci_bus_to_hose(0);
 }
diff --git a/arch/x86/include/asm/global_data.h 
b/arch/x86/include/asm/global_data.h
index 03d491a..aeab3e5 100644
--- a/arch/x86/include/asm/global_data.h
+++ b/arch/x86/include/asm/global_data.h
@@ -43,7 +43,6 @@ struct arch_global_data {
uint32_t tsc_mhz;   /* TSC frequency in MHz */
void *new_fdt;  /* Relocated FDT */
uint32_t bist;  /* Built-in self test value */
-   struct pci_controller *hose;/* PCI hose for early use */
enum pei_boot_mode_t pei_boot_mode;
const struct pch_gpio_map *gpio_map;/* board GPIO map */
struct memory_info meminfo; /* Memory information */
diff --git a/arch/x86/include/asm/pci.h b/arch/x86/include/asm/pci.h
index ac1a808..c30dd4c 100644
--- a/arch/x86/include/asm/pci.h
+++ b/arch/x86/include/asm/pci.h
@@ -29,7 +29,7 @@ void board_pci_setup_hose(struct pci_controller *hose);
  * pci_early_init_hose() - Set up PCI host before relocation
  *
  * This allocates memory for, sets up and returns the PCI hose. It can be
- * called before relocation. The hose will be stored in gd-arch.hose for
+ * called before relocation. The hose will be stored in gd-hose for
  * later use, but will become invalid one DRAM is available.
  */
 int pci_early_init_hose(struct pci_controller **hosep);
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
index 3daf73c..83fd9a0 100644
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
@@ -19,6 +19,8 @@
 #include asm/io.h
 #include pci.h
 
+DECLARE_GLOBAL_DATA_PTR;
+
 #define PCI_HOSE_OP(rw, size, type)\
 int pci_hose_##rw##_config_##size(struct pci_controller *hose, \
  pci_dev_t dev,\
@@ -123,6 +125,14 @@ void *pci_map_bar(pci_dev_t pdev, int bar, int flags)
 
 static struct pci_controller* hose_head;
 
+struct pci_controller *pci_get_hose_head(void)
+{
+   if (gd-hose)
+   return gd-hose;
+
+   return hose_head;
+}
+
 void pci_register_hose(struct pci_controller* hose)
 {
struct pci_controller **phose = hose_head;
@@ -139,7 +149,7 @@ struct pci_controller *pci_bus_to_hose(int bus)
 {
struct pci_controller *hose;
 
-   for (hose = hose_head; hose; hose = hose-next) {
+   for (hose = pci_get_hose_head(); hose; hose = hose-next) {
if (bus = hose-first_busno  bus = hose-last_busno)
return hose;
}
@@ -152,7 +162,7 @@ struct pci_controller *find_hose_by_cfg_addr(void *cfg_addr)
 {
struct pci_controller *hose;
 
-   for (hose = hose_head; hose; hose = hose-next) {
+   for (hose = pci_get_hose_head(); hose; hose = hose-next) {
if (hose-cfg_addr == cfg_addr)
return hose;
}
@@ -162,7 +172,7 @@ struct pci_controller *find_hose_by_cfg_addr(void *cfg_addr)
 
 int pci_last_busno(void)
 {
-   struct pci_controller *hose = hose_head;
+   struct pci_controller *hose = pci_get_hose_head();
 
if (!hose)
return -1;
@@ -181,7 +191,7 @@ pci_dev_t pci_find_devices(struct pci_device_id *ids, 

Re: [U-Boot] [PATCH v3 3/7] pci: Make pci apis usable before relocation

2014-12-30 Thread Simon Glass
On 30 December 2014 at 07:53, Bin Meng bmeng...@gmail.com wrote:
 Introduce a gd-hose to save the pci hose in the early phase so that
 apis in drivers/pci/pci.c can be used before relocation. Architecture
 codes need assign a valid gd-hose in the early phase.

 Some variables are declared as static so change them to be either
 stack variable or global data member so that they can be used before
 relocation, except the 'indent' used by CONFIG_PCI_SCAN_SHOW which
 just affects some print format.

 Signed-off-by: Bin Meng bmeng...@gmail.com
 Acked-by: Simon Glass s...@chromium.org

 ---

 Changes in v3: None
 Changes in v2:
 - New patch to make pci apis usable before relocation

  arch/x86/cpu/pci.c |  8 
  arch/x86/include/asm/global_data.h |  1 -
  arch/x86/include/asm/pci.h |  2 +-
  drivers/pci/pci.c  | 25 +
  include/asm-generic/global_data.h  |  6 ++
  5 files changed, 28 insertions(+), 14 deletions(-)

Applied to u-boot-x86/next, thanks!
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot