SuperH updates for 3.4 merge window
-----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.15 (GNU/Linux) iEYEABECAAYFAk91TL0ACgkQGkmNcg7/o7hEjwCgmuz6QQKkow7e5q0x7DR5Z2NH 1YoAn3TpODDmpaBiou26uMRPhcR6e1qC =JCA0 -----END PGP SIGNATURE----- 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. ...
This commit is contained in:
commit
f52b69f86e
|
@ -5,6 +5,7 @@ config SUPERH
|
|||
select HAVE_IDE if HAS_IOPORT
|
||||
select HAVE_MEMBLOCK
|
||||
select HAVE_MEMBLOCK_NODE_MAP
|
||||
select ARCH_DISCARD_MEMBLOCK
|
||||
select HAVE_OPROFILE
|
||||
select HAVE_GENERIC_DMA_COHERENT
|
||||
select HAVE_ARCH_TRACEHOOK
|
||||
|
@ -161,6 +162,9 @@ config NO_IOPORT
|
|||
config IO_TRAPPED
|
||||
bool
|
||||
|
||||
config SWAP_IO_SPACE
|
||||
bool
|
||||
|
||||
config DMA_COHERENT
|
||||
bool
|
||||
|
||||
|
|
|
@ -522,11 +522,18 @@ static void sdhi0_set_pwr(struct platform_device *pdev, int 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 = {
|
||||
.dma_slave_tx = SHDMA_SLAVE_SDHI0_TX,
|
||||
.dma_slave_rx = SHDMA_SLAVE_SDHI0_RX,
|
||||
.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[] = {
|
||||
|
@ -559,11 +566,18 @@ static void sdhi1_set_pwr(struct platform_device *pdev, int 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 = {
|
||||
.dma_slave_tx = SHDMA_SLAVE_SDHI1_TX,
|
||||
.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,
|
||||
.get_cd = sdhi1_get_cd,
|
||||
};
|
||||
|
||||
static struct resource sdhi1_resources[] = {
|
||||
|
@ -1001,6 +1015,7 @@ extern char ecovec24_sdram_leave_end;
|
|||
static int __init arch_setup(void)
|
||||
{
|
||||
struct clk *clk;
|
||||
bool cn12_enabled = false;
|
||||
|
||||
/* register board specific self-refresh code */
|
||||
sh_mobile_register_self_refresh(SUSP_SH_STANDBY | SUSP_SH_SF |
|
||||
|
@ -1201,9 +1216,13 @@ static int __init arch_setup(void)
|
|||
gpio_direction_input(GPIO_PTR5);
|
||||
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)
|
||||
/* 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_SDHI0CMD, NULL);
|
||||
gpio_request(GPIO_FN_SDHI0CLK, NULL);
|
||||
|
@ -1213,23 +1232,6 @@ static int __init arch_setup(void)
|
|||
gpio_request(GPIO_FN_SDHI0D0, NULL);
|
||||
gpio_request(GPIO_PTB6, NULL);
|
||||
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
|
||||
/* enable MSIOF0 on CN11 (needs DS2.4 set to OFF) */
|
||||
gpio_request(GPIO_FN_MSIOF0_TXD, NULL);
|
||||
|
@ -1241,12 +1243,51 @@ static int __init arch_setup(void)
|
|||
gpio_direction_output(GPIO_PTB6, 0); /* disable power by default */
|
||||
gpio_request(GPIO_PTY6, NULL); /* write protect */
|
||||
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));
|
||||
#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 */
|
||||
gpio_request(GPIO_PTU2, NULL);
|
||||
gpio_direction_output(GPIO_PTU2, 1);
|
||||
|
@ -1305,25 +1346,6 @@ static int __init arch_setup(void)
|
|||
gpio_request(GPIO_PTU5, NULL);
|
||||
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 */
|
||||
i2c_register_board_info(0, i2c0_devices,
|
||||
ARRAY_SIZE(i2c0_devices));
|
||||
|
|
|
@ -181,14 +181,14 @@ static int __init g2_dma_init(void)
|
|||
|
||||
ret = register_dmac(&g2_dma_info);
|
||||
if (unlikely(ret != 0))
|
||||
free_irq(HW_EVENT_G2_DMA, 0);
|
||||
free_irq(HW_EVENT_G2_DMA, &g2_dma_info);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
|
|
|
@ -189,8 +189,8 @@ static int __init dmabrg_init(void)
|
|||
if (ret == 0)
|
||||
return ret;
|
||||
|
||||
free_irq(DMABRGI1, 0);
|
||||
out1: free_irq(DMABRGI0, 0);
|
||||
free_irq(DMABRGI1, NULL);
|
||||
out1: free_irq(DMABRGI0, NULL);
|
||||
out0: kfree(dmabrg_handlers);
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -21,6 +21,13 @@
|
|||
#include <asm/mmu.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[] = {
|
||||
{
|
||||
.name = "PCI IO",
|
||||
|
@ -254,7 +261,7 @@ static int __init sh7780_pci_init(void)
|
|||
__raw_writel(PCIECR_ENBL, PCIECR);
|
||||
|
||||
/* Reset */
|
||||
__raw_writel(SH4_PCICR_PREFIX | SH4_PCICR_PRST,
|
||||
__raw_writel(SH4_PCICR_PREFIX | SH4_PCICR_PRST | PCICR_ENDIANNESS,
|
||||
chan->reg_base + SH4_PCICR);
|
||||
|
||||
/*
|
||||
|
@ -290,7 +297,8 @@ static int __init sh7780_pci_init(void)
|
|||
* Now throw it in to register initialization mode and
|
||||
* 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);
|
||||
memsize = roundup_pow_of_two(memory_end - memory_start);
|
||||
|
@ -380,7 +388,8 @@ static int __init sh7780_pci_init(void)
|
|||
* Initialization mode complete, release the control register and
|
||||
* 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);
|
||||
|
||||
ret = register_pci_controller(chan);
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
#define __IO_PREFIX generic
|
||||
#include <asm/io_generic.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_writew(v,a) (__chk_io_ptr(a), *(volatile u16 __force *)(a) = (v))
|
||||
|
@ -34,21 +35,15 @@
|
|||
#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 readb_relaxed(c) ({ u8 __v = __raw_readb(c); __v; })
|
||||
#define readw_relaxed(c) ({ u16 __v = le16_to_cpu((__force __le16) \
|
||||
__raw_readw(c)); __v; })
|
||||
#define readl_relaxed(c) ({ u32 __v = le32_to_cpu((__force __le32) \
|
||||
__raw_readl(c)); __v; })
|
||||
#define readq_relaxed(c) ({ u64 __v = le64_to_cpu((__force __le64) \
|
||||
__raw_readq(c)); __v; })
|
||||
#define readb_relaxed(c) ({ u8 __v = ioswabb(__raw_readb(c)); __v; })
|
||||
#define readw_relaxed(c) ({ u16 __v = ioswabw(__raw_readw(c)); __v; })
|
||||
#define readl_relaxed(c) ({ u32 __v = ioswabl(__raw_readl(c)); __v; })
|
||||
#define readq_relaxed(c) ({ u64 __v = ioswabq(__raw_readq(c)); __v; })
|
||||
|
||||
#define writeb_relaxed(v,c) ((void)__raw_writeb(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 writeb_relaxed(v,c) ((void)__raw_writeb((__force u8)ioswabb(v),c))
|
||||
#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 writeq_relaxed(v,c) ((void)__raw_writeq((__force u64)ioswabq(v),c))
|
||||
|
||||
#define readb(a) ({ u8 r_ = readb_relaxed(a); rmb(); r_; })
|
||||
#define readw(a) ({ u16 r_ = readw_relaxed(a); rmb(); r_; })
|
||||
|
|
|
@ -1,9 +1,46 @@
|
|||
#ifdef __KERNEL__
|
||||
# ifdef CONFIG_SUPERH32
|
||||
|
||||
# include "unistd_32.h"
|
||||
# define __ARCH_WANT_SYS_RT_SIGSUSPEND
|
||||
|
||||
# else
|
||||
# include "unistd_64.h"
|
||||
# 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
|
||||
# ifdef __SH5__
|
||||
# include "unistd_64.h"
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#ifndef __ASM_SH_UNISTD_H
|
||||
#define __ASM_SH_UNISTD_H
|
||||
#ifndef __ASM_SH_UNISTD_32_H
|
||||
#define __ASM_SH_UNISTD_32_H
|
||||
|
||||
/*
|
||||
* Copyright (C) 1999 Niibe Yutaka
|
||||
|
@ -26,7 +26,7 @@
|
|||
#define __NR_mknod 14
|
||||
#define __NR_chmod 15
|
||||
#define __NR_lchown 16
|
||||
#define __NR_break 17
|
||||
/* 17 was sys_break */
|
||||
#define __NR_oldstat 18
|
||||
#define __NR_lseek 19
|
||||
#define __NR_getpid 20
|
||||
|
@ -40,11 +40,11 @@
|
|||
#define __NR_oldfstat 28
|
||||
#define __NR_pause 29
|
||||
#define __NR_utime 30
|
||||
#define __NR_stty 31
|
||||
#define __NR_gtty 32
|
||||
/* 31 was sys_stty */
|
||||
/* 32 was sys_gtty */
|
||||
#define __NR_access 33
|
||||
#define __NR_nice 34
|
||||
#define __NR_ftime 35
|
||||
/* 35 was sys_ftime */
|
||||
#define __NR_sync 36
|
||||
#define __NR_kill 37
|
||||
#define __NR_rename 38
|
||||
|
@ -53,7 +53,7 @@
|
|||
#define __NR_dup 41
|
||||
#define __NR_pipe 42
|
||||
#define __NR_times 43
|
||||
#define __NR_prof 44
|
||||
/* 44 was sys_prof */
|
||||
#define __NR_brk 45
|
||||
#define __NR_setgid 46
|
||||
#define __NR_getgid 47
|
||||
|
@ -62,13 +62,13 @@
|
|||
#define __NR_getegid 50
|
||||
#define __NR_acct 51
|
||||
#define __NR_umount2 52
|
||||
#define __NR_lock 53
|
||||
/* 53 was sys_lock */
|
||||
#define __NR_ioctl 54
|
||||
#define __NR_fcntl 55
|
||||
#define __NR_mpx 56
|
||||
/* 56 was sys_mpx */
|
||||
#define __NR_setpgid 57
|
||||
#define __NR_ulimit 58
|
||||
#define __NR_oldolduname 59
|
||||
/* 58 was sys_ulimit */
|
||||
/* 59 was sys_olduname */
|
||||
#define __NR_umask 60
|
||||
#define __NR_chroot 61
|
||||
#define __NR_ustat 62
|
||||
|
@ -91,7 +91,7 @@
|
|||
#define __NR_settimeofday 79
|
||||
#define __NR_getgroups 80
|
||||
#define __NR_setgroups 81
|
||||
#define __NR_select 82
|
||||
/* 82 was sys_oldselect */
|
||||
#define __NR_symlink 83
|
||||
#define __NR_oldlstat 84
|
||||
#define __NR_readlink 85
|
||||
|
@ -107,10 +107,10 @@
|
|||
#define __NR_fchown 95
|
||||
#define __NR_getpriority 96
|
||||
#define __NR_setpriority 97
|
||||
#define __NR_profil 98
|
||||
/* 98 was sys_profil */
|
||||
#define __NR_statfs 99
|
||||
#define __NR_fstatfs 100
|
||||
#define __NR_ioperm 101
|
||||
/* 101 was sys_ioperm */
|
||||
#define __NR_socketcall 102
|
||||
#define __NR_syslog 103
|
||||
#define __NR_setitimer 104
|
||||
|
@ -119,10 +119,10 @@
|
|||
#define __NR_lstat 107
|
||||
#define __NR_fstat 108
|
||||
#define __NR_olduname 109
|
||||
#define __NR_iopl 110
|
||||
/* 110 was sys_iopl */
|
||||
#define __NR_vhangup 111
|
||||
#define __NR_idle 112
|
||||
#define __NR_vm86old 113
|
||||
/* 112 was sys_idle */
|
||||
/* 113 was sys_vm86old */
|
||||
#define __NR_wait4 114
|
||||
#define __NR_swapoff 115
|
||||
#define __NR_sysinfo 116
|
||||
|
@ -136,17 +136,17 @@
|
|||
#define __NR_adjtimex 124
|
||||
#define __NR_mprotect 125
|
||||
#define __NR_sigprocmask 126
|
||||
#define __NR_create_module 127
|
||||
/* 127 was sys_create_module */
|
||||
#define __NR_init_module 128
|
||||
#define __NR_delete_module 129
|
||||
#define __NR_get_kernel_syms 130
|
||||
/* 130 was sys_get_kernel_syms */
|
||||
#define __NR_quotactl 131
|
||||
#define __NR_getpgid 132
|
||||
#define __NR_fchdir 133
|
||||
#define __NR_bdflush 134
|
||||
#define __NR_sysfs 135
|
||||
#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_setfsgid 139
|
||||
#define __NR__llseek 140
|
||||
|
@ -175,8 +175,8 @@
|
|||
#define __NR_mremap 163
|
||||
#define __NR_setresuid 164
|
||||
#define __NR_getresuid 165
|
||||
#define __NR_vm86 166
|
||||
#define __NR_query_module 167
|
||||
/* 166 was sys_vm86 */
|
||||
/* 167 was sys_query_module */
|
||||
#define __NR_poll 168
|
||||
#define __NR_nfsservctl 169
|
||||
#define __NR_setresgid 170
|
||||
|
@ -197,8 +197,8 @@
|
|||
#define __NR_capset 185
|
||||
#define __NR_sigaltstack 186
|
||||
#define __NR_sendfile 187
|
||||
#define __NR_streams1 188 /* some people actually want it */
|
||||
#define __NR_streams2 189 /* some people actually want it */
|
||||
/* 188 reserved for sys_getpmsg */
|
||||
/* 189 reserved for sys_putpmsg */
|
||||
#define __NR_vfork 190
|
||||
#define __NR_ugetrlimit 191 /* SuS compliant getrlimit */
|
||||
#define __NR_mmap2 192
|
||||
|
@ -231,7 +231,8 @@
|
|||
#define __NR_madvise 219
|
||||
#define __NR_getdents64 220
|
||||
#define __NR_fcntl64 221
|
||||
/* 223 is unused */
|
||||
/* 222 is reserved for tux */
|
||||
/* 223 is unused */
|
||||
#define __NR_gettid 224
|
||||
#define __NR_readahead 225
|
||||
#define __NR_setxattr 226
|
||||
|
@ -251,15 +252,15 @@
|
|||
#define __NR_futex 240
|
||||
#define __NR_sched_setaffinity 241
|
||||
#define __NR_sched_getaffinity 242
|
||||
#define __NR_set_thread_area 243
|
||||
#define __NR_get_thread_area 244
|
||||
/* 243 is reserved for set_thread_area */
|
||||
/* 244 is reserved for get_thread_area */
|
||||
#define __NR_io_setup 245
|
||||
#define __NR_io_destroy 246
|
||||
#define __NR_io_getevents 247
|
||||
#define __NR_io_submit 248
|
||||
#define __NR_io_cancel 249
|
||||
#define __NR_fadvise64 250
|
||||
|
||||
/* 251 is unused */
|
||||
#define __NR_exit_group 252
|
||||
#define __NR_lookup_dcookie 253
|
||||
#define __NR_epoll_create 254
|
||||
|
@ -281,7 +282,7 @@
|
|||
#define __NR_tgkill 270
|
||||
#define __NR_utimes 271
|
||||
#define __NR_fadvise64_64 272
|
||||
#define __NR_vserver 273
|
||||
/* 273 is reserved for vserver */
|
||||
#define __NR_mbind 274
|
||||
#define __NR_get_mempolicy 275
|
||||
#define __NR_set_mempolicy 276
|
||||
|
@ -301,7 +302,7 @@
|
|||
#define __NR_inotify_init 290
|
||||
#define __NR_inotify_add_watch 291
|
||||
#define __NR_inotify_rm_watch 292
|
||||
/* 293 is unused */
|
||||
/* 293 is unused */
|
||||
#define __NR_migrate_pages 294
|
||||
#define __NR_openat 295
|
||||
#define __NR_mkdirat 296
|
||||
|
@ -380,43 +381,4 @@
|
|||
|
||||
#define NR_syscalls 367
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#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 */
|
||||
#endif /* __ASM_SH_UNISTD_32_H */
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
#define __NR_mknod 14
|
||||
#define __NR_chmod 15
|
||||
#define __NR_lchown 16
|
||||
#define __NR_break 17
|
||||
/* 17 was sys_break */
|
||||
#define __NR_oldstat 18
|
||||
#define __NR_lseek 19
|
||||
#define __NR_getpid 20
|
||||
|
@ -45,11 +45,11 @@
|
|||
#define __NR_oldfstat 28
|
||||
#define __NR_pause 29
|
||||
#define __NR_utime 30
|
||||
#define __NR_stty 31
|
||||
#define __NR_gtty 32
|
||||
/* 31 was sys_stty */
|
||||
/* 32 was sys_gtty */
|
||||
#define __NR_access 33
|
||||
#define __NR_nice 34
|
||||
#define __NR_ftime 35
|
||||
/* 35 was sys_ftime */
|
||||
#define __NR_sync 36
|
||||
#define __NR_kill 37
|
||||
#define __NR_rename 38
|
||||
|
@ -58,7 +58,7 @@
|
|||
#define __NR_dup 41
|
||||
#define __NR_pipe 42
|
||||
#define __NR_times 43
|
||||
#define __NR_prof 44
|
||||
/* 44 was sys_prof */
|
||||
#define __NR_brk 45
|
||||
#define __NR_setgid 46
|
||||
#define __NR_getgid 47
|
||||
|
@ -67,13 +67,13 @@
|
|||
#define __NR_getegid 50
|
||||
#define __NR_acct 51
|
||||
#define __NR_umount2 52
|
||||
#define __NR_lock 53
|
||||
/* 53 was sys_lock */
|
||||
#define __NR_ioctl 54
|
||||
#define __NR_fcntl 55
|
||||
#define __NR_mpx 56
|
||||
/* 56 was sys_mpx */
|
||||
#define __NR_setpgid 57
|
||||
#define __NR_ulimit 58
|
||||
#define __NR_oldolduname 59
|
||||
/* 58 was sys_ulimit */
|
||||
/* 59 was sys_olduname */
|
||||
#define __NR_umask 60
|
||||
#define __NR_chroot 61
|
||||
#define __NR_ustat 62
|
||||
|
@ -96,7 +96,7 @@
|
|||
#define __NR_settimeofday 79
|
||||
#define __NR_getgroups 80
|
||||
#define __NR_setgroups 81
|
||||
#define __NR_select 82
|
||||
/* 82 was sys_select */
|
||||
#define __NR_symlink 83
|
||||
#define __NR_oldlstat 84
|
||||
#define __NR_readlink 85
|
||||
|
@ -112,10 +112,10 @@
|
|||
#define __NR_fchown 95
|
||||
#define __NR_getpriority 96
|
||||
#define __NR_setpriority 97
|
||||
#define __NR_profil 98
|
||||
/* 98 was sys_profil */
|
||||
#define __NR_statfs 99
|
||||
#define __NR_fstatfs 100
|
||||
#define __NR_ioperm 101
|
||||
/* 101 was sys_ioperm */
|
||||
#define __NR_socketcall 102 /* old implementation of socket systemcall */
|
||||
#define __NR_syslog 103
|
||||
#define __NR_setitimer 104
|
||||
|
@ -124,10 +124,10 @@
|
|||
#define __NR_lstat 107
|
||||
#define __NR_fstat 108
|
||||
#define __NR_olduname 109
|
||||
#define __NR_iopl 110
|
||||
/* 110 was sys_iopl */
|
||||
#define __NR_vhangup 111
|
||||
#define __NR_idle 112
|
||||
#define __NR_vm86old 113
|
||||
/* 112 was sys_idle */
|
||||
/* 113 was sys_vm86old */
|
||||
#define __NR_wait4 114
|
||||
#define __NR_swapoff 115
|
||||
#define __NR_sysinfo 116
|
||||
|
@ -141,17 +141,17 @@
|
|||
#define __NR_adjtimex 124
|
||||
#define __NR_mprotect 125
|
||||
#define __NR_sigprocmask 126
|
||||
#define __NR_create_module 127
|
||||
/* 127 was sys_create_module */
|
||||
#define __NR_init_module 128
|
||||
#define __NR_delete_module 129
|
||||
#define __NR_get_kernel_syms 130
|
||||
/* 130 was sys_get_kernel_syms */
|
||||
#define __NR_quotactl 131
|
||||
#define __NR_getpgid 132
|
||||
#define __NR_fchdir 133
|
||||
#define __NR_bdflush 134
|
||||
#define __NR_sysfs 135
|
||||
#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_setfsgid 139
|
||||
#define __NR__llseek 140
|
||||
|
@ -180,8 +180,8 @@
|
|||
#define __NR_mremap 163
|
||||
#define __NR_setresuid 164
|
||||
#define __NR_getresuid 165
|
||||
#define __NR_vm86 166
|
||||
#define __NR_query_module 167
|
||||
/* 166 was sys_vm86 */
|
||||
/* 167 was sys_query_module */
|
||||
#define __NR_poll 168
|
||||
#define __NR_nfsservctl 169
|
||||
#define __NR_setresgid 170
|
||||
|
@ -202,8 +202,8 @@
|
|||
#define __NR_capset 185
|
||||
#define __NR_sigaltstack 186
|
||||
#define __NR_sendfile 187
|
||||
#define __NR_streams1 188 /* some people actually want it */
|
||||
#define __NR_streams2 189 /* some people actually want it */
|
||||
/* 188 reserved for getpmsg */
|
||||
/* 189 reserved for putpmsg */
|
||||
#define __NR_vfork 190
|
||||
#define __NR_ugetrlimit 191 /* SuS compliant getrlimit */
|
||||
#define __NR_mmap2 192
|
||||
|
@ -262,16 +262,15 @@
|
|||
#define __NR_msgrcv 241
|
||||
#define __NR_msgget 242
|
||||
#define __NR_msgctl 243
|
||||
#if 0
|
||||
#define __NR_shmatcall 244
|
||||
#endif
|
||||
#define __NR_shmat 244
|
||||
#define __NR_shmdt 245
|
||||
#define __NR_shmget 246
|
||||
#define __NR_shmctl 247
|
||||
|
||||
#define __NR_getdents64 248
|
||||
#define __NR_fcntl64 249
|
||||
/* 223 is unused */
|
||||
/* 250 is reserved for tux */
|
||||
/* 251 is unused */
|
||||
#define __NR_gettid 252
|
||||
#define __NR_readahead 253
|
||||
#define __NR_setxattr 254
|
||||
|
@ -291,14 +290,15 @@
|
|||
#define __NR_futex 268
|
||||
#define __NR_sched_setaffinity 269
|
||||
#define __NR_sched_getaffinity 270
|
||||
#define __NR_set_thread_area 271
|
||||
#define __NR_get_thread_area 272
|
||||
/* 271 is reserved for set_thread_area */
|
||||
/* 272 is reserved for get_thread_area */
|
||||
#define __NR_io_setup 273
|
||||
#define __NR_io_destroy 274
|
||||
#define __NR_io_getevents 275
|
||||
#define __NR_io_submit 276
|
||||
#define __NR_io_cancel 277
|
||||
#define __NR_fadvise64 278
|
||||
/* 279 is unused */
|
||||
#define __NR_exit_group 280
|
||||
|
||||
#define __NR_lookup_dcookie 281
|
||||
|
@ -321,17 +321,17 @@
|
|||
#define __NR_tgkill 298
|
||||
#define __NR_utimes 299
|
||||
#define __NR_fadvise64_64 300
|
||||
#define __NR_vserver 301
|
||||
#define __NR_mbind 302
|
||||
#define __NR_get_mempolicy 303
|
||||
#define __NR_set_mempolicy 304
|
||||
/* 301 is reserved for vserver */
|
||||
/* 302 is reserved for mbind */
|
||||
/* 303 is reserved for get_mempolicy */
|
||||
/* 304 is reserved for set_mempolicy */
|
||||
#define __NR_mq_open 305
|
||||
#define __NR_mq_unlink (__NR_mq_open+1)
|
||||
#define __NR_mq_timedsend (__NR_mq_open+2)
|
||||
#define __NR_mq_timedreceive (__NR_mq_open+3)
|
||||
#define __NR_mq_notify (__NR_mq_open+4)
|
||||
#define __NR_mq_getsetattr (__NR_mq_open+5)
|
||||
#define __NR_kexec_load 311
|
||||
/* 311 is reserved for kexec */
|
||||
#define __NR_waitid 312
|
||||
#define __NR_add_key 313
|
||||
#define __NR_request_key 314
|
||||
|
@ -341,7 +341,7 @@
|
|||
#define __NR_inotify_init 318
|
||||
#define __NR_inotify_add_watch 319
|
||||
#define __NR_inotify_rm_watch 320
|
||||
/* 321 is unused */
|
||||
/* 321 is unused */
|
||||
#define __NR_migrate_pages 322
|
||||
#define __NR_openat 323
|
||||
#define __NR_mkdirat 324
|
||||
|
@ -399,44 +399,6 @@
|
|||
#define __NR_process_vm_readv 376
|
||||
#define __NR_process_vm_writev 377
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#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 */
|
||||
|
|
|
@ -16,45 +16,29 @@
|
|||
|
||||
#define DMAOR_INIT DMAOR_DME
|
||||
|
||||
#if defined(CONFIG_CPU_SUBTYPE_SH7343) || \
|
||||
defined(CONFIG_CPU_SUBTYPE_SH7730)
|
||||
#if defined(CONFIG_CPU_SUBTYPE_SH7343)
|
||||
#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_SH7722) || \
|
||||
defined(CONFIG_CPU_SUBTYPE_SH7723) || \
|
||||
defined(CONFIG_CPU_SUBTYPE_SH7724) || \
|
||||
defined(CONFIG_CPU_SUBTYPE_SH7730) || \
|
||||
defined(CONFIG_CPU_SUBTYPE_SH7786)
|
||||
#define CHCR_TS_LOW_MASK 0x00000018
|
||||
#define CHCR_TS_LOW_SHIFT 3
|
||||
#define CHCR_TS_HIGH_MASK 0x00300000
|
||||
#define CHCR_TS_HIGH_SHIFT (20 - 2) /* 2 bits for shifted low TS */
|
||||
#elif defined(CONFIG_CPU_SUBTYPE_SH7763) || \
|
||||
defined(CONFIG_CPU_SUBTYPE_SH7764)
|
||||
#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_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)
|
||||
#elif defined(CONFIG_CPU_SUBTYPE_SH7757) || \
|
||||
defined(CONFIG_CPU_SUBTYPE_SH7763) || \
|
||||
defined(CONFIG_CPU_SUBTYPE_SH7764) || \
|
||||
defined(CONFIG_CPU_SUBTYPE_SH7780) || \
|
||||
defined(CONFIG_CPU_SUBTYPE_SH7785)
|
||||
#define CHCR_TS_LOW_MASK 0x00000018
|
||||
#define CHCR_TS_LOW_SHIFT 3
|
||||
#define CHCR_TS_HIGH_MASK 0x00100000
|
||||
#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
|
||||
|
||||
/* Transmit sizes and respective CHCR register values */
|
||||
|
|
|
@ -0,0 +1,49 @@
|
|||
/*
|
||||
* 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 = {
|
|||
.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[] = {
|
||||
[0] = {
|
||||
.start = 0xfe4f1000,
|
||||
|
@ -740,6 +759,7 @@ static struct platform_device *sh7757_devices[] __initdata = {
|
|||
&dma3_device,
|
||||
&spi0_device,
|
||||
&spi1_device,
|
||||
&rspi_device,
|
||||
&usb_ehci_device,
|
||||
&usb_ohci_device,
|
||||
};
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
*
|
||||
* cpufreq driver for the SuperH processors.
|
||||
*
|
||||
* Copyright (C) 2002 - 2007 Paul Mundt
|
||||
* Copyright (C) 2002 - 2012 Paul Mundt
|
||||
* Copyright (C) 2002 M. R. Brown
|
||||
*
|
||||
* Clock framework bits from arch/avr32/mach-at32ap/cpufreq.c
|
||||
|
@ -14,6 +14,8 @@
|
|||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*/
|
||||
#define pr_fmt(fmt) "cpufreq: " fmt
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/cpufreq.h>
|
||||
#include <linux/kernel.h>
|
||||
|
@ -21,15 +23,18 @@
|
|||
#include <linux/init.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/cpumask.h>
|
||||
#include <linux/cpu.h>
|
||||
#include <linux/smp.h>
|
||||
#include <linux/sched.h> /* set_cpus_allowed() */
|
||||
#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)
|
||||
{
|
||||
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,
|
|||
unsigned int relation)
|
||||
{
|
||||
unsigned int cpu = policy->cpu;
|
||||
struct clk *cpuclk = &per_cpu(sh_cpuclk, cpu);
|
||||
cpumask_t cpus_allowed;
|
||||
struct cpufreq_freqs freqs;
|
||||
struct device *dev;
|
||||
long freq;
|
||||
|
||||
if (!cpu_online(cpu))
|
||||
|
@ -52,13 +59,15 @@ static int sh_cpufreq_target(struct cpufreq_policy *policy,
|
|||
|
||||
BUG_ON(smp_processor_id() != cpu);
|
||||
|
||||
dev = get_cpu_device(cpu);
|
||||
|
||||
/* Convert target_freq from kHz to Hz */
|
||||
freq = clk_round_rate(cpuclk, target_freq * 1000);
|
||||
|
||||
if (freq < (policy->min * 1000) || freq > (policy->max * 1000))
|
||||
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.old = sh_cpufreq_get(cpu);
|
||||
|
@ -70,78 +79,112 @@ static int sh_cpufreq_target(struct cpufreq_policy *policy,
|
|||
clk_set_rate(cpuclk, freq);
|
||||
cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE);
|
||||
|
||||
pr_debug("cpufreq: set frequency %lu Hz\n", freq);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int sh_cpufreq_cpu_init(struct cpufreq_policy *policy)
|
||||
{
|
||||
if (!cpu_online(policy->cpu))
|
||||
return -ENODEV;
|
||||
|
||||
cpuclk = clk_get(NULL, "cpu_clk");
|
||||
if (IS_ERR(cpuclk)) {
|
||||
printk(KERN_ERR "cpufreq: couldn't get CPU#%d clk\n",
|
||||
policy->cpu);
|
||||
return PTR_ERR(cpuclk);
|
||||
}
|
||||
|
||||
/* cpuinfo and default policy values */
|
||||
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);
|
||||
policy->min = policy->cpuinfo.min_freq;
|
||||
policy->max = policy->cpuinfo.max_freq;
|
||||
|
||||
/*
|
||||
* Catch the cases where the clock framework hasn't been wired up
|
||||
* properly to support scaling.
|
||||
*/
|
||||
if (unlikely(policy->min == policy->max)) {
|
||||
printk(KERN_ERR "cpufreq: clock framework rate rounding "
|
||||
"not supported on CPU#%d.\n", policy->cpu);
|
||||
|
||||
clk_put(cpuclk);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
printk(KERN_INFO "cpufreq: CPU#%d Frequencies - Minimum %u.%03u MHz, "
|
||||
"Maximum %u.%03u MHz.\n",
|
||||
policy->cpu, policy->min / 1000, policy->min % 1000,
|
||||
policy->max / 1000, policy->max % 1000);
|
||||
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;
|
||||
}
|
||||
|
||||
static int sh_cpufreq_exit(struct cpufreq_policy *policy)
|
||||
static int sh_cpufreq_cpu_init(struct cpufreq_policy *policy)
|
||||
{
|
||||
clk_put(cpuclk);
|
||||
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;
|
||||
|
||||
dev = get_cpu_device(cpu);
|
||||
|
||||
cpuclk = clk_get(dev, "cpu_clk");
|
||||
if (IS_ERR(cpuclk)) {
|
||||
dev_err(dev, "couldn't get CPU clk\n");
|
||||
return PTR_ERR(cpuclk);
|
||||
}
|
||||
|
||||
policy->cur = policy->min = policy->max = sh_cpufreq_get(cpu);
|
||||
|
||||
freq_table = cpuclk->nr_freqs ? cpuclk->freq_table : NULL;
|
||||
if (freq_table) {
|
||||
int result;
|
||||
|
||||
result = cpufreq_frequency_table_cpuinfo(policy, freq_table);
|
||||
if (!result)
|
||||
cpufreq_frequency_table_get_attr(freq_table, cpu);
|
||||
} else {
|
||||
dev_notice(dev, "no frequency table found, falling back "
|
||||
"to rate rounding.\n");
|
||||
|
||||
policy->cpuinfo.min_freq =
|
||||
(clk_round_rate(cpuclk, 1) + 500) / 1000;
|
||||
policy->cpuinfo.max_freq =
|
||||
(clk_round_rate(cpuclk, ~0UL) + 500) / 1000;
|
||||
}
|
||||
|
||||
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",
|
||||
policy->min / 1000, policy->min % 1000,
|
||||
policy->max / 1000, policy->max % 1000);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int sh_cpufreq_cpu_exit(struct cpufreq_policy *policy)
|
||||
{
|
||||
unsigned int cpu = policy->cpu;
|
||||
struct clk *cpuclk = &per_cpu(sh_cpuclk, cpu);
|
||||
|
||||
cpufreq_frequency_table_put_attr(cpu);
|
||||
clk_put(cpuclk);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct freq_attr *sh_freq_attr[] = {
|
||||
&cpufreq_freq_attr_scaling_available_freqs,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static struct cpufreq_driver sh_cpufreq_driver = {
|
||||
.owner = THIS_MODULE,
|
||||
.name = "sh",
|
||||
.init = sh_cpufreq_cpu_init,
|
||||
.verify = sh_cpufreq_verify,
|
||||
.target = sh_cpufreq_target,
|
||||
.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)
|
||||
{
|
||||
printk(KERN_INFO "cpufreq: SuperH CPU frequency driver.\n");
|
||||
pr_notice("SuperH CPU frequency driver.\n");
|
||||
return cpufreq_register_driver(&sh_cpufreq_driver);
|
||||
}
|
||||
|
||||
|
|
|
@ -57,12 +57,13 @@ sys_sigsuspend(old_sigset_t mask,
|
|||
unsigned long r5, unsigned long r6, unsigned long r7,
|
||||
struct pt_regs __regs)
|
||||
{
|
||||
mask &= _BLOCKABLE;
|
||||
spin_lock_irq(¤t->sighand->siglock);
|
||||
sigset_t blocked;
|
||||
|
||||
current->saved_sigmask = current->blocked;
|
||||
siginitset(¤t->blocked, mask);
|
||||
recalc_sigpending();
|
||||
spin_unlock_irq(¤t->sighand->siglock);
|
||||
|
||||
mask &= _BLOCKABLE;
|
||||
siginitset(&blocked, mask);
|
||||
set_current_blocked(&blocked);
|
||||
|
||||
current->state = TASK_INTERRUPTIBLE;
|
||||
schedule();
|
||||
|
@ -239,11 +240,7 @@ asmlinkage int sys_sigreturn(unsigned long r4, unsigned long r5,
|
|||
goto badframe;
|
||||
|
||||
sigdelsetmask(&set, ~_BLOCKABLE);
|
||||
|
||||
spin_lock_irq(¤t->sighand->siglock);
|
||||
current->blocked = set;
|
||||
recalc_sigpending();
|
||||
spin_unlock_irq(¤t->sighand->siglock);
|
||||
set_current_blocked(&set);
|
||||
|
||||
if (restore_sigcontext(regs, &frame->sc, &r0))
|
||||
goto badframe;
|
||||
|
@ -273,10 +270,7 @@ asmlinkage int sys_rt_sigreturn(unsigned long r4, unsigned long r5,
|
|||
goto badframe;
|
||||
|
||||
sigdelsetmask(&set, ~_BLOCKABLE);
|
||||
spin_lock_irq(¤t->sighand->siglock);
|
||||
current->blocked = set;
|
||||
recalc_sigpending();
|
||||
spin_unlock_irq(¤t->sighand->siglock);
|
||||
set_current_blocked(&set);
|
||||
|
||||
if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &r0))
|
||||
goto badframe;
|
||||
|
@ -547,17 +541,8 @@ handle_signal(unsigned long sig, struct k_sigaction *ka, siginfo_t *info,
|
|||
else
|
||||
ret = setup_frame(sig, ka, oldset, regs);
|
||||
|
||||
if (ka->sa.sa_flags & SA_ONESHOT)
|
||||
ka->sa.sa_handler = SIG_DFL;
|
||||
|
||||
if (ret == 0) {
|
||||
spin_lock_irq(¤t->sighand->siglock);
|
||||
sigorsets(¤t->blocked,¤t->blocked,&ka->sa.sa_mask);
|
||||
if (!(ka->sa.sa_flags & SA_NODEFER))
|
||||
sigaddset(¤t->blocked,sig);
|
||||
recalc_sigpending();
|
||||
spin_unlock_irq(¤t->sighand->siglock);
|
||||
}
|
||||
if (ret == 0)
|
||||
block_sigmask(ka, sig);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -159,14 +159,13 @@ sys_sigsuspend(old_sigset_t mask,
|
|||
unsigned long r6, unsigned long r7,
|
||||
struct pt_regs * regs)
|
||||
{
|
||||
sigset_t saveset;
|
||||
sigset_t saveset, blocked;
|
||||
|
||||
saveset = current->blocked;
|
||||
|
||||
mask &= _BLOCKABLE;
|
||||
spin_lock_irq(¤t->sighand->siglock);
|
||||
saveset = current->blocked;
|
||||
siginitset(¤t->blocked, mask);
|
||||
recalc_sigpending();
|
||||
spin_unlock_irq(¤t->sighand->siglock);
|
||||
siginitset(&blocked, mask);
|
||||
set_current_blocked(&blocked);
|
||||
|
||||
REF_REG_RET = -EINTR;
|
||||
while (1) {
|
||||
|
@ -198,11 +197,8 @@ sys_rt_sigsuspend(sigset_t *unewset, size_t sigsetsize,
|
|||
if (copy_from_user(&newset, unewset, sizeof(newset)))
|
||||
return -EFAULT;
|
||||
sigdelsetmask(&newset, ~_BLOCKABLE);
|
||||
spin_lock_irq(¤t->sighand->siglock);
|
||||
saveset = current->blocked;
|
||||
current->blocked = newset;
|
||||
recalc_sigpending();
|
||||
spin_unlock_irq(¤t->sighand->siglock);
|
||||
set_current_blocked(&newset);
|
||||
|
||||
REF_REG_RET = -EINTR;
|
||||
while (1) {
|
||||
|
@ -408,11 +404,7 @@ asmlinkage int sys_sigreturn(unsigned long r2, unsigned long r3,
|
|||
goto badframe;
|
||||
|
||||
sigdelsetmask(&set, ~_BLOCKABLE);
|
||||
|
||||
spin_lock_irq(¤t->sighand->siglock);
|
||||
current->blocked = set;
|
||||
recalc_sigpending();
|
||||
spin_unlock_irq(¤t->sighand->siglock);
|
||||
set_current_blocked(&set);
|
||||
|
||||
if (restore_sigcontext(regs, &frame->sc, &ret))
|
||||
goto badframe;
|
||||
|
@ -445,10 +437,7 @@ asmlinkage int sys_rt_sigreturn(unsigned long r2, unsigned long r3,
|
|||
goto badframe;
|
||||
|
||||
sigdelsetmask(&set, ~_BLOCKABLE);
|
||||
spin_lock_irq(¤t->sighand->siglock);
|
||||
current->blocked = set;
|
||||
recalc_sigpending();
|
||||
spin_unlock_irq(¤t->sighand->siglock);
|
||||
set_current_blocked(&set);
|
||||
|
||||
if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &ret))
|
||||
goto badframe;
|
||||
|
@ -734,17 +723,8 @@ handle_signal(unsigned long sig, siginfo_t *info, struct k_sigaction *ka,
|
|||
else
|
||||
ret = setup_frame(sig, ka, oldset, regs);
|
||||
|
||||
if (ka->sa.sa_flags & SA_ONESHOT)
|
||||
ka->sa.sa_handler = SIG_DFL;
|
||||
|
||||
if (ret == 0) {
|
||||
spin_lock_irq(¤t->sighand->siglock);
|
||||
sigorsets(¤t->blocked,¤t->blocked,&ka->sa.sa_mask);
|
||||
if (!(ka->sa.sa_flags & SA_NODEFER))
|
||||
sigaddset(¤t->blocked,sig);
|
||||
recalc_sigpending();
|
||||
spin_unlock_irq(¤t->sighand->siglock);
|
||||
}
|
||||
if (ret == 0)
|
||||
block_sigmask(ka, sig);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -204,8 +204,8 @@ ENTRY(sys_call_table)
|
|||
.long sys_capset /* 185 */
|
||||
.long sys_sigaltstack
|
||||
.long sys_sendfile
|
||||
.long sys_ni_syscall /* streams1 */
|
||||
.long sys_ni_syscall /* streams2 */
|
||||
.long sys_ni_syscall /* getpmsg */
|
||||
.long sys_ni_syscall /* putpmsg */
|
||||
.long sys_vfork /* 190 */
|
||||
.long sys_getrlimit
|
||||
.long sys_mmap2
|
||||
|
@ -259,8 +259,8 @@ ENTRY(sys_call_table)
|
|||
.long sys_futex /* 240 */
|
||||
.long sys_sched_setaffinity
|
||||
.long sys_sched_getaffinity
|
||||
.long sys_ni_syscall
|
||||
.long sys_ni_syscall
|
||||
.long sys_ni_syscall /* reserved for set_thread_area */
|
||||
.long sys_ni_syscall /* reserved for get_thread_area */
|
||||
.long sys_io_setup /* 245 */
|
||||
.long sys_io_destroy
|
||||
.long sys_io_getevents
|
||||
|
|
|
@ -208,8 +208,8 @@ sys_call_table:
|
|||
.long sys_capset /* 185 */
|
||||
.long sys_sigaltstack
|
||||
.long sys_sendfile
|
||||
.long sys_ni_syscall /* streams1 */
|
||||
.long sys_ni_syscall /* streams2 */
|
||||
.long sys_ni_syscall /* getpmsg */
|
||||
.long sys_ni_syscall /* putpmsg */
|
||||
.long sys_vfork /* 190 */
|
||||
.long sys_getrlimit
|
||||
.long sys_mmap2
|
||||
|
@ -296,8 +296,8 @@ sys_call_table:
|
|||
.long sys_futex
|
||||
.long sys_sched_setaffinity
|
||||
.long sys_sched_getaffinity /* 270 */
|
||||
.long sys_ni_syscall
|
||||
.long sys_ni_syscall
|
||||
.long sys_ni_syscall /* reserved for set_thread_area */
|
||||
.long sys_ni_syscall /* reserved for get_thread_area */
|
||||
.long sys_io_setup
|
||||
.long sys_io_destroy
|
||||
.long sys_io_getevents /* 275 */
|
||||
|
|
|
@ -2,13 +2,14 @@
|
|||
* IRQ chip definitions for INTC IRQs.
|
||||
*
|
||||
* 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
|
||||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*/
|
||||
#include <linux/cpumask.h>
|
||||
#include <linux/bsearch.h>
|
||||
#include <linux/io.h>
|
||||
#include "internals.h"
|
||||
|
||||
|
@ -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
|
||||
/*
|
||||
* 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,
|
|||
|
||||
cpumask_copy(data->affinity, cpumask);
|
||||
|
||||
return 0;
|
||||
return IRQ_SET_MASK_OK_NOCOPY;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -122,28 +118,12 @@ static struct intc_handle_int *intc_find_irq(struct intc_handle_int *hp,
|
|||
unsigned int nr_hp,
|
||||
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;
|
||||
key.irq = irq;
|
||||
key.handle = 0;
|
||||
|
||||
return hp + i;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
return bsearch(&key, hp, nr_hp, sizeof(*hp), intc_handle_int_cmp);
|
||||
}
|
||||
|
||||
int intc_set_priority(unsigned int irq, unsigned int prio)
|
||||
|
@ -223,10 +203,9 @@ struct irq_chip intc_irq_chip = {
|
|||
.irq_mask_ack = intc_mask_ack,
|
||||
.irq_enable = intc_enable,
|
||||
.irq_disable = intc_disable,
|
||||
.irq_shutdown = intc_disable,
|
||||
.irq_set_type = intc_set_type,
|
||||
.irq_set_wake = intc_set_wake,
|
||||
#ifdef CONFIG_SMP
|
||||
.irq_set_affinity = intc_set_affinity,
|
||||
#endif
|
||||
.flags = IRQCHIP_SKIP_SET_WAKE,
|
||||
};
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* Shared interrupt handling code for IPR and INTC2 types of IRQs.
|
||||
*
|
||||
* 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
|
||||
*
|
||||
|
@ -31,11 +31,12 @@
|
|||
#include <linux/spinlock.h>
|
||||
#include <linux/radix-tree.h>
|
||||
#include <linux/export.h>
|
||||
#include <linux/sort.h>
|
||||
#include "internals.h"
|
||||
|
||||
LIST_HEAD(intc_list);
|
||||
DEFINE_RAW_SPINLOCK(intc_big_lock);
|
||||
unsigned int nr_intc_controllers;
|
||||
static unsigned int nr_intc_controllers;
|
||||
|
||||
/*
|
||||
* Default priority level
|
||||
|
@ -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].clr_reg, smp);
|
||||
}
|
||||
|
||||
sort(d->prio, hw->nr_prio_regs, sizeof(*d->prio),
|
||||
intc_handle_int_cmp, NULL);
|
||||
}
|
||||
|
||||
if (hw->sense_regs) {
|
||||
|
@ -277,6 +281,9 @@ int __init register_intc_controller(struct intc_desc *desc)
|
|||
|
||||
for (i = 0; i < hw->nr_sense_regs; i++)
|
||||
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)
|
||||
|
|
|
@ -172,9 +172,8 @@ intc_get_prio_handle(struct intc_desc *desc, struct intc_desc_int *d,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static unsigned int __init intc_ack_data(struct intc_desc *desc,
|
||||
struct intc_desc_int *d,
|
||||
intc_enum enum_id)
|
||||
static unsigned int intc_ack_data(struct intc_desc *desc,
|
||||
struct intc_desc_int *d, intc_enum enum_id)
|
||||
{
|
||||
struct intc_mask_reg *mr = desc->hw.ack_regs;
|
||||
unsigned int i, j, fn, mode;
|
||||
|
|
|
@ -108,6 +108,14 @@ static inline void activate_irq(int irq)
|
|||
#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 */
|
||||
extern unsigned long
|
||||
(*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);
|
|||
/* core.c */
|
||||
extern struct list_head intc_list;
|
||||
extern raw_spinlock_t intc_big_lock;
|
||||
extern unsigned int nr_intc_controllers;
|
||||
extern struct bus_type intc_subsys;
|
||||
|
||||
unsigned int intc_get_dfl_prio_level(void);
|
||||
|
|
|
@ -1229,17 +1229,20 @@ static void sci_dma_tx_complete(void *arg)
|
|||
port->icount.tx += sg_dma_len(&s->sg_tx);
|
||||
|
||||
async_tx_ack(s->desc_tx);
|
||||
s->cookie_tx = -EINVAL;
|
||||
s->desc_tx = NULL;
|
||||
|
||||
if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
|
||||
uart_write_wakeup(port);
|
||||
|
||||
if (!uart_circ_empty(xmit)) {
|
||||
s->cookie_tx = 0;
|
||||
schedule_work(&s->work_tx);
|
||||
} else if (port->type == PORT_SCIFA || port->type == PORT_SCIFB) {
|
||||
u16 ctrl = sci_in(port, SCSCR);
|
||||
sci_out(port, SCSCR, ctrl & ~SCSCR_TIE);
|
||||
} else {
|
||||
s->cookie_tx = -EINVAL;
|
||||
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);
|
||||
|
@ -1501,8 +1504,10 @@ static void sci_start_tx(struct uart_port *port)
|
|||
}
|
||||
|
||||
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);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (!s->chan_tx || port->type == PORT_SCIFA || port->type == PORT_SCIFB) {
|
||||
|
|
Loading…
Reference in New Issue