diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-04-04 11:33:21 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-04-04 11:33:21 -0400 |
| commit | 3230ca9dc656a2354b679e2e62ee7740485563a9 (patch) | |
| tree | b5659a952454efe7ef18e6f34bf123e948ae413e | |
| parent | 7dbb25a579fe1f068358a19928ada4f9be62e60d (diff) | |
| parent | 6b794743b2c5e21825d35b5d5dd57d6fcc388198 (diff) | |
Merge branch 'unicore32' of git://git.kernel.org/pub/scm/linux/kernel/git/epip/linux-2.6-unicore32
* '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
| -rw-r--r-- | arch/unicore32/Makefile | 2 | ||||
| -rw-r--r-- | arch/unicore32/include/asm/futex.h | 143 | ||||
| -rw-r--r-- | arch/unicore32/include/mach/PKUnity.h | 10 | ||||
| -rw-r--r-- | arch/unicore32/include/mach/memory.h | 1 | ||||
| -rw-r--r-- | arch/unicore32/kernel/puv3-core.c | 5 | ||||
| -rw-r--r-- | arch/unicore32/kernel/rtc.c | 9 | ||||
| -rw-r--r-- | arch/unicore32/kernel/setup.c | 15 | ||||
| -rw-r--r-- | arch/unicore32/kernel/traps.c | 1 | ||||
| -rw-r--r-- | arch/unicore32/kernel/vmlinux.lds.S | 7 | ||||
| -rw-r--r-- | arch/unicore32/mm/mmu.c | 20 | ||||
| -rw-r--r-- | drivers/video/fb-puv3.c | 28 |
11 files changed, 24 insertions, 217 deletions
diff --git a/arch/unicore32/Makefile b/arch/unicore32/Makefile index e08d6d370a8a..76a8beec7d03 100644 --- a/arch/unicore32/Makefile +++ b/arch/unicore32/Makefile | |||
| @@ -48,7 +48,7 @@ ASM_GENERIC_HEADERS += bitsperlong.h bug.h bugs.h | |||
| 48 | ASM_GENERIC_HEADERS += cputime.h current.h | 48 | ASM_GENERIC_HEADERS += cputime.h current.h |
| 49 | ASM_GENERIC_HEADERS += device.h div64.h | 49 | ASM_GENERIC_HEADERS += device.h div64.h |
| 50 | ASM_GENERIC_HEADERS += emergency-restart.h errno.h | 50 | ASM_GENERIC_HEADERS += emergency-restart.h errno.h |
| 51 | ASM_GENERIC_HEADERS += fb.h fcntl.h ftrace.h | 51 | ASM_GENERIC_HEADERS += fb.h fcntl.h ftrace.h futex.h |
| 52 | ASM_GENERIC_HEADERS += hardirq.h hw_irq.h | 52 | ASM_GENERIC_HEADERS += hardirq.h hw_irq.h |
| 53 | ASM_GENERIC_HEADERS += ioctl.h ioctls.h ipcbuf.h irq_regs.h | 53 | ASM_GENERIC_HEADERS += ioctl.h ioctls.h ipcbuf.h irq_regs.h |
| 54 | ASM_GENERIC_HEADERS += kdebug.h kmap_types.h | 54 | ASM_GENERIC_HEADERS += kdebug.h kmap_types.h |
diff --git a/arch/unicore32/include/asm/futex.h b/arch/unicore32/include/asm/futex.h deleted file mode 100644 index 07dea6170558..000000000000 --- a/arch/unicore32/include/asm/futex.h +++ /dev/null | |||
| @@ -1,143 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * linux/arch/unicore32/include/asm/futex.h | ||
| 3 | * | ||
| 4 | * Code specific to PKUnity SoC and UniCore ISA | ||
| 5 | * | ||
| 6 | * Copyright (C) 2001-2010 GUAN Xue-tao | ||
| 7 | * | ||
| 8 | * This program is free software; you can redistribute it and/or modify | ||
| 9 | * it under the terms of the GNU General Public License version 2 as | ||
| 10 | * published by the Free Software Foundation. | ||
| 11 | */ | ||
| 12 | |||
| 13 | #ifndef __UNICORE_FUTEX_H__ | ||
| 14 | #define __UNICORE_FUTEX_H__ | ||
| 15 | |||
| 16 | #ifdef __KERNEL__ | ||
| 17 | |||
| 18 | #include <linux/futex.h> | ||
| 19 | #include <linux/preempt.h> | ||
| 20 | #include <linux/uaccess.h> | ||
| 21 | #include <linux/errno.h> | ||
| 22 | |||
| 23 | #define __futex_atomic_op(insn, ret, oldval, uaddr, oparg) \ | ||
| 24 | __asm__ __volatile__( \ | ||
| 25 | "1: ldw.u %1, [%2]\n" \ | ||
| 26 | " " insn "\n" \ | ||
| 27 | "2: stw.u %0, [%2]\n" \ | ||
| 28 | " mov %0, #0\n" \ | ||
| 29 | "3:\n" \ | ||
| 30 | " .pushsection __ex_table,\"a\"\n" \ | ||
| 31 | " .align 3\n" \ | ||
| 32 | " .long 1b, 4f, 2b, 4f\n" \ | ||
| 33 | " .popsection\n" \ | ||
| 34 | " .pushsection .fixup,\"ax\"\n" \ | ||
| 35 | "4: mov %0, %4\n" \ | ||
| 36 | " b 3b\n" \ | ||
| 37 | " .popsection" \ | ||
| 38 | : "=&r" (ret), "=&r" (oldval) \ | ||
| 39 | : "r" (uaddr), "r" (oparg), "Ir" (-EFAULT) \ | ||
| 40 | : "cc", "memory") | ||
| 41 | |||
| 42 | static inline int | ||
| 43 | futex_atomic_op_inuser(int encoded_op, int __user *uaddr) | ||
| 44 | { | ||
| 45 | int op = (encoded_op >> 28) & 7; | ||
| 46 | int cmp = (encoded_op >> 24) & 15; | ||
| 47 | int oparg = (encoded_op << 8) >> 20; | ||
| 48 | int cmparg = (encoded_op << 20) >> 20; | ||
| 49 | int oldval = 0, ret; | ||
| 50 | |||
| 51 | if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28)) | ||
| 52 | oparg = 1 << oparg; | ||
| 53 | |||
| 54 | if (!access_ok(VERIFY_WRITE, uaddr, sizeof(int))) | ||
| 55 | return -EFAULT; | ||
| 56 | |||
| 57 | pagefault_disable(); /* implies preempt_disable() */ | ||
| 58 | |||
| 59 | switch (op) { | ||
| 60 | case FUTEX_OP_SET: | ||
| 61 | __futex_atomic_op("mov %0, %3", ret, oldval, uaddr, oparg); | ||
| 62 | break; | ||
| 63 | case FUTEX_OP_ADD: | ||
| 64 | __futex_atomic_op("add %0, %1, %3", ret, oldval, uaddr, oparg); | ||
| 65 | break; | ||
| 66 | case FUTEX_OP_OR: | ||
| 67 | __futex_atomic_op("or %0, %1, %3", ret, oldval, uaddr, oparg); | ||
| 68 | break; | ||
| 69 | case FUTEX_OP_ANDN: | ||
| 70 | __futex_atomic_op("and %0, %1, %3", | ||
| 71 | ret, oldval, uaddr, ~oparg); | ||
| 72 | break; | ||
| 73 | case FUTEX_OP_XOR: | ||
| 74 | __futex_atomic_op("xor %0, %1, %3", ret, oldval, uaddr, oparg); | ||
| 75 | break; | ||
| 76 | default: | ||
| 77 | ret = -ENOSYS; | ||
| 78 | } | ||
| 79 | |||
| 80 | pagefault_enable(); /* subsumes preempt_enable() */ | ||
| 81 | |||
| 82 | if (!ret) { | ||
| 83 | switch (cmp) { | ||
| 84 | case FUTEX_OP_CMP_EQ: | ||
| 85 | ret = (oldval == cmparg); | ||
| 86 | break; | ||
| 87 | case FUTEX_OP_CMP_NE: | ||
| 88 | ret = (oldval != cmparg); | ||
| 89 | break; | ||
| 90 | case FUTEX_OP_CMP_LT: | ||
| 91 | ret = (oldval < cmparg); | ||
| 92 | break; | ||
| 93 | case FUTEX_OP_CMP_GE: | ||
| 94 | ret = (oldval >= cmparg); | ||
| 95 | break; | ||
| 96 | case FUTEX_OP_CMP_LE: | ||
| 97 | ret = (oldval <= cmparg); | ||
| 98 | break; | ||
| 99 | case FUTEX_OP_CMP_GT: | ||
| 100 | ret = (oldval > cmparg); | ||
| 101 | break; | ||
| 102 | default: | ||
| 103 | ret = -ENOSYS; | ||
| 104 | } | ||
| 105 | } | ||
| 106 | return ret; | ||
| 107 | } | ||
| 108 | |||
| 109 | static inline int | ||
| 110 | futex_atomic_cmpxchg_inatomic(int __user *uaddr, int oldval, int newval) | ||
| 111 | { | ||
| 112 | int val; | ||
| 113 | |||
| 114 | if (!access_ok(VERIFY_WRITE, uaddr, sizeof(int))) | ||
| 115 | return -EFAULT; | ||
| 116 | |||
| 117 | pagefault_disable(); /* implies preempt_disable() */ | ||
| 118 | |||
| 119 | __asm__ __volatile__("@futex_atomic_cmpxchg_inatomic\n" | ||
| 120 | "1: ldw.u %0, [%3]\n" | ||
| 121 | " cmpxor.a %0, %1\n" | ||
| 122 | " bne 3f\n" | ||
| 123 | "2: stw.u %2, [%3]\n" | ||
| 124 | "3:\n" | ||
| 125 | " .pushsection __ex_table,\"a\"\n" | ||
| 126 | " .align 3\n" | ||
| 127 | " .long 1b, 4f, 2b, 4f\n" | ||
| 128 | " .popsection\n" | ||
| 129 | " .pushsection .fixup,\"ax\"\n" | ||
| 130 | "4: mov %0, %4\n" | ||
| 131 | " b 3b\n" | ||
| 132 | " .popsection" | ||
| 133 | : "=&r" (val) | ||
| 134 | : "r" (oldval), "r" (newval), "r" (uaddr), "Ir" (-EFAULT) | ||
| 135 | : "cc", "memory"); | ||
| 136 | |||
| 137 | pagefault_enable(); /* subsumes preempt_enable() */ | ||
| 138 | |||
| 139 | return val; | ||
| 140 | } | ||
| 141 | |||
| 142 | #endif /* __KERNEL__ */ | ||
| 143 | #endif /* __UNICORE_FUTEX_H__ */ | ||
diff --git a/arch/unicore32/include/mach/PKUnity.h b/arch/unicore32/include/mach/PKUnity.h index a18bdc3810e6..8040d575dddb 100644 --- a/arch/unicore32/include/mach/PKUnity.h +++ b/arch/unicore32/include/mach/PKUnity.h | |||
| @@ -24,16 +24,6 @@ | |||
| 24 | #define PKUNITY_MMIO_BASE 0x80000000 /* 0x80000000 - 0xFFFFFFFF 2GB */ | 24 | #define PKUNITY_MMIO_BASE 0x80000000 /* 0x80000000 - 0xFFFFFFFF 2GB */ |
| 25 | 25 | ||
| 26 | /* | 26 | /* |
| 27 | * PKUNITY Memory Map Addresses: 0x0D000000 - 0x0EFFFFFF (32MB) | ||
| 28 | * 0x0D000000 - 0x0DFFFFFF 16MB: for UVC | ||
| 29 | * 0x0E000000 - 0x0EFFFFFF 16MB: for UNIGFX | ||
| 30 | */ | ||
| 31 | #define PKUNITY_UVC_MMAP_BASE 0x0D000000 | ||
| 32 | #define PKUNITY_UVC_MMAP_SIZE 0x01000000 /* 16MB */ | ||
| 33 | #define PKUNITY_UNIGFX_MMAP_BASE 0x0E000000 | ||
| 34 | #define PKUNITY_UNIGFX_MMAP_SIZE 0x01000000 /* 16MB */ | ||
| 35 | |||
| 36 | /* | ||
| 37 | * PKUNITY System Bus Addresses (PCI): 0x80000000 - 0xBFFFFFFF (1GB) | 27 | * PKUNITY System Bus Addresses (PCI): 0x80000000 - 0xBFFFFFFF (1GB) |
| 38 | * 0x80000000 - 0x8000000B 12B PCI Configuration regs | 28 | * 0x80000000 - 0x8000000B 12B PCI Configuration regs |
| 39 | * 0x80010000 - 0x80010250 592B PCI Bridge Base | 29 | * 0x80010000 - 0x80010250 592B PCI Bridge Base |
diff --git a/arch/unicore32/include/mach/memory.h b/arch/unicore32/include/mach/memory.h index 0bf21c944710..4be72c21d491 100644 --- a/arch/unicore32/include/mach/memory.h +++ b/arch/unicore32/include/mach/memory.h | |||
| @@ -50,7 +50,6 @@ void puv3_pci_adjust_zones(unsigned long *size, unsigned long *holes); | |||
| 50 | 50 | ||
| 51 | /* kuser area */ | 51 | /* kuser area */ |
| 52 | #define KUSER_VECPAGE_BASE (KUSER_BASE + UL(0x3fff0000)) | 52 | #define KUSER_VECPAGE_BASE (KUSER_BASE + UL(0x3fff0000)) |
| 53 | #define KUSER_UNIGFX_BASE (PAGE_OFFSET + PKUNITY_UNIGFX_MMAP_BASE) | ||
| 54 | /* kuser_vecpage (0xbfff0000) is ro, and vectors page (0xffff0000) is rw */ | 53 | /* kuser_vecpage (0xbfff0000) is ro, and vectors page (0xffff0000) is rw */ |
| 55 | #define kuser_vecpage_to_vectors(x) ((x) - (KUSER_VECPAGE_BASE) \ | 54 | #define kuser_vecpage_to_vectors(x) ((x) - (KUSER_VECPAGE_BASE) \ |
| 56 | + (VECTORS_BASE)) | 55 | + (VECTORS_BASE)) |
diff --git a/arch/unicore32/kernel/puv3-core.c b/arch/unicore32/kernel/puv3-core.c index 8b1b6beb858e..1a505a787765 100644 --- a/arch/unicore32/kernel/puv3-core.c +++ b/arch/unicore32/kernel/puv3-core.c | |||
| @@ -99,11 +99,6 @@ static struct resource puv3_unigfx_resources[] = { | |||
| 99 | .end = io_v2p(PKUNITY_UNIGFX_BASE) + 0xfff, | 99 | .end = io_v2p(PKUNITY_UNIGFX_BASE) + 0xfff, |
| 100 | .flags = IORESOURCE_MEM, | 100 | .flags = IORESOURCE_MEM, |
| 101 | }, | 101 | }, |
| 102 | [1] = { | ||
| 103 | .start = PKUNITY_UNIGFX_MMAP_BASE, | ||
| 104 | .end = PKUNITY_UNIGFX_MMAP_BASE + PKUNITY_UNIGFX_MMAP_SIZE, | ||
| 105 | .flags = IORESOURCE_MEM, | ||
| 106 | }, | ||
| 107 | }; | 102 | }; |
| 108 | 103 | ||
| 109 | static struct resource puv3_rtc_resources[] = { | 104 | static struct resource puv3_rtc_resources[] = { |
diff --git a/arch/unicore32/kernel/rtc.c b/arch/unicore32/kernel/rtc.c index c5f068295b51..8cad70b3302c 100644 --- a/arch/unicore32/kernel/rtc.c +++ b/arch/unicore32/kernel/rtc.c | |||
| @@ -88,11 +88,6 @@ static int puv3_rtc_setpie(struct device *dev, int enabled) | |||
| 88 | return 0; | 88 | return 0; |
| 89 | } | 89 | } |
| 90 | 90 | ||
| 91 | static int puv3_rtc_setfreq(struct device *dev, int freq) | ||
| 92 | { | ||
| 93 | return 0; | ||
| 94 | } | ||
| 95 | |||
| 96 | /* Time read/write */ | 91 | /* Time read/write */ |
| 97 | 92 | ||
| 98 | static int puv3_rtc_gettime(struct device *dev, struct rtc_time *rtc_tm) | 93 | static int puv3_rtc_gettime(struct device *dev, struct rtc_time *rtc_tm) |
| @@ -214,8 +209,6 @@ static const struct rtc_class_ops puv3_rtcops = { | |||
| 214 | .set_time = puv3_rtc_settime, | 209 | .set_time = puv3_rtc_settime, |
| 215 | .read_alarm = puv3_rtc_getalarm, | 210 | .read_alarm = puv3_rtc_getalarm, |
| 216 | .set_alarm = puv3_rtc_setalarm, | 211 | .set_alarm = puv3_rtc_setalarm, |
| 217 | .irq_set_freq = puv3_rtc_setfreq, | ||
| 218 | .irq_set_state = puv3_rtc_setpie, | ||
| 219 | .proc = puv3_rtc_proc, | 212 | .proc = puv3_rtc_proc, |
| 220 | }; | 213 | }; |
| 221 | 214 | ||
| @@ -294,8 +287,6 @@ static int puv3_rtc_probe(struct platform_device *pdev) | |||
| 294 | 287 | ||
| 295 | puv3_rtc_enable(pdev, 1); | 288 | puv3_rtc_enable(pdev, 1); |
| 296 | 289 | ||
| 297 | puv3_rtc_setfreq(&pdev->dev, 1); | ||
| 298 | |||
| 299 | /* register RTC and exit */ | 290 | /* register RTC and exit */ |
| 300 | 291 | ||
| 301 | rtc = rtc_device_register("pkunity", &pdev->dev, &puv3_rtcops, | 292 | rtc = rtc_device_register("pkunity", &pdev->dev, &puv3_rtcops, |
diff --git a/arch/unicore32/kernel/setup.c b/arch/unicore32/kernel/setup.c index 1e175a82844d..471b6bca8da4 100644 --- a/arch/unicore32/kernel/setup.c +++ b/arch/unicore32/kernel/setup.c | |||
| @@ -64,12 +64,6 @@ static char default_command_line[COMMAND_LINE_SIZE] __initdata = CONFIG_CMDLINE; | |||
| 64 | */ | 64 | */ |
| 65 | static struct resource mem_res[] = { | 65 | static struct resource mem_res[] = { |
| 66 | { | 66 | { |
| 67 | .name = "Video RAM", | ||
| 68 | .start = 0, | ||
| 69 | .end = 0, | ||
| 70 | .flags = IORESOURCE_MEM | ||
| 71 | }, | ||
| 72 | { | ||
| 73 | .name = "Kernel text", | 67 | .name = "Kernel text", |
| 74 | .start = 0, | 68 | .start = 0, |
| 75 | .end = 0, | 69 | .end = 0, |
| @@ -83,9 +77,8 @@ static struct resource mem_res[] = { | |||
| 83 | } | 77 | } |
| 84 | }; | 78 | }; |
| 85 | 79 | ||
| 86 | #define video_ram mem_res[0] | 80 | #define kernel_code mem_res[0] |
| 87 | #define kernel_code mem_res[1] | 81 | #define kernel_data mem_res[1] |
| 88 | #define kernel_data mem_res[2] | ||
| 89 | 82 | ||
| 90 | /* | 83 | /* |
| 91 | * These functions re-use the assembly code in head.S, which | 84 | * These functions re-use the assembly code in head.S, which |
| @@ -224,10 +217,6 @@ request_standard_resources(struct meminfo *mi) | |||
| 224 | kernel_data.end <= res->end) | 217 | kernel_data.end <= res->end) |
| 225 | request_resource(res, &kernel_data); | 218 | request_resource(res, &kernel_data); |
| 226 | } | 219 | } |
| 227 | |||
| 228 | video_ram.start = PKUNITY_UNIGFX_MMAP_BASE; | ||
| 229 | video_ram.end = PKUNITY_UNIGFX_MMAP_BASE + PKUNITY_UNIGFX_MMAP_SIZE; | ||
| 230 | request_resource(&iomem_resource, &video_ram); | ||
| 231 | } | 220 | } |
| 232 | 221 | ||
| 233 | static void (*init_machine)(void) __initdata; | 222 | static void (*init_machine)(void) __initdata; |
diff --git a/arch/unicore32/kernel/traps.c b/arch/unicore32/kernel/traps.c index 25abbb101729..254e36fa9513 100644 --- a/arch/unicore32/kernel/traps.c +++ b/arch/unicore32/kernel/traps.c | |||
| @@ -22,7 +22,6 @@ | |||
| 22 | #include <linux/delay.h> | 22 | #include <linux/delay.h> |
| 23 | #include <linux/hardirq.h> | 23 | #include <linux/hardirq.h> |
| 24 | #include <linux/init.h> | 24 | #include <linux/init.h> |
| 25 | #include <linux/uaccess.h> | ||
| 26 | #include <linux/atomic.h> | 25 | #include <linux/atomic.h> |
| 27 | #include <linux/unistd.h> | 26 | #include <linux/unistd.h> |
| 28 | 27 | ||
diff --git a/arch/unicore32/kernel/vmlinux.lds.S b/arch/unicore32/kernel/vmlinux.lds.S index 0b4eb89729e7..9bf7f7af52c5 100644 --- a/arch/unicore32/kernel/vmlinux.lds.S +++ b/arch/unicore32/kernel/vmlinux.lds.S | |||
| @@ -14,6 +14,7 @@ | |||
| 14 | #include <asm/thread_info.h> | 14 | #include <asm/thread_info.h> |
| 15 | #include <asm/memory.h> | 15 | #include <asm/memory.h> |
| 16 | #include <asm/page.h> | 16 | #include <asm/page.h> |
| 17 | #include <asm/cache.h> | ||
| 17 | 18 | ||
| 18 | OUTPUT_ARCH(unicore32) | 19 | OUTPUT_ARCH(unicore32) |
| 19 | ENTRY(stext) | 20 | ENTRY(stext) |
| @@ -29,7 +30,7 @@ SECTIONS | |||
| 29 | HEAD_TEXT_SECTION | 30 | HEAD_TEXT_SECTION |
| 30 | INIT_TEXT_SECTION(PAGE_SIZE) | 31 | INIT_TEXT_SECTION(PAGE_SIZE) |
| 31 | INIT_DATA_SECTION(16) | 32 | INIT_DATA_SECTION(16) |
| 32 | PERCPU(PAGE_SIZE) | 33 | PERCPU(L1_CACHE_BYTES, PAGE_SIZE) |
| 33 | __init_end = .; | 34 | __init_end = .; |
| 34 | 35 | ||
| 35 | _stext = .; | 36 | _stext = .; |
| @@ -45,10 +46,10 @@ SECTIONS | |||
| 45 | 46 | ||
| 46 | _sdata = .; | 47 | _sdata = .; |
| 47 | RO_DATA_SECTION(PAGE_SIZE) | 48 | RO_DATA_SECTION(PAGE_SIZE) |
| 48 | RW_DATA_SECTION(32, PAGE_SIZE, THREAD_SIZE) | 49 | RW_DATA_SECTION(L1_CACHE_BYTES, PAGE_SIZE, THREAD_SIZE) |
| 49 | _edata = .; | 50 | _edata = .; |
| 50 | 51 | ||
| 51 | EXCEPTION_TABLE(32) | 52 | EXCEPTION_TABLE(L1_CACHE_BYTES) |
| 52 | NOTES | 53 | NOTES |
| 53 | 54 | ||
| 54 | BSS_SECTION(0, 0, 0) | 55 | BSS_SECTION(0, 0, 0) |
diff --git a/arch/unicore32/mm/mmu.c b/arch/unicore32/mm/mmu.c index 7bf3d588631f..db2d334941b4 100644 --- a/arch/unicore32/mm/mmu.c +++ b/arch/unicore32/mm/mmu.c | |||
| @@ -338,15 +338,6 @@ void __init uc32_mm_memblock_reserve(void) | |||
| 338 | * and can only be in node 0. | 338 | * and can only be in node 0. |
| 339 | */ | 339 | */ |
| 340 | memblock_reserve(__pa(swapper_pg_dir), PTRS_PER_PGD * sizeof(pgd_t)); | 340 | memblock_reserve(__pa(swapper_pg_dir), PTRS_PER_PGD * sizeof(pgd_t)); |
| 341 | |||
| 342 | #ifdef CONFIG_PUV3_UNIGFX | ||
| 343 | /* | ||
| 344 | * These should likewise go elsewhere. They pre-reserve the | ||
| 345 | * screen/video memory region at the 48M~64M of main system memory. | ||
| 346 | */ | ||
| 347 | memblock_reserve(PKUNITY_UNIGFX_MMAP_BASE, PKUNITY_UNIGFX_MMAP_SIZE); | ||
| 348 | memblock_reserve(PKUNITY_UVC_MMAP_BASE, PKUNITY_UVC_MMAP_SIZE); | ||
| 349 | #endif | ||
| 350 | } | 341 | } |
| 351 | 342 | ||
| 352 | /* | 343 | /* |
| @@ -371,17 +362,6 @@ static void __init devicemaps_init(void) | |||
| 371 | pmd_clear(pmd_off_k(addr)); | 362 | pmd_clear(pmd_off_k(addr)); |
| 372 | 363 | ||
| 373 | /* | 364 | /* |
| 374 | * Create a mapping for UniGFX VRAM | ||
| 375 | */ | ||
| 376 | #ifdef CONFIG_PUV3_UNIGFX | ||
| 377 | map.pfn = __phys_to_pfn(PKUNITY_UNIGFX_MMAP_BASE); | ||
| 378 | map.virtual = KUSER_UNIGFX_BASE; | ||
| 379 | map.length = PKUNITY_UNIGFX_MMAP_SIZE; | ||
| 380 | map.type = MT_KUSER; | ||
| 381 | create_mapping(&map); | ||
| 382 | #endif | ||
| 383 | |||
| 384 | /* | ||
| 385 | * Create a mapping for the machine vectors at the high-vectors | 365 | * Create a mapping for the machine vectors at the high-vectors |
| 386 | * location (0xffff0000). If we aren't using high-vectors, also | 366 | * location (0xffff0000). If we aren't using high-vectors, also |
| 387 | * create a mapping at the low-vectors virtual address. | 367 | * create a mapping at the low-vectors virtual address. |
diff --git a/drivers/video/fb-puv3.c b/drivers/video/fb-puv3.c index dbd2dc4745d1..27f2c57e06e9 100644 --- a/drivers/video/fb-puv3.c +++ b/drivers/video/fb-puv3.c | |||
| @@ -13,7 +13,6 @@ | |||
| 13 | #include <linux/module.h> | 13 | #include <linux/module.h> |
| 14 | #include <linux/kernel.h> | 14 | #include <linux/kernel.h> |
| 15 | #include <linux/errno.h> | 15 | #include <linux/errno.h> |
| 16 | #include <linux/vmalloc.h> | ||
| 17 | #include <linux/platform_device.h> | 16 | #include <linux/platform_device.h> |
| 18 | #include <linux/clk.h> | 17 | #include <linux/clk.h> |
| 19 | #include <linux/fb.h> | 18 | #include <linux/fb.h> |
| @@ -531,7 +530,7 @@ static int unifb_set_par(struct fb_info *info) | |||
| 531 | return -EINVAL; | 530 | return -EINVAL; |
| 532 | } | 531 | } |
| 533 | 532 | ||
| 534 | writel(PKUNITY_UNIGFX_MMAP_BASE, UDE_FSA); | 533 | writel(info->fix.smem_start, UDE_FSA); |
| 535 | writel(info->var.yres, UDE_LS); | 534 | writel(info->var.yres, UDE_LS); |
| 536 | writel(get_line_length(info->var.xres, | 535 | writel(get_line_length(info->var.xres, |
| 537 | info->var.bits_per_pixel) >> 3, UDE_PS); | 536 | info->var.bits_per_pixel) >> 3, UDE_PS); |
| @@ -680,13 +679,27 @@ static int unifb_probe(struct platform_device *dev) | |||
| 680 | struct fb_info *info; | 679 | struct fb_info *info; |
| 681 | u32 unifb_regs[UNIFB_REGS_NUM]; | 680 | u32 unifb_regs[UNIFB_REGS_NUM]; |
| 682 | int retval = -ENOMEM; | 681 | int retval = -ENOMEM; |
| 683 | struct resource *iomem, *mapmem; | 682 | struct resource *iomem; |
| 683 | void *videomemory; | ||
| 684 | |||
| 685 | videomemory = (void *)__get_free_pages(GFP_KERNEL | __GFP_COMP, | ||
| 686 | get_order(UNIFB_MEMSIZE)); | ||
| 687 | if (!videomemory) | ||
| 688 | goto err; | ||
| 689 | |||
| 690 | memset(videomemory, 0, UNIFB_MEMSIZE); | ||
| 691 | |||
| 692 | unifb_fix.smem_start = virt_to_phys(videomemory); | ||
| 693 | unifb_fix.smem_len = UNIFB_MEMSIZE; | ||
| 694 | |||
| 695 | iomem = platform_get_resource(dev, IORESOURCE_MEM, 0); | ||
| 696 | unifb_fix.mmio_start = iomem->start; | ||
| 684 | 697 | ||
| 685 | info = framebuffer_alloc(sizeof(u32)*256, &dev->dev); | 698 | info = framebuffer_alloc(sizeof(u32)*256, &dev->dev); |
| 686 | if (!info) | 699 | if (!info) |
| 687 | goto err; | 700 | goto err; |
| 688 | 701 | ||
| 689 | info->screen_base = (char __iomem *)KUSER_UNIGFX_BASE; | 702 | info->screen_base = (char __iomem *)videomemory; |
| 690 | info->fbops = &unifb_ops; | 703 | info->fbops = &unifb_ops; |
| 691 | 704 | ||
| 692 | retval = fb_find_mode(&info->var, info, NULL, | 705 | retval = fb_find_mode(&info->var, info, NULL, |
| @@ -695,13 +708,6 @@ static int unifb_probe(struct platform_device *dev) | |||
| 695 | if (!retval || (retval == 4)) | 708 | if (!retval || (retval == 4)) |
| 696 | info->var = unifb_default; | 709 | info->var = unifb_default; |
| 697 | 710 | ||
| 698 | iomem = platform_get_resource(dev, IORESOURCE_MEM, 0); | ||
| 699 | unifb_fix.mmio_start = iomem->start; | ||
| 700 | |||
| 701 | mapmem = platform_get_resource(dev, IORESOURCE_MEM, 1); | ||
| 702 | unifb_fix.smem_start = mapmem->start; | ||
| 703 | unifb_fix.smem_len = UNIFB_MEMSIZE; | ||
| 704 | |||
| 705 | info->fix = unifb_fix; | 711 | info->fix = unifb_fix; |
| 706 | info->pseudo_palette = info->par; | 712 | info->pseudo_palette = info->par; |
| 707 | info->par = NULL; | 713 | info->par = NULL; |
