Files
system76-coreboot/src/commonlib/storage/sd_mmc.h
Shelley Chen 419cf93502 commonlib/storage: Add common eMMC functions
Now that multiple platforms are trying to initialize eMMC in coreboot
instead of depthcharge, lets move common functionality into commonlib
instead of copying the same functionality between multiple platforms.
Note for consistency, changed name of set_early_mmc_wake_status() to
mmc_set_early_wake_status().  Also adding an mmc_send_cmd1() function
for retrieving the Operating Conditions Register (OCR) contents.

BUG=b:218406702
BRANCH=None
TEST=emerge-herobrine coreboot chromeos-bootimage
     flash onto villager device and make sure still boots ChromeOS

Change-Id: Id00535b05bbd379081712601ef10e762c1831747
Signed-off-by: Shelley Chen <shchen@google.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/71827
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Eric Lai <eric_lai@quanta.corp-partner.google.com>
2023-01-16 00:33:11 +00:00

92 lines
2.7 KiB
C

/* SPDX-License-Identifier: GPL-2.0-or-later */
#ifndef __COMMONLIB_STORAGE_SD_MMC_H__
#define __COMMONLIB_STORAGE_SD_MMC_H__
#include <commonlib/sd_mmc_ctrlr.h>
#include <commonlib/storage.h>
#include <stddef.h>
#include <console/console.h>
#define SD_MMC_IO_RETRIES 1000
#define IS_SD(x) (x->version & SD_VERSION_SD)
#define SET_BUS_WIDTH(ctrlr, width) \
do { \
ctrlr->bus_width = width; \
ctrlr->set_ios(ctrlr); \
} while (0)
#define SET_CLOCK(ctrlr, clock_hz) \
do { \
ctrlr->request_hz = clock_hz; \
ctrlr->set_ios(ctrlr); \
} while (0)
#define SET_TIMING(ctrlr, timing_value) \
do { \
ctrlr->timing = timing_value; \
ctrlr->set_ios(ctrlr); \
} while (0)
/* Common support routines */
int sd_mmc_enter_standby(struct storage_media *media);
uint64_t sd_mmc_extract_uint32_bits(const uint32_t *array, int start,
int count);
int sd_mmc_go_idle(struct storage_media *media);
int sd_mmc_send_status(struct storage_media *media, ssize_t tries);
int sd_mmc_set_blocklen(struct sd_mmc_ctrlr *ctrlr, int len);
/* MMC support routines */
int mmc_change_freq(struct storage_media *media);
int mmc_complete_op_cond(struct storage_media *media);
const char *mmc_partition_name(struct storage_media *media,
unsigned int partition_number);
int mmc_send_ext_csd(struct sd_mmc_ctrlr *ctrlr, unsigned char *ext_csd);
int mmc_send_op_cond(struct storage_media *media);
int mmc_set_bus_width(struct storage_media *media);
int mmc_set_partition(struct storage_media *media,
unsigned int partition_number);
int mmc_update_capacity(struct storage_media *media);
void mmc_set_early_wake_status(int32_t status);
int mmc_send_cmd1(struct storage_media *media);
/* SD card support routines */
int sd_change_freq(struct storage_media *media);
const char *sd_partition_name(struct storage_media *media,
unsigned int partition_number);
int sd_send_if_cond(struct storage_media *media);
int sd_send_op_cond(struct storage_media *media);
int sd_set_bus_width(struct storage_media *media);
int sd_set_partition(struct storage_media *media,
unsigned int partition_number);
/* Controller debug functions */
#define sdhc_debug(format...) \
do { \
if (CONFIG(SDHC_DEBUG)) \
printk(BIOS_DEBUG, format); \
} while (0)
#define sdhc_trace(format...) \
do { \
if (CONFIG(SDHC_TRACE)) \
printk(BIOS_DEBUG, format); \
} while (0)
#define sdhc_error(format...) printk(BIOS_ERR, format)
/* Card/device debug functions */
#define sd_mmc_debug(format...) \
do { \
if (CONFIG(SD_MMC_DEBUG)) \
printk(BIOS_DEBUG, format); \
} while (0)
#define sd_mmc_trace(format...) \
do { \
if (CONFIG(SD_MMC_TRACE)) \
printk(BIOS_DEBUG, format); \
} while (0)
#define sd_mmc_error(format...) printk(BIOS_ERR, format)
#endif /* __COMMONLIB_STORAGE_SD_MMC_H__ */