1 /* SPDX-License-Identifier: GPL-2.0-or-later */
3 #ifndef __COMMONLIB_STORAGE_SD_MMC_H__
4 #define __COMMONLIB_STORAGE_SD_MMC_H__
6 #include <commonlib/sd_mmc_ctrlr.h>
7 #include <commonlib/storage.h>
9 #include <console/console.h>
11 #define SD_MMC_IO_RETRIES 1000
13 #define IS_SD(x) (x->version & SD_VERSION_SD)
15 #define SET_BUS_WIDTH(ctrlr, width) \
17 ctrlr->bus_width = width; \
18 ctrlr->set_ios(ctrlr); \
21 #define SET_CLOCK(ctrlr, clock_hz) \
23 ctrlr->request_hz = clock_hz; \
24 ctrlr->set_ios(ctrlr); \
27 #define SET_TIMING(ctrlr, timing_value) \
29 ctrlr->timing = timing_value; \
30 ctrlr->set_ios(ctrlr); \
33 /* Common support routines */
34 int sd_mmc_enter_standby(struct storage_media
*media
);
35 uint64_t sd_mmc_extract_uint32_bits(const uint32_t *array
, int start
,
37 int sd_mmc_go_idle(struct storage_media
*media
);
38 int sd_mmc_send_status(struct storage_media
*media
, ssize_t tries
);
39 int sd_mmc_set_blocklen(struct sd_mmc_ctrlr
*ctrlr
, int len
);
41 /* MMC support routines */
42 int mmc_change_freq(struct storage_media
*media
);
43 int mmc_complete_op_cond(struct storage_media
*media
);
44 const char *mmc_partition_name(struct storage_media
*media
,
45 unsigned int partition_number
);
46 int mmc_send_ext_csd(struct sd_mmc_ctrlr
*ctrlr
, unsigned char *ext_csd
);
47 int mmc_send_op_cond(struct storage_media
*media
);
48 int mmc_set_bus_width(struct storage_media
*media
);
49 int mmc_set_partition(struct storage_media
*media
,
50 unsigned int partition_number
);
51 int mmc_update_capacity(struct storage_media
*media
);
52 void mmc_set_early_wake_status(int32_t status
);
53 int mmc_send_cmd1(struct storage_media
*media
);
55 /* SD card support routines */
56 int sd_change_freq(struct storage_media
*media
);
57 const char *sd_partition_name(struct storage_media
*media
,
58 unsigned int partition_number
);
59 int sd_send_if_cond(struct storage_media
*media
);
60 int sd_send_op_cond(struct storage_media
*media
);
61 int sd_set_bus_width(struct storage_media
*media
);
62 int sd_set_partition(struct storage_media
*media
,
63 unsigned int partition_number
);
65 /* Controller debug functions */
66 #define sdhc_debug(format...) \
68 if (CONFIG(SDHC_DEBUG)) \
69 printk(BIOS_DEBUG, format); \
71 #define sdhc_trace(format...) \
73 if (CONFIG(SDHC_TRACE)) \
74 printk(BIOS_DEBUG, format); \
76 #define sdhc_error(format...) printk(BIOS_ERR, format)
78 /* Card/device debug functions */
79 #define sd_mmc_debug(format...) \
81 if (CONFIG(SD_MMC_DEBUG)) \
82 printk(BIOS_DEBUG, format); \
84 #define sd_mmc_trace(format...) \
86 if (CONFIG(SD_MMC_TRACE)) \
87 printk(BIOS_DEBUG, format); \
89 #define sd_mmc_error(format...) printk(BIOS_ERR, format)
91 #endif /* __COMMONLIB_STORAGE_SD_MMC_H__ */