Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3230ca9d authored by Linus Torvalds's avatar Linus Torvalds
Browse files
* 'unicore32' of git://git.kernel.org/pub/scm/linux/kernel/git/epip/linux-2.6-unicore32:
  unicore32 framebuffer fix: get videomemory by __get_free_pages() and make it floatable
  unicore32 core architecture: remove duplicated #include
  unicore32 rtc driver fix: cleanup irq_set_freq and irq_set_state
  unicore32 fix: remove arch-specific futex support
  unicore32 ldscript fix: add cacheline parameter to PERCPU() macro
parents 7dbb25a5 6b794743
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -48,7 +48,7 @@ ASM_GENERIC_HEADERS += bitsperlong.h bug.h bugs.h
ASM_GENERIC_HEADERS	+= cputime.h current.h
ASM_GENERIC_HEADERS	+= cputime.h current.h
ASM_GENERIC_HEADERS	+= device.h div64.h
ASM_GENERIC_HEADERS	+= device.h div64.h
ASM_GENERIC_HEADERS	+= emergency-restart.h errno.h
ASM_GENERIC_HEADERS	+= emergency-restart.h errno.h
ASM_GENERIC_HEADERS	+= fb.h fcntl.h ftrace.h
ASM_GENERIC_HEADERS	+= fb.h fcntl.h ftrace.h futex.h
ASM_GENERIC_HEADERS	+= hardirq.h hw_irq.h
ASM_GENERIC_HEADERS	+= hardirq.h hw_irq.h
ASM_GENERIC_HEADERS	+= ioctl.h ioctls.h ipcbuf.h irq_regs.h
ASM_GENERIC_HEADERS	+= ioctl.h ioctls.h ipcbuf.h irq_regs.h
ASM_GENERIC_HEADERS	+= kdebug.h kmap_types.h
ASM_GENERIC_HEADERS	+= kdebug.h kmap_types.h
+0 −143
Original line number Original line Diff line number Diff line
/*
 * linux/arch/unicore32/include/asm/futex.h
 *
 * Code specific to PKUnity SoC and UniCore ISA
 *
 * Copyright (C) 2001-2010 GUAN Xue-tao
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 */

#ifndef __UNICORE_FUTEX_H__
#define __UNICORE_FUTEX_H__

#ifdef __KERNEL__

#include <linux/futex.h>
#include <linux/preempt.h>
#include <linux/uaccess.h>
#include <linux/errno.h>

#define __futex_atomic_op(insn, ret, oldval, uaddr, oparg)	\
	__asm__ __volatile__(					\
	"1:	ldw.u	%1, [%2]\n"				\
	"	" insn "\n"					\
	"2:	stw.u	%0, [%2]\n"				\
	"	mov	%0, #0\n"				\
	"3:\n"							\
	"	.pushsection __ex_table,\"a\"\n"		\
	"	.align	3\n"					\
	"	.long	1b, 4f, 2b, 4f\n"			\
	"	.popsection\n"					\
	"	.pushsection .fixup,\"ax\"\n"			\
	"4:	mov	%0, %4\n"				\
	"	b	3b\n"					\
	"	.popsection"					\
	: "=&r" (ret), "=&r" (oldval)				\
	: "r" (uaddr), "r" (oparg), "Ir" (-EFAULT)		\
	: "cc", "memory")

static inline int
futex_atomic_op_inuser(int encoded_op, int __user *uaddr)
{
	int op = (encoded_op >> 28) & 7;
	int cmp = (encoded_op >> 24) & 15;
	int oparg = (encoded_op << 8) >> 20;
	int cmparg = (encoded_op << 20) >> 20;
	int oldval = 0, ret;

	if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28))
		oparg = 1 << oparg;

	if (!access_ok(VERIFY_WRITE, uaddr, sizeof(int)))
		return -EFAULT;

	pagefault_disable();	/* implies preempt_disable() */

	switch (op) {
	case FUTEX_OP_SET:
		__futex_atomic_op("mov	%0, %3", ret, oldval, uaddr, oparg);
		break;
	case FUTEX_OP_ADD:
		__futex_atomic_op("add	%0, %1, %3", ret, oldval, uaddr, oparg);
		break;
	case FUTEX_OP_OR:
		__futex_atomic_op("or	%0, %1, %3", ret, oldval, uaddr, oparg);
		break;
	case FUTEX_OP_ANDN:
		__futex_atomic_op("and	%0, %1, %3",
				ret, oldval, uaddr, ~oparg);
		break;
	case FUTEX_OP_XOR:
		__futex_atomic_op("xor	%0, %1, %3", ret, oldval, uaddr, oparg);
		break;
	default:
		ret = -ENOSYS;
	}

	pagefault_enable();	/* subsumes preempt_enable() */

	if (!ret) {
		switch (cmp) {
		case FUTEX_OP_CMP_EQ:
			ret = (oldval == cmparg);
			break;
		case FUTEX_OP_CMP_NE:
			ret = (oldval != cmparg);
			break;
		case FUTEX_OP_CMP_LT:
			ret = (oldval <  cmparg);
			break;
		case FUTEX_OP_CMP_GE:
			ret = (oldval >= cmparg);
			break;
		case FUTEX_OP_CMP_LE:
			ret = (oldval <= cmparg);
			break;
		case FUTEX_OP_CMP_GT:
			ret = (oldval >  cmparg);
			break;
		default:
			ret = -ENOSYS;
		}
	}
	return ret;
}

static inline int
futex_atomic_cmpxchg_inatomic(int __user *uaddr, int oldval, int newval)
{
	int val;

	if (!access_ok(VERIFY_WRITE, uaddr, sizeof(int)))
		return -EFAULT;

	pagefault_disable();	/* implies preempt_disable() */

	__asm__ __volatile__("@futex_atomic_cmpxchg_inatomic\n"
	"1:	ldw.u	%0, [%3]\n"
	"	cmpxor.a	%0, %1\n"
	"	bne	3f\n"
	"2:	stw.u	%2, [%3]\n"
	"3:\n"
	"	.pushsection __ex_table,\"a\"\n"
	"	.align	3\n"
	"	.long	1b, 4f, 2b, 4f\n"
	"	.popsection\n"
	"	.pushsection .fixup,\"ax\"\n"
	"4:	mov	%0, %4\n"
	"	b	3b\n"
	"	.popsection"
	: "=&r" (val)
	: "r" (oldval), "r" (newval), "r" (uaddr), "Ir" (-EFAULT)
	: "cc", "memory");

	pagefault_enable();	/* subsumes preempt_enable() */

	return val;
}

#endif /* __KERNEL__ */
#endif /* __UNICORE_FUTEX_H__ */
+0 −10
Original line number Original line Diff line number Diff line
@@ -23,16 +23,6 @@
#define PKUNITY_SDRAM_BASE		0x00000000 /* 0x00000000 - 0x7FFFFFFF 2GB */
#define PKUNITY_SDRAM_BASE		0x00000000 /* 0x00000000 - 0x7FFFFFFF 2GB */
#define PKUNITY_MMIO_BASE		0x80000000 /* 0x80000000 - 0xFFFFFFFF 2GB */
#define PKUNITY_MMIO_BASE		0x80000000 /* 0x80000000 - 0xFFFFFFFF 2GB */


/*
 * PKUNITY Memory Map Addresses: 0x0D000000 - 0x0EFFFFFF (32MB)
 *	0x0D000000 - 0x0DFFFFFF 16MB: for UVC
 *	0x0E000000 - 0x0EFFFFFF 16MB: for UNIGFX
 */
#define PKUNITY_UVC_MMAP_BASE		0x0D000000
#define PKUNITY_UVC_MMAP_SIZE		0x01000000 /* 16MB */
#define PKUNITY_UNIGFX_MMAP_BASE        0x0E000000
#define PKUNITY_UNIGFX_MMAP_SIZE        0x01000000 /* 16MB */

/*
/*
 * PKUNITY System Bus Addresses (PCI): 0x80000000 - 0xBFFFFFFF (1GB)
 * PKUNITY System Bus Addresses (PCI): 0x80000000 - 0xBFFFFFFF (1GB)
 * 0x80000000 - 0x8000000B 12B    PCI Configuration regs
 * 0x80000000 - 0x8000000B 12B    PCI Configuration regs
+0 −1
Original line number Original line Diff line number Diff line
@@ -50,7 +50,6 @@ void puv3_pci_adjust_zones(unsigned long *size, unsigned long *holes);


/* kuser area */
/* kuser area */
#define KUSER_VECPAGE_BASE	(KUSER_BASE + UL(0x3fff0000))
#define KUSER_VECPAGE_BASE	(KUSER_BASE + UL(0x3fff0000))
#define KUSER_UNIGFX_BASE	(PAGE_OFFSET + PKUNITY_UNIGFX_MMAP_BASE)
/* kuser_vecpage (0xbfff0000) is ro, and vectors page (0xffff0000) is rw */
/* kuser_vecpage (0xbfff0000) is ro, and vectors page (0xffff0000) is rw */
#define kuser_vecpage_to_vectors(x)	((x) - (KUSER_VECPAGE_BASE)	\
#define kuser_vecpage_to_vectors(x)	((x) - (KUSER_VECPAGE_BASE)	\
					+ (VECTORS_BASE))
					+ (VECTORS_BASE))
+0 −5
Original line number Original line Diff line number Diff line
@@ -99,11 +99,6 @@ static struct resource puv3_unigfx_resources[] = {
		.end	= io_v2p(PKUNITY_UNIGFX_BASE) + 0xfff,
		.end	= io_v2p(PKUNITY_UNIGFX_BASE) + 0xfff,
		.flags	= IORESOURCE_MEM,
		.flags	= IORESOURCE_MEM,
	},
	},
	[1] = {
		.start	= PKUNITY_UNIGFX_MMAP_BASE,
		.end	= PKUNITY_UNIGFX_MMAP_BASE + PKUNITY_UNIGFX_MMAP_SIZE,
		.flags	= IORESOURCE_MEM,
	},
};
};


static struct resource puv3_rtc_resources[] = {
static struct resource puv3_rtc_resources[] = {
Loading