linux/Documentation/frv/features.txt
<<
>>
Prefs
   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
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.