dma-register.h 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. /*
  2. * SH4 CPU-specific DMA definitions, used by both DMA drivers
  3. *
  4. * Copyright (C) 2010 Guennadi Liakhovetski <g.liakhovetski@gmx.de>
  5. *
  6. * This program is free software; you can redistribute it and/or modify
  7. * it under the terms of the GNU General Public License version 2 as
  8. * published by the Free Software Foundation.
  9. */
  10. #ifndef CPU_DMA_REGISTER_H
  11. #define CPU_DMA_REGISTER_H
  12. /* SH7751/7760/7780 DMA IRQ sources */
  13. #ifdef CONFIG_CPU_SH4A
  14. #define DMAOR_INIT DMAOR_DME
  15. #if defined(CONFIG_CPU_SUBTYPE_SH7343) || \
  16. defined(CONFIG_CPU_SUBTYPE_SH7730)
  17. #define CHCR_TS_LOW_MASK 0x00000018
  18. #define CHCR_TS_LOW_SHIFT 3
  19. #define CHCR_TS_HIGH_MASK 0
  20. #define CHCR_TS_HIGH_SHIFT 0
  21. #elif defined(CONFIG_CPU_SUBTYPE_SH7722) || \
  22. defined(CONFIG_CPU_SUBTYPE_SH7724) || \
  23. defined(CONFIG_CPU_SUBTYPE_SH7786)
  24. #define CHCR_TS_LOW_MASK 0x00000018
  25. #define CHCR_TS_LOW_SHIFT 3
  26. #define CHCR_TS_HIGH_MASK 0x00300000
  27. #define CHCR_TS_HIGH_SHIFT (20 - 2) /* 2 bits for shifted low TS */
  28. #elif defined(CONFIG_CPU_SUBTYPE_SH7763) || \
  29. defined(CONFIG_CPU_SUBTYPE_SH7764)
  30. #define CHCR_TS_LOW_MASK 0x00000018
  31. #define CHCR_TS_LOW_SHIFT 3
  32. #define CHCR_TS_HIGH_MASK 0
  33. #define CHCR_TS_HIGH_SHIFT 0
  34. #elif defined(CONFIG_CPU_SUBTYPE_SH7723)
  35. #define CHCR_TS_LOW_MASK 0x00000018
  36. #define CHCR_TS_LOW_SHIFT 3
  37. #define CHCR_TS_HIGH_MASK 0
  38. #define CHCR_TS_HIGH_SHIFT 0
  39. #elif defined(CONFIG_CPU_SUBTYPE_SH7780)
  40. #define CHCR_TS_LOW_MASK 0x00000018
  41. #define CHCR_TS_LOW_SHIFT 3
  42. #define CHCR_TS_HIGH_MASK 0
  43. #define CHCR_TS_HIGH_SHIFT 0
  44. #else /* SH7785 */
  45. #define CHCR_TS_LOW_MASK 0x00000018
  46. #define CHCR_TS_LOW_SHIFT 3
  47. #define CHCR_TS_HIGH_MASK 0
  48. #define CHCR_TS_HIGH_SHIFT 0
  49. #endif
  50. /* Transmit sizes and respective CHCR register values */
  51. enum {
  52. XMIT_SZ_8BIT = 0,
  53. XMIT_SZ_16BIT = 1,
  54. XMIT_SZ_32BIT = 2,
  55. XMIT_SZ_64BIT = 7,
  56. XMIT_SZ_128BIT = 3,
  57. XMIT_SZ_256BIT = 4,
  58. XMIT_SZ_128BIT_BLK = 0xb,
  59. XMIT_SZ_256BIT_BLK = 0xc,
  60. };
  61. /* log2(size / 8) - used to calculate number of transfers */
  62. #define TS_SHIFT { \
  63. [XMIT_SZ_8BIT] = 0, \
  64. [XMIT_SZ_16BIT] = 1, \
  65. [XMIT_SZ_32BIT] = 2, \
  66. [XMIT_SZ_64BIT] = 3, \
  67. [XMIT_SZ_128BIT] = 4, \
  68. [XMIT_SZ_256BIT] = 5, \
  69. [XMIT_SZ_128BIT_BLK] = 4, \
  70. [XMIT_SZ_256BIT_BLK] = 5, \
  71. }
  72. #define TS_INDEX2VAL(i) ((((i) & 3) << CHCR_TS_LOW_SHIFT) | \
  73. ((((i) >> 2) & 3) << CHCR_TS_HIGH_SHIFT))
  74. #else /* CONFIG_CPU_SH4A */
  75. #define DMAOR_INIT (0x8000 | DMAOR_DME)
  76. #define CHCR_TS_LOW_MASK 0x70
  77. #define CHCR_TS_LOW_SHIFT 4
  78. #define CHCR_TS_HIGH_MASK 0
  79. #define CHCR_TS_HIGH_SHIFT 0
  80. /* Transmit sizes and respective CHCR register values */
  81. enum {
  82. XMIT_SZ_8BIT = 1,
  83. XMIT_SZ_16BIT = 2,
  84. XMIT_SZ_32BIT = 3,
  85. XMIT_SZ_64BIT = 0,
  86. XMIT_SZ_256BIT = 4,
  87. };
  88. /* log2(size / 8) - used to calculate number of transfers */
  89. #define TS_SHIFT { \
  90. [XMIT_SZ_8BIT] = 0, \
  91. [XMIT_SZ_16BIT] = 1, \
  92. [XMIT_SZ_32BIT] = 2, \
  93. [XMIT_SZ_64BIT] = 3, \
  94. [XMIT_SZ_256BIT] = 5, \
  95. }
  96. #define TS_INDEX2VAL(i) (((i) & 7) << CHCR_TS_LOW_SHIFT)
  97. #endif /* CONFIG_CPU_SH4A */
  98. #endif