forked from Imagelibrary/rtems
Bob Wisdon <bobwis@ascweb.co.uk> and Chris Johns <ccj@acm.org> to resolve a random network lockup problem. ckinit.c: Occasional network lockups have been noted when the PIT has a higher interrupt request level than the CPM. The SCC1 bit in the CISR is set even though the SCC1 interrupt handler is not active. This blocks interrupts from SCC1 (and all other CPM sources) and locks up the system. It has not been determined whether the error is within the 68360 or in the RTEMS interrupt support assembler code. The solution, for now, is to set both PIT and CPM interrupt request levels to the same value (4). network.c: Set CPM transmitter buffer pointer (_tbptr) to beginning of frame before restarting transmitter. Don't retire transmitter buffer descriptors belonging to the restarted frame.
316 lines
10 KiB
Plaintext
316 lines
10 KiB
Plaintext
#
|
|
# $Id$
|
|
#
|
|
|
|
#
|
|
# This package requires a version of GCC that supports the `-mcpu32' option.
|
|
#
|
|
|
|
#
|
|
# Please send any comments, improvements, or bug reports to:
|
|
# W. Eric Norum
|
|
# Saskatchewan Accelerator Laboratory
|
|
# 107 North Road
|
|
# University of Saskatchewan
|
|
# Saskatoon, Saskatchewan, CANADA
|
|
# S7N 5C6
|
|
# eric@skatter.usask.ca
|
|
#
|
|
|
|
#
|
|
# This board support package works with several different versions of
|
|
# MC68360 systems. See the conditional-compile tests in startup/init68360.c
|
|
# for examples.
|
|
#
|
|
# Decisions made at compile time include:
|
|
# - If the CPU is a member of the 68040 family, the BSP is
|
|
# compiled for a generic 68040/68360 system as described
|
|
# in Chapter 9 of the MC68360 User's Manual. This version
|
|
# can be used with the Arnewsh SBC360 card.
|
|
# - If the preprocessor symbol M68360_ATLAS_HSB is defined,
|
|
# the BSP is compiled for an Atlas HSB card.
|
|
# - Otherwise, the BSP is compiled for a generic 68360 system
|
|
# as described in Chapter 9 of the MC68360 User's Manual. This
|
|
# version works with the Atlas ACE360 card.
|
|
#
|
|
# Decisions to be made a link-edit time are:
|
|
# - The size of the memory allocator heap. The default value is
|
|
# 64 kbytes. If the network package is used the heap
|
|
# should be at least 256 kbytes. If your network is large, or
|
|
# busy, the heap should be even larger.
|
|
# To choose a heap size of 256 kbytes,
|
|
# CFLAGS_LD += -Wl,--defsym -Wl,HeapSize=0x40000
|
|
|
|
BSP NAME: gen68360 or gen68360_040
|
|
BOARD: Generic 68360 as described in Motorola MC68360 User's Manual
|
|
BOARD: Atlas Computer Equipment Inc. High Speed Bridge (HSB)
|
|
BOARD: Atlas Computer Equipment Inc. Advanced Communication Engine (ACE)
|
|
BOARD: Arnewsh SBC360 68040/68360 card
|
|
BUS: none
|
|
CPU FAMILY: Motorola CPU32+, Motorola 68040
|
|
COPROCESSORS: none
|
|
MODE: not applicable
|
|
|
|
DEBUG MONITOR: none (Hardware provides BDM)
|
|
|
|
PERIPHERALS
|
|
===========
|
|
TIMERS: PIT, Watchdog, 4 general purpose, 16 RISC
|
|
RESOLUTION: one microsecond
|
|
SERIAL PORTS: 4 SCC, 2 SMC, 1 SPI
|
|
REAL-TIME CLOCK:
|
|
DMA: Each serial port, 2 general purpose
|
|
VIDEO: none
|
|
SCSI: none
|
|
NETWORKING: Ethernet on SCC1.
|
|
|
|
DRIVER INFORMATION
|
|
==================
|
|
CLOCK DRIVER: Programmable Interval Timer
|
|
IOSUPP DRIVER: Serial Management Controller 1
|
|
SHMSUPP: none
|
|
TIMER DRIVER: Timer 1
|
|
|
|
STDIO
|
|
=====
|
|
PORT: SMC1
|
|
ELECTRICAL: EIA-232 (if board supplies level shifter)
|
|
BAUD: 9600
|
|
BITS PER CHARACTER: 8
|
|
PARITY: None
|
|
STOP BITS: 1
|
|
|
|
NOTES
|
|
=====
|
|
|
|
Board description
|
|
-----------------
|
|
clock rate: 25 MHz
|
|
bus width: 8-bit PROM, 32-bit DRAM
|
|
ROM: To 1 MByte, 180 nsec (3 wait states), chip select 0
|
|
RAM: 4 or 16 MBytes of 60 nsec parity DRAM (1Mx36) to RAS1*/CAS1*
|
|
|
|
Host System
|
|
-----------
|
|
OPENSTEP 4.2 (Intel and Motorola), Solaris 2.5, Linux 2.0.29
|
|
|
|
Verification (Standalone 68360)
|
|
-------------------------------
|
|
Single processor tests: Passed
|
|
Multi-processort tests: not applicable
|
|
Timing tests:
|
|
Context Switch
|
|
|
|
context switch: self 10
|
|
context switch: to another task 11
|
|
context switch: no floating point contexts 38
|
|
fp context switch: restore 1st FP task 39
|
|
fp context switch: save initialized, restore initialized 14
|
|
fp context switch: save idle, restore initialized 15
|
|
fp context switch: save idle, restore idle 41
|
|
|
|
Task Manager
|
|
|
|
rtems_task_create 202
|
|
rtems_task_ident 390
|
|
rtems_task_start 71
|
|
rtems_task_restart: calling task 99
|
|
rtems_task_restart: suspended task -- returns to caller 86
|
|
rtems_task_restart: blocked task -- returns to caller 116
|
|
rtems_task_restart: ready task -- returns to caller 88
|
|
rtems_task_restart: suspended task -- preempts caller 132
|
|
rtems_task_restart: blocked task -- preempts caller 153
|
|
rtems_task_restart: ready task -- preempts caller 149
|
|
rtems_task_delete: calling task 236
|
|
rtems_task_delete: suspended task 191
|
|
rtems_task_delete: blocked task 195
|
|
rtems_task_delete: ready task 198
|
|
rtems_task_suspend: calling task 78
|
|
rtems_task_suspend: returns to caller 36
|
|
rtems_task_resume: task readied -- returns to caller 39
|
|
rtems_task_resume: task readied -- preempts caller 67
|
|
rtems_task_set_priority: obtain current priority 26
|
|
rtems_task_set_priority: returns to caller 59
|
|
rtems_task_set_priority: preempts caller 110
|
|
rtems_task_mode: obtain current mode 13
|
|
rtems_task_mode: no reschedule 15
|
|
rtems_task_mode: reschedule -- returns to caller 20
|
|
rtems_task_mode: reschedule -- preempts caller 67
|
|
rtems_task_get_note 28
|
|
rtems_task_set_note 27
|
|
rtems_task_wake_after: yield -- returns to caller 16
|
|
rtems_task_wake_after: yields -- preempts caller 65
|
|
rtems_task_wake_when 116
|
|
|
|
Interrupt Manager
|
|
|
|
interrupt entry overhead: returns to nested interrupt 10
|
|
interrupt entry overhead: returns to interrupted task 10
|
|
interrupt entry overhead: returns to preempting task 10
|
|
interrupt exit overhead: returns to nested interrupt 8
|
|
interrupt exit overhead: returns to interrupted task 10
|
|
interrupt exit overhead: returns to preempting task 59
|
|
|
|
Clock Manager
|
|
|
|
rtems_clock_set 73
|
|
rtems_clock_get 1
|
|
rtems_clock_tick 16
|
|
|
|
Timer Manager
|
|
|
|
rtems_timer_create 31
|
|
rtems_timer_ident 380
|
|
rtems_timer_delete: inactive 43
|
|
rtems_timer_delete: active 46
|
|
rtems_timer_fire_after: inactive 53
|
|
rtems_timer_fire_after: active 56
|
|
rtems_timer_fire_when: inactive 72
|
|
rtems_timer_fire_when: active 72
|
|
rtems_timer_reset: inactive 47
|
|
rtems_timer_reset: active 51
|
|
rtems_timer_cancel: inactive 25
|
|
rtems_timer_cancel: active 28
|
|
|
|
Semaphore Manager
|
|
|
|
rtems_semaphore_create 59
|
|
rtems_semaphore_ident 438
|
|
rtems_semaphore_delete 57
|
|
rtems_semaphore_obtain: available 31
|
|
rtems_semaphore_obtain: not available -- NO_WAIT 31
|
|
rtems_semaphore_obtain: not available -- caller blocks 108
|
|
rtems_semaphore_release: no waiting tasks 40
|
|
rtems_semaphore_release: task readied -- returns to caller 56
|
|
rtems_semaphore_release: task readied -- preempts caller 83
|
|
|
|
Message Queue Manager
|
|
|
|
rtems_message_queue_create 241
|
|
rtems_message_queue_ident 379
|
|
rtems_message_queue_delete 75
|
|
rtems_message_queue_send: no waiting tasks 72
|
|
rtems_message_queue_send: task readied -- returns to caller 72
|
|
rtems_message_queue_send: task readied -- preempts caller 99
|
|
rtems_message_queue_urgent: no waiting tasks 72
|
|
rtems_message_queue_urgent: task readied -- returns to caller 72
|
|
rtems_message_queue_urgent: task readied -- preempts caller 99
|
|
rtems_message_queue_broadcast: no waiting tasks 43
|
|
rtems_message_queue_broadcast: task readied -- returns to caller 82
|
|
rtems_message_queue_broadcast: task readied -- preempts caller 109
|
|
rtems_message_queue_receive: available 52
|
|
rtems_message_queue_receive: not available -- NO_WAIT 34
|
|
rtems_message_queue_receive: not available -- caller blocks 111
|
|
rtems_message_queue_flush: no messages flushed 25
|
|
rtems_message_queue_flush: messages flushed 34
|
|
|
|
Event Manager
|
|
|
|
rtems_event_send: no task readied 22
|
|
rtems_event_send: task readied -- returns to caller 50
|
|
rtems_event_send: task readied -- preempts caller 80
|
|
rtems_event_receive: obtain current events -1
|
|
rtems_event_receive: available 26
|
|
rtems_event_receive: not available -- NO_WAIT 22
|
|
rtems_event_receive: not available -- caller blocks 89
|
|
|
|
Signal Manager
|
|
|
|
rtems_signal_catch 16
|
|
rtems_signal_send: returns to caller 32
|
|
rtems_signal_send: signal to self 51
|
|
exit ASR overhead: returns to calling task 42
|
|
exit ASR overhead: returns to preempting task 58
|
|
|
|
Partition Manager
|
|
|
|
rtems_partition_create 74
|
|
rtems_partition_ident 379
|
|
rtems_partition_delete 40
|
|
rtems_partition_get_buffer: available 29
|
|
rtems_partition_get_buffer: not available 27
|
|
rtems_partition_return_buffer 34
|
|
|
|
Region Manager
|
|
|
|
rtems_region_create 63
|
|
rtems_region_ident 388
|
|
rtems_region_delete 40
|
|
rtems_region_get_segment: available 43
|
|
rtems_region_get_segment: not available -- NO_WAIT 40
|
|
rtems_region_get_segment: not available -- caller blocks 120
|
|
rtems_region_return_segment: no waiting tasks 48
|
|
rtems_region_return_segment: task readied -- returns to caller 98
|
|
rtems_region_return_segment: task readied -- preempts caller 125
|
|
|
|
Dual-Ported Memory Manager
|
|
|
|
rtems_port_create 38
|
|
rtems_port_ident 380
|
|
rtems_port_delete 40
|
|
rtems_port_internal_to_external 22
|
|
rtems_port_external_to_internal 22
|
|
|
|
IO Manager
|
|
|
|
rtems_io_initialize 4
|
|
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 36
|
|
rtems_rate_monotonic_ident 380
|
|
rtems_rate_monotonic_cancel 34
|
|
rtems_rate_monotonic_delete: active 51
|
|
rtems_rate_monotonic_delete: inactive 47
|
|
rtems_rate_monotonic_period: obtain status 27
|
|
rtems_rate_monotonic_period: initiate period -- returns to caller 50
|
|
rtems_rate_monotonic_period: conclude periods -- caller blocks 72
|
|
|
|
Network tests:
|
|
TCP throughput (as measured by ttcp):
|
|
Receive: 1081 kbytes/sec
|
|
Transmit: 953 kbytes/sec
|
|
|
|
Porting
|
|
-------
|
|
This board support package is written for a 68360 system similar to that
|
|
described in chapter 9 of the Motorola MC68360 Quad Integrated Communication
|
|
Processor Users' Manual. The salient features of this hardware are:
|
|
|
|
25 MHz external clock
|
|
DRAM address multiplexing provided by 68360
|
|
8-bit 180nsec PROM to CS0*
|
|
4 MBytes of 60 nsec parity DRAM (1Mx36) to RAS1*/CAS1*
|
|
Console serial port on SMC1
|
|
Ethernet interface on SCC1
|
|
|
|
The board support package has been tested with:
|
|
A home-built 68360 board
|
|
An ACE360A and an HSB board produced by:
|
|
Atlas Computer Equipment
|
|
703 Colina Lane
|
|
Santa Barbara, CA 93103
|
|
A 68040/68360 board (SBC360) produced by:
|
|
Arnewsh Inc.
|
|
P.O. Box 270352
|
|
Fort Collins, CO 80527-0352
|
|
|
|
Interrupt Notes
|
|
===============
|
|
ckinit.c:
|
|
Occasional network lockups have been noted when the PIT has a higher
|
|
interrupt request level than the CPM. The SCC1 bit in the CISR is set
|
|
even though the SCC1 interrupt handler is not active. This blocks
|
|
interrupts from SCC1 (and all other CPM sources) and locks up the
|
|
system. It has not been determined whether the error is within the
|
|
68360 or in the RTEMS interrupt support assembler code. The solution,
|
|
for now, is to set both PIT and CPM interrupt request levels to the same
|
|
value (4).
|
|
|
|
|