Commit f52b69f8 authored by Linus Torvalds's avatar Linus Torvalds

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

Pull SuperH updates from Paul Mundt.

* tag 'sh-for-linus' of git://github.com/pmundt/linux-sh: (25 commits)
  sh: Support I/O space swapping where needed.
  sh: use set_current_blocked() and block_sigmask()
  sh: no need to reset handler if SA_ONESHOT
  sh: intc: Fix up section mismatch for intc_ack_data
  sh: select ARCH_DISCARD_MEMBLOCK.
  sh: Consolidate duplicate _32/_64 unistd definitions.
  sh: ecovec: switch SDHI controllers to card polling
  sh: Avoid exporting unimplemented syscalls.
  sh: add platform_device for RSPI in setup-sh7757
  SH: pci-sh7780: enable big-endian operation.
  serial: sh-sci: fix a race of DMA submit_tx on transfer
  sh: dma: Collect up CHCR of SH7763, SH7764, SH7780 and SH7785
  sh: dma: Collect up CHCR of SH7723 and SH7730
  sh/next: Fix build fail by asm/system.h in asm/bitops.h
  arch/sh/drivers/dma/{dma-g2,dmabrg}.c: ensure arguments to request_irq and free_irq are compatible
  sh: cpufreq: Wire up scaling_available_freqs support.
  sh: cpufreq: notify about rate rounding fallback.
  sh: cpufreq: Support CPU clock frequency table.
  sh: cpufreq: struct device lookup from CPU topology.
  sh: cpufreq: percpu struct clk accounting.
  ...
parents 2f7fa1be b7e68d68
...@@ -5,6 +5,7 @@ config SUPERH ...@@ -5,6 +5,7 @@ config SUPERH
select HAVE_IDE if HAS_IOPORT select HAVE_IDE if HAS_IOPORT
select HAVE_MEMBLOCK select HAVE_MEMBLOCK
select HAVE_MEMBLOCK_NODE_MAP select HAVE_MEMBLOCK_NODE_MAP
select ARCH_DISCARD_MEMBLOCK
select HAVE_OPROFILE select HAVE_OPROFILE
select HAVE_GENERIC_DMA_COHERENT select HAVE_GENERIC_DMA_COHERENT
select HAVE_ARCH_TRACEHOOK select HAVE_ARCH_TRACEHOOK
...@@ -161,6 +162,9 @@ config NO_IOPORT ...@@ -161,6 +162,9 @@ config NO_IOPORT
config IO_TRAPPED config IO_TRAPPED
bool bool
config SWAP_IO_SPACE
bool
config DMA_COHERENT config DMA_COHERENT
bool bool
......
...@@ -522,11 +522,18 @@ static void sdhi0_set_pwr(struct platform_device *pdev, int state) ...@@ -522,11 +522,18 @@ static void sdhi0_set_pwr(struct platform_device *pdev, int state)
gpio_set_value(GPIO_PTB6, state); gpio_set_value(GPIO_PTB6, state);
} }
static int sdhi0_get_cd(struct platform_device *pdev)
{
return !gpio_get_value(GPIO_PTY7);
}
static struct sh_mobile_sdhi_info sdhi0_info = { static struct sh_mobile_sdhi_info sdhi0_info = {
.dma_slave_tx = SHDMA_SLAVE_SDHI0_TX, .dma_slave_tx = SHDMA_SLAVE_SDHI0_TX,
.dma_slave_rx = SHDMA_SLAVE_SDHI0_RX, .dma_slave_rx = SHDMA_SLAVE_SDHI0_RX,
.set_pwr = sdhi0_set_pwr, .set_pwr = sdhi0_set_pwr,
.tmio_caps = MMC_CAP_SDIO_IRQ | MMC_CAP_POWER_OFF_CARD, .tmio_caps = MMC_CAP_SDIO_IRQ | MMC_CAP_POWER_OFF_CARD |
MMC_CAP_NEEDS_POLL,
.get_cd = sdhi0_get_cd,
}; };
static struct resource sdhi0_resources[] = { static struct resource sdhi0_resources[] = {
...@@ -559,11 +566,18 @@ static void sdhi1_set_pwr(struct platform_device *pdev, int state) ...@@ -559,11 +566,18 @@ static void sdhi1_set_pwr(struct platform_device *pdev, int state)
gpio_set_value(GPIO_PTB7, state); gpio_set_value(GPIO_PTB7, state);
} }
static int sdhi1_get_cd(struct platform_device *pdev)
{
return !gpio_get_value(GPIO_PTW7);
}
static struct sh_mobile_sdhi_info sdhi1_info = { static struct sh_mobile_sdhi_info sdhi1_info = {
.dma_slave_tx = SHDMA_SLAVE_SDHI1_TX, .dma_slave_tx = SHDMA_SLAVE_SDHI1_TX,
.dma_slave_rx = SHDMA_SLAVE_SDHI1_RX, .dma_slave_rx = SHDMA_SLAVE_SDHI1_RX,
.tmio_caps = MMC_CAP_SDIO_IRQ | MMC_CAP_POWER_OFF_CARD, .tmio_caps = MMC_CAP_SDIO_IRQ | MMC_CAP_POWER_OFF_CARD |
MMC_CAP_NEEDS_POLL,
.set_pwr = sdhi1_set_pwr, .set_pwr = sdhi1_set_pwr,
.get_cd = sdhi1_get_cd,
}; };
static struct resource sdhi1_resources[] = { static struct resource sdhi1_resources[] = {
...@@ -1001,6 +1015,7 @@ extern char ecovec24_sdram_leave_end; ...@@ -1001,6 +1015,7 @@ extern char ecovec24_sdram_leave_end;
static int __init arch_setup(void) static int __init arch_setup(void)
{ {
struct clk *clk; struct clk *clk;
bool cn12_enabled = false;
/* register board specific self-refresh code */ /* register board specific self-refresh code */
sh_mobile_register_self_refresh(SUSP_SH_STANDBY | SUSP_SH_SF | sh_mobile_register_self_refresh(SUSP_SH_STANDBY | SUSP_SH_SF |
...@@ -1201,9 +1216,13 @@ static int __init arch_setup(void) ...@@ -1201,9 +1216,13 @@ static int __init arch_setup(void)
gpio_direction_input(GPIO_PTR5); gpio_direction_input(GPIO_PTR5);
gpio_direction_input(GPIO_PTR6); gpio_direction_input(GPIO_PTR6);
/* SD-card slot CN11 */
/* Card-detect, used on CN11, either with SDHI0 or with SPI */
gpio_request(GPIO_PTY7, NULL);
gpio_direction_input(GPIO_PTY7);
#if defined(CONFIG_MMC_SDHI) || defined(CONFIG_MMC_SDHI_MODULE) #if defined(CONFIG_MMC_SDHI) || defined(CONFIG_MMC_SDHI_MODULE)
/* enable SDHI0 on CN11 (needs DS2.4 set to ON) */ /* enable SDHI0 on CN11 (needs DS2.4 set to ON) */
gpio_request(GPIO_FN_SDHI0CD, NULL);
gpio_request(GPIO_FN_SDHI0WP, NULL); gpio_request(GPIO_FN_SDHI0WP, NULL);
gpio_request(GPIO_FN_SDHI0CMD, NULL); gpio_request(GPIO_FN_SDHI0CMD, NULL);
gpio_request(GPIO_FN_SDHI0CLK, NULL); gpio_request(GPIO_FN_SDHI0CLK, NULL);
...@@ -1213,23 +1232,6 @@ static int __init arch_setup(void) ...@@ -1213,23 +1232,6 @@ static int __init arch_setup(void)
gpio_request(GPIO_FN_SDHI0D0, NULL); gpio_request(GPIO_FN_SDHI0D0, NULL);
gpio_request(GPIO_PTB6, NULL); gpio_request(GPIO_PTB6, NULL);
gpio_direction_output(GPIO_PTB6, 0); gpio_direction_output(GPIO_PTB6, 0);
#if !defined(CONFIG_MMC_SH_MMCIF) && !defined(CONFIG_MMC_SH_MMCIF_MODULE)
/* enable SDHI1 on CN12 (needs DS2.6,7 set to ON,OFF) */
gpio_request(GPIO_FN_SDHI1CD, NULL);
gpio_request(GPIO_FN_SDHI1WP, NULL);
gpio_request(GPIO_FN_SDHI1CMD, NULL);
gpio_request(GPIO_FN_SDHI1CLK, NULL);
gpio_request(GPIO_FN_SDHI1D3, NULL);
gpio_request(GPIO_FN_SDHI1D2, NULL);
gpio_request(GPIO_FN_SDHI1D1, NULL);
gpio_request(GPIO_FN_SDHI1D0, NULL);
gpio_request(GPIO_PTB7, NULL);
gpio_direction_output(GPIO_PTB7, 0);
/* I/O buffer drive ability is high for SDHI1 */
__raw_writew((__raw_readw(IODRIVEA) & ~0x3000) | 0x2000 , IODRIVEA);
#endif /* CONFIG_MMC_SH_MMCIF */
#else #else
/* enable MSIOF0 on CN11 (needs DS2.4 set to OFF) */ /* enable MSIOF0 on CN11 (needs DS2.4 set to OFF) */
gpio_request(GPIO_FN_MSIOF0_TXD, NULL); gpio_request(GPIO_FN_MSIOF0_TXD, NULL);
...@@ -1241,12 +1243,51 @@ static int __init arch_setup(void) ...@@ -1241,12 +1243,51 @@ static int __init arch_setup(void)
gpio_direction_output(GPIO_PTB6, 0); /* disable power by default */ gpio_direction_output(GPIO_PTB6, 0); /* disable power by default */
gpio_request(GPIO_PTY6, NULL); /* write protect */ gpio_request(GPIO_PTY6, NULL); /* write protect */
gpio_direction_input(GPIO_PTY6); gpio_direction_input(GPIO_PTY6);
gpio_request(GPIO_PTY7, NULL); /* card detect */
gpio_direction_input(GPIO_PTY7);
spi_register_board_info(spi_bus, ARRAY_SIZE(spi_bus)); spi_register_board_info(spi_bus, ARRAY_SIZE(spi_bus));
#endif #endif
/* MMC/SD-card slot CN12 */
#if defined(CONFIG_MMC_SH_MMCIF) || defined(CONFIG_MMC_SH_MMCIF_MODULE)
/* enable MMCIF (needs DS2.6,7 set to OFF,ON) */
gpio_request(GPIO_FN_MMC_D7, NULL);
gpio_request(GPIO_FN_MMC_D6, NULL);
gpio_request(GPIO_FN_MMC_D5, NULL);
gpio_request(GPIO_FN_MMC_D4, NULL);
gpio_request(GPIO_FN_MMC_D3, NULL);
gpio_request(GPIO_FN_MMC_D2, NULL);
gpio_request(GPIO_FN_MMC_D1, NULL);
gpio_request(GPIO_FN_MMC_D0, NULL);
gpio_request(GPIO_FN_MMC_CLK, NULL);
gpio_request(GPIO_FN_MMC_CMD, NULL);
gpio_request(GPIO_PTB7, NULL);
gpio_direction_output(GPIO_PTB7, 0);
cn12_enabled = true;
#elif defined(CONFIG_MMC_SDHI) || defined(CONFIG_MMC_SDHI_MODULE)
/* enable SDHI1 on CN12 (needs DS2.6,7 set to ON,OFF) */
gpio_request(GPIO_FN_SDHI1WP, NULL);
gpio_request(GPIO_FN_SDHI1CMD, NULL);
gpio_request(GPIO_FN_SDHI1CLK, NULL);
gpio_request(GPIO_FN_SDHI1D3, NULL);
gpio_request(GPIO_FN_SDHI1D2, NULL);
gpio_request(GPIO_FN_SDHI1D1, NULL);
gpio_request(GPIO_FN_SDHI1D0, NULL);
gpio_request(GPIO_PTB7, NULL);
gpio_direction_output(GPIO_PTB7, 0);
/* Card-detect, used on CN12 with SDHI1 */
gpio_request(GPIO_PTW7, NULL);
gpio_direction_input(GPIO_PTW7);
cn12_enabled = true;
#endif
if (cn12_enabled)
/* I/O buffer drive ability is high for CN12 */
__raw_writew((__raw_readw(IODRIVEA) & ~0x3000) | 0x2000,
IODRIVEA);
/* enable Video */ /* enable Video */
gpio_request(GPIO_PTU2, NULL); gpio_request(GPIO_PTU2, NULL);
gpio_direction_output(GPIO_PTU2, 1); gpio_direction_output(GPIO_PTU2, 1);
...@@ -1305,25 +1346,6 @@ static int __init arch_setup(void) ...@@ -1305,25 +1346,6 @@ static int __init arch_setup(void)
gpio_request(GPIO_PTU5, NULL); gpio_request(GPIO_PTU5, NULL);
gpio_direction_output(GPIO_PTU5, 0); gpio_direction_output(GPIO_PTU5, 0);
#if defined(CONFIG_MMC_SH_MMCIF) || defined(CONFIG_MMC_SH_MMCIF_MODULE)
/* enable MMCIF (needs DS2.6,7 set to OFF,ON) */
gpio_request(GPIO_FN_MMC_D7, NULL);
gpio_request(GPIO_FN_MMC_D6, NULL);
gpio_request(GPIO_FN_MMC_D5, NULL);
gpio_request(GPIO_FN_MMC_D4, NULL);
gpio_request(GPIO_FN_MMC_D3, NULL);
gpio_request(GPIO_FN_MMC_D2, NULL);
gpio_request(GPIO_FN_MMC_D1, NULL);
gpio_request(GPIO_FN_MMC_D0, NULL);
gpio_request(GPIO_FN_MMC_CLK, NULL);
gpio_request(GPIO_FN_MMC_CMD, NULL);
gpio_request(GPIO_PTB7, NULL);
gpio_direction_output(GPIO_PTB7, 0);
/* I/O buffer drive ability is high for MMCIF */
__raw_writew((__raw_readw(IODRIVEA) & ~0x3000) | 0x2000 , IODRIVEA);
#endif
/* enable I2C device */ /* enable I2C device */
i2c_register_board_info(0, i2c0_devices, i2c_register_board_info(0, i2c0_devices,
ARRAY_SIZE(i2c0_devices)); ARRAY_SIZE(i2c0_devices));
......
...@@ -181,14 +181,14 @@ static int __init g2_dma_init(void) ...@@ -181,14 +181,14 @@ static int __init g2_dma_init(void)
ret = register_dmac(&g2_dma_info); ret = register_dmac(&g2_dma_info);
if (unlikely(ret != 0)) if (unlikely(ret != 0))
free_irq(HW_EVENT_G2_DMA, 0); free_irq(HW_EVENT_G2_DMA, &g2_dma_info);
return ret; return ret;
} }
static void __exit g2_dma_exit(void) static void __exit g2_dma_exit(void)
{ {
free_irq(HW_EVENT_G2_DMA, 0); free_irq(HW_EVENT_G2_DMA, &g2_dma_info);
unregister_dmac(&g2_dma_info); unregister_dmac(&g2_dma_info);
} }
......
...@@ -189,8 +189,8 @@ static int __init dmabrg_init(void) ...@@ -189,8 +189,8 @@ static int __init dmabrg_init(void)
if (ret == 0) if (ret == 0)
return ret; return ret;
free_irq(DMABRGI1, 0); free_irq(DMABRGI1, NULL);
out1: free_irq(DMABRGI0, 0); out1: free_irq(DMABRGI0, NULL);
out0: kfree(dmabrg_handlers); out0: kfree(dmabrg_handlers);
return ret; return ret;
} }
......
...@@ -21,6 +21,13 @@ ...@@ -21,6 +21,13 @@
#include <asm/mmu.h> #include <asm/mmu.h>
#include <asm/sizes.h> #include <asm/sizes.h>
#if defined(CONFIG_CPU_BIG_ENDIAN)
# define PCICR_ENDIANNESS SH4_PCICR_BSWP
#else
# define PCICR_ENDIANNESS 0
#endif
static struct resource sh7785_pci_resources[] = { static struct resource sh7785_pci_resources[] = {
{ {
.name = "PCI IO", .name = "PCI IO",
...@@ -254,7 +261,7 @@ static int __init sh7780_pci_init(void) ...@@ -254,7 +261,7 @@ static int __init sh7780_pci_init(void)
__raw_writel(PCIECR_ENBL, PCIECR); __raw_writel(PCIECR_ENBL, PCIECR);
/* Reset */ /* Reset */
__raw_writel(SH4_PCICR_PREFIX | SH4_PCICR_PRST, __raw_writel(SH4_PCICR_PREFIX | SH4_PCICR_PRST | PCICR_ENDIANNESS,
chan->reg_base + SH4_PCICR); chan->reg_base + SH4_PCICR);
/* /*
...@@ -290,7 +297,8 @@ static int __init sh7780_pci_init(void) ...@@ -290,7 +297,8 @@ static int __init sh7780_pci_init(void)
* Now throw it in to register initialization mode and * Now throw it in to register initialization mode and
* start the real work. * start the real work.
*/ */
__raw_writel(SH4_PCICR_PREFIX, chan->reg_base + SH4_PCICR); __raw_writel(SH4_PCICR_PREFIX | PCICR_ENDIANNESS,
chan->reg_base + SH4_PCICR);
memphys = __pa(memory_start); memphys = __pa(memory_start);
memsize = roundup_pow_of_two(memory_end - memory_start); memsize = roundup_pow_of_two(memory_end - memory_start);
...@@ -380,7 +388,8 @@ static int __init sh7780_pci_init(void) ...@@ -380,7 +388,8 @@ static int __init sh7780_pci_init(void)
* Initialization mode complete, release the control register and * Initialization mode complete, release the control register and
* enable round robin mode to stop device overruns/starvation. * enable round robin mode to stop device overruns/starvation.
*/ */
__raw_writel(SH4_PCICR_PREFIX | SH4_PCICR_CFIN | SH4_PCICR_FTO, __raw_writel(SH4_PCICR_PREFIX | SH4_PCICR_CFIN | SH4_PCICR_FTO |
PCICR_ENDIANNESS,
chan->reg_base + SH4_PCICR); chan->reg_base + SH4_PCICR);
ret = register_pci_controller(chan); ret = register_pci_controller(chan);
......
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
#define __IO_PREFIX generic #define __IO_PREFIX generic
#include <asm/io_generic.h> #include <asm/io_generic.h>
#include <asm/io_trapped.h> #include <asm/io_trapped.h>
#include <mach/mangle-port.h>
#define __raw_writeb(v,a) (__chk_io_ptr(a), *(volatile u8 __force *)(a) = (v)) #define __raw_writeb(v,a) (__chk_io_ptr(a), *(volatile u8 __force *)(a) = (v))
#define __raw_writew(v,a) (__chk_io_ptr(a), *(volatile u16 __force *)(a) = (v)) #define __raw_writew(v,a) (__chk_io_ptr(a), *(volatile u16 __force *)(a) = (v))
...@@ -34,21 +35,15 @@ ...@@ -34,21 +35,15 @@
#define __raw_readl(a) (__chk_io_ptr(a), *(volatile u32 __force *)(a)) #define __raw_readl(a) (__chk_io_ptr(a), *(volatile u32 __force *)(a))
#define __raw_readq(a) (__chk_io_ptr(a), *(volatile u64 __force *)(a)) #define __raw_readq(a) (__chk_io_ptr(a), *(volatile u64 __force *)(a))
#define readb_relaxed(c) ({ u8 __v = __raw_readb(c); __v; }) #define readb_relaxed(c) ({ u8 __v = ioswabb(__raw_readb(c)); __v; })
#define readw_relaxed(c) ({ u16 __v = le16_to_cpu((__force __le16) \ #define readw_relaxed(c) ({ u16 __v = ioswabw(__raw_readw(c)); __v; })
__raw_readw(c)); __v; }) #define readl_relaxed(c) ({ u32 __v = ioswabl(__raw_readl(c)); __v; })
#define readl_relaxed(c) ({ u32 __v = le32_to_cpu((__force __le32) \ #define readq_relaxed(c) ({ u64 __v = ioswabq(__raw_readq(c)); __v; })
__raw_readl(c)); __v; })
#define readq_relaxed(c) ({ u64 __v = le64_to_cpu((__force __le64) \ #define writeb_relaxed(v,c) ((void)__raw_writeb((__force u8)ioswabb(v),c))
__raw_readq(c)); __v; }) #define writew_relaxed(v,c) ((void)__raw_writew((__force u16)ioswabw(v),c))
#define writel_relaxed(v,c) ((void)__raw_writel((__force u32)ioswabl(v),c))
#define writeb_relaxed(v,c) ((void)__raw_writeb(v,c)) #define writeq_relaxed(v,c) ((void)__raw_writeq((__force u64)ioswabq(v),c))
#define writew_relaxed(v,c) ((void)__raw_writew((__force u16) \
cpu_to_le16(v),c))
#define writel_relaxed(v,c) ((void)__raw_writel((__force u32) \
cpu_to_le32(v),c))
#define writeq_relaxed(v,c) ((void)__raw_writeq((__force u64) \
cpu_to_le64(v),c))
#define readb(a) ({ u8 r_ = readb_relaxed(a); rmb(); r_; }) #define readb(a) ({ u8 r_ = readb_relaxed(a); rmb(); r_; })
#define readw(a) ({ u16 r_ = readw_relaxed(a); rmb(); r_; }) #define readw(a) ({ u16 r_ = readw_relaxed(a); rmb(); r_; })
......
#ifdef __KERNEL__ #ifdef __KERNEL__
# ifdef CONFIG_SUPERH32 # ifdef CONFIG_SUPERH32
# include "unistd_32.h" # include "unistd_32.h"
# define __ARCH_WANT_SYS_RT_SIGSUSPEND
# else # else
# include "unistd_64.h" # include "unistd_64.h"
# endif # endif
# define __ARCH_WANT_IPC_PARSE_VERSION
# define __ARCH_WANT_OLD_READDIR
# define __ARCH_WANT_OLD_STAT
# define __ARCH_WANT_STAT64
# define __ARCH_WANT_SYS_ALARM
# define __ARCH_WANT_SYS_GETHOSTNAME
# define __ARCH_WANT_SYS_IPC
# define __ARCH_WANT_SYS_PAUSE
# define __ARCH_WANT_SYS_SGETMASK
# define __ARCH_WANT_SYS_SIGNAL
# define __ARCH_WANT_SYS_TIME
# define __ARCH_WANT_SYS_UTIME
# define __ARCH_WANT_SYS_WAITPID
# define __ARCH_WANT_SYS_SOCKETCALL
# define __ARCH_WANT_SYS_FADVISE64
# define __ARCH_WANT_SYS_GETPGRP
# define __ARCH_WANT_SYS_LLSEEK
# define __ARCH_WANT_SYS_NICE
# define __ARCH_WANT_SYS_OLD_GETRLIMIT
# define __ARCH_WANT_SYS_OLD_UNAME
# define __ARCH_WANT_SYS_OLDUMOUNT
# define __ARCH_WANT_SYS_SIGPENDING
# define __ARCH_WANT_SYS_SIGPROCMASK
# define __ARCH_WANT_SYS_RT_SIGACTION
/*
* "Conditional" syscalls
*
* What we want is __attribute__((weak,alias("sys_ni_syscall"))),
* but it doesn't work on all toolchains, so we just do it by hand
*/
# define cond_syscall(x) asm(".weak\t" #x "\n\t.set\t" #x ",sys_ni_syscall")
#else #else
# ifdef __SH5__ # ifdef __SH5__
# include "unistd_64.h" # include "unistd_64.h"
......
#ifndef __ASM_SH_UNISTD_H #ifndef __ASM_SH_UNISTD_32_H
#define __ASM_SH_UNISTD_H #define __ASM_SH_UNISTD_32_H
/* /*
* Copyright (C) 1999 Niibe Yutaka * Copyright (C) 1999 Niibe Yutaka
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
#define __NR_mknod 14 #define __NR_mknod 14
#define __NR_chmod 15 #define __NR_chmod 15
#define __NR_lchown 16 #define __NR_lchown 16
#define __NR_break 17 /* 17 was sys_break */
#define __NR_oldstat 18 #define __NR_oldstat 18
#define __NR_lseek 19 #define __NR_lseek 19
#define __NR_getpid 20 #define __NR_getpid 20
...@@ -40,11 +40,11 @@ ...@@ -40,11 +40,11 @@
#define __NR_oldfstat 28 #define __NR_oldfstat 28
#define __NR_pause 29 #define __NR_pause 29
#define __NR_utime 30 #define __NR_utime 30
#define __NR_stty 31 /* 31 was sys_stty */
#define __NR_gtty 32 /* 32 was sys_gtty */
#define __NR_access 33 #define __NR_access 33
#define __NR_nice 34 #define __NR_nice 34
#define __NR_ftime 35 /* 35 was sys_ftime */
#define __NR_sync 36 #define __NR_sync 36
#define __NR_kill 37 #define __NR_kill 37
#define __NR_rename 38 #define __NR_rename 38
...@@ -53,7 +53,7 @@ ...@@ -53,7 +53,7 @@
#define __NR_dup 41 #define __NR_dup 41
#define __NR_pipe 42 #define __NR_pipe 42
#define __NR_times 43 #define __NR_times 43
#define __NR_prof 44 /* 44 was sys_prof */
#define __NR_brk 45 #define __NR_brk 45
#define __NR_setgid 46 #define __NR_setgid 46
#define __NR_getgid 47 #define __NR_getgid 47
...@@ -62,13 +62,13 @@ ...@@ -62,13 +62,13 @@
#define __NR_getegid 50 #define __NR_getegid 50
#define __NR_acct 51 #define __NR_acct 51
#define __NR_umount2 52 #define __NR_umount2 52
#define __NR_lock 53 /* 53 was sys_lock */
#define __NR_ioctl 54 #define __NR_ioctl 54
#define __NR_fcntl 55 #define __NR_fcntl 55
#define __NR_mpx 56 /* 56 was sys_mpx */
#define __NR_setpgid 57 #define __NR_setpgid 57
#define __NR_ulimit 58 /* 58 was sys_ulimit */
#define __NR_oldolduname 59 /* 59 was sys_olduname */
#define __NR_umask 60 #define __NR_umask 60
#define __NR_chroot 61 #define __NR_chroot 61
#define __NR_ustat 62 #define __NR_ustat 62
...@@ -91,7 +91,7 @@ ...@@ -91,7 +91,7 @@
#define __NR_settimeofday 79 #define __NR_settimeofday 79
#define __NR_getgroups 80 #define __NR_getgroups 80
#define __NR_setgroups 81 #define __NR_setgroups 81
#define __NR_select 82 /* 82 was sys_oldselect */
#define __NR_symlink 83 #define __NR_symlink 83
#define __NR_oldlstat 84 #define __NR_oldlstat 84
#define __NR_readlink 85 #define __NR_readlink 85
...@@ -107,10 +107,10 @@ ...@@ -107,10 +107,10 @@
#define __NR_fchown 95 #define __NR_fchown 95
#define __NR_getpriority 96 #define __NR_getpriority 96
#define __NR_setpriority 97 #define __NR_setpriority 97
#define __NR_profil 98 /* 98 was sys_profil */
#define __NR_statfs 99 #define __NR_statfs 99
#define __NR_fstatfs 100 #define __NR_fstatfs 100
#define __NR_ioperm 101 /* 101 was sys_ioperm */
#define __NR_socketcall 102 #define __NR_socketcall 102
#define __NR_syslog 103 #define __NR_syslog 103
#define __NR_setitimer 104 #define __NR_setitimer 104
...@@ -119,10 +119,10 @@ ...@@ -119,10 +119,10 @@
#define __NR_lstat 107 #define __NR_lstat 107
#define __NR_fstat 108 #define __NR_fstat 108
#define __NR_olduname 109 #define __NR_olduname 109
#define __NR_iopl 110 /* 110 was sys_iopl */
#define __NR_vhangup 111 #define __NR_vhangup 111
#define __NR_idle 112 /* 112 was sys_idle */
#define __NR_vm86old 113 /* 113 was sys_vm86old */
#define __NR_wait4 114 #define __NR_wait4 114
#define __NR_swapoff 115 #define __NR_swapoff 115
#define __NR_sysinfo 116 #define __NR_sysinfo 116
...@@ -136,17 +136,17 @@ ...@@ -136,17 +136,17 @@
#define __NR_adjtimex 124 #define __NR_adjtimex 124
#define __NR_mprotect 125 #define __NR_mprotect 125
#define __NR_sigprocmask 126 #define __NR_sigprocmask 126
#define __NR_create_module 127 /* 127 was sys_create_module */
#define __NR_init_module 128 #define __NR_init_module 128
#define __NR_delete_module 129 #define __NR_delete_module 129
#define __NR_get_kernel_syms 130 /* 130 was sys_get_kernel_syms */
#define __NR_quotactl 131 #define __NR_quotactl 131
#define __NR_getpgid 132 #define __NR_getpgid 132
#define __NR_fchdir 133 #define __NR_fchdir 133
#define __NR_bdflush 134 #define __NR_bdflush 134
#define __NR_sysfs 135 #define __NR_sysfs 135
#define __NR_personality 136 #define __NR_personality 136
#define __NR_afs_syscall 137 /* Syscall for Andrew File System */ /* 137 was sys_afs_syscall */
#define __NR_setfsuid 138 #define __NR_setfsuid 138
#define __NR_setfsgid 139 #define __NR_setfsgid 139
#define __NR__llseek 140 #define __NR__llseek 140
...@@ -175,8 +175,8 @@ ...@@ -175,8 +175,8 @@
#define __NR_mremap 163 #define __NR_mremap 163
#define __NR_setresuid 164 #define __NR_setresuid 164
#define __NR_getresuid 165 #define __NR_getresuid 165
#define __NR_vm86 166 /* 166 was sys_vm86 */
#define __NR_query_module 167 /* 167 was sys_query_module */
#define __NR_poll 168 #define __NR_poll 168
#define __NR_nfsservctl 169 #define __NR_nfsservctl 169
#define __NR_setresgid 170 #define __NR_setresgid 170
...@@ -197,8 +197,8 @@ ...@@ -197,8 +197,8 @@
#define __NR_capset 185 #define __NR_capset 185
#define __NR_sigaltstack 186 #define __NR_sigaltstack 186
#define __NR_sendfile 187 #define __NR_sendfile 187
#define __NR_streams1 188 /* some people actually want it */ /* 188 reserved for sys_getpmsg */
#define __NR_streams2 189 /* some people actually want it */ /* 189 reserved for sys_putpmsg */
#define __NR_vfork 190 #define __NR_vfork 190
#define __NR_ugetrlimit 191 /* SuS compliant getrlimit */ #define __NR_ugetrlimit 191 /* SuS compliant getrlimit */
#define __NR_mmap2 192 #define __NR_mmap2 192
...@@ -231,7 +231,8 @@ ...@@ -231,7 +231,8 @@
#define __NR_madvise 219 #define __NR_madvise 219
#define __NR_getdents64 220 #define __NR_getdents64 220
#define __NR_fcntl64 221 #define __NR_fcntl64 221
/* 223 is unused */ /* 222 is reserved for tux */
/* 223 is unused */
#define __NR_gettid 224 #define __NR_gettid 224
#define __NR_readahead 225 #define __NR_readahead 225
#define __NR_setxattr 226 #define __NR_setxattr 226
...@@ -251,15 +252,15 @@ ...@@ -251,15 +252,15 @@
#define __NR_futex 240 #define __NR_futex 240
#define __NR_sched_setaffinity 241 #define __NR_sched_setaffinity 241
#define __NR_sched_getaffinity 242 #define __NR_sched_getaffinity 242
#define __NR_set_thread_area 243 /* 243 is reserved for set_thread_area */
#define __NR_get_thread_area 244 /* 244 is reserved for get_thread_area */
#define __NR_io_setup 245 #define __NR_io_setup 245
#define __NR_io_destroy 246 #define __NR_io_destroy 246
#define __NR_io_getevents 247 #define __NR_io_getevents 247
#define __NR_io_submit 248 #define __NR_io_submit 248
#define __NR_io_cancel 249 #define __NR_io_cancel 249
#define __NR_fadvise64 250 #define __NR_fadvise64 250
/* 251 is unused */
#define __NR_exit_group 252 #define __NR_exit_group 252
#define __NR_lookup_dcookie 253 #define __NR_lookup_dcookie 253
#define __NR_epoll_create 254 #define __NR_epoll_create 254
...@@ -281,7 +282,7 @@ ...@@ -281,7 +282,7 @@
#define __NR_tgkill 270 #define __NR_tgkill 270
#define __NR_utimes 271 #define __NR_utimes 271
#define __NR_fadvise64_64 272 #define __NR_fadvise64_64 272
#define __NR_vserver 273 /* 273 is reserved for vserver */
#define __NR_mbind 274 #define __NR_mbind 274
#define __NR_get_mempolicy 275 #define __NR_get_mempolicy 275
#define __NR_set_mempolicy 276 #define __NR_set_mempolicy 276
...@@ -301,7 +302,7 @@ ...@@ -301,7 +302,7 @@
#define __NR_inotify_init 290 #define __NR_inotify_init 290
#define __NR_inotify_add_watch 291 #define __NR_inotify_add_watch 291
#define __NR_inotify_rm_watch 292 #define __NR_inotify_rm_watch 292
/* 293 is unused */ /* 293 is unused */
#define __NR_migrate_pages 294 #define __NR_migrate_pages 294
#define __NR_openat 295 #define __NR_openat 295
#define __NR_mkdirat 296 #define __NR_mkdirat 296
...@@ -380,43 +381,4 @@ ...@@ -380,43 +381,4 @@
#define NR_syscalls 367 #define NR_syscalls 367
#ifdef __KERNEL__ #endif /* __ASM_SH_UNISTD_32_H */
#define __ARCH_WANT_IPC_PARSE_VERSION
#define __ARCH_WANT_OLD_READDIR
#define __ARCH_WANT_OLD_STAT
#define __ARCH_WANT_STAT64
#define __ARCH_WANT_SYS_ALARM
#define __ARCH_WANT_SYS_GETHOSTNAME
#define __ARCH_WANT_SYS_IPC
#define __ARCH_WANT_SYS_PAUSE
#define __ARCH_WANT_SYS_SGETMASK
#define __ARCH_WANT_SYS_SIGNAL
#define __ARCH_WANT_SYS_TIME
#define __ARCH_WANT_SYS_UTIME
#define __ARCH_WANT_SYS_WAITPID
#define __ARCH_WANT_SYS_SOCKETCALL
#define __ARCH_WANT_SYS_FADVISE64
#define __ARCH_WANT_SYS_GETPGRP
#define __ARCH_WANT_SYS_LLSEEK
#define __ARCH_WANT_SYS_NICE
#define __ARCH_WANT_SYS_OLD_GETRLIMIT
#define __ARCH_WANT_SYS_OLD_UNAME
#define __ARCH_WANT_SYS_OLDUMOUNT
#define __ARCH_WANT_SYS_SIGPENDING
#define __ARCH_WANT_SYS_SIGPROCMASK
#define __ARCH_WANT_SYS_RT_SIGACTION
#define __ARCH_WANT_SYS_RT_SIGSUSPEND
/*
* "Conditional" syscalls
*
* What we want is __attribute__((weak,alias("sys_ni_syscall"))),
* but it doesn't work on all toolchains, so we just do it by hand
*/
#ifndef cond_syscall
#define cond_syscall(x) asm(".weak\t" #x "\n\t.set\t" #x ",sys_ni_syscall")
#endif
#endif /* __KERNEL__ */
#endif /* __ASM_SH_UNISTD_H */
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
#define __NR_mknod 14 #define __NR_mknod 14
#define __NR_chmod 15 #define __NR_chmod 15
#define __NR_lchown 16 #define __NR_lchown 16
#define __NR_break 17 /* 17 was sys_break */
#define __NR_oldstat 18 #define __NR_oldstat 18
#define __NR_lseek 19 #define __NR_lseek 19
#define __NR_getpid 20 #define __NR_getpid 20
...@@ -45,11 +45,11 @@ ...@@ -45,11 +45,11 @@
#define __NR_oldfstat 28 #define __NR_oldfstat 28
#define __NR_pause 29 #define __NR_pause 29
#define __NR_utime 30 #define __NR_utime 30
#define __NR_stty 31 /* 31 was sys_stty */
#define __NR_gtty 32 /* 32 was sys_gtty */
#define __NR_access 33 #define __NR_access 33
#define __NR_nice 34 #define __NR_nice 34
#define __NR_ftime 35 /* 35 was sys_ftime */
#define __NR_sync 36 #define __NR_sync 36
#define __NR_kill 37 #define __NR_kill 37
#define __NR_rename 38 #define __NR_rename 38
...@@ -58,7 +58,7 @@ ...@@ -58,7 +58,7 @@
#define __NR_dup 41 #define __NR_dup 41
#define __NR_pipe 42 #define __NR_pipe 42
#define __NR_times 43 #define __NR_times 43
#define __NR_prof 44 /* 44 was sys_prof */
#define __NR_brk 45 #define __NR_brk 45
#define __NR_setgid 46 #define __NR_setgid 46
#define __NR_getgid 47 #define __NR_getgid 47
...@@ -67,13 +67,13 @@ ...@@ -67,13 +67,13 @@
#define __NR_getegid 50 #define __NR_getegid 50
#define __NR_acct 51 #define __NR_acct 51
#define __NR_umount2 52 #define __NR_umount2 52
#define __NR_lock 53 /* 53 was sys_lock */
#define __NR_ioctl 54 #define __NR_ioctl 54
#define __NR_fcntl 55 #define __NR_fcntl 55
#define __NR_mpx 56 /* 56 was sys_mpx */
#define __NR_setpgid 57 #define __NR_setpgid 57
#define __NR_ulimit 58 /* 58 was sys_ulimit */
#define __NR_oldolduname 59 /* 59 was sys_olduname */
#define __NR_umask 60 #define __NR_umask 60
#define __NR_chroot 61 #define __NR_chroot 61
#define __NR_ustat 62 #define __NR_ustat 62
...@@ -96,7 +96,7 @@ ...@@ -96,7 +96,7 @@
#define __NR_settimeofday 79 #define __NR_settimeofday 79
#define __NR_getgroups 80 #define __NR_getgroups 80
#define __NR_setgroups 81 #define __NR_setgroups 81
#define __NR_select 82 /* 82 was sys_select */
#define __NR_symlink 83 #define __NR_symlink 83
#define __NR_oldlstat 84 #define __NR_oldlstat 84
#define __NR_readlink 85 #define __NR_readlink 85
...@@ -112,10 +112,10 @@ ...@@ -112,10 +112,10 @@
#define __NR_fchown 95 #define __NR_fchown 95
#define __NR_getpriority 96 #define __NR_getpriority 96
#define __NR_setpriority 97 #define __NR_setpriority 97
#define __NR_profil 98 /* 98 was sys_profil */
#define __NR_statfs 99 #define __NR_statfs 99
#define __NR_fstatfs 100 #define __NR_fstatfs 100
#define __NR_ioperm 101 /* 101 was sys_ioperm */
#define __NR_socketcall 102 /* old implementation of socket systemcall */ #define __NR_socketcall 102 /* old implementation of socket systemcall */
#define __NR_syslog 103 #define __NR_syslog 103
#define __NR_setitimer 104 #define __NR_setitimer 104
...@@ -124,10 +124,10 @@ ...@@ -124,10 +124,10 @@
#define __NR_lstat 107 #define __NR_lstat 107
#define __NR_fstat 108 #define __NR_fstat 108
#define __NR_olduname 109 #define __NR_olduname 109
#define __NR_iopl 110 /* 110 was sys_iopl */
#define __NR_vhangup 111 #define __NR_vhangup 111
#define __NR_idle 112 /* 112 was sys_idle */
#define __NR_vm86old 113 /* 113 was sys_vm86old */
#define __NR_wait4 114 #define __NR_wait4 114
#define __NR_swapoff 115 #define __NR_swapoff 115
#define __NR_sysinfo 116 #define __NR_sysinfo 116
...@@ -141,17 +141,17 @@ ...@@ -141,17 +141,17 @@
#define __NR_adjtimex 124 #define __NR_adjtimex 124
#define __NR_mprotect 125 #define __NR_mprotect 125
#define __NR_sigprocmask 126 #define __NR_sigprocmask 126
#define __NR_create_module 127 /* 127 was sys_create_module */
#define __NR_init_module 128 #define __NR_init_module 128
#define __NR_delete_module 129 #define __NR_delete_module 129
#define __NR_get_kernel_syms 130 /* 130 was sys_get_kernel_syms */
#define __NR_quotactl 131 #define __NR_quotactl 131
#define __NR_getpgid 132 #define __NR_getpgid 132
#define __NR_fchdir 133 #define __NR_fchdir 133
#define __NR_bdflush 134 #define __NR_bdflush 134
#define __NR_sysfs 135 #define __NR_sysfs 135
#define __NR_personality 136 #define __NR_personality 136
#define __NR_afs_syscall 137 /* Syscall for Andrew File System */ /* 137 was sys_afs_syscall */
#define __NR_setfsuid 138 #define __NR_setfsuid 138
#define __NR_setfsgid 139 #define __NR_setfsgid 139
#define __NR__llseek 140 #define __NR__llseek 140
...@@ -180,8 +180,8 @@ ...@@ -180,8 +180,8 @@
#define __NR_mremap 163 #define __NR_mremap 163
#define __NR_setresuid 164 #define __NR_setresuid 164
#define __NR_getresuid 165 #define __NR_getresuid 165
#define __NR_vm86 166 /* 166 was sys_vm86 */
#define __NR_query_module 167 /* 167 was sys_query_module */
#define __NR_poll 168 #define __NR_poll 168
#define __NR_nfsservctl 169 #define __NR_nfsservctl 169
#define __NR_setresgid 170 #define __NR_setresgid 170
...@@ -202,8 +202,8 @@ ...@@ -202,8 +202,8 @@
#define __NR_capset 185 #define __NR_capset 185
#define __NR_sigaltstack 186 #define __NR_sigaltstack 186
#define __NR_sendfile 187 #define __NR_sendfile 187
#define __NR_streams1 188 /* some people actually want it */ /* 188 reserved for getpmsg */
#define __NR_streams2 189 /* some people actually want it */ /* 189 reserved for putpmsg */
#define __NR_vfork 190 #define __NR_vfork 190
#define __NR_ugetrlimit 191 /* SuS compliant getrlimit */ #define __NR_ugetrlimit 191 /* SuS compliant getrlimit */
#define __NR_mmap2 192 #define __NR_mmap2 192
...@@ -262,16 +262,15 @@ ...@@ -262,16 +262,15 @@
#define __NR_msgrcv 241 #define __NR_msgrcv 241
#define __NR_msgget 242 #define __NR_msgget 242
#define __NR_msgctl 243 #define __NR_msgctl 243
#if 0 #define __NR_shmat 244
#define __NR_shmatcall 244
#endif
#define __NR_shmdt 245 #define __NR_shmdt 245
#define __NR_shmget 246 #define __NR_shmget 246
#define __NR_shmctl 247 #define __NR_shmctl 247
#define __NR_getdents64 248 #define __NR_getdents64 248
#define __NR_fcntl64 249 #define __NR_fcntl64 249
/* 223 is unused */ /* 250 is reserved for tux */
/* 251 is unused */
#define __NR_gettid 252 #define __NR_gettid 252
#define __NR_readahead 253 #define __NR_readahead 253
#define __NR_setxattr 254 #define __NR_setxattr 254
...@@ -291,14 +290,15 @@ ...@@ -291,14 +290,15 @@
#define __NR_futex 268 #define __NR_futex 268
#define __NR_sched_setaffinity 269 #define __NR_sched_setaffinity 269
#define __NR_sched_getaffinity 270 #define __NR_sched_getaffinity 270
#define __NR_set_thread_area 271 /* 271 is reserved for set_thread_area */
#define __NR_get_thread_area 272 /* 272 is reserved for get_thread_area */
#define __NR_io_setup 273 #define __NR_io_setup 273
#define __NR_io_destroy 274 #define __NR_io_destroy 274
#define __NR_io_getevents 275 #define __NR_io_getevents 275
#define __NR_io_submit 276 #define __NR_io_submit 276
#define __NR_io_cancel 277 #define __NR_io_cancel 277
#define __NR_fadvise64 278 #define __NR_fadvise64 278
/* 279 is unused */
#define __NR_exit_group 280 #define __NR_exit_group 280
#define __NR_lookup_dcookie 281 #define __NR_lookup_dcookie 281
...@@ -321,17 +321,17 @@ ...@@ -321,17 +321,17 @@
#define __NR_tgkill 298 #define __NR_tgkill 298
#define __NR_utimes 299 #define __NR_utimes 299
#define __NR_fadvise64_64 300 #define __NR_fadvise64_64 300
#define __NR_vserver 301 /* 301 is reserved for vserver */
#define __NR_mbind 302 /* 302 is reserved for mbind */
#define __NR_get_mempolicy 303 /* 303 is reserved for get_mempolicy */
#define __NR_set_mempolicy 304 /* 304 is reserved for set_mempolicy */
#define __NR_mq_open 305 #define __NR_mq_open 305
#define __NR_mq_unlink (__NR_mq_open+1) #define __NR_mq_unlink (__NR_mq_open+1)
#define __NR_mq_timedsend (__NR_mq_open+2) #define __NR_mq_timedsend (__NR_mq_open+2)
#define __NR_mq_timedreceive (__NR_mq_open+3) #define __NR_mq_timedreceive (__NR_mq_open+3)
#define __NR_mq_notify (__NR_mq_open+4) #define __NR_mq_notify (__NR_mq_open+4)
#define __NR_mq_getsetattr (__NR_mq_open+5) #define __NR_mq_getsetattr (__NR_mq_open+5)
#define __NR_kexec_load 311 /* 311 is reserved for kexec */
#define __NR_waitid 312 #define __NR_waitid 312
#define __NR_add_key 313 #define __NR_add_key 313
#define __NR_request_key 314 #define __NR_request_key 314
...@@ -341,7 +341,7 @@ ...@@ -341,7 +341,7 @@
#define __NR_inotify_init 318 #define __NR_inotify_init 318
#define __NR_inotify_add_watch 319 #define __NR_inotify_add_watch 319
#define __NR_inotify_rm_watch 320 #define __NR_inotify_rm_watch 320
/* 321 is unused */ /* 321 is unused */
#define __NR_migrate_pages 322 #define __NR_migrate_pages 322
#define __NR_openat 323 #define __NR_openat 323
#define __NR_mkdirat 324 #define __NR_mkdirat 324
...@@ -399,44 +399,6 @@ ...@@ -399,44 +399,6 @@
#define __NR_process_vm_readv 376 #define __NR_process_vm_readv 376
#define __NR_process_vm_writev 377 #define __NR_process_vm_writev 377
#ifdef __KERNEL__
#define NR_syscalls 378 #define NR_syscalls 378
#define __ARCH_WANT_IPC_PARSE_VERSION
#define __ARCH_WANT_OLD_READDIR
#define __ARCH_WANT_OLD_STAT
#define __ARCH_WANT_STAT64
#define __ARCH_WANT_SYS_ALARM
#define __ARCH_WANT_SYS_GETHOSTNAME
#define __ARCH_WANT_SYS_IPC
#define __ARCH_WANT_SYS_PAUSE
#define __ARCH_WANT_SYS_SGETMASK
#define __ARCH_WANT_SYS_SIGNAL
#define __ARCH_WANT_SYS_TIME
#define __ARCH_WANT_SYS_UTIME
#define __ARCH_WANT_SYS_WAITPID
#define __ARCH_WANT_SYS_SOCKETCALL
#define __ARCH_WANT_SYS_FADVISE64
#define __ARCH_WANT_SYS_GETPGRP
#define __ARCH_WANT_SYS_LLSEEK
#define __ARCH_WANT_SYS_NICE
#define __ARCH_WANT_SYS_OLD_GETRLIMIT
#define __ARCH_WANT_SYS_OLD_UNAME
#define __ARCH_WANT_SYS_OLDUMOUNT
#define __ARCH_WANT_SYS_SIGPENDING
#define __ARCH_WANT_SYS_SIGPROCMASK
#define __ARCH_WANT_SYS_RT_SIGACTION
/*
* "Conditional" syscalls
*
* What we want is __attribute__((weak,alias("sys_ni_syscall"))),
* but it doesn't work on all toolchains, so we just do it by hand
*/
#ifndef cond_syscall
#define cond_syscall(x) asm(".weak\t" #x "\n\t.set\t" #x ",sys_ni_syscall")
#endif
#endif /* __KERNEL__ */
#endif /* __ASM_SH_UNISTD_64_H */ #endif /* __ASM_SH_UNISTD_64_H */
...@@ -16,45 +16,29 @@ ...@@ -16,45 +16,29 @@
#define DMAOR_INIT DMAOR_DME #define DMAOR_INIT DMAOR_DME
#if defined(CONFIG_CPU_SUBTYPE_SH7343) || \ #if defined(CONFIG_CPU_SUBTYPE_SH7343)
defined(CONFIG_CPU_SUBTYPE_SH7730)
#define CHCR_TS_LOW_MASK 0x00000018 #define CHCR_TS_LOW_MASK 0x00000018
#define CHCR_TS_LOW_SHIFT 3 #define CHCR_TS_LOW_SHIFT 3
#define CHCR_TS_HIGH_MASK 0 #define CHCR_TS_HIGH_MASK 0
#define CHCR_TS_HIGH_SHIFT 0 #define CHCR_TS_HIGH_SHIFT 0
#elif defined(CONFIG_CPU_SUBTYPE_SH7722) || \ #elif defined(CONFIG_CPU_SUBTYPE_SH7722) || \
defined(CONFIG_CPU_SUBTYPE_SH7723) || \
defined(CONFIG_CPU_SUBTYPE_SH7724) || \ defined(CONFIG_CPU_SUBTYPE_SH7724) || \
defined(CONFIG_CPU_SUBTYPE_SH7730) || \
defined(CONFIG_CPU_SUBTYPE_SH7786) defined(CONFIG_CPU_SUBTYPE_SH7786)
#define CHCR_TS_LOW_MASK 0x00000018 #define CHCR_TS_LOW_MASK 0x00000018
#define CHCR_TS_LOW_SHIFT 3 #define CHCR_TS_LOW_SHIFT 3
#define CHCR_TS_HIGH_MASK 0x00300000 #define CHCR_TS_HIGH_MASK 0x00300000
#define CHCR_TS_HIGH_SHIFT (20 - 2) /* 2 bits for shifted low TS */ #define CHCR_TS_HIGH_SHIFT (20 - 2) /* 2 bits for shifted low TS */
#elif defined(CONFIG_CPU_SUBTYPE_SH7763) || \ #elif defined(CONFIG_CPU_SUBTYPE_SH7757) || \
defined(CONFIG_CPU_SUBTYPE_SH7764) defined(CONFIG_CPU_SUBTYPE_SH7763) || \
#define CHCR_TS_LOW_MASK 0x00000018 defined(CONFIG_CPU_SUBTYPE_SH7764) || \
#define CHCR_TS_LOW_SHIFT 3 defined(CONFIG_CPU_SUBTYPE_SH7780) || \
#define CHCR_TS_HIGH_MASK 0 defined(CONFIG_CPU_SUBTYPE_SH7785)
#define CHCR_TS_HIGH_SHIFT 0
#elif defined(CONFIG_CPU_SUBTYPE_SH7723)
#define CHCR_TS_LOW_MASK 0x00000018
#define CHCR_TS_LOW_SHIFT 3
#define CHCR_TS_HIGH_MASK 0
#define CHCR_TS_HIGH_SHIFT 0
#elif defined(CONFIG_CPU_SUBTYPE_SH7757)
#define CHCR_TS_LOW_MASK 0x00000018 #define CHCR_TS_LOW_MASK 0x00000018
#define CHCR_TS_LOW_SHIFT 3 #define CHCR_TS_LOW_SHIFT 3
#define CHCR_TS_HIGH_MASK 0x00100000 #define CHCR_TS_HIGH_MASK 0x00100000
#define CHCR_TS_HIGH_SHIFT (20 - 2) /* 2 bits for shifted low TS */ #define CHCR_TS_HIGH_SHIFT (20 - 2) /* 2 bits for shifted low TS */
#elif defined(CONFIG_CPU_SUBTYPE_SH7780)
#define CHCR_TS_LOW_MASK 0x00000018
#define CHCR_TS_LOW_SHIFT 3
#define CHCR_TS_HIGH_MASK 0
#define CHCR_TS_HIGH_SHIFT 0
#else /* SH7785 */
#define CHCR_TS_LOW_MASK 0x00000018
#define CHCR_TS_LOW_SHIFT 3
#define CHCR_TS_HIGH_MASK 0
#define CHCR_TS_HIGH_SHIFT 0
#endif #endif
/* Transmit sizes and respective CHCR register values */ /* Transmit sizes and respective CHCR register values */
......
/*
* SH version cribbed from the MIPS copy:
*
* This file is subject to the terms and conditions of the GNU General Public
* License. See the file "COPYING" in the main directory of this archive
* for more details.
*
* Copyright (C) 2003, 2004 Ralf Baechle
*/
#ifndef __MACH_COMMON_MANGLE_PORT_H
#define __MACH_COMMON_MANGLE_PORT_H
/*
* Sane hardware offers swapping of PCI/ISA I/O space accesses in hardware;
* less sane hardware forces software to fiddle with this...
*
* Regardless, if the host bus endianness mismatches that of PCI/ISA, then
* you can't have the numerical value of data and byte addresses within
* multibyte quantities both preserved at the same time. Hence two
* variations of functions: non-prefixed ones that preserve the value
* and prefixed ones that preserve byte addresses. The latters are
* typically used for moving raw data between a peripheral and memory (cf.
* string I/O functions), hence the "__mem_" prefix.
*/
#if defined(CONFIG_SWAP_IO_SPACE)
# define ioswabb(x) (x)
# define __mem_ioswabb(x) (x)
# define ioswabw(x) le16_to_cpu(x)
# define __mem_ioswabw(x) (x)
# define ioswabl(x) le32_to_cpu(x)
# define __mem_ioswabl(x) (x)
# define ioswabq(x) le64_to_cpu(x)
# define __mem_ioswabq(x) (x)
#else
# define ioswabb(x) (x)
# define __mem_ioswabb(x) (x)
# define ioswabw(x) (x)
# define __mem_ioswabw(x) cpu_to_le16(x)
# define ioswabl(x) (x)
# define __mem_ioswabl(x) cpu_to_le32(x)
# define ioswabq(x) (x)
# define __mem_ioswabq(x) cpu_to_le32(x)
#endif
#endif /* __MACH_COMMON_MANGLE_PORT_H */
...@@ -680,6 +680,25 @@ static struct platform_device spi1_device = { ...@@ -680,6 +680,25 @@ static struct platform_device spi1_device = {
.resource = spi1_resources, .resource = spi1_resources,
}; };
static struct resource rspi_resources[] = {
{
.start = 0xfe480000,
.end = 0xfe4800ff,
.flags = IORESOURCE_MEM,
},
{
.start = 220,
.flags = IORESOURCE_IRQ,
},
};
static struct platform_device rspi_device = {
.name = "rspi",
.id = 2,
.num_resources = ARRAY_SIZE(rspi_resources),
.resource = rspi_resources,
};
static struct resource usb_ehci_resources[] = { static struct resource usb_ehci_resources[] = {
[0] = { [0] = {
.start = 0xfe4f1000, .start = 0xfe4f1000,
...@@ -740,6 +759,7 @@ static struct platform_device *sh7757_devices[] __initdata = { ...@@ -740,6 +759,7 @@ static struct platform_device *sh7757_devices[] __initdata = {
&dma3_device, &dma3_device,
&spi0_device, &spi0_device,
&spi1_device, &spi1_device,
&rspi_device,
&usb_ehci_device, &usb_ehci_device,
&usb_ohci_device, &usb_ohci_device,
}; };
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
* *
* cpufreq driver for the SuperH processors. * cpufreq driver for the SuperH processors.
* *
* Copyright (C) 2002 - 2007 Paul Mundt * Copyright (C) 2002 - 2012 Paul Mundt
* Copyright (C) 2002 M. R. Brown * Copyright (C) 2002 M. R. Brown
* *
* Clock framework bits from arch/avr32/mach-at32ap/cpufreq.c * Clock framework bits from arch/avr32/mach-at32ap/cpufreq.c
...@@ -14,6 +14,8 @@ ...@@ -14,6 +14,8 @@
* License. See the file "COPYING" in the main directory of this archive * License. See the file "COPYING" in the main directory of this archive
* for more details. * for more details.
*/ */
#define pr_fmt(fmt) "cpufreq: " fmt
#include <linux/types.h> #include <linux/types.h>
#include <linux/cpufreq.h> #include <linux/cpufreq.h>
#include <linux/kernel.h> #include <linux/kernel.h>
...@@ -21,15 +23,18 @@ ...@@ -21,15 +23,18 @@
#include <linux/init.h> #include <linux/init.h>
#include <linux/err.h> #include <linux/err.h>
#include <linux/cpumask.h> #include <linux/cpumask.h>
#include <linux/cpu.h>
#include <linux/smp.h> #include <linux/smp.h>
#include <linux/sched.h> /* set_cpus_allowed() */ #include <linux/sched.h> /* set_cpus_allowed() */
#include <linux/clk.h> #include <linux/clk.h>
#include <linux/percpu.h>
#include <linux/sh_clk.h>
static struct clk *cpuclk; static DEFINE_PER_CPU(struct clk, sh_cpuclk);
static unsigned int sh_cpufreq_get(unsigned int cpu) static unsigned int sh_cpufreq_get(unsigned int cpu)
{ {
return (clk_get_rate(cpuclk) + 500) / 1000; return (clk_get_rate(&per_cpu(sh_cpuclk, cpu)) + 500) / 1000;
} }
/* /*
...@@ -40,8 +45,10 @@ static int sh_cpufreq_target(struct cpufreq_policy *policy, ...@@ -40,8 +45,10 @@ static int sh_cpufreq_target(struct cpufreq_policy *policy,
unsigned int relation) unsigned int relation)
{ {
unsigned int cpu = policy->cpu; unsigned int cpu = policy->cpu;
struct clk *cpuclk = &per_cpu(sh_cpuclk, cpu);
cpumask_t cpus_allowed; cpumask_t cpus_allowed;
struct cpufreq_freqs freqs; struct cpufreq_freqs freqs;
struct device *dev;
long freq; long freq;
if (!cpu_online(cpu)) if (!cpu_online(cpu))
...@@ -52,13 +59,15 @@ static int sh_cpufreq_target(struct cpufreq_policy *policy, ...@@ -52,13 +59,15 @@ static int sh_cpufreq_target(struct cpufreq_policy *policy,
BUG_ON(smp_processor_id() != cpu); BUG_ON(smp_processor_id() != cpu);
dev = get_cpu_device(cpu);
/* Convert target_freq from kHz to Hz */ /* Convert target_freq from kHz to Hz */
freq = clk_round_rate(cpuclk, target_freq * 1000); freq = clk_round_rate(cpuclk, target_freq * 1000);
if (freq < (policy->min * 1000) || freq > (policy->max * 1000)) if (freq < (policy->min * 1000) || freq > (policy->max * 1000))
return -EINVAL; return -EINVAL;
pr_debug("cpufreq: requested frequency %u Hz\n", target_freq * 1000); dev_dbg(dev, "requested frequency %u Hz\n", target_freq * 1000);
freqs.cpu = cpu; freqs.cpu = cpu;
freqs.old = sh_cpufreq_get(cpu); freqs.old = sh_cpufreq_get(cpu);
...@@ -70,78 +79,112 @@ static int sh_cpufreq_target(struct cpufreq_policy *policy, ...@@ -70,78 +79,112 @@ static int sh_cpufreq_target(struct cpufreq_policy *policy,
clk_set_rate(cpuclk, freq); clk_set_rate(cpuclk, freq);
cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE); cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE);
pr_debug("cpufreq: set frequency %lu Hz\n", freq); dev_dbg(dev, "set frequency %lu Hz\n", freq);
return 0;
}
static int sh_cpufreq_verify(struct cpufreq_policy *policy)
{
struct clk *cpuclk = &per_cpu(sh_cpuclk, policy->cpu);
struct cpufreq_frequency_table *freq_table;
freq_table = cpuclk->nr_freqs ? cpuclk->freq_table : NULL;
if (freq_table)
return cpufreq_frequency_table_verify(policy, freq_table);
cpufreq_verify_within_limits(policy, policy->cpuinfo.min_freq,
policy->cpuinfo.max_freq);
policy->min = (clk_round_rate(cpuclk, 1) + 500) / 1000;
policy->max = (clk_round_rate(cpuclk, ~0UL) + 500) / 1000;
cpufreq_verify_within_limits(policy, policy->cpuinfo.min_freq,
policy->cpuinfo.max_freq);
return 0; return 0;
} }
static int sh_cpufreq_cpu_init(struct cpufreq_policy *policy) static int sh_cpufreq_cpu_init(struct cpufreq_policy *policy)
{ {
if (!cpu_online(policy->cpu)) unsigned int cpu = policy->cpu;
struct clk *cpuclk = &per_cpu(sh_cpuclk, cpu);
struct cpufreq_frequency_table *freq_table;
struct device *dev;
if (!cpu_online(cpu))
return -ENODEV; return -ENODEV;
cpuclk = clk_get(NULL, "cpu_clk"); dev = get_cpu_device(cpu);
cpuclk = clk_get(dev, "cpu_clk");
if (IS_ERR(cpuclk)) { if (IS_ERR(cpuclk)) {
printk(KERN_ERR "cpufreq: couldn't get CPU#%d clk\n", dev_err(dev, "couldn't get CPU clk\n");
policy->cpu);
return PTR_ERR(cpuclk); return PTR_ERR(cpuclk);
} }
/* cpuinfo and default policy values */ policy->cur = policy->min = policy->max = sh_cpufreq_get(cpu);
policy->cpuinfo.min_freq = (clk_round_rate(cpuclk, 1) + 500) / 1000;
policy->cpuinfo.max_freq = (clk_round_rate(cpuclk, ~0UL) + 500) / 1000;
policy->cpuinfo.transition_latency = CPUFREQ_ETERNAL;
policy->cur = sh_cpufreq_get(policy->cpu); freq_table = cpuclk->nr_freqs ? cpuclk->freq_table : NULL;
policy->min = policy->cpuinfo.min_freq; if (freq_table) {
policy->max = policy->cpuinfo.max_freq; int result;
/* result = cpufreq_frequency_table_cpuinfo(policy, freq_table);
* Catch the cases where the clock framework hasn't been wired up if (!result)
* properly to support scaling. cpufreq_frequency_table_get_attr(freq_table, cpu);
*/ } else {
if (unlikely(policy->min == policy->max)) { dev_notice(dev, "no frequency table found, falling back "
printk(KERN_ERR "cpufreq: clock framework rate rounding " "to rate rounding.\n");
"not supported on CPU#%d.\n", policy->cpu);
clk_put(cpuclk); policy->cpuinfo.min_freq =
return -EINVAL; (clk_round_rate(cpuclk, 1) + 500) / 1000;
policy->cpuinfo.max_freq =
(clk_round_rate(cpuclk, ~0UL) + 500) / 1000;
} }
printk(KERN_INFO "cpufreq: CPU#%d Frequencies - Minimum %u.%03u MHz, " policy->min = policy->cpuinfo.min_freq;
policy->max = policy->cpuinfo.max_freq;
policy->cpuinfo.transition_latency = CPUFREQ_ETERNAL;
dev_info(dev, "CPU Frequencies - Minimum %u.%03u MHz, "
"Maximum %u.%03u MHz.\n", "Maximum %u.%03u MHz.\n",
policy->cpu, policy->min / 1000, policy->min % 1000, policy->min / 1000, policy->min % 1000,
policy->max / 1000, policy->max % 1000); policy->max / 1000, policy->max % 1000);
return 0; return 0;
} }
static int sh_cpufreq_verify(struct cpufreq_policy *policy) static int sh_cpufreq_cpu_exit(struct cpufreq_policy *policy)
{ {
cpufreq_verify_within_limits(policy, policy->cpuinfo.min_freq, unsigned int cpu = policy->cpu;
policy->cpuinfo.max_freq); struct clk *cpuclk = &per_cpu(sh_cpuclk, cpu);
return 0;
}
static int sh_cpufreq_exit(struct cpufreq_policy *policy) cpufreq_frequency_table_put_attr(cpu);
{
clk_put(cpuclk); clk_put(cpuclk);
return 0; return 0;
} }
static struct freq_attr *sh_freq_attr[] = {
&cpufreq_freq_attr_scaling_available_freqs,
NULL,
};
static struct cpufreq_driver sh_cpufreq_driver = { static struct cpufreq_driver sh_cpufreq_driver = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.name = "sh", .name = "sh",
.init = sh_cpufreq_cpu_init,
.verify = sh_cpufreq_verify,
.target = sh_cpufreq_target,
.get = sh_cpufreq_get, .get = sh_cpufreq_get,
.exit = sh_cpufreq_exit, .target = sh_cpufreq_target,
.verify = sh_cpufreq_verify,
.init = sh_cpufreq_cpu_init,
.exit = sh_cpufreq_cpu_exit,
.attr = sh_freq_attr,
}; };
static int __init sh_cpufreq_module_init(void) static int __init sh_cpufreq_module_init(void)
{ {
printk(KERN_INFO "cpufreq: SuperH CPU frequency driver.\n"); pr_notice("SuperH CPU frequency driver.\n");
return cpufreq_register_driver(&sh_cpufreq_driver); return cpufreq_register_driver(&sh_cpufreq_driver);
} }
......
...@@ -57,12 +57,13 @@ sys_sigsuspend(old_sigset_t mask, ...@@ -57,12 +57,13 @@ sys_sigsuspend(old_sigset_t mask,
unsigned long r5, unsigned long r6, unsigned long r7, unsigned long r5, unsigned long r6, unsigned long r7,
struct pt_regs __regs) struct pt_regs __regs)
{ {
mask &= _BLOCKABLE; sigset_t blocked;
spin_lock_irq(&current->sighand->siglock);
current->saved_sigmask = current->blocked; current->saved_sigmask = current->blocked;
siginitset(&current->blocked, mask);
recalc_sigpending(); mask &= _BLOCKABLE;
spin_unlock_irq(&current->sighand->siglock); siginitset(&blocked, mask);
set_current_blocked(&blocked);
current->state = TASK_INTERRUPTIBLE; current->state = TASK_INTERRUPTIBLE;
schedule(); schedule();
...@@ -239,11 +240,7 @@ asmlinkage int sys_sigreturn(unsigned long r4, unsigned long r5, ...@@ -239,11 +240,7 @@ asmlinkage int sys_sigreturn(unsigned long r4, unsigned long r5,
goto badframe; goto badframe;
sigdelsetmask(&set, ~_BLOCKABLE); sigdelsetmask(&set, ~_BLOCKABLE);
set_current_blocked(&set);
spin_lock_irq(&current->sighand->siglock);
current->blocked = set;
recalc_sigpending();
spin_unlock_irq(&current->sighand->siglock);
if (restore_sigcontext(regs, &frame->sc, &r0)) if (restore_sigcontext(regs, &frame->sc, &r0))
goto badframe; goto badframe;
...@@ -273,10 +270,7 @@ asmlinkage int sys_rt_sigreturn(unsigned long r4, unsigned long r5, ...@@ -273,10 +270,7 @@ asmlinkage int sys_rt_sigreturn(unsigned long r4, unsigned long r5,
goto badframe; goto badframe;
sigdelsetmask(&set, ~_BLOCKABLE); sigdelsetmask(&set, ~_BLOCKABLE);
spin_lock_irq(&current->sighand->siglock); set_current_blocked(&set);
current->blocked = set;
recalc_sigpending();
spin_unlock_irq(&current->sighand->siglock);
if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &r0)) if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &r0))
goto badframe; goto badframe;
...@@ -547,17 +541,8 @@ handle_signal(unsigned long sig, struct k_sigaction *ka, siginfo_t *info, ...@@ -547,17 +541,8 @@ handle_signal(unsigned long sig, struct k_sigaction *ka, siginfo_t *info,
else else
ret = setup_frame(sig, ka, oldset, regs); ret = setup_frame(sig, ka, oldset, regs);
if (ka->sa.sa_flags & SA_ONESHOT) if (ret == 0)
ka->sa.sa_handler = SIG_DFL; block_sigmask(ka, sig);
if (ret == 0) {
spin_lock_irq(&current->sighand->siglock);
sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask);
if (!(ka->sa.sa_flags & SA_NODEFER))
sigaddset(&current->blocked,sig);
recalc_sigpending();
spin_unlock_irq(&current->sighand->siglock);
}
return ret; return ret;
} }
......
...@@ -159,14 +159,13 @@ sys_sigsuspend(old_sigset_t mask, ...@@ -159,14 +159,13 @@ sys_sigsuspend(old_sigset_t mask,
unsigned long r6, unsigned long r7, unsigned long r6, unsigned long r7,
struct pt_regs * regs) struct pt_regs * regs)
{ {
sigset_t saveset; sigset_t saveset, blocked;
mask &= _BLOCKABLE;
spin_lock_irq(&current->sighand->siglock);
saveset = current->blocked; saveset = current->blocked;
siginitset(&current->blocked, mask);
recalc_sigpending(); mask &= _BLOCKABLE;
spin_unlock_irq(&current->sighand->siglock); siginitset(&blocked, mask);
set_current_blocked(&blocked);
REF_REG_RET = -EINTR; REF_REG_RET = -EINTR;
while (1) { while (1) {
...@@ -198,11 +197,8 @@ sys_rt_sigsuspend(sigset_t *unewset, size_t sigsetsize, ...@@ -198,11 +197,8 @@ sys_rt_sigsuspend(sigset_t *unewset, size_t sigsetsize,
if (copy_from_user(&newset, unewset, sizeof(newset))) if (copy_from_user(&newset, unewset, sizeof(newset)))
return -EFAULT; return -EFAULT;
sigdelsetmask(&newset, ~_BLOCKABLE); sigdelsetmask(&newset, ~_BLOCKABLE);
spin_lock_irq(&current->sighand->siglock);
saveset = current->blocked; saveset = current->blocked;
current->blocked = newset; set_current_blocked(&newset);
recalc_sigpending();
spin_unlock_irq(&current->sighand->siglock);
REF_REG_RET = -EINTR; REF_REG_RET = -EINTR;
while (1) { while (1) {
...@@ -408,11 +404,7 @@ asmlinkage int sys_sigreturn(unsigned long r2, unsigned long r3, ...@@ -408,11 +404,7 @@ asmlinkage int sys_sigreturn(unsigned long r2, unsigned long r3,
goto badframe; goto badframe;
sigdelsetmask(&set, ~_BLOCKABLE); sigdelsetmask(&set, ~_BLOCKABLE);
set_current_blocked(&set);
spin_lock_irq(&current->sighand->siglock);
current->blocked = set;
recalc_sigpending();
spin_unlock_irq(&current->sighand->siglock);
if (restore_sigcontext(regs, &frame->sc, &ret)) if (restore_sigcontext(regs, &frame->sc, &ret))
goto badframe; goto badframe;
...@@ -445,10 +437,7 @@ asmlinkage int sys_rt_sigreturn(unsigned long r2, unsigned long r3, ...@@ -445,10 +437,7 @@ asmlinkage int sys_rt_sigreturn(unsigned long r2, unsigned long r3,
goto badframe; goto badframe;
sigdelsetmask(&set, ~_BLOCKABLE); sigdelsetmask(&set, ~_BLOCKABLE);
spin_lock_irq(&current->sighand->siglock); set_current_blocked(&set);
current->blocked = set;
recalc_sigpending();
spin_unlock_irq(&current->sighand->siglock);
if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &ret)) if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &ret))
goto badframe; goto badframe;
...@@ -734,17 +723,8 @@ handle_signal(unsigned long sig, siginfo_t *info, struct k_sigaction *ka, ...@@ -734,17 +723,8 @@ handle_signal(unsigned long sig, siginfo_t *info, struct k_sigaction *ka,
else else
ret = setup_frame(sig, ka, oldset, regs); ret = setup_frame(sig, ka, oldset, regs);
if (ka->sa.sa_flags & SA_ONESHOT) if (ret == 0)
ka->sa.sa_handler = SIG_DFL; block_sigmask(ka, sig);
if (ret == 0) {
spin_lock_irq(&current->sighand->siglock);
sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask);
if (!(ka->sa.sa_flags & SA_NODEFER))
sigaddset(&current->blocked,sig);
recalc_sigpending();
spin_unlock_irq(&current->sighand->siglock);
}
return ret; return ret;
} }
......
...@@ -204,8 +204,8 @@ ENTRY(sys_call_table) ...@@ -204,8 +204,8 @@ ENTRY(sys_call_table)
.long sys_capset /* 185 */ .long sys_capset /* 185 */
.long sys_sigaltstack .long sys_sigaltstack
.long sys_sendfile .long sys_sendfile
.long sys_ni_syscall /* streams1 */ .long sys_ni_syscall /* getpmsg */
.long sys_ni_syscall /* streams2 */ .long sys_ni_syscall /* putpmsg */
.long sys_vfork /* 190 */ .long sys_vfork /* 190 */
.long sys_getrlimit .long sys_getrlimit
.long sys_mmap2 .long sys_mmap2
...@@ -259,8 +259,8 @@ ENTRY(sys_call_table) ...@@ -259,8 +259,8 @@ ENTRY(sys_call_table)
.long sys_futex /* 240 */ .long sys_futex /* 240 */
.long sys_sched_setaffinity .long sys_sched_setaffinity
.long sys_sched_getaffinity .long sys_sched_getaffinity
.long sys_ni_syscall .long sys_ni_syscall /* reserved for set_thread_area */
.long sys_ni_syscall .long sys_ni_syscall /* reserved for get_thread_area */
.long sys_io_setup /* 245 */ .long sys_io_setup /* 245 */
.long sys_io_destroy .long sys_io_destroy
.long sys_io_getevents .long sys_io_getevents
......
...@@ -208,8 +208,8 @@ sys_call_table: ...@@ -208,8 +208,8 @@ sys_call_table:
.long sys_capset /* 185 */ .long sys_capset /* 185 */
.long sys_sigaltstack .long sys_sigaltstack
.long sys_sendfile .long sys_sendfile
.long sys_ni_syscall /* streams1 */ .long sys_ni_syscall /* getpmsg */
.long sys_ni_syscall /* streams2 */ .long sys_ni_syscall /* putpmsg */
.long sys_vfork /* 190 */ .long sys_vfork /* 190 */
.long sys_getrlimit .long sys_getrlimit
.long sys_mmap2 .long sys_mmap2
...@@ -296,8 +296,8 @@ sys_call_table: ...@@ -296,8 +296,8 @@ sys_call_table:
.long sys_futex .long sys_futex
.long sys_sched_setaffinity .long sys_sched_setaffinity
.long sys_sched_getaffinity /* 270 */ .long sys_sched_getaffinity /* 270 */
.long sys_ni_syscall .long sys_ni_syscall /* reserved for set_thread_area */
.long sys_ni_syscall .long sys_ni_syscall /* reserved for get_thread_area */
.long sys_io_setup .long sys_io_setup
.long sys_io_destroy .long sys_io_destroy
.long sys_io_getevents /* 275 */ .long sys_io_getevents /* 275 */
......
...@@ -2,13 +2,14 @@ ...@@ -2,13 +2,14 @@
* IRQ chip definitions for INTC IRQs. * IRQ chip definitions for INTC IRQs.
* *
* Copyright (C) 2007, 2008 Magnus Damm * Copyright (C) 2007, 2008 Magnus Damm
* Copyright (C) 2009, 2010 Paul Mundt * Copyright (C) 2009 - 2012 Paul Mundt
* *
* This file is subject to the terms and conditions of the GNU General Public * This file is subject to the terms and conditions of the GNU General Public
* License. See the file "COPYING" in the main directory of this archive * License. See the file "COPYING" in the main directory of this archive
* for more details. * for more details.
*/ */
#include <linux/cpumask.h> #include <linux/cpumask.h>
#include <linux/bsearch.h>
#include <linux/io.h> #include <linux/io.h>
#include "internals.h" #include "internals.h"
...@@ -58,11 +59,6 @@ static void intc_disable(struct irq_data *data) ...@@ -58,11 +59,6 @@ static void intc_disable(struct irq_data *data)
} }
} }
static int intc_set_wake(struct irq_data *data, unsigned int on)
{
return 0; /* allow wakeup, but setup hardware in intc_suspend() */
}
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
/* /*
* This is held with the irq desc lock held, so we don't require any * This is held with the irq desc lock held, so we don't require any
...@@ -78,7 +74,7 @@ static int intc_set_affinity(struct irq_data *data, ...@@ -78,7 +74,7 @@ static int intc_set_affinity(struct irq_data *data,
cpumask_copy(data->affinity, cpumask); cpumask_copy(data->affinity, cpumask);
return 0; return IRQ_SET_MASK_OK_NOCOPY;
} }
#endif #endif
...@@ -122,28 +118,12 @@ static struct intc_handle_int *intc_find_irq(struct intc_handle_int *hp, ...@@ -122,28 +118,12 @@ static struct intc_handle_int *intc_find_irq(struct intc_handle_int *hp,
unsigned int nr_hp, unsigned int nr_hp,
unsigned int irq) unsigned int irq)
{ {
int i; struct intc_handle_int key;
/*
* this doesn't scale well, but...
*
* this function should only be used for cerain uncommon
* operations such as intc_set_priority() and intc_set_type()
* and in those rare cases performance doesn't matter that much.
* keeping the memory footprint low is more important.
*
* one rather simple way to speed this up and still keep the
* memory footprint down is to make sure the array is sorted
* and then perform a bisect to lookup the irq.
*/
for (i = 0; i < nr_hp; i++) {
if ((hp + i)->irq != irq)
continue;
return hp + i; key.irq = irq;
} key.handle = 0;
return NULL; return bsearch(&key, hp, nr_hp, sizeof(*hp), intc_handle_int_cmp);
} }
int intc_set_priority(unsigned int irq, unsigned int prio) int intc_set_priority(unsigned int irq, unsigned int prio)
...@@ -223,10 +203,9 @@ struct irq_chip intc_irq_chip = { ...@@ -223,10 +203,9 @@ struct irq_chip intc_irq_chip = {
.irq_mask_ack = intc_mask_ack, .irq_mask_ack = intc_mask_ack,
.irq_enable = intc_enable, .irq_enable = intc_enable,
.irq_disable = intc_disable, .irq_disable = intc_disable,
.irq_shutdown = intc_disable,
.irq_set_type = intc_set_type, .irq_set_type = intc_set_type,
.irq_set_wake = intc_set_wake,
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
.irq_set_affinity = intc_set_affinity, .irq_set_affinity = intc_set_affinity,
#endif #endif
.flags = IRQCHIP_SKIP_SET_WAKE,
}; };
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* Shared interrupt handling code for IPR and INTC2 types of IRQs. * Shared interrupt handling code for IPR and INTC2 types of IRQs.
* *
* Copyright (C) 2007, 2008 Magnus Damm * Copyright (C) 2007, 2008 Magnus Damm
* Copyright (C) 2009, 2010 Paul Mundt * Copyright (C) 2009 - 2012 Paul Mundt
* *
* Based on intc2.c and ipr.c * Based on intc2.c and ipr.c
* *
...@@ -31,11 +31,12 @@ ...@@ -31,11 +31,12 @@
#include <linux/spinlock.h> #include <linux/spinlock.h>
#include <linux/radix-tree.h> #include <linux/radix-tree.h>
#include <linux/export.h> #include <linux/export.h>
#include <linux/sort.h>
#include "internals.h" #include "internals.h"
LIST_HEAD(intc_list); LIST_HEAD(intc_list);
DEFINE_RAW_SPINLOCK(intc_big_lock); DEFINE_RAW_SPINLOCK(intc_big_lock);
unsigned int nr_intc_controllers; static unsigned int nr_intc_controllers;
/* /*
* Default priority level * Default priority level
...@@ -267,6 +268,9 @@ int __init register_intc_controller(struct intc_desc *desc) ...@@ -267,6 +268,9 @@ int __init register_intc_controller(struct intc_desc *desc)
k += save_reg(d, k, hw->prio_regs[i].set_reg, smp); k += save_reg(d, k, hw->prio_regs[i].set_reg, smp);
k += save_reg(d, k, hw->prio_regs[i].clr_reg, smp); k += save_reg(d, k, hw->prio_regs[i].clr_reg, smp);
} }
sort(d->prio, hw->nr_prio_regs, sizeof(*d->prio),
intc_handle_int_cmp, NULL);
} }
if (hw->sense_regs) { if (hw->sense_regs) {
...@@ -277,6 +281,9 @@ int __init register_intc_controller(struct intc_desc *desc) ...@@ -277,6 +281,9 @@ int __init register_intc_controller(struct intc_desc *desc)
for (i = 0; i < hw->nr_sense_regs; i++) for (i = 0; i < hw->nr_sense_regs; i++)
k += save_reg(d, k, hw->sense_regs[i].reg, 0); k += save_reg(d, k, hw->sense_regs[i].reg, 0);
sort(d->sense, hw->nr_sense_regs, sizeof(*d->sense),
intc_handle_int_cmp, NULL);
} }
if (hw->subgroups) if (hw->subgroups)
......
...@@ -172,9 +172,8 @@ intc_get_prio_handle(struct intc_desc *desc, struct intc_desc_int *d, ...@@ -172,9 +172,8 @@ intc_get_prio_handle(struct intc_desc *desc, struct intc_desc_int *d,
return 0; return 0;
} }
static unsigned int __init intc_ack_data(struct intc_desc *desc, static unsigned int intc_ack_data(struct intc_desc *desc,
struct intc_desc_int *d, struct intc_desc_int *d, intc_enum enum_id)
intc_enum enum_id)
{ {
struct intc_mask_reg *mr = desc->hw.ack_regs; struct intc_mask_reg *mr = desc->hw.ack_regs;
unsigned int i, j, fn, mode; unsigned int i, j, fn, mode;
......
...@@ -108,6 +108,14 @@ static inline void activate_irq(int irq) ...@@ -108,6 +108,14 @@ static inline void activate_irq(int irq)
#endif #endif
} }
static inline int intc_handle_int_cmp(const void *a, const void *b)
{
const struct intc_handle_int *_a = a;
const struct intc_handle_int *_b = b;
return _a->irq - _b->irq;
}
/* access.c */ /* access.c */
extern unsigned long extern unsigned long
(*intc_reg_fns[])(unsigned long addr, unsigned long h, unsigned long data); (*intc_reg_fns[])(unsigned long addr, unsigned long h, unsigned long data);
...@@ -157,7 +165,6 @@ void _intc_enable(struct irq_data *data, unsigned long handle); ...@@ -157,7 +165,6 @@ void _intc_enable(struct irq_data *data, unsigned long handle);
/* core.c */ /* core.c */
extern struct list_head intc_list; extern struct list_head intc_list;
extern raw_spinlock_t intc_big_lock; extern raw_spinlock_t intc_big_lock;
extern unsigned int nr_intc_controllers;
extern struct bus_type intc_subsys; extern struct bus_type intc_subsys;
unsigned int intc_get_dfl_prio_level(void); unsigned int intc_get_dfl_prio_level(void);
......
...@@ -1229,17 +1229,20 @@ static void sci_dma_tx_complete(void *arg) ...@@ -1229,17 +1229,20 @@ static void sci_dma_tx_complete(void *arg)
port->icount.tx += sg_dma_len(&s->sg_tx); port->icount.tx += sg_dma_len(&s->sg_tx);
async_tx_ack(s->desc_tx); async_tx_ack(s->desc_tx);
s->cookie_tx = -EINVAL;
s->desc_tx = NULL; s->desc_tx = NULL;
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)) {
s->cookie_tx = 0;
schedule_work(&s->work_tx); schedule_work(&s->work_tx);
} else if (port->type == PORT_SCIFA || port->type == PORT_SCIFB) { } else {
u16 ctrl = sci_in(port, SCSCR); s->cookie_tx = -EINVAL;
sci_out(port, SCSCR, ctrl & ~SCSCR_TIE); if (port->type == PORT_SCIFA || port->type == PORT_SCIFB) {
u16 ctrl = sci_in(port, SCSCR);
sci_out(port, SCSCR, ctrl & ~SCSCR_TIE);
}
} }
spin_unlock_irqrestore(&port->lock, flags); spin_unlock_irqrestore(&port->lock, flags);
...@@ -1501,8 +1504,10 @@ static void sci_start_tx(struct uart_port *port) ...@@ -1501,8 +1504,10 @@ static void sci_start_tx(struct uart_port *port)
} }
if (s->chan_tx && !uart_circ_empty(&s->port.state->xmit) && if (s->chan_tx && !uart_circ_empty(&s->port.state->xmit) &&
s->cookie_tx < 0) s->cookie_tx < 0) {
s->cookie_tx = 0;
schedule_work(&s->work_tx); schedule_work(&s->work_tx);
}
#endif #endif
if (!s->chan_tx || port->type == PORT_SCIFA || port->type == PORT_SCIFB) { if (!s->chan_tx || port->type == PORT_SCIFA || port->type == PORT_SCIFB) {
......
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