diff options
Diffstat (limited to 'arch/arm/mach-davinci')
22 files changed, 107 insertions, 110 deletions
diff --git a/arch/arm/mach-davinci/board-da830-evm.c b/arch/arm/mach-davinci/board-da830-evm.c index dc1afe5be20c..0031864e7f11 100644 --- a/arch/arm/mach-davinci/board-da830-evm.c +++ b/arch/arm/mach-davinci/board-da830-evm.c | |||
@@ -681,6 +681,7 @@ MACHINE_START(DAVINCI_DA830_EVM, "DaVinci DA830/OMAP-L137/AM17x EVM") | |||
681 | .init_irq = cp_intc_init, | 681 | .init_irq = cp_intc_init, |
682 | .timer = &davinci_timer, | 682 | .timer = &davinci_timer, |
683 | .init_machine = da830_evm_init, | 683 | .init_machine = da830_evm_init, |
684 | .init_late = davinci_init_late, | ||
684 | .dma_zone_size = SZ_128M, | 685 | .dma_zone_size = SZ_128M, |
685 | .restart = da8xx_restart, | 686 | .restart = da8xx_restart, |
686 | MACHINE_END | 687 | MACHINE_END |
diff --git a/arch/arm/mach-davinci/board-da850-evm.c b/arch/arm/mach-davinci/board-da850-evm.c index 09f61073c8d9..0149fb453be3 100644 --- a/arch/arm/mach-davinci/board-da850-evm.c +++ b/arch/arm/mach-davinci/board-da850-evm.c | |||
@@ -1411,6 +1411,7 @@ MACHINE_START(DAVINCI_DA850_EVM, "DaVinci DA850/OMAP-L138/AM18x EVM") | |||
1411 | .init_irq = cp_intc_init, | 1411 | .init_irq = cp_intc_init, |
1412 | .timer = &davinci_timer, | 1412 | .timer = &davinci_timer, |
1413 | .init_machine = da850_evm_init, | 1413 | .init_machine = da850_evm_init, |
1414 | .init_late = davinci_init_late, | ||
1414 | .dma_zone_size = SZ_128M, | 1415 | .dma_zone_size = SZ_128M, |
1415 | .restart = da8xx_restart, | 1416 | .restart = da8xx_restart, |
1416 | MACHINE_END | 1417 | MACHINE_END |
diff --git a/arch/arm/mach-davinci/board-dm355-evm.c b/arch/arm/mach-davinci/board-dm355-evm.c index 82ed753fb360..1c7b1f46a8f3 100644 --- a/arch/arm/mach-davinci/board-dm355-evm.c +++ b/arch/arm/mach-davinci/board-dm355-evm.c | |||
@@ -357,6 +357,7 @@ MACHINE_START(DAVINCI_DM355_EVM, "DaVinci DM355 EVM") | |||
357 | .init_irq = davinci_irq_init, | 357 | .init_irq = davinci_irq_init, |
358 | .timer = &davinci_timer, | 358 | .timer = &davinci_timer, |
359 | .init_machine = dm355_evm_init, | 359 | .init_machine = dm355_evm_init, |
360 | .init_late = davinci_init_late, | ||
360 | .dma_zone_size = SZ_128M, | 361 | .dma_zone_size = SZ_128M, |
361 | .restart = davinci_restart, | 362 | .restart = davinci_restart, |
362 | MACHINE_END | 363 | MACHINE_END |
diff --git a/arch/arm/mach-davinci/board-dm355-leopard.c b/arch/arm/mach-davinci/board-dm355-leopard.c index d74a8b3445fb..8e7703213b08 100644 --- a/arch/arm/mach-davinci/board-dm355-leopard.c +++ b/arch/arm/mach-davinci/board-dm355-leopard.c | |||
@@ -276,6 +276,7 @@ MACHINE_START(DM355_LEOPARD, "DaVinci DM355 leopard") | |||
276 | .init_irq = davinci_irq_init, | 276 | .init_irq = davinci_irq_init, |
277 | .timer = &davinci_timer, | 277 | .timer = &davinci_timer, |
278 | .init_machine = dm355_leopard_init, | 278 | .init_machine = dm355_leopard_init, |
279 | .init_late = davinci_init_late, | ||
279 | .dma_zone_size = SZ_128M, | 280 | .dma_zone_size = SZ_128M, |
280 | .restart = davinci_restart, | 281 | .restart = davinci_restart, |
281 | MACHINE_END | 282 | MACHINE_END |
diff --git a/arch/arm/mach-davinci/board-dm365-evm.c b/arch/arm/mach-davinci/board-dm365-evm.c index 5bce2b83bb4f..688a9c556dc9 100644 --- a/arch/arm/mach-davinci/board-dm365-evm.c +++ b/arch/arm/mach-davinci/board-dm365-evm.c | |||
@@ -618,6 +618,7 @@ MACHINE_START(DAVINCI_DM365_EVM, "DaVinci DM365 EVM") | |||
618 | .init_irq = davinci_irq_init, | 618 | .init_irq = davinci_irq_init, |
619 | .timer = &davinci_timer, | 619 | .timer = &davinci_timer, |
620 | .init_machine = dm365_evm_init, | 620 | .init_machine = dm365_evm_init, |
621 | .init_late = davinci_init_late, | ||
621 | .dma_zone_size = SZ_128M, | 622 | .dma_zone_size = SZ_128M, |
622 | .restart = davinci_restart, | 623 | .restart = davinci_restart, |
623 | MACHINE_END | 624 | MACHINE_END |
diff --git a/arch/arm/mach-davinci/board-dm644x-evm.c b/arch/arm/mach-davinci/board-dm644x-evm.c index 3683306e0245..d34ed55912b2 100644 --- a/arch/arm/mach-davinci/board-dm644x-evm.c +++ b/arch/arm/mach-davinci/board-dm644x-evm.c | |||
@@ -825,6 +825,7 @@ MACHINE_START(DAVINCI_EVM, "DaVinci DM644x EVM") | |||
825 | .init_irq = davinci_irq_init, | 825 | .init_irq = davinci_irq_init, |
826 | .timer = &davinci_timer, | 826 | .timer = &davinci_timer, |
827 | .init_machine = davinci_evm_init, | 827 | .init_machine = davinci_evm_init, |
828 | .init_late = davinci_init_late, | ||
828 | .dma_zone_size = SZ_128M, | 829 | .dma_zone_size = SZ_128M, |
829 | .restart = davinci_restart, | 830 | .restart = davinci_restart, |
830 | MACHINE_END | 831 | MACHINE_END |
diff --git a/arch/arm/mach-davinci/board-dm646x-evm.c b/arch/arm/mach-davinci/board-dm646x-evm.c index d72ab948d630..958679a20e13 100644 --- a/arch/arm/mach-davinci/board-dm646x-evm.c +++ b/arch/arm/mach-davinci/board-dm646x-evm.c | |||
@@ -788,6 +788,7 @@ MACHINE_START(DAVINCI_DM6467_EVM, "DaVinci DM646x EVM") | |||
788 | .init_irq = davinci_irq_init, | 788 | .init_irq = davinci_irq_init, |
789 | .timer = &davinci_timer, | 789 | .timer = &davinci_timer, |
790 | .init_machine = evm_init, | 790 | .init_machine = evm_init, |
791 | .init_late = davinci_init_late, | ||
791 | .dma_zone_size = SZ_128M, | 792 | .dma_zone_size = SZ_128M, |
792 | .restart = davinci_restart, | 793 | .restart = davinci_restart, |
793 | MACHINE_END | 794 | MACHINE_END |
@@ -798,6 +799,7 @@ MACHINE_START(DAVINCI_DM6467TEVM, "DaVinci DM6467T EVM") | |||
798 | .init_irq = davinci_irq_init, | 799 | .init_irq = davinci_irq_init, |
799 | .timer = &davinci_timer, | 800 | .timer = &davinci_timer, |
800 | .init_machine = evm_init, | 801 | .init_machine = evm_init, |
802 | .init_late = davinci_init_late, | ||
801 | .dma_zone_size = SZ_128M, | 803 | .dma_zone_size = SZ_128M, |
802 | .restart = davinci_restart, | 804 | .restart = davinci_restart, |
803 | MACHINE_END | 805 | MACHINE_END |
diff --git a/arch/arm/mach-davinci/board-mityomapl138.c b/arch/arm/mach-davinci/board-mityomapl138.c index 672d820e2aa4..beecde3a1d2f 100644 --- a/arch/arm/mach-davinci/board-mityomapl138.c +++ b/arch/arm/mach-davinci/board-mityomapl138.c | |||
@@ -572,6 +572,7 @@ MACHINE_START(MITYOMAPL138, "MityDSP-L138/MityARM-1808") | |||
572 | .init_irq = cp_intc_init, | 572 | .init_irq = cp_intc_init, |
573 | .timer = &davinci_timer, | 573 | .timer = &davinci_timer, |
574 | .init_machine = mityomapl138_init, | 574 | .init_machine = mityomapl138_init, |
575 | .init_late = davinci_init_late, | ||
575 | .dma_zone_size = SZ_128M, | 576 | .dma_zone_size = SZ_128M, |
576 | .restart = da8xx_restart, | 577 | .restart = da8xx_restart, |
577 | MACHINE_END | 578 | MACHINE_END |
diff --git a/arch/arm/mach-davinci/board-neuros-osd2.c b/arch/arm/mach-davinci/board-neuros-osd2.c index a772bb45570a..5de69f2fcca9 100644 --- a/arch/arm/mach-davinci/board-neuros-osd2.c +++ b/arch/arm/mach-davinci/board-neuros-osd2.c | |||
@@ -278,6 +278,7 @@ MACHINE_START(NEUROS_OSD2, "Neuros OSD2") | |||
278 | .init_irq = davinci_irq_init, | 278 | .init_irq = davinci_irq_init, |
279 | .timer = &davinci_timer, | 279 | .timer = &davinci_timer, |
280 | .init_machine = davinci_ntosd2_init, | 280 | .init_machine = davinci_ntosd2_init, |
281 | .init_late = davinci_init_late, | ||
281 | .dma_zone_size = SZ_128M, | 282 | .dma_zone_size = SZ_128M, |
282 | .restart = davinci_restart, | 283 | .restart = davinci_restart, |
283 | MACHINE_END | 284 | MACHINE_END |
diff --git a/arch/arm/mach-davinci/board-omapl138-hawk.c b/arch/arm/mach-davinci/board-omapl138-hawk.c index 45e815760a27..dc1208e9e664 100644 --- a/arch/arm/mach-davinci/board-omapl138-hawk.c +++ b/arch/arm/mach-davinci/board-omapl138-hawk.c | |||
@@ -343,6 +343,7 @@ MACHINE_START(OMAPL138_HAWKBOARD, "AM18x/OMAP-L138 Hawkboard") | |||
343 | .init_irq = cp_intc_init, | 343 | .init_irq = cp_intc_init, |
344 | .timer = &davinci_timer, | 344 | .timer = &davinci_timer, |
345 | .init_machine = omapl138_hawk_init, | 345 | .init_machine = omapl138_hawk_init, |
346 | .init_late = davinci_init_late, | ||
346 | .dma_zone_size = SZ_128M, | 347 | .dma_zone_size = SZ_128M, |
347 | .restart = da8xx_restart, | 348 | .restart = da8xx_restart, |
348 | MACHINE_END | 349 | MACHINE_END |
diff --git a/arch/arm/mach-davinci/board-sffsdr.c b/arch/arm/mach-davinci/board-sffsdr.c index 76e675096104..9078acf94bac 100644 --- a/arch/arm/mach-davinci/board-sffsdr.c +++ b/arch/arm/mach-davinci/board-sffsdr.c | |||
@@ -157,6 +157,7 @@ MACHINE_START(SFFSDR, "Lyrtech SFFSDR") | |||
157 | .init_irq = davinci_irq_init, | 157 | .init_irq = davinci_irq_init, |
158 | .timer = &davinci_timer, | 158 | .timer = &davinci_timer, |
159 | .init_machine = davinci_sffsdr_init, | 159 | .init_machine = davinci_sffsdr_init, |
160 | .init_late = davinci_init_late, | ||
160 | .dma_zone_size = SZ_128M, | 161 | .dma_zone_size = SZ_128M, |
161 | .restart = davinci_restart, | 162 | .restart = davinci_restart, |
162 | MACHINE_END | 163 | MACHINE_END |
diff --git a/arch/arm/mach-davinci/board-tnetv107x-evm.c b/arch/arm/mach-davinci/board-tnetv107x-evm.c index 5f14e30b00d8..ac4e003ad863 100644 --- a/arch/arm/mach-davinci/board-tnetv107x-evm.c +++ b/arch/arm/mach-davinci/board-tnetv107x-evm.c | |||
@@ -282,6 +282,7 @@ MACHINE_START(TNETV107X, "TNETV107X EVM") | |||
282 | .init_irq = cp_intc_init, | 282 | .init_irq = cp_intc_init, |
283 | .timer = &davinci_timer, | 283 | .timer = &davinci_timer, |
284 | .init_machine = tnetv107x_evm_board_init, | 284 | .init_machine = tnetv107x_evm_board_init, |
285 | .init_late = davinci_init_late, | ||
285 | .dma_zone_size = SZ_128M, | 286 | .dma_zone_size = SZ_128M, |
286 | .restart = tnetv107x_restart, | 287 | .restart = tnetv107x_restart, |
287 | MACHINE_END | 288 | MACHINE_END |
diff --git a/arch/arm/mach-davinci/clock.c b/arch/arm/mach-davinci/clock.c index 008772e3b843..34668ead53c7 100644 --- a/arch/arm/mach-davinci/clock.c +++ b/arch/arm/mach-davinci/clock.c | |||
@@ -213,7 +213,7 @@ EXPORT_SYMBOL(clk_unregister); | |||
213 | /* | 213 | /* |
214 | * Disable any unused clocks left on by the bootloader | 214 | * Disable any unused clocks left on by the bootloader |
215 | */ | 215 | */ |
216 | static int __init clk_disable_unused(void) | 216 | int __init davinci_clk_disable_unused(void) |
217 | { | 217 | { |
218 | struct clk *ck; | 218 | struct clk *ck; |
219 | 219 | ||
@@ -237,7 +237,6 @@ static int __init clk_disable_unused(void) | |||
237 | 237 | ||
238 | return 0; | 238 | return 0; |
239 | } | 239 | } |
240 | late_initcall(clk_disable_unused); | ||
241 | #endif | 240 | #endif |
242 | 241 | ||
243 | static unsigned long clk_sysclk_recalc(struct clk *clk) | 242 | static unsigned long clk_sysclk_recalc(struct clk *clk) |
diff --git a/arch/arm/mach-davinci/common.c b/arch/arm/mach-davinci/common.c index cb9b2e47510c..64b0f65a8639 100644 --- a/arch/arm/mach-davinci/common.c +++ b/arch/arm/mach-davinci/common.c | |||
@@ -117,3 +117,10 @@ void __init davinci_common_init(struct davinci_soc_info *soc_info) | |||
117 | err: | 117 | err: |
118 | panic("davinci_common_init: SoC Initialization failed\n"); | 118 | panic("davinci_common_init: SoC Initialization failed\n"); |
119 | } | 119 | } |
120 | |||
121 | void __init davinci_init_late(void) | ||
122 | { | ||
123 | davinci_cpufreq_init(); | ||
124 | davinci_pm_init(); | ||
125 | davinci_clk_disable_unused(); | ||
126 | } | ||
diff --git a/arch/arm/mach-davinci/cpufreq.c b/arch/arm/mach-davinci/cpufreq.c index 031048fec9f5..4729eaab0f40 100644 --- a/arch/arm/mach-davinci/cpufreq.c +++ b/arch/arm/mach-davinci/cpufreq.c | |||
@@ -240,10 +240,9 @@ static struct platform_driver davinci_cpufreq_driver = { | |||
240 | .remove = __exit_p(davinci_cpufreq_remove), | 240 | .remove = __exit_p(davinci_cpufreq_remove), |
241 | }; | 241 | }; |
242 | 242 | ||
243 | static int __init davinci_cpufreq_init(void) | 243 | int __init davinci_cpufreq_init(void) |
244 | { | 244 | { |
245 | return platform_driver_probe(&davinci_cpufreq_driver, | 245 | return platform_driver_probe(&davinci_cpufreq_driver, |
246 | davinci_cpufreq_probe); | 246 | davinci_cpufreq_probe); |
247 | } | 247 | } |
248 | late_initcall(davinci_cpufreq_init); | ||
249 | 248 | ||
diff --git a/arch/arm/mach-davinci/dma.c b/arch/arm/mach-davinci/dma.c index 95ce019c9b98..a685e9706b7b 100644 --- a/arch/arm/mach-davinci/dma.c +++ b/arch/arm/mach-davinci/dma.c | |||
@@ -353,9 +353,10 @@ static int irq2ctlr(int irq) | |||
353 | *****************************************************************************/ | 353 | *****************************************************************************/ |
354 | static irqreturn_t dma_irq_handler(int irq, void *data) | 354 | static irqreturn_t dma_irq_handler(int irq, void *data) |
355 | { | 355 | { |
356 | int i; | ||
357 | int ctlr; | 356 | int ctlr; |
358 | unsigned int cnt = 0; | 357 | u32 sh_ier; |
358 | u32 sh_ipr; | ||
359 | u32 bank; | ||
359 | 360 | ||
360 | ctlr = irq2ctlr(irq); | 361 | ctlr = irq2ctlr(irq); |
361 | if (ctlr < 0) | 362 | if (ctlr < 0) |
@@ -363,41 +364,39 @@ static irqreturn_t dma_irq_handler(int irq, void *data) | |||
363 | 364 | ||
364 | dev_dbg(data, "dma_irq_handler\n"); | 365 | dev_dbg(data, "dma_irq_handler\n"); |
365 | 366 | ||
366 | if ((edma_shadow0_read_array(ctlr, SH_IPR, 0) == 0) && | 367 | sh_ipr = edma_shadow0_read_array(ctlr, SH_IPR, 0); |
367 | (edma_shadow0_read_array(ctlr, SH_IPR, 1) == 0)) | 368 | if (!sh_ipr) { |
368 | return IRQ_NONE; | 369 | sh_ipr = edma_shadow0_read_array(ctlr, SH_IPR, 1); |
370 | if (!sh_ipr) | ||
371 | return IRQ_NONE; | ||
372 | sh_ier = edma_shadow0_read_array(ctlr, SH_IER, 1); | ||
373 | bank = 1; | ||
374 | } else { | ||
375 | sh_ier = edma_shadow0_read_array(ctlr, SH_IER, 0); | ||
376 | bank = 0; | ||
377 | } | ||
369 | 378 | ||
370 | while (1) { | 379 | do { |
371 | int j; | 380 | u32 slot; |
372 | if (edma_shadow0_read_array(ctlr, SH_IPR, 0) & | 381 | u32 channel; |
373 | edma_shadow0_read_array(ctlr, SH_IER, 0)) | 382 | |
374 | j = 0; | 383 | dev_dbg(data, "IPR%d %08x\n", bank, sh_ipr); |
375 | else if (edma_shadow0_read_array(ctlr, SH_IPR, 1) & | 384 | |
376 | edma_shadow0_read_array(ctlr, SH_IER, 1)) | 385 | slot = __ffs(sh_ipr); |
377 | j = 1; | 386 | sh_ipr &= ~(BIT(slot)); |
378 | else | 387 | |
379 | break; | 388 | if (sh_ier & BIT(slot)) { |
380 | dev_dbg(data, "IPR%d %08x\n", j, | 389 | channel = (bank << 5) | slot; |
381 | edma_shadow0_read_array(ctlr, SH_IPR, j)); | 390 | /* Clear the corresponding IPR bits */ |
382 | for (i = 0; i < 32; i++) { | 391 | edma_shadow0_write_array(ctlr, SH_ICR, bank, |
383 | int k = (j << 5) + i; | 392 | BIT(slot)); |
384 | if ((edma_shadow0_read_array(ctlr, SH_IPR, j) & BIT(i)) | 393 | if (edma_cc[ctlr]->intr_data[channel].callback) |
385 | && (edma_shadow0_read_array(ctlr, | 394 | edma_cc[ctlr]->intr_data[channel].callback( |
386 | SH_IER, j) & BIT(i))) { | 395 | channel, DMA_COMPLETE, |
387 | /* Clear the corresponding IPR bits */ | 396 | edma_cc[ctlr]->intr_data[channel].data); |
388 | edma_shadow0_write_array(ctlr, SH_ICR, j, | ||
389 | BIT(i)); | ||
390 | if (edma_cc[ctlr]->intr_data[k].callback) | ||
391 | edma_cc[ctlr]->intr_data[k].callback( | ||
392 | k, DMA_COMPLETE, | ||
393 | edma_cc[ctlr]->intr_data[k]. | ||
394 | data); | ||
395 | } | ||
396 | } | 397 | } |
397 | cnt++; | 398 | } while (sh_ipr); |
398 | if (cnt > 10) | 399 | |
399 | break; | ||
400 | } | ||
401 | edma_shadow0_write(ctlr, SH_IEVAL, 1); | 400 | edma_shadow0_write(ctlr, SH_IEVAL, 1); |
402 | return IRQ_HANDLED; | 401 | return IRQ_HANDLED; |
403 | } | 402 | } |
diff --git a/arch/arm/mach-davinci/include/mach/common.h b/arch/arm/mach-davinci/include/mach/common.h index 5cd39a4e0c96..bdc4aa8e672a 100644 --- a/arch/arm/mach-davinci/include/mach/common.h +++ b/arch/arm/mach-davinci/include/mach/common.h | |||
@@ -84,6 +84,25 @@ extern struct davinci_soc_info davinci_soc_info; | |||
84 | extern void davinci_common_init(struct davinci_soc_info *soc_info); | 84 | extern void davinci_common_init(struct davinci_soc_info *soc_info); |
85 | extern void davinci_init_ide(void); | 85 | extern void davinci_init_ide(void); |
86 | void davinci_restart(char mode, const char *cmd); | 86 | void davinci_restart(char mode, const char *cmd); |
87 | void davinci_init_late(void); | ||
88 | |||
89 | #ifdef CONFIG_DAVINCI_RESET_CLOCKS | ||
90 | int davinci_clk_disable_unused(void); | ||
91 | #else | ||
92 | static inline int davinci_clk_disable_unused(void) { return 0; } | ||
93 | #endif | ||
94 | |||
95 | #ifdef CONFIG_CPU_FREQ | ||
96 | int davinci_cpufreq_init(void); | ||
97 | #else | ||
98 | static inline int davinci_cpufreq_init(void) { return 0; } | ||
99 | #endif | ||
100 | |||
101 | #ifdef CONFIG_SUSPEND | ||
102 | int davinci_pm_init(void); | ||
103 | #else | ||
104 | static inline int davinci_pm_init(void) { return 0; } | ||
105 | #endif | ||
87 | 106 | ||
88 | /* standard place to map on-chip SRAMs; they *may* support DMA */ | 107 | /* standard place to map on-chip SRAMs; they *may* support DMA */ |
89 | #define SRAM_VIRT 0xfffe0000 | 108 | #define SRAM_VIRT 0xfffe0000 |
diff --git a/arch/arm/mach-davinci/include/mach/debug-macro.S b/arch/arm/mach-davinci/include/mach/debug-macro.S index cf94552d5274..34290d14754b 100644 --- a/arch/arm/mach-davinci/include/mach/debug-macro.S +++ b/arch/arm/mach-davinci/include/mach/debug-macro.S | |||
@@ -22,46 +22,28 @@ | |||
22 | 22 | ||
23 | #define UART_SHIFT 2 | 23 | #define UART_SHIFT 2 |
24 | 24 | ||
25 | .pushsection .data | 25 | #if defined(CONFIG_DEBUG_DAVINCI_DMx_UART0) |
26 | davinci_uart_phys: .word 0 | 26 | #define UART_BASE DAVINCI_UART0_BASE |
27 | davinci_uart_virt: .word 0 | 27 | #elif defined(CONFIG_DEBUG_DAVINCI_DA8XX_UART0) |
28 | .popsection | 28 | #define UART_BASE DA8XX_UART0_BASE |
29 | 29 | #elif defined(CONFIG_DEBUG_DAVINCI_DA8XX_UART1) | |
30 | .macro addruart, rp, rv, tmp | 30 | #define UART_BASE DA8XX_UART1_BASE |
31 | 31 | #elif defined(CONFIG_DEBUG_DAVINCI_DA8XX_UART2) | |
32 | /* Use davinci_uart_phys/virt if already configured */ | 32 | #define UART_BASE DA8XX_UART2_BASE |
33 | 10: adr \rp, 99f @ get effective addr of 99f | 33 | #elif defined(CONFIG_DEBUG_DAVINCI_TNETV107X_UART1) |
34 | ldr \rv, [\rp] @ get absolute addr of 99f | 34 | #define UART_BASE TNETV107X_UART2_BASE |
35 | sub \rv, \rv, \rp @ offset between the two | 35 | #define UART_VIRTBASE TNETV107X_UART2_VIRT |
36 | ldr \rp, [\rp, #4] @ abs addr of omap_uart_phys | 36 | #else |
37 | sub \tmp, \rp, \rv @ make it effective | 37 | #error "Select a specifc port for DEBUG_LL" |
38 | ldr \rp, [\tmp, #0] @ davinci_uart_phys | 38 | #endif |
39 | ldr \rv, [\tmp, #4] @ davinci_uart_virt | ||
40 | cmp \rp, #0 @ is port configured? | ||
41 | cmpne \rv, #0 | ||
42 | bne 100f @ already configured | ||
43 | |||
44 | /* Check the debug UART address set in uncompress.h */ | ||
45 | and \rp, pc, #0xff000000 | ||
46 | ldr \rv, =DAVINCI_UART_INFO_OFS | ||
47 | add \rp, \rp, \rv | ||
48 | |||
49 | /* Copy uart phys address from decompressor uart info */ | ||
50 | ldr \rv, [\rp, #0] | ||
51 | str \rv, [\tmp, #0] | ||
52 | |||
53 | /* Copy uart virt address from decompressor uart info */ | ||
54 | ldr \rv, [\rp, #4] | ||
55 | str \rv, [\tmp, #4] | ||
56 | |||
57 | b 10b | ||
58 | 39 | ||
59 | .align | 40 | #ifndef UART_VIRTBASE |
60 | 99: .word . | 41 | #define UART_VIRTBASE IO_ADDRESS(UART_BASE) |
61 | .word davinci_uart_phys | 42 | #endif |
62 | .ltorg | ||
63 | 43 | ||
64 | 100: | 44 | .macro addruart, rp, rv, tmp |
45 | ldr \rp, =UART_BASE | ||
46 | ldr \rv, =UART_VIRTBASE | ||
65 | .endm | 47 | .endm |
66 | 48 | ||
67 | .macro senduart,rd,rx | 49 | .macro senduart,rd,rx |
diff --git a/arch/arm/mach-davinci/include/mach/hardware.h b/arch/arm/mach-davinci/include/mach/hardware.h index 2184691ebc2f..16bb42291d39 100644 --- a/arch/arm/mach-davinci/include/mach/hardware.h +++ b/arch/arm/mach-davinci/include/mach/hardware.h | |||
@@ -22,7 +22,7 @@ | |||
22 | /* | 22 | /* |
23 | * I/O mapping | 23 | * I/O mapping |
24 | */ | 24 | */ |
25 | #define IO_PHYS 0x01c00000UL | 25 | #define IO_PHYS UL(0x01c00000) |
26 | #define IO_OFFSET 0xfd000000 /* Virtual IO = 0xfec00000 */ | 26 | #define IO_OFFSET 0xfd000000 /* Virtual IO = 0xfec00000 */ |
27 | #define IO_SIZE 0x00400000 | 27 | #define IO_SIZE 0x00400000 |
28 | #define IO_VIRT (IO_PHYS + IO_OFFSET) | 28 | #define IO_VIRT (IO_PHYS + IO_OFFSET) |
diff --git a/arch/arm/mach-davinci/include/mach/serial.h b/arch/arm/mach-davinci/include/mach/serial.h index e347d88fef91..46b3cd11c3c2 100644 --- a/arch/arm/mach-davinci/include/mach/serial.h +++ b/arch/arm/mach-davinci/include/mach/serial.h | |||
@@ -15,16 +15,6 @@ | |||
15 | 15 | ||
16 | #include <mach/hardware.h> | 16 | #include <mach/hardware.h> |
17 | 17 | ||
18 | /* | ||
19 | * Stolen area that contains debug uart physical and virtual addresses. These | ||
20 | * addresses are filled in by the uncompress.h code, and are used by the debug | ||
21 | * macros in debug-macro.S. | ||
22 | * | ||
23 | * This area sits just below the page tables (see arch/arm/kernel/head.S). | ||
24 | * We define it as a relative offset from start of usable RAM. | ||
25 | */ | ||
26 | #define DAVINCI_UART_INFO_OFS 0x3ff8 | ||
27 | |||
28 | #define DAVINCI_UART0_BASE (IO_PHYS + 0x20000) | 18 | #define DAVINCI_UART0_BASE (IO_PHYS + 0x20000) |
29 | #define DAVINCI_UART1_BASE (IO_PHYS + 0x20400) | 19 | #define DAVINCI_UART1_BASE (IO_PHYS + 0x20400) |
30 | #define DAVINCI_UART2_BASE (IO_PHYS + 0x20800) | 20 | #define DAVINCI_UART2_BASE (IO_PHYS + 0x20800) |
diff --git a/arch/arm/mach-davinci/include/mach/uncompress.h b/arch/arm/mach-davinci/include/mach/uncompress.h index da2fb2c2155a..18cfd4977155 100644 --- a/arch/arm/mach-davinci/include/mach/uncompress.h +++ b/arch/arm/mach-davinci/include/mach/uncompress.h | |||
@@ -43,37 +43,27 @@ static inline void flush(void) | |||
43 | barrier(); | 43 | barrier(); |
44 | } | 44 | } |
45 | 45 | ||
46 | static inline void set_uart_info(u32 phys, void * __iomem virt) | 46 | static inline void set_uart_info(u32 phys) |
47 | { | 47 | { |
48 | /* | ||
49 | * Get address of some.bss variable and round it down | ||
50 | * a la CONFIG_AUTO_ZRELADDR. | ||
51 | */ | ||
52 | u32 ram_start = (u32)&uart & 0xf8000000; | ||
53 | u32 *uart_info = (u32 *)(ram_start + DAVINCI_UART_INFO_OFS); | ||
54 | |||
55 | uart = (u32 *)phys; | 48 | uart = (u32 *)phys; |
56 | uart_info[0] = phys; | ||
57 | uart_info[1] = (u32)virt; | ||
58 | } | 49 | } |
59 | 50 | ||
60 | #define _DEBUG_LL_ENTRY(machine, phys, virt) \ | 51 | #define _DEBUG_LL_ENTRY(machine, phys) \ |
61 | if (machine_is_##machine()) { \ | 52 | { \ |
62 | set_uart_info(phys, virt); \ | 53 | if (machine_is_##machine()) { \ |
63 | break; \ | 54 | set_uart_info(phys); \ |
55 | break; \ | ||
56 | } \ | ||
64 | } | 57 | } |
65 | 58 | ||
66 | #define DEBUG_LL_DAVINCI(machine, port) \ | 59 | #define DEBUG_LL_DAVINCI(machine, port) \ |
67 | _DEBUG_LL_ENTRY(machine, DAVINCI_UART##port##_BASE, \ | 60 | _DEBUG_LL_ENTRY(machine, DAVINCI_UART##port##_BASE) |
68 | IO_ADDRESS(DAVINCI_UART##port##_BASE)) | ||
69 | 61 | ||
70 | #define DEBUG_LL_DA8XX(machine, port) \ | 62 | #define DEBUG_LL_DA8XX(machine, port) \ |
71 | _DEBUG_LL_ENTRY(machine, DA8XX_UART##port##_BASE, \ | 63 | _DEBUG_LL_ENTRY(machine, DA8XX_UART##port##_BASE) |
72 | IO_ADDRESS(DA8XX_UART##port##_BASE)) | ||
73 | 64 | ||
74 | #define DEBUG_LL_TNETV107X(machine, port) \ | 65 | #define DEBUG_LL_TNETV107X(machine, port) \ |
75 | _DEBUG_LL_ENTRY(machine, TNETV107X_UART##port##_BASE, \ | 66 | _DEBUG_LL_ENTRY(machine, TNETV107X_UART##port##_BASE) |
76 | TNETV107X_UART##port##_VIRT) | ||
77 | 67 | ||
78 | static inline void __arch_decomp_setup(unsigned long arch_id) | 68 | static inline void __arch_decomp_setup(unsigned long arch_id) |
79 | { | 69 | { |
diff --git a/arch/arm/mach-davinci/pm.c b/arch/arm/mach-davinci/pm.c index 04c49f7543ef..eb8360b33aa9 100644 --- a/arch/arm/mach-davinci/pm.c +++ b/arch/arm/mach-davinci/pm.c | |||
@@ -152,8 +152,7 @@ static struct platform_driver davinci_pm_driver = { | |||
152 | .remove = __exit_p(davinci_pm_remove), | 152 | .remove = __exit_p(davinci_pm_remove), |
153 | }; | 153 | }; |
154 | 154 | ||
155 | static int __init davinci_pm_init(void) | 155 | int __init davinci_pm_init(void) |
156 | { | 156 | { |
157 | return platform_driver_probe(&davinci_pm_driver, davinci_pm_probe); | 157 | return platform_driver_probe(&davinci_pm_driver, davinci_pm_probe); |
158 | } | 158 | } |
159 | late_initcall(davinci_pm_init); | ||