changeset 3205:b3af38677ed2

Enhanced endianness support for devices with big and little endian, added support for MPC5xxx in addition to Kinetis, extended support for up to 8 DSPIs.
author vae
date Fri, 22 Feb 2013 19:38:45 +0000
parents 382872a76fa5
children 1f3f5c905da8
files packages/devs/spi/freescale/dspi/current/ChangeLog packages/devs/spi/freescale/dspi/current/cdl/spi_freescale_dspi.cdl packages/devs/spi/freescale/dspi/current/include/spi_freescale_dspi_buses.inl packages/devs/spi/freescale/dspi/current/tests/spi_loopback.c
diffstat 4 files changed, 411 insertions(+), 339 deletions(-) [+]
line wrap: on
line diff
--- a/packages/devs/spi/freescale/dspi/current/ChangeLog
+++ b/packages/devs/spi/freescale/dspi/current/ChangeLog
@@ -1,3 +1,11 @@
+2013-02-06  Stefan Singer <stefan.singer@freescale.com>
+		+ Ilija Kocho <ilijak@siva.com.mk>
+
+	* enhanced endianness support for devices with big and little endian
+	* added support for MPC5xxx in addition to Kinetis
+	* extended support for up to 8 DSPIs
+	(see Bugzilla 1001752).
+
 2012-12-28  Ilija Kocho <ilijak@siva.com.mk>
 
 	* cdl/spi_freescale_dspi.cdl, src/spi_freescale_dspi.c:
--- a/packages/devs/spi/freescale/dspi/current/cdl/spi_freescale_dspi.cdl
+++ b/packages/devs/spi/freescale/dspi/current/cdl/spi_freescale_dspi.cdl
@@ -55,7 +55,7 @@ cdl_package CYGPKG_DEVS_SPI_FREESCALE_DS
 
     parent        CYGPKG_IO_SPI
     active_if     CYGPKG_IO_SPI
-    requires      CYGPKG_HAL_CORTEXM_KINETIS
+    requires      CYGPKG_HAL_CORTEXM_KINETIS || CYGPKG_HAL_POWERPC_MPC5xxx
 
     hardware
     include_dir   cyg/io
@@ -115,7 +115,7 @@ cdl_package CYGPKG_DEVS_SPI_FREESCALE_DS
     }
 
 
-    for { set ::spibus 0 } { $::spibus < 3 } { incr ::spibus } {
+    for { set ::spibus 0 } { $::spibus < 8 } { incr ::spibus } {
 
         cdl_interface CYGINT_DEVS_SPI_FREESCALE_DSPI[set ::spibus] {
             display "Number of devices using DSPI bus [set ::spibus]"
@@ -126,6 +126,7 @@ cdl_package CYGPKG_DEVS_SPI_FREESCALE_DS
             description "Enable DSPI bus [set :: spibus]."
             flavor bool
             default_value CYGINT_DEVS_SPI_FREESCALE_DSPI[set ::spibus]
+            active_if CYGINT_DEVS_SPI_FREESCALE_DSPI[set ::spibus]
 
             implements CYGINT_HAL_DMA
             requires   CYGPKG_HAL_FREESCALE_EDMA
@@ -295,7 +296,7 @@ cdl_package CYGPKG_DEVS_SPI_FREESCALE_DS
                 flavor data
                 requires CYGNUM_DEVS_SPI_FREESCALE_DSPI[set ::spibus]_ISR_PRI_SP
                 calculated CYGNUM_DEVS_SPI_FREESCALE_DSPI[set ::spibus]_ISR_PRI_SP
-                description "Interrupt priority set-point is provtded bu HAL"
+                description "Interrupt priority set-point is provided by HAL"
             }
         }
     }
--- a/packages/devs/spi/freescale/dspi/current/include/spi_freescale_dspi_buses.inl
+++ b/packages/devs/spi/freescale/dspi/current/include/spi_freescale_dspi_buses.inl
@@ -10,7 +10,7 @@
 // ####ECOSGPLCOPYRIGHTBEGIN####                                            
 // -------------------------------------------                              
 // This file is part of eCos, the Embedded Configurable Operating System.   
-// Copyright (C) 2011 Free Software Foundation, Inc.
+// Copyright (C) 2011, 2013 Free Software Foundation, Inc.
 //
 // eCos is free software; you can redistribute it and/or modify it under    
 // the terms of the GNU General Public License as published by the Free     
@@ -56,29 +56,151 @@
 //-----------------------------------------------------------------------------
 // Instantiate the bus state data structures.
 
+// Some auxiliary macros
 
-// DSPI0 BUS =================================================================
+#if (CYG_BYTEORDER == CYG_MSBFIRST)  // AKA Big endian
+#define EDMA_TCD_SADDR(__bus) \
+        .saddr = (void *)(((unsigned int)&CYGADDR_IO_SPI_FREESCALE_DSPI ## __bus ## _P->popr) + 3)
+#else // AKA Little endian
+#define EDMA_TCD_SADDR(__bus) \
+        .saddr = (cyg_uint32 *)&CYGADDR_IO_SPI_FREESCALE_DSPI ## __bus ## _P->popr
+#endif
+
+#define DSPI_EDMA_CHAN_SET(__bus) \
+static volatile cyg_uint32 \
+dspi ## __bus ## _pushque[CYGNUM_DEVS_SPI_FREESCALE_DSPI ## __bus ## _PUSHQUE_SIZE+4] \
+PUSHQUE_ALIGN EDMA_RAM_BUF_SECTION;                                                   \
+                                                                                      \
+static const cyghwr_hal_freescale_dma_chan_set_t dspi ## __bus ## _dma_chan[2] = \
+{                                                                                \
+    {                                                                            \
+        .dma_src = FREESCALE_DMAMUX_SRC_SPI ## __bus ## _TX                      \
+        | FREESCALE_DMAMUX_CHCFG_ENBL_M,                                         \
+        .dma_chan_i = CYGHWR_DEVS_SPI_FREESCALE_DSPI ## __bus ## _TX_DMA_CHAN,   \
+        .dma_prio = CYGNUM_DEVS_SPI_FREESCALE_DSPI ## __bus ## _TX_DMA_PRI,      \
+    },                                                                           \
+    {                                                                            \
+        .dma_src = FREESCALE_DMAMUX_SRC_SPI ## __bus ## _RX                      \
+        | FREESCALE_DMAMUX_CHCFG_ENBL_M,                                         \
+        .dma_chan_i = CYGHWR_DEVS_SPI_FREESCALE_DSPI ## __bus ## _RX_DMA_CHAN,   \
+        .dma_prio = CYGNUM_DEVS_SPI_FREESCALE_DSPI ## __bus ## _RX_DMA_PRI,      \
+    }                                                                            \
+};                                                                               \
+                                                                                 \
+static cyghwr_hal_freescale_dma_set_t dspi ## __bus ## _dma_set = {              \
+    .chan_p = dspi ## __bus ## _dma_chan,                                        \
+    .chan_n = 2                                                                  \
+};                                                                               \
+                                                                                 \
+static const cyghwr_hal_freescale_edma_tcd_t dspi ## __bus ## _dma_tcd_tx_ini =  \
+{                                                                                \
+        .saddr =  (cyg_uint32 *) dspi ## __bus ## _pushque,                      \
+        .soff = 4,                                                               \
+        .attr = FREESCALE_EDMA_ATTR_SSIZE(FREESCALE_EDMA_ATTR_SIZE_32) |         \
+                FREESCALE_EDMA_ATTR_DSIZE(FREESCALE_EDMA_ATTR_SIZE_32) |         \
+                FREESCALE_EDMA_ATTR_SMOD(0) |                                    \
+                FREESCALE_EDMA_ATTR_DMOD(0),                                     \
+        .daddr = (cyg_uint32 *)                                                  \
+                 &CYGADDR_IO_SPI_FREESCALE_DSPI ## __bus ## _P->pushr,           \
+        .doff = 0,                                                               \
+        .nbytes.mlno = 4,                                                        \
+        .slast = 0,                                                              \
+        .citer.elinkno = 1,                                                      \
+        .dlast_sga.dlast = 0,                                                    \
+        .biter.elinkno = 1,                                                      \
+        .csr = DSPI_DMA_BANDWIDTH                                                \
+};                                                                               \
+                                                                                 \
+static const cyghwr_hal_freescale_edma_tcd_t dspi ## __bus ## _dma_tcd_rx_ini =  \
+{                                                                                \
+       EDMA_TCD_SADDR(__bus),                                                    \
+        .soff = 0,                                                               \
+        .attr = FREESCALE_EDMA_ATTR_SSIZE(FREESCALE_EDMA_ATTR_SIZE_32) |         \
+                FREESCALE_EDMA_ATTR_DSIZE(FREESCALE_EDMA_ATTR_SIZE_32) |         \
+                FREESCALE_EDMA_ATTR_SMOD(0) |                                    \
+                FREESCALE_EDMA_ATTR_DMOD(0),                                     \
+        .daddr = NULL,                                                           \
+        .doff = 4,                                                               \
+        .nbytes.mlno = 4,                                                        \
+        .slast = 0,                                                              \
+        .citer.elinkno = 1,                                                      \
+        .dlast_sga.dlast = 0,                                                    \
+        .biter.elinkno = 1,                                                      \
+        .csr = DSPI_DMA_BANDWIDTH                                                \
+}
+
+#define DSPI_EDMA_SET_P_YES(__bus)  .dma_set_p = &dspi ## __bus ## _dma_set
+#define DSPI_EDMA_SET_P_NULL(__bus)  .dma_set_p = NULL
+
+#define DSPI_EDMA_TCD_YES(__bus)                                      \
+    .tx_dma_tcd_p = &CYGHWR_IO_FREESCALE_EDMA0_P->                    \
+        tcd[CYGHWR_DEVS_SPI_FREESCALE_DSPI ## __bus ## _TX_DMA_CHAN], \
+    .rx_dma_tcd_p = &CYGHWR_IO_FREESCALE_EDMA0_P->                    \
+    tcd[CYGHWR_DEVS_SPI_FREESCALE_DSPI ## __bus ## _RX_DMA_CHAN],     \
+    .tx_dma_tcd_ini_p = &dspi ## __bus ## _dma_tcd_tx_ini,            \
+    .rx_dma_tcd_ini_p = &dspi ## __bus ## _dma_tcd_rx_ini,            \
+    .pushque_p = dspi ## __bus ## _pushque
+
+#define DSPI_EDMA_TCD_NULL(__bus) \
+    .tx_dma_tcd_p = NULL,         \
+    .rx_dma_tcd_p = NULL,         \
+    .tx_dma_tcd_ini_p = NULL,     \
+    .rx_dma_tcd_ini_p = NULL,     \
+    .pushque_p = NULL
+
+// End DSPI_EDMA
+
+#define DSPI_BUS_SETUP(__bus) \
+static const cyg_spi_freescale_dspi_bus_setup_t dspi ## __bus ## _setup = {   \
+    .dspi_p          = CYGADDR_IO_SPI_FREESCALE_DSPI ## __bus ## _P,          \
+    .intr_num        = CYGNUM_HAL_INTERRUPT_SPI ## __bus,                     \
+    .intr_prio       = CYGNUM_DEVS_SPI_FREESCALE_DSPI ## __bus ## _ISR_PRI,   \
+    .spi_pin_list_p  = spi ## __bus ## _pins,                                 \
+    .cs_pin_list_p   = spi ## __bus ## _cs_pins,                              \
+    .cs_pin_num      = sizeof(spi ## __bus ## _cs_pins)/                      \
+                       sizeof(spi ## __bus ## _cs_pins[0]),                   \
+    .mcr_opt         = CYGHWR_FREESCALE_DSPI ## __bus ## _MCR_PCSSE |         \
+                       FREESCALE_DSPI_MCR_PCSIS(                              \
+                          CYGHWR_DEVS_SPI_FREESCALE_DSPI ## __bus ## _PCSIS), \
+    DSPI ## __bus ## _EDMA_SET_P                                              \
+}
+
+#define DSPI_BUS(__bus) \
+cyg_spi_freescale_dspi_bus_t cyg_spi_dspi_bus ## __bus = {                 \
+    .spi_bus.spi_transaction_begin    = dspi_transaction_begin,            \
+    .spi_bus.spi_transaction_transfer = dspi_transaction_transfer,         \
+    .spi_bus.spi_transaction_tick     = dspi_transaction_tick,             \
+    .spi_bus.spi_transaction_end      = dspi_transaction_end,              \
+    .spi_bus.spi_get_config           = dspi_get_config,                   \
+    .spi_bus.spi_set_config           = dspi_set_config,                   \
+    .setup_p                          = &dspi ## __bus ## _setup,          \
+    DSPI ## __bus ## _EDMA_TCD,                                            \
+    .pushque_n = CYGNUM_DEVS_SPI_FREESCALE_DSPI ## __bus ## _PUSHQUE_SIZE, \
+    .txfifo_n = CYGHWR_DEVS_SPI_FREESCALE_DSPI_FIFO_SIZE,                  \
+    .rxfifo_n = CYGHWR_DEVS_SPI_FREESCALE_DSPI_FIFO_SIZE                   \
+}
+
+#define DSPI_BUS_PINS(__bus) \
+static const cyg_uint32 spi ## __bus ## _pins[] = { \
+    CYGHWR_IO_FREESCALE_SPI ## __bus ## _PIN_SIN,   \
+    CYGHWR_IO_FREESCALE_SPI ## __bus ## _PIN_SOUT,  \
+    CYGHWR_IO_FREESCALE_SPI ## __bus ## _PIN_SCK    \
+}
+
+// DSPI BUS Instances =======================================================
+
+// DSPI BUS 0 ================================================================
 #ifdef CYGHWR_DEVS_SPI_FREESCALE_DSPI0
 
 #define  CYGBLD_DSPI0_TCD_SECTION \
     CYGBLD_ATTRIB_SECTION(CYGOPT_DEVS_SPI_FREESCALE_DSPI0_TCD_SECTION)
 
-extern cyg_spi_freescale_dspi_bus_t cyg_spi_dspi_bus0;
-
-// Pinonomy -------------------------------------------------------------------
-
 #ifdef CYHGWR_DEVS_SPI_FREESCALE_DSPI0_PCSS
 #define CYGHWR_FREESCALE_DSPI0_MCR_PCSSE FREESCALE_DSPI_MCR_PCSSE_M
 #else
 #define CYGHWR_FREESCALE_DSPI0_MCR_PCSSE 0
 #endif
 
-static const cyg_uint32 spi0_pins[] = {
-    CYGHWR_IO_FREESCALE_SPI0_PIN_SIN,
-    CYGHWR_IO_FREESCALE_SPI0_PIN_SOUT,
-    CYGHWR_IO_FREESCALE_SPI0_PIN_SCK
-};
-
 // SPI chip select pins.
 static const cyg_uint32 spi0_cs_pins[] = {
 #ifdef CYGHWR_FREESCALE_DSPI0_CS0
@@ -102,136 +224,32 @@ static const cyg_uint32 spi0_cs_pins[] =
 };
 
 #ifdef CYGINT_DEVS_SPI_DSPI0_USES_DMA
-static volatile
-cyg_uint32 dspi0_pushque[CYGNUM_DEVS_SPI_FREESCALE_DSPI0_PUSHQUE_SIZE+4] PUSHQUE_ALIGN;
-
-static cyghwr_hal_freescale_dma_chan_set_t dspi0_dma_chan[] =
-{
-    {
-        .dma_src = FREESCALE_DMAMUX_SRC_SPI0_TX
-        | FREESCALE_DMAMUX_CHCFG_ENBL_M,
-        .dma_chan_i = CYGHWR_DEVS_SPI_FREESCALE_DSPI0_TX_DMA_CHAN,
-        .dma_prio = CYGNUM_DEVS_SPI_FREESCALE_DSPI0_TX_DMA_PRI,
-    },
-    {
-        .dma_src = FREESCALE_DMAMUX_SRC_SPI0_RX
-        | FREESCALE_DMAMUX_CHCFG_ENBL_M,
-        .dma_chan_i = CYGHWR_DEVS_SPI_FREESCALE_DSPI0_RX_DMA_CHAN,
-        .dma_prio = CYGNUM_DEVS_SPI_FREESCALE_DSPI0_RX_DMA_PRI,
-    }
-};
-
-static cyghwr_hal_freescale_dma_set_t dspi0_dma_set = {
-    .chan_p = dspi0_dma_chan,
-    .chan_n = 2
-};
-
-static const cyghwr_hal_freescale_edma_tcd_t dspi0_dma_tcd_tx_ini =
-{
-        .saddr =  (cyg_uint32 *) dspi0_pushque,
-        .soff = 4,
-        .attr = FREESCALE_EDMA_ATTR_SSIZE(FREESCALE_EDMA_ATTR_SIZE_32) |
-                FREESCALE_EDMA_ATTR_DSIZE(FREESCALE_EDMA_ATTR_SIZE_32) |
-                FREESCALE_EDMA_ATTR_SMOD(0) |
-                FREESCALE_EDMA_ATTR_DMOD(0),
-        .daddr = (cyg_uint32 *)&CYGADDR_IO_SPI_FREESCALE_DSPI0_P->pushr,
-        .doff = 0,
-        .nbytes.mlno = 4,
-        .slast = 0,
-        .citer.elinkno = 1,
-        {.dlast = 0},
-        .biter.elinkno = 1,
-        .csr = DSPI_DMA_BANDWIDTH
-};
-
-
-static const cyghwr_hal_freescale_edma_tcd_t dspi0_dma_tcd_rx_ini =
-{
-        .saddr = (cyg_uint32 *)&CYGADDR_IO_SPI_FREESCALE_DSPI0_P->popr,
-        .soff = 0,
-        .attr = FREESCALE_EDMA_ATTR_SSIZE(FREESCALE_EDMA_ATTR_SIZE_32) |
-                FREESCALE_EDMA_ATTR_DSIZE(FREESCALE_EDMA_ATTR_SIZE_32) |
-                FREESCALE_EDMA_ATTR_SMOD(0) |
-                FREESCALE_EDMA_ATTR_DMOD(0),
-        .daddr = NULL,
-        .doff = 4,
-        .nbytes.mlno = 4,
-        .slast = 0,
-        .citer.elinkno = 1,
-        {.dlast = 0},
-        .biter.elinkno = 1,
-        .csr = DSPI_DMA_BANDWIDTH
-};
-
+  DSPI_EDMA_CHAN_SET(0);
+# define DSPI0_EDMA_SET_P DSPI_EDMA_SET_P_YES(0)
+# define DSPI0_EDMA_TCD DSPI_EDMA_TCD_YES(0)
+#else
+# define DSPI0_EDMA_SET_P DSPI_EDMA_SET_P_NULL(0)
+# define DSPI0_EDMA_TCD DSPI_EDMA_TCD_NULL(0)
 #endif // CYGINT_DEVS_SPI_DSPI0_USES_DMA
 
-static const cyg_spi_freescale_dspi_bus_setup_t dspi0_setup = {
-    .dspi_p          = CYGADDR_IO_SPI_FREESCALE_DSPI0_P,
-#ifdef CYGINT_DEVS_SPI_DSPI0_USES_DMA
-    .dma_set_p       = &dspi0_dma_set,
-#else
-    .dma_set_p       = NULL,
-#endif
-    .intr_num        = CYGNUM_HAL_INTERRUPT_SPI0,
-    .intr_prio       = CYGNUM_DEVS_SPI_FREESCALE_DSPI0_ISR_PRI,
-    .spi_pin_list_p  = spi0_pins,
-    .cs_pin_list_p   = spi0_cs_pins,
-    .cs_pin_num      = sizeof(spi0_cs_pins)/sizeof(spi0_cs_pins[0]),
-    .mcr_opt         = CYGHWR_FREESCALE_DSPI0_MCR_PCSSE |
-                       FREESCALE_DSPI_MCR_PCSIS(CYGHWR_DEVS_SPI_FREESCALE_DSPI0_PCSIS)
-};
+DSPI_BUS_PINS(0);
+DSPI_BUS_SETUP(0);
+DSPI_BUS(0);
 
-cyg_spi_freescale_dspi_bus_t cyg_spi_dspi_bus0 = {
-    .spi_bus.spi_transaction_begin    = dspi_transaction_begin,
-    .spi_bus.spi_transaction_transfer = dspi_transaction_transfer,
-    .spi_bus.spi_transaction_tick     = dspi_transaction_tick,
-    .spi_bus.spi_transaction_end      = dspi_transaction_end,
-    .spi_bus.spi_get_config           = dspi_get_config,
-    .spi_bus.spi_set_config           = dspi_set_config,
-    .setup_p                          = &dspi0_setup,
-#ifdef CYGINT_DEVS_SPI_DSPI0_USES_DMA
-    .tx_dma_tcd_p = &CYGHWR_IO_FREESCALE_EDMA0_P->
-                     tcd[CYGHWR_DEVS_SPI_FREESCALE_DSPI0_TX_DMA_CHAN],
-    .rx_dma_tcd_p = &CYGHWR_IO_FREESCALE_EDMA0_P->
-    tcd[CYGHWR_DEVS_SPI_FREESCALE_DSPI0_RX_DMA_CHAN],
-    .tx_dma_tcd_ini_p = &dspi0_dma_tcd_tx_ini,
-    .rx_dma_tcd_ini_p = &dspi0_dma_tcd_rx_ini,
-    .pushque_p = dspi0_pushque,
-#else // CYGINT_DEVS_SPI_DSPI0_USES_DMA
-    .tx_dma_tcd_p = NULL,
-    .rx_dma_tcd_p = NULL,
-    .tx_dma_tcd_ini_p = NULL,
-    .rx_dma_tcd_ini_p = NULL,
-    .pushque_p = NULL,
-#endif // CYGINT_DEVS_SPI_DSPI0_USES_DMA
-    .pushque_n = CYGNUM_DEVS_SPI_FREESCALE_DSPI0_PUSHQUE_SIZE,
-    .txfifo_n = CYGHWR_DEVS_SPI_FREESCALE_DSPI_FIFO_SIZE,
-    .rxfifo_n = CYGHWR_DEVS_SPI_FREESCALE_DSPI_FIFO_SIZE
-};
-#endif
+#endif // CYGHWR_DEVS_SPI_FREESCALE_DSPI0
 
-// DSPI1 BUS =================================================================
+// DSPI BUS 1 ================================================================
 #ifdef CYGHWR_DEVS_SPI_FREESCALE_DSPI1
 
 #define  CYGBLD_DSPI1_TCD_SECTION \
     CYGBLD_ATTRIB_SECTION(CYGOPT_DEVS_SPI_FREESCALE_DSPI1_TCD_SECTION)
 
-extern cyg_spi_freescale_dspi_bus_t cyg_spi_dspi_bus1;
-
-// Pinonomy -------------------------------------------------------------------
-
 #ifdef CYHGWR_DEVS_SPI_FREESCALE_DSPI1_PCSS
 #define CYGHWR_FREESCALE_DSPI1_MCR_PCSSE FREESCALE_DSPI_MCR_PCSSE_M
 #else
 #define CYGHWR_FREESCALE_DSPI1_MCR_PCSSE 0
 #endif
 
-static const cyg_uint32 spi1_pins[] = {
-    CYGHWR_IO_FREESCALE_SPI1_PIN_SIN,
-    CYGHWR_IO_FREESCALE_SPI1_PIN_SOUT,
-    CYGHWR_IO_FREESCALE_SPI1_PIN_SCK
-};
-
 // SPI chip select pins.
 static const cyg_uint32 spi1_cs_pins[] = {
 #ifdef CYGHWR_FREESCALE_DSPI1_CS0
@@ -255,137 +273,32 @@ static const cyg_uint32 spi1_cs_pins[] =
 };
 
 #ifdef CYGINT_DEVS_SPI_DSPI1_USES_DMA
-static volatile
-cyg_uint32 dspi1_pushque[CYGNUM_DEVS_SPI_FREESCALE_DSPI1_PUSHQUE_SIZE+4]
-           PUSHQUE_ALIGN EDMA_RAM_BUF_SECTION;
-
-static const cyghwr_hal_freescale_dma_chan_set_t dspi1_dma_chan[2] =
-{
-    {
-        .dma_src = FREESCALE_DMAMUX_SRC_SPI1_TX
-        | FREESCALE_DMAMUX_CHCFG_ENBL_M,
-        .dma_chan_i = CYGHWR_DEVS_SPI_FREESCALE_DSPI1_TX_DMA_CHAN,
-        .dma_prio = CYGNUM_DEVS_SPI_FREESCALE_DSPI1_TX_DMA_PRI,
-    },
-    {
-        .dma_src = FREESCALE_DMAMUX_SRC_SPI1_RX
-        | FREESCALE_DMAMUX_CHCFG_ENBL_M,
-        .dma_chan_i = CYGHWR_DEVS_SPI_FREESCALE_DSPI1_RX_DMA_CHAN,
-        .dma_prio = CYGNUM_DEVS_SPI_FREESCALE_DSPI1_RX_DMA_PRI,
-    }
-};
-
-static cyghwr_hal_freescale_dma_set_t dspi1_dma_set = {
-    .chan_p = dspi1_dma_chan,
-    .chan_n = 2
-};
-
-static const cyghwr_hal_freescale_edma_tcd_t dspi1_dma_tcd_tx_ini =
-{
-        .saddr =  (cyg_uint32 *) dspi1_pushque,
-        .soff = 4,
-        .attr = FREESCALE_EDMA_ATTR_SSIZE(FREESCALE_EDMA_ATTR_SIZE_32) |
-                FREESCALE_EDMA_ATTR_DSIZE(FREESCALE_EDMA_ATTR_SIZE_32) |
-                FREESCALE_EDMA_ATTR_SMOD(0) |
-                FREESCALE_EDMA_ATTR_DMOD(0),
-        .daddr = (cyg_uint32 *)&CYGADDR_IO_SPI_FREESCALE_DSPI1_P->pushr,
-        .doff = 0,
-        .nbytes.mlno = 4,
-        .slast = 0,
-        .citer.elinkno = 1,
-        {.dlast = 0},
-        .biter.elinkno = 1,
-        .csr = DSPI_DMA_BANDWIDTH
-};
-
-
-static const cyghwr_hal_freescale_edma_tcd_t dspi1_dma_tcd_rx_ini =
-{
-        .saddr = (cyg_uint32 *)&CYGADDR_IO_SPI_FREESCALE_DSPI1_P->popr,
-        .soff = 0,
-        .attr = FREESCALE_EDMA_ATTR_SSIZE(FREESCALE_EDMA_ATTR_SIZE_32) |
-                FREESCALE_EDMA_ATTR_DSIZE(FREESCALE_EDMA_ATTR_SIZE_32) |
-                FREESCALE_EDMA_ATTR_SMOD(0) |
-                FREESCALE_EDMA_ATTR_DMOD(0),
-        .daddr = NULL,
-        .doff = 4,
-        .nbytes.mlno = 4,
-        .slast = 0,
-        .citer.elinkno = 1,
-        {.dlast = 0},
-        .biter.elinkno = 1,
-        .csr = DSPI_DMA_BANDWIDTH
-};
-
+  DSPI_EDMA_CHAN_SET(1);
+# define DSPI1_EDMA_SET_P DSPI_EDMA_SET_P_YES(1)
+# define DSPI1_EDMA_TCD DSPI_EDMA_TCD_YES(1)
+#else
+# define DSPI1_EDMA_SET_P DSPI_EDMA_SET_P_NULL(1)
+# define DSPI1_EDMA_TCD DSPI_EDMA_TCD_NULL(1)
 #endif // CYGINT_DEVS_SPI_DSPI1_USES_DMA
 
-static const cyg_spi_freescale_dspi_bus_setup_t dspi1_setup = {
-    .dspi_p          = CYGADDR_IO_SPI_FREESCALE_DSPI1_P,
-#ifdef CYGINT_DEVS_SPI_DSPI1_USES_DMA
-    .dma_set_p       = &dspi1_dma_set,
-#else
-    .dma_set_p       = NULL,
-#endif
-    .intr_num        = CYGNUM_HAL_INTERRUPT_SPI1,
-    .intr_prio       = CYGNUM_DEVS_SPI_FREESCALE_DSPI1_ISR_PRI,
-    .spi_pin_list_p  = spi1_pins,
-    .cs_pin_list_p   = spi1_cs_pins,
-    .cs_pin_num      = sizeof(spi1_cs_pins)/sizeof(spi1_cs_pins[0]),
-    .mcr_opt         = CYGHWR_FREESCALE_DSPI1_MCR_PCSSE |
-                       FREESCALE_DSPI_MCR_PCSIS(CYGHWR_DEVS_SPI_FREESCALE_DSPI1_PCSIS)
-};
+DSPI_BUS_PINS(1);
+DSPI_BUS_SETUP(1);
+DSPI_BUS(1);
 
-cyg_spi_freescale_dspi_bus_t cyg_spi_dspi_bus1 = {
-    .spi_bus.spi_transaction_begin    = dspi_transaction_begin,
-    .spi_bus.spi_transaction_transfer = dspi_transaction_transfer,
-    .spi_bus.spi_transaction_tick     = dspi_transaction_tick,
-    .spi_bus.spi_transaction_end      = dspi_transaction_end,
-    .spi_bus.spi_get_config           = dspi_get_config,
-    .spi_bus.spi_set_config           = dspi_set_config,
-    .setup_p                          = &dspi1_setup,
-#ifdef CYGINT_DEVS_SPI_DSPI1_USES_DMA
-    .tx_dma_tcd_p = &CYGHWR_IO_FREESCALE_EDMA0_P->
-                     tcd[CYGHWR_DEVS_SPI_FREESCALE_DSPI1_TX_DMA_CHAN],
-    .rx_dma_tcd_p = &CYGHWR_IO_FREESCALE_EDMA0_P->
-    tcd[CYGHWR_DEVS_SPI_FREESCALE_DSPI1_RX_DMA_CHAN],
-    .tx_dma_tcd_ini_p = &dspi1_dma_tcd_tx_ini,
-    .rx_dma_tcd_ini_p = &dspi1_dma_tcd_rx_ini,
-    .pushque_p = dspi1_pushque,
-#else // CYGINT_DEVS_SPI_DSPI1_USES_DMA
-    .tx_dma_tcd_p = NULL,
-    .rx_dma_tcd_p = NULL,
-    .tx_dma_tcd_ini_p = NULL,
-    .rx_dma_tcd_ini_p = NULL,
-    .pushque_p = NULL,
-#endif // CYGINT_DEVS_SPI_DSPI1_USES_DMA
-    .pushque_n = CYGNUM_DEVS_SPI_FREESCALE_DSPI1_PUSHQUE_SIZE,
-    .txfifo_n = CYGHWR_DEVS_SPI_FREESCALE_DSPI_FIFO_SIZE,
-    .rxfifo_n = CYGHWR_DEVS_SPI_FREESCALE_DSPI_FIFO_SIZE
-};
-#endif
+#endif // CYGHWR_DEVS_SPI_FREESCALE_DSPI1
 
-// DSPI2 BUS =================================================================
+// DSPI BUS 2 ================================================================
 #ifdef CYGHWR_DEVS_SPI_FREESCALE_DSPI2
 
 #define  CYGBLD_DSPI2_TCD_SECTION \
     CYGBLD_ATTRIB_SECTION(CYGOPT_DEVS_SPI_FREESCALE_DSPI2_TCD_SECTION)
 
-extern cyg_spi_freescale_dspi_bus_t cyg_spi_dspi_bus2;
-
-// Pinonomy -------------------------------------------------------------------
-
 #ifdef CYHGWR_DEVS_SPI_FREESCALE_DSPI2_PCSS
 #define CYGHWR_FREESCALE_DSPI2_MCR_PCSSE FREESCALE_DSPI_MCR_PCSSE_M
 #else
 #define CYGHWR_FREESCALE_DSPI2_MCR_PCSSE 0
 #endif
 
-static const cyg_uint32 spi2_pins[] = {
-    CYGHWR_IO_FREESCALE_SPI2_PIN_SIN,
-    CYGHWR_IO_FREESCALE_SPI2_PIN_SOUT,
-    CYGHWR_IO_FREESCALE_SPI2_PIN_SCK
-};
-
 // SPI chip select pins.
 static const cyg_uint32 spi2_cs_pins[] = {
 #ifdef CYGHWR_FREESCALE_DSPI2_CS0
@@ -409,114 +322,264 @@ static const cyg_uint32 spi2_cs_pins[] =
 };
 
 #ifdef CYGINT_DEVS_SPI_DSPI2_USES_DMA
-static volatile
-cyg_uint32 dspi2_pushque[CYGNUM_DEVS_SPI_FREESCALE_DSPI2_PUSHQUE_SIZE+4] PUSHQUE_ALIGN;
+  DSPI_EDMA_CHAN_SET(2);
+# define DSPI2_EDMA_SET_P DSPI_EDMA_SET_P_YES(2)
+# define DSPI2_EDMA_TCD DSPI_EDMA_TCD_YES(2)
+#else
+# define DSPI2_EDMA_SET_P DSPI_EDMA_SET_P_NULL(2)
+# define DSPI2_EDMA_TCD DSPI_EDMA_TCD_NULL(2)
+#endif // CYGINT_DEVS_SPI_DSPI2_USES_DMA
+
+DSPI_BUS_PINS(2);
+DSPI_BUS_SETUP(2);
+DSPI_BUS(2);
+
+#endif // CYGHWR_DEVS_SPI_FREESCALE_DSPI2
+
+// DSPI BUS 3 ================================================================
+#ifdef CYGHWR_DEVS_SPI_FREESCALE_DSPI3
+
+#define  CYGBLD_DSPI3_TCD_SECTION \
+    CYGBLD_ATTRIB_SECTION(CYGOPT_DEVS_SPI_FREESCALE_DSPI3_TCD_SECTION)
 
-static const cyghwr_hal_freescale_dma_chan_set_t dspi2_dma_chan[] =
-{
-    {
-        .dma_src = FREESCALE_DMAMUX_SRC_SPI2_TX
-        | FREESCALE_DMAMUX_CHCFG_ENBL_M,
-        .dma_chan_i = CYGHWR_DEVS_SPI_FREESCALE_DSPI2_TX_DMA_CHAN,
-        .dma_prio = CYGNUM_DEVS_SPI_FREESCALE_DSPI2_TX_DMA_PRI,
-    },
-    {
-        .dma_src = FREESCALE_DMAMUX_SRC_SPI2_RX
-        | FREESCALE_DMAMUX_CHCFG_ENBL_M,
-        .dma_chan_i = CYGHWR_DEVS_SPI_FREESCALE_DSPI2_RX_DMA_CHAN,
-        .dma_prio = CYGNUM_DEVS_SPI_FREESCALE_DSPI2_RX_DMA_PRI,
-    }
+#ifdef CYHGWR_DEVS_SPI_FREESCALE_DSPI3_PCSS
+#define CYGHWR_FREESCALE_DSPI3_MCR_PCSSE FREESCALE_DSPI_MCR_PCSSE_M
+#else
+#define CYGHWR_FREESCALE_DSPI3_MCR_PCSSE 0
+#endif
+
+// SPI chip select pins.
+static const cyg_uint32 spi3_cs_pins[] = {
+#ifdef CYGHWR_FREESCALE_DSPI3_CS0
+    CYGHWR_IO_FREESCALE_SPI3_PIN_CS0,
+#endif
+#ifdef CYGHWR_FREESCALE_DSPI3_CS1
+    CYGHWR_IO_FREESCALE_SPI3_PIN_CS1,
+#endif
+#ifdef CYGHWR_FREESCALE_DSPI3_CS2
+    CYGHWR_IO_FREESCALE_SPI3_PIN_CS2,
+#endif
+#ifdef CYGHWR_FREESCALE_DSPI3_CS3
+    CYGHWR_IO_FREESCALE_SPI3_PIN_CS3,
+#endif
+#ifdef CYGHWR_FREESCALE_DSPI3_CS4
+    CYGHWR_IO_FREESCALE_SPI3_PIN_CS4,
+#endif
+#ifdef CYGHWR_FREESCALE_DSPI3_CS5
+    CYGHWR_IO_FREESCALE_SPI3_PIN_CS5
+#endif
 };
 
-static cyghwr_hal_freescale_dma_set_t dspi2_dma_set = {
-    .chan_p = dspi2_dma_chan,
-    .chan_n = 2
-};
+#ifdef CYGINT_DEVS_SPI_DSPI3_USES_DMA
+  DSPI_EDMA_CHAN_SET(3);
+# define DSPI3_EDMA_SET_P DSPI_EDMA_SET_P_YES(3)
+# define DSPI3_EDMA_TCD DSPI_EDMA_TCD_YES(3)
+#else
+# define DSPI3_EDMA_SET_P DSPI_EDMA_SET_P_NULL(3)
+# define DSPI3_EDMA_TCD DSPI_EDMA_TCD_NULL(3)
+#endif // CYGINT_DEVS_SPI_DSPI3_USES_DMA
+
+DSPI_BUS_PINS(3);
+DSPI_BUS_SETUP(3);
+DSPI_BUS(3);
+
+#endif // CYGHWR_DEVS_SPI_FREESCALE_DSPI3
+
+// DSPI BUS 4 ================================================================
+#ifdef CYGHWR_DEVS_SPI_FREESCALE_DSPI4
+
+#define  CYGBLD_DSPI4_TCD_SECTION \
+    CYGBLD_ATTRIB_SECTION(CYGOPT_DEVS_SPI_FREESCALE_DSPI4_TCD_SECTION)
 
-static const cyghwr_hal_freescale_edma_tcd_t dspi2_dma_tcd_tx_ini =
-{
-        .saddr =  (cyg_uint32 *) dspi2_pushque,
-        .soff = 4,
-        .attr = FREESCALE_EDMA_ATTR_SSIZE(FREESCALE_EDMA_ATTR_SIZE_32) |
-                FREESCALE_EDMA_ATTR_DSIZE(FREESCALE_EDMA_ATTR_SIZE_32) |
-                FREESCALE_EDMA_ATTR_SMOD(0) |
-                FREESCALE_EDMA_ATTR_DMOD(0),
-        .daddr = (cyg_uint32 *)&CYGADDR_IO_SPI_FREESCALE_DSPI2_P->pushr,
-        .doff = 0,
-        .nbytes.mlno = 4,
-        .slast = 0,
-        .citer.elinkno = 1,
-        {.dlast = 0},
-        .biter.elinkno = 1,
-        .csr = DSPI_DMA_BANDWIDTH
+#ifdef CYHGWR_DEVS_SPI_FREESCALE_DSPI4_PCSS
+#define CYGHWR_FREESCALE_DSPI4_MCR_PCSSE FREESCALE_DSPI_MCR_PCSSE_M
+#else
+#define CYGHWR_FREESCALE_DSPI4_MCR_PCSSE 0
+#endif
+
+// SPI chip select pins.
+static const cyg_uint32 spi4_cs_pins[] = {
+#ifdef CYGHWR_FREESCALE_DSPI4_CS0
+    CYGHWR_IO_FREESCALE_SPI4_PIN_CS0,
+#endif
+#ifdef CYGHWR_FREESCALE_DSPI4_CS1
+    CYGHWR_IO_FREESCALE_SPI4_PIN_CS1,
+#endif
+#ifdef CYGHWR_FREESCALE_DSPI4_CS2
+    CYGHWR_IO_FREESCALE_SPI4_PIN_CS2,
+#endif
+#ifdef CYGHWR_FREESCALE_DSPI4_CS3
+    CYGHWR_IO_FREESCALE_SPI4_PIN_CS3,
+#endif
+#ifdef CYGHWR_FREESCALE_DSPI4_CS4
+    CYGHWR_IO_FREESCALE_SPI4_PIN_CS4,
+#endif
+#ifdef CYGHWR_FREESCALE_DSPI4_CS5
+    CYGHWR_IO_FREESCALE_SPI4_PIN_CS5
+#endif
 };
 
+#ifdef CYGINT_DEVS_SPI_DSPI4_USES_DMA
+  DSPI_EDMA_CHAN_SET(4);
+# define DSPI4_EDMA_SET_P DSPI_EDMA_SET_P_YES(4)
+# define DSPI4_EDMA_TCD DSPI_EDMA_TCD_YES(4)
+#else
+# define DSPI4_EDMA_SET_P DSPI_EDMA_SET_P_NULL(4)
+# define DSPI4_EDMA_TCD DSPI_EDMA_TCD_NULL(4)
+#endif // CYGINT_DEVS_SPI_DSPI4_USES_DMA
 
-static const cyghwr_hal_freescale_edma_tcd_t dspi2_dma_tcd_rx_ini =
-{
-        .saddr = (cyg_uint32 *)&CYGADDR_IO_SPI_FREESCALE_DSPI2_P->popr,
-        .soff = 0,
-        .attr = FREESCALE_EDMA_ATTR_SSIZE(FREESCALE_EDMA_ATTR_SIZE_32) |
-                FREESCALE_EDMA_ATTR_DSIZE(FREESCALE_EDMA_ATTR_SIZE_32) |
-                FREESCALE_EDMA_ATTR_SMOD(0) |
-                FREESCALE_EDMA_ATTR_DMOD(0),
-        .daddr = NULL,
-        .doff = 4,
-        .nbytes.mlno = 4,
-        .slast = 0,
-        .citer.elinkno = 1,
-        {.dlast = 0},
-        .biter.elinkno = 1,
-        .csr = DSPI_DMA_BANDWIDTH
+DSPI_BUS_PINS(4);
+DSPI_BUS_SETUP(4);
+DSPI_BUS(4);
+
+#endif // CYGHWR_DEVS_SPI_FREESCALE_DSPI4
+
+// DSPI BUS 5 ================================================================
+#ifdef CYGHWR_DEVS_SPI_FREESCALE_DSPI5
+
+#define  CYGBLD_DSPI5_TCD_SECTION \
+    CYGBLD_ATTRIB_SECTION(CYGOPT_DEVS_SPI_FREESCALE_DSPI5_TCD_SECTION)
+
+#ifdef CYHGWR_DEVS_SPI_FREESCALE_DSPI5_PCSS
+#define CYGHWR_FREESCALE_DSPI5_MCR_PCSSE FREESCALE_DSPI_MCR_PCSSE_M
+#else
+#define CYGHWR_FREESCALE_DSPI5_MCR_PCSSE 0
+#endif
+
+// SPI chip select pins.
+static const cyg_uint32 spi5_cs_pins[] = {
+#ifdef CYGHWR_FREESCALE_DSPI5_CS0
+    CYGHWR_IO_FREESCALE_SPI5_PIN_CS0,
+#endif
+#ifdef CYGHWR_FREESCALE_DSPI5_CS1
+    CYGHWR_IO_FREESCALE_SPI5_PIN_CS1,
+#endif
+#ifdef CYGHWR_FREESCALE_DSPI5_CS2
+    CYGHWR_IO_FREESCALE_SPI5_PIN_CS2,
+#endif
+#ifdef CYGHWR_FREESCALE_DSPI5_CS3
+    CYGHWR_IO_FREESCALE_SPI5_PIN_CS3,
+#endif
+#ifdef CYGHWR_FREESCALE_DSPI5_CS4
+    CYGHWR_IO_FREESCALE_SPI5_PIN_CS4,
+#endif
+#ifdef CYGHWR_FREESCALE_DSPI5_CS5
+    CYGHWR_IO_FREESCALE_SPI5_PIN_CS5
+#endif
 };
 
-#endif // CYGINT_DEVS_SPI_DSPI2_USES_DMA
+#ifdef CYGINT_DEVS_SPI_DSPI5_USES_DMA
+  DSPI_EDMA_CHAN_SET(5);
+# define DSPI5_EDMA_SET_P DSPI_EDMA_SET_P_YES(5)
+# define DSPI5_EDMA_TCD DSPI_EDMA_TCD_YES(5)
+#else
+# define DSPI5_EDMA_SET_P DSPI_EDMA_SET_P_NULL(5)
+# define DSPI5_EDMA_TCD DSPI_EDMA_TCD_NULL(5)
+#endif // CYGINT_DEVS_SPI_DSPI5_USES_DMA
 
-static const cyg_spi_freescale_dspi_bus_setup_t dspi2_setup = {
-    .dspi_p          = CYGADDR_IO_SPI_FREESCALE_DSPI2_P,
-#ifdef CYGINT_DEVS_SPI_DSPI2_USES_DMA
-    .dma_set_p       = &dspi2_dma_set,
+DSPI_BUS_PINS(5);
+DSPI_BUS_SETUP(5);
+DSPI_BUS(5);
+
+#endif // CYGHWR_DEVS_SPI_FREESCALE_DSPI5
+
+// DSPI BUS 6 ================================================================
+#ifdef CYGHWR_DEVS_SPI_FREESCALE_DSPI6
+
+#define  CYGBLD_DSPI6_TCD_SECTION \
+    CYGBLD_ATTRIB_SECTION(CYGOPT_DEVS_SPI_FREESCALE_DSPI6_TCD_SECTION)
+
+#ifdef CYHGWR_DEVS_SPI_FREESCALE_DSPI6_PCSS
+#define CYGHWR_FREESCALE_DSPI6_MCR_PCSSE FREESCALE_DSPI_MCR_PCSSE_M
 #else
-    .dma_set_p       = NULL,
+#define CYGHWR_FREESCALE_DSPI6_MCR_PCSSE 0
+#endif
+
+// SPI chip select pins.
+static const cyg_uint32 spi6_cs_pins[] = {
+#ifdef CYGHWR_FREESCALE_DSPI6_CS0
+    CYGHWR_IO_FREESCALE_SPI6_PIN_CS0,
+#endif
+#ifdef CYGHWR_FREESCALE_DSPI6_CS1
+    CYGHWR_IO_FREESCALE_SPI6_PIN_CS1,
 #endif
-    .intr_num        = CYGNUM_HAL_INTERRUPT_SPI2,
-    .intr_prio       = CYGNUM_DEVS_SPI_FREESCALE_DSPI2_ISR_PRI,
-    .spi_pin_list_p  = spi2_pins,
-    .cs_pin_list_p   = spi2_cs_pins,
-    .cs_pin_num      = sizeof(spi2_cs_pins)/sizeof(spi2_cs_pins[0]),
-    .mcr_opt         = CYGHWR_FREESCALE_DSPI2_MCR_PCSSE |
-                       FREESCALE_DSPI_MCR_PCSIS(CYGHWR_DEVS_SPI_FREESCALE_DSPI2_PCSIS)
+#ifdef CYGHWR_FREESCALE_DSPI6_CS2
+    CYGHWR_IO_FREESCALE_SPI6_PIN_CS2,
+#endif
+#ifdef CYGHWR_FREESCALE_DSPI6_CS3
+    CYGHWR_IO_FREESCALE_SPI6_PIN_CS3,
+#endif
+#ifdef CYGHWR_FREESCALE_DSPI6_CS4
+    CYGHWR_IO_FREESCALE_SPI6_PIN_CS4,
+#endif
+#ifdef CYGHWR_FREESCALE_DSPI6_CS5
+    CYGHWR_IO_FREESCALE_SPI6_PIN_CS5
+#endif
 };
 
-cyg_spi_freescale_dspi_bus_t cyg_spi_dspi_bus2 = {
-    .spi_bus.spi_transaction_begin    = dspi_transaction_begin,
-    .spi_bus.spi_transaction_transfer = dspi_transaction_transfer,
-    .spi_bus.spi_transaction_tick     = dspi_transaction_tick,
-    .spi_bus.spi_transaction_end      = dspi_transaction_end,
-    .spi_bus.spi_get_config           = dspi_get_config,
-    .spi_bus.spi_set_config           = dspi_set_config,
-    .setup_p                          = &dspi2_setup,
-#ifdef CYGINT_DEVS_SPI_DSPI2_USES_DMA
-    .tx_dma_tcd_p = &CYGHWR_IO_FREESCALE_EDMA0_P->
-                     tcd[CYGHWR_DEVS_SPI_FREESCALE_DSPI2_TX_DMA_CHAN],
-    .rx_dma_tcd_p = &CYGHWR_IO_FREESCALE_EDMA0_P->
-    tcd[CYGHWR_DEVS_SPI_FREESCALE_DSPI2_RX_DMA_CHAN],
-    .tx_dma_tcd_ini_p = &dspi2_dma_tcd_tx_ini,
-    .rx_dma_tcd_ini_p = &dspi2_dma_tcd_rx_ini,
-    .pushque_p = dspi2_pushque,
-#else // CYGINT_DEVS_SPI_DSPI2_USES_DMA
-    .tx_dma_tcd_p = NULL,
-    .rx_dma_tcd_p = NULL,
-    .tx_dma_tcd_ini_p = NULL,
-    .rx_dma_tcd_ini_p = NULL,
-    .pushque_p = NULL,
-#endif // CYGINT_DEVS_SPI_DSPI2_USES_DMA
-    .pushque_n = CYGNUM_DEVS_SPI_FREESCALE_DSPI2_PUSHQUE_SIZE,
-    .txfifo_n = CYGHWR_DEVS_SPI_FREESCALE_DSPI_FIFO_SIZE,
-    .rxfifo_n = CYGHWR_DEVS_SPI_FREESCALE_DSPI_FIFO_SIZE
-};
+#ifdef CYGINT_DEVS_SPI_DSPI6_USES_DMA
+  DSPI_EDMA_CHAN_SET(6);
+# define DSPI6_EDMA_SET_P DSPI_EDMA_SET_P_YES(6)
+# define DSPI6_EDMA_TCD DSPI_EDMA_TCD_YES(6)
+#else
+# define DSPI6_EDMA_SET_P DSPI_EDMA_SET_P_NULL(6)
+# define DSPI6_EDMA_TCD DSPI_EDMA_TCD_NULL(6)
+#endif // CYGINT_DEVS_SPI_DSPI6_USES_DMA
+
+DSPI_BUS_PINS(6);
+DSPI_BUS_SETUP(6);
+DSPI_BUS(6);
+
+#endif // CYGHWR_DEVS_SPI_FREESCALE_DSPI6
+
+// DSPI BUS 7 ================================================================
+#ifdef CYGHWR_DEVS_SPI_FREESCALE_DSPI7
+
+#define  CYGBLD_DSPI7_TCD_SECTION \
+    CYGBLD_ATTRIB_SECTION(CYGOPT_DEVS_SPI_FREESCALE_DSPI7_TCD_SECTION)
+
+#ifdef CYHGWR_DEVS_SPI_FREESCALE_DSPI7_PCSS
+#define CYGHWR_FREESCALE_DSPI7_MCR_PCSSE FREESCALE_DSPI_MCR_PCSSE_M
+#else
+#define CYGHWR_FREESCALE_DSPI7_MCR_PCSSE 0
 #endif
 
+// SPI chip select pins.
+static const cyg_uint32 spi7_cs_pins[] = {
+#ifdef CYGHWR_FREESCALE_DSPI7_CS0
+    CYGHWR_IO_FREESCALE_SPI7_PIN_CS0,
+#endif
+#ifdef CYGHWR_FREESCALE_DSPI7_CS1
+    CYGHWR_IO_FREESCALE_SPI7_PIN_CS1,
+#endif
+#ifdef CYGHWR_FREESCALE_DSPI7_CS2
+    CYGHWR_IO_FREESCALE_SPI7_PIN_CS2,
+#endif
+#ifdef CYGHWR_FREESCALE_DSPI7_CS3
+    CYGHWR_IO_FREESCALE_SPI7_PIN_CS3,
+#endif
+#ifdef CYGHWR_FREESCALE_DSPI7_CS4
+    CYGHWR_IO_FREESCALE_SPI7_PIN_CS4,
+#endif
+#ifdef CYGHWR_FREESCALE_DSPI7_CS5
+    CYGHWR_IO_FREESCALE_SPI7_PIN_CS5
+#endif
+};
+
+#ifdef CYGINT_DEVS_SPI_DSPI7_USES_DMA
+  DSPI_EDMA_CHAN_SET(7);
+# define DSPI7_EDMA_SET_P DSPI_EDMA_SET_P_YES(7)
+# define DSPI7_EDMA_TCD DSPI_EDMA_TCD_YES(7)
+#else
+# define DSPI7_EDMA_SET_P DSPI_EDMA_SET_P_NULL(7)
+# define DSPI7_EDMA_TCD DSPI_EDMA_TCD_NULL(7)
+#endif // CYGINT_DEVS_SPI_DSPI7_USES_DMA
+
+DSPI_BUS_PINS(7);
+DSPI_BUS_SETUP(7);
+DSPI_BUS(7);
+
+#endif // CYGHWR_DEVS_SPI_FREESCALE_DSPI7
 
 //=============================================================================
 #endif // SPI_FREESCALE_DSPI_BUSES_INL
--- a/packages/devs/spi/freescale/dspi/current/tests/spi_loopback.c
+++ b/packages/devs/spi/freescale/dspi/current/tests/spi_loopback.c
@@ -239,7 +239,7 @@ void run_test_4 (cyg_bool polled)
 void run_tests (void)
 {
     bool polled = true;
-    diag_printf ("Running Kinetis SPI driver loopback tests.\n");
+    diag_printf ("Running Freescale Kinetis/MPC5xxx DSPI driver loopback tests.\n");
 
     diag_printf ("\nPolled\n");
     run_test_tick (polled, 1024);