1 /* SPDX-License-Identifier: GPL-2.0-or-later */ 2 3 #ifndef __COMMONLIB_STORAGE_SD_MMC_H__ 4 #define __COMMONLIB_STORAGE_SD_MMC_H__ 5 6 #include <commonlib/sd_mmc_ctrlr.h> 7 #include <commonlib/storage.h> 8 #include <stddef.h> 9 #include <console/console.h> 10 11 #define SD_MMC_IO_RETRIES 1000 12 13 #define IS_SD(x) (x->version & SD_VERSION_SD) 14 15 #define SET_BUS_WIDTH(ctrlr, width) \ 16 do { \ 17 ctrlr->bus_width = width; \ 18 ctrlr->set_ios(ctrlr); \ 19 } while (0) 20 21 #define SET_CLOCK(ctrlr, clock_hz) \ 22 do { \ 23 ctrlr->request_hz = clock_hz; \ 24 ctrlr->set_ios(ctrlr); \ 25 } while (0) 26 27 #define SET_TIMING(ctrlr, timing_value) \ 28 do { \ 29 ctrlr->timing = timing_value; \ 30 ctrlr->set_ios(ctrlr); \ 31 } while (0) 32 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, 36 int count); 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); 40 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); 54 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); 64 65 /* Controller debug functions */ 66 #define sdhc_debug(format...) \ 67 do { \ 68 if (CONFIG(SDHC_DEBUG)) \ 69 printk(BIOS_DEBUG, format); \ 70 } while (0) 71 #define sdhc_trace(format...) \ 72 do { \ 73 if (CONFIG(SDHC_TRACE)) \ 74 printk(BIOS_DEBUG, format); \ 75 } while (0) 76 #define sdhc_error(format...) printk(BIOS_ERR, format) 77 78 /* Card/device debug functions */ 79 #define sd_mmc_debug(format...) \ 80 do { \ 81 if (CONFIG(SD_MMC_DEBUG)) \ 82 printk(BIOS_DEBUG, format); \ 83 } while (0) 84 #define sd_mmc_trace(format...) \ 85 do { \ 86 if (CONFIG(SD_MMC_TRACE)) \ 87 printk(BIOS_DEBUG, format); \ 88 } while (0) 89 #define sd_mmc_error(format...) printk(BIOS_ERR, format) 90 91 #endif /* __COMMONLIB_STORAGE_SD_MMC_H__ */ 92