dma-dw.h 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /*
  3. * Driver for the Synopsys DesignWare DMA Controller
  4. *
  5. * Copyright (C) 2007 Atmel Corporation
  6. * Copyright (C) 2010-2011 ST Microelectronics
  7. */
  8. #ifndef _PLATFORM_DATA_DMA_DW_H
  9. #define _PLATFORM_DATA_DMA_DW_H
  10. #include <linux/bits.h>
  11. #include <linux/types.h>
  12. #define DW_DMA_MAX_NR_MASTERS 4
  13. #define DW_DMA_MAX_NR_CHANNELS 8
  14. #define DW_DMA_MIN_BURST 1
  15. #define DW_DMA_MAX_BURST 256
  16. struct device;
  17. /**
  18. * struct dw_dma_slave - Controller-specific information about a slave
  19. *
  20. * @dma_dev: required DMA master device
  21. * @src_id: src request line
  22. * @dst_id: dst request line
  23. * @m_master: memory master for transfers on allocated channel
  24. * @p_master: peripheral master for transfers on allocated channel
  25. * @channels: mask of the channels permitted for allocation (zero value means any)
  26. * @hs_polarity:set active low polarity of handshake interface
  27. */
  28. struct dw_dma_slave {
  29. struct device *dma_dev;
  30. u8 src_id;
  31. u8 dst_id;
  32. u8 m_master;
  33. u8 p_master;
  34. u8 channels;
  35. bool hs_polarity;
  36. };
  37. /**
  38. * struct dw_dma_platform_data - Controller configuration parameters
  39. * @nr_masters: Number of AHB masters supported by the controller
  40. * @nr_channels: Number of channels supported by hardware (max 8)
  41. * @chan_allocation_order: Allocate channels starting from 0 or 7
  42. * @chan_priority: Set channel priority increasing from 0 to 7 or 7 to 0.
  43. * @block_size: Maximum block size supported by the controller
  44. * @data_width: Maximum data width supported by hardware per AHB master
  45. * (in bytes, power of 2)
  46. * @multi_block: Multi block transfers supported by hardware per channel.
  47. * @max_burst: Maximum value of burst transaction size supported by hardware
  48. * per channel (in units of CTL.SRC_TR_WIDTH/CTL.DST_TR_WIDTH).
  49. * @protctl: Protection control signals setting per channel.
  50. * @quirks: Optional platform quirks.
  51. */
  52. struct dw_dma_platform_data {
  53. u32 nr_masters;
  54. u32 nr_channels;
  55. #define CHAN_ALLOCATION_ASCENDING 0 /* zero to seven */
  56. #define CHAN_ALLOCATION_DESCENDING 1 /* seven to zero */
  57. u32 chan_allocation_order;
  58. #define CHAN_PRIORITY_ASCENDING 0 /* chan0 highest */
  59. #define CHAN_PRIORITY_DESCENDING 1 /* chan7 highest */
  60. u32 chan_priority;
  61. u32 block_size;
  62. u32 data_width[DW_DMA_MAX_NR_MASTERS];
  63. u32 multi_block[DW_DMA_MAX_NR_CHANNELS];
  64. u32 max_burst[DW_DMA_MAX_NR_CHANNELS];
  65. #define CHAN_PROTCTL_PRIVILEGED BIT(0)
  66. #define CHAN_PROTCTL_BUFFERABLE BIT(1)
  67. #define CHAN_PROTCTL_CACHEABLE BIT(2)
  68. #define CHAN_PROTCTL_MASK GENMASK(2, 0)
  69. u32 protctl;
  70. #define DW_DMA_QUIRK_XBAR_PRESENT BIT(0)
  71. u32 quirks;
  72. };
  73. #endif /* _PLATFORM_DATA_DMA_DW_H */