summaryrefslogtreecommitdiffstats
path: root/bsps/m68k/mcf5329
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2018-04-25 15:06:08 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2018-04-26 07:17:57 +0200
commiteb36d1198cdf9dc1e2f776ef6e1e38755f6d13c5 (patch)
tree14177ad7a58c06a3c537d1e55dae7bc369a1a4b9 /bsps/m68k/mcf5329
parentbsps: Remove unmaintained times files (diff)
downloadrtems-eb36d1198cdf9dc1e2f776ef6e1e38755f6d13c5.tar.bz2
bsps: Move documentation, etc. files to bsps
This patch is a part of the BSP source reorganization. Update #3285.
Diffstat (limited to 'bsps/m68k/mcf5329')
-rw-r--r--bsps/m68k/mcf5329/README342
-rw-r--r--bsps/m68k/mcf5329/gdb-init104
2 files changed, 446 insertions, 0 deletions
diff --git a/bsps/m68k/mcf5329/README b/bsps/m68k/mcf5329/README
new file mode 100644
index 0000000000..5b4a942af8
--- /dev/null
+++ b/bsps/m68k/mcf5329/README
@@ -0,0 +1,342 @@
+Description: Motorola MCF5329EVB Zoom + (LogicPD)
+============
+CPU: MCF5329, 240MHz
+CORESRAM: 32K
+FLASH: 2M
+DRAM: 32M
+
+This is a Motorola Zoom evaluation board that uses the MCF5329 Coldfire CPU on
+a logicPD card. This board is running at 240MHz with DRAM clocking at 80MHz.
+
+The bsp is configured for the MT46V16M16TG-75:F DRAM.
+
+NOTES:
+======
+
+This BSP is based heavily off the 5235 BSP.
+
+TODO:
+======
+
+Add other drivers for can, i2c, lcd (fb), qspi etc.
+
+============================================================================
+
+ Interrupt map
+
++-----+
+| |
++-----+
+|LEVEL|
++-----+
+| 7 |
++-----+
+| 6 |
++-----+
+| 5 |
++-----+
+| 4 | FEC RX, FEC TX, PIT
++-----+
+| 3 | UART 0, UART 1, UART 2
++-----+
+| 2 |
++-----+
+| 1 |
++-----+
+
+============================================================================
+ Timings
+
+*** TIME TEST 1 ***
+rtems_semaphore_create 11
+rtems_semaphore_delete 9
+rtems_semaphore_obtain: available 0
+rtems_semaphore_obtain: not available -- NO_WAIT 0
+rtems_semaphore_release: no waiting tasks 2
+*** END OF TEST 1 ***
+
+*** TIME TEST 2 ***
+rtems_semaphore_obtain: not available -- caller blocks 14
+*** END OF TEST 2 ***
+
+*** TIME TEST 3 ***
+rtems_semaphore_release: task readied -- preempts caller 11
+*** END OF TEST 3 ***
+
+*** TIME TEST 4 ***
+rtems_task_restart: blocked task -- preempts caller 24
+rtems_task_restart: ready task -- preempts caller 15
+rtems_semaphore_release: task readied -- returns to caller 3
+rtems_task_create 40
+rtems_task_start 7
+rtems_task_restart: suspended task -- returns to caller 8
+rtems_task_delete: suspended task 18
+rtems_task_restart: ready task -- returns to caller 9
+rtems_task_restart: blocked task -- returns to caller 10
+rtems_task_delete: blocked task 19
+*** END OF TEST 4 ***
+
+*** TIME TEST 5 ***
+rtems_task_suspend: calling task 11
+rtems_task_resume: task readied -- preempts caller 9
+*** END OF TEST 5 ***
+
+*** TIME TEST 6 ***
+rtems_task_restart: calling task 4
+rtems_task_suspend: returns to caller 2
+rtems_task_resume: task readied -- returns to caller 2
+rtems_task_delete: ready task 19
+*** END OF TEST 6 ***
+
+*** TIME TEST 7 ***
+rtems_task_restart: suspended task -- preempts caller 15
+*** END OF TEST 7 ***
+
+*** TIME TEST 9 ***
+rtems_message_queue_create 45
+rtems_message_queue_send: no waiting tasks 2
+rtems_message_queue_urgent: no waiting tasks 2
+rtems_message_queue_receive: available 3
+rtems_message_queue_flush: no messages flushed 1
+rtems_message_queue_flush: messages flushed 1
+rtems_message_queue_delete 12
+*** END OF TEST 9 ***
+
+*** TIME TEST 10 ***
+rtems_message_queue_receive: not available -- NO_WAIT 1
+rtems_message_queue_receive: not available -- caller blocks 14
+*** END OF TEST 10 ***
+
+*** TIME TEST 11 ***
+rtems_message_queue_send: task readied -- preempts caller 13
+*** END OF TEST 11 ***
+
+*** TIME TEST 12 ***
+rtems_message_queue_send: task readied -- returns to caller 5
+*** END OF TEST 12 ***
+
+*** TIME TEST 13 ***
+rtems_message_queue_urgent: task readied -- preempts caller 13
+*** END OF TEST 13 ***
+
+*** TIME TEST 14 ***
+rtems_message_queue_urgent: task readied -- returns to caller 5
+*** END OF TEST 14 ***
+
+*** TIME TEST 15 ***
+rtems_event_receive: obtain current events 0
+rtems_event_receive: not available -- NO_WAIT 1
+rtems_event_receive: not available -- caller blocks 12
+rtems_event_send: no task readied 1
+rtems_event_receive: available 3
+rtems_event_send: task readied -- returns to caller 4
+*** END OF TEST 15 ***
+
+*** TIME TEST 16 ***
+rtems_event_send: task readied -- preempts caller 13
+*** END OF TEST 16 ***
+
+*** TIME TEST 17 ***
+rtems_task_set_priority: preempts caller 13
+*** END OF TEST 17 ***
+
+*** TIME TEST 18 ***
+rtems_task_delete: calling task 30
+*** END OF TEST 18 ***
+
+*** TIME TEST 19 ***
+rtems_signal_catch 2
+rtems_signal_send: returns to caller 5
+rtems_signal_send: signal to self 11
+exit ASR overhead: returns to calling task 6
+exit ASR overhead: returns to preempting task 11
+*** END OF TEST 19 ***
+
+*** TIME TEST 20 ***
+rtems_partition_create 15
+rtems_region_create 20
+rtems_partition_get_buffer: available 4
+rtems_partition_get_buffer: not available 1
+rtems_partition_return_buffer 4
+rtems_partition_delete 6
+rtems_region_get_segment: available 6
+rtems_region_get_segment: not available -- NO_WAIT 5
+rtems_region_return_segment: no waiting tasks 5
+rtems_region_get_segment: not available -- caller blocks 29
+rtems_region_return_segment: task readied -- preempts caller 29
+rtems_region_return_segment: task readied -- returns to caller 11
+rtems_region_delete 6
+rtems_io_initialize 0
+rtems_io_open 0
+rtems_io_close 0
+rtems_io_read 0
+rtems_io_write 0
+rtems_io_control 0
+*** END OF TEST 20 ***
+
+*** TIME TEST 21 ***
+rtems_task_ident 4
+rtems_message_queue_ident 3
+rtems_semaphore_ident 4
+rtems_partition_ident 3
+rtems_region_ident 3
+rtems_port_ident 3
+rtems_timer_ident 3
+rtems_rate_monotonic_ident 3
+*** END OF TEST 21 ***
+
+*** TIME TEST 22 ***
+rtems_message_queue_broadcast: task readied -- returns to caller 16
+rtems_message_queue_broadcast: no waiting tasks 2
+rtems_message_queue_broadcast: task readied -- preempts caller 12
+*** END OF TEST 22 ***
+
+*** TIME TEST 23 ***
+rtems_timer_create 2
+rtems_timer_fire_after: inactive 2
+rtems_timer_fire_after: active 1
+rtems_timer_cancel: active 1
+rtems_timer_cancel: inactive 1
+rtems_timer_reset: inactive 2
+rtems_timer_reset: active 2
+rtems_timer_fire_when: inactive 2
+rtems_timer_fire_when: active 2
+rtems_timer_delete: active 2
+rtems_timer_delete: inactive 2
+rtems_task_wake_when 13
+*** END OF TEST 23 ***
+
+*** TIME TEST 24 ***
+rtems_task_wake_after: yield -- returns to caller 0
+rtems_task_wake_after: yields -- preempts caller 9
+*** END OF TEST 24 ***
+
+*** TIME TEST 25 ***
+rtems_clock_tick 10
+*** END OF TEST 25 ***
+
+*** TIME TEST 26 ***
+_ISR_Disable 1
+_ISR_Flash 0
+_ISR_Enable 0
+_Thread_Disable_dispatch 0
+_Thread_Enable_dispatch 1
+_Thread_Set_state 4
+_Thread_Disptach (NO FP) 11
+context switch: no floating point contexts 5
+context switch: self 0
+context switch: to another task 1
+fp context switch: restore 1st FP task 5
+fp context switch: save idle, restore initialized 1
+fp context switch: save idle, restore idle 6
+fp context switch: save initialized, restore initialized 1
+_Thread_Resume 5
+_Thread_Unblock 3
+_Thread_Ready 2
+_Thread_Get 0
+_Semaphore_Get 0
+_Thread_Get: invalid id 0
+*** END OF TEST 26 ***
+
+*** TIME TEST 27 ***
+interrupt entry overhead: returns to interrupted task 1
+interrupt exit overhead: returns to interrupted task 1
+interrupt entry overhead: returns to nested interrupt 0
+interrupt exit overhead: returns to nested interrupt 0
+interrupt entry overhead: returns to preempting task 1
+interrupt exit overhead: returns to preempting task 9
+*** END OF TEST 27 ***
+
+*** TIME TEST 28 ***
+rtems_port_create 5
+rtems_port_external_to_internal 1
+rtems_port_internal_to_external 1
+rtems_port_delete 4
+*** END OF TEST 28 ***
+
+*** TIME TEST 29 ***
+rtems_rate_monotonic_create 8
+rtems_rate_monotonic_period: initiate period -- returns to caller 14
+rtems_rate_monotonic_period: obtain status 3
+rtems_rate_monotonic_cancel 6
+rtems_rate_monotonic_delete: inactive 7
+rtems_rate_monotonic_delete: active 3
+rtems_rate_monotonic_period: conclude periods -- caller blocks 15
+*** END OF TEST 29 ***
+
+
+*** TIME TEST OVERHEAD ***
+rtems_shutdown_executive 0
+rtems_task_create 0
+rtems_task_ident 0
+rtems_task_start 0
+rtems_task_restart 0
+rtems_task_delete 0
+rtems_task_suspend 0
+rtems_task_resume 0
+rtems_task_set_priority 0
+rtems_task_mode 0
+rtems_task_wake_when 0
+rtems_task_wake_after 0
+rtems_interrupt_catch 0
+rtems_clock_get 0
+rtems_clock_set 0
+rtems_clock_tick 0
+<pause>
+rtems_timer_create 0
+rtems_timer_delete 0
+rtems_timer_ident 0
+rtems_timer_fire_after 0
+rtems_timer_fire_when 0
+rtems_timer_reset 0
+rtems_timer_cancel 0
+rtems_semaphore_create 0
+rtems_semaphore_delete 0
+rtems_semaphore_ident 0
+rtems_semaphore_obtain 0
+rtems_semaphore_release 0
+rtems_message_queue_create 0
+rtems_message_queue_ident 0
+rtems_message_queue_delete 0
+rtems_message_queue_send 0
+rtems_message_queue_urgent 0
+rtems_message_queue_broadcast 0
+rtems_message_queue_receive 0
+rtems_message_queue_flush 0
+<pause>
+rtems_event_send 0
+rtems_event_receive 0
+rtems_signal_catch 0
+rtems_signal_send 0
+rtems_partition_create 0
+rtems_partition_ident 0
+rtems_partition_delete 0
+rtems_partition_get_buffer 0
+rtems_partition_return_buffer 0
+rtems_region_create 0
+rtems_region_ident 0
+rtems_region_delete 0
+rtems_region_get_segment 0
+rtems_region_return_segment 0
+rtems_port_create 0
+rtems_port_ident 0
+rtems_port_delete 0
+rtems_port_external_to_internal 0
+rtems_port_internal_to_external 0
+<pause>
+rtems_io_initialize 0
+rtems_io_open 0
+rtems_io_close 0
+rtems_io_read 0
+rtems_io_write 0
+rtems_io_control 0
+rtems_fatal_error_occurred 0
+rtems_rate_monotonic_create 0
+rtems_rate_monotonic_ident 0
+rtems_rate_monotonic_delete 0
+rtems_rate_monotonic_cancel 0
+rtems_rate_monotonic_period 0
+rtems_multiprocessing_announce 0
+*** END OF TIME OVERHEAD ***
+
+
diff --git a/bsps/m68k/mcf5329/gdb-init b/bsps/m68k/mcf5329/gdb-init
new file mode 100644
index 0000000000..fbcf796ce1
--- /dev/null
+++ b/bsps/m68k/mcf5329/gdb-init
@@ -0,0 +1,104 @@
+#target remote | m68k-bdm-gdbserver pipe /dev/bdmcf0 -v -d
+target remote | m68k-bdm-gdbserver pipe /dev/bdmcf0
+
+#monitor set remote-debug 1
+#monitor set debug 1
+monitor bdm-reset
+
+#
+# Show the exception stack frame.
+#
+define show-exception-sframe
+ set $frsr = *(unsigned short *)((unsigned long)$sp + 2)
+ set $frpc = *(unsigned long *)((unsigned long)$sp + 4)
+ set $frfvo = *(unsigned short *)((unsigned long)$sp + 0)
+ set $frcode = $frfvo >> 12
+ set $frvect = ($frfvo & 0xFFF) >> 2
+ set $frstatus = ((($frfvo >> 10) & 3) << 2) | ($frfvo & 3)
+ printf "EXCEPTION -- SR:0x%X PC:0x%X FRAME:0x%x VECTOR:%d STATUS:%d\n", $frsr, $frpc, $frcode, $frvect, $frstatus
+ if $frstatus == 4
+ printf " Fault Type: Error on instruction fetch"
+ end
+ if $frstatus == 8
+ printf " Fault Type: Error on operand write"
+ end
+ if $frstatus == 12
+ printf " Fault Type: Error on operand read"
+ end
+ if $frstatus == 9
+ printf " Fault Type: Attempted write to write-protected space"
+ end
+end
+
+# I have to do this as there seems to be a problem with me setting up the
+# chip selects. As far as I can tell, gdb is probing whats at the program
+# counter. It issues a 2 byte read (smallest instruction) followed by a
+# 4 byte read (depending on the result of the 2 byte read). gdb issues these
+# reads after each and every write that the .gdbinit script issues. This means
+# that as I'm initializing the chip selects the gdb reads can happen in an
+# invalid memory address and this causes a target bus error. For now I'm just
+# setting pc to 0, which seems to stop gdb from probing around to read
+# assembler. This lets me setup chip selects without error.
+
+set $pc = 0x00000000
+
+# Turn on RAMBAR1 at address 80000000
+monitor bdm-ctl-set 0x0C05 0x80000221
+
+# Set VBR to the beginning of what will be SDRAM
+# VBR is an absolute CPU register
+monitor bdm-ctl-set 0x0801 0x40000000
+
+# Disable watchdog timer
+set *((short*) 0xFC098000) = 0x0000
+
+#Init CS0
+set *((long*) 0xFC008000) = 0x00000000
+set *((long*) 0xFC008008) = 0x00001FA0
+set *((long*) 0xFC008004) = 0x001F0001
+
+# SDRAM Initialization
+
+monitor delay-ms 100
+
+# SDCS0
+set *((long*) 0xFC0B8110) = 0x40000018
+# SDCFG1
+set *((long*) 0xFC0B8008) = 0x53722730
+# SDCFG2
+set *((long*) 0xFC0B800C) = 0x56670000
+
+# Issue PALL
+# SDCR
+set *((long*) 0xFC0B8004) = 0xE1092002
+
+# Issue LEMR
+# SDMR
+set *((long*) 0xFC0B8000) = 0x40010000
+
+# Write mode register
+# SDMR
+set *((long*) 0xFC0B8000) = 0x058D0000
+
+# Wait a bit
+monitor delay-ms 600
+
+# Issue PALL
+# SDCR
+set *((long*) 0xFC0B8004) = 0xE1092002
+
+# Perform two refresh cycles
+# SDCR
+set *((long*) 0xFC0B8004) = 0xE1092004
+# SDCR
+set *((long*) 0xFC0B8004) = 0xE1092004
+
+# SDMR
+set *((long*) 0xFC0B8000) = 0x018D0000
+# SDCR
+set *((long*) 0xFC0B8004) = 0x71092C00
+
+# Wait a bit
+monitor delay-ms 100
+
+load