Mercurial > nand-ecoscentric
changeset 3280:28a7b8d2b8fe
Backout failed cvs2hg conversion commit
| author | alexs |
|---|---|
| date | Fri, 22 Feb 2013 19:38:44 +0000 |
| parents | b1adab1ffd9b |
| children | 382872a76fa5 |
| 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 packages/hal/misc/freescale/edma/current/ChangeLog packages/hal/misc/freescale/edma/current/include/freescale_edma.h packages/hal/misc/freescale/edma/current/src/hal_freescale_edma.c packages/infra/current/ChangeLog packages/infra/current/include/cyg_type.h |
| diffstat | 9 files changed, 404 insertions(+), 540 deletions(-) [+] |
line wrap: on
line diff
--- a/packages/devs/spi/freescale/dspi/current/ChangeLog +++ b/packages/devs/spi/freescale/dspi/current/ChangeLog @@ -1,11 +1,3 @@ -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 || CYGPKG_HAL_POWERPC_MPC5xxx + requires CYGPKG_HAL_CORTEXM_KINETIS hardware include_dir cyg/io @@ -115,7 +115,7 @@ cdl_package CYGPKG_DEVS_SPI_FREESCALE_DS } - for { set ::spibus 0 } { $::spibus < 8 } { incr ::spibus } { + for { set ::spibus 0 } { $::spibus < 3 } { incr ::spibus } { cdl_interface CYGINT_DEVS_SPI_FREESCALE_DSPI[set ::spibus] { display "Number of devices using DSPI bus [set ::spibus]" @@ -126,7 +126,6 @@ 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 @@ -296,7 +295,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 provided by HAL" + description "Interrupt priority set-point is provtded bu 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, 2013 Free Software Foundation, Inc. +// Copyright (C) 2011 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,151 +56,29 @@ //----------------------------------------------------------------------------- // Instantiate the bus state data structures. -// Some auxiliary macros -#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 ================================================================ +// DSPI0 BUS ================================================================= #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 @@ -224,32 +102,136 @@ static const cyg_uint32 spi0_cs_pins[] = }; #ifdef CYGINT_DEVS_SPI_DSPI0_USES_DMA - 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) +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 +}; + #endif // CYGINT_DEVS_SPI_DSPI0_USES_DMA -DSPI_BUS_PINS(0); -DSPI_BUS_SETUP(0); -DSPI_BUS(0); +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) +}; -#endif // CYGHWR_DEVS_SPI_FREESCALE_DSPI0 +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 -// DSPI BUS 1 ================================================================ +// DSPI1 BUS ================================================================= #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 @@ -273,32 +255,137 @@ static const cyg_uint32 spi1_cs_pins[] = }; #ifdef CYGINT_DEVS_SPI_DSPI1_USES_DMA - 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) +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 +}; + #endif // CYGINT_DEVS_SPI_DSPI1_USES_DMA -DSPI_BUS_PINS(1); -DSPI_BUS_SETUP(1); -DSPI_BUS(1); +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) +}; -#endif // CYGHWR_DEVS_SPI_FREESCALE_DSPI1 +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 -// DSPI BUS 2 ================================================================ +// DSPI2 BUS ================================================================= #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 @@ -322,264 +409,114 @@ static const cyg_uint32 spi2_cs_pins[] = }; #ifdef CYGINT_DEVS_SPI_DSPI2_USES_DMA - 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 +static volatile +cyg_uint32 dspi2_pushque[CYGNUM_DEVS_SPI_FREESCALE_DSPI2_PUSHQUE_SIZE+4] PUSHQUE_ALIGN; -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 +static cyghwr_hal_freescale_dma_set_t dspi2_dma_set = { + .chan_p = dspi2_dma_chan, + .chan_n = 2 +}; -// 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 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 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) - -#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 +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 }; -#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) +#endif // CYGINT_DEVS_SPI_DSPI2_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, #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 - -DSPI_BUS_PINS(4); -DSPI_BUS_SETUP(4); -DSPI_BUS(4); + .dma_set_p = NULL, +#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) +}; -#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 +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 +}; #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 -}; - -#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 - -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 -#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 -#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 -}; - -#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 Freescale Kinetis/MPC5xxx DSPI driver loopback tests.\n"); + diag_printf ("Running Kinetis SPI driver loopback tests.\n"); diag_printf ("\nPolled\n"); run_test_tick (polled, 1024);
--- a/packages/hal/misc/freescale/edma/current/ChangeLog +++ b/packages/hal/misc/freescale/edma/current/ChangeLog @@ -1,10 +1,3 @@ -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 - (see Bugzilla 1001752). - 2012-05-04 Ilija Kocho <ilijak@siva.com.mk> * cdl/hal_freescale_edma.cdl
--- a/packages/hal/misc/freescale/edma/current/include/freescale_edma.h +++ b/packages/hal/misc/freescale/edma/current/include/freescale_edma.h @@ -10,7 +10,7 @@ // ####ECOSGPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of eCos, the Embedded Configurable Operating System. -// Copyright (C) 2011, 2013 Free Software Foundation, Inc. +// Copyright (C) 2011 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 @@ -89,21 +89,37 @@ typedef volatile struct cyghwr_hal_frees //--------------------------------------------------------------------------- // eDMA +// Indices for cyghwr_hal_freescale_edma_t::dchpri[] +enum { + FREESCALE_DMA_PRI_CH3, FREESCALE_DMA_PRI_CH2, + FREESCALE_DMA_PRI_CH1, FREESCALE_DMA_PRI_CH0, + FREESCALE_DMA_PRI_CH7, FREESCALE_DMA_PRI_CH6, + FREESCALE_DMA_PRI_CH5, FREESCALE_DMA_PRI_CH4, + FREESCALE_DMA_PRI_CH11, FREESCALE_DMA_PRI_CH10, + FREESCALE_DMA_PRI_CH9, FREESCALE_DMA_PRI_CH8, + FREESCALE_DMA_PRI_CH15, FREESCALE_DMA_PRI_CH14, + FREESCALE_DMA_PRI_CH13, FREESCALE_DMA_PRI_CH12 +#if CYGNUM_HAL_FREESCALE_EDMA_CHAN_NUM > 16 + , + FREESCALE_DMA_PRI_CH19, FREESCALE_DMA_PRI_CH18, + FREESCALE_DMA_PRI_CH17, FREESCALE_DMA_PRI_CH16, + FREESCALE_DMA_PRI_CH23, FREESCALE_DMA_PRI_CH22, + FREESCALE_DMA_PRI_CH21, FREESCALE_DMA_PRI_CH20, + FREESCALE_DMA_PRI_CH27, FREESCALE_DMA_PRI_CH26, + FREESCALE_DMA_PRI_CH25, FREESCALE_DMA_PRI_CH24, + FREESCALE_DMA_PRI_CH31, FREESCALE_DMA_PRI_CH30, + FREESCALE_DMA_PRI_CH29, FREESCALE_DMA_PRI_CH28 +#endif +}; + // Transfer control descriptor typedef volatile struct cyghwr_hal_freescale_edma_tcd_s cyghwr_hal_freescale_edma_tcd_t; #define CYGBLD_FREESCALE_EDMA_TCD_ALIGN CYGBLD_ATTRIB_ALIGN(32) struct cyghwr_hal_freescale_edma_tcd_s { volatile void* saddr; // Source Address - -#if (CYG_BYTEORDER == CYG_MSBFIRST) // AKA Big endian - cyg_uint16 attr; // Transfer Attributes - cyg_uint16 soff; // Signed Source Address Offset -#else // AKA Little endian cyg_uint16 soff; // Signed Source Address Offset cyg_uint16 attr; // Transfer Attributes -#endif - union { cyg_uint32 mlno; // Minor Byte Count (Minor Loop Dis) // Signed Minor Loop Off: @@ -112,75 +128,44 @@ struct cyghwr_hal_freescale_edma_tcd_s { } nbytes; cyg_uint32 slast; // Last Source Address Adjustment volatile void *daddr; // Destination Address - -#if (CYG_BYTEORDER == CYG_MSBFIRST) // AKA Big endian - - union { // Current Minor Loop Link: - cyg_uint16 elinkyes; // Major Loop Count (Ch Lnkng Ena) - cyg_uint16 elinkno; // Major Loop Count (Ch Lnkng Dis) - } citer; - cyg_uint16 doff; // Signed Destination Address Offset -#else // AKA Little endian cyg_uint16 doff; // Signed Destination Address Offset union { // Current Minor Loop Link: cyg_uint16 elinkyes; // Major Loop Count (Ch Lnkng Ena) cyg_uint16 elinkno; // Major Loop Count (Ch Lnkng Dis) } citer; -#endif - union { cyg_uint32 dlast; // Last Dst Addr Adj/Scat Gath Addr cyghwr_hal_freescale_edma_tcd_t *sga; // Last Dst Addr Adj/Scat Gath Addr - } dlast_sga; - -#if (CYG_BYTEORDER == CYG_MSBFIRST) // AKA Big endian - union { // Beginning Minor Loop Link: - cyg_uint16 elinkno; // Major Loop Cnt (Ch Lnkng Dis) - cyg_uint16 elinkyes; // Major Loop Cnt (Ch Lnkng Ena) - } biter; - cyg_uint16 csr; // Control and Status -#else // AKA Little endian + }; cyg_uint16 csr; // Control and Status union { // Beginning Minor Loop Link: cyg_uint16 elinkno; // Major Loop Cnt (Ch Lnkng Dis) cyg_uint16 elinkyes; // Major Loop Cnt (Ch Lnkng Ena) } biter; -#endif }; // DMA - Peripheral register structure typedef volatile struct cyghwr_hal_freescale_edma_s { - cyg_uint32 cr; // Control Register // 0x0000 - cyg_uint32 es; // Error Status Register // 0x0004 - cyg_uint32 reserved_0; // 0x0008 - cyg_uint32 erq; // Enable Request Register // 0x000C - cyg_uint32 reserved_1; // 0x0010 - cyg_uint32 eei; // Enable Error Interrupt Register // 0x0014 -#if (CYG_BYTEORDER == CYG_MSBFIRST) // AKA Big endian - cyg_uint8 serq; // Set Enable Request Register // 0x0018 - cyg_uint8 cerq; // Clear Enable Request Register // 0x0019 - cyg_uint8 seei; // Set Enable Error Interrupt Register // 0x001A - cyg_uint8 ceei; // Clear Enable Error Interrupt Register // 0x001B - cyg_uint8 cint; // Clear Interrupt Request Register // 0x001C - cyg_uint8 cerr; // Clear Error Register // 0x001D - cyg_uint8 ssrt; // Set START Bit Register // 0x001E - cyg_uint8 cdne; // Clear DONE Status Bit Register // 0x001F -#else // AKA Little endian - cyg_uint8 ceei; // Clear Enable Error Interrupt Register - cyg_uint8 seei; // Set Enable Error Interrupt Register - cyg_uint8 cerq; // Clear Enable Request Register - cyg_uint8 serq; // Set Enable Request Register - cyg_uint8 cdne; // Clear DONE Status Bit Register - cyg_uint8 ssrt; // Set START Bit Register - cyg_uint8 cerr; // Clear Error Register - cyg_uint8 cint; // Clear Interrupt Request Register -#endif - cyg_uint32 reserved_2; // 0x0020 - cyg_uint32 irq; // Interrupt Request Register // 0x0024 - cyg_uint32 reserved_3; // 0x0028 - cyg_uint32 err; // Error Register // 0x002C - cyg_uint32 reserved_4; // 0x0030 - cyg_uint32 hrs; // Hardware Request Status Register // 0x0034 + cyg_uint32 cr; // Control Register + cyg_uint32 es; // Error Status Register + cyg_uint32 reserved_0; + cyg_uint32 erq; // Enable Request Register + cyg_uint32 reserved_1; + cyg_uint32 eei; // Enable Error Interrupt Register + cyg_uint8 ceei; // Clear Enable Error Interrupt Register + cyg_uint8 seei; // Set Enable Error Interrupt Register + cyg_uint8 cerq; // Clear Enable Request Register + cyg_uint8 serq; // Set Enable Request Register + cyg_uint8 cdne; // Clear DONE Status Bit Register + cyg_uint8 ssrt; // Set START Bit Register + cyg_uint8 cerr; // Clear Error Register + cyg_uint8 cint; // Clear Interrupt Request Register + cyg_uint32 reserved_2; + cyg_uint32 irq; // Interrupt Request Register + cyg_uint32 reserved_3; + cyg_uint32 err; // Error Register + cyg_uint32 reserved_4; + cyg_uint32 hrs; // Hardware Request Status Register cyg_uint8 reserved_5[0x8100 - (0x8034 + 4)]; cyg_uint8 dchpri[CYGNUM_HAL_FREESCALE_EDMA_CHAN_NUM]; // Priorities cyg_uint8 reserved_6[0x9000 - 0x8100 - CYGNUM_HAL_FREESCALE_EDMA_CHAN_NUM]; @@ -475,56 +460,56 @@ hal_freescale_edma_tcd_diag(cyghwr_hal_f hal_freescale_edma_transfer_diag (cyghwr_hal_freescale_edma_t *edma_p, cyg_uint8 chan_i, cyg_bool recurse); -CYGBLD_FORCE_INLINE void +__externC inline void hal_freescale_edma_erq_enable(cyghwr_hal_freescale_edma_t *edma_p, cyg_uint8 chan_i) { edma_p->serq = chan_i; } -CYGBLD_FORCE_INLINE void +__externC inline void hal_freescale_edma_erq_disable(cyghwr_hal_freescale_edma_t *edma_p, cyg_uint8 chan_i) { edma_p->cerq = chan_i; } -CYGBLD_FORCE_INLINE void +__externC inline void hal_freescale_edma_cleardone(cyghwr_hal_freescale_edma_t *edma_p, cyg_uint8 chan_i) { edma_p->cdne = chan_i; } -CYGBLD_FORCE_INLINE void +__externC inline void hal_freescale_edma_irq_enable(cyghwr_hal_freescale_edma_t *edma_p, cyg_uint8 chan_i) { edma_p->seei = chan_i; } -CYGBLD_FORCE_INLINE void +__externC inline void hal_freescale_edma_irq_disable(cyghwr_hal_freescale_edma_t *edma_p, cyg_uint8 chan_i) { edma_p->ceei = chan_i; } -CYGBLD_FORCE_INLINE void +__externC inline void hal_freescale_edma_irq_clear(cyghwr_hal_freescale_edma_t *edma_p, cyg_uint8 chan_i) { edma_p->cint = chan_i; } -CYGBLD_FORCE_INLINE void +__externC inline void hal_freescale_edma_transfer_clear(cyghwr_hal_freescale_edma_t *edma_p, cyg_uint8 chan_i) { edma_p->tcd[chan_i].csr &= ~FREESCALE_EDMA_CSR_DONE_M; } -CYGBLD_FORCE_INLINE void +__externC inline void hal_freescale_edma_transfer_start(cyghwr_hal_freescale_edma_t *edma_p, cyg_uint8 chan_i) {
--- a/packages/hal/misc/freescale/edma/current/src/hal_freescale_edma.c +++ b/packages/hal/misc/freescale/edma/current/src/hal_freescale_edma.c @@ -8,7 +8,7 @@ // ####ECOSGPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of eCos, the Embedded Configurable Operating System. -// Copyright (C) 2011, 2013 Free Software Foundation, Inc. +// Copyright (C) 2011 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 @@ -64,35 +64,7 @@ #include <cyg/hal/hal_if.h> // HAL header #include <cyg/hal/freescale_edma.h> // Freescale eDMA defs -// Channel priority register indexing -#if (CYG_BYTEORDER == CYG_MSBFIRST) // AKA Big endian - -#define EDMA_CHAN_PRIORITY_I(__chan_i) (__chan_i) - -#else // AKA Big endian -// Indices for cyghwr_hal_freescale_edma_t::dchpri[] -enum { - FREESCALE_DMA_PRI_CH3, FREESCALE_DMA_PRI_CH2, - FREESCALE_DMA_PRI_CH1, FREESCALE_DMA_PRI_CH0, - FREESCALE_DMA_PRI_CH7, FREESCALE_DMA_PRI_CH6, - FREESCALE_DMA_PRI_CH5, FREESCALE_DMA_PRI_CH4, - FREESCALE_DMA_PRI_CH11, FREESCALE_DMA_PRI_CH10, - FREESCALE_DMA_PRI_CH9, FREESCALE_DMA_PRI_CH8, - FREESCALE_DMA_PRI_CH15, FREESCALE_DMA_PRI_CH14, - FREESCALE_DMA_PRI_CH13, FREESCALE_DMA_PRI_CH12 -#if CYGNUM_HAL_FREESCALE_EDMA_CHAN_NUM > 16 - , - FREESCALE_DMA_PRI_CH19, FREESCALE_DMA_PRI_CH18, - FREESCALE_DMA_PRI_CH17, FREESCALE_DMA_PRI_CH16, - FREESCALE_DMA_PRI_CH23, FREESCALE_DMA_PRI_CH22, - FREESCALE_DMA_PRI_CH21, FREESCALE_DMA_PRI_CH20, - FREESCALE_DMA_PRI_CH27, FREESCALE_DMA_PRI_CH26, - FREESCALE_DMA_PRI_CH25, FREESCALE_DMA_PRI_CH24, - FREESCALE_DMA_PRI_CH31, FREESCALE_DMA_PRI_CH30, - FREESCALE_DMA_PRI_CH29, FREESCALE_DMA_PRI_CH28 -#endif -}; - +// Channel priority register index const cyg_uint8 const PRICHAN_I[CYGNUM_HAL_FREESCALE_EDMA_CHAN_NUM] = { FREESCALE_DMA_PRI_CH0, FREESCALE_DMA_PRI_CH1, @@ -116,10 +88,6 @@ const cyg_uint8 const PRICHAN_I[CYGNUM_H #endif }; -#define EDMA_CHAN_PRIORITY_I(__chan_i) (PRICHAN_I[__chan_i]) - -#endif - // Find an eDMA channel with given priority static volatile cyg_uint8* hal_freescale_edma_find_chan_with_pri(cyghwr_hal_freescale_edma_t *edma_p, @@ -177,14 +145,14 @@ hal_freescale_edma_init_1chan( } if((chan_p->dma_prio != FREESCALE_EDMA_DCHPRI_ASIS) && - (edma_p->dchpri[EDMA_CHAN_PRIORITY_I(chan_p->dma_chan_i)] != chan_p->dma_prio)) + (edma_p->dchpri[PRICHAN_I[chan_p->dma_chan_i]] != chan_p->dma_prio)) { group_i = chan_p->dma_chan_i >= CYGNUM_HAL_FREESCALE_EDMA_GROUP_SIZE ? 1 : 0; if((prev_ch_reqprio_p = hal_freescale_edma_find_chan_with_pri(edma_p, chan_p->dma_prio, group_i))) { - oldprio = edma_p->dchpri[EDMA_CHAN_PRIORITY_I(chan_p->dma_chan_i)]; - edma_p->dchpri[EDMA_CHAN_PRIORITY_I(chan_p->dma_chan_i)] = chan_p->dma_prio; + oldprio = edma_p->dchpri[PRICHAN_I[chan_p->dma_chan_i]]; + edma_p->dchpri[PRICHAN_I[chan_p->dma_chan_i]] = chan_p->dma_prio; *prev_ch_reqprio_p = oldprio; } } @@ -281,7 +249,7 @@ hal_freescale_edma_diag(const cyghwr_hal diag_printf("Chan %2d: CHCFG=0x%02x (%2d) DCHPRI=0x%02x dmamux[%c]=%p", chan_i, dmamux_p->chcfg[chan_i % 16], FREESCALE_DMAMUX_CHCFG_SOURCE(dmamux_p->chcfg[chan_i % 16]), - edma_p->dchpri[EDMA_CHAN_PRIORITY_I(chan_i)], + edma_p->dchpri[PRICHAN_I[chan_i]], CYGHWR_IO_FREESCALE_DMAMUX0_P == dmamux_p ? '0' : ( #if CYGNUM_HAL_FREESCALE_EDMA_CHAN_NUM > CYGNUM_HAL_FREESCALE_EDMA_GROUP_SIZE CYGHWR_IO_FREESCALE_DMAMUX1_P == dmamux_p ? '1' : @@ -330,7 +298,7 @@ void hal_freescale_edma_tcd_diag(cyghwr_ tcd_p->slast, tcd_p->slast); diag_printf("%s %s=%d [%p]\n", prefix, (tcd_p->csr & FREESCALE_EDMA_CSR_ESG_M) ? "sga" : "dlast", - tcd_p->dlast_sga.dlast, tcd_p->dlast_sga.sga); + tcd_p->dlast, tcd_p->sga); diag_printf("%s biter = %d, citer = %d\n", prefix, tcd_p->biter.elinkno, tcd_p->citer.elinkno); diag_printf("%s CSR=0x%04x\n", prefix, tcd_p->csr); @@ -343,7 +311,7 @@ void hal_freescale_edma_transfer_diag(cy cyghwr_hal_freescale_edma_tcd_t *tcd_p; const char *prefix = ""; - for(tcd_p = &edma_p->tcd[chan_i]; tcd_p; tcd_p = tcd_p->dlast_sga.sga){ + for(tcd_p = &edma_p->tcd[chan_i]; tcd_p; tcd_p = tcd_p->sga){ hal_freescale_edma_tcd_diag(tcd_p, chan_i, prefix); if(!(recurse && (tcd_p->csr & FREESCALE_EDMA_CSR_ESG_M))) break;
--- a/packages/infra/current/ChangeLog +++ b/packages/infra/current/ChangeLog @@ -1,8 +1,3 @@ -2013-02-20 Ilija Kocho <ilijak@siva.com.mk> - - * include/cyg_type.h: Add CYGBLD_ATTRIB_NO_INLINE (suggested by Jifl) - [ Bugzilla 1001768 ] - 2013-02-09 Ilija Kocho <ilijak@siva.com.mk> * include/cyg_type.h: Add CYGBLD_FORCE_INLINE macro to be used
--- a/packages/infra/current/include/cyg_type.h +++ b/packages/infra/current/include/cyg_type.h @@ -475,9 +475,6 @@ typedef cyg_haladdrword CYG_ADDRWORD; # define CYGBLD_FORCE_INLINE __externC inline __attribute((gnu_inline)) __attribute((always_inline)) # endif -// Suppress function inlining -#define CYGBLD_ATTRIB_NO_INLINE __attribute__((noinline)) - #else // non-GNU # define CYGBLD_ATTRIB_UNUSED /* nothing */ @@ -511,8 +508,6 @@ typedef cyg_haladdrword CYG_ADDRWORD; #define CYGBLD_FORCE_INLINE -#define CYGBLD_ATTRIB_NO_INLINE - #endif // How to define weak aliases. Currently this is simply a mixture of the
