Blame view

Documentation/frv/features.txt 10.6 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
  			 ===========================
  			 FUJITSU FR-V LINUX FEATURES
  			 ===========================
  
  This kernel port has a number of features of which the user should be aware:
  
   (*) Linux and uClinux
  
       The FR-V architecture port supports both normal MMU linux and uClinux out
       of the same sources.
  
  
   (*) CPU support
  
       Support for the FR401, FR403, FR405, FR451 and FR555 CPUs should work with
       the same uClinux kernel configuration.
  
       In normal (MMU) Linux mode, only the FR451 CPU will work as that is the
       only one with a suitably featured CPU.
  
       The kernel is written and compiled with the assumption that only the
       bottom 32 GR registers and no FR registers will be used by the kernel
       itself, however all extra userspace registers will be saved on context
       switch. Note that since most CPUs can't support lazy switching, no attempt
       is made to do lazy register saving where that would be possible (FR555
       only currently).
  
  
   (*) Board support
  
       The board on which the kernel will run can be configured on the "Processor
       type and features" configuration tab.
  
       Set the System to "MB93093-PDK" to boot from the MB93093 (FR403) PDK.
  
       Set the System to "MB93091-VDK" to boot from the CB11, CB30, CB41, CB60,
       CB70 or CB451 VDK boards. Set the Motherboard setting to "MB93090-MB00" to
       boot with the standard ATA90590B VDK motherboard, and set it to "None" to
       boot without any motherboard.
  
  
   (*) Binary Formats
  
       The only userspace binary format supported is FDPIC ELF. Normal ELF, FLAT
       and AOUT binaries are not supported for this architecture.
  
       FDPIC ELF supports shared library and program interpreter facilities.
  
  
   (*) Scheduler Speed
  
       The kernel scheduler runs at 100Hz irrespective of the clock speed on this
       architecture. This value is set in asm/param.h (see the HZ macro defined
       there).
  
  
   (*) Normal (MMU) Linux Memory Layout.
  
       See mmu-layout.txt in this directory for a description of the normal linux
       memory layout
  
       See include/asm-frv/mem-layout.h for constants pertaining to the memory
       layout.
  
       See include/asm-frv/mb-regs.h for the constants pertaining to the I/O bus
       controller configuration.
  
  
   (*) uClinux Memory Layout
  
       The memory layout used by the uClinux kernel is as follows:
  
  	0x00000000 - 0x00000FFF		Null pointer catch page
  	0x20000000 - 0x200FFFFF CS2#    [PDK] FPGA
  	0xC0000000 - 0xCFFFFFFF		SDRAM
  	0xC0000000			Base of Linux kernel image
  	0xE0000000 - 0xEFFFFFFF	CS2#	[VDK] SLBUS/PCI window
  	0xF0000000 - 0xF0FFFFFF	CS5#	MB93493 CSC area (DAV daughter board)
  	0xF1000000 - 0xF1FFFFFF	CS7#	[CB70/CB451] CPU-card PCMCIA port space
  	0xFC000000 - 0xFC0FFFFF	CS1#	[VDK] MB86943 config space
  	0xFC100000 - 0xFC1FFFFF	CS6#	[CB70/CB451] CPU-card DM9000 NIC space
  	0xFC100000 - 0xFC1FFFFF	CS6#	[PDK] AX88796 NIC space
  	0xFC200000 - 0xFC2FFFFF	CS3#	MB93493 CSR area (DAV daughter board)
  	0xFD000000 - 0xFDFFFFFF	CS4#	[CB70/CB451] CPU-card extra flash space
  	0xFE000000 - 0xFEFFFFFF		Internal CPU peripherals
  	0xFF000000 - 0xFF1FFFFF	CS0#	Flash 1
  	0xFF200000 - 0xFF3FFFFF	CS0#	Flash 2
  	0xFFC00000 - 0xFFC0001F	CS0#	[VDK] FPGA
  
       The kernel reads the size of the SDRAM from the memory bus controller
       registers by default.
  
       The kernel initialisation code (1) adjusts the SDRAM base addresses to
       move the SDRAM to desired address, (2) moves the kernel image down to the
       bottom of SDRAM, (3) adjusts the bus controller registers to move I/O
       windows, and (4) rearranges the protection registers to protect all of
       this.
  
       The reasons for doing this are: (1) the page at address 0 should be
       inaccessible so that NULL pointer errors can be caught; and (2) the bottom
       three quarters are left unoccupied so that an FR-V CPU with an MMU can use
       it for virtual userspace mappings.
  
       See include/asm-frv/mem-layout.h for constants pertaining to the memory
       layout.
  
       See include/asm-frv/mb-regs.h for the constants pertaining to the I/O bus
       controller configuration.
  
  
   (*) uClinux Memory Protection
  
       A DAMPR register is used to cover the entire region used for I/O
       (0xE0000000 - 0xFFFFFFFF). This permits the kernel to make uncached
       accesses to this region. Userspace is not permitted to access it.
  
       The DAMPR/IAMPR protection registers not in use for any other purpose are
       tiled over the top of the SDRAM such that:
  
  	(1) The core kernel image is covered by as small a tile as possible
              granting only the kernel access to the underlying data, whilst
              making sure no SDRAM is actually made unavailable by this approach.
  
  	(2) All other tiles are arranged to permit userspace access to the rest
              of the SDRAM.
  
       Barring point (1), there is nothing to protect kernel data against
       userspace damage - but this is uClinux.
  
  
   (*) Exceptions and Fixups
  
       Since the FR40x and FR55x CPUs that do not have full MMUs generate
       imprecise data error exceptions, there are currently no automatic fixup
       services available in uClinux. This includes misaligned memory access
       fixups.
  
       Userspace EFAULT errors can be trapped by issuing a MEMBAR instruction and
       forcing the fault to happen there.
  
       On the FR451, however, data exceptions are mostly precise, and so
       exception fixup handling is implemented as normal.
  
  
   (*) Userspace Breakpoints
  
       The ptrace() system call supports the following userspace debugging
       features:
  
  	(1) Hardware assisted single step.
  
  	(2) Breakpoint via the FR-V "BREAK" instruction.
  
  	(3) Breakpoint via the FR-V "TIRA GR0, #1" instruction.
  
  	(4) Syscall entry/exit trap.
  
       Each of the above generates a SIGTRAP.
  
  
   (*) On-Chip Serial Ports
  
       The FR-V on-chip serial ports are made available as ttyS0 and ttyS1. Note
       that if the GDB stub is compiled in, ttyS1 will not actually be available
       as it will be being used for the GDB stub.
  
       These ports can be made by:
  
  	mknod /dev/ttyS0 c 4 64
  	mknod /dev/ttyS1 c 4 65
  
  
   (*) Maskable Interrupts
  
       Level 15 (Non-maskable) interrupts are dealt with by the GDB stub if
       present, and cause a panic if not. If the GDB stub is present, ttyS1's
       interrupts are rated at level 15.
  
       All other interrupts are distributed over the set of available priorities
       so that no IRQs are shared where possible. The arch interrupt handling
       routines attempt to disentangle the various sources available through the
       CPU's own multiplexor, and those on off-CPU peripherals.
  
  
   (*) Accessing PCI Devices
  
       Where PCI is available, care must be taken when dealing with drivers that
       access PCI devices. PCI devices present their data in little-endian form,
       but the CPU sees it in big-endian form. The macros in asm/io.h try to get
       this right, but may not under all circumstances...
  
  
   (*) Ax88796 Ethernet Driver
  
       The MB93093 PDK board has an Ax88796 ethernet chipset (an NE2000 clone). A
       driver has been written to deal specifically with this. The driver
       provides MII services for the card.
  
       The driver can be configured by running make xconfig, and going to:
  
  	(*) Network device support
  	    - turn on "Network device support"
  	    (*) Ethernet (10 or 100Mbit)
  		- turn on "Ethernet (10 or 100Mbit)"
  		- turn on "AX88796 NE2000 compatible chipset"
  
       The driver can be found in:
  
  	drivers/net/ax88796.c
  	include/asm/ax88796.h
  
  
   (*) WorkRAM Driver
  
       This driver provides a character device that permits access to the WorkRAM
       that can be found on the FR451 CPU. Each page is accessible through a
       separate minor number, thereby permitting each page to have its own
       filesystem permissions set on the device file.
  
       The device files should be:
  
  	mknod /dev/frv/workram0 c 240 0
  	mknod /dev/frv/workram1 c 240 1
  	mknod /dev/frv/workram2 c 240 2
  	...
  
       The driver will not permit the opening of any device file that does not
       correspond to at least a partial page of WorkRAM. So the first device file
       is the only one available on the FR451. If any other CPU is detected, none
       of the devices will be openable.
  
       The devices can be accessed with read, write and llseek, and can also be
       mmapped. If they're mmapped, they will only map at the appropriate
       0x7e8nnnnn address on linux and at the 0xfe8nnnnn address on uClinux. If
       MAP_FIXED is not specified, the appropriate address will be chosen anyway.
  
       The mappings must be MAP_SHARED not MAP_PRIVATE, and must not be
       PROT_EXEC. They must also start at file offset 0, and must not be longer
       than one page in size.
  
       This driver can be configured by running make xconfig, and going to:
  
  	(*) Character devices
  	    - turn on "Fujitsu FR-V CPU WorkRAM support"
  
  
   (*) Dynamic data cache write mode changing
  
       It is possible to view and to change the data cache's write mode through
       the /proc/sys/frv/cache-mode file while the kernel is running. There are
       two modes available:
  
  	NAME	MEANING
  	=====	==========================================
  	wthru	Data cache is in Write-Through mode
  	wback	Data cache is in Write-Back/Copy-Back mode
  
       To read the cache mode:
  
  	# cat /proc/sys/frv/cache-mode
  	wthru
  
       To change the cache mode:
  
  	# echo wback >/proc/sys/frv/cache-mode
  	# cat /proc/sys/frv/cache-mode
  	wback
  
  
   (*) MMU Context IDs and Pinning
  
       On MMU Linux the CPU supports the concept of a context ID in its MMU to
       make it more efficient (TLB entries are labelled with a context ID to link
       them to specific tasks).
  
       Normally once a context ID is allocated, it will remain affixed to a task
       or CLONE_VM'd group of tasks for as long as it exists. However, since the
       kernel is capable of supporting more tasks than there are possible ID
       numbers, the kernel will pass context IDs from one task to another if
       there are insufficient available.
  
       The context ID currently in use by a task can be viewed in /proc:
  
  	# grep CXNR /proc/1/status
  	CXNR: 1
  
       Note that kernel threads do not have a userspace context, and so will not
       show a CXNR entry in that file.
  
       Under some circumstances, however, it is desirable to pin a context ID on
       a process such that the kernel won't pass it on. This can be done by
       writing the process ID of the target process to a special file:
  
  	# echo 17 >/proc/sys/frv/pin-cxnr
  
       Reading from the file will then show the context ID pinned.
  
  	# cat /proc/sys/frv/pin-cxnr
  	4
  
       The context ID will remain pinned as long as any process is using that
       context, i.e.: when the all the subscribing processes have exited or
       exec'd; or when an unpinning request happens:
  
  	# echo 0 >/proc/sys/frv/pin-cxnr
  
       When there isn't a pinned context, the file shows -1:
  
  	# cat /proc/sys/frv/pin-cxnr
  	-1