dma.h 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  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. #ifndef _LPC32XX_DMA_H
  12. #define _LPC32XX_DMA_H
  13. #include <common.h>
  14. /*
  15. * DMA linked list structure used with a channel's LLI register;
  16. * refer to UM10326, "LPC32x0 and LPC32x0/01 User manual" - Rev. 3
  17. * tables 84, 85, 86 & 87 for details.
  18. */
  19. struct lpc32xx_dmac_ll {
  20. u32 dma_src;
  21. u32 dma_dest;
  22. u32 next_lli;
  23. u32 next_ctrl;
  24. };
  25. /* control register definitions */
  26. #define DMAC_CHAN_INT_TC_EN (1 << 31) /* channel terminal count interrupt */
  27. #define DMAC_CHAN_DEST_AUTOINC (1 << 27) /* automatic destination increment */
  28. #define DMAC_CHAN_SRC_AUTOINC (1 << 26) /* automatic source increment */
  29. #define DMAC_CHAN_DEST_AHB1 (1 << 25) /* AHB1 master for dest. transfer */
  30. #define DMAC_CHAN_DEST_WIDTH_32 (1 << 22) /* Destination data width selection */
  31. #define DMAC_CHAN_SRC_WIDTH_32 (1 << 19) /* Source data width selection */
  32. #define DMAC_CHAN_DEST_BURST_1 0
  33. #define DMAC_CHAN_DEST_BURST_4 (1 << 15) /* Destination data burst size */
  34. #define DMAC_CHAN_SRC_BURST_1 0
  35. #define DMAC_CHAN_SRC_BURST_4 (1 << 12) /* Source data burst size */
  36. /*
  37. * config_ch register definitions
  38. * DMAC_CHAN_FLOW_D_xxx: flow control with DMA as the controller
  39. * DMAC_DEST_PERIP: Macro for loading destination peripheral
  40. * DMAC_SRC_PERIP: Macro for loading source peripheral
  41. */
  42. #define DMAC_CHAN_FLOW_D_M2P (0x1 << 11)
  43. #define DMAC_CHAN_FLOW_D_P2M (0x2 << 11)
  44. #define DMAC_DEST_PERIP(n) (((n) & 0x1F) << 6)
  45. #define DMAC_SRC_PERIP(n) (((n) & 0x1F) << 1)
  46. /*
  47. * config_ch register definitions
  48. * (source and destination peripheral ID numbers).
  49. * These can be used with the DMAC_DEST_PERIP and DMAC_SRC_PERIP macros.
  50. */
  51. #define DMA_PERID_NAND1 1
  52. /* Channel enable bit */
  53. #define DMAC_CHAN_ENABLE (1 << 0)
  54. int lpc32xx_dma_get_channel(void);
  55. int lpc32xx_dma_start_xfer(unsigned int channel,
  56. const struct lpc32xx_dmac_ll *desc, u32 config);
  57. int lpc32xx_dma_wait_status(unsigned int channel);
  58. #endif /* _LPC32XX_DMA_H */