			 ===========================
			 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
