aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTakashi Yoshii <yoshii.takashi@renesas.com>2009-04-02 05:03:30 -0400
committerPaul Mundt <lethal@linux-sh.org>2009-04-04 11:50:52 -0400
commit68b42d1b548be1840aff7122fdebeb804daf0fa3 (patch)
treeb971d30d186a197eeabc18c150eee0496c4614ff
parent01ab10393c510342ec4ce85df11ccfa3df06bbb2 (diff)
sh: sh7785lcr: Map whole PCI address space.
PCI still doesn't work on sh7785lcr 29bit 256M map mode. On SH7785, PCI -> SHwy address translation is not base+offset but somewhat like base|offset (See HW Manual (rej09b0261) Fig. 13.11). So, you can't export CS2,3,4,5 by 256M at CS2 (results CS0,1,2,3 exported, I guess). There are two candidates. a) 128M@CS2 + 128M@CS4 b) 512M@CS0 Attached patch is B. It maps 512M Byte at 0 independently of memory size. It results CS0 to CS6 and perhaps some more being accessible from PCI. Tested on 7785lcr 29bit 128M map 7785lcr 29bit 256M map (NOT tested on 32bit) Signed-off-by: Takashi YOSHII <yoshii.takashi@renesas.com> Signed-off-by: Paul Mundt <lethal@linux-sh.org>
-rw-r--r--arch/sh/drivers/pci/ops-sh7785lcr.c9
-rw-r--r--arch/sh/drivers/pci/pci-sh7780.c16
2 files changed, 8 insertions, 17 deletions
diff --git a/arch/sh/drivers/pci/ops-sh7785lcr.c b/arch/sh/drivers/pci/ops-sh7785lcr.c
index b3bd68702059..e8b7446a7c2b 100644
--- a/arch/sh/drivers/pci/ops-sh7785lcr.c
+++ b/arch/sh/drivers/pci/ops-sh7785lcr.c
@@ -48,13 +48,8 @@ EXPORT_SYMBOL(board_pci_channels);
48 48
49static struct sh4_pci_address_map sh7785_pci_map = { 49static struct sh4_pci_address_map sh7785_pci_map = {
50 .window0 = { 50 .window0 = {
51 .base = SH7780_CS2_BASE_ADDR, 51 .base = SH7780_CS0_BASE_ADDR,
52 .size = 0x04000000, 52 .size = 0x20000000,
53 },
54
55 .window1 = {
56 .base = SH7780_CS3_BASE_ADDR,
57 .size = 0x04000000,
58 }, 53 },
59 54
60 .flags = SH4_PCIC_NO_RESET, 55 .flags = SH4_PCIC_NO_RESET,
diff --git a/arch/sh/drivers/pci/pci-sh7780.c b/arch/sh/drivers/pci/pci-sh7780.c
index 773d575a04b9..bae6a2cf047d 100644
--- a/arch/sh/drivers/pci/pci-sh7780.c
+++ b/arch/sh/drivers/pci/pci-sh7780.c
@@ -120,19 +120,15 @@ int __init sh7780_pcic_init(struct sh4_pci_address_map *map)
120 120
121 /* Set IO and Mem windows to local address 121 /* Set IO and Mem windows to local address
122 * Make PCI and local address the same for easy 1 to 1 mapping 122 * Make PCI and local address the same for easy 1 to 1 mapping
123 * Window0 = map->window0.size @ non-cached area base = SDRAM
124 * Window1 = map->window1.size @ cached area base = SDRAM
125 */ 123 */
126 word = (CONFIG_MEMORY_SIZE - 0x00100000) | 0x00000001; 124 pci_write_reg(map->window0.size - 0xfffff, SH4_PCILSR0);
127 pci_write_reg(word, SH4_PCILSR0); 125 pci_write_reg(map->window1.size - 0xfffff, SH4_PCILSR1);
128 pci_write_reg(0x00000001, SH4_PCILSR1);
129 /* Set the values on window 0 PCI config registers */ 126 /* Set the values on window 0 PCI config registers */
130 word = CONFIG_MEMORY_START | (CONFIG_MEMORY_SIZE - 0x01000000); 127 pci_write_reg(map->window0.base, SH4_PCILAR0);
131 pci_write_reg(word, SH4_PCILAR0); 128 pci_write_reg(map->window0.base, SH7780_PCIMBAR0);
132 pci_write_reg(word, SH7780_PCIMBAR0);
133 /* Set the values on window 1 PCI config registers */ 129 /* Set the values on window 1 PCI config registers */
134 pci_write_reg(0x00000000, SH4_PCILAR1); 130 pci_write_reg(map->window1.base, SH4_PCILAR1);
135 pci_write_reg(0x00000000, SH7780_PCIMBAR1); 131 pci_write_reg(map->window1.base, SH7780_PCIMBAR1);
136 132
137 /* Map IO space into PCI IO window 133 /* Map IO space into PCI IO window
138 * The IO window is 64K-PCIBIOS_MIN_IO in size 134 * The IO window is 64K-PCIBIOS_MIN_IO in size