diff options
author | Jonas Bonn <jonas@southpole.se> | 2011-06-04 15:45:16 -0400 |
---|---|---|
committer | Jonas Bonn <jonas@southpole.se> | 2011-07-22 12:46:41 -0400 |
commit | 616257669e1aa28628e84914810d0d94a6967653 (patch) | |
tree | 05334dd9128e6554d2127156785c068433c25752 | |
parent | 224cd129fdbb40a01de4aaf46cd77d80e65d81e5 (diff) |
OpenRISC: Miscellaneous
Adds README file, TODO list, and a couple of other pieces that didn't seem
to fit into any other patch.
Signed-off-by: Jonas Bonn <jonas@southpole.se>
Reviewed-by: Arnd Bergmann <arnd@arndb.de>
-rw-r--r-- | arch/openrisc/README.openrisc | 99 | ||||
-rw-r--r-- | arch/openrisc/TODO.openrisc | 16 | ||||
-rw-r--r-- | arch/openrisc/kernel/asm-offsets.c | 70 | ||||
-rw-r--r-- | arch/openrisc/kernel/or32_ksyms.c | 46 |
4 files changed, 231 insertions, 0 deletions
diff --git a/arch/openrisc/README.openrisc b/arch/openrisc/README.openrisc new file mode 100644 index 000000000000..c9f7edf2b9a2 --- /dev/null +++ b/arch/openrisc/README.openrisc | |||
@@ -0,0 +1,99 @@ | |||
1 | OpenRISC Linux | ||
2 | ============== | ||
3 | |||
4 | This is a port of Linux to the OpenRISC class of microprocessors; the initial | ||
5 | target architecture, specifically, is the 32-bit OpenRISC 1000 family (or1k). | ||
6 | |||
7 | For information about OpenRISC processors and ongoing development: | ||
8 | |||
9 | website http://openrisc.net | ||
10 | |||
11 | For more information about Linux on OpenRISC, please contact South Pole AB. | ||
12 | |||
13 | email: info@southpole.se | ||
14 | |||
15 | website: http://southpole.se | ||
16 | http://southpoleconsulting.com | ||
17 | |||
18 | --------------------------------------------------------------------- | ||
19 | |||
20 | Build instructions for OpenRISC toolchain and Linux | ||
21 | =================================================== | ||
22 | |||
23 | In order to build and run Linux for OpenRISC, you'll need at least a basic | ||
24 | toolchain and, perhaps, the architectural simulator. Steps to get these bits | ||
25 | in place are outlined here. | ||
26 | |||
27 | 1) The toolchain can be obtained from openrisc.net. Instructions for building | ||
28 | a toolchain can be found at: | ||
29 | |||
30 | http://openrisc.net/toolchain-build.html | ||
31 | |||
32 | 2) or1ksim (optional) | ||
33 | |||
34 | or1ksim is the architectural simulator which will allow you to actually run | ||
35 | your OpenRISC Linux kernel if you don't have an OpenRISC processor at hand. | ||
36 | |||
37 | git clone git://openrisc.net/jonas/or1ksim-svn | ||
38 | |||
39 | cd or1ksim | ||
40 | ./configure --prefix=$OPENRISC_PREFIX | ||
41 | make | ||
42 | make install | ||
43 | |||
44 | 3) Linux kernel | ||
45 | |||
46 | Build the kernel as usual | ||
47 | |||
48 | make ARCH=openrisc defconfig | ||
49 | make ARCH=openrisc | ||
50 | |||
51 | 4) Run in architectural simulator | ||
52 | |||
53 | Grab the or1ksim platform configuration file (from the or1ksim source) and | ||
54 | together with your freshly built vmlinux, run your kernel with the following | ||
55 | incantation: | ||
56 | |||
57 | sim -f arch/openrisc/or1ksim.cfg vmlinux | ||
58 | |||
59 | --------------------------------------------------------------------- | ||
60 | |||
61 | Terminology | ||
62 | =========== | ||
63 | |||
64 | In the code, the following particles are used on symbols to limit the scope | ||
65 | to more or less specific processor implementations: | ||
66 | |||
67 | openrisc: the OpenRISC class of processors | ||
68 | or1k: the OpenRISC 1000 family of processors | ||
69 | or1200: the OpenRISC 1200 processor | ||
70 | |||
71 | --------------------------------------------------------------------- | ||
72 | |||
73 | History | ||
74 | ======== | ||
75 | |||
76 | 18. 11. 2003 Matjaz Breskvar (phoenix@bsemi.com) | ||
77 | initial port of linux to OpenRISC/or32 architecture. | ||
78 | all the core stuff is implemented and seams usable. | ||
79 | |||
80 | 08. 12. 2003 Matjaz Breskvar (phoenix@bsemi.com) | ||
81 | complete change of TLB miss handling. | ||
82 | rewrite of exceptions handling. | ||
83 | fully functional sash-3.6 in default initrd. | ||
84 | a much improved version with changes all around. | ||
85 | |||
86 | 10. 04. 2004 Matjaz Breskvar (phoenix@bsemi.com) | ||
87 | alot of bugfixes all over. | ||
88 | ethernet support, functional http and telnet servers. | ||
89 | running many standard linux apps. | ||
90 | |||
91 | 26. 06. 2004 Matjaz Breskvar (phoenix@bsemi.com) | ||
92 | port to 2.6.x | ||
93 | |||
94 | 30. 11. 2004 Matjaz Breskvar (phoenix@bsemi.com) | ||
95 | lots of bugfixes and enhancments. | ||
96 | added opencores framebuffer driver. | ||
97 | |||
98 | 09. 10. 2010 Jonas Bonn (jonas@southpole.se) | ||
99 | major rewrite to bring up to par with upstream Linux 2.6.36 | ||
diff --git a/arch/openrisc/TODO.openrisc b/arch/openrisc/TODO.openrisc new file mode 100644 index 000000000000..acfeef9c58e3 --- /dev/null +++ b/arch/openrisc/TODO.openrisc | |||
@@ -0,0 +1,16 @@ | |||
1 | The OpenRISC Linux port is fully functional and has been tracking upstream | ||
2 | since 2.6.35. There are, however, remaining items to be completed within | ||
3 | the coming months. Here's a list of known-to-be-less-than-stellar items | ||
4 | that are due for investigation shortly, i.e. our TODO list: | ||
5 | |||
6 | -- Implement the rest of the DMA API... dma_map_sg, etc. | ||
7 | |||
8 | -- Consolidate usage of memblock and bootmem... move everything over to | ||
9 | memblock. | ||
10 | |||
11 | -- Finish the renaming cleanup... there are references to or32 in the code | ||
12 | which was an older name for the architecture. The name we've settled on is | ||
13 | or1k and this change is slowly trickling through the stack. For the time | ||
14 | being, or32 is equivalent to or1k. | ||
15 | |||
16 | -- Implement optimized version of memcpy and memset | ||
diff --git a/arch/openrisc/kernel/asm-offsets.c b/arch/openrisc/kernel/asm-offsets.c new file mode 100644 index 000000000000..1a242a0d7583 --- /dev/null +++ b/arch/openrisc/kernel/asm-offsets.c | |||
@@ -0,0 +1,70 @@ | |||
1 | /* | ||
2 | * OpenRISC asm-offsets.c | ||
3 | * | ||
4 | * Linux architectural port borrowing liberally from similar works of | ||
5 | * others. All original copyrights apply as per the original source | ||
6 | * declaration. | ||
7 | * | ||
8 | * Modifications for the OpenRISC architecture: | ||
9 | * Copyright (C) 2003 Matjaz Breskvar <phoenix@bsemi.com> | ||
10 | * Copyright (C) 2010-2011 Jonas Bonn <jonas@southpole.se> | ||
11 | * | ||
12 | * This program is free software; you can redistribute it and/or | ||
13 | * modify it under the terms of the GNU General Public License | ||
14 | * as published by the Free Software Foundation; either version | ||
15 | * 2 of the License, or (at your option) any later version. | ||
16 | * | ||
17 | * This program is used to generate definitions needed by | ||
18 | * assembly language modules. | ||
19 | * | ||
20 | * We use the technique used in the OSF Mach kernel code: | ||
21 | * generate asm statements containing #defines, | ||
22 | * compile this file to assembler, and then extract the | ||
23 | * #defines from the assembly-language output. | ||
24 | */ | ||
25 | |||
26 | #include <linux/signal.h> | ||
27 | #include <linux/sched.h> | ||
28 | #include <linux/kernel.h> | ||
29 | #include <linux/errno.h> | ||
30 | #include <linux/string.h> | ||
31 | #include <linux/types.h> | ||
32 | #include <linux/ptrace.h> | ||
33 | #include <linux/mman.h> | ||
34 | #include <linux/mm.h> | ||
35 | #include <linux/io.h> | ||
36 | #include <linux/thread_info.h> | ||
37 | #include <asm/page.h> | ||
38 | #include <asm/pgtable.h> | ||
39 | #include <asm/processor.h> | ||
40 | |||
41 | #define DEFINE(sym, val) \ | ||
42 | asm volatile("\n->" #sym " %0 " #val : : "i" (val)) | ||
43 | |||
44 | #define BLANK() asm volatile("\n->" : : ) | ||
45 | |||
46 | int main(void) | ||
47 | { | ||
48 | /* offsets into the task_struct */ | ||
49 | DEFINE(TASK_STATE, offsetof(struct task_struct, state)); | ||
50 | DEFINE(TASK_FLAGS, offsetof(struct task_struct, flags)); | ||
51 | DEFINE(TASK_PTRACE, offsetof(struct task_struct, ptrace)); | ||
52 | DEFINE(TASK_THREAD, offsetof(struct task_struct, thread)); | ||
53 | DEFINE(TASK_MM, offsetof(struct task_struct, mm)); | ||
54 | DEFINE(TASK_ACTIVE_MM, offsetof(struct task_struct, active_mm)); | ||
55 | |||
56 | /* offsets into thread_info */ | ||
57 | DEFINE(TI_TASK, offsetof(struct thread_info, task)); | ||
58 | DEFINE(TI_FLAGS, offsetof(struct thread_info, flags)); | ||
59 | DEFINE(TI_PREEMPT, offsetof(struct thread_info, preempt_count)); | ||
60 | DEFINE(TI_KSP, offsetof(struct thread_info, ksp)); | ||
61 | |||
62 | DEFINE(PT_SIZE, sizeof(struct pt_regs)); | ||
63 | |||
64 | /* Interrupt register frame */ | ||
65 | DEFINE(STACK_FRAME_OVERHEAD, STACK_FRAME_OVERHEAD); | ||
66 | DEFINE(INT_FRAME_SIZE, STACK_FRAME_OVERHEAD + sizeof(struct pt_regs)); | ||
67 | |||
68 | DEFINE(NUM_USER_SEGMENTS, TASK_SIZE >> 28); | ||
69 | return 0; | ||
70 | } | ||
diff --git a/arch/openrisc/kernel/or32_ksyms.c b/arch/openrisc/kernel/or32_ksyms.c new file mode 100644 index 000000000000..83ccf7c0c58d --- /dev/null +++ b/arch/openrisc/kernel/or32_ksyms.c | |||
@@ -0,0 +1,46 @@ | |||
1 | /* | ||
2 | * OpenRISC or32_ksyms.c | ||
3 | * | ||
4 | * Linux architectural port borrowing liberally from similar works of | ||
5 | * others. All original copyrights apply as per the original source | ||
6 | * declaration. | ||
7 | * | ||
8 | * Modifications for the OpenRISC architecture: | ||
9 | * Copyright (C) 2003 Matjaz Breskvar <phoenix@bsemi.com> | ||
10 | * Copyright (C) 2010-2011 Jonas Bonn <jonas@southpole.se> | ||
11 | * | ||
12 | * This program is free software; you can redistribute it and/or | ||
13 | * modify it under the terms of the GNU General Public License | ||
14 | * as published by the Free Software Foundation; either version | ||
15 | * 2 of the License, or (at your option) any later version. | ||
16 | */ | ||
17 | |||
18 | #include <linux/module.h> | ||
19 | #include <linux/elfcore.h> | ||
20 | #include <linux/sched.h> | ||
21 | #include <linux/in6.h> | ||
22 | #include <linux/interrupt.h> | ||
23 | #include <linux/vmalloc.h> | ||
24 | #include <linux/semaphore.h> | ||
25 | |||
26 | #include <asm/processor.h> | ||
27 | #include <asm/uaccess.h> | ||
28 | #include <asm/checksum.h> | ||
29 | #include <asm/io.h> | ||
30 | #include <asm/hardirq.h> | ||
31 | #include <asm/delay.h> | ||
32 | #include <asm/pgalloc.h> | ||
33 | |||
34 | #define DECLARE_EXPORT(name) extern void name(void); EXPORT_SYMBOL(name) | ||
35 | |||
36 | /* compiler generated symbols */ | ||
37 | DECLARE_EXPORT(__udivsi3); | ||
38 | DECLARE_EXPORT(__divsi3); | ||
39 | DECLARE_EXPORT(__umodsi3); | ||
40 | DECLARE_EXPORT(__modsi3); | ||
41 | DECLARE_EXPORT(__muldi3); | ||
42 | DECLARE_EXPORT(__ashrdi3); | ||
43 | DECLARE_EXPORT(__ashldi3); | ||
44 | DECLARE_EXPORT(__lshrdi3); | ||
45 | |||
46 | EXPORT_SYMBOL(__copy_tofrom_user); | ||