summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/m68k/mvme167/README
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>1999-02-18 19:23:28 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>1999-02-18 19:23:28 +0000
commit5d024595a7cbb8a04fad883fd89b42d61d72acf7 (patch)
tree8bffa56dd3e0d9ab2c5d61651c43da9676105644 /c/src/lib/libbsp/m68k/mvme167/README
parentMissed this file in the merge. (diff)
downloadrtems-5d024595a7cbb8a04fad883fd89b42d61d72acf7.tar.bz2
MVME167 BSP submitted by Charles Gauthier <Charles.Gauthier@iit.nrc.ca>.
Diffstat (limited to 'c/src/lib/libbsp/m68k/mvme167/README')
-rw-r--r--c/src/lib/libbsp/m68k/mvme167/README395
1 files changed, 395 insertions, 0 deletions
diff --git a/c/src/lib/libbsp/m68k/mvme167/README b/c/src/lib/libbsp/m68k/mvme167/README
new file mode 100644
index 0000000000..8074c6eff2
--- /dev/null
+++ b/c/src/lib/libbsp/m68k/mvme167/README
@@ -0,0 +1,395 @@
+$Id$
+
+This is a README file for the MVME167 port of RTEMS 4.0.0.
+
+Please send any comments, improvements, or bug reports to:
+
+Charles-Antoine Gauthier
+Software Engineering Group
+Institute for Information Technology
+National Research Council of Canada
+Ottawa, ON, K1A 0R6
+Canada
+
+charles.gauthier@iit.nrc.ca
+
+
+Disclaimer
+----------
+
+The National Research Council of Canada is distributing this RTEMS
+board support package for the Motorola MVME167 as free software; you
+can redistribute it and/or modify it under terms of the GNU General
+Public License as published by the Free Software Foundation; either
+version 2, or (at your option) any later version. This software is
+distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details. You should have received a copy of the GNU General
+Public License along with RTEMS; see file COPYING. If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+
+Under no circumstances will the National Research Council of Canada
+nor Her Majesty the Queen in right of Canada assume any liablility
+for the use this software, nor any responsibility for its quality or
+its support.
+
+
+Installation
+------------
+
+Nothing unique to the MVME167. It uses the standard build process for
+m68k targets. You will need to edit linkcmds to put in the start address
+of your board. We do TFTP transfers to our target. The mvme167.cfg file
+builds only the coff images, which we download to the target, skipping over
+the first 0xA8 bytes; Motorola S-records are not generated. Edit this file
+if you want S-records.
+
+
+Port Description
+----------------
+
+This BSP includes an termios-capable console driver that supports all
+four serial ports on the MVME167 model. The RTEMS console, /dev/console,
+corresponds to channel 1 in the CD2401. This corresponds to Serial Port
+2/TTY01 on the MVME712M. Serial Port 1/Console is normally used by 167Bug;
+do not open /dev/tty00 if you are debugging using 167Bug.
+
+The console is initialized with whatever parameters are set up in termios
+before it calls the firtOpen driver callback, EXCEPT THAT HARDWARE HANDSHAKING
+IS TURNED OFF, i.e. CLOCAL is set in the struct termios c_cflag field. We use
+3-wire cables for I/O, and find hardware handshaking a pain. If you enable
+hardware handshaking, you must drive CTS* low on the CD2401 for output to
+occur. If the port is in the DTE configuration, you must drive the RS-232 CTS
+line to space; if the port is in the DCE configuration, you must drive the
+RS-232 RTS line to space.
+
+Limited support is provided for polled terminal I/O. This is used when running
+the timing tests. Set the CD2401_POLLED_IO manifest constant to 1 in
+rtems/c/src/lib/libbsp/m68k/mvme167/console/console.c to enable polled I/O.
+In this case, I/O is done through 167Bug, usually to the Serial Port 1/Console
+port. Interrupt-driven and polled I/O cannot be mixed in the MVME167.
+
+The timer and clock drivers were patterned after the MVME162 and MVME152
+ports.
+
+At this time, we do not have an MPCI layer for the MVME167. We are planning
+to write one.
+
+The port does not have a network driver.
+
+This port supplies its own fatal_error_handler, which attempts to print some
+error message through 167Bug (on the Serial Port 1/Console on the MVME712M).
+
+
+Host System
+-----------
+
+The port was initially developed on an RS-6000 running AIX 4.2. The following
+tools were used:
+
+ - GNU gcc 2.8.1 configured for a powerpc-ibm-aix4.2.0.0 host and
+ m68k-rtems target;
+ - GNU binutils 2.9.1 configured for a powerpc-ibm-aix4.2.0.0 host and
+ m68k-rtems target;
+ - Cygnus newlib 1.8.0 with RTEMS 4.0.0 patches.
+
+
+Known Problems
+--------------
+
+The cdtest will not run with interrupt-driven I/O. The reason is that the
+constructors for the static objects are called at boot time when the
+interrupts are still disabled. The output buffer fills up, but never empties,
+and the application goes into an infinite loop waiting for buffer space. This
+should have been documented in the rtems/c/src/tests/PROBLEMS file. The moral
+of this story is: do not do I/O from the constructors or destructors of static
+objects.
+
+The cpuuse and malloctest tests do not work properly, either with polled I/O
+or interrupt-driven I/O. They are known not to work with interrupt-driven I/O,
+but should work with polled I/O?
+
+Output stops prematurely in the termios test when the console is operating in
+interrupt-driven mode because the serial port is re-initialized before all
+characters in the last raw output buffer are sent. Adding calls to tcdrain()
+in the test task helps, but it does not solve the problem. What happens is
+that the CD2401 raises a transmit interrupt when the last character in the
+DMA buffer is written into the transmit FIFO, not when the last character
+has been transmitted. When tcdrain() returns, there might be up to 16
+characters in the output FIFO. The call to tcsetattr() causes the serial port
+to re-initialize, at which point the output FIFO is cleared. We could not find
+a way to detect whether characters are still in the FIFO and to wait for them
+to be transmitted.
+
+The first raw buffer to be transmitted after the console is re-initialized
+with tcsetattr() is garbled. At this time, it does not seem worth while to
+track this problem down.
+
+In the rtmonuse test, an unimplemented floating point instruction exception
+is raised at the end of the test when CPU_usage_Dump() is called. The faulting
+instruction is FCMP.X FP0,FP2 in cvt().
+
+In the stackchk test, an access fault exception is raised after the stack is
+blown. This is one case were overwritting the first or last 16 bytes of the
+stack does cause problems (but hey, an exception occurred, which is better
+than propagating the error).
+
+When using interrupt-driven I/O, psx08 produces all the expected output, but
+it does not return control to 167Bug. Is this test supposed to work with
+interrupt-driven console I/O?
+
+
+What's new
+----------
+
+
+Thanks
+------
+
+- to On-Line Applications Research Corporation (OAR) for developing
+RTEMS and making it available on a Technology Transfer basis;
+
+- to FSF and Cygnus Support for great free software;
+
+
+Test Configuration
+------------------
+
+Board: Motorola MVME167
+CPU: Motorola MC68040
+Clock Speed: 25 MHz
+RAM: 4 MBytes of 32-bit DRAM with parity
+Cache Configuration: Instruction cache on; data cache on, copyback mode.
+Times Reported in: microseconds
+Timer Source: VMEchip2 Tick Timer 1
+GCC Flags: -m68040 -g -O4 -fomit-frame-pointer
+Console: Operate in polled mode. Set CD2401_POLLED_IO to 1 in
+ rtems/c/src/lib/libbsp/m68k/mvme167/console/console.c.
+
+
+Test Results
+------------
+
+Single processor tests: All tests passed, except the following ones:
+ sp19 and rtmonuse failed with an unimplemented floating point instruction
+ exception (FCMP.X FP0,FP2). We do not have a floating point emulation
+ library at this time.
+ cpuuse and malloctest did not work.
+ The stackchk test got an access fault exception before the RTEMS stack
+ checker had had a chance to detect the corrupted stack.
+
+Multi-processort tests: not applicable -- No MPCI layer yet.
+
+Timing tests:
+
+ Context Switch
+
+ context switch: no floating point contexts 12
+ context switch: self 3
+ context switch: to another task 3
+ fp context switch: restore 1st FP task 14
+ fp context switch: save idle, restore initialized 5
+ fp context switch: save idle, restore idle 15
+ fp context switch: save initialized, restore initialized 5
+
+
+ Miscellaneous
+
+ _ISR_Disable 1
+ _ISR_Flash 0
+ _ISR_Enable 0
+
+ _Thread_Disable_dispatch 0
+ _Thread_Enable_dispatch 3
+ _Thread_Set_state 9
+ _Thread_Disptach (NO FP) 16
+ _Thread_Resume 6
+ _Thread_Unblock 4
+ _Thread_Ready 6
+ _Thread_Get 3
+ _Thread_Get: invalid id 0
+
+ _Semaphore_Get 2
+
+
+ Task Manager
+
+ rtems_task_create 56
+ rtems_task_ident 106
+ rtems_task_start 21
+ rtems_task_restart: calling task 24
+ rtems_task_restart: suspended task -- returns to caller 27
+ rtems_task_restart: blocked task -- returns to caller 36
+ rtems_task_restart: ready task -- returns to caller 27
+ rtems_task_restart: suspended task -- preempts caller 40
+ rtems_task_restart: blocked task -- preempts caller 51
+ rtems_task_restart: ready task -- preempts caller 52
+ rtems_task_delete: calling task 67
+ rtems_task_delete: suspended task 52
+ rtems_task_delete: blocked task 54
+ rtems_task_delete: ready task 54
+ rtems_task_suspend: calling task 23
+ rtems_task_suspend: returns to caller 12
+ rtems_task_resume: task readied -- returns to caller 13
+ rtems_task_resume: task readied -- preempts caller 22
+ rtems_task_set_priority: obtain current priority 8
+ rtems_task_set_priority: returns to caller 16
+ rtems_task_set_priority: preempts caller 34
+ rtems_task_mode: obtain current mode 4
+ rtems_task_mode: no reschedule 5
+ rtems_task_mode: reschedule -- returns to caller 12
+ rtems_task_mode: reschedule -- preempts caller 26
+ rtems_task_get_note 8
+ rtems_task_set_note 8
+ rtems_task_wake_after: yield -- returns to caller 4
+ rtems_task_wake_after: yields -- preempts caller 19
+ rtems_task_wake_when 36
+
+
+ Interrupt Manager
+
+ interrupt entry overhead: returns to nested interrupt 5
+ interrupt entry overhead: returns to interrupted task 9
+ interrupt entry overhead: returns to preempting task 7
+ interrupt exit overhead: returns to nested interrupt 1
+ interrupt exit overhead: returns to interrupted task 2
+ interrupt exit overhead: returns to preempting task 26
+
+
+ Clock Manager
+
+ rtems_clock_set 20
+ rtems_clock_get <1
+ rtems_clock_tick 8
+
+
+ Timer Manager
+
+ rtems_timer_create 8
+ rtems_timer_ident 104
+ rtems_timer_delete: inactive 12
+ rtems_timer_delete: active 13
+ rtems_timer_fire_after: inactive 17
+ rtems_timer_fire_after: active 18
+ rtems_timer_fire_when: inactive 23
+ rtems_timer_fire_when: active 23
+ rtems_timer_reset: inactive 16
+ rtems_timer_reset: active 17
+ rtems_timer_cancel: inactive 9
+ rtems_timer_cancel: active 10
+
+
+ Semaphore Manager
+
+ rtems_semaphore_create 22
+ rtems_semaphore_ident 119
+ rtems_semaphore_delete 24
+ rtems_semaphore_obtain: available 10
+ rtems_semaphore_obtain: not available -- NO_WAIT 10
+ rtems_semaphore_obtain: not available -- caller blocks 35
+ rtems_semaphore_release: no waiting tasks 11
+ rtems_semaphore_release: task readied -- returns to caller 17
+ rtems_semaphore_release: task readied -- preempts caller 27
+
+
+ Message Queue Manager
+
+ rtems_message_queue_create 85
+ rtems_message_queue_ident 103
+ rtems_message_queue_delete 32
+ rtems_message_queue_send: no waiting tasks 25
+ rtems_message_queue_send: task readied -- returns to caller 27
+ rtems_message_queue_send: task readied -- preempts caller 39
+ rtems_message_queue_urgent: no waiting tasks 26
+ rtems_message_queue_urgent: task readied -- returns to caller 28
+ rtems_message_queue_urgent: task readied -- preempts caller 39
+ rtems_message_queue_broadcast: no waiting tasks 13
+ rtems_message_queue_broadcast: task readied -- returns to caller 37
+ rtems_message_queue_broadcast: task readied -- preempts caller 45
+ rtems_message_queue_receive: available 21
+ rtems_message_queue_receive: not available -- NO_WAIT 11
+ rtems_message_queue_receive: not available -- caller blocks 37
+ rtems_message_queue_flush: no messages flushed 7
+ rtems_message_queue_flush: messages flushed 10
+
+
+ Event Manager
+
+ rtems_event_send: no task readied 7
+ rtems_event_send: task readied -- returns to caller 18
+ rtems_event_send: task readied -- preempts caller 29
+ rtems_event_receive: obtain current events <1
+ rtems_event_receive: available 10
+ rtems_event_receive: not available -- NO_WAIT 5
+ rtems_event_receive: not available -- caller blocks 28
+
+
+ Signal Manager
+
+ rtems_signal_catch 5
+ rtems_signal_send: returns to caller 15
+ rtems_signal_send: signal to self 24
+ exit ASR overhead: returns to calling task 20
+ exit ASR overhead: returns to preempting task 21
+
+
+ Partition Manager
+
+ rtems_partition_create 30
+ rtems_partition_ident 103
+ rtems_partition_delete 14
+ rtems_partition_get_buffer: available 14
+ rtems_partition_get_buffer: not available 9
+ rtems_partition_return_buffer 18
+
+
+ Region Manager
+
+ rtems_region_create 25
+ rtems_region_ident 105
+ rtems_region_delete 13
+ rtems_region_get_segment: available 13
+ rtems_region_get_segment: not available -- NO_WAIT 17
+ rtems_region_get_segment: not available -- caller blocks 49
+ rtems_region_return_segment: no waiting tasks 16
+ rtems_region_return_segment: task readied -- returns to caller 35
+ rtems_region_return_segment: task readied -- preempts caller 58
+
+
+ Dual-Ported Memory Manager
+
+ rtems_port_create 13
+ rtems_port_ident 103
+ rtems_port_delete 14
+ rtems_port_external_to_internal 5
+ rtems_port_internal_to_external 5
+
+
+ IO Manager
+
+ rtems_io_initialize <1
+ rtems_io_open <1
+ rtems_io_close <1
+ rtems_io_read <1
+ rtems_io_write <1
+ rtems_io_control <1
+
+
+ Rate Monotonic Manager
+
+ rtems_rate_monotonic_create 15
+ rtems_rate_monotonic_ident 103
+ rtems_rate_monotonic_cancel 16
+ rtems_rate_monotonic_delete: active 18
+ rtems_rate_monotonic_delete: inactive 20
+ rtems_rate_monotonic_period: initiate period -- returns to caller 23
+ rtems_rate_monotonic_period: conclude periods -- caller blocks 25
+ rtems_rate_monotonic_period: obtain status 13
+
+
+Network tests:
+ Network driver is not implemented.
+
+
+