Merge branch 'fixes' of http://ftp.arm.linux.org.uk/pub/linux/arm/kernel/git-cur/linux-2.6-arm
* 'fixes' of http://ftp.arm.linux.org.uk/pub/linux/arm/kernel/git-cur/linux-2.6-arm: ARM: wire up process_vm_writev and process_vm_readv syscalls ARM: 7160/1: setup: avoid overflowing {elf,arch}_name from proc_info_list ARM: 7158/1: add new MFP implement for NUC900 ARM: 7157/1: fix a building WARNING for nuc900 ARM: 7156/1: l2x0: fix compile error on !CONFIG_USE_OF ARM: 7155/1: arch.h: Declare 'pt_regs' locally ARM: 7154/1: mach-bcmring: fix build error in dma.c ARM: 7153/1: mach-bcmring: fix build error in core.c ARM: 7152/1: distclean: Remove generated .dtb files ARM: 7150/1: Allow kernel unaligned accesses on ARMv6+ processors ARM: 7149/1: spi/pl022: Enable clock in probe Revert "ARM: 7098/1: kdump: copy kernel relocation code at the kexec prepare stage"
This commit is contained in:
commit
bb893d15b5
|
@ -65,6 +65,8 @@ $(obj)/%.dtb: $(src)/dts/%.dts
|
||||||
|
|
||||||
$(obj)/dtbs: $(addprefix $(obj)/, $(dtb-y))
|
$(obj)/dtbs: $(addprefix $(obj)/, $(dtb-y))
|
||||||
|
|
||||||
|
clean-files := *.dtb
|
||||||
|
|
||||||
quiet_cmd_uimage = UIMAGE $@
|
quiet_cmd_uimage = UIMAGE $@
|
||||||
cmd_uimage = $(CONFIG_SHELL) $(MKIMAGE) -A arm -O linux -T kernel \
|
cmd_uimage = $(CONFIG_SHELL) $(MKIMAGE) -A arm -O linux -T kernel \
|
||||||
-C none -a $(LOADADDR) -e $(STARTADDR) \
|
-C none -a $(LOADADDR) -e $(STARTADDR) \
|
||||||
|
|
|
@ -20,6 +20,8 @@
|
||||||
#ifndef __ASM_ARM_HARDWARE_L2X0_H
|
#ifndef __ASM_ARM_HARDWARE_L2X0_H
|
||||||
#define __ASM_ARM_HARDWARE_L2X0_H
|
#define __ASM_ARM_HARDWARE_L2X0_H
|
||||||
|
|
||||||
|
#include <linux/errno.h>
|
||||||
|
|
||||||
#define L2X0_CACHE_ID 0x000
|
#define L2X0_CACHE_ID 0x000
|
||||||
#define L2X0_CACHE_TYPE 0x004
|
#define L2X0_CACHE_TYPE 0x004
|
||||||
#define L2X0_CTRL 0x100
|
#define L2X0_CTRL 0x100
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
struct tag;
|
struct tag;
|
||||||
struct meminfo;
|
struct meminfo;
|
||||||
struct sys_timer;
|
struct sys_timer;
|
||||||
|
struct pt_regs;
|
||||||
|
|
||||||
struct machine_desc {
|
struct machine_desc {
|
||||||
unsigned int nr; /* architecture number */
|
unsigned int nr; /* architecture number */
|
||||||
|
|
|
@ -402,6 +402,8 @@
|
||||||
#define __NR_syncfs (__NR_SYSCALL_BASE+373)
|
#define __NR_syncfs (__NR_SYSCALL_BASE+373)
|
||||||
#define __NR_sendmmsg (__NR_SYSCALL_BASE+374)
|
#define __NR_sendmmsg (__NR_SYSCALL_BASE+374)
|
||||||
#define __NR_setns (__NR_SYSCALL_BASE+375)
|
#define __NR_setns (__NR_SYSCALL_BASE+375)
|
||||||
|
#define __NR_process_vm_readv (__NR_SYSCALL_BASE+376)
|
||||||
|
#define __NR_process_vm_writev (__NR_SYSCALL_BASE+377)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The following SWIs are ARM private.
|
* The following SWIs are ARM private.
|
||||||
|
|
|
@ -385,6 +385,8 @@
|
||||||
CALL(sys_syncfs)
|
CALL(sys_syncfs)
|
||||||
CALL(sys_sendmmsg)
|
CALL(sys_sendmmsg)
|
||||||
/* 375 */ CALL(sys_setns)
|
/* 375 */ CALL(sys_setns)
|
||||||
|
CALL(sys_process_vm_readv)
|
||||||
|
CALL(sys_process_vm_writev)
|
||||||
#ifndef syscalls_counted
|
#ifndef syscalls_counted
|
||||||
.equ syscalls_padding, ((NR_syscalls + 3) & ~3) - NR_syscalls
|
.equ syscalls_padding, ((NR_syscalls + 3) & ~3) - NR_syscalls
|
||||||
#define syscalls_counted
|
#define syscalls_counted
|
||||||
|
|
|
@ -360,7 +360,7 @@ __secondary_data:
|
||||||
* r13 = *virtual* address to jump to upon completion
|
* r13 = *virtual* address to jump to upon completion
|
||||||
*/
|
*/
|
||||||
__enable_mmu:
|
__enable_mmu:
|
||||||
#ifdef CONFIG_ALIGNMENT_TRAP
|
#if defined(CONFIG_ALIGNMENT_TRAP) && __LINUX_ARM_ARCH__ < 6
|
||||||
orr r0, r0, #CR_A
|
orr r0, r0, #CR_A
|
||||||
#else
|
#else
|
||||||
bic r0, r0, #CR_A
|
bic r0, r0, #CR_A
|
||||||
|
|
|
@ -32,24 +32,6 @@ static atomic_t waiting_for_crash_ipi;
|
||||||
|
|
||||||
int machine_kexec_prepare(struct kimage *image)
|
int machine_kexec_prepare(struct kimage *image)
|
||||||
{
|
{
|
||||||
unsigned long page_list;
|
|
||||||
void *reboot_code_buffer;
|
|
||||||
page_list = image->head & PAGE_MASK;
|
|
||||||
|
|
||||||
reboot_code_buffer = page_address(image->control_code_page);
|
|
||||||
|
|
||||||
/* Prepare parameters for reboot_code_buffer*/
|
|
||||||
kexec_start_address = image->start;
|
|
||||||
kexec_indirection_page = page_list;
|
|
||||||
kexec_mach_type = machine_arch_type;
|
|
||||||
kexec_boot_atags = image->start - KEXEC_ARM_ZIMAGE_OFFSET + KEXEC_ARM_ATAGS_OFFSET;
|
|
||||||
|
|
||||||
/* copy our kernel relocation code to the control code page */
|
|
||||||
memcpy(reboot_code_buffer,
|
|
||||||
relocate_new_kernel, relocate_new_kernel_size);
|
|
||||||
|
|
||||||
flush_icache_range((unsigned long) reboot_code_buffer,
|
|
||||||
(unsigned long) reboot_code_buffer + KEXEC_CONTROL_PAGE_SIZE);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -100,14 +82,31 @@ void (*kexec_reinit)(void);
|
||||||
|
|
||||||
void machine_kexec(struct kimage *image)
|
void machine_kexec(struct kimage *image)
|
||||||
{
|
{
|
||||||
|
unsigned long page_list;
|
||||||
unsigned long reboot_code_buffer_phys;
|
unsigned long reboot_code_buffer_phys;
|
||||||
void *reboot_code_buffer;
|
void *reboot_code_buffer;
|
||||||
|
|
||||||
|
|
||||||
|
page_list = image->head & PAGE_MASK;
|
||||||
|
|
||||||
/* we need both effective and real address here */
|
/* we need both effective and real address here */
|
||||||
reboot_code_buffer_phys =
|
reboot_code_buffer_phys =
|
||||||
page_to_pfn(image->control_code_page) << PAGE_SHIFT;
|
page_to_pfn(image->control_code_page) << PAGE_SHIFT;
|
||||||
reboot_code_buffer = page_address(image->control_code_page);
|
reboot_code_buffer = page_address(image->control_code_page);
|
||||||
|
|
||||||
|
/* Prepare parameters for reboot_code_buffer*/
|
||||||
|
kexec_start_address = image->start;
|
||||||
|
kexec_indirection_page = page_list;
|
||||||
|
kexec_mach_type = machine_arch_type;
|
||||||
|
kexec_boot_atags = image->start - KEXEC_ARM_ZIMAGE_OFFSET + KEXEC_ARM_ATAGS_OFFSET;
|
||||||
|
|
||||||
|
/* copy our kernel relocation code to the control code page */
|
||||||
|
memcpy(reboot_code_buffer,
|
||||||
|
relocate_new_kernel, relocate_new_kernel_size);
|
||||||
|
|
||||||
|
|
||||||
|
flush_icache_range((unsigned long) reboot_code_buffer,
|
||||||
|
(unsigned long) reboot_code_buffer + KEXEC_CONTROL_PAGE_SIZE);
|
||||||
printk(KERN_INFO "Bye!\n");
|
printk(KERN_INFO "Bye!\n");
|
||||||
|
|
||||||
if (kexec_reinit)
|
if (kexec_reinit)
|
||||||
|
|
|
@ -461,8 +461,10 @@ static void __init setup_processor(void)
|
||||||
cpu_name, read_cpuid_id(), read_cpuid_id() & 15,
|
cpu_name, read_cpuid_id(), read_cpuid_id() & 15,
|
||||||
proc_arch[cpu_architecture()], cr_alignment);
|
proc_arch[cpu_architecture()], cr_alignment);
|
||||||
|
|
||||||
sprintf(init_utsname()->machine, "%s%c", list->arch_name, ENDIANNESS);
|
snprintf(init_utsname()->machine, __NEW_UTS_LEN + 1, "%s%c",
|
||||||
sprintf(elf_platform, "%s%c", list->elf_name, ENDIANNESS);
|
list->arch_name, ENDIANNESS);
|
||||||
|
snprintf(elf_platform, ELF_PLATFORM_SIZE, "%s%c",
|
||||||
|
list->elf_name, ENDIANNESS);
|
||||||
elf_hwcap = list->elf_hwcap;
|
elf_hwcap = list->elf_hwcap;
|
||||||
#ifndef CONFIG_ARM_THUMB
|
#ifndef CONFIG_ARM_THUMB
|
||||||
elf_hwcap &= ~HWCAP_THUMB;
|
elf_hwcap &= ~HWCAP_THUMB;
|
||||||
|
|
|
@ -235,7 +235,7 @@ void __init bcmring_init_timer(void)
|
||||||
*/
|
*/
|
||||||
bcmring_clocksource_init();
|
bcmring_clocksource_init();
|
||||||
|
|
||||||
sp804_clockevents_register(TIMER0_VA_BASE, IRQ_TIMER0, "timer0");
|
sp804_clockevents_init(TIMER0_VA_BASE, IRQ_TIMER0, "timer0");
|
||||||
}
|
}
|
||||||
|
|
||||||
struct sys_timer bcmring_timer = {
|
struct sys_timer bcmring_timer = {
|
||||||
|
|
|
@ -36,6 +36,7 @@
|
||||||
#include <linux/mm.h>
|
#include <linux/mm.h>
|
||||||
#include <linux/pfn.h>
|
#include <linux/pfn.h>
|
||||||
#include <linux/atomic.h>
|
#include <linux/atomic.h>
|
||||||
|
#include <linux/sched.h>
|
||||||
#include <mach/dma.h>
|
#include <mach/dma.h>
|
||||||
|
|
||||||
/* I don't quite understand why dc4 fails when this is set to 1 and DMA is enabled */
|
/* I don't quite understand why dc4 fails when this is set to 1 and DMA is enabled */
|
||||||
|
|
|
@ -422,7 +422,7 @@ struct platform_device nuc900_device_kpi = {
|
||||||
|
|
||||||
/* LCD controller*/
|
/* LCD controller*/
|
||||||
|
|
||||||
static struct nuc900fb_display __initdata nuc900_lcd_info[] = {
|
static struct nuc900fb_display nuc900_lcd_info[] = {
|
||||||
/* Giantplus Technology GPM1040A0 320x240 Color TFT LCD */
|
/* Giantplus Technology GPM1040A0 320x240 Color TFT LCD */
|
||||||
[0] = {
|
[0] = {
|
||||||
.type = LCM_DCCS_VA_SRC_RGB565,
|
.type = LCM_DCCS_VA_SRC_RGB565,
|
||||||
|
@ -445,7 +445,7 @@ static struct nuc900fb_display __initdata nuc900_lcd_info[] = {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct nuc900fb_mach_info nuc900_fb_info __initdata = {
|
static struct nuc900fb_mach_info nuc900_fb_info = {
|
||||||
#if defined(CONFIG_GPM1040A0_320X240)
|
#if defined(CONFIG_GPM1040A0_320X240)
|
||||||
.displays = &nuc900_lcd_info[0],
|
.displays = &nuc900_lcd_info[0],
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
extern void mfp_set_groupf(struct device *dev);
|
extern void mfp_set_groupf(struct device *dev);
|
||||||
extern void mfp_set_groupc(struct device *dev);
|
extern void mfp_set_groupc(struct device *dev);
|
||||||
extern void mfp_set_groupi(struct device *dev);
|
extern void mfp_set_groupi(struct device *dev);
|
||||||
extern void mfp_set_groupg(struct device *dev);
|
extern void mfp_set_groupg(struct device *dev, const char *subname);
|
||||||
|
extern void mfp_set_groupd(struct device *dev, const char *subname);
|
||||||
|
|
||||||
#endif /* __ASM_ARCH_MFP_H */
|
#endif /* __ASM_ARCH_MFP_H */
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
#ifndef __ASM_ARCH_SPI_H
|
#ifndef __ASM_ARCH_SPI_H
|
||||||
#define __ASM_ARCH_SPI_H
|
#define __ASM_ARCH_SPI_H
|
||||||
|
|
||||||
extern void mfp_set_groupg(struct device *dev);
|
extern void mfp_set_groupg(struct device *dev, const char *subname);
|
||||||
|
|
||||||
struct nuc900_spi_info {
|
struct nuc900_spi_info {
|
||||||
unsigned int num_cs;
|
unsigned int num_cs;
|
||||||
|
|
|
@ -26,10 +26,8 @@
|
||||||
#define REG_MFSEL (W90X900_VA_GCR + 0xC)
|
#define REG_MFSEL (W90X900_VA_GCR + 0xC)
|
||||||
|
|
||||||
#define GPSELF (0x01 << 1)
|
#define GPSELF (0x01 << 1)
|
||||||
|
|
||||||
#define GPSELC (0x03 << 2)
|
#define GPSELC (0x03 << 2)
|
||||||
#define ENKPI (0x02 << 2)
|
#define GPSELD (0x0f << 4)
|
||||||
#define ENNAND (0x01 << 2)
|
|
||||||
|
|
||||||
#define GPSELEI0 (0x01 << 26)
|
#define GPSELEI0 (0x01 << 26)
|
||||||
#define GPSELEI1 (0x01 << 27)
|
#define GPSELEI1 (0x01 << 27)
|
||||||
|
@ -37,11 +35,16 @@
|
||||||
#define GPIOG0TO1 (0x03 << 14)
|
#define GPIOG0TO1 (0x03 << 14)
|
||||||
#define GPIOG2TO3 (0x03 << 16)
|
#define GPIOG2TO3 (0x03 << 16)
|
||||||
#define GPIOG22TO23 (0x03 << 22)
|
#define GPIOG22TO23 (0x03 << 22)
|
||||||
|
#define GPIOG18TO20 (0x07 << 18)
|
||||||
|
|
||||||
#define ENSPI (0x0a << 14)
|
#define ENSPI (0x0a << 14)
|
||||||
#define ENI2C0 (0x01 << 14)
|
#define ENI2C0 (0x01 << 14)
|
||||||
#define ENI2C1 (0x01 << 16)
|
#define ENI2C1 (0x01 << 16)
|
||||||
#define ENAC97 (0x02 << 22)
|
#define ENAC97 (0x02 << 22)
|
||||||
|
#define ENSD1 (0x02 << 18)
|
||||||
|
#define ENSD0 (0x0a << 4)
|
||||||
|
#define ENKPI (0x02 << 2)
|
||||||
|
#define ENNAND (0x01 << 2)
|
||||||
|
|
||||||
static DEFINE_MUTEX(mfp_mutex);
|
static DEFINE_MUTEX(mfp_mutex);
|
||||||
|
|
||||||
|
@ -127,16 +130,19 @@ void mfp_set_groupi(struct device *dev)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(mfp_set_groupi);
|
EXPORT_SYMBOL(mfp_set_groupi);
|
||||||
|
|
||||||
void mfp_set_groupg(struct device *dev)
|
void mfp_set_groupg(struct device *dev, const char *subname)
|
||||||
{
|
{
|
||||||
unsigned long mfpen;
|
unsigned long mfpen;
|
||||||
const char *dev_id;
|
const char *dev_id;
|
||||||
|
|
||||||
BUG_ON(!dev);
|
BUG_ON((!dev) && (!subname));
|
||||||
|
|
||||||
mutex_lock(&mfp_mutex);
|
mutex_lock(&mfp_mutex);
|
||||||
|
|
||||||
dev_id = dev_name(dev);
|
if (subname != NULL)
|
||||||
|
dev_id = subname;
|
||||||
|
else
|
||||||
|
dev_id = dev_name(dev);
|
||||||
|
|
||||||
mfpen = __raw_readl(REG_MFSEL);
|
mfpen = __raw_readl(REG_MFSEL);
|
||||||
|
|
||||||
|
@ -152,6 +158,9 @@ void mfp_set_groupg(struct device *dev)
|
||||||
} else if (strcmp(dev_id, "nuc900-audio") == 0) {
|
} else if (strcmp(dev_id, "nuc900-audio") == 0) {
|
||||||
mfpen &= ~(GPIOG22TO23);
|
mfpen &= ~(GPIOG22TO23);
|
||||||
mfpen |= ENAC97;/*enable AC97*/
|
mfpen |= ENAC97;/*enable AC97*/
|
||||||
|
} else if (strcmp(dev_id, "nuc900-mmc-port1") == 0) {
|
||||||
|
mfpen &= ~(GPIOG18TO20);
|
||||||
|
mfpen |= (ENSD1 | 0x01);/*enable sd1*/
|
||||||
} else {
|
} else {
|
||||||
mfpen &= ~(GPIOG0TO1 | GPIOG2TO3);/*GPIOG[3:0]*/
|
mfpen &= ~(GPIOG0TO1 | GPIOG2TO3);/*GPIOG[3:0]*/
|
||||||
}
|
}
|
||||||
|
@ -162,3 +171,30 @@ void mfp_set_groupg(struct device *dev)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(mfp_set_groupg);
|
EXPORT_SYMBOL(mfp_set_groupg);
|
||||||
|
|
||||||
|
void mfp_set_groupd(struct device *dev, const char *subname)
|
||||||
|
{
|
||||||
|
unsigned long mfpen;
|
||||||
|
const char *dev_id;
|
||||||
|
|
||||||
|
BUG_ON((!dev) && (!subname));
|
||||||
|
|
||||||
|
mutex_lock(&mfp_mutex);
|
||||||
|
|
||||||
|
if (subname != NULL)
|
||||||
|
dev_id = subname;
|
||||||
|
else
|
||||||
|
dev_id = dev_name(dev);
|
||||||
|
|
||||||
|
mfpen = __raw_readl(REG_MFSEL);
|
||||||
|
|
||||||
|
if (strcmp(dev_id, "nuc900-mmc-port0") == 0) {
|
||||||
|
mfpen &= ~GPSELD;/*enable sd0*/
|
||||||
|
mfpen |= ENSD0;
|
||||||
|
} else
|
||||||
|
mfpen &= (~GPSELD);
|
||||||
|
|
||||||
|
__raw_writel(mfpen, REG_MFSEL);
|
||||||
|
|
||||||
|
mutex_unlock(&mfp_mutex);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(mfp_set_groupd);
|
||||||
|
|
|
@ -2184,6 +2184,12 @@ pl022_probe(struct amba_device *adev, const struct amba_id *id)
|
||||||
goto err_clk_prep;
|
goto err_clk_prep;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
status = clk_enable(pl022->clk);
|
||||||
|
if (status) {
|
||||||
|
dev_err(&adev->dev, "could not enable SSP/SPI bus clock\n");
|
||||||
|
goto err_no_clk_en;
|
||||||
|
}
|
||||||
|
|
||||||
/* Disable SSP */
|
/* Disable SSP */
|
||||||
writew((readw(SSP_CR1(pl022->virtbase)) & (~SSP_CR1_MASK_SSE)),
|
writew((readw(SSP_CR1(pl022->virtbase)) & (~SSP_CR1_MASK_SSE)),
|
||||||
SSP_CR1(pl022->virtbase));
|
SSP_CR1(pl022->virtbase));
|
||||||
|
@ -2237,6 +2243,8 @@ pl022_probe(struct amba_device *adev, const struct amba_id *id)
|
||||||
|
|
||||||
free_irq(adev->irq[0], pl022);
|
free_irq(adev->irq[0], pl022);
|
||||||
err_no_irq:
|
err_no_irq:
|
||||||
|
clk_disable(pl022->clk);
|
||||||
|
err_no_clk_en:
|
||||||
clk_unprepare(pl022->clk);
|
clk_unprepare(pl022->clk);
|
||||||
err_clk_prep:
|
err_clk_prep:
|
||||||
clk_put(pl022->clk);
|
clk_put(pl022->clk);
|
||||||
|
|
Loading…
Reference in New Issue