source: rtems/c/src/lib/libbsp/m68k/mvme167/README @ 5d02459

4.104.114.84.95
Last change on this file since 5d02459 was 5d02459, checked in by Joel Sherrill <joel.sherrill@…>, on Feb 18, 1999 at 7:23:28 PM

MVME167 BSP submitted by Charles Gauthier <Charles.Gauthier@…>.

  • Property mode set to 100644
File size: 13.6 KB
Line 
1$Id$
2
3This is a README file for the MVME167 port of RTEMS 4.0.0.
4
5Please send any comments, improvements, or bug reports to:
6
7Charles-Antoine Gauthier
8Software Engineering Group
9Institute for Information Technology
10National Research Council of Canada
11Ottawa, ON, K1A 0R6
12Canada
13
14charles.gauthier@iit.nrc.ca
15 
16
17Disclaimer
18----------
19
20The National Research Council of Canada is distributing this RTEMS
21board support package for the Motorola MVME167 as free software; you
22can redistribute it and/or modify it under terms of the GNU General
23Public License as published by the Free Software Foundation; either
24version 2, or (at your option) any later version.  This software is
25distributed in the hope that it will be useful, but WITHOUT ANY
26WARRANTY; without even the implied warranty of MERCHANTABILITY or
27FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
28for more details. You should have received a copy of the GNU General
29Public License along with RTEMS; see file COPYING. If not, write to
30the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
31
32Under no circumstances will the National Research Council of Canada
33nor Her Majesty the Queen in right of Canada assume any liablility
34for the use this software, nor any responsibility for its quality or
35its support.
36
37
38Installation
39------------
40
41Nothing unique to the MVME167. It uses the standard build process for
42m68k targets. You will need to edit linkcmds to put in the start address
43of your board. We do TFTP transfers to our target. The mvme167.cfg file
44builds only the coff images, which we download to the target, skipping over
45the first 0xA8 bytes; Motorola S-records are not generated. Edit this file
46if you want S-records.
47
48
49Port Description
50----------------
51
52This BSP includes an termios-capable console driver that supports all
53four serial ports on the MVME167 model. The RTEMS console, /dev/console,
54corresponds to channel 1 in the CD2401. This corresponds to Serial Port
552/TTY01 on the MVME712M. Serial Port 1/Console is normally used by 167Bug;
56do not open /dev/tty00 if you are debugging using 167Bug.
57
58The console is initialized with whatever parameters are set up in termios
59before it calls the firtOpen driver callback, EXCEPT THAT HARDWARE HANDSHAKING
60IS TURNED OFF, i.e. CLOCAL is set in the struct termios c_cflag field. We use
613-wire cables for I/O, and find hardware handshaking a pain. If you enable
62hardware handshaking, you must drive CTS* low on the CD2401 for output to
63occur. If the port is in the DTE configuration, you must drive the RS-232 CTS
64line to space; if the port is in the DCE configuration, you must drive the
65RS-232 RTS line to space.
66
67Limited support is provided for polled terminal I/O. This is used when running
68the timing tests. Set the CD2401_POLLED_IO manifest constant to 1 in
69rtems/c/src/lib/libbsp/m68k/mvme167/console/console.c to enable polled I/O.
70In this case, I/O is done through 167Bug, usually to the Serial Port 1/Console
71port. Interrupt-driven and polled I/O cannot be mixed in the MVME167.
72
73The timer and clock drivers were patterned after the MVME162 and MVME152
74ports.
75
76At this time, we do not have an MPCI layer for the MVME167. We are planning
77to write one.
78
79The port does not have a network driver.
80
81This port supplies its own fatal_error_handler, which attempts to print some
82error message through 167Bug (on the Serial Port 1/Console on the MVME712M).
83
84
85Host System
86-----------
87
88The port was initially developed on an RS-6000 running AIX 4.2. The following
89tools were used:
90
91    - GNU gcc 2.8.1 configured for a powerpc-ibm-aix4.2.0.0 host and
92      m68k-rtems target;
93    - GNU binutils 2.9.1 configured for a powerpc-ibm-aix4.2.0.0 host and
94      m68k-rtems target;
95    - Cygnus newlib 1.8.0 with RTEMS 4.0.0 patches.
96
97
98Known Problems
99--------------
100
101The cdtest will not run with interrupt-driven I/O. The reason is that the
102constructors for the static objects are called at boot time when the
103interrupts are still disabled. The output buffer fills up, but never empties,
104and the application goes into an infinite loop waiting for buffer space. This
105should have been documented in the rtems/c/src/tests/PROBLEMS file. The moral
106of this story is: do not do I/O from the constructors or destructors of static
107objects.
108
109The cpuuse and malloctest tests do not work properly, either with polled I/O
110or interrupt-driven I/O. They are known not to work with interrupt-driven I/O,
111but should work with polled I/O?
112
113Output stops prematurely in the termios test when the console is operating in
114interrupt-driven mode because the serial port is re-initialized before all
115characters in the last raw output buffer are sent. Adding calls to tcdrain()
116in the test task helps, but it does not solve the problem. What happens is
117that the CD2401 raises a transmit interrupt when the last character in the
118DMA buffer is written into the transmit FIFO, not when the last character
119has been transmitted. When tcdrain() returns, there might be up to 16
120characters in the output FIFO. The call to tcsetattr() causes the serial port
121to re-initialize, at which point the output FIFO is cleared. We could not find
122a way to detect whether characters are still in the FIFO and to wait for them
123to be transmitted.
124
125The first raw buffer to be transmitted after the console is re-initialized
126with tcsetattr() is garbled. At this time, it does not seem worth while to
127track this problem down.
128
129In the rtmonuse test, an unimplemented floating point instruction exception
130is raised at the end of the test when CPU_usage_Dump() is called. The faulting
131instruction is FCMP.X FP0,FP2 in cvt().
132
133In the stackchk test, an access fault exception is raised after the stack is
134blown. This is one case were overwritting the first or last 16 bytes of the
135stack does cause problems (but hey, an exception occurred, which is better
136than propagating the error).
137
138When using interrupt-driven I/O, psx08 produces all the expected output, but
139it does not return control to 167Bug. Is this test supposed to work with
140interrupt-driven console I/O?
141
142
143What's new
144----------
145
146
147Thanks
148------
149
150- to On-Line Applications Research Corporation (OAR) for developing
151RTEMS and making it available on a Technology Transfer basis;
152
153- to FSF and Cygnus Support for great free software;
154
155
156Test Configuration
157------------------
158
159Board:                Motorola MVME167
160CPU:                  Motorola MC68040
161Clock Speed:          25 MHz
162RAM:                  4 MBytes of 32-bit DRAM with parity
163Cache Configuration:  Instruction cache on; data cache on, copyback mode.
164Times Reported in:    microseconds
165Timer Source:         VMEchip2 Tick Timer 1
166GCC Flags:            -m68040 -g -O4 -fomit-frame-pointer
167Console:              Operate in polled mode. Set CD2401_POLLED_IO to 1 in
168                      rtems/c/src/lib/libbsp/m68k/mvme167/console/console.c.     
169
170
171Test Results
172------------
173
174Single processor tests:  All tests passed, except the following ones:
175  sp19 and rtmonuse failed with an unimplemented floating point instruction
176  exception (FCMP.X FP0,FP2). We do not have a floating point emulation
177  library at this time.
178  cpuuse and malloctest did not work.
179  The stackchk test got an access fault exception before the RTEMS stack
180  checker had had a chance to detect the corrupted stack.
181                         
182Multi-processort tests:  not applicable -- No MPCI layer yet.
183
184Timing tests:
185
186        Context Switch
187
188    context switch: no floating point contexts 12
189    context switch: self 3
190    context switch: to another task 3
191    fp context switch: restore 1st FP task 14
192    fp context switch: save idle, restore initialized 5
193    fp context switch: save idle, restore idle 15
194    fp context switch: save initialized, restore initialized 5
195   
196   
197  Miscellaneous
198 
199    _ISR_Disable 1
200    _ISR_Flash 0
201    _ISR_Enable 0
202   
203    _Thread_Disable_dispatch 0
204    _Thread_Enable_dispatch 3
205    _Thread_Set_state 9
206    _Thread_Disptach (NO FP) 16
207    _Thread_Resume 6
208    _Thread_Unblock 4
209    _Thread_Ready 6
210    _Thread_Get 3
211    _Thread_Get: invalid id 0
212   
213    _Semaphore_Get 2
214
215
216        Task Manager
217
218    rtems_task_create 56
219    rtems_task_ident 106
220    rtems_task_start 21
221    rtems_task_restart: calling task 24
222    rtems_task_restart: suspended task -- returns to caller 27
223    rtems_task_restart: blocked task -- returns to caller 36
224    rtems_task_restart: ready task -- returns to caller 27
225    rtems_task_restart: suspended task -- preempts caller 40
226    rtems_task_restart: blocked task -- preempts caller 51
227    rtems_task_restart: ready task -- preempts caller 52
228    rtems_task_delete: calling task 67
229    rtems_task_delete: suspended task 52
230    rtems_task_delete: blocked task 54
231    rtems_task_delete: ready task 54
232    rtems_task_suspend: calling task 23
233    rtems_task_suspend: returns to caller 12
234    rtems_task_resume: task readied -- returns to caller 13
235    rtems_task_resume: task readied -- preempts caller 22
236    rtems_task_set_priority: obtain current priority 8
237    rtems_task_set_priority: returns to caller 16
238    rtems_task_set_priority: preempts caller 34
239    rtems_task_mode: obtain current mode 4
240    rtems_task_mode: no reschedule 5
241    rtems_task_mode: reschedule -- returns to caller 12
242    rtems_task_mode: reschedule -- preempts caller 26
243    rtems_task_get_note 8
244    rtems_task_set_note 8
245    rtems_task_wake_after: yield -- returns to caller 4
246    rtems_task_wake_after: yields -- preempts caller 19
247    rtems_task_wake_when 36
248
249
250        Interrupt Manager
251
252    interrupt entry overhead: returns to nested interrupt 5
253    interrupt entry overhead: returns to interrupted task 9
254    interrupt entry overhead: returns to preempting task 7
255    interrupt exit overhead: returns to nested interrupt 1
256    interrupt exit overhead: returns to interrupted task 2
257    interrupt exit overhead: returns to preempting task 26
258
259
260        Clock Manager
261
262    rtems_clock_set 20
263    rtems_clock_get <1
264    rtems_clock_tick 8
265
266
267        Timer Manager
268
269    rtems_timer_create 8
270        rtems_timer_ident 104
271    rtems_timer_delete: inactive 12
272    rtems_timer_delete: active 13
273    rtems_timer_fire_after: inactive 17
274    rtems_timer_fire_after: active 18
275    rtems_timer_fire_when: inactive 23
276    rtems_timer_fire_when: active 23
277    rtems_timer_reset: inactive 16
278    rtems_timer_reset: active 17
279    rtems_timer_cancel: inactive 9
280    rtems_timer_cancel: active 10
281
282
283        Semaphore Manager
284
285    rtems_semaphore_create 22
286    rtems_semaphore_ident 119
287    rtems_semaphore_delete 24
288    rtems_semaphore_obtain: available 10
289    rtems_semaphore_obtain: not available -- NO_WAIT 10
290    rtems_semaphore_obtain: not available -- caller blocks 35
291    rtems_semaphore_release: no waiting tasks 11
292    rtems_semaphore_release: task readied -- returns to caller 17
293    rtems_semaphore_release: task readied -- preempts caller 27
294
295
296        Message Queue Manager
297
298    rtems_message_queue_create 85
299    rtems_message_queue_ident 103
300    rtems_message_queue_delete 32
301    rtems_message_queue_send: no waiting tasks 25
302    rtems_message_queue_send: task readied -- returns to caller 27
303    rtems_message_queue_send: task readied -- preempts caller 39
304    rtems_message_queue_urgent: no waiting tasks 26
305    rtems_message_queue_urgent: task readied -- returns to caller 28
306    rtems_message_queue_urgent: task readied -- preempts caller 39
307    rtems_message_queue_broadcast: no waiting tasks 13
308    rtems_message_queue_broadcast: task readied -- returns to caller 37
309    rtems_message_queue_broadcast: task readied -- preempts caller 45
310    rtems_message_queue_receive: available 21
311    rtems_message_queue_receive: not available -- NO_WAIT 11
312    rtems_message_queue_receive: not available -- caller blocks 37
313    rtems_message_queue_flush: no messages flushed 7
314    rtems_message_queue_flush: messages flushed 10
315
316
317        Event Manager
318
319    rtems_event_send: no task readied 7
320    rtems_event_send: task readied -- returns to caller 18
321    rtems_event_send: task readied -- preempts caller 29
322    rtems_event_receive: obtain current events <1
323    rtems_event_receive: available 10
324    rtems_event_receive: not available -- NO_WAIT 5
325    rtems_event_receive: not available -- caller blocks 28
326
327
328        Signal Manager
329
330    rtems_signal_catch 5
331    rtems_signal_send: returns to caller 15
332    rtems_signal_send: signal to self 24
333    exit ASR overhead: returns to calling task 20
334    exit ASR overhead: returns to preempting task 21
335
336
337        Partition Manager
338
339    rtems_partition_create 30
340    rtems_partition_ident 103
341    rtems_partition_delete 14
342    rtems_partition_get_buffer: available 14
343    rtems_partition_get_buffer: not available 9
344    rtems_partition_return_buffer 18
345
346
347        Region Manager
348
349    rtems_region_create 25
350    rtems_region_ident 105
351    rtems_region_delete 13
352    rtems_region_get_segment: available 13
353    rtems_region_get_segment: not available -- NO_WAIT 17
354    rtems_region_get_segment: not available -- caller blocks 49
355    rtems_region_return_segment: no waiting tasks 16
356    rtems_region_return_segment: task readied -- returns to caller 35
357    rtems_region_return_segment: task readied -- preempts caller 58
358
359
360        Dual-Ported Memory Manager
361
362    rtems_port_create 13
363          rtems_port_ident 103
364    rtems_port_delete 14
365    rtems_port_external_to_internal 5
366    rtems_port_internal_to_external 5
367
368
369        IO Manager
370
371    rtems_io_initialize <1
372    rtems_io_open <1
373    rtems_io_close <1
374    rtems_io_read <1
375    rtems_io_write <1
376    rtems_io_control <1
377
378
379        Rate Monotonic Manager
380
381    rtems_rate_monotonic_create 15
382          rtems_rate_monotonic_ident 103
383    rtems_rate_monotonic_cancel 16
384    rtems_rate_monotonic_delete: active 18
385    rtems_rate_monotonic_delete: inactive 20
386    rtems_rate_monotonic_period: initiate period -- returns to caller 23
387    rtems_rate_monotonic_period: conclude periods -- caller blocks 25
388    rtems_rate_monotonic_period: obtain status 13
389
390
391Network tests:
392       Network driver is not implemented.
393
394
395
Note: See TracBrowser for help on using the repository browser.