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