dma-register.h 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  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. #define CHCR_TS_LOW_MASK 0x00000018
  23. #define CHCR_TS_LOW_SHIFT 3
  24. #define CHCR_TS_HIGH_MASK 0x00300000
  25. #define CHCR_TS_HIGH_SHIFT (20 - 2) /* 2 bits for shifted low TS */
  26. #elif defined(CONFIG_CPU_SUBTYPE_SH7763) || \
  27. defined(CONFIG_CPU_SUBTYPE_SH7764)
  28. #define CHCR_TS_LOW_MASK 0x00000018
  29. #define CHCR_TS_LOW_SHIFT 3
  30. #define CHCR_TS_HIGH_MASK 0
  31. #define CHCR_TS_HIGH_SHIFT 0
  32. #elif defined(CONFIG_CPU_SUBTYPE_SH7723)
  33. #define CHCR_TS_LOW_MASK 0x00000018
  34. #define CHCR_TS_LOW_SHIFT 3
  35. #define CHCR_TS_HIGH_MASK 0
  36. #define CHCR_TS_HIGH_SHIFT 0
  37. #elif defined(CONFIG_CPU_SUBTYPE_SH7724)
  38. #define CHCR_TS_LOW_MASK 0x00000018
  39. #define CHCR_TS_LOW_SHIFT 3
  40. #define CHCR_TS_HIGH_MASK 0x00600000
  41. #define CHCR_TS_HIGH_SHIFT (20 - 2) /* 2 bits for shifted low TS */
  42. #elif defined(CONFIG_CPU_SUBTYPE_SH7780)
  43. #define CHCR_TS_LOW_MASK 0x00000018
  44. #define CHCR_TS_LOW_SHIFT 3
  45. #define CHCR_TS_HIGH_MASK 0
  46. #define CHCR_TS_HIGH_SHIFT 0
  47. #else /* SH7785 */
  48. #define CHCR_TS_LOW_MASK 0x00000018
  49. #define CHCR_TS_LOW_SHIFT 3
  50. #define CHCR_TS_HIGH_MASK 0
  51. #define CHCR_TS_HIGH_SHIFT 0
  52. #endif
  53. /* Transmit sizes and respective CHCR register values */
  54. enum {
  55. XMIT_SZ_8BIT = 0,
  56. XMIT_SZ_16BIT = 1,
  57. XMIT_SZ_32BIT = 2,
  58. XMIT_SZ_64BIT = 7,
  59. XMIT_SZ_128BIT = 3,
  60. XMIT_SZ_256BIT = 4,
  61. XMIT_SZ_128BIT_BLK = 0xb,
  62. XMIT_SZ_256BIT_BLK = 0xc,
  63. };
  64. /* log2(size / 8) - used to calculate number of transfers */
  65. #define TS_SHIFT { \
  66. [XMIT_SZ_8BIT] = 0, \
  67. [XMIT_SZ_16BIT] = 1, \
  68. [XMIT_SZ_32BIT] = 2, \
  69. [XMIT_SZ_64BIT] = 3, \
  70. [XMIT_SZ_128BIT] = 4, \
  71. [XMIT_SZ_256BIT] = 5, \
  72. [XMIT_SZ_128BIT_BLK] = 4, \
  73. [XMIT_SZ_256BIT_BLK] = 5, \
  74. }
  75. #define TS_INDEX2VAL(i) ((((i) & 3) << CHCR_TS_LOW_SHIFT) | \
  76. ((((i) >> 2) & 3) << CHCR_TS_HIGH_SHIFT))
  77. #else /* CONFIG_CPU_SH4A */
  78. #define DMAOR_INIT (0x8000 | DMAOR_DME)
  79. #define CHCR_TS_LOW_MASK 0x70
  80. #define CHCR_TS_LOW_SHIFT 4
  81. #define CHCR_TS_HIGH_MASK 0
  82. #define CHCR_TS_HIGH_SHIFT 0
  83. /* Transmit sizes and respective CHCR register values */
  84. enum {
  85. XMIT_SZ_8BIT = 1,
  86. XMIT_SZ_16BIT = 2,
  87. XMIT_SZ_32BIT = 3,
  88. XMIT_SZ_64BIT = 0,
  89. XMIT_SZ_256BIT = 4,
  90. };
  91. /* log2(size / 8) - used to calculate number of transfers */
  92. #define TS_SHIFT { \
  93. [XMIT_SZ_8BIT] = 0, \
  94. [XMIT_SZ_16BIT] = 1, \
  95. [XMIT_SZ_32BIT] = 2, \
  96. [XMIT_SZ_64BIT] = 3, \
  97. [XMIT_SZ_256BIT] = 5, \
  98. }
  99. #define TS_INDEX2VAL(i) (((i) & 7) << CHCR_TS_LOW_SHIFT)
  100. #endif /* CONFIG_CPU_SH4A */
  101. #endif