dma-register.h 2.6 KB

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