Merge master.kernel.org:/home/rmk/linux-2.6-arm
* master.kernel.org:/home/rmk/linux-2.6-arm: (23 commits) [ARM] Fix virtual to physical translation macro corner cases [ARM] update mach-types [ARM] 5421/1: ftrace: fix crash due to tracing of __naked functions MX1 fix include [ARM] 5419/1: ep93xx: fix build warnings about struct i2c_board_info [ARM] 5418/1: restore lr before leaving mcount ARM: OMAP: board-omap3beagle: set i2c-3 to 100kHz ARM: OMAP: Allow I2C bus driver to be compiled as a module ARM: OMAP: sched_clock() corrected ARM: OMAP: Fix compile error if pm.h is included [ARM] orion5x: pass dram mbus data to xor driver [ARM] S3C64XX: Fix s3c64xx_setrate_clksrc [ARM] S3C64XX: sparse warnings in arch/arm/plat-s3c64xx/irq.c [ARM] S3C64XX: sparse warnings in arch/arm/plat-s3c64xx/s3c6400-clock.c [ARM] S3C64XX: Fix USB host clock mux list [ARM] S3C64XX: Fix name of USB host clock. [ARM] S3C64XX: Rename IRQ_UHOST to IRQ_USBH [ARM] S3C64XX: Do gpiolib configuration earlier [ARM] S3C64XX: Staticise s3c64xx_init_irq_eint() [ARM] SMDK6410: Declare iodesc table static ...
This commit is contained in:
commit
fbd8104c2e
|
@ -111,6 +111,7 @@ ENTRY(mcount)
|
||||||
.globl mcount_call
|
.globl mcount_call
|
||||||
mcount_call:
|
mcount_call:
|
||||||
bl ftrace_stub
|
bl ftrace_stub
|
||||||
|
ldr lr, [fp, #-4] @ restore lr
|
||||||
ldmia sp!, {r0-r3, pc}
|
ldmia sp!, {r0-r3, pc}
|
||||||
|
|
||||||
ENTRY(ftrace_caller)
|
ENTRY(ftrace_caller)
|
||||||
|
@ -122,6 +123,7 @@ ENTRY(ftrace_caller)
|
||||||
.globl ftrace_call
|
.globl ftrace_call
|
||||||
ftrace_call:
|
ftrace_call:
|
||||||
bl ftrace_stub
|
bl ftrace_stub
|
||||||
|
ldr lr, [fp, #-4] @ restore lr
|
||||||
ldmia sp!, {r0-r3, pc}
|
ldmia sp!, {r0-r3, pc}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
@ -133,6 +135,7 @@ ENTRY(mcount)
|
||||||
adr r0, ftrace_stub
|
adr r0, ftrace_stub
|
||||||
cmp r0, r2
|
cmp r0, r2
|
||||||
bne trace
|
bne trace
|
||||||
|
ldr lr, [fp, #-4] @ restore lr
|
||||||
ldmia sp!, {r0-r3, pc}
|
ldmia sp!, {r0-r3, pc}
|
||||||
|
|
||||||
trace:
|
trace:
|
||||||
|
@ -141,6 +144,7 @@ trace:
|
||||||
sub r0, r0, #MCOUNT_INSN_SIZE
|
sub r0, r0, #MCOUNT_INSN_SIZE
|
||||||
mov lr, pc
|
mov lr, pc
|
||||||
mov pc, r2
|
mov pc, r2
|
||||||
|
mov lr, r1 @ restore lr
|
||||||
ldmia sp!, {r0-r3, pc}
|
ldmia sp!, {r0-r3, pc}
|
||||||
|
|
||||||
#endif /* CONFIG_DYNAMIC_FTRACE */
|
#endif /* CONFIG_DYNAMIC_FTRACE */
|
||||||
|
|
|
@ -88,7 +88,7 @@ void set_fiq_handler(void *start, unsigned int length)
|
||||||
* disable irqs for the duration. Note - these functions are almost
|
* disable irqs for the duration. Note - these functions are almost
|
||||||
* entirely coded in assembly.
|
* entirely coded in assembly.
|
||||||
*/
|
*/
|
||||||
void __attribute__((naked)) set_fiq_regs(struct pt_regs *regs)
|
void __naked set_fiq_regs(struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
register unsigned long tmp;
|
register unsigned long tmp;
|
||||||
asm volatile (
|
asm volatile (
|
||||||
|
@ -106,7 +106,7 @@ void __attribute__((naked)) set_fiq_regs(struct pt_regs *regs)
|
||||||
: "r" (®s->ARM_r8), "I" (PSR_I_BIT | PSR_F_BIT | FIQ_MODE));
|
: "r" (®s->ARM_r8), "I" (PSR_I_BIT | PSR_F_BIT | FIQ_MODE));
|
||||||
}
|
}
|
||||||
|
|
||||||
void __attribute__((naked)) get_fiq_regs(struct pt_regs *regs)
|
void __naked get_fiq_regs(struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
register unsigned long tmp;
|
register unsigned long tmp;
|
||||||
asm volatile (
|
asm volatile (
|
||||||
|
|
|
@ -4,6 +4,8 @@
|
||||||
|
|
||||||
#ifndef __ASSEMBLY__
|
#ifndef __ASSEMBLY__
|
||||||
|
|
||||||
|
struct i2c_board_info;
|
||||||
|
|
||||||
struct ep93xx_eth_data
|
struct ep93xx_eth_data
|
||||||
{
|
{
|
||||||
unsigned char dev_addr[6];
|
unsigned char dev_addr[6];
|
||||||
|
|
|
@ -23,6 +23,8 @@
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/gpio.h>
|
#include <linux/gpio.h>
|
||||||
|
|
||||||
|
#include <mach/irqs.h>
|
||||||
#include <mach/hardware.h>
|
#include <mach/hardware.h>
|
||||||
|
|
||||||
static struct resource imx_csi_resources[] = {
|
static struct resource imx_csi_resources[] = {
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
#include <asm/mach/arch.h>
|
#include <asm/mach/arch.h>
|
||||||
#include <asm/mach/time.h>
|
#include <asm/mach/time.h>
|
||||||
|
|
||||||
|
#include <mach/irqs.h>
|
||||||
#include <mach/hardware.h>
|
#include <mach/hardware.h>
|
||||||
#include <mach/common.h>
|
#include <mach/common.h>
|
||||||
#include <mach/imx-uart.h>
|
#include <mach/imx-uart.h>
|
||||||
|
|
|
@ -178,7 +178,9 @@ static int __init omap3_beagle_i2c_init(void)
|
||||||
#ifdef CONFIG_I2C2_OMAP_BEAGLE
|
#ifdef CONFIG_I2C2_OMAP_BEAGLE
|
||||||
omap_register_i2c_bus(2, 400, NULL, 0);
|
omap_register_i2c_bus(2, 400, NULL, 0);
|
||||||
#endif
|
#endif
|
||||||
omap_register_i2c_bus(3, 400, NULL, 0);
|
/* Bus 3 is attached to the DVI port where devices like the pico DLP
|
||||||
|
* projector don't work reliably with 400kHz */
|
||||||
|
omap_register_i2c_bus(3, 100, NULL, 0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -431,6 +431,10 @@ void __init orion5x_uart1_init(void)
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
* XOR engine
|
* XOR engine
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
struct mv_xor_platform_shared_data orion5x_xor_shared_data = {
|
||||||
|
.dram = &orion5x_mbus_dram_info,
|
||||||
|
};
|
||||||
|
|
||||||
static struct resource orion5x_xor_shared_resources[] = {
|
static struct resource orion5x_xor_shared_resources[] = {
|
||||||
{
|
{
|
||||||
.name = "xor low",
|
.name = "xor low",
|
||||||
|
@ -448,6 +452,9 @@ static struct resource orion5x_xor_shared_resources[] = {
|
||||||
static struct platform_device orion5x_xor_shared = {
|
static struct platform_device orion5x_xor_shared = {
|
||||||
.name = MV_XOR_SHARED_NAME,
|
.name = MV_XOR_SHARED_NAME,
|
||||||
.id = 0,
|
.id = 0,
|
||||||
|
.dev = {
|
||||||
|
.platform_data = &orion5x_xor_shared_data,
|
||||||
|
},
|
||||||
.num_resources = ARRAY_SIZE(orion5x_xor_shared_resources),
|
.num_resources = ARRAY_SIZE(orion5x_xor_shared_resources),
|
||||||
.resource = orion5x_xor_shared_resources,
|
.resource = orion5x_xor_shared_resources,
|
||||||
};
|
};
|
||||||
|
|
|
@ -129,7 +129,7 @@ static struct s3c_fb_platdata smdk6410_lcd_pdata __initdata = {
|
||||||
.vidcon1 = VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC,
|
.vidcon1 = VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct map_desc smdk6410_iodesc[] = {};
|
static struct map_desc smdk6410_iodesc[] = {};
|
||||||
|
|
||||||
static struct platform_device *smdk6410_devices[] __initdata = {
|
static struct platform_device *smdk6410_devices[] __initdata = {
|
||||||
#ifdef CONFIG_SMDK6410_SD_CH0
|
#ifdef CONFIG_SMDK6410_SD_CH0
|
||||||
|
@ -146,7 +146,7 @@ static struct platform_device *smdk6410_devices[] __initdata = {
|
||||||
|
|
||||||
static struct i2c_board_info i2c_devs0[] __initdata = {
|
static struct i2c_board_info i2c_devs0[] __initdata = {
|
||||||
{ I2C_BOARD_INFO("24c08", 0x50), },
|
{ I2C_BOARD_INFO("24c08", 0x50), },
|
||||||
{ I2C_BOARD_INFO("WM8580", 0X1b), },
|
{ I2C_BOARD_INFO("wm8580", 0x1b), },
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct i2c_board_info i2c_devs1[] __initdata = {
|
static struct i2c_board_info i2c_devs1[] __initdata = {
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/highmem.h>
|
#include <linux/highmem.h>
|
||||||
|
|
||||||
static void __attribute__((naked))
|
static void __naked
|
||||||
feroceon_copy_user_page(void *kto, const void *kfrom)
|
feroceon_copy_user_page(void *kto, const void *kfrom)
|
||||||
{
|
{
|
||||||
asm("\
|
asm("\
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
*
|
*
|
||||||
* FIXME: do we need to handle cache stuff...
|
* FIXME: do we need to handle cache stuff...
|
||||||
*/
|
*/
|
||||||
static void __attribute__((naked))
|
static void __naked
|
||||||
v3_copy_user_page(void *kto, const void *kfrom)
|
v3_copy_user_page(void *kto, const void *kfrom)
|
||||||
{
|
{
|
||||||
asm("\n\
|
asm("\n\
|
||||||
|
|
|
@ -44,7 +44,7 @@ static DEFINE_SPINLOCK(minicache_lock);
|
||||||
* instruction. If your processor does not supply this, you have to write your
|
* instruction. If your processor does not supply this, you have to write your
|
||||||
* own copy_user_highpage that does the right thing.
|
* own copy_user_highpage that does the right thing.
|
||||||
*/
|
*/
|
||||||
static void __attribute__((naked))
|
static void __naked
|
||||||
mc_copy_user_page(void *from, void *to)
|
mc_copy_user_page(void *from, void *to)
|
||||||
{
|
{
|
||||||
asm volatile(
|
asm volatile(
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
* instruction. If your processor does not supply this, you have to write your
|
* instruction. If your processor does not supply this, you have to write your
|
||||||
* own copy_user_highpage that does the right thing.
|
* own copy_user_highpage that does the right thing.
|
||||||
*/
|
*/
|
||||||
static void __attribute__((naked))
|
static void __naked
|
||||||
v4wb_copy_user_page(void *kto, const void *kfrom)
|
v4wb_copy_user_page(void *kto, const void *kfrom)
|
||||||
{
|
{
|
||||||
asm("\
|
asm("\
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
* dirty data in the cache. However, we do have to ensure that
|
* dirty data in the cache. However, we do have to ensure that
|
||||||
* subsequent reads are up to date.
|
* subsequent reads are up to date.
|
||||||
*/
|
*/
|
||||||
static void __attribute__((naked))
|
static void __naked
|
||||||
v4wt_copy_user_page(void *kto, const void *kfrom)
|
v4wt_copy_user_page(void *kto, const void *kfrom)
|
||||||
{
|
{
|
||||||
asm("\
|
asm("\
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
* if we eventually end up using our copied page.
|
* if we eventually end up using our copied page.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
static void __attribute__((naked))
|
static void __naked
|
||||||
xsc3_mc_copy_user_page(void *kto, const void *kfrom)
|
xsc3_mc_copy_user_page(void *kto, const void *kfrom)
|
||||||
{
|
{
|
||||||
asm("\
|
asm("\
|
||||||
|
|
|
@ -42,7 +42,7 @@ static DEFINE_SPINLOCK(minicache_lock);
|
||||||
* Dcache aliasing issue. The writes will be forwarded to the write buffer,
|
* Dcache aliasing issue. The writes will be forwarded to the write buffer,
|
||||||
* and merged as appropriate.
|
* and merged as appropriate.
|
||||||
*/
|
*/
|
||||||
static void __attribute__((naked))
|
static void __naked
|
||||||
mc_copy_user_page(void *from, void *to)
|
mc_copy_user_page(void *from, void *to)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -490,26 +490,30 @@ core_initcall(consistent_init);
|
||||||
*/
|
*/
|
||||||
void dma_cache_maint(const void *start, size_t size, int direction)
|
void dma_cache_maint(const void *start, size_t size, int direction)
|
||||||
{
|
{
|
||||||
const void *end = start + size;
|
void (*inner_op)(const void *, const void *);
|
||||||
|
void (*outer_op)(unsigned long, unsigned long);
|
||||||
|
|
||||||
BUG_ON(!virt_addr_valid(start) || !virt_addr_valid(end - 1));
|
BUG_ON(!virt_addr_valid(start) || !virt_addr_valid(start + size - 1));
|
||||||
|
|
||||||
switch (direction) {
|
switch (direction) {
|
||||||
case DMA_FROM_DEVICE: /* invalidate only */
|
case DMA_FROM_DEVICE: /* invalidate only */
|
||||||
dmac_inv_range(start, end);
|
inner_op = dmac_inv_range;
|
||||||
outer_inv_range(__pa(start), __pa(end));
|
outer_op = outer_inv_range;
|
||||||
break;
|
break;
|
||||||
case DMA_TO_DEVICE: /* writeback only */
|
case DMA_TO_DEVICE: /* writeback only */
|
||||||
dmac_clean_range(start, end);
|
inner_op = dmac_clean_range;
|
||||||
outer_clean_range(__pa(start), __pa(end));
|
outer_op = outer_clean_range;
|
||||||
break;
|
break;
|
||||||
case DMA_BIDIRECTIONAL: /* writeback and invalidate */
|
case DMA_BIDIRECTIONAL: /* writeback and invalidate */
|
||||||
dmac_flush_range(start, end);
|
inner_op = dmac_flush_range;
|
||||||
outer_flush_range(__pa(start), __pa(end));
|
outer_op = outer_flush_range;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
BUG();
|
BUG();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inner_op(start, start + size);
|
||||||
|
outer_op(__pa(start), __pa(start) + size);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(dma_cache_maint);
|
EXPORT_SYMBOL(dma_cache_maint);
|
||||||
|
|
||||||
|
|
|
@ -382,7 +382,7 @@ void __init bootmem_init(void)
|
||||||
for_each_node(node)
|
for_each_node(node)
|
||||||
bootmem_free_node(node, mi);
|
bootmem_free_node(node, mi);
|
||||||
|
|
||||||
high_memory = __va(memend_pfn << PAGE_SHIFT);
|
high_memory = __va((memend_pfn << PAGE_SHIFT) - 1) + 1;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This doesn't seem to be used by the Linux memory manager any
|
* This doesn't seem to be used by the Linux memory manager any
|
||||||
|
|
|
@ -124,7 +124,7 @@ int valid_phys_addr_range(unsigned long addr, size_t size)
|
||||||
{
|
{
|
||||||
if (addr < PHYS_OFFSET)
|
if (addr < PHYS_OFFSET)
|
||||||
return 0;
|
return 0;
|
||||||
if (addr + size > __pa(high_memory))
|
if (addr + size >= __pa(high_memory - 1))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
|
|
@ -18,7 +18,8 @@ obj-$(CONFIG_CPU_FREQ) += cpu-omap.o
|
||||||
obj-$(CONFIG_OMAP_DM_TIMER) += dmtimer.o
|
obj-$(CONFIG_OMAP_DM_TIMER) += dmtimer.o
|
||||||
obj-$(CONFIG_OMAP_DEBUG_DEVICES) += debug-devices.o
|
obj-$(CONFIG_OMAP_DEBUG_DEVICES) += debug-devices.o
|
||||||
obj-$(CONFIG_OMAP_DEBUG_LEDS) += debug-leds.o
|
obj-$(CONFIG_OMAP_DEBUG_LEDS) += debug-leds.o
|
||||||
obj-$(CONFIG_I2C_OMAP) += i2c.o
|
i2c-omap-$(CONFIG_I2C_OMAP) := i2c.o
|
||||||
|
obj-y += $(i2c-omap-m) $(i2c-omap-y)
|
||||||
|
|
||||||
# OMAP mailbox framework
|
# OMAP mailbox framework
|
||||||
obj-$(CONFIG_OMAP_MBOX_FWK) += mailbox.o
|
obj-$(CONFIG_OMAP_MBOX_FWK) += mailbox.o
|
||||||
|
|
|
@ -199,21 +199,17 @@ static struct clocksource clocksource_32k = {
|
||||||
.flags = CLOCK_SOURCE_IS_CONTINUOUS,
|
.flags = CLOCK_SOURCE_IS_CONTINUOUS,
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
|
||||||
* Rounds down to nearest nsec.
|
|
||||||
*/
|
|
||||||
unsigned long long omap_32k_ticks_to_nsecs(unsigned long ticks_32k)
|
|
||||||
{
|
|
||||||
return cyc2ns(&clocksource_32k, ticks_32k);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Returns current time from boot in nsecs. It's OK for this to wrap
|
* Returns current time from boot in nsecs. It's OK for this to wrap
|
||||||
* around for now, as it's just a relative time stamp.
|
* around for now, as it's just a relative time stamp.
|
||||||
*/
|
*/
|
||||||
unsigned long long sched_clock(void)
|
unsigned long long sched_clock(void)
|
||||||
{
|
{
|
||||||
return omap_32k_ticks_to_nsecs(omap_32k_read());
|
unsigned long long ret;
|
||||||
|
|
||||||
|
ret = (unsigned long long)omap_32k_read();
|
||||||
|
ret = (ret * clocksource_32k.mult_orig) >> clocksource_32k.shift;
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __init omap_init_clocksource_32k(void)
|
static int __init omap_init_clocksource_32k(void)
|
||||||
|
|
|
@ -35,7 +35,7 @@ extern void omap_map_common_io(void);
|
||||||
extern struct sys_timer omap_timer;
|
extern struct sys_timer omap_timer;
|
||||||
extern void omap_serial_init(void);
|
extern void omap_serial_init(void);
|
||||||
extern void omap_serial_enable_clocks(int enable);
|
extern void omap_serial_enable_clocks(int enable);
|
||||||
#ifdef CONFIG_I2C_OMAP
|
#if defined(CONFIG_I2C_OMAP) || defined(CONFIG_I2C_OMAP_MODULE)
|
||||||
extern int omap_register_i2c_bus(int bus_id, u32 clkrate,
|
extern int omap_register_i2c_bus(int bus_id, u32 clkrate,
|
||||||
struct i2c_board_info const *info,
|
struct i2c_board_info const *info,
|
||||||
unsigned len);
|
unsigned len);
|
||||||
|
|
|
@ -108,7 +108,7 @@
|
||||||
!defined(CONFIG_ARCH_OMAP15XX) && \
|
!defined(CONFIG_ARCH_OMAP15XX) && \
|
||||||
!defined(CONFIG_ARCH_OMAP16XX) && \
|
!defined(CONFIG_ARCH_OMAP16XX) && \
|
||||||
!defined(CONFIG_ARCH_OMAP24XX)
|
!defined(CONFIG_ARCH_OMAP24XX)
|
||||||
#error "Power management for this processor not implemented yet"
|
#warning "Power management for this processor not implemented yet"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef __ASSEMBLER__
|
#ifndef __ASSEMBLER__
|
||||||
|
|
|
@ -248,7 +248,7 @@ static struct clk *clks[] __initdata = {
|
||||||
&clk_48m,
|
&clk_48m,
|
||||||
};
|
};
|
||||||
|
|
||||||
void s3c64xx_register_clocks(void)
|
void __init s3c64xx_register_clocks(void)
|
||||||
{
|
{
|
||||||
struct clk *clkp;
|
struct clk *clkp;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
|
@ -417,4 +417,4 @@ static __init int s3c64xx_gpiolib_init(void)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
arch_initcall(s3c64xx_gpiolib_init);
|
core_initcall(s3c64xx_gpiolib_init);
|
||||||
|
|
|
@ -117,7 +117,7 @@
|
||||||
#define IRQ_ONENAND1 S3C64XX_IRQ_VIC1(12)
|
#define IRQ_ONENAND1 S3C64XX_IRQ_VIC1(12)
|
||||||
#define IRQ_NFC S3C64XX_IRQ_VIC1(13)
|
#define IRQ_NFC S3C64XX_IRQ_VIC1(13)
|
||||||
#define IRQ_CFCON S3C64XX_IRQ_VIC1(14)
|
#define IRQ_CFCON S3C64XX_IRQ_VIC1(14)
|
||||||
#define IRQ_UHOST S3C64XX_IRQ_VIC1(15)
|
#define IRQ_USBH S3C64XX_IRQ_VIC1(15)
|
||||||
#define IRQ_SPI0 S3C64XX_IRQ_VIC1(16)
|
#define IRQ_SPI0 S3C64XX_IRQ_VIC1(16)
|
||||||
#define IRQ_SPI1 S3C64XX_IRQ_VIC1(17)
|
#define IRQ_SPI1 S3C64XX_IRQ_VIC1(17)
|
||||||
#define IRQ_IIC S3C64XX_IRQ_VIC1(18)
|
#define IRQ_IIC S3C64XX_IRQ_VIC1(18)
|
||||||
|
|
|
@ -14,12 +14,15 @@
|
||||||
|
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
|
#include <linux/gpio.h>
|
||||||
#include <linux/irq.h>
|
#include <linux/irq.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
|
|
||||||
#include <asm/hardware/vic.h>
|
#include <asm/hardware/vic.h>
|
||||||
|
|
||||||
#include <plat/regs-irqtype.h>
|
#include <plat/regs-irqtype.h>
|
||||||
|
#include <plat/regs-gpio.h>
|
||||||
|
#include <plat/gpio-cfg.h>
|
||||||
|
|
||||||
#include <mach/map.h>
|
#include <mach/map.h>
|
||||||
#include <plat/cpu.h>
|
#include <plat/cpu.h>
|
||||||
|
@ -74,6 +77,7 @@ static void s3c_irq_eint_maskack(unsigned int irq)
|
||||||
static int s3c_irq_eint_set_type(unsigned int irq, unsigned int type)
|
static int s3c_irq_eint_set_type(unsigned int irq, unsigned int type)
|
||||||
{
|
{
|
||||||
int offs = eint_offset(irq);
|
int offs = eint_offset(irq);
|
||||||
|
int pin;
|
||||||
int shift;
|
int shift;
|
||||||
u32 ctrl, mask;
|
u32 ctrl, mask;
|
||||||
u32 newvalue = 0;
|
u32 newvalue = 0;
|
||||||
|
@ -125,6 +129,15 @@ static int s3c_irq_eint_set_type(unsigned int irq, unsigned int type)
|
||||||
ctrl |= newvalue << shift;
|
ctrl |= newvalue << shift;
|
||||||
__raw_writel(ctrl, reg);
|
__raw_writel(ctrl, reg);
|
||||||
|
|
||||||
|
/* set the GPIO pin appropriately */
|
||||||
|
|
||||||
|
if (offs < 23)
|
||||||
|
pin = S3C64XX_GPN(offs);
|
||||||
|
else
|
||||||
|
pin = S3C64XX_GPM(offs - 23);
|
||||||
|
|
||||||
|
s3c_gpio_cfgpin(pin, S3C_GPIO_SFN(2));
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -181,7 +194,7 @@ static void s3c_irq_demux_eint20_27(unsigned int irq, struct irq_desc *desc)
|
||||||
s3c_irq_demux_eint(20, 27);
|
s3c_irq_demux_eint(20, 27);
|
||||||
}
|
}
|
||||||
|
|
||||||
int __init s3c64xx_init_irq_eint(void)
|
static int __init s3c64xx_init_irq_eint(void)
|
||||||
{
|
{
|
||||||
int irq;
|
int irq;
|
||||||
|
|
||||||
|
|
|
@ -207,7 +207,7 @@ static struct irq_chip s3c_irq_uart = {
|
||||||
|
|
||||||
static void __init s3c64xx_uart_irq(struct uart_irq *uirq)
|
static void __init s3c64xx_uart_irq(struct uart_irq *uirq)
|
||||||
{
|
{
|
||||||
void *reg_base = uirq->regs;
|
void __iomem *reg_base = uirq->regs;
|
||||||
unsigned int irq;
|
unsigned int irq;
|
||||||
int offs;
|
int offs;
|
||||||
|
|
||||||
|
|
|
@ -36,7 +36,7 @@
|
||||||
* ext_xtal_mux for want of an actual name from the manual.
|
* ext_xtal_mux for want of an actual name from the manual.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
struct clk clk_ext_xtal_mux = {
|
static struct clk clk_ext_xtal_mux = {
|
||||||
.name = "ext_xtal",
|
.name = "ext_xtal",
|
||||||
.id = -1,
|
.id = -1,
|
||||||
};
|
};
|
||||||
|
@ -63,7 +63,7 @@ struct clksrc_clk {
|
||||||
void __iomem *reg_divider;
|
void __iomem *reg_divider;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct clk clk_fout_apll = {
|
static struct clk clk_fout_apll = {
|
||||||
.name = "fout_apll",
|
.name = "fout_apll",
|
||||||
.id = -1,
|
.id = -1,
|
||||||
};
|
};
|
||||||
|
@ -78,7 +78,7 @@ static struct clk_sources clk_src_apll = {
|
||||||
.nr_sources = ARRAY_SIZE(clk_src_apll_list),
|
.nr_sources = ARRAY_SIZE(clk_src_apll_list),
|
||||||
};
|
};
|
||||||
|
|
||||||
struct clksrc_clk clk_mout_apll = {
|
static struct clksrc_clk clk_mout_apll = {
|
||||||
.clk = {
|
.clk = {
|
||||||
.name = "mout_apll",
|
.name = "mout_apll",
|
||||||
.id = -1,
|
.id = -1,
|
||||||
|
@ -88,7 +88,7 @@ struct clksrc_clk clk_mout_apll = {
|
||||||
.sources = &clk_src_apll,
|
.sources = &clk_src_apll,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct clk clk_fout_epll = {
|
static struct clk clk_fout_epll = {
|
||||||
.name = "fout_epll",
|
.name = "fout_epll",
|
||||||
.id = -1,
|
.id = -1,
|
||||||
};
|
};
|
||||||
|
@ -103,7 +103,7 @@ static struct clk_sources clk_src_epll = {
|
||||||
.nr_sources = ARRAY_SIZE(clk_src_epll_list),
|
.nr_sources = ARRAY_SIZE(clk_src_epll_list),
|
||||||
};
|
};
|
||||||
|
|
||||||
struct clksrc_clk clk_mout_epll = {
|
static struct clksrc_clk clk_mout_epll = {
|
||||||
.clk = {
|
.clk = {
|
||||||
.name = "mout_epll",
|
.name = "mout_epll",
|
||||||
.id = -1,
|
.id = -1,
|
||||||
|
@ -123,7 +123,7 @@ static struct clk_sources clk_src_mpll = {
|
||||||
.nr_sources = ARRAY_SIZE(clk_src_mpll_list),
|
.nr_sources = ARRAY_SIZE(clk_src_mpll_list),
|
||||||
};
|
};
|
||||||
|
|
||||||
struct clksrc_clk clk_mout_mpll = {
|
static struct clksrc_clk clk_mout_mpll = {
|
||||||
.clk = {
|
.clk = {
|
||||||
.name = "mout_mpll",
|
.name = "mout_mpll",
|
||||||
.id = -1,
|
.id = -1,
|
||||||
|
@ -145,7 +145,7 @@ static unsigned long s3c64xx_clk_doutmpll_get_rate(struct clk *clk)
|
||||||
return rate;
|
return rate;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct clk clk_dout_mpll = {
|
static struct clk clk_dout_mpll = {
|
||||||
.name = "dout_mpll",
|
.name = "dout_mpll",
|
||||||
.id = -1,
|
.id = -1,
|
||||||
.parent = &clk_mout_mpll.clk,
|
.parent = &clk_mout_mpll.clk,
|
||||||
|
@ -189,10 +189,10 @@ static struct clk_sources clkset_uart = {
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct clk *clkset_uhost_list[] = {
|
static struct clk *clkset_uhost_list[] = {
|
||||||
|
&clk_48m,
|
||||||
&clk_mout_epll.clk,
|
&clk_mout_epll.clk,
|
||||||
&clk_dout_mpll,
|
&clk_dout_mpll,
|
||||||
&clk_fin_epll,
|
&clk_fin_epll,
|
||||||
&clk_48m,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct clk_sources clkset_uhost = {
|
static struct clk_sources clkset_uhost = {
|
||||||
|
@ -239,10 +239,12 @@ static int s3c64xx_setrate_clksrc(struct clk *clk, unsigned long rate)
|
||||||
|
|
||||||
rate = clk_round_rate(clk, rate);
|
rate = clk_round_rate(clk, rate);
|
||||||
div = clk_get_rate(clk->parent) / rate;
|
div = clk_get_rate(clk->parent) / rate;
|
||||||
|
if (div > 16)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
val = __raw_readl(reg);
|
val = __raw_readl(reg);
|
||||||
val &= ~sclk->mask;
|
val &= ~(0xf << sclk->shift);
|
||||||
val |= (rate - 1) << sclk->shift;
|
val |= (div - 1) << sclk->shift;
|
||||||
__raw_writel(val, reg);
|
__raw_writel(val, reg);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -351,7 +353,7 @@ static struct clksrc_clk clk_mmc2 = {
|
||||||
|
|
||||||
static struct clksrc_clk clk_usbhost = {
|
static struct clksrc_clk clk_usbhost = {
|
||||||
.clk = {
|
.clk = {
|
||||||
.name = "usb-host-bus",
|
.name = "usb-bus-host",
|
||||||
.id = -1,
|
.id = -1,
|
||||||
.ctrlbit = S3C_CLKCON_SCLK_UHOST,
|
.ctrlbit = S3C_CLKCON_SCLK_UHOST,
|
||||||
.enable = s3c64xx_sclk_ctrl,
|
.enable = s3c64xx_sclk_ctrl,
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
#
|
#
|
||||||
# http://www.arm.linux.org.uk/developer/machines/?action=new
|
# http://www.arm.linux.org.uk/developer/machines/?action=new
|
||||||
#
|
#
|
||||||
# Last update: Sun Nov 30 16:39:36 2008
|
# Last update: Thu Mar 12 18:01:45 2009
|
||||||
#
|
#
|
||||||
# machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number
|
# machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number
|
||||||
#
|
#
|
||||||
|
@ -1811,7 +1811,7 @@ pilz_pmi5 MACH_PILZ_PMI5 PILZ_PMI5 1820
|
||||||
jade MACH_JADE JADE 1821
|
jade MACH_JADE JADE 1821
|
||||||
ks8695_softplc MACH_KS8695_SOFTPLC KS8695_SOFTPLC 1822
|
ks8695_softplc MACH_KS8695_SOFTPLC KS8695_SOFTPLC 1822
|
||||||
gprisc3 MACH_GPRISC3 GPRISC3 1823
|
gprisc3 MACH_GPRISC3 GPRISC3 1823
|
||||||
stamp9260 MACH_STAMP9260 STAMP9260 1824
|
stamp9g20 MACH_STAMP9G20 STAMP9G20 1824
|
||||||
smdk6430 MACH_SMDK6430 SMDK6430 1825
|
smdk6430 MACH_SMDK6430 SMDK6430 1825
|
||||||
smdkc100 MACH_SMDKC100 SMDKC100 1826
|
smdkc100 MACH_SMDKC100 SMDKC100 1826
|
||||||
tavorevb MACH_TAVOREVB TAVOREVB 1827
|
tavorevb MACH_TAVOREVB TAVOREVB 1827
|
||||||
|
@ -1993,4 +1993,134 @@ spark MACH_SPARK SPARK 2002
|
||||||
benzina MACH_BENZINA BENZINA 2003
|
benzina MACH_BENZINA BENZINA 2003
|
||||||
blaze MACH_BLAZE BLAZE 2004
|
blaze MACH_BLAZE BLAZE 2004
|
||||||
linkstation_ls_hgl MACH_LINKSTATION_LS_HGL LINKSTATION_LS_HGL 2005
|
linkstation_ls_hgl MACH_LINKSTATION_LS_HGL LINKSTATION_LS_HGL 2005
|
||||||
htcvenus MACH_HTCVENUS HTCVENUS 2006
|
htckovsky MACH_HTCVENUS HTCVENUS 2006
|
||||||
|
sony_prs505 MACH_SONY_PRS505 SONY_PRS505 2007
|
||||||
|
hanlin_v3 MACH_HANLIN_V3 HANLIN_V3 2008
|
||||||
|
sapphira MACH_SAPPHIRA SAPPHIRA 2009
|
||||||
|
dack_sda_01 MACH_DACK_SDA_01 DACK_SDA_01 2010
|
||||||
|
armbox MACH_ARMBOX ARMBOX 2011
|
||||||
|
harris_rvp MACH_HARRIS_RVP HARRIS_RVP 2012
|
||||||
|
ribaldo MACH_RIBALDO RIBALDO 2013
|
||||||
|
agora MACH_AGORA AGORA 2014
|
||||||
|
omap3_mini MACH_OMAP3_MINI OMAP3_MINI 2015
|
||||||
|
a9sam6432_b MACH_A9SAM6432_B A9SAM6432_B 2016
|
||||||
|
usg2410 MACH_USG2410 USG2410 2017
|
||||||
|
pc72052_i10_revb MACH_PC72052_I10_REVB PC72052_I10_REVB 2018
|
||||||
|
mx35_exm32 MACH_MX35_EXM32 MX35_EXM32 2019
|
||||||
|
topas910 MACH_TOPAS910 TOPAS910 2020
|
||||||
|
hyena MACH_HYENA HYENA 2021
|
||||||
|
pospax MACH_POSPAX POSPAX 2022
|
||||||
|
hdl_gx MACH_HDL_GX HDL_GX 2023
|
||||||
|
ctera_4bay MACH_CTERA_4BAY CTERA_4BAY 2024
|
||||||
|
ctera_plug_c MACH_CTERA_PLUG_C CTERA_PLUG_C 2025
|
||||||
|
crwea_plug_i MACH_CRWEA_PLUG_I CRWEA_PLUG_I 2026
|
||||||
|
egauge2 MACH_EGAUGE2 EGAUGE2 2027
|
||||||
|
didj MACH_DIDJ DIDJ 2028
|
||||||
|
m_s3c2443 MACH_MEISTER MEISTER 2029
|
||||||
|
htcblackstone MACH_HTCBLACKSTONE HTCBLACKSTONE 2030
|
||||||
|
cpuat9g20 MACH_CPUAT9G20 CPUAT9G20 2031
|
||||||
|
smdk6440 MACH_SMDK6440 SMDK6440 2032
|
||||||
|
omap_35xx_mvp MACH_OMAP_35XX_MVP OMAP_35XX_MVP 2033
|
||||||
|
ctera_plug_i MACH_CTERA_PLUG_I CTERA_PLUG_I 2034
|
||||||
|
pvg610_100 MACH_PVG610 PVG610 2035
|
||||||
|
hprw6815 MACH_HPRW6815 HPRW6815 2036
|
||||||
|
omap3_oswald MACH_OMAP3_OSWALD OMAP3_OSWALD 2037
|
||||||
|
nas4220b MACH_NAS4220B NAS4220B 2038
|
||||||
|
htcraphael_cdma MACH_HTCRAPHAEL_CDMA HTCRAPHAEL_CDMA 2039
|
||||||
|
htcdiamond_cdma MACH_HTCDIAMOND_CDMA HTCDIAMOND_CDMA 2040
|
||||||
|
scaler MACH_SCALER SCALER 2041
|
||||||
|
zylonite2 MACH_ZYLONITE2 ZYLONITE2 2042
|
||||||
|
aspenite MACH_ASPENITE ASPENITE 2043
|
||||||
|
teton MACH_TETON TETON 2044
|
||||||
|
ttc_dkb MACH_TTC_DKB TTC_DKB 2045
|
||||||
|
bishop2 MACH_BISHOP2 BISHOP2 2046
|
||||||
|
ippv5 MACH_IPPV5 IPPV5 2047
|
||||||
|
farm926 MACH_FARM926 FARM926 2048
|
||||||
|
mmccpu MACH_MMCCPU MMCCPU 2049
|
||||||
|
sgmsfl MACH_SGMSFL SGMSFL 2050
|
||||||
|
tt8000 MACH_TT8000 TT8000 2051
|
||||||
|
zrn4300lp MACH_ZRN4300LP ZRN4300LP 2052
|
||||||
|
mptc MACH_MPTC MPTC 2053
|
||||||
|
h6051 MACH_H6051 H6051 2054
|
||||||
|
pvg610_101 MACH_PVG610_101 PVG610_101 2055
|
||||||
|
stamp9261_pc_evb MACH_STAMP9261_PC_EVB STAMP9261_PC_EVB 2056
|
||||||
|
pelco_odysseus MACH_PELCO_ODYSSEUS PELCO_ODYSSEUS 2057
|
||||||
|
tny_a9260 MACH_TNY_A9260 TNY_A9260 2058
|
||||||
|
tny_a9g20 MACH_TNY_A9G20 TNY_A9G20 2059
|
||||||
|
aesop_mp2530f MACH_AESOP_MP2530F AESOP_MP2530F 2060
|
||||||
|
dx900 MACH_DX900 DX900 2061
|
||||||
|
cpodc2 MACH_CPODC2 CPODC2 2062
|
||||||
|
tilt_8925 MACH_TILT_8925 TILT_8925 2063
|
||||||
|
davinci_dm357_evm MACH_DAVINCI_DM357_EVM DAVINCI_DM357_EVM 2064
|
||||||
|
swordfish MACH_SWORDFISH SWORDFISH 2065
|
||||||
|
corvus MACH_CORVUS CORVUS 2066
|
||||||
|
taurus MACH_TAURUS TAURUS 2067
|
||||||
|
axm MACH_AXM AXM 2068
|
||||||
|
axc MACH_AXC AXC 2069
|
||||||
|
baby MACH_BABY BABY 2070
|
||||||
|
mp200 MACH_MP200 MP200 2071
|
||||||
|
pcm043 MACH_PCM043 PCM043 2072
|
||||||
|
hanlin_v3c MACH_HANLIN_V3C HANLIN_V3C 2073
|
||||||
|
kbk9g20 MACH_KBK9G20 KBK9G20 2074
|
||||||
|
adsturbog5 MACH_ADSTURBOG5 ADSTURBOG5 2075
|
||||||
|
avenger_lite1 MACH_AVENGER_LITE1 AVENGER_LITE1 2076
|
||||||
|
suc82x MACH_SUC SUC 2077
|
||||||
|
at91sam7s256 MACH_AT91SAM7S256 AT91SAM7S256 2078
|
||||||
|
mendoza MACH_MENDOZA MENDOZA 2079
|
||||||
|
kira MACH_KIRA KIRA 2080
|
||||||
|
mx1hbm MACH_MX1HBM MX1HBM 2081
|
||||||
|
quatro43xx MACH_QUATRO43XX QUATRO43XX 2082
|
||||||
|
quatro4230 MACH_QUATRO4230 QUATRO4230 2083
|
||||||
|
nsb400 MACH_NSB400 NSB400 2084
|
||||||
|
drp255 MACH_DRP255 DRP255 2085
|
||||||
|
thoth MACH_THOTH THOTH 2086
|
||||||
|
firestone MACH_FIRESTONE FIRESTONE 2087
|
||||||
|
asusp750 MACH_ASUSP750 ASUSP750 2088
|
||||||
|
ctera_dl MACH_CTERA_DL CTERA_DL 2089
|
||||||
|
socr MACH_SOCR SOCR 2090
|
||||||
|
htcoxygen MACH_HTCOXYGEN HTCOXYGEN 2091
|
||||||
|
heroc MACH_HEROC HEROC 2092
|
||||||
|
zeno6800 MACH_ZENO6800 ZENO6800 2093
|
||||||
|
sc2mcs MACH_SC2MCS SC2MCS 2094
|
||||||
|
gene100 MACH_GENE100 GENE100 2095
|
||||||
|
as353x MACH_AS353X AS353X 2096
|
||||||
|
sheevaplug MACH_SHEEVAPLUG SHEEVAPLUG 2097
|
||||||
|
at91sam9g20 MACH_AT91SAM9G20 AT91SAM9G20 2098
|
||||||
|
mv88f6192gtw_fe MACH_MV88F6192GTW_FE MV88F6192GTW_FE 2099
|
||||||
|
cc9200 MACH_CC9200 CC9200 2100
|
||||||
|
sm9200 MACH_SM9200 SM9200 2101
|
||||||
|
tp9200 MACH_TP9200 TP9200 2102
|
||||||
|
snapperdv MACH_SNAPPERDV SNAPPERDV 2103
|
||||||
|
avengers_lite MACH_AVENGERS_LITE AVENGERS_LITE 2104
|
||||||
|
avengers_lite1 MACH_AVENGERS_LITE1 AVENGERS_LITE1 2105
|
||||||
|
omap3axon MACH_OMAP3AXON OMAP3AXON 2106
|
||||||
|
ma8xx MACH_MA8XX MA8XX 2107
|
||||||
|
mp201ek MACH_MP201EK MP201EK 2108
|
||||||
|
davinci_tux MACH_DAVINCI_TUX DAVINCI_TUX 2109
|
||||||
|
mpa1600 MACH_MPA1600 MPA1600 2110
|
||||||
|
pelco_troy MACH_PELCO_TROY PELCO_TROY 2111
|
||||||
|
nsb667 MACH_NSB667 NSB667 2112
|
||||||
|
rovers5_4mpix MACH_ROVERS5_4MPIX ROVERS5_4MPIX 2113
|
||||||
|
twocom MACH_TWOCOM TWOCOM 2114
|
||||||
|
ubisys_p9_rcu3r2 MACH_UBISYS_P9_RCU3R2 UBISYS_P9_RCU3R2 2115
|
||||||
|
hero_espresso MACH_HERO_ESPRESSO HERO_ESPRESSO 2116
|
||||||
|
afeusb MACH_AFEUSB AFEUSB 2117
|
||||||
|
t830 MACH_T830 T830 2118
|
||||||
|
spd8020_cc MACH_SPD8020_CC SPD8020_CC 2119
|
||||||
|
om_3d7k MACH_OM_3D7K OM_3D7K 2120
|
||||||
|
picocom2 MACH_PICOCOM2 PICOCOM2 2121
|
||||||
|
uwg4mx27 MACH_UWG4MX27 UWG4MX27 2122
|
||||||
|
uwg4mx31 MACH_UWG4MX31 UWG4MX31 2123
|
||||||
|
cherry MACH_CHERRY CHERRY 2124
|
||||||
|
mx51_babbage MACH_MX51_BABBAGE MX51_BABBAGE 2125
|
||||||
|
s3c2440turkiye MACH_S3C2440TURKIYE S3C2440TURKIYE 2126
|
||||||
|
tx37 MACH_TX37 TX37 2127
|
||||||
|
sbc2800_9g20 MACH_SBC2800_9G20 SBC2800_9G20 2128
|
||||||
|
benzglb MACH_BENZGLB BENZGLB 2129
|
||||||
|
benztd MACH_BENZTD BENZTD 2130
|
||||||
|
cartesio_plus MACH_CARTESIO_PLUS CARTESIO_PLUS 2131
|
||||||
|
solrad_g20 MACH_SOLRAD_G20 SOLRAD_G20 2132
|
||||||
|
mx27wallace MACH_MX27WALLACE MX27WALLACE 2133
|
||||||
|
fmzwebmodul MACH_FMZWEBMODUL FMZWEBMODUL 2134
|
||||||
|
rd78x00_masa MACH_RD78X00_MASA RD78X00_MASA 2135
|
||||||
|
smallogger MACH_SMALLOGGER SMALLOGGER 2136
|
||||||
|
|
|
@ -52,7 +52,15 @@
|
||||||
#define __deprecated __attribute__((deprecated))
|
#define __deprecated __attribute__((deprecated))
|
||||||
#define __packed __attribute__((packed))
|
#define __packed __attribute__((packed))
|
||||||
#define __weak __attribute__((weak))
|
#define __weak __attribute__((weak))
|
||||||
#define __naked __attribute__((naked))
|
|
||||||
|
/*
|
||||||
|
* it doesn't make sense on ARM (currently the only user of __naked) to trace
|
||||||
|
* naked functions because then mcount is called without stack and frame pointer
|
||||||
|
* being set up and there is no chance to restore the lr register to the value
|
||||||
|
* before mcount was called.
|
||||||
|
*/
|
||||||
|
#define __naked __attribute__((naked)) notrace
|
||||||
|
|
||||||
#define __noreturn __attribute__((noreturn))
|
#define __noreturn __attribute__((noreturn))
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in New Issue