# # $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 =============== clock.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).