drv_sd.h 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. /*
  2. * Copyright (c) 2006-2024 RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2024-10-28 zhujiale The first version
  9. */
  10. #ifndef __DRV_SD_BCM2835_H_
  11. #define __DRV_SD_BCM2835_H_
  12. #include <drivers/dev_mmcsd_core.h>
  13. #include <rtthread.h>
  14. #include <drivers/mmcsd_cmd.h>
  15. #include <drivers/mmcsd_host.h>
  16. struct sdhci_bcm2835 {
  17. struct sdhci_host *host;
  18. struct rt_platform_device *pdev;
  19. struct rt_mmcsd_req *mrq;
  20. void *ioaddr;
  21. rt_mutex_t mutex;
  22. };
  23. #define SDCMD 0x00 /* Command to SD card - 16 R/W */
  24. #define SDARG 0x04 /* Argument to SD card - 32 R/W */
  25. #define SDTOUT 0x08 /* Start value for timeout counter - 32 R/W */
  26. #define SDCDIV 0x0c /* Start value for clock divider - 11 R/W */
  27. #define SDRSP0 0x10 /* SD card response (31:0) - 32 R */
  28. #define SDRSP1 0x14 /* SD card response (63:32) - 32 R */
  29. #define SDRSP2 0x18 /* SD card response (95:64) - 32 R */
  30. #define SDRSP3 0x1c /* SD card response (127:96) - 32 R */
  31. #define SDHSTS 0x20 /* SD host status - 11 R/W */
  32. #define SDVDD 0x30 /* SD card power control - 1 R/W */
  33. #define SDEDM 0x34 /* Emergency Debug Mode - 13 R/W */
  34. #define SDHCFG 0x38 /* Host configuration - 2 R/W */
  35. #define SDHBCT 0x3c /* Host byte count (debug) - 32 R/W */
  36. #define SDDATA 0x40 /* Data to/from SD card - 32 R/W */
  37. #define SDHBLC 0x50 /* Host block count (SDIO/SDHC) - 9 R/W */
  38. #define SDCMD_NEW_FLAG 0x8000
  39. #define SDCMD_FAIL_FLAG 0x4000
  40. #define SDCMD_BUSYWAIT 0x800
  41. #define SDCMD_NO_RESPONSE 0x400
  42. #define SDCMD_LONG_RESPONSE 0x200
  43. #define SDCMD_WRITE_CMD 0x80
  44. #define SDCMD_READ_CMD 0x40
  45. #define SDCMD_CMD_MASK 0x3f
  46. #define SDCDIV_MAX_CDIV 0x7ff
  47. #define SDHSTS_BUSY_IRPT 0x400
  48. #define SDHSTS_BLOCK_IRPT 0x200
  49. #define SDHSTS_SDIO_IRPT 0x100
  50. #define SDHSTS_REW_TIME_OUT 0x80
  51. #define SDHSTS_CMD_TIME_OUT 0x40
  52. #define SDHSTS_CRC16_ERROR 0x20
  53. #define SDHSTS_CRC7_ERROR 0x10
  54. #define SDHSTS_FIFO_ERROR 0x08
  55. /* Reserved */
  56. /* Reserved */
  57. #define SDHSTS_DATA_FLAG 0x01
  58. #define SDHSTS_TRANSFER_ERROR_MASK (SDHSTS_CRC7_ERROR | \
  59. SDHSTS_CRC16_ERROR | \
  60. SDHSTS_REW_TIME_OUT | \
  61. SDHSTS_FIFO_ERROR)
  62. #define SDHSTS_ERROR_MASK (SDHSTS_CMD_TIME_OUT | \
  63. SDHSTS_TRANSFER_ERROR_MASK)
  64. #define SDHCFG_BUSY_IRPT_EN BIT(10)
  65. #define SDHCFG_BLOCK_IRPT_EN BIT(8)
  66. #define SDHCFG_SDIO_IRPT_EN BIT(5)
  67. #define SDHCFG_DATA_IRPT_EN BIT(4)
  68. #define SDHCFG_SLOW_CARD BIT(3)
  69. #define SDHCFG_WIDE_EXT_BUS BIT(2)
  70. #define SDHCFG_WIDE_INT_BUS BIT(1)
  71. #define SDHCFG_REL_CMD_LINE BIT(0)
  72. #define SDVDD_POWER_OFF 0
  73. #define SDVDD_POWER_ON 1
  74. #define SDEDM_FORCE_DATA_MODE BIT(19)
  75. #define SDEDM_CLOCK_PULSE BIT(20)
  76. #define SDEDM_BYPASS BIT(21)
  77. #define SDEDM_WRITE_THRESHOLD_SHIFT 9
  78. #define SDEDM_READ_THRESHOLD_SHIFT 14
  79. #define SDEDM_THRESHOLD_MASK 0x1f
  80. #define SDEDM_FSM_MASK 0xf
  81. #define SDEDM_FSM_IDENTMODE 0x0
  82. #define SDEDM_FSM_DATAMODE 0x1
  83. #define SDEDM_FSM_READDATA 0x2
  84. #define SDEDM_FSM_WRITEDATA 0x3
  85. #define SDEDM_FSM_READWAIT 0x4
  86. #define SDEDM_FSM_READCRC 0x5
  87. #define SDEDM_FSM_WRITECRC 0x6
  88. #define SDEDM_FSM_WRITEWAIT1 0x7
  89. #define SDEDM_FSM_POWERDOWN 0x8
  90. #define SDEDM_FSM_POWERUP 0x9
  91. #define SDEDM_FSM_WRITESTART1 0xa
  92. #define SDEDM_FSM_WRITESTART2 0xb
  93. #define SDEDM_FSM_GENPULSES 0xc
  94. #define SDEDM_FSM_WRITEWAIT2 0xd
  95. #define SDEDM_FSM_STARTPOWDOWN 0xf
  96. #define SDDATA_FIFO_WORDS 16
  97. #define FIFO_READ_THRESHOLD 4
  98. #define FIFO_WRITE_THRESHOLD 4
  99. #define SDDATA_FIFO_PIO_BURST 8
  100. #define PIO_THRESHOLD 1 /* Maximum block count for PIO (0 = always DMA) */
  101. #endif