uboot/arch/arm/include/asm/arch-lpc32xx/dma.h
<<
>>
Prefs
   1/*
   2 * LPC32xx DMA Controller Interface
   3 *
   4 * Copyright (C) 2008 by NXP Semiconductors
   5 * @Author: Kevin Wells
   6 * @Descr: Definitions for LPC3250 chip
   7 * @References: NXP LPC3250 User's Guide
   8 *
   9 * SPDX-License-Identifier:     GPL-2.0+
  10 */
  11
  12#ifndef _LPC32XX_DMA_H
  13#define _LPC32XX_DMA_H
  14
  15#include <common.h>
  16
  17/*
  18 * DMA linked list structure used with a channel's LLI register;
  19 * refer to UM10326, "LPC32x0 and LPC32x0/01 User manual" - Rev. 3
  20 * tables 84, 85, 86 & 87 for details.
  21 */
  22struct lpc32xx_dmac_ll {
  23        u32 dma_src;
  24        u32 dma_dest;
  25        u32 next_lli;
  26        u32 next_ctrl;
  27};
  28
  29/* control register definitions */
  30#define DMAC_CHAN_INT_TC_EN     (1 << 31) /* channel terminal count interrupt */
  31#define DMAC_CHAN_DEST_AUTOINC  (1 << 27) /* automatic destination increment */
  32#define DMAC_CHAN_SRC_AUTOINC   (1 << 26) /* automatic source increment */
  33#define DMAC_CHAN_DEST_AHB1     (1 << 25) /* AHB1 master for dest. transfer */
  34#define DMAC_CHAN_DEST_WIDTH_32 (1 << 22) /* Destination data width selection */
  35#define DMAC_CHAN_SRC_WIDTH_32  (1 << 19) /* Source data width selection */
  36#define DMAC_CHAN_DEST_BURST_1  0
  37#define DMAC_CHAN_DEST_BURST_4  (1 << 15) /* Destination data burst size */
  38#define DMAC_CHAN_SRC_BURST_1   0
  39#define DMAC_CHAN_SRC_BURST_4   (1 << 12) /* Source data burst size */
  40
  41/*
  42 * config_ch register definitions
  43 * DMAC_CHAN_FLOW_D_xxx: flow control with DMA as the controller
  44 * DMAC_DEST_PERIP: Macro for loading destination peripheral
  45 * DMAC_SRC_PERIP: Macro for loading source peripheral
  46 */
  47#define DMAC_CHAN_FLOW_D_M2P    (0x1 << 11)
  48#define DMAC_CHAN_FLOW_D_P2M    (0x2 << 11)
  49#define DMAC_DEST_PERIP(n)      (((n) & 0x1F) << 6)
  50#define DMAC_SRC_PERIP(n)       (((n) & 0x1F) << 1)
  51
  52/*
  53 * config_ch register definitions
  54 * (source and destination peripheral ID numbers).
  55 * These can be used with the DMAC_DEST_PERIP and DMAC_SRC_PERIP macros.
  56 */
  57#define DMA_PERID_NAND1         1
  58
  59/* Channel enable bit */
  60#define DMAC_CHAN_ENABLE        (1 << 0)
  61
  62int lpc32xx_dma_get_channel(void);
  63int lpc32xx_dma_start_xfer(unsigned int channel,
  64                           const struct lpc32xx_dmac_ll *desc, u32 config);
  65int lpc32xx_dma_wait_status(unsigned int channel);
  66
  67#endif /* _LPC32XX_DMA_H */
  68