Commit 664481ed authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'sh-for-linus' of git://github.com/pmundt/linux-sh

Pull SuperH fixes from Paul Mundt.

* tag 'sh-for-linus' of git://github.com/pmundt/linux-sh:
  sh: fix clock-sh7757 for the latest sh_mobile_sdhi driver
  serial: sh-sci: use serial_port_in/out vs sci_in/out.
  sh: vsyscall: Fix up .eh_frame generation.
  sh: dma: Fix up device attribute mismatch from sysdev fallout.
  sh: dwarf unwinder depends on SHcompact.
  sh: fix up fallout from system.h disintegration.
parents d6a624ee a052d2c3
...@@ -61,6 +61,7 @@ config DUMP_CODE ...@@ -61,6 +61,7 @@ config DUMP_CODE
config DWARF_UNWINDER config DWARF_UNWINDER
bool "Enable the DWARF unwinder for stacktraces" bool "Enable the DWARF unwinder for stacktraces"
select FRAME_POINTER select FRAME_POINTER
depends on SUPERH32
default n default n
help help
Enabling this option will make stacktraces more accurate, at Enabling this option will make stacktraces more accurate, at
......
...@@ -28,6 +28,7 @@ ...@@ -28,6 +28,7 @@
#include <cpu/sh7785.h> #include <cpu/sh7785.h>
#include <asm/heartbeat.h> #include <asm/heartbeat.h>
#include <asm/clock.h> #include <asm/clock.h>
#include <asm/bl_bit.h>
/* /*
* NOTE: This board has 2 physical memory maps. * NOTE: This board has 2 physical memory maps.
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
#include <linux/gfp.h> #include <linux/gfp.h>
#include <asm/io.h> #include <asm/io.h>
#include <asm/hd64461.h> #include <asm/hd64461.h>
#include <asm/bl_bit.h>
#include <mach/hp6xx.h> #include <mach/hp6xx.h>
#include <cpu/dac.h> #include <cpu/dac.h>
#include <asm/freq.h> #include <asm/freq.h>
......
...@@ -54,7 +54,7 @@ static int __init dma_subsys_init(void) ...@@ -54,7 +54,7 @@ static int __init dma_subsys_init(void)
if (unlikely(ret)) if (unlikely(ret))
return ret; return ret;
return device_create_file(dma_subsys.dev_root, &dev_attr_devices.attr); return device_create_file(dma_subsys.dev_root, &dev_attr_devices);
} }
postcore_initcall(dma_subsys_init); postcore_initcall(dma_subsys_init);
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
#include <linux/slab.h> #include <linux/slab.h>
#include <asm/processor.h> #include <asm/processor.h>
#include <asm/fpu.h> #include <asm/fpu.h>
#include <asm/traps.h>
int init_fpu(struct task_struct *tsk) int init_fpu(struct task_struct *tsk)
{ {
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
#include <asm/processor.h> #include <asm/processor.h>
#include <asm/io.h> #include <asm/io.h>
#include <asm/fpu.h> #include <asm/fpu.h>
#include <asm/traps.h>
/* The PR (precision) bit in the FP Status Register must be clear when /* The PR (precision) bit in the FP Status Register must be clear when
* an frchg instruction is executed, otherwise the instruction is undefined. * an frchg instruction is executed, otherwise the instruction is undefined.
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
#include <cpu/fpu.h> #include <cpu/fpu.h>
#include <asm/processor.h> #include <asm/processor.h>
#include <asm/fpu.h> #include <asm/fpu.h>
#include <asm/traps.h>
/* The PR (precision) bit in the FP Status Register must be clear when /* The PR (precision) bit in the FP Status Register must be clear when
* an frchg instruction is executed, otherwise the instruction is undefined. * an frchg instruction is executed, otherwise the instruction is undefined.
......
...@@ -113,7 +113,7 @@ static struct clk_lookup lookups[] = { ...@@ -113,7 +113,7 @@ static struct clk_lookup lookups[] = {
CLKDEV_CON_ID("cpu_clk", &div4_clks[DIV4_I]), CLKDEV_CON_ID("cpu_clk", &div4_clks[DIV4_I]),
/* MSTP32 clocks */ /* MSTP32 clocks */
CLKDEV_CON_ID("sdhi0", &mstp_clks[MSTP004]), CLKDEV_DEV_ID("sh_mobile_sdhi.0", &mstp_clks[MSTP004]),
CLKDEV_CON_ID("riic0", &mstp_clks[MSTP000]), CLKDEV_CON_ID("riic0", &mstp_clks[MSTP000]),
CLKDEV_CON_ID("riic1", &mstp_clks[MSTP000]), CLKDEV_CON_ID("riic1", &mstp_clks[MSTP000]),
CLKDEV_CON_ID("riic2", &mstp_clks[MSTP000]), CLKDEV_CON_ID("riic2", &mstp_clks[MSTP000]),
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
#include <asm/suspend.h> #include <asm/suspend.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
#include <asm/cacheflush.h> #include <asm/cacheflush.h>
#include <asm/bl_bit.h>
/* /*
* Notifier lists for pre/post sleep notification * Notifier lists for pre/post sleep notification
......
...@@ -17,8 +17,8 @@ ...@@ -17,8 +17,8 @@
#include <linux/irqflags.h> #include <linux/irqflags.h>
#include <linux/smp.h> #include <linux/smp.h>
#include <linux/cpuidle.h> #include <linux/cpuidle.h>
#include <asm/pgalloc.h>
#include <linux/atomic.h> #include <linux/atomic.h>
#include <asm/pgalloc.h>
#include <asm/smp.h> #include <asm/smp.h>
#include <asm/bl_bit.h> #include <asm/bl_bit.h>
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
#include <linux/irq.h> #include <linux/irq.h>
#include <linux/io.h> #include <linux/io.h>
#include <asm/cacheflush.h> #include <asm/cacheflush.h>
#include <asm/traps.h>
/* Macros for single step instruction identification */ /* Macros for single step instruction identification */
#define OPCODE_BT(op) (((op) & 0xff00) == 0x8900) #define OPCODE_BT(op) (((op) & 0xff00) == 0x8900)
......
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
#include <asm/mmu_context.h> #include <asm/mmu_context.h>
#include <asm/fpu.h> #include <asm/fpu.h>
#include <asm/syscalls.h> #include <asm/syscalls.h>
#include <asm/switch_to.h>
void show_regs(struct pt_regs * regs) void show_regs(struct pt_regs * regs)
{ {
......
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
#include <asm/smp.h> #include <asm/smp.h>
#include <asm/cacheflush.h> #include <asm/cacheflush.h>
#include <asm/sections.h> #include <asm/sections.h>
#include <asm/setup.h>
int __cpu_number_map[NR_CPUS]; /* Map physical to logical */ int __cpu_number_map[NR_CPUS]; /* Map physical to logical */
int __cpu_logical_map[NR_CPUS]; /* Map logical to physical */ int __cpu_logical_map[NR_CPUS]; /* Map logical to physical */
......
...@@ -34,6 +34,41 @@ __kernel_rt_sigreturn: ...@@ -34,6 +34,41 @@ __kernel_rt_sigreturn:
1: .short __NR_rt_sigreturn 1: .short __NR_rt_sigreturn
.LEND_rt_sigreturn: .LEND_rt_sigreturn:
.size __kernel_rt_sigreturn,.-.LSTART_rt_sigreturn .size __kernel_rt_sigreturn,.-.LSTART_rt_sigreturn
.previous
.section .eh_frame,"a",@progbits .section .eh_frame,"a",@progbits
.LCIE1:
.ualong .LCIE1_end - .LCIE1_start
.LCIE1_start:
.ualong 0 /* CIE ID */
.byte 0x1 /* Version number */
.string "zRS" /* NUL-terminated augmentation string */
.uleb128 0x1 /* Code alignment factor */
.sleb128 -4 /* Data alignment factor */
.byte 0x11 /* Return address register column */
.uleb128 0x1 /* Augmentation length and data */
.byte 0x1b /* DW_EH_PE_pcrel | DW_EH_PE_sdata4. */
.byte 0xc, 0xf, 0x0 /* DW_CFA_def_cfa: r15 ofs 0 */
.align 2
.LCIE1_end:
.ualong .LFDE0_end-.LFDE0_start /* Length FDE0 */
.LFDE0_start:
.ualong .LFDE0_start-.LCIE1 /* CIE pointer */
.ualong .LSTART_sigreturn-. /* PC-relative start address */
.ualong .LEND_sigreturn-.LSTART_sigreturn
.uleb128 0 /* Augmentation */
.align 2
.LFDE0_end:
.ualong .LFDE1_end-.LFDE1_start /* Length FDE1 */
.LFDE1_start:
.ualong .LFDE1_start-.LCIE1 /* CIE pointer */
.ualong .LSTART_rt_sigreturn-. /* PC-relative start address */
.ualong .LEND_rt_sigreturn-.LSTART_rt_sigreturn
.uleb128 0 /* Augmentation */
.align 2
.LFDE1_end:
.previous .previous
...@@ -3,37 +3,34 @@ ...@@ -3,37 +3,34 @@
.type __kernel_vsyscall,@function .type __kernel_vsyscall,@function
__kernel_vsyscall: __kernel_vsyscall:
.LSTART_vsyscall: .LSTART_vsyscall:
/* XXX: We'll have to do something here once we opt to use the vDSO trapa #0x10
* page for something other than the signal trampoline.. as well as nop
* fill out .eh_frame -- PFM. */
.LEND_vsyscall: .LEND_vsyscall:
.size __kernel_vsyscall,.-.LSTART_vsyscall .size __kernel_vsyscall,.-.LSTART_vsyscall
.previous
.section .eh_frame,"a",@progbits .section .eh_frame,"a",@progbits
.previous
.LCIE: .LCIE:
.ualong .LCIE_end - .LCIE_start .ualong .LCIE_end - .LCIE_start
.LCIE_start: .LCIE_start:
.ualong 0 /* CIE ID */ .ualong 0 /* CIE ID */
.byte 0x1 /* Version number */ .byte 0x1 /* Version number */
.string "zRS" /* NUL-terminated augmentation string */ .string "zR" /* NUL-terminated augmentation string */
.uleb128 0x1 /* Code alignment factor */ .uleb128 0x1 /* Code alignment factor */
.sleb128 -4 /* Data alignment factor */ .sleb128 -4 /* Data alignment factor */
.byte 0x11 /* Return address register column */ .byte 0x11 /* Return address register column */
/* Augmentation length and data (none) */ .uleb128 0x1 /* Augmentation length and data */
.byte 0xc /* DW_CFA_def_cfa */ .byte 0x1b /* DW_EH_PE_pcrel | DW_EH_PE_sdata4. */
.uleb128 0xf /* r15 */ .byte 0xc,0xf,0x0 /* DW_CFA_def_cfa: r15 ofs 0 */
.uleb128 0x0 /* offset 0 */
.align 2 .align 2
.LCIE_end: .LCIE_end:
.ualong .LFDE_end-.LFDE_start /* Length FDE */ .ualong .LFDE_end-.LFDE_start /* Length FDE */
.LFDE_start: .LFDE_start:
.ualong .LCIE /* CIE pointer */ .ualong .LFDE_start-.LCIE /* CIE pointer */
.ualong .LSTART_vsyscall-. /* start address */ .ualong .LSTART_vsyscall-. /* PC-relative start address */
.ualong .LEND_vsyscall-.LSTART_vsyscall .ualong .LEND_vsyscall-.LSTART_vsyscall
.uleb128 0 .uleb128 0 /* Augmentation */
.align 2 .align 2
.LFDE_end: .LFDE_end:
.previous .previous
......
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
#include <linux/highmem.h> #include <linux/highmem.h>
#include <asm/pgtable.h> #include <asm/pgtable.h>
#include <asm/mmu_context.h> #include <asm/mmu_context.h>
#include <asm/cache_insns.h>
#include <asm/cacheflush.h> #include <asm/cacheflush.h>
/* /*
......
#include <linux/mm.h> #include <linux/mm.h>
#include <asm/mmu_context.h> #include <asm/mmu_context.h>
#include <asm/cache_insns.h>
#include <asm/cacheflush.h> #include <asm/cacheflush.h>
#include <asm/traps.h> #include <asm/traps.h>
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
*/ */
#include <linux/init.h> #include <linux/init.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/errno.h>
#include <asm/sram.h> #include <asm/sram.h>
/* /*
......
...@@ -355,9 +355,6 @@ static void sci_serial_out(struct uart_port *p, int offset, int value) ...@@ -355,9 +355,6 @@ static void sci_serial_out(struct uart_port *p, int offset, int value)
WARN(1, "Invalid register access\n"); WARN(1, "Invalid register access\n");
} }
#define sci_in(up, offset) (up->serial_in(up, offset))
#define sci_out(up, offset, value) (up->serial_out(up, offset, value))
static int sci_probe_regmap(struct plat_sci_port *cfg) static int sci_probe_regmap(struct plat_sci_port *cfg)
{ {
switch (cfg->type) { switch (cfg->type) {
...@@ -422,9 +419,9 @@ static int sci_poll_get_char(struct uart_port *port) ...@@ -422,9 +419,9 @@ static int sci_poll_get_char(struct uart_port *port)
int c; int c;
do { do {
status = sci_in(port, SCxSR); status = serial_port_in(port, SCxSR);
if (status & SCxSR_ERRORS(port)) { if (status & SCxSR_ERRORS(port)) {
sci_out(port, SCxSR, SCxSR_ERROR_CLEAR(port)); serial_port_out(port, SCxSR, SCxSR_ERROR_CLEAR(port));
continue; continue;
} }
break; break;
...@@ -433,11 +430,11 @@ static int sci_poll_get_char(struct uart_port *port) ...@@ -433,11 +430,11 @@ static int sci_poll_get_char(struct uart_port *port)
if (!(status & SCxSR_RDxF(port))) if (!(status & SCxSR_RDxF(port)))
return NO_POLL_CHAR; return NO_POLL_CHAR;
c = sci_in(port, SCxRDR); c = serial_port_in(port, SCxRDR);
/* Dummy read */ /* Dummy read */
sci_in(port, SCxSR); serial_port_in(port, SCxSR);
sci_out(port, SCxSR, SCxSR_RDxF_CLEAR(port)); serial_port_out(port, SCxSR, SCxSR_RDxF_CLEAR(port));
return c; return c;
} }
...@@ -448,11 +445,11 @@ static void sci_poll_put_char(struct uart_port *port, unsigned char c) ...@@ -448,11 +445,11 @@ static void sci_poll_put_char(struct uart_port *port, unsigned char c)
unsigned short status; unsigned short status;
do { do {
status = sci_in(port, SCxSR); status = serial_port_in(port, SCxSR);
} while (!(status & SCxSR_TDxE(port))); } while (!(status & SCxSR_TDxE(port)));
sci_out(port, SCxTDR, c); serial_port_out(port, SCxTDR, c);
sci_out(port, SCxSR, SCxSR_TDxE_CLEAR(port) & ~SCxSR_TEND(port)); serial_port_out(port, SCxSR, SCxSR_TDxE_CLEAR(port) & ~SCxSR_TEND(port));
} }
#endif /* CONFIG_CONSOLE_POLL || CONFIG_SERIAL_SH_SCI_CONSOLE */ #endif /* CONFIG_CONSOLE_POLL || CONFIG_SERIAL_SH_SCI_CONSOLE */
...@@ -480,10 +477,10 @@ static void sci_init_pins(struct uart_port *port, unsigned int cflag) ...@@ -480,10 +477,10 @@ static void sci_init_pins(struct uart_port *port, unsigned int cflag)
((!(cflag & CRTSCTS)))) { ((!(cflag & CRTSCTS)))) {
unsigned short status; unsigned short status;
status = sci_in(port, SCSPTR); status = serial_port_in(port, SCSPTR);
status &= ~SCSPTR_CTSIO; status &= ~SCSPTR_CTSIO;
status |= SCSPTR_RTSIO; status |= SCSPTR_RTSIO;
sci_out(port, SCSPTR, status); /* Set RTS = 1 */ serial_port_out(port, SCSPTR, status); /* Set RTS = 1 */
} }
} }
...@@ -493,13 +490,13 @@ static int sci_txfill(struct uart_port *port) ...@@ -493,13 +490,13 @@ static int sci_txfill(struct uart_port *port)
reg = sci_getreg(port, SCTFDR); reg = sci_getreg(port, SCTFDR);
if (reg->size) if (reg->size)
return sci_in(port, SCTFDR) & 0xff; return serial_port_in(port, SCTFDR) & 0xff;
reg = sci_getreg(port, SCFDR); reg = sci_getreg(port, SCFDR);
if (reg->size) if (reg->size)
return sci_in(port, SCFDR) >> 8; return serial_port_in(port, SCFDR) >> 8;
return !(sci_in(port, SCxSR) & SCI_TDRE); return !(serial_port_in(port, SCxSR) & SCI_TDRE);
} }
static int sci_txroom(struct uart_port *port) static int sci_txroom(struct uart_port *port)
...@@ -513,13 +510,13 @@ static int sci_rxfill(struct uart_port *port) ...@@ -513,13 +510,13 @@ static int sci_rxfill(struct uart_port *port)
reg = sci_getreg(port, SCRFDR); reg = sci_getreg(port, SCRFDR);
if (reg->size) if (reg->size)
return sci_in(port, SCRFDR) & 0xff; return serial_port_in(port, SCRFDR) & 0xff;
reg = sci_getreg(port, SCFDR); reg = sci_getreg(port, SCFDR);
if (reg->size) if (reg->size)
return sci_in(port, SCFDR) & ((port->fifosize << 1) - 1); return serial_port_in(port, SCFDR) & ((port->fifosize << 1) - 1);
return (sci_in(port, SCxSR) & SCxSR_RDxF(port)) != 0; return (serial_port_in(port, SCxSR) & SCxSR_RDxF(port)) != 0;
} }
/* /*
...@@ -547,14 +544,14 @@ static void sci_transmit_chars(struct uart_port *port) ...@@ -547,14 +544,14 @@ static void sci_transmit_chars(struct uart_port *port)
unsigned short ctrl; unsigned short ctrl;
int count; int count;
status = sci_in(port, SCxSR); status = serial_port_in(port, SCxSR);
if (!(status & SCxSR_TDxE(port))) { if (!(status & SCxSR_TDxE(port))) {
ctrl = sci_in(port, SCSCR); ctrl = serial_port_in(port, SCSCR);
if (uart_circ_empty(xmit)) if (uart_circ_empty(xmit))
ctrl &= ~SCSCR_TIE; ctrl &= ~SCSCR_TIE;
else else
ctrl |= SCSCR_TIE; ctrl |= SCSCR_TIE;
sci_out(port, SCSCR, ctrl); serial_port_out(port, SCSCR, ctrl);
return; return;
} }
...@@ -573,27 +570,27 @@ static void sci_transmit_chars(struct uart_port *port) ...@@ -573,27 +570,27 @@ static void sci_transmit_chars(struct uart_port *port)
break; break;
} }
sci_out(port, SCxTDR, c); serial_port_out(port, SCxTDR, c);
port->icount.tx++; port->icount.tx++;
} while (--count > 0); } while (--count > 0);
sci_out(port, SCxSR, SCxSR_TDxE_CLEAR(port)); serial_port_out(port, SCxSR, SCxSR_TDxE_CLEAR(port));
if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS) if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
uart_write_wakeup(port); uart_write_wakeup(port);
if (uart_circ_empty(xmit)) { if (uart_circ_empty(xmit)) {
sci_stop_tx(port); sci_stop_tx(port);
} else { } else {
ctrl = sci_in(port, SCSCR); ctrl = serial_port_in(port, SCSCR);
if (port->type != PORT_SCI) { if (port->type != PORT_SCI) {
sci_in(port, SCxSR); /* Dummy read */ serial_port_in(port, SCxSR); /* Dummy read */
sci_out(port, SCxSR, SCxSR_TDxE_CLEAR(port)); serial_port_out(port, SCxSR, SCxSR_TDxE_CLEAR(port));
} }
ctrl |= SCSCR_TIE; ctrl |= SCSCR_TIE;
sci_out(port, SCSCR, ctrl); serial_port_out(port, SCSCR, ctrl);
} }
} }
...@@ -608,7 +605,7 @@ static void sci_receive_chars(struct uart_port *port) ...@@ -608,7 +605,7 @@ static void sci_receive_chars(struct uart_port *port)
unsigned short status; unsigned short status;
unsigned char flag; unsigned char flag;
status = sci_in(port, SCxSR); status = serial_port_in(port, SCxSR);
if (!(status & SCxSR_RDxF(port))) if (!(status & SCxSR_RDxF(port)))
return; return;
...@@ -621,7 +618,7 @@ static void sci_receive_chars(struct uart_port *port) ...@@ -621,7 +618,7 @@ static void sci_receive_chars(struct uart_port *port)
break; break;
if (port->type == PORT_SCI) { if (port->type == PORT_SCI) {
char c = sci_in(port, SCxRDR); char c = serial_port_in(port, SCxRDR);
if (uart_handle_sysrq_char(port, c) || if (uart_handle_sysrq_char(port, c) ||
sci_port->break_flag) sci_port->break_flag)
count = 0; count = 0;
...@@ -629,9 +626,9 @@ static void sci_receive_chars(struct uart_port *port) ...@@ -629,9 +626,9 @@ static void sci_receive_chars(struct uart_port *port)
tty_insert_flip_char(tty, c, TTY_NORMAL); tty_insert_flip_char(tty, c, TTY_NORMAL);
} else { } else {
for (i = 0; i < count; i++) { for (i = 0; i < count; i++) {
char c = sci_in(port, SCxRDR); char c = serial_port_in(port, SCxRDR);
status = sci_in(port, SCxSR); status = serial_port_in(port, SCxSR);
#if defined(CONFIG_CPU_SH3) #if defined(CONFIG_CPU_SH3)
/* Skip "chars" during break */ /* Skip "chars" during break */
if (sci_port->break_flag) { if (sci_port->break_flag) {
...@@ -672,8 +669,8 @@ static void sci_receive_chars(struct uart_port *port) ...@@ -672,8 +669,8 @@ static void sci_receive_chars(struct uart_port *port)
} }
} }
sci_in(port, SCxSR); /* dummy read */ serial_port_in(port, SCxSR); /* dummy read */
sci_out(port, SCxSR, SCxSR_RDxF_CLEAR(port)); serial_port_out(port, SCxSR, SCxSR_RDxF_CLEAR(port));
copied += count; copied += count;
port->icount.rx += count; port->icount.rx += count;
...@@ -683,8 +680,8 @@ static void sci_receive_chars(struct uart_port *port) ...@@ -683,8 +680,8 @@ static void sci_receive_chars(struct uart_port *port)
/* Tell the rest of the system the news. New characters! */ /* Tell the rest of the system the news. New characters! */
tty_flip_buffer_push(tty); tty_flip_buffer_push(tty);
} else { } else {
sci_in(port, SCxSR); /* dummy read */ serial_port_in(port, SCxSR); /* dummy read */
sci_out(port, SCxSR, SCxSR_RDxF_CLEAR(port)); serial_port_out(port, SCxSR, SCxSR_RDxF_CLEAR(port));
} }
} }
...@@ -726,7 +723,7 @@ static void sci_break_timer(unsigned long data) ...@@ -726,7 +723,7 @@ static void sci_break_timer(unsigned long data)
static int sci_handle_errors(struct uart_port *port) static int sci_handle_errors(struct uart_port *port)
{ {
int copied = 0; int copied = 0;
unsigned short status = sci_in(port, SCxSR); unsigned short status = serial_port_in(port, SCxSR);
struct tty_struct *tty = port->state->port.tty; struct tty_struct *tty = port->state->port.tty;
struct sci_port *s = to_sci_port(port); struct sci_port *s = to_sci_port(port);
...@@ -804,8 +801,8 @@ static int sci_handle_fifo_overrun(struct uart_port *port) ...@@ -804,8 +801,8 @@ static int sci_handle_fifo_overrun(struct uart_port *port)
if (!reg->size) if (!reg->size)
return 0; return 0;
if ((sci_in(port, SCLSR) & (1 << s->cfg->overrun_bit))) { if ((serial_port_in(port, SCLSR) & (1 << s->cfg->overrun_bit))) {
sci_out(port, SCLSR, 0); serial_port_out(port, SCLSR, 0);
port->icount.overrun++; port->icount.overrun++;
...@@ -822,7 +819,7 @@ static int sci_handle_fifo_overrun(struct uart_port *port) ...@@ -822,7 +819,7 @@ static int sci_handle_fifo_overrun(struct uart_port *port)
static int sci_handle_breaks(struct uart_port *port) static int sci_handle_breaks(struct uart_port *port)
{ {
int copied = 0; int copied = 0;
unsigned short status = sci_in(port, SCxSR); unsigned short status = serial_port_in(port, SCxSR);
struct tty_struct *tty = port->state->port.tty; struct tty_struct *tty = port->state->port.tty;
struct sci_port *s = to_sci_port(port); struct sci_port *s = to_sci_port(port);
...@@ -859,8 +856,8 @@ static irqreturn_t sci_rx_interrupt(int irq, void *ptr) ...@@ -859,8 +856,8 @@ static irqreturn_t sci_rx_interrupt(int irq, void *ptr)
struct sci_port *s = to_sci_port(port); struct sci_port *s = to_sci_port(port);
if (s->chan_rx) { if (s->chan_rx) {
u16 scr = sci_in(port, SCSCR); u16 scr = serial_port_in(port, SCSCR);
u16 ssr = sci_in(port, SCxSR); u16 ssr = serial_port_in(port, SCxSR);
/* Disable future Rx interrupts */ /* Disable future Rx interrupts */
if (port->type == PORT_SCIFA || port->type == PORT_SCIFB) { if (port->type == PORT_SCIFA || port->type == PORT_SCIFB) {
...@@ -869,9 +866,9 @@ static irqreturn_t sci_rx_interrupt(int irq, void *ptr) ...@@ -869,9 +866,9 @@ static irqreturn_t sci_rx_interrupt(int irq, void *ptr)
} else { } else {
scr &= ~SCSCR_RIE; scr &= ~SCSCR_RIE;
} }
sci_out(port, SCSCR, scr); serial_port_out(port, SCSCR, scr);
/* Clear current interrupt */ /* Clear current interrupt */
sci_out(port, SCxSR, ssr & ~(1 | SCxSR_RDxF(port))); serial_port_out(port, SCxSR, ssr & ~(1 | SCxSR_RDxF(port)));
dev_dbg(port->dev, "Rx IRQ %lu: setup t-out in %u jiffies\n", dev_dbg(port->dev, "Rx IRQ %lu: setup t-out in %u jiffies\n",
jiffies, s->rx_timeout); jiffies, s->rx_timeout);
mod_timer(&s->rx_timer, jiffies + s->rx_timeout); mod_timer(&s->rx_timer, jiffies + s->rx_timeout);
...@@ -909,15 +906,15 @@ static irqreturn_t sci_er_interrupt(int irq, void *ptr) ...@@ -909,15 +906,15 @@ static irqreturn_t sci_er_interrupt(int irq, void *ptr)
if (port->type == PORT_SCI) { if (port->type == PORT_SCI) {
if (sci_handle_errors(port)) { if (sci_handle_errors(port)) {
/* discard character in rx buffer */ /* discard character in rx buffer */
sci_in(port, SCxSR); serial_port_in(port, SCxSR);
sci_out(port, SCxSR, SCxSR_RDxF_CLEAR(port)); serial_port_out(port, SCxSR, SCxSR_RDxF_CLEAR(port));
} }
} else { } else {
sci_handle_fifo_overrun(port); sci_handle_fifo_overrun(port);
sci_rx_interrupt(irq, ptr); sci_rx_interrupt(irq, ptr);
} }
sci_out(port, SCxSR, SCxSR_ERROR_CLEAR(port)); serial_port_out(port, SCxSR, SCxSR_ERROR_CLEAR(port));
/* Kick the transmission */ /* Kick the transmission */
sci_tx_interrupt(irq, ptr); sci_tx_interrupt(irq, ptr);
...@@ -931,7 +928,7 @@ static irqreturn_t sci_br_interrupt(int irq, void *ptr) ...@@ -931,7 +928,7 @@ static irqreturn_t sci_br_interrupt(int irq, void *ptr)
/* Handle BREAKs */ /* Handle BREAKs */
sci_handle_breaks(port); sci_handle_breaks(port);
sci_out(port, SCxSR, SCxSR_BREAK_CLEAR(port)); serial_port_out(port, SCxSR, SCxSR_BREAK_CLEAR(port));
return IRQ_HANDLED; return IRQ_HANDLED;
} }
...@@ -955,8 +952,8 @@ static irqreturn_t sci_mpxed_interrupt(int irq, void *ptr) ...@@ -955,8 +952,8 @@ static irqreturn_t sci_mpxed_interrupt(int irq, void *ptr)
struct sci_port *s = to_sci_port(port); struct sci_port *s = to_sci_port(port);
irqreturn_t ret = IRQ_NONE; irqreturn_t ret = IRQ_NONE;
ssr_status = sci_in(port, SCxSR); ssr_status = serial_port_in(port, SCxSR);
scr_status = sci_in(port, SCSCR); scr_status = serial_port_in(port, SCSCR);
err_enabled = scr_status & port_rx_irq_mask(port); err_enabled = scr_status & port_rx_irq_mask(port);
/* Tx Interrupt */ /* Tx Interrupt */
...@@ -1170,7 +1167,7 @@ static void sci_free_gpios(struct sci_port *port) ...@@ -1170,7 +1167,7 @@ static void sci_free_gpios(struct sci_port *port)
static unsigned int sci_tx_empty(struct uart_port *port) static unsigned int sci_tx_empty(struct uart_port *port)
{ {
unsigned short status = sci_in(port, SCxSR); unsigned short status = serial_port_in(port, SCxSR);
unsigned short in_tx_fifo = sci_txfill(port); unsigned short in_tx_fifo = sci_txfill(port);
return (status & SCxSR_TEND(port)) && !in_tx_fifo ? TIOCSER_TEMT : 0; return (status & SCxSR_TEND(port)) && !in_tx_fifo ? TIOCSER_TEMT : 0;
...@@ -1198,7 +1195,7 @@ static void sci_set_mctrl(struct uart_port *port, unsigned int mctrl) ...@@ -1198,7 +1195,7 @@ static void sci_set_mctrl(struct uart_port *port, unsigned int mctrl)
*/ */
reg = sci_getreg(port, SCFCR); reg = sci_getreg(port, SCFCR);
if (reg->size) if (reg->size)
sci_out(port, SCFCR, sci_in(port, SCFCR) | 1); serial_port_out(port, SCFCR, serial_port_in(port, SCFCR) | 1);
} }
} }
...@@ -1240,8 +1237,8 @@ static void sci_dma_tx_complete(void *arg) ...@@ -1240,8 +1237,8 @@ static void sci_dma_tx_complete(void *arg)
} else { } else {
s->cookie_tx = -EINVAL; s->cookie_tx = -EINVAL;
if (port->type == PORT_SCIFA || port->type == PORT_SCIFB) { if (port->type == PORT_SCIFA || port->type == PORT_SCIFB) {
u16 ctrl = sci_in(port, SCSCR); u16 ctrl = serial_port_in(port, SCSCR);
sci_out(port, SCSCR, ctrl & ~SCSCR_TIE); serial_port_out(port, SCSCR, ctrl & ~SCSCR_TIE);
} }
} }
...@@ -1494,13 +1491,13 @@ static void sci_start_tx(struct uart_port *port) ...@@ -1494,13 +1491,13 @@ static void sci_start_tx(struct uart_port *port)
#ifdef CONFIG_SERIAL_SH_SCI_DMA #ifdef CONFIG_SERIAL_SH_SCI_DMA
if (port->type == PORT_SCIFA || port->type == PORT_SCIFB) { if (port->type == PORT_SCIFA || port->type == PORT_SCIFB) {
u16 new, scr = sci_in(port, SCSCR); u16 new, scr = serial_port_in(port, SCSCR);
if (s->chan_tx) if (s->chan_tx)
new = scr | 0x8000; new = scr | 0x8000;
else else
new = scr & ~0x8000; new = scr & ~0x8000;
if (new != scr) if (new != scr)
sci_out(port, SCSCR, new); serial_port_out(port, SCSCR, new);
} }
if (s->chan_tx && !uart_circ_empty(&s->port.state->xmit) && if (s->chan_tx && !uart_circ_empty(&s->port.state->xmit) &&
...@@ -1512,8 +1509,8 @@ static void sci_start_tx(struct uart_port *port) ...@@ -1512,8 +1509,8 @@ static void sci_start_tx(struct uart_port *port)
if (!s->chan_tx || port->type == PORT_SCIFA || port->type == PORT_SCIFB) { if (!s->chan_tx || port->type == PORT_SCIFA || port->type == PORT_SCIFB) {
/* Set TIE (Transmit Interrupt Enable) bit in SCSCR */ /* Set TIE (Transmit Interrupt Enable) bit in SCSCR */
ctrl = sci_in(port, SCSCR); ctrl = serial_port_in(port, SCSCR);
sci_out(port, SCSCR, ctrl | SCSCR_TIE); serial_port_out(port, SCSCR, ctrl | SCSCR_TIE);
} }
} }
...@@ -1522,40 +1519,40 @@ static void sci_stop_tx(struct uart_port *port) ...@@ -1522,40 +1519,40 @@ static void sci_stop_tx(struct uart_port *port)
unsigned short ctrl; unsigned short ctrl;
/* Clear TIE (Transmit Interrupt Enable) bit in SCSCR */ /* Clear TIE (Transmit Interrupt Enable) bit in SCSCR */
ctrl = sci_in(port, SCSCR); ctrl = serial_port_in(port, SCSCR);
if (port->type == PORT_SCIFA || port->type == PORT_SCIFB) if (port->type == PORT_SCIFA || port->type == PORT_SCIFB)
ctrl &= ~0x8000; ctrl &= ~0x8000;
ctrl &= ~SCSCR_TIE; ctrl &= ~SCSCR_TIE;
sci_out(port, SCSCR, ctrl); serial_port_out(port, SCSCR, ctrl);
} }
static void sci_start_rx(struct uart_port *port) static void sci_start_rx(struct uart_port *port)
{ {
unsigned short ctrl; unsigned short ctrl;
ctrl = sci_in(port, SCSCR) | port_rx_irq_mask(port); ctrl = serial_port_in(port, SCSCR) | port_rx_irq_mask(port);
if (port->type == PORT_SCIFA || port->type == PORT_SCIFB) if (port->type == PORT_SCIFA || port->type == PORT_SCIFB)
ctrl &= ~0x4000; ctrl &= ~0x4000;
sci_out(port, SCSCR, ctrl); serial_port_out(port, SCSCR, ctrl);
} }
static void sci_stop_rx(struct uart_port *port) static void sci_stop_rx(struct uart_port *port)
{ {
unsigned short ctrl; unsigned short ctrl;
ctrl = sci_in(port, SCSCR); ctrl = serial_port_in(port, SCSCR);
if (port->type == PORT_SCIFA || port->type == PORT_SCIFB) if (port->type == PORT_SCIFA || port->type == PORT_SCIFB)
ctrl &= ~0x4000; ctrl &= ~0x4000;
ctrl &= ~port_rx_irq_mask(port); ctrl &= ~port_rx_irq_mask(port);
sci_out(port, SCSCR, ctrl); serial_port_out(port, SCSCR, ctrl);
} }
static void sci_enable_ms(struct uart_port *port) static void sci_enable_ms(struct uart_port *port)
...@@ -1589,13 +1586,13 @@ static void rx_timer_fn(unsigned long arg) ...@@ -1589,13 +1586,13 @@ static void rx_timer_fn(unsigned long arg)
{ {
struct sci_port *s = (struct sci_port *)arg; struct sci_port *s = (struct sci_port *)arg;
struct uart_port *port = &s->port; struct uart_port *port = &s->port;
u16 scr = sci_in(port, SCSCR); u16 scr = serial_port_in(port, SCSCR);
if (port->type == PORT_SCIFA || port->type == PORT_SCIFB) { if (port->type == PORT_SCIFA || port->type == PORT_SCIFB) {
scr &= ~0x4000; scr &= ~0x4000;
enable_irq(s->cfg->irqs[1]); enable_irq(s->cfg->irqs[1]);
} }
sci_out(port, SCSCR, scr | SCSCR_RIE); serial_port_out(port, SCSCR, scr | SCSCR_RIE);
dev_dbg(port->dev, "DMA Rx timed out\n"); dev_dbg(port->dev, "DMA Rx timed out\n");
schedule_work(&s->work_rx); schedule_work(&s->work_rx);
} }
...@@ -1776,14 +1773,14 @@ static void sci_reset(struct uart_port *port) ...@@ -1776,14 +1773,14 @@ static void sci_reset(struct uart_port *port)
unsigned int status; unsigned int status;
do { do {
status = sci_in(port, SCxSR); status = serial_port_in(port, SCxSR);
} while (!(status & SCxSR_TEND(port))); } while (!(status & SCxSR_TEND(port)));
sci_out(port, SCSCR, 0x00); /* TE=0, RE=0, CKE1=0 */ serial_port_out(port, SCSCR, 0x00); /* TE=0, RE=0, CKE1=0 */
reg = sci_getreg(port, SCFCR); reg = sci_getreg(port, SCFCR);
if (reg->size) if (reg->size)
sci_out(port, SCFCR, SCFCR_RFRST | SCFCR_TFRST); serial_port_out(port, SCFCR, SCFCR_RFRST | SCFCR_TFRST);
} }
static void sci_set_termios(struct uart_port *port, struct ktermios *termios, static void sci_set_termios(struct uart_port *port, struct ktermios *termios,
...@@ -1812,7 +1809,7 @@ static void sci_set_termios(struct uart_port *port, struct ktermios *termios, ...@@ -1812,7 +1809,7 @@ static void sci_set_termios(struct uart_port *port, struct ktermios *termios,
sci_reset(port); sci_reset(port);
smr_val = sci_in(port, SCSMR) & 3; smr_val = serial_port_in(port, SCSMR) & 3;
if ((termios->c_cflag & CSIZE) == CS7) if ((termios->c_cflag & CSIZE) == CS7)
smr_val |= 0x40; smr_val |= 0x40;
...@@ -1825,19 +1822,19 @@ static void sci_set_termios(struct uart_port *port, struct ktermios *termios, ...@@ -1825,19 +1822,19 @@ static void sci_set_termios(struct uart_port *port, struct ktermios *termios,
uart_update_timeout(port, termios->c_cflag, baud); uart_update_timeout(port, termios->c_cflag, baud);
sci_out(port, SCSMR, smr_val); serial_port_out(port, SCSMR, smr_val);
dev_dbg(port->dev, "%s: SMR %x, t %x, SCSCR %x\n", __func__, smr_val, t, dev_dbg(port->dev, "%s: SMR %x, t %x, SCSCR %x\n", __func__, smr_val, t,
s->cfg->scscr); s->cfg->scscr);
if (t > 0) { if (t > 0) {
if (t >= 256) { if (t >= 256) {
sci_out(port, SCSMR, (sci_in(port, SCSMR) & ~3) | 1); serial_port_out(port, SCSMR, (serial_port_in(port, SCSMR) & ~3) | 1);
t >>= 2; t >>= 2;
} else } else
sci_out(port, SCSMR, sci_in(port, SCSMR) & ~3); serial_port_out(port, SCSMR, serial_port_in(port, SCSMR) & ~3);
sci_out(port, SCBRR, t); serial_port_out(port, SCBRR, t);
udelay((1000000+(baud-1)) / baud); /* Wait one bit interval */ udelay((1000000+(baud-1)) / baud); /* Wait one bit interval */
} }
...@@ -1845,7 +1842,7 @@ static void sci_set_termios(struct uart_port *port, struct ktermios *termios, ...@@ -1845,7 +1842,7 @@ static void sci_set_termios(struct uart_port *port, struct ktermios *termios,
reg = sci_getreg(port, SCFCR); reg = sci_getreg(port, SCFCR);
if (reg->size) { if (reg->size) {
unsigned short ctrl = sci_in(port, SCFCR); unsigned short ctrl = serial_port_in(port, SCFCR);
if (s->cfg->capabilities & SCIx_HAVE_RTSCTS) { if (s->cfg->capabilities & SCIx_HAVE_RTSCTS) {
if (termios->c_cflag & CRTSCTS) if (termios->c_cflag & CRTSCTS)
...@@ -1861,10 +1858,10 @@ static void sci_set_termios(struct uart_port *port, struct ktermios *termios, ...@@ -1861,10 +1858,10 @@ static void sci_set_termios(struct uart_port *port, struct ktermios *termios,
*/ */
ctrl &= ~(SCFCR_RFRST | SCFCR_TFRST); ctrl &= ~(SCFCR_RFRST | SCFCR_TFRST);
sci_out(port, SCFCR, ctrl); serial_port_out(port, SCFCR, ctrl);
} }
sci_out(port, SCSCR, s->cfg->scscr); serial_port_out(port, SCSCR, s->cfg->scscr);
#ifdef CONFIG_SERIAL_SH_SCI_DMA #ifdef CONFIG_SERIAL_SH_SCI_DMA
/* /*
...@@ -2166,7 +2163,7 @@ static void serial_console_write(struct console *co, const char *s, ...@@ -2166,7 +2163,7 @@ static void serial_console_write(struct console *co, const char *s,
/* wait until fifo is empty and last bit has been transmitted */ /* wait until fifo is empty and last bit has been transmitted */
bits = SCxSR_TDxE(port) | SCxSR_TEND(port); bits = SCxSR_TDxE(port) | SCxSR_TEND(port);
while ((sci_in(port, SCxSR) & bits) != bits) while ((serial_port_in(port, SCxSR) & bits) != bits)
cpu_relax(); cpu_relax();
sci_port_disable(sci_port); sci_port_disable(sci_port);
...@@ -2260,12 +2257,12 @@ static int sci_runtime_suspend(struct device *dev) ...@@ -2260,12 +2257,12 @@ static int sci_runtime_suspend(struct device *dev)
if (uart_console(port)) { if (uart_console(port)) {
struct plat_sci_reg *reg; struct plat_sci_reg *reg;
sci_port->saved_smr = sci_in(port, SCSMR); sci_port->saved_smr = serial_port_in(port, SCSMR);
sci_port->saved_brr = sci_in(port, SCBRR); sci_port->saved_brr = serial_port_in(port, SCBRR);
reg = sci_getreg(port, SCFCR); reg = sci_getreg(port, SCFCR);
if (reg->size) if (reg->size)
sci_port->saved_fcr = sci_in(port, SCFCR); sci_port->saved_fcr = serial_port_in(port, SCFCR);
else else
sci_port->saved_fcr = 0; sci_port->saved_fcr = 0;
} }
...@@ -2279,13 +2276,13 @@ static int sci_runtime_resume(struct device *dev) ...@@ -2279,13 +2276,13 @@ static int sci_runtime_resume(struct device *dev)
if (uart_console(port)) { if (uart_console(port)) {
sci_reset(port); sci_reset(port);
sci_out(port, SCSMR, sci_port->saved_smr); serial_port_out(port, SCSMR, sci_port->saved_smr);
sci_out(port, SCBRR, sci_port->saved_brr); serial_port_out(port, SCBRR, sci_port->saved_brr);
if (sci_port->saved_fcr) if (sci_port->saved_fcr)
sci_out(port, SCFCR, sci_port->saved_fcr); serial_port_out(port, SCFCR, sci_port->saved_fcr);
sci_out(port, SCSCR, sci_port->cfg->scscr); serial_port_out(port, SCSCR, sci_port->cfg->scscr);
} }
return 0; return 0;
} }
......
...@@ -20,10 +20,10 @@ ...@@ -20,10 +20,10 @@
defined(CONFIG_ARCH_SH7372) || \ defined(CONFIG_ARCH_SH7372) || \
defined(CONFIG_ARCH_R8A7740) defined(CONFIG_ARCH_R8A7740)
# define SCxSR_RDxF_CLEAR(port) (sci_in(port, SCxSR) & 0xfffc) # define SCxSR_RDxF_CLEAR(port) (serial_port_in(port, SCxSR) & 0xfffc)
# define SCxSR_ERROR_CLEAR(port) (sci_in(port, SCxSR) & 0xfd73) # define SCxSR_ERROR_CLEAR(port) (serial_port_in(port, SCxSR) & 0xfd73)
# define SCxSR_TDxE_CLEAR(port) (sci_in(port, SCxSR) & 0xffdf) # define SCxSR_TDxE_CLEAR(port) (serial_port_in(port, SCxSR) & 0xffdf)
# define SCxSR_BREAK_CLEAR(port) (sci_in(port, SCxSR) & 0xffe3) # define SCxSR_BREAK_CLEAR(port) (serial_port_in(port, SCxSR) & 0xffe3)
#else #else
# define SCxSR_RDxF_CLEAR(port) (((port)->type == PORT_SCI) ? 0xbc : 0x00fc) # define SCxSR_RDxF_CLEAR(port) (((port)->type == PORT_SCI) ? 0xbc : 0x00fc)
# define SCxSR_ERROR_CLEAR(port) (((port)->type == PORT_SCI) ? 0xc4 : 0x0073) # define SCxSR_ERROR_CLEAR(port) (((port)->type == PORT_SCI) ? 0xc4 : 0x0073)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment