Commit 3230ca9dc656a2354b679e2e62ee7740485563a9

Authored by Linus Torvalds

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

Showing 11 changed files Side-by-side Diff

arch/unicore32/Makefile
... ... @@ -48,7 +48,7 @@
48 48 ASM_GENERIC_HEADERS += cputime.h current.h
49 49 ASM_GENERIC_HEADERS += device.h div64.h
50 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 52 ASM_GENERIC_HEADERS += hardirq.h hw_irq.h
53 53 ASM_GENERIC_HEADERS += ioctl.h ioctls.h ipcbuf.h irq_regs.h
54 54 ASM_GENERIC_HEADERS += kdebug.h kmap_types.h
arch/unicore32/include/asm/futex.h
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__ */
arch/unicore32/include/mach/PKUnity.h
... ... @@ -24,16 +24,6 @@
24 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 27 * PKUNITY System Bus Addresses (PCI): 0x80000000 - 0xBFFFFFFF (1GB)
38 28 * 0x80000000 - 0x8000000B 12B PCI Configuration regs
39 29 * 0x80010000 - 0x80010250 592B PCI Bridge Base
arch/unicore32/include/mach/memory.h
... ... @@ -50,7 +50,6 @@
50 50  
51 51 /* kuser area */
52 52 #define KUSER_VECPAGE_BASE (KUSER_BASE + UL(0x3fff0000))
53   -#define KUSER_UNIGFX_BASE (PAGE_OFFSET + PKUNITY_UNIGFX_MMAP_BASE)
54 53 /* kuser_vecpage (0xbfff0000) is ro, and vectors page (0xffff0000) is rw */
55 54 #define kuser_vecpage_to_vectors(x) ((x) - (KUSER_VECPAGE_BASE) \
56 55 + (VECTORS_BASE))
arch/unicore32/kernel/puv3-core.c
... ... @@ -99,11 +99,6 @@
99 99 .end = io_v2p(PKUNITY_UNIGFX_BASE) + 0xfff,
100 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 104 static struct resource puv3_rtc_resources[] = {
arch/unicore32/kernel/rtc.c
... ... @@ -88,11 +88,6 @@
88 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 91 /* Time read/write */
97 92  
98 93 static int puv3_rtc_gettime(struct device *dev, struct rtc_time *rtc_tm)
... ... @@ -214,8 +209,6 @@
214 209 .set_time = puv3_rtc_settime,
215 210 .read_alarm = puv3_rtc_getalarm,
216 211 .set_alarm = puv3_rtc_setalarm,
217   - .irq_set_freq = puv3_rtc_setfreq,
218   - .irq_set_state = puv3_rtc_setpie,
219 212 .proc = puv3_rtc_proc,
220 213 };
221 214  
... ... @@ -293,8 +286,6 @@
293 286 }
294 287  
295 288 puv3_rtc_enable(pdev, 1);
296   -
297   - puv3_rtc_setfreq(&pdev->dev, 1);
298 289  
299 290 /* register RTC and exit */
300 291  
arch/unicore32/kernel/setup.c
... ... @@ -64,12 +64,6 @@
64 64 */
65 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 67 .name = "Kernel text",
74 68 .start = 0,
75 69 .end = 0,
... ... @@ -83,9 +77,8 @@
83 77 }
84 78 };
85 79  
86   -#define video_ram mem_res[0]
87   -#define kernel_code mem_res[1]
88   -#define kernel_data mem_res[2]
  80 +#define kernel_code mem_res[0]
  81 +#define kernel_data mem_res[1]
89 82  
90 83 /*
91 84 * These functions re-use the assembly code in head.S, which
... ... @@ -224,10 +217,6 @@
224 217 kernel_data.end <= res->end)
225 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 222 static void (*init_machine)(void) __initdata;
arch/unicore32/kernel/traps.c
... ... @@ -22,7 +22,6 @@
22 22 #include <linux/delay.h>
23 23 #include <linux/hardirq.h>
24 24 #include <linux/init.h>
25   -#include <linux/uaccess.h>
26 25 #include <linux/atomic.h>
27 26 #include <linux/unistd.h>
28 27  
arch/unicore32/kernel/vmlinux.lds.S
... ... @@ -14,6 +14,7 @@
14 14 #include <asm/thread_info.h>
15 15 #include <asm/memory.h>
16 16 #include <asm/page.h>
  17 +#include <asm/cache.h>
17 18  
18 19 OUTPUT_ARCH(unicore32)
19 20 ENTRY(stext)
... ... @@ -29,7 +30,7 @@
29 30 HEAD_TEXT_SECTION
30 31 INIT_TEXT_SECTION(PAGE_SIZE)
31 32 INIT_DATA_SECTION(16)
32   - PERCPU(PAGE_SIZE)
  33 + PERCPU(L1_CACHE_BYTES, PAGE_SIZE)
33 34 __init_end = .;
34 35  
35 36 _stext = .;
36 37  
... ... @@ -45,10 +46,10 @@
45 46  
46 47 _sdata = .;
47 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 50 _edata = .;
50 51  
51   - EXCEPTION_TABLE(32)
  52 + EXCEPTION_TABLE(L1_CACHE_BYTES)
52 53 NOTES
53 54  
54 55 BSS_SECTION(0, 0, 0)
arch/unicore32/mm/mmu.c
... ... @@ -338,15 +338,6 @@
338 338 * and can only be in node 0.
339 339 */
340 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 /*
... ... @@ -369,17 +360,6 @@
369 360  
370 361 for (addr = VMALLOC_END; addr; addr += PGDIR_SIZE)
371 362 pmd_clear(pmd_off_k(addr));
372   -
373   - /*
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 363  
384 364 /*
385 365 * Create a mapping for the machine vectors at the high-vectors
drivers/video/fb-puv3.c
... ... @@ -13,7 +13,6 @@
13 13 #include <linux/module.h>
14 14 #include <linux/kernel.h>
15 15 #include <linux/errno.h>
16   -#include <linux/vmalloc.h>
17 16 #include <linux/platform_device.h>
18 17 #include <linux/clk.h>
19 18 #include <linux/fb.h>
... ... @@ -531,7 +530,7 @@
531 530 return -EINVAL;
532 531 }
533 532  
534   - writel(PKUNITY_UNIGFX_MMAP_BASE, UDE_FSA);
  533 + writel(info->fix.smem_start, UDE_FSA);
535 534 writel(info->var.yres, UDE_LS);
536 535 writel(get_line_length(info->var.xres,
537 536 info->var.bits_per_pixel) >> 3, UDE_PS);
538 537  
539 538  
... ... @@ -680,13 +679,27 @@
680 679 struct fb_info *info;
681 680 u32 unifb_regs[UNIFB_REGS_NUM];
682 681 int retval = -ENOMEM;
683   - struct resource *iomem, *mapmem;
  682 + struct resource *iomem;
  683 + void *videomemory;
684 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;
  697 +
685 698 info = framebuffer_alloc(sizeof(u32)*256, &dev->dev);
686 699 if (!info)
687 700 goto err;
688 701  
689   - info->screen_base = (char __iomem *)KUSER_UNIGFX_BASE;
  702 + info->screen_base = (char __iomem *)videomemory;
690 703 info->fbops = &unifb_ops;
691 704  
692 705 retval = fb_find_mode(&info->var, info, NULL,
... ... @@ -694,13 +707,6 @@
694 707  
695 708 if (!retval || (retval == 4))
696 709 info->var = unifb_default;
697   -
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 710  
705 711 info->fix = unifb_fix;
706 712 info->pseudo_palette = info->par;