diff options
Diffstat (limited to 'arch/arm/mach-kirkwood')
-rw-r--r-- | arch/arm/mach-kirkwood/addr-map.c | 8 | ||||
-rw-r--r-- | arch/arm/mach-kirkwood/common.c | 84 | ||||
-rw-r--r-- | arch/arm/mach-kirkwood/common.h | 7 | ||||
-rw-r--r-- | arch/arm/mach-kirkwood/db88f6281-bp-setup.c | 1 | ||||
-rw-r--r-- | arch/arm/mach-kirkwood/include/mach/irqs.h | 1 | ||||
-rw-r--r-- | arch/arm/mach-kirkwood/include/mach/kirkwood.h | 14 | ||||
-rw-r--r-- | arch/arm/mach-kirkwood/include/mach/timex.h | 1 | ||||
-rw-r--r-- | arch/arm/mach-kirkwood/pcie.c | 6 | ||||
-rw-r--r-- | arch/arm/mach-kirkwood/rd88f6281-setup.c | 1 |
9 files changed, 97 insertions, 26 deletions
diff --git a/arch/arm/mach-kirkwood/addr-map.c b/arch/arm/mach-kirkwood/addr-map.c index c79f492072f9..5db4f0bbe5ee 100644 --- a/arch/arm/mach-kirkwood/addr-map.c +++ b/arch/arm/mach-kirkwood/addr-map.c | |||
@@ -48,6 +48,7 @@ | |||
48 | 48 | ||
49 | 49 | ||
50 | struct mbus_dram_target_info kirkwood_mbus_dram_info; | 50 | struct mbus_dram_target_info kirkwood_mbus_dram_info; |
51 | static int __initdata win_alloc_count; | ||
51 | 52 | ||
52 | static int __init cpu_win_can_remap(int win) | 53 | static int __init cpu_win_can_remap(int win) |
53 | { | 54 | { |
@@ -111,6 +112,8 @@ void __init kirkwood_setup_cpu_mbus(void) | |||
111 | setup_cpu_win(2, KIRKWOOD_NAND_MEM_PHYS_BASE, KIRKWOOD_NAND_MEM_SIZE, | 112 | setup_cpu_win(2, KIRKWOOD_NAND_MEM_PHYS_BASE, KIRKWOOD_NAND_MEM_SIZE, |
112 | TARGET_DEV_BUS, ATTR_DEV_NAND, -1); | 113 | TARGET_DEV_BUS, ATTR_DEV_NAND, -1); |
113 | 114 | ||
115 | win_alloc_count = 3; | ||
116 | |||
114 | /* | 117 | /* |
115 | * Setup MBUS dram target info. | 118 | * Setup MBUS dram target info. |
116 | */ | 119 | */ |
@@ -137,3 +140,8 @@ void __init kirkwood_setup_cpu_mbus(void) | |||
137 | } | 140 | } |
138 | kirkwood_mbus_dram_info.num_cs = cs; | 141 | kirkwood_mbus_dram_info.num_cs = cs; |
139 | } | 142 | } |
143 | |||
144 | void __init kirkwood_setup_sram_win(u32 base, u32 size) | ||
145 | { | ||
146 | setup_cpu_win(win_alloc_count++, base, size, 0x03, 0x00, -1); | ||
147 | } | ||
diff --git a/arch/arm/mach-kirkwood/common.c b/arch/arm/mach-kirkwood/common.c index 189f16f3619d..85cad05d8c5b 100644 --- a/arch/arm/mach-kirkwood/common.c +++ b/arch/arm/mach-kirkwood/common.c | |||
@@ -98,7 +98,6 @@ void __init kirkwood_ehci_init(void) | |||
98 | * GE00 | 98 | * GE00 |
99 | ****************************************************************************/ | 99 | ****************************************************************************/ |
100 | struct mv643xx_eth_shared_platform_data kirkwood_ge00_shared_data = { | 100 | struct mv643xx_eth_shared_platform_data kirkwood_ge00_shared_data = { |
101 | .t_clk = KIRKWOOD_TCLK, | ||
102 | .dram = &kirkwood_mbus_dram_info, | 101 | .dram = &kirkwood_mbus_dram_info, |
103 | }; | 102 | }; |
104 | 103 | ||
@@ -108,6 +107,11 @@ static struct resource kirkwood_ge00_shared_resources[] = { | |||
108 | .start = GE00_PHYS_BASE + 0x2000, | 107 | .start = GE00_PHYS_BASE + 0x2000, |
109 | .end = GE00_PHYS_BASE + 0x3fff, | 108 | .end = GE00_PHYS_BASE + 0x3fff, |
110 | .flags = IORESOURCE_MEM, | 109 | .flags = IORESOURCE_MEM, |
110 | }, { | ||
111 | .name = "ge00 err irq", | ||
112 | .start = IRQ_KIRKWOOD_GE00_ERR, | ||
113 | .end = IRQ_KIRKWOOD_GE00_ERR, | ||
114 | .flags = IORESOURCE_IRQ, | ||
111 | }, | 115 | }, |
112 | }; | 116 | }; |
113 | 117 | ||
@@ -117,7 +121,7 @@ static struct platform_device kirkwood_ge00_shared = { | |||
117 | .dev = { | 121 | .dev = { |
118 | .platform_data = &kirkwood_ge00_shared_data, | 122 | .platform_data = &kirkwood_ge00_shared_data, |
119 | }, | 123 | }, |
120 | .num_resources = 1, | 124 | .num_resources = ARRAY_SIZE(kirkwood_ge00_shared_resources), |
121 | .resource = kirkwood_ge00_shared_resources, | 125 | .resource = kirkwood_ge00_shared_resources, |
122 | }; | 126 | }; |
123 | 127 | ||
@@ -201,7 +205,6 @@ void __init kirkwood_sata_init(struct mv_sata_platform_data *sata_data) | |||
201 | * SPI | 205 | * SPI |
202 | ****************************************************************************/ | 206 | ****************************************************************************/ |
203 | static struct orion_spi_info kirkwood_spi_plat_data = { | 207 | static struct orion_spi_info kirkwood_spi_plat_data = { |
204 | .tclk = KIRKWOOD_TCLK, | ||
205 | }; | 208 | }; |
206 | 209 | ||
207 | static struct resource kirkwood_spi_resources[] = { | 210 | static struct resource kirkwood_spi_resources[] = { |
@@ -239,7 +242,7 @@ static struct plat_serial8250_port kirkwood_uart0_data[] = { | |||
239 | .flags = UPF_SKIP_TEST | UPF_BOOT_AUTOCONF, | 242 | .flags = UPF_SKIP_TEST | UPF_BOOT_AUTOCONF, |
240 | .iotype = UPIO_MEM, | 243 | .iotype = UPIO_MEM, |
241 | .regshift = 2, | 244 | .regshift = 2, |
242 | .uartclk = KIRKWOOD_TCLK, | 245 | .uartclk = 0, |
243 | }, { | 246 | }, { |
244 | }, | 247 | }, |
245 | }; | 248 | }; |
@@ -283,7 +286,7 @@ static struct plat_serial8250_port kirkwood_uart1_data[] = { | |||
283 | .flags = UPF_SKIP_TEST | UPF_BOOT_AUTOCONF, | 286 | .flags = UPF_SKIP_TEST | UPF_BOOT_AUTOCONF, |
284 | .iotype = UPIO_MEM, | 287 | .iotype = UPIO_MEM, |
285 | .regshift = 2, | 288 | .regshift = 2, |
286 | .uartclk = KIRKWOOD_TCLK, | 289 | .uartclk = 0, |
287 | }, { | 290 | }, { |
288 | }, | 291 | }, |
289 | }; | 292 | }; |
@@ -525,9 +528,23 @@ void __init kirkwood_xor1_init(void) | |||
525 | /***************************************************************************** | 528 | /***************************************************************************** |
526 | * Time handling | 529 | * Time handling |
527 | ****************************************************************************/ | 530 | ****************************************************************************/ |
531 | int kirkwood_tclk; | ||
532 | |||
533 | int __init kirkwood_find_tclk(void) | ||
534 | { | ||
535 | u32 dev, rev; | ||
536 | |||
537 | kirkwood_pcie_id(&dev, &rev); | ||
538 | if (dev == MV88F6281_DEV_ID && rev == MV88F6281_REV_A0) | ||
539 | return 200000000; | ||
540 | |||
541 | return 166666667; | ||
542 | } | ||
543 | |||
528 | static void kirkwood_timer_init(void) | 544 | static void kirkwood_timer_init(void) |
529 | { | 545 | { |
530 | orion_time_init(IRQ_KIRKWOOD_BRIDGE, KIRKWOOD_TCLK); | 546 | kirkwood_tclk = kirkwood_find_tclk(); |
547 | orion_time_init(IRQ_KIRKWOOD_BRIDGE, kirkwood_tclk); | ||
531 | } | 548 | } |
532 | 549 | ||
533 | struct sys_timer kirkwood_timer = { | 550 | struct sys_timer kirkwood_timer = { |
@@ -538,33 +555,62 @@ struct sys_timer kirkwood_timer = { | |||
538 | /***************************************************************************** | 555 | /***************************************************************************** |
539 | * General | 556 | * General |
540 | ****************************************************************************/ | 557 | ****************************************************************************/ |
558 | /* | ||
559 | * Identify device ID and revision. | ||
560 | */ | ||
541 | static char * __init kirkwood_id(void) | 561 | static char * __init kirkwood_id(void) |
542 | { | 562 | { |
543 | switch (readl(DEVICE_ID) & 0x3) { | 563 | u32 dev, rev; |
544 | case 0: | 564 | |
545 | return "88F6180"; | 565 | kirkwood_pcie_id(&dev, &rev); |
546 | case 1: | 566 | |
547 | return "88F6192"; | 567 | if (dev == MV88F6281_DEV_ID) { |
548 | case 2: | 568 | if (rev == MV88F6281_REV_Z0) |
549 | return "88F6281"; | 569 | return "MV88F6281-Z0"; |
570 | else if (rev == MV88F6281_REV_A0) | ||
571 | return "MV88F6281-A0"; | ||
572 | else | ||
573 | return "MV88F6281-Rev-Unsupported"; | ||
574 | } else if (dev == MV88F6192_DEV_ID) { | ||
575 | if (rev == MV88F6192_REV_Z0) | ||
576 | return "MV88F6192-Z0"; | ||
577 | else if (rev == MV88F6192_REV_A0) | ||
578 | return "MV88F6192-A0"; | ||
579 | else | ||
580 | return "MV88F6192-Rev-Unsupported"; | ||
581 | } else if (dev == MV88F6180_DEV_ID) { | ||
582 | if (rev == MV88F6180_REV_A0) | ||
583 | return "MV88F6180-Rev-A0"; | ||
584 | else | ||
585 | return "MV88F6180-Rev-Unsupported"; | ||
586 | } else { | ||
587 | return "Device-Unknown"; | ||
550 | } | 588 | } |
551 | |||
552 | return "unknown 88F6000 variant"; | ||
553 | } | 589 | } |
554 | 590 | ||
555 | static int __init is_l2_writethrough(void) | 591 | static void __init kirkwood_l2_init(void) |
556 | { | 592 | { |
557 | return !!(readl(L2_CONFIG_REG) & L2_WRITETHROUGH); | 593 | #ifdef CONFIG_CACHE_FEROCEON_L2_WRITETHROUGH |
594 | writel(readl(L2_CONFIG_REG) | L2_WRITETHROUGH, L2_CONFIG_REG); | ||
595 | feroceon_l2_init(1); | ||
596 | #else | ||
597 | writel(readl(L2_CONFIG_REG) & ~L2_WRITETHROUGH, L2_CONFIG_REG); | ||
598 | feroceon_l2_init(0); | ||
599 | #endif | ||
558 | } | 600 | } |
559 | 601 | ||
560 | void __init kirkwood_init(void) | 602 | void __init kirkwood_init(void) |
561 | { | 603 | { |
562 | printk(KERN_INFO "Kirkwood: %s, TCLK=%d.\n", | 604 | printk(KERN_INFO "Kirkwood: %s, TCLK=%d.\n", |
563 | kirkwood_id(), KIRKWOOD_TCLK); | 605 | kirkwood_id(), kirkwood_tclk); |
606 | kirkwood_ge00_shared_data.t_clk = kirkwood_tclk; | ||
607 | kirkwood_spi_plat_data.tclk = kirkwood_tclk; | ||
608 | kirkwood_uart0_data[0].uartclk = kirkwood_tclk; | ||
609 | kirkwood_uart1_data[0].uartclk = kirkwood_tclk; | ||
564 | 610 | ||
565 | kirkwood_setup_cpu_mbus(); | 611 | kirkwood_setup_cpu_mbus(); |
566 | 612 | ||
567 | #ifdef CONFIG_CACHE_FEROCEON_L2 | 613 | #ifdef CONFIG_CACHE_FEROCEON_L2 |
568 | feroceon_l2_init(is_l2_writethrough()); | 614 | kirkwood_l2_init(); |
569 | #endif | 615 | #endif |
570 | } | 616 | } |
diff --git a/arch/arm/mach-kirkwood/common.h b/arch/arm/mach-kirkwood/common.h index 69cd113af03a..8fa0f6a27635 100644 --- a/arch/arm/mach-kirkwood/common.h +++ b/arch/arm/mach-kirkwood/common.h | |||
@@ -23,10 +23,9 @@ void kirkwood_init_irq(void); | |||
23 | 23 | ||
24 | extern struct mbus_dram_target_info kirkwood_mbus_dram_info; | 24 | extern struct mbus_dram_target_info kirkwood_mbus_dram_info; |
25 | void kirkwood_setup_cpu_mbus(void); | 25 | void kirkwood_setup_cpu_mbus(void); |
26 | void kirkwood_setup_pcie_io_win(int window, u32 base, u32 size, | 26 | void kirkwood_setup_sram_win(u32 base, u32 size); |
27 | int maj, int min); | 27 | |
28 | void kirkwood_setup_pcie_mem_win(int window, u32 base, u32 size, | 28 | void kirkwood_pcie_id(u32 *dev, u32 *rev); |
29 | int maj, int min); | ||
30 | 29 | ||
31 | void kirkwood_ehci_init(void); | 30 | void kirkwood_ehci_init(void); |
32 | void kirkwood_ge00_init(struct mv643xx_eth_platform_data *eth_data); | 31 | void kirkwood_ge00_init(struct mv643xx_eth_platform_data *eth_data); |
diff --git a/arch/arm/mach-kirkwood/db88f6281-bp-setup.c b/arch/arm/mach-kirkwood/db88f6281-bp-setup.c index 610fb24d8ae2..89d746d13fda 100644 --- a/arch/arm/mach-kirkwood/db88f6281-bp-setup.c +++ b/arch/arm/mach-kirkwood/db88f6281-bp-setup.c | |||
@@ -44,7 +44,6 @@ static void __init db88f6281_init(void) | |||
44 | kirkwood_rtc_init(); | 44 | kirkwood_rtc_init(); |
45 | kirkwood_sata_init(&db88f6281_sata_data); | 45 | kirkwood_sata_init(&db88f6281_sata_data); |
46 | kirkwood_uart0_init(); | 46 | kirkwood_uart0_init(); |
47 | kirkwood_uart1_init(); | ||
48 | } | 47 | } |
49 | 48 | ||
50 | static int __init db88f6281_pci_init(void) | 49 | static int __init db88f6281_pci_init(void) |
diff --git a/arch/arm/mach-kirkwood/include/mach/irqs.h b/arch/arm/mach-kirkwood/include/mach/irqs.h index 6fd05838c72d..ffab89f21c11 100644 --- a/arch/arm/mach-kirkwood/include/mach/irqs.h +++ b/arch/arm/mach-kirkwood/include/mach/irqs.h | |||
@@ -50,6 +50,7 @@ | |||
50 | #define IRQ_KIRKWOOD_GPIO_HIGH_0_7 39 | 50 | #define IRQ_KIRKWOOD_GPIO_HIGH_0_7 39 |
51 | #define IRQ_KIRKWOOD_GPIO_HIGH_8_15 40 | 51 | #define IRQ_KIRKWOOD_GPIO_HIGH_8_15 40 |
52 | #define IRQ_KIRKWOOD_GPIO_HIGH_16_23 41 | 52 | #define IRQ_KIRKWOOD_GPIO_HIGH_16_23 41 |
53 | #define IRQ_KIRKWOOD_GE00_ERR 46 | ||
53 | 54 | ||
54 | /* | 55 | /* |
55 | * KIRKWOOD General Purpose Pins | 56 | * KIRKWOOD General Purpose Pins |
diff --git a/arch/arm/mach-kirkwood/include/mach/kirkwood.h b/arch/arm/mach-kirkwood/include/mach/kirkwood.h index 5c69992295e8..eae42406fd86 100644 --- a/arch/arm/mach-kirkwood/include/mach/kirkwood.h +++ b/arch/arm/mach-kirkwood/include/mach/kirkwood.h | |||
@@ -68,6 +68,20 @@ | |||
68 | #define L2_WRITETHROUGH 0x00000010 | 68 | #define L2_WRITETHROUGH 0x00000010 |
69 | 69 | ||
70 | /* | 70 | /* |
71 | * Supported devices and revisions. | ||
72 | */ | ||
73 | #define MV88F6281_DEV_ID 0x6281 | ||
74 | #define MV88F6281_REV_Z0 0 | ||
75 | #define MV88F6281_REV_A0 2 | ||
76 | |||
77 | #define MV88F6192_DEV_ID 0x6192 | ||
78 | #define MV88F6192_REV_Z0 0 | ||
79 | #define MV88F6192_REV_A0 2 | ||
80 | |||
81 | #define MV88F6180_DEV_ID 0x6180 | ||
82 | #define MV88F6180_REV_A0 2 | ||
83 | |||
84 | /* | ||
71 | * Register Map | 85 | * Register Map |
72 | */ | 86 | */ |
73 | #define DDR_VIRT_BASE (KIRKWOOD_REGS_VIRT_BASE | 0x00000) | 87 | #define DDR_VIRT_BASE (KIRKWOOD_REGS_VIRT_BASE | 0x00000) |
diff --git a/arch/arm/mach-kirkwood/include/mach/timex.h b/arch/arm/mach-kirkwood/include/mach/timex.h index f77ef4a32c5f..c923cd169b9c 100644 --- a/arch/arm/mach-kirkwood/include/mach/timex.h +++ b/arch/arm/mach-kirkwood/include/mach/timex.h | |||
@@ -8,4 +8,3 @@ | |||
8 | 8 | ||
9 | #define CLOCK_TICK_RATE (100 * HZ) | 9 | #define CLOCK_TICK_RATE (100 * HZ) |
10 | 10 | ||
11 | #define KIRKWOOD_TCLK 166666667 | ||
diff --git a/arch/arm/mach-kirkwood/pcie.c b/arch/arm/mach-kirkwood/pcie.c index 2195fa31f6b7..f6b08f207c89 100644 --- a/arch/arm/mach-kirkwood/pcie.c +++ b/arch/arm/mach-kirkwood/pcie.c | |||
@@ -18,6 +18,12 @@ | |||
18 | 18 | ||
19 | #define PCIE_BASE ((void __iomem *)PCIE_VIRT_BASE) | 19 | #define PCIE_BASE ((void __iomem *)PCIE_VIRT_BASE) |
20 | 20 | ||
21 | void __init kirkwood_pcie_id(u32 *dev, u32 *rev) | ||
22 | { | ||
23 | *dev = orion_pcie_dev_id(PCIE_BASE); | ||
24 | *rev = orion_pcie_rev(PCIE_BASE); | ||
25 | } | ||
26 | |||
21 | static int pcie_valid_config(int bus, int dev) | 27 | static int pcie_valid_config(int bus, int dev) |
22 | { | 28 | { |
23 | /* | 29 | /* |
diff --git a/arch/arm/mach-kirkwood/rd88f6281-setup.c b/arch/arm/mach-kirkwood/rd88f6281-setup.c index d96487a0f18b..fb8990f9770d 100644 --- a/arch/arm/mach-kirkwood/rd88f6281-setup.c +++ b/arch/arm/mach-kirkwood/rd88f6281-setup.c | |||
@@ -90,7 +90,6 @@ static void __init rd88f6281_init(void) | |||
90 | kirkwood_rtc_init(); | 90 | kirkwood_rtc_init(); |
91 | kirkwood_sata_init(&rd88f6281_sata_data); | 91 | kirkwood_sata_init(&rd88f6281_sata_data); |
92 | kirkwood_uart0_init(); | 92 | kirkwood_uart0_init(); |
93 | kirkwood_uart1_init(); | ||
94 | 93 | ||
95 | platform_device_register(&rd88f6281_nand_flash); | 94 | platform_device_register(&rd88f6281_nand_flash); |
96 | } | 95 | } |