Root/target/linux/cns3xxx/patches-3.3/055-cns3xxx_pci_iospace_init.patch

1--- a/arch/arm/mach-cns3xxx/cns3420vb.c
2+++ b/arch/arm/mach-cns3xxx/cns3420vb.c
3@@ -32,6 +32,7 @@
4 #include <asm/mach/time.h>
5 #include <mach/cns3xxx.h>
6 #include <mach/irqs.h>
7+#include <mach/platform.h>
8 #include "core.h"
9 #include "devices.h"
10 
11@@ -199,6 +200,8 @@ static void __init cns3420_init(void)
12     cns3xxx_ahci_init();
13     cns3xxx_sdhci_init();
14 
15+ cns3xxx_pcie_init(0x3);
16+
17     pm_power_off = cns3xxx_power_off;
18 }
19 
20--- a/arch/arm/mach-cns3xxx/core.h
21+++ b/arch/arm/mach-cns3xxx/core.h
22@@ -12,6 +12,8 @@
23 #define __CNS3XXX_CORE_H
24 
25 extern struct sys_timer cns3xxx_timer;
26+extern int cns3xxx_pcie_init(u8 bitmap);
27+extern void cns3xxx_pcie_iotable_init(u8 bitmap);
28 
29 #ifdef CONFIG_CACHE_L2X0
30 void __init cns3xxx_l2x0_init(void);
31--- a/arch/arm/mach-cns3xxx/pcie.c
32+++ b/arch/arm/mach-cns3xxx/pcie.c
33@@ -365,7 +365,23 @@ static int cns3xxx_pcie_abort_handler(un
34     return 0;
35 }
36 
37-static int __init cns3xxx_pcie_init(void)
38+void __init cns3xxx_pcie_iotable_init(u8 bitmap)
39+{
40+ static int _iotable_init = 0;
41+ int i;
42+
43+ bitmap &= ~_iotable_init;
44+ for (i = 0; i < ARRAY_SIZE(cns3xxx_pcie); i++) {
45+ if (!(bitmap & (1 << i)))
46+ continue;
47+
48+ iotable_init(cns3xxx_pcie[i].cfg_bases,
49+ ARRAY_SIZE(cns3xxx_pcie[i].cfg_bases));
50+ }
51+ _iotable_init |= bitmap;
52+}
53+
54+int __init cns3xxx_pcie_init(u8 bitmap)
55 {
56     int i;
57 
58@@ -375,9 +391,11 @@ static int __init cns3xxx_pcie_init(void
59     hook_fault_code(16 + 6, cns3xxx_pcie_abort_handler, SIGBUS, 0,
60             "imprecise external abort");
61 
62+ cns3xxx_pcie_iotable_init(bitmap);
63     for (i = 0; i < ARRAY_SIZE(cns3xxx_pcie); i++) {
64- iotable_init(cns3xxx_pcie[i].cfg_bases,
65- ARRAY_SIZE(cns3xxx_pcie[i].cfg_bases));
66+ if (!(bitmap & (1 << i)))
67+ continue;
68+
69         cns3xxx_pcie_check_link(&cns3xxx_pcie[i]);
70         cns3xxx_pcie_hw_init(&cns3xxx_pcie[i]);
71         pci_common_init(&cns3xxx_pcie[i].hw_pci);
72@@ -387,4 +405,3 @@ static int __init cns3xxx_pcie_init(void
73 
74     return 0;
75 }
76-device_initcall(cns3xxx_pcie_init);
77

Archive Download this file



interactive