summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/lm32/milkymist
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2011-08-01 13:48:40 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2011-08-01 13:48:40 +0000
commitdce1032b6cdc2cd3c4e6b0ca3695aca6558c56c3 (patch)
treee485d78b238db7255395470e037305af8b8a642c /c/src/lib/libbsp/lm32/milkymist
parent2011-08-01 Jennifer Averett <Jennifer.Averett@OARcorp.com> (diff)
downloadrtems-dce1032b6cdc2cd3c4e6b0ca3695aca6558c56c3.tar.bz2
2011-08-01 Sebastien Bourdeauducq <sebastien.bourdeauducq@gmail.com>
PR 1869/bsps * startup/bspclean.c: New file. * include/tm27.h: Removed. * ChangeLog, Makefile.am, README, preinstall.am, include/bsp.h, include/system_conf.h, make/custom/milkymist.cfg, startup/linkcmds: Complete BSP for Milkymist One supporting Milkymist SOC 1.0.x. Includes new or updated drivers for: - Multi-standard video input (PAL/SECAM/NTSC) - Two DMX512 (RS485) ports - MIDI IN and MIDI OUT ports - VGA output - AC'97 audio - NOR flash - 10/100 Ethernet - Memory card (experimental and incomplete) - USB host connectors (input devices only) - RC5 infrared receiver - RS232 debug port
Diffstat (limited to 'c/src/lib/libbsp/lm32/milkymist')
-rw-r--r--c/src/lib/libbsp/lm32/milkymist/ChangeLog23
-rw-r--r--c/src/lib/libbsp/lm32/milkymist/Makefile.am87
-rw-r--r--c/src/lib/libbsp/lm32/milkymist/README29
-rw-r--r--c/src/lib/libbsp/lm32/milkymist/include/bsp.h34
-rw-r--r--c/src/lib/libbsp/lm32/milkymist/include/system_conf.h308
-rw-r--r--c/src/lib/libbsp/lm32/milkymist/include/tm27.h32
-rw-r--r--c/src/lib/libbsp/lm32/milkymist/make/custom/milkymist.cfg1
-rw-r--r--c/src/lib/libbsp/lm32/milkymist/preinstall.am70
-rw-r--r--c/src/lib/libbsp/lm32/milkymist/startup/bspclean.c56
-rw-r--r--c/src/lib/libbsp/lm32/milkymist/startup/linkcmds6
10 files changed, 514 insertions, 132 deletions
diff --git a/c/src/lib/libbsp/lm32/milkymist/ChangeLog b/c/src/lib/libbsp/lm32/milkymist/ChangeLog
index d4008aa6cb..eb7582ed24 100644
--- a/c/src/lib/libbsp/lm32/milkymist/ChangeLog
+++ b/c/src/lib/libbsp/lm32/milkymist/ChangeLog
@@ -1,3 +1,24 @@
+2011-08-01 Sebastien Bourdeauducq <sebastien.bourdeauducq@gmail.com>
+
+ PR 1869/bsps
+ * startup/bspclean.c: New file.
+ * include/tm27.h: Removed.
+ * ChangeLog, Makefile.am, README, preinstall.am, include/bsp.h,
+ include/system_conf.h, make/custom/milkymist.cfg, startup/linkcmds:
+ Complete BSP for Milkymist One supporting Milkymist SOC 1.0.x.
+ Includes new or updated drivers for:
+ - Multi-standard video input (PAL/SECAM/NTSC)
+ - Two DMX512 (RS485) ports
+ - MIDI IN and MIDI OUT ports
+ - VGA output
+ - AC'97 audio
+ - NOR flash
+ - 10/100 Ethernet
+ - Memory card (experimental and incomplete)
+ - USB host connectors (input devices only)
+ - RC5 infrared receiver
+ - RS232 debug port
+
2011-02-02 Ralf Corsépius <ralf.corsepius@rtems.org>
* configure.ac: Require autoconf-2.68, automake-1.11.1.
@@ -13,5 +34,3 @@
preinstall.am, Documentation/uart.txt, include/.cvsignore,
include/bsp.h, include/system_conf.h, include/tm27.h,
make/custom/milkymist.cfg, startup/linkcmds: New files.
-
-08 / 12 / 2010 : <Yann Sionneau> Added Milkymist BSP
diff --git a/c/src/lib/libbsp/lm32/milkymist/Makefile.am b/c/src/lib/libbsp/lm32/milkymist/Makefile.am
index 0e09d57949..5d4d5580c3 100644
--- a/c/src/lib/libbsp/lm32/milkymist/Makefile.am
+++ b/c/src/lib/libbsp/lm32/milkymist/Makefile.am
@@ -10,8 +10,25 @@ include_bspdir = $(includedir)/bsp
dist_project_lib_DATA = bsp_specs
-include_HEADERS = include/bsp.h
-include_HEADERS += include/tm27.h
+include_HEADERS = include/bsp.h
+include_HEADERS += ../../shared/include/coverhd.h
+include_HEADERS += ../../shared/include/tm27.h
+
+include_bsp_HEADERS = ../../lm32/shared/include/irq.h
+include_bsp_HEADERS += ../../shared/include/irq-generic.h
+include_bsp_HEADERS += ../../lm32/shared/milkymist_gpio/milkymist_gpio.h
+include_bsp_HEADERS += ../../lm32/shared/milkymist_buttons/milkymist_buttons.h
+include_bsp_HEADERS += ../../lm32/shared/milkymist_ac97/milkymist_ac97.h
+include_bsp_HEADERS += ../../lm32/shared/milkymist_usbinput/milkymist_usbinput.h
+include_bsp_HEADERS += ../../lm32/shared/milkymist_pfpu/milkymist_pfpu.h
+include_bsp_HEADERS += ../../lm32/shared/milkymist_tmu/milkymist_tmu.h
+include_bsp_HEADERS += ../../lm32/shared/milkymist_memcard/milkymist_memcard.h
+include_bsp_HEADERS += ../../lm32/shared/milkymist_flash/milkymist_flash.h
+include_bsp_HEADERS += ../../lm32/shared/milkymist_dmx/milkymist_dmx.h
+include_bsp_HEADERS += ../../lm32/shared/milkymist_midi/milkymist_midi.h
+include_bsp_HEADERS += ../../lm32/shared/milkymist_ir/milkymist_ir.h
+include_bsp_HEADERS += ../../lm32/shared/milkymist_video/milkymist_video.h
+include_bsp_HEADERS += ../../lm32/shared/milkymist_versions/milkymist_versions.h
nodist_include_HEADERS = include/bspopts.h
nodist_include_bsp_HEADERS = ../../shared/include/bootcard.h
@@ -19,7 +36,6 @@ DISTCLEANFILES = include/bspopts.h
noinst_PROGRAMS =
-include_HEADERS += ../../shared/include/coverhd.h
include_HEADERS += include/system_conf.h
noinst_LIBRARIES = libbspstart.a
@@ -33,33 +49,74 @@ libbsp_a_SOURCES =
libbsp_a_LIBADD =
# startup
-libbsp_a_SOURCES += ../../shared/bspclean.c ../../shared/bsplibc.c \
- ../../shared/bsppost.c ../shared/startup/bspstart.c \
- ../../shared/bspreset.c ../../shared/bsppretaskinghook.c \
- ../../shared/bspgetworkarea.c ../../shared/bootcard.c \
- ../../shared/sbrk.c ../../lm32/shared/startup/setvec.c \
- ../../shared/gnatinstallhandler.c
+libbsp_a_SOURCES += startup/bspclean.c
+libbsp_a_SOURCES += ../../shared/bsplibc.c
+libbsp_a_SOURCES += ../../shared/bsppost.c
+libbsp_a_SOURCES += ../shared/startup/bspstart.c
+libbsp_a_SOURCES += ../../shared/bsppretaskinghook.c
+libbsp_a_SOURCES += ../../shared/bspgetworkarea.c
+libbsp_a_SOURCES += ../../shared/bootcard.c
+libbsp_a_SOURCES += ../../shared/sbrk.c
+libbsp_a_SOURCES += ../../shared/gnatinstallhandler.c
+
+# irq
+libbsp_a_SOURCES += ../../lm32/shared/irq/irq.c
# clock
-
libbsp_a_SOURCES += ../../lm32/shared/milkymist_clock/ckinit.c
# console
-libbsp_a_SOURCES += ../../lm32/shared/milkymist_console/console.c \
- ../../lm32/shared/milkymist_console/uart.c
+libbsp_a_SOURCES += ../../lm32/shared/milkymist_console/console.c
+libbsp_a_SOURCES += ../../lm32/shared/milkymist_console/uart.c
+
# timer
libbsp_a_SOURCES += ../../lm32/shared/milkymist_timer/timer.c
# framebuffer
libbsp_a_SOURCES += ../../lm32/shared/milkymist_framebuffer/framebuffer.c
-# gpio
+# GPIO
libbsp_a_SOURCES += ../../lm32/shared/milkymist_gpio/gpio.c
+# buttons
+libbsp_a_SOURCES += ../../lm32/shared/milkymist_buttons/buttons.c
+
+# ac97
+libbsp_a_SOURCES += ../../lm32/shared/milkymist_ac97/ac97.c
+
+# usbinput
+libbsp_a_SOURCES += ../../lm32/shared/milkymist_usbinput/usbinput.c
+
+# PFPU
+libbsp_a_SOURCES += ../../lm32/shared/milkymist_pfpu/pfpu.c
+
+# TMU
+libbsp_a_SOURCES += ../../lm32/shared/milkymist_tmu/tmu.c
+
+# memory card
+libbsp_a_SOURCES += ../../lm32/shared/milkymist_memcard/memcard.c
+
+# flash
+libbsp_a_SOURCES += ../../lm32/shared/milkymist_flash/flash.c
+
+# DMX
+libbsp_a_SOURCES += ../../lm32/shared/milkymist_dmx/dmx.c
+
+# MIDI
+libbsp_a_SOURCES += ../../lm32/shared/milkymist_midi/midi.c
+
+# IR
+libbsp_a_SOURCES += ../../lm32/shared/milkymist_ir/ir.c
+
+# video input
+libbsp_a_SOURCES += ../../lm32/shared/milkymist_video/video.c
+
+# versions
+libbsp_a_SOURCES += ../../lm32/shared/milkymist_versions/versions.c
+
if HAS_NETWORKING
noinst_PROGRAMS += network.rel
-network_rel_SOURCES = ../../lm32/shared/milkymist_networking/network.c \
- ../../lm32/shared/milkymist_networking/mm_crc32.c
+network_rel_SOURCES = ../../lm32/shared/milkymist_networking/network.c
network_rel_CPPFLAGS = $(AM_CPPFLAGS) -D__INSIDE_RTEMS_BSD_TCPIP_STACK__
network_rel_LDFLAGS = $(RTEMS_RELLDFLAGS)
libbsp_a_LIBADD += network.rel
diff --git a/c/src/lib/libbsp/lm32/milkymist/README b/c/src/lib/libbsp/lm32/milkymist/README
index 20568ee496..b44d3735c2 100644
--- a/c/src/lib/libbsp/lm32/milkymist/README
+++ b/c/src/lib/libbsp/lm32/milkymist/README
@@ -2,20 +2,19 @@
# $Id$
#
-This is a BSP written by Yann Sionneau <yann.sionneau@telecom-sudparis.eu>
-as part of Google Summer of Code 2010.
+Full RTEMS port to the Milkymist One. Supports Milkymist SoC 1.0.x.
-This is a BSP to make RTEMS run on Milkymist One board using Milkymist SoC
+Includes drivers for:
+- Multi-standard video input (PAL/SECAM/NTSC)
+- Two DMX512 (RS485) ports
+- MIDI IN and MIDI OUT ports
+- VGA output
+- AC'97 audio
+- NOR flash
+- 10/100 Ethernet
+- Memory card (experimental and incomplete)
+- USB host connectors (input devices only, using the softusb-input firmware)
+- RC5 infrared receiver
+- RS232 debug port
-It provides driver for timer, uart, ethernet, framebuffer so far.
-
-Milkymist SoC is running @ 83 MHz with 128 MB of 32-bit DDR400 SDRAM
-The SoC is based on a XC6SLX45 Spartan-6 FPGA running
-the LatticeMico32 softcore.
-
-More informations available at : http://www.milkymist.org/
-
-Information about the porting can be found in Yann Sionneau's blog
-at http://sionneau.net/
-
-Milkymist is a project leaded by Sebastien Bourdeauducq (aka lekernel)
+For more information: http://www.milkymist.org/
diff --git a/c/src/lib/libbsp/lm32/milkymist/include/bsp.h b/c/src/lib/libbsp/lm32/milkymist/include/bsp.h
index 2d5a91c7c0..940e280fa2 100644
--- a/c/src/lib/libbsp/lm32/milkymist/include/bsp.h
+++ b/c/src/lib/libbsp/lm32/milkymist/include/bsp.h
@@ -8,8 +8,7 @@
*
* $Id$
*
- * Yann Sionneau <yann.sionneau@telecom-sudparis.eu>, (GSoC 2010)
- * Telecom SudParis
+ * COPYRIGHT (c) 2011 Sebastien Bourdeauducq
*/
#ifndef _BSP_H
@@ -22,22 +21,16 @@
#include <rtems/console.h>
#include <rtems/clockdrv.h>
-
#ifdef __cplusplus
extern "C" {
#endif
-#define BSP_DIRTY_MEMORY 1
-
#define BSP_HAS_FRAME_BUFFER 1
-#define GPIO_DRIVER_TABLE_ENTRY { gpio_initialize, \
-gpio_open, gpio_close, gpio_read, gpio_write, gpio_control}
-
- /*
- * lm32 requires certain aligment of mbuf because unaligned uint32_t
- * accesses are not handled properly.
- */
+/*
+ * lm32 requires certain aligment of mbuf because unaligned uint32_t
+ * accesses are not handled properly.
+ */
#define CPU_U32_FIX
@@ -50,25 +43,8 @@ extern int rtems_minimac_driver_attach (struct rtems_bsdnet_ifconfig *config,
#define RTEMS_BSP_NETWORK_DRIVER_NAME "minimac0"
#endif
- /*
- * Simple spin delay in microsecond units for device drivers.
- * This is very dependent on the clock speed of the target.
- */
-
-#define rtems_bsp_delay( microseconds ) \
- { \
- }
-
-/* functions */
-lm32_isr_entry set_vector( /* returns old vector */
- rtems_isr_entry handler, /* isr routine */
- rtems_vector_number vector, /* vector number */
- int type /* RTEMS or RAW intr */
-);
-
#ifdef __cplusplus
}
#endif
#endif
-/* end of include file */
diff --git a/c/src/lib/libbsp/lm32/milkymist/include/system_conf.h b/c/src/lib/libbsp/lm32/milkymist/include/system_conf.h
index 5f49c91f76..6588e8f5eb 100644
--- a/c/src/lib/libbsp/lm32/milkymist/include/system_conf.h
+++ b/c/src/lib/libbsp/lm32/milkymist/include/system_conf.h
@@ -1,56 +1,304 @@
/* system_conf.h
* Global System conf
- *
+ *
* Milkymist port of RTEMS
*
- * The license and distribution terms for this file may be
+ * The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rtems.com/license/LICENSE.
*
* $Id$
*
+ * COPYRIGHT (c) 2010, 2011 Sebastien Bourdeauducq
*/
#ifndef __SYSTEM_CONFIG_H_
#define __SYSTEM_CONFIG_H_
-#define CPU_FREQUENCY (83333333)
-#define UART_BAUD_RATE (115200)
+#define CPU_FREQUENCY (80000000)
+#define UART_BAUD_RATE (115200)
+
+/* FML bridge */
+#define FMLBRG_FLUSH_BASE (0xc8000000)
+#define FMLBRG_LINE_LENGTH (32)
+#define FMLBRG_LINE_COUNT (512)
+
+/* UART */
+#define MM_UART_RXTX (0xe0000000)
+#define MM_UART_DIV (0xe0000004)
+
+/* Timers */
+#define MM_TIMER1_COMPARE (0xe0001024)
+#define MM_TIMER1_COUNTER (0xe0001028)
+#define MM_TIMER1_CONTROL (0xe0001020)
+
+#define MM_TIMER0_COMPARE (0xe0001014)
+#define MM_TIMER0_COUNTER (0xe0001018)
+#define MM_TIMER0_CONTROL (0xe0001010)
+
+#define TIMER_ENABLE (0x01)
+#define TIMER_AUTORESTART (0x02)
+
+/* GPIO */
+#define MM_GPIO_IN (0xe0001000)
+#define MM_GPIO_OUT (0xe0001004)
+#define MM_GPIO_INTEN (0xe0001008)
+
+#define GPIO_BTN1 (0x00000001)
+#define GPIO_BTN2 (0x00000002)
+#define GPIO_BTN3 (0x00000004)
+#define GPIO_PCBREV0 (0x00000008)
+#define GPIO_PCBREV1 (0x00000010)
+#define GPIO_PCBREV2 (0x00000020)
+#define GPIO_PCBREV3 (0x00000040)
+#define GPIO_LED1 (0x00000001)
+#define GPIO_LED2 (0x00000002)
-#define MM_TIMER1_COMPARE (0xe0001024)
-#define MM_TIMER1_COUNTER (0xe0001028)
-#define MM_TIMER1_CONTROL (0xe0001020)
+/* System ID and reset */
+#define MM_SYSTEM_ID (0xe000103c)
-#define MM_TIMER0_COMPARE (0xe0001014)
-#define MM_TIMER0_COUNTER (0xe0001018)
-#define MM_TIMER0_CONTROL (0xe0001010)
+/* ICAP */
+#define MM_ICAP (0xe0001034)
-#define TIMER_ENABLE (0x01)
-#define TIMER_AUTORESTART (0x02)
+#define ICAP_READY (0x01)
+#define ICAP_CE (0x10000)
+#define ICAP_WRITE (0x20000)
-#define MM_VGA_RESET_MODE (0x01)
-#define MM_VGA_RESET (0xe0003000)
-#define MM_VGA_BASEADDRESS (0xe0003024)
+/* VGA */
+#define MM_VGA_RESET (0xe0003000)
+
+#define MM_VGA_HRES (0xe0003004)
+#define MM_VGA_HSYNC_START (0xe0003008)
+#define MM_VGA_HSYNC_END (0xe000300C)
+#define MM_VGA_HSCAN (0xe0003010)
+
+#define MM_VGA_VRES (0xe0003014)
+#define MM_VGA_VSYNC_START (0xe0003018)
+#define MM_VGA_VSYNC_END (0xe000301C)
+#define MM_VGA_VSCAN (0xe0003020)
+
+#define MM_VGA_BASEADDRESS (0xe0003024)
#define MM_VGA_BASEADDRESS_ACT (0xe0003028)
-#define MM_MINIMAC_SETUP (0xe0009000)
-#define MM_MINIMAC_STATE0 (0xe0009008)
-#define MM_MINIMAC_ADDR0 (0xe000900C)
-#define MM_MINIMAC_COUNT0 (0xe0009010)
+#define MM_VGA_BURST_COUNT (0xe000302C)
+
+#define MM_VGA_DDC (0xe0003030)
+
+#define MM_VGA_CLKSEL (0xe0003034)
+
+#define VGA_RESET (0x01)
+#define VGA_DDC_SDAIN (0x1)
+#define VGA_DDC_SDAOUT (0x2)
+#define VGA_DDC_SDAOE (0x4)
+#define VGA_DDC_SDC (0x8)
+
+/* Ethernet */
+#define MM_MINIMAC_SETUP (0xe0008000)
+#define MM_MINIMAC_MDIO (0xe0008004)
+
+#define MM_MINIMAC_STATE0 (0xe0008008)
+#define MM_MINIMAC_COUNT0 (0xe000800C)
+#define MM_MINIMAC_STATE1 (0xe0008010)
+#define MM_MINIMAC_COUNT1 (0xe0008014)
+
+#define MM_MINIMAC_TXCOUNT (0xe0008018)
+
+#define MINIMAC_RX0_BASE (0xb0000000)
+#define MINIMAC_RX1_BASE (0xb0000800)
+#define MINIMAC_TX_BASE (0xb0001000)
+
+#define MINIMAC_SETUP_PHYRST (0x1)
+
+#define MINIMAC_STATE_EMPTY (0x0)
+#define MINIMAC_STATE_LOADED (0x1)
+#define MINIMAC_STATE_PENDING (0x2)
+
+/* AC97 */
+#define MM_AC97_CRCTL (0xe0005000)
+
+#define AC97_CRCTL_RQEN (0x01)
+#define AC97_CRCTL_WRITE (0x02)
+
+#define MM_AC97_CRADDR (0xe0005004)
+#define MM_AC97_CRDATAOUT (0xe0005008)
+#define MM_AC97_CRDATAIN (0xe000500C)
+
+#define MM_AC97_DCTL (0xe0005010)
+#define MM_AC97_DADDRESS (0xe0005014)
+#define MM_AC97_DREMAINING (0xe0005018)
+
+#define MM_AC97_UCTL (0xe0005020)
+#define MM_AC97_UADDRESS (0xe0005024)
+#define MM_AC97_UREMAINING (0xe0005028)
+
+#define AC97_SCTL_EN (0x01)
+
+#define AC97_MAX_DMASIZE (0x3fffc)
+
+/* SoftUSB */
+#define MM_SOFTUSB_CONTROL (0xe000f000)
+
+#define SOFTUSB_CONTROL_RESET (0x1)
+
+#define MM_SOFTUSB_PMEM_BASE (0xa0000000)
+#define MM_SOFTUSB_DMEM_BASE (0xa0020000)
+
+#define SOFTUSB_PMEM_SIZE (1 << 12)
+#define SOFTUSB_DMEM_SIZE (1 << 13)
+
+/* PFPU */
+#define MM_PFPU_CTL (0xe0006000)
+#define PFPU_CTL_START (0x01)
+#define PFPU_CTL_BUSY (0x01)
+
+#define MM_PFPU_MESHBASE (0xe0006004)
+#define MM_PFPU_HMESHLAST (0xe0006008)
+#define MM_PFPU_VMESHLAST (0xe000600C)
+
+#define MM_PFPU_CODEPAGE (0xe0006010)
+
+#define MM_PFPU_DREGBASE (0xe0006400)
+#define MM_PFPU_CODEBASE (0xe0006800)
+
+#define PFPU_PAGESIZE (512)
+#define PFPU_SPREG_COUNT (2)
+#define PFPU_REG_X (0)
+#define PFPU_REG_Y (1)
+
+/* TMU */
+#define MM_TMU_CTL (0xe0007000)
+#define TMU_CTL_START (0x01)
+#define TMU_CTL_BUSY (0x01)
+#define TMU_CTL_CHROMAKEY (0x02)
+
+#define MM_TMU_HMESHLAST (0xe0007004)
+#define MM_TMU_VMESHLAST (0xe0007008)
+#define MM_TMU_BRIGHTNESS (0xe000700C)
+#define MM_TMU_CHROMAKEY (0xe0007010)
+
+#define MM_TMU_VERTICESADR (0xe0007014)
+#define MM_TMU_TEXFBUF (0xe0007018)
+#define MM_TMU_TEXHRES (0xe000701C)
+#define MM_TMU_TEXVRES (0xe0007020)
+#define MM_TMU_TEXHMASK (0xe0007024)
+#define MM_TMU_TEXVMASK (0xe0007028)
+
+#define MM_TMU_DSTFBUF (0xe000702C)
+#define MM_TMU_DSTHRES (0xe0007030)
+#define MM_TMU_DSTVRES (0xe0007034)
+#define MM_TMU_DSTHOFFSET (0xe0007038)
+#define MM_TMU_DSTVOFFSET (0xe000703C)
+#define MM_TMU_DSTSQUAREW (0xe0007040)
+#define MM_TMU_DSTSQUAREH (0xe0007044)
+
+#define MM_TMU_ALPHA (0xe0007048)
+
+/* Memory card */
+#define MM_MEMCARD_CLK2XDIV (0xe0004000)
+
+#define MM_MEMCARD_ENABLE (0xe0004004)
+
+#define MEMCARD_ENABLE_CMD_TX (0x1)
+#define MEMCARD_ENABLE_CMD_RX (0x2)
+#define MEMCARD_ENABLE_DAT_TX (0x4)
+#define MEMCARD_ENABLE_DAT_RX (0x8)
+
+#define MM_MEMCARD_PENDING (0xe0004008)
+
+#define MEMCARD_PENDING_CMD_TX (0x1)
+#define MEMCARD_PENDING_CMD_RX (0x2)
+#define MEMCARD_PENDING_DAT_TX (0x4)
+#define MEMCARD_PENDING_DAT_RX (0x8)
+
+#define MM_MEMCARD_START (0xe000400c)
+
+#define MEMCARD_START_CMD_RX (0x1)
+#define MEMCARD_START_DAT_RX (0x2)
+
+#define MM_MEMCARD_CMD (0xe0004010)
+#define MM_MEMCARD_DAT (0xe0004014)
+
+/* DMX */
+#define MM_DMX_TX(x) (0xe000c000+4*(x))
+#define MM_DMX_THRU (0xe000c800)
+#define MM_DMX_RX(x) (0xe000d000+4*(x))
+
+/* MIDI */
+#define MM_MIDI_RXTX (0xe000b000)
+#define MM_MIDI_DIVISOR (0xe000b004)
+#define MM_MIDI_THRU (0xe000b008)
+
+/* IR */
+#define MM_IR_RX (0xe000e000)
+
+/* Video input */
+#define MM_BT656_I2C (0xe000a000)
+#define MM_BT656_FILTERSTATUS (0xe000a004)
+#define MM_BT656_BASE (0xe000a008)
+#define MM_BT656_MAXBURSTS (0xe000a00c)
+#define MM_BT656_DONEBURSTS (0xe000a010)
+
+#define BT656_I2C_SDAIN (0x1)
+#define BT656_I2C_SDAOUT (0x2)
+#define BT656_I2C_SDAOE (0x4)
+#define BT656_I2C_SDC (0x8)
+
+#define BT656_FILTER_FIELD1 (0x1)
+#define BT656_FILTER_FIELD2 (0x2)
+#define BT656_FILTER_INFRAME (0x4)
+
+/* Interrupts */
+#define MM_IRQ_UARTRX (0)
+#define MM_IRQ_UARTTX (1)
+#define MM_IRQ_GPIO (2)
+#define MM_IRQ_TIMER0 (3)
+#define MM_IRQ_TIMER1 (4)
+#define MM_IRQ_AC97CRREQUEST (5)
+#define MM_IRQ_AC97CRREPLY (6)
+#define MM_IRQ_AC97DMAR (7)
+#define MM_IRQ_AC97DMAW (8)
+#define MM_IRQ_PFPU (9)
+#define MM_IRQ_TMU (10)
+#define MM_IRQ_ETHRX (11)
+#define MM_IRQ_ETHTX (12)
+#define MM_IRQ_VIDEOIN (13)
+#define MM_IRQ_MIDIRX (14)
+#define MM_IRQ_MIDITX (15)
+#define MM_IRQ_IR (16)
+#define MM_IRQ_USB (17)
+
+/* Flash layout */
+#define FLASH_BASE (0x80000000)
+
+#define FLASH_OFFSET_STANDBY_BITSTREAM (0x80000000)
+
+#define FLASH_OFFSET_RESCUE_BITSTREAM (0x800A0000)
+#define FLASH_OFFSET_RESCUE_BIOS (0x80220000)
+#define FLASH_OFFSET_MAC_ADDRESS (0x802200E0)
+#define FLASH_OFFSET_RESCUE_SPLASH (0x80240000)
+#define FLASH_OFFSET_RESCUE_APP (0x802E0000)
+
+#define FLASH_OFFSET_REGULAR_BITSTREAM (0x806E0000)
+#define FLASH_OFFSET_REGULAR_BIOS (0x80860000)
+#define FLASH_OFFSET_REGULAR_SPLASH (0x80880000)
+#define FLASH_OFFSET_REGULAR_APP (0x80920000)
+
+/* MMIO */
+#define MM_READ(reg) (*((volatile unsigned int *)(reg)))
+#define MM_WRITE(reg, val) *((volatile unsigned int *)(reg)) = val
-#define MM_MINIMAC_STATE1 (0xe0009014)
-#define MM_MINIMAC_ADDR1 (0xe0009018)
-#define MM_MINIMAC_COUNT1 (0xe000901C)
+/* Flash partitions */
-#define MM_MINIMAC_STATE2 (0xe0009020)
-#define MM_MINIMAC_ADDR2 (0xe0009024)
-#define MM_MINIMAC_COUNT2 (0xe0009028)
+#define FLASH_SECTOR_SIZE (128*1024)
-#define MM_MINIMAC_STATE3 (0xe000902C)
-#define MM_MINIMAC_ADDR3 (0xe0009030)
-#define MM_MINIMAC_COUNT3 (0xe0009034)
+#define FLASH_PARTITION_COUNT (5)
-#define MM_MINIMAC_TXREMAINING (0xe000903C)
-#define MM_MINIMAC_TXADR (0xe0009038)
+#define FLASH_PARTITIONS { \
+ { .start_address = 0x806E0000, .length = 0x0180000 }, \
+ { .start_address = 0x80860000, .length = 0x0020000 }, \
+ { .start_address = 0x80880000, .length = 0x00A0000 }, \
+ { .start_address = 0x80920000, .length = 0x0400000 }, \
+ { .start_address = 0x80D20000, .length = 0x12E0000 }, \
+}
#endif /* __SYSTEM_CONFIG_H_ */
diff --git a/c/src/lib/libbsp/lm32/milkymist/include/tm27.h b/c/src/lib/libbsp/lm32/milkymist/include/tm27.h
deleted file mode 100644
index a10e11cab1..0000000000
--- a/c/src/lib/libbsp/lm32/milkymist/include/tm27.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * tm27.h
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rtems.com/license/LICENSE.
- *
- * $Id$
- */
-
-#ifndef _RTEMS_TMTEST27
-#error "This is an RTEMS internal file you must not include directly."
-#endif
-
-#ifndef __tm27_h
-#define __tm27_h
-
-/*
- * Stuff for Time Test 27
- */
-
-#define MUST_WAIT_FOR_INTERRUPT 0
-
-#define Install_tm27_vector( handler ) set_vector( (handler), 0, 1 )
-
-#define Cause_tm27_intr() /* empty */
-
-#define Clear_tm27_intr() /* empty */
-
-#define Lower_tm27_intr() /* empty */
-
-#endif
diff --git a/c/src/lib/libbsp/lm32/milkymist/make/custom/milkymist.cfg b/c/src/lib/libbsp/lm32/milkymist/make/custom/milkymist.cfg
index 5571f7b113..5a44658389 100644
--- a/c/src/lib/libbsp/lm32/milkymist/make/custom/milkymist.cfg
+++ b/c/src/lib/libbsp/lm32/milkymist/make/custom/milkymist.cfg
@@ -18,7 +18,6 @@ CPU_CFLAGS = -mbarrel-shift-enabled -mmultiply-enabled \
-mdivide-enabled -msign-extend-enabled
# optimize flag: typically -O2
-# ATM, doesn't work with optimization levels > 0
CFLAGS_OPTIMIZE_V = -O2 -g
define bsp-post-link
diff --git a/c/src/lib/libbsp/lm32/milkymist/preinstall.am b/c/src/lib/libbsp/lm32/milkymist/preinstall.am
index b3375ceee9..c3217ef01a 100644
--- a/c/src/lib/libbsp/lm32/milkymist/preinstall.am
+++ b/c/src/lib/libbsp/lm32/milkymist/preinstall.am
@@ -41,10 +41,74 @@ $(PROJECT_INCLUDE)/bsp.h: include/bsp.h $(PROJECT_INCLUDE)/$(dirstamp)
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp.h
PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp.h
-$(PROJECT_INCLUDE)/tm27.h: include/tm27.h $(PROJECT_INCLUDE)/$(dirstamp)
+$(PROJECT_INCLUDE)/coverhd.h: ../../shared/include/coverhd.h $(PROJECT_INCLUDE)/$(dirstamp)
+ $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/coverhd.h
+PREINSTALL_FILES += $(PROJECT_INCLUDE)/coverhd.h
+
+$(PROJECT_INCLUDE)/tm27.h: ../../shared/include/tm27.h $(PROJECT_INCLUDE)/$(dirstamp)
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/tm27.h
PREINSTALL_FILES += $(PROJECT_INCLUDE)/tm27.h
+$(PROJECT_INCLUDE)/bsp/irq.h: ../../lm32/shared/include/irq.h $(PROJECT_INCLUDE)/bsp/$(dirstamp)
+ $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/irq.h
+PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/irq.h
+
+$(PROJECT_INCLUDE)/bsp/irq-generic.h: ../../shared/include/irq-generic.h $(PROJECT_INCLUDE)/bsp/$(dirstamp)
+ $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/irq-generic.h
+PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/irq-generic.h
+
+$(PROJECT_INCLUDE)/bsp/milkymist_gpio.h: ../../lm32/shared/milkymist_gpio/milkymist_gpio.h $(PROJECT_INCLUDE)/bsp/$(dirstamp)
+ $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/milkymist_gpio.h
+PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/milkymist_gpio.h
+
+$(PROJECT_INCLUDE)/bsp/milkymist_buttons.h: ../../lm32/shared/milkymist_buttons/milkymist_buttons.h $(PROJECT_INCLUDE)/bsp/$(dirstamp)
+ $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/milkymist_buttons.h
+PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/milkymist_buttons.h
+
+$(PROJECT_INCLUDE)/bsp/milkymist_ac97.h: ../../lm32/shared/milkymist_ac97/milkymist_ac97.h $(PROJECT_INCLUDE)/bsp/$(dirstamp)
+ $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/milkymist_ac97.h
+PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/milkymist_ac97.h
+
+$(PROJECT_INCLUDE)/bsp/milkymist_usbinput.h: ../../lm32/shared/milkymist_usbinput/milkymist_usbinput.h $(PROJECT_INCLUDE)/bsp/$(dirstamp)
+ $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/milkymist_usbinput.h
+PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/milkymist_usbinput.h
+
+$(PROJECT_INCLUDE)/bsp/milkymist_pfpu.h: ../../lm32/shared/milkymist_pfpu/milkymist_pfpu.h $(PROJECT_INCLUDE)/bsp/$(dirstamp)
+ $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/milkymist_pfpu.h
+PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/milkymist_pfpu.h
+
+$(PROJECT_INCLUDE)/bsp/milkymist_tmu.h: ../../lm32/shared/milkymist_tmu/milkymist_tmu.h $(PROJECT_INCLUDE)/bsp/$(dirstamp)
+ $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/milkymist_tmu.h
+PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/milkymist_tmu.h
+
+$(PROJECT_INCLUDE)/bsp/milkymist_memcard.h: ../../lm32/shared/milkymist_memcard/milkymist_memcard.h $(PROJECT_INCLUDE)/bsp/$(dirstamp)
+ $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/milkymist_memcard.h
+PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/milkymist_memcard.h
+
+$(PROJECT_INCLUDE)/bsp/milkymist_flash.h: ../../lm32/shared/milkymist_flash/milkymist_flash.h $(PROJECT_INCLUDE)/bsp/$(dirstamp)
+ $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/milkymist_flash.h
+PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/milkymist_flash.h
+
+$(PROJECT_INCLUDE)/bsp/milkymist_dmx.h: ../../lm32/shared/milkymist_dmx/milkymist_dmx.h $(PROJECT_INCLUDE)/bsp/$(dirstamp)
+ $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/milkymist_dmx.h
+PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/milkymist_dmx.h
+
+$(PROJECT_INCLUDE)/bsp/milkymist_midi.h: ../../lm32/shared/milkymist_midi/milkymist_midi.h $(PROJECT_INCLUDE)/bsp/$(dirstamp)
+ $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/milkymist_midi.h
+PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/milkymist_midi.h
+
+$(PROJECT_INCLUDE)/bsp/milkymist_ir.h: ../../lm32/shared/milkymist_ir/milkymist_ir.h $(PROJECT_INCLUDE)/bsp/$(dirstamp)
+ $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/milkymist_ir.h
+PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/milkymist_ir.h
+
+$(PROJECT_INCLUDE)/bsp/milkymist_video.h: ../../lm32/shared/milkymist_video/milkymist_video.h $(PROJECT_INCLUDE)/bsp/$(dirstamp)
+ $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/milkymist_video.h
+PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/milkymist_video.h
+
+$(PROJECT_INCLUDE)/bsp/milkymist_versions.h: ../../lm32/shared/milkymist_versions/milkymist_versions.h $(PROJECT_INCLUDE)/bsp/$(dirstamp)
+ $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/milkymist_versions.h
+PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/milkymist_versions.h
+
$(PROJECT_INCLUDE)/bspopts.h: include/bspopts.h $(PROJECT_INCLUDE)/$(dirstamp)
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bspopts.h
PREINSTALL_FILES += $(PROJECT_INCLUDE)/bspopts.h
@@ -53,10 +117,6 @@ $(PROJECT_INCLUDE)/bsp/bootcard.h: ../../shared/include/bootcard.h $(PROJECT_INC
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/bootcard.h
PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/bootcard.h
-$(PROJECT_INCLUDE)/coverhd.h: ../../shared/include/coverhd.h $(PROJECT_INCLUDE)/$(dirstamp)
- $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/coverhd.h
-PREINSTALL_FILES += $(PROJECT_INCLUDE)/coverhd.h
-
$(PROJECT_INCLUDE)/system_conf.h: include/system_conf.h $(PROJECT_INCLUDE)/$(dirstamp)
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/system_conf.h
PREINSTALL_FILES += $(PROJECT_INCLUDE)/system_conf.h
diff --git a/c/src/lib/libbsp/lm32/milkymist/startup/bspclean.c b/c/src/lib/libbsp/lm32/milkymist/startup/bspclean.c
new file mode 100644
index 0000000000..202ff47c0d
--- /dev/null
+++ b/c/src/lib/libbsp/lm32/milkymist/startup/bspclean.c
@@ -0,0 +1,56 @@
+/* bspclean.c
+ *
+ * Milkymist shutdown routine
+ *
+ * COPYRIGHT (c) 2010 Sebastien Bourdeauducq
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.com/license/LICENSE.
+ *
+ * $Id$
+ */
+
+#include <rtems.h>
+#include "../include/system_conf.h"
+
+static void reboot(void)
+{
+ /* Writing to CSR_SYSTEM_ID causes a system reset */
+ MM_WRITE(MM_SYSTEM_ID, 1);
+}
+
+static void icap_write(int val, unsigned int w)
+{
+ while (!(MM_READ(MM_ICAP) & ICAP_READY));
+ if (!val)
+ w |= ICAP_CE|ICAP_WRITE;
+ MM_WRITE(MM_ICAP, w);
+}
+static void reconf(void)
+{
+ icap_write(0, 0xffff); /* dummy word */
+ icap_write(0, 0xffff); /* dummy word */
+ icap_write(0, 0xffff); /* dummy word */
+ icap_write(0, 0xffff); /* dummy word */
+ icap_write(1, 0xaa99); /* sync word part 1 */
+ icap_write(1, 0x5566); /* sync word part 2 */
+ icap_write(1, 0x30a1); /* write to command register */
+ icap_write(1, 0x0000); /* null command */
+ icap_write(1, 0x30a1); /* write to command register */
+ icap_write(1, 0x000e); /* reboot command */
+ icap_write(1, 0x2000); /* NOP */
+ icap_write(1, 0x2000); /* NOP */
+ icap_write(1, 0x2000); /* NOP */
+ icap_write(1, 0x2000); /* NOP */
+ icap_write(0, 0x1111); /* NULL */
+ icap_write(0, 0xffff); /* dummy word */
+}
+
+void bsp_cleanup(uint32_t status)
+{
+ if (status)
+ reconf();
+ else
+ reboot();
+}
diff --git a/c/src/lib/libbsp/lm32/milkymist/startup/linkcmds b/c/src/lib/libbsp/lm32/milkymist/startup/linkcmds
index 490ae6093a..aeebec78d1 100644
--- a/c/src/lib/libbsp/lm32/milkymist/startup/linkcmds
+++ b/c/src/lib/libbsp/lm32/milkymist/startup/linkcmds
@@ -9,13 +9,13 @@ ENTRY(_start)
* Declare some sizes. Heap is sized at whatever ram space is left.
*/
RamBase = DEFINED(RamBase) ? RamBase : 0x40000000;
-RamSize = DEFINED(RamSize) ? RamSize : 64M;
-HeapSize = DEFINED(HeapSize) ? HeapSize : 2M;
+RamSize = DEFINED(RamSize) ? RamSize : 128M;
+HeapSize = DEFINED(HeapSize) ? HeapSize : 92M;
_StackSize = DEFINED(_StackSize) ? _StackSize : 0x2000;
PROVIDE (__stack = 0);
MEMORY {
- sdram : ORIGIN = 0x40000000 , LENGTH = 64M
+ sdram : ORIGIN = 0x40000000 , LENGTH = 128M
}
SECTIONS
{