提交 c52ecdab 编写于 作者: L Linus Torvalds

Merge master.kernel.org:/home/rmk/linux-2.6-arm

* master.kernel.org:/home/rmk/linux-2.6-arm:
  [ARM] pxa: fix pxa27x keyboard driver
  [ARM] Fix 4417/1: Serial: Fix AMBA drivers locking
  [ARM] 4421/1: AT91: Value of _KEY fields.
  [ARM] Solve buggy smp_processor_id() usage
  [ARM] 4422/1: Fix default value handling in gpio_direction_output (PXA)
  [ARM] 4419/1: AT91: SAM9 USB clocks check for suspending
  [ARM] 4418/1: AT91: Number of programmable clocks differs
  [ARM] 4392/2: Do not corrupt the SP register in compressed/head.S
...@@ -247,7 +247,7 @@ not_relocated: mov r0, #0 ...@@ -247,7 +247,7 @@ not_relocated: mov r0, #0
mov r3, r7 mov r3, r7
bl decompress_kernel bl decompress_kernel
add r0, r0, #127 add r0, r0, #127 + 128 @ alignment + stack
bic r0, r0, #127 @ align the kernel length bic r0, r0, #127 @ align the kernel length
/* /*
* r0 = decompressed kernel length * r0 = decompressed kernel length
...@@ -269,6 +269,7 @@ not_relocated: mov r0, #0 ...@@ -269,6 +269,7 @@ not_relocated: mov r0, #0
stmia r1!, {r9 - r14} stmia r1!, {r9 - r14}
cmp r2, r3 cmp r2, r3
blo 1b blo 1b
add sp, r1, #128 @ relocate the stack
bl cache_clean_flush bl cache_clean_flush
add pc, r5, r0 @ call relocation code add pc, r5, r0 @ call relocation code
...@@ -476,6 +477,7 @@ __common_mmu_cache_on: ...@@ -476,6 +477,7 @@ __common_mmu_cache_on:
*/ */
.align 5 .align 5
reloc_start: add r9, r5, r0 reloc_start: add r9, r5, r0
sub r9, r9, #128 @ do not copy the stack
debug_reloc_start debug_reloc_start
mov r1, r4 mov r1, r4
1: 1:
...@@ -486,6 +488,7 @@ reloc_start: add r9, r5, r0 ...@@ -486,6 +488,7 @@ reloc_start: add r9, r5, r0
cmp r5, r9 cmp r5, r9
blo 1b blo 1b
add sp, r1, #128 @ relocate the stack
debug_reloc_end debug_reloc_end
call_kernel: bl cache_clean_flush call_kernel: bl cache_clean_flush
......
...@@ -364,19 +364,14 @@ static int at91_clk_show(struct seq_file *s, void *unused) ...@@ -364,19 +364,14 @@ static int at91_clk_show(struct seq_file *s, void *unused)
{ {
u32 scsr, pcsr, sr; u32 scsr, pcsr, sr;
struct clk *clk; struct clk *clk;
unsigned i;
seq_printf(s, "SCSR = %8x\n", scsr = at91_sys_read(AT91_PMC_SCSR)); seq_printf(s, "SCSR = %8x\n", scsr = at91_sys_read(AT91_PMC_SCSR));
seq_printf(s, "PCSR = %8x\n", pcsr = at91_sys_read(AT91_PMC_PCSR)); seq_printf(s, "PCSR = %8x\n", pcsr = at91_sys_read(AT91_PMC_PCSR));
seq_printf(s, "MOR = %8x\n", at91_sys_read(AT91_CKGR_MOR)); seq_printf(s, "MOR = %8x\n", at91_sys_read(AT91_CKGR_MOR));
seq_printf(s, "MCFR = %8x\n", at91_sys_read(AT91_CKGR_MCFR)); seq_printf(s, "MCFR = %8x\n", at91_sys_read(AT91_CKGR_MCFR));
seq_printf(s, "PLLA = %8x\n", at91_sys_read(AT91_CKGR_PLLAR)); seq_printf(s, "PLLA = %8x\n", at91_sys_read(AT91_CKGR_PLLAR));
seq_printf(s, "PLLB = %8x\n", at91_sys_read(AT91_CKGR_PLLBR)); seq_printf(s, "PLLB = %8x\n", at91_sys_read(AT91_CKGR_PLLBR));
seq_printf(s, "MCKR = %8x\n", at91_sys_read(AT91_PMC_MCKR)); seq_printf(s, "MCKR = %8x\n", at91_sys_read(AT91_PMC_MCKR));
for (i = 0; i < 4; i++)
seq_printf(s, "PCK%d = %8x\n", i, at91_sys_read(AT91_PMC_PCKR(i)));
seq_printf(s, "SR = %8x\n", sr = at91_sys_read(AT91_PMC_SR)); seq_printf(s, "SR = %8x\n", sr = at91_sys_read(AT91_PMC_SR));
seq_printf(s, "\n"); seq_printf(s, "\n");
......
...@@ -76,12 +76,11 @@ static int at91_pm_verify_clocks(void) ...@@ -76,12 +76,11 @@ static int at91_pm_verify_clocks(void)
pr_debug("AT91: PM - Suspend-to-RAM with USB still active\n"); pr_debug("AT91: PM - Suspend-to-RAM with USB still active\n");
return 0; return 0;
} }
} else if (cpu_is_at91sam9260()) { } else if (cpu_is_at91sam9260() || cpu_is_at91sam9261() || cpu_is_at91sam9263()) {
#warning "Check SAM9260 USB clocks" if ((scsr & (AT91SAM926x_PMC_UHP | AT91SAM926x_PMC_UDP)) != 0) {
} else if (cpu_is_at91sam9261()) { pr_debug("AT91: PM - Suspend-to-RAM with USB still active\n");
#warning "Check SAM9261 USB clocks" return 0;
} else if (cpu_is_at91sam9263()) { }
#warning "Check SAM9263 USB clocks"
} }
#ifdef CONFIG_AT91_PROGRAMMABLE_CLOCKS #ifdef CONFIG_AT91_PROGRAMMABLE_CLOCKS
......
...@@ -200,8 +200,10 @@ static int em_call_function(int (*fn)(void)) ...@@ -200,8 +200,10 @@ static int em_call_function(int (*fn)(void))
data.fn = fn; data.fn = fn;
data.ret = 0; data.ret = 0;
preempt_disable();
smp_call_function(em_func, &data, 1, 1); smp_call_function(em_func, &data, 1, 1);
em_func(&data); em_func(&data);
preempt_enable();
return data.ret; return data.ret;
} }
......
...@@ -104,7 +104,7 @@ static int pxakbd_open(struct input_dev *dev) ...@@ -104,7 +104,7 @@ static int pxakbd_open(struct input_dev *dev)
KPREC = 0x7F; KPREC = 0x7F;
/* Enable unit clock */ /* Enable unit clock */
pxa_set_cken(CKEN19_KEYPAD, 1); pxa_set_cken(CKEN_KEYPAD, 1);
return 0; return 0;
} }
...@@ -112,7 +112,7 @@ static int pxakbd_open(struct input_dev *dev) ...@@ -112,7 +112,7 @@ static int pxakbd_open(struct input_dev *dev)
static void pxakbd_close(struct input_dev *dev) static void pxakbd_close(struct input_dev *dev)
{ {
/* Disable clock unit */ /* Disable clock unit */
pxa_set_cken(CKEN19_KEYPAD, 0); pxa_set_cken(CKEN_KEYPAD, 0);
} }
#ifdef CONFIG_PM #ifdef CONFIG_PM
...@@ -185,7 +185,7 @@ static int __devinit pxakbd_probe(struct platform_device *pdev) ...@@ -185,7 +185,7 @@ static int __devinit pxakbd_probe(struct platform_device *pdev)
DRIVER_NAME, pdev); DRIVER_NAME, pdev);
if (error) { if (error) {
printk(KERN_ERR "Cannot request keypad IRQ\n"); printk(KERN_ERR "Cannot request keypad IRQ\n");
pxa_set_cken(CKEN19_KEYPAD, 0); pxa_set_cken(CKEN_KEYPAD, 0);
goto err_free_dev; goto err_free_dev;
} }
......
...@@ -167,9 +167,9 @@ static void pl010_rx_chars(struct uart_amba_port *uap) ...@@ -167,9 +167,9 @@ static void pl010_rx_chars(struct uart_amba_port *uap)
ignore_char: ignore_char:
status = readb(uap->port.membase + UART01x_FR); status = readb(uap->port.membase + UART01x_FR);
} }
spin_unlock(&port->lock); spin_unlock(&uap->port.lock);
tty_flip_buffer_push(tty); tty_flip_buffer_push(tty);
spin_lock(&port->lock); spin_lock(&uap->port.lock);
} }
static void pl010_tx_chars(struct uart_amba_port *uap) static void pl010_tx_chars(struct uart_amba_port *uap)
......
...@@ -14,8 +14,8 @@ ...@@ -14,8 +14,8 @@
#define AT91_SHDWC_H #define AT91_SHDWC_H
#define AT91_SHDW_CR (AT91_SHDWC + 0x00) /* Shut Down Control Register */ #define AT91_SHDW_CR (AT91_SHDWC + 0x00) /* Shut Down Control Register */
#define AT91_SHDW_SHDW (1 << 0) /* Processor Reset */ #define AT91_SHDW_SHDW (1 << 0) /* Shut Down command */
#define AT91_SHDW_KEY (0xff << 24) /* KEY Password */ #define AT91_SHDW_KEY (0xa5 << 24) /* KEY Password */
#define AT91_SHDW_MR (AT91_SHDWC + 0x04) /* Shut Down Mode Register */ #define AT91_SHDW_MR (AT91_SHDWC + 0x04) /* Shut Down Mode Register */
#define AT91_SHDW_WKMODE0 (3 << 0) /* Wake-up 0 Mode Selection */ #define AT91_SHDW_WKMODE0 (3 << 0) /* Wake-up 0 Mode Selection */
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
#define AT91_WDT_CR (AT91_WDT + 0x00) /* Watchdog Control Register */ #define AT91_WDT_CR (AT91_WDT + 0x00) /* Watchdog Control Register */
#define AT91_WDT_WDRSTT (1 << 0) /* Restart */ #define AT91_WDT_WDRSTT (1 << 0) /* Restart */
#define AT91_WDT_KEY (0xff << 24) /* KEY Password */ #define AT91_WDT_KEY (0xa5 << 24) /* KEY Password */
#define AT91_WDT_MR (AT91_WDT + 0x04) /* Watchdog Mode Register */ #define AT91_WDT_MR (AT91_WDT + 0x04) /* Watchdog Mode Register */
#define AT91_WDT_WDV (0xfff << 0) /* Counter Value */ #define AT91_WDT_WDV (0xfff << 0) /* Counter Value */
......
...@@ -45,7 +45,8 @@ static inline int gpio_direction_input(unsigned gpio) ...@@ -45,7 +45,8 @@ static inline int gpio_direction_input(unsigned gpio)
static inline int gpio_direction_output(unsigned gpio, int value) static inline int gpio_direction_output(unsigned gpio, int value)
{ {
return pxa_gpio_mode(gpio | GPIO_OUT | (value ? 0 : GPIO_DFLT_LOW)); return pxa_gpio_mode(gpio | GPIO_OUT |
(value ? GPIO_DFLT_HIGH : GPIO_DFLT_LOW));
} }
static inline int __gpio_get_value(unsigned gpio) static inline int __gpio_get_value(unsigned gpio)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册