aboutsummaryrefslogtreecommitdiffstats
path: root/arch/blackfin/mach-common
diff options
context:
space:
mode:
Diffstat (limited to 'arch/blackfin/mach-common')
-rw-r--r--arch/blackfin/mach-common/clocks-init.c1
-rw-r--r--arch/blackfin/mach-common/cpufreq.c5
-rw-r--r--arch/blackfin/mach-common/dpmc_modes.S30
-rw-r--r--arch/blackfin/mach-common/entry.S4
-rw-r--r--arch/blackfin/mach-common/ints-priority.c15
-rw-r--r--arch/blackfin/mach-common/smp.c16
6 files changed, 56 insertions, 15 deletions
diff --git a/arch/blackfin/mach-common/clocks-init.c b/arch/blackfin/mach-common/clocks-init.c
index ef6870e9eea..d5cfe611b77 100644
--- a/arch/blackfin/mach-common/clocks-init.c
+++ b/arch/blackfin/mach-common/clocks-init.c
@@ -13,6 +13,7 @@
13#include <asm/dma.h> 13#include <asm/dma.h>
14#include <asm/clocks.h> 14#include <asm/clocks.h>
15#include <asm/mem_init.h> 15#include <asm/mem_init.h>
16#include <asm/dpmc.h>
16 17
17#define SDGCTL_WIDTH (1 << 31) /* SDRAM external data path width */ 18#define SDGCTL_WIDTH (1 << 31) /* SDRAM external data path width */
18#define PLL_CTL_VAL \ 19#define PLL_CTL_VAL \
diff --git a/arch/blackfin/mach-common/cpufreq.c b/arch/blackfin/mach-common/cpufreq.c
index 01506504e6d..77758289725 100644
--- a/arch/blackfin/mach-common/cpufreq.c
+++ b/arch/blackfin/mach-common/cpufreq.c
@@ -13,7 +13,7 @@
13#include <linux/fs.h> 13#include <linux/fs.h>
14#include <asm/blackfin.h> 14#include <asm/blackfin.h>
15#include <asm/time.h> 15#include <asm/time.h>
16 16#include <asm/dpmc.h>
17 17
18/* this is the table of CCLK frequencies, in Hz */ 18/* this is the table of CCLK frequencies, in Hz */
19/* .index is the entry in the auxillary dpm_state_table[] */ 19/* .index is the entry in the auxillary dpm_state_table[] */
@@ -138,7 +138,8 @@ static int __init __bfin_cpu_init(struct cpufreq_policy *policy)
138 dpm_state_table[index].tscale); 138 dpm_state_table[index].tscale);
139 } 139 }
140 140
141 policy->cpuinfo.transition_latency = (bfin_read_PLL_LOCKCNT() / (sclk / 1000000)) * 1000; 141 policy->cpuinfo.transition_latency = 50000; /* 50us assumed */
142
142 /*Now ,only support one cpu */ 143 /*Now ,only support one cpu */
143 policy->cur = cclk; 144 policy->cur = cclk;
144 cpufreq_frequency_table_get_attr(bfin_freq_table, policy->cpu); 145 cpufreq_frequency_table_get_attr(bfin_freq_table, policy->cpu);
diff --git a/arch/blackfin/mach-common/dpmc_modes.S b/arch/blackfin/mach-common/dpmc_modes.S
index 8009a512fb1..b0371689605 100644
--- a/arch/blackfin/mach-common/dpmc_modes.S
+++ b/arch/blackfin/mach-common/dpmc_modes.S
@@ -404,6 +404,21 @@ ENTRY(_do_hibernate)
404 PM_SYS_PUSH(EBIU_FCTL) 404 PM_SYS_PUSH(EBIU_FCTL)
405#endif 405#endif
406 406
407#ifdef PORTCIO_FER
408 PM_SYS_PUSH16(PORTCIO_DIR)
409 PM_SYS_PUSH16(PORTCIO_INEN)
410 PM_SYS_PUSH16(PORTCIO)
411 PM_SYS_PUSH16(PORTCIO_FER)
412 PM_SYS_PUSH16(PORTDIO_DIR)
413 PM_SYS_PUSH16(PORTDIO_INEN)
414 PM_SYS_PUSH16(PORTDIO)
415 PM_SYS_PUSH16(PORTDIO_FER)
416 PM_SYS_PUSH16(PORTEIO_DIR)
417 PM_SYS_PUSH16(PORTEIO_INEN)
418 PM_SYS_PUSH16(PORTEIO)
419 PM_SYS_PUSH16(PORTEIO_FER)
420#endif
421
407 PM_SYS_PUSH16(SYSCR) 422 PM_SYS_PUSH16(SYSCR)
408 423
409 /* Save Core MMRs */ 424 /* Save Core MMRs */
@@ -716,6 +731,21 @@ ENTRY(_do_hibernate)
716 P0.L = lo(PLL_CTL); 731 P0.L = lo(PLL_CTL);
717 PM_SYS_POP16(SYSCR) 732 PM_SYS_POP16(SYSCR)
718 733
734#ifdef PORTCIO_FER
735 PM_SYS_POP16(PORTEIO_FER)
736 PM_SYS_POP16(PORTEIO)
737 PM_SYS_POP16(PORTEIO_INEN)
738 PM_SYS_POP16(PORTEIO_DIR)
739 PM_SYS_POP16(PORTDIO_FER)
740 PM_SYS_POP16(PORTDIO)
741 PM_SYS_POP16(PORTDIO_INEN)
742 PM_SYS_POP16(PORTDIO_DIR)
743 PM_SYS_POP16(PORTCIO_FER)
744 PM_SYS_POP16(PORTCIO)
745 PM_SYS_POP16(PORTCIO_INEN)
746 PM_SYS_POP16(PORTCIO_DIR)
747#endif
748
719#ifdef EBIU_FCTL 749#ifdef EBIU_FCTL
720 PM_SYS_POP(EBIU_FCTL) 750 PM_SYS_POP(EBIU_FCTL)
721 PM_SYS_POP(EBIU_MODE) 751 PM_SYS_POP(EBIU_MODE)
diff --git a/arch/blackfin/mach-common/entry.S b/arch/blackfin/mach-common/entry.S
index f3f8bb46b51..b0ed0b487ff 100644
--- a/arch/blackfin/mach-common/entry.S
+++ b/arch/blackfin/mach-common/entry.S
@@ -713,6 +713,8 @@ ENTRY(_system_call)
713 cc = BITTST(r7, TIF_RESTORE_SIGMASK); 713 cc = BITTST(r7, TIF_RESTORE_SIGMASK);
714 if cc jump .Lsyscall_do_signals; 714 if cc jump .Lsyscall_do_signals;
715 cc = BITTST(r7, TIF_SIGPENDING); 715 cc = BITTST(r7, TIF_SIGPENDING);
716 if cc jump .Lsyscall_do_signals;
717 cc = BITTST(r7, TIF_NOTIFY_RESUME);
716 if !cc jump .Lsyscall_really_exit; 718 if !cc jump .Lsyscall_really_exit;
717.Lsyscall_do_signals: 719.Lsyscall_do_signals:
718 /* Reenable interrupts. */ 720 /* Reenable interrupts. */
@@ -721,7 +723,7 @@ ENTRY(_system_call)
721 723
722 r0 = sp; 724 r0 = sp;
723 SP += -12; 725 SP += -12;
724 call _do_signal; 726 call _do_notify_resume;
725 SP += 12; 727 SP += 12;
726 728
727.Lsyscall_really_exit: 729.Lsyscall_really_exit:
diff --git a/arch/blackfin/mach-common/ints-priority.c b/arch/blackfin/mach-common/ints-priority.c
index 660ea1bec54..1873b2c1fed 100644
--- a/arch/blackfin/mach-common/ints-priority.c
+++ b/arch/blackfin/mach-common/ints-priority.c
@@ -25,11 +25,20 @@
25#include <asm/blackfin.h> 25#include <asm/blackfin.h>
26#include <asm/gpio.h> 26#include <asm/gpio.h>
27#include <asm/irq_handler.h> 27#include <asm/irq_handler.h>
28#include <asm/dpmc.h>
29#include <asm/bfin5xx_spi.h>
30#include <asm/bfin_sport.h>
28 31
29#define SIC_SYSIRQ(irq) (irq - (IRQ_CORETMR + 1)) 32#define SIC_SYSIRQ(irq) (irq - (IRQ_CORETMR + 1))
30 33
31#ifdef BF537_FAMILY 34#ifdef BF537_FAMILY
32# define BF537_GENERIC_ERROR_INT_DEMUX 35# define BF537_GENERIC_ERROR_INT_DEMUX
36# define SPI_ERR_MASK (BIT_STAT_TXCOL | BIT_STAT_RBSY | BIT_STAT_MODF | BIT_STAT_TXE) /* SPI_STAT */
37# define SPORT_ERR_MASK (ROVF | RUVF | TOVF | TUVF) /* SPORT_STAT */
38# define PPI_ERR_MASK (0xFFFF & ~FLD) /* PPI_STATUS */
39# define EMAC_ERR_MASK (PHYINT | MMCINT | RXFSINT | TXFSINT | WAKEDET | RXDMAERR | TXDMAERR | STMDONE) /* EMAC_SYSTAT */
40# define UART_ERR_MASK (0x6) /* UART_IIR */
41# define CAN_ERR_MASK (EWTIF | EWRIF | EPIF | BOIF | WUIF | UIAIF | AAIF | RMLIF | UCEIF | EXTIF | ADIF) /* CAN_GIF */
33#else 42#else
34# undef BF537_GENERIC_ERROR_INT_DEMUX 43# undef BF537_GENERIC_ERROR_INT_DEMUX
35#endif 44#endif
@@ -324,11 +333,9 @@ static void bfin_demux_error_irq(unsigned int int_err_irq,
324 irq = IRQ_CAN_ERROR; 333 irq = IRQ_CAN_ERROR;
325 else if (bfin_read_SPI_STAT() & SPI_ERR_MASK) 334 else if (bfin_read_SPI_STAT() & SPI_ERR_MASK)
326 irq = IRQ_SPI_ERROR; 335 irq = IRQ_SPI_ERROR;
327 else if ((bfin_read_UART0_IIR() & UART_ERR_MASK_STAT1) && 336 else if ((bfin_read_UART0_IIR() & UART_ERR_MASK) == UART_ERR_MASK)
328 (bfin_read_UART0_IIR() & UART_ERR_MASK_STAT0))
329 irq = IRQ_UART0_ERROR; 337 irq = IRQ_UART0_ERROR;
330 else if ((bfin_read_UART1_IIR() & UART_ERR_MASK_STAT1) && 338 else if ((bfin_read_UART1_IIR() & UART_ERR_MASK) == UART_ERR_MASK)
331 (bfin_read_UART1_IIR() & UART_ERR_MASK_STAT0))
332 irq = IRQ_UART1_ERROR; 339 irq = IRQ_UART1_ERROR;
333 340
334 if (irq) { 341 if (irq) {
diff --git a/arch/blackfin/mach-common/smp.c b/arch/blackfin/mach-common/smp.c
index d92b168c832..369e687582b 100644
--- a/arch/blackfin/mach-common/smp.c
+++ b/arch/blackfin/mach-common/smp.c
@@ -336,13 +336,6 @@ int __cpuinit __cpu_up(unsigned int cpu)
336 336
337 ret = platform_boot_secondary(cpu, idle); 337 ret = platform_boot_secondary(cpu, idle);
338 338
339 if (ret) {
340 cpu_clear(cpu, cpu_present_map);
341 printk(KERN_CRIT "CPU%u: processor failed to boot (%d)\n", cpu, ret);
342 free_task(idle);
343 } else
344 cpu_set(cpu, cpu_online_map);
345
346 secondary_stack = NULL; 339 secondary_stack = NULL;
347 340
348 return ret; 341 return ret;
@@ -418,9 +411,16 @@ void __cpuinit secondary_start_kernel(void)
418 411
419 setup_secondary(cpu); 412 setup_secondary(cpu);
420 413
414 platform_secondary_init(cpu);
415
421 local_irq_enable(); 416 local_irq_enable();
422 417
423 platform_secondary_init(cpu); 418 /*
419 * Calibrate loops per jiffy value.
420 * IRQs need to be enabled here - D-cache can be invalidated
421 * in timer irq handler, so core B can read correct jiffies.
422 */
423 calibrate_delay();
424 424
425 cpu_idle(); 425 cpu_idle();
426} 426}