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

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

Fixed top of file.

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