dma-register.h 3.0 KB

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