diff options
author | Dimitris Papastamos <dimitris.papastamos@arm.com> | 2018-08-10 12:40:53 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-08-10 12:40:53 +0100 |
commit | 5e4c590d849523fec47010cf281c15b99ba026bf (patch) | |
tree | b61e2f94163bbc99b884d22f84c3c7b44385b03c /drivers | |
parent | 8ae41aec32ac7ecf8f97ed296463188737c65bd3 (diff) | |
parent | fcda63ba45e012d758090ece88addb4cf13243af (diff) | |
download | platform_external_arm-trusted-firmware-5e4c590d849523fec47010cf281c15b99ba026bf.tar.gz platform_external_arm-trusted-firmware-5e4c590d849523fec47010cf281c15b99ba026bf.tar.bz2 platform_external_arm-trusted-firmware-5e4c590d849523fec47010cf281c15b99ba026bf.zip |
Merge pull request #1504 from hzhuang1/migrate_mmc
Migrate mmc
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/emmc/emmc.c | 363 | ||||
-rw-r--r-- | drivers/mmc/mmc.c | 36 | ||||
-rw-r--r-- | drivers/synopsys/emmc/dw_mmc.c | 78 |
3 files changed, 59 insertions, 418 deletions
diff --git a/drivers/emmc/emmc.c b/drivers/emmc/emmc.c deleted file mode 100644 index 92d1e8727..000000000 --- a/drivers/emmc/emmc.c +++ /dev/null @@ -1,363 +0,0 @@ -/* - * Copyright (c) 2016-2018, ARM Limited and Contributors. All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - * - * Defines a simple and generic interface to access eMMC device. - */ - -#include <arch_helpers.h> -#include <assert.h> -#include <debug.h> -#include <emmc.h> -#include <errno.h> -#include <string.h> -#include <utils.h> - -static const emmc_ops_t *ops; -static unsigned int emmc_ocr_value; -static emmc_csd_t emmc_csd; -static unsigned int emmc_flags; - -static int is_cmd23_enabled(void) -{ - return (!!(emmc_flags & EMMC_FLAG_CMD23)); -} - -static int emmc_device_state(void) -{ - emmc_cmd_t cmd; - int ret; - - do { - zeromem(&cmd, sizeof(emmc_cmd_t)); - cmd.cmd_idx = EMMC_CMD13; - cmd.cmd_arg = EMMC_FIX_RCA << RCA_SHIFT_OFFSET; - cmd.resp_type = EMMC_RESPONSE_R1; - ret = ops->send_cmd(&cmd); - assert(ret == 0); - assert((cmd.resp_data[0] & STATUS_SWITCH_ERROR) == 0); - /* Ignore improbable errors in release builds */ - (void)ret; - } while ((cmd.resp_data[0] & STATUS_READY_FOR_DATA) == 0); - return EMMC_GET_STATE(cmd.resp_data[0]); -} - -static void emmc_set_ext_csd(unsigned int ext_cmd, unsigned int value) -{ - emmc_cmd_t cmd; - int ret, state; - - zeromem(&cmd, sizeof(emmc_cmd_t)); - cmd.cmd_idx = EMMC_CMD6; - cmd.cmd_arg = EXTCSD_WRITE_BYTES | EXTCSD_CMD(ext_cmd) | - EXTCSD_VALUE(value) | 1; - ret = ops->send_cmd(&cmd); - assert(ret == 0); - - /* wait to exit PRG state */ - do { - state = emmc_device_state(); - } while (state == EMMC_STATE_PRG); - /* Ignore improbable errors in release builds */ - (void)ret; -} - -static void emmc_set_ios(int clk, int bus_width) -{ - int ret; - - /* set IO speed & IO bus width */ - if (emmc_csd.spec_vers == 4) - emmc_set_ext_csd(CMD_EXTCSD_BUS_WIDTH, bus_width); - ret = ops->set_ios(clk, bus_width); - assert(ret == 0); - /* Ignore improbable errors in release builds */ - (void)ret; -} - -static int emmc_enumerate(int clk, int bus_width) -{ - emmc_cmd_t cmd; - int ret, state; - - ops->init(); - - /* CMD0: reset to IDLE */ - zeromem(&cmd, sizeof(emmc_cmd_t)); - cmd.cmd_idx = EMMC_CMD0; - ret = ops->send_cmd(&cmd); - assert(ret == 0); - - while (1) { - /* CMD1: get OCR register */ - zeromem(&cmd, sizeof(emmc_cmd_t)); - cmd.cmd_idx = EMMC_CMD1; - cmd.cmd_arg = OCR_SECTOR_MODE | OCR_VDD_MIN_2V7 | - OCR_VDD_MIN_1V7; - cmd.resp_type = EMMC_RESPONSE_R3; - ret = ops->send_cmd(&cmd); - assert(ret == 0); - emmc_ocr_value = cmd.resp_data[0]; - if (emmc_ocr_value & OCR_POWERUP) - break; - } - - /* CMD2: Card Identification */ - zeromem(&cmd, sizeof(emmc_cmd_t)); - cmd.cmd_idx = EMMC_CMD2; - cmd.resp_type = EMMC_RESPONSE_R2; - ret = ops->send_cmd(&cmd); - assert(ret == 0); - - /* CMD3: Set Relative Address */ - zeromem(&cmd, sizeof(emmc_cmd_t)); - cmd.cmd_idx = EMMC_CMD3; - cmd.cmd_arg = EMMC_FIX_RCA << RCA_SHIFT_OFFSET; - cmd.resp_type = EMMC_RESPONSE_R1; - ret = ops->send_cmd(&cmd); - assert(ret == 0); - - /* CMD9: CSD Register */ - zeromem(&cmd, sizeof(emmc_cmd_t)); - cmd.cmd_idx = EMMC_CMD9; - cmd.cmd_arg = EMMC_FIX_RCA << RCA_SHIFT_OFFSET; - cmd.resp_type = EMMC_RESPONSE_R2; - ret = ops->send_cmd(&cmd); - assert(ret == 0); - memcpy(&emmc_csd, &cmd.resp_data, sizeof(cmd.resp_data)); - - /* CMD7: Select Card */ - zeromem(&cmd, sizeof(emmc_cmd_t)); - cmd.cmd_idx = EMMC_CMD7; - cmd.cmd_arg = EMMC_FIX_RCA << RCA_SHIFT_OFFSET; - cmd.resp_type = EMMC_RESPONSE_R1; - ret = ops->send_cmd(&cmd); - assert(ret == 0); - /* wait to TRAN state */ - do { - state = emmc_device_state(); - } while (state != EMMC_STATE_TRAN); - - emmc_set_ios(clk, bus_width); - return ret; -} - -size_t emmc_read_blocks(int lba, uintptr_t buf, size_t size) -{ - emmc_cmd_t cmd; - int ret; - - assert((ops != 0) && - (ops->read != 0) && - ((buf & EMMC_BLOCK_MASK) == 0) && - ((size & EMMC_BLOCK_MASK) == 0)); - - inv_dcache_range(buf, size); - ret = ops->prepare(lba, buf, size); - assert(ret == 0); - - if (is_cmd23_enabled()) { - zeromem(&cmd, sizeof(emmc_cmd_t)); - /* set block count */ - cmd.cmd_idx = EMMC_CMD23; - cmd.cmd_arg = size / EMMC_BLOCK_SIZE; - cmd.resp_type = EMMC_RESPONSE_R1; - ret = ops->send_cmd(&cmd); - assert(ret == 0); - - zeromem(&cmd, sizeof(emmc_cmd_t)); - cmd.cmd_idx = EMMC_CMD18; - } else { - if (size > EMMC_BLOCK_SIZE) - cmd.cmd_idx = EMMC_CMD18; - else - cmd.cmd_idx = EMMC_CMD17; - } - if ((emmc_ocr_value & OCR_ACCESS_MODE_MASK) == OCR_BYTE_MODE) - cmd.cmd_arg = lba * EMMC_BLOCK_SIZE; - else - cmd.cmd_arg = lba; - cmd.resp_type = EMMC_RESPONSE_R1; - ret = ops->send_cmd(&cmd); - assert(ret == 0); - - ret = ops->read(lba, buf, size); - assert(ret == 0); - - /* wait buffer empty */ - emmc_device_state(); - - if (is_cmd23_enabled() == 0) { - if (size > EMMC_BLOCK_SIZE) { - zeromem(&cmd, sizeof(emmc_cmd_t)); - cmd.cmd_idx = EMMC_CMD12; - ret = ops->send_cmd(&cmd); - assert(ret == 0); - } - } - /* Ignore improbable errors in release builds */ - (void)ret; - return size; -} - -size_t emmc_write_blocks(int lba, const uintptr_t buf, size_t size) -{ - emmc_cmd_t cmd; - int ret; - - assert((ops != 0) && - (ops->write != 0) && - ((buf & EMMC_BLOCK_MASK) == 0) && - ((size & EMMC_BLOCK_MASK) == 0)); - - clean_dcache_range(buf, size); - ret = ops->prepare(lba, buf, size); - assert(ret == 0); - - if (is_cmd23_enabled()) { - /* set block count */ - zeromem(&cmd, sizeof(emmc_cmd_t)); - cmd.cmd_idx = EMMC_CMD23; - cmd.cmd_arg = size / EMMC_BLOCK_SIZE; - cmd.resp_type = EMMC_RESPONSE_R1; - ret = ops->send_cmd(&cmd); - assert(ret == 0); - - zeromem(&cmd, sizeof(emmc_cmd_t)); - cmd.cmd_idx = EMMC_CMD25; - } else { - zeromem(&cmd, sizeof(emmc_cmd_t)); - if (size > EMMC_BLOCK_SIZE) - cmd.cmd_idx = EMMC_CMD25; - else - cmd.cmd_idx = EMMC_CMD24; - } - if ((emmc_ocr_value & OCR_ACCESS_MODE_MASK) == OCR_BYTE_MODE) - cmd.cmd_arg = lba * EMMC_BLOCK_SIZE; - else - cmd.cmd_arg = lba; - cmd.resp_type = EMMC_RESPONSE_R1; - ret = ops->send_cmd(&cmd); - assert(ret == 0); - - ret = ops->write(lba, buf, size); - assert(ret == 0); - - /* wait buffer empty */ - emmc_device_state(); - - if (is_cmd23_enabled() == 0) { - if (size > EMMC_BLOCK_SIZE) { - zeromem(&cmd, sizeof(emmc_cmd_t)); - cmd.cmd_idx = EMMC_CMD12; - ret = ops->send_cmd(&cmd); - assert(ret == 0); - } - } - /* Ignore improbable errors in release builds */ - (void)ret; - return size; -} - -size_t emmc_erase_blocks(int lba, size_t size) -{ - emmc_cmd_t cmd; - int ret, state; - - assert(ops != 0); - assert((size != 0) && ((size % EMMC_BLOCK_SIZE) == 0)); - - zeromem(&cmd, sizeof(emmc_cmd_t)); - cmd.cmd_idx = EMMC_CMD35; - cmd.cmd_arg = lba; - cmd.resp_type = EMMC_RESPONSE_R1; - ret = ops->send_cmd(&cmd); - assert(ret == 0); - - zeromem(&cmd, sizeof(emmc_cmd_t)); - cmd.cmd_idx = EMMC_CMD36; - cmd.cmd_arg = lba + (size / EMMC_BLOCK_SIZE) - 1; - cmd.resp_type = EMMC_RESPONSE_R1; - ret = ops->send_cmd(&cmd); - assert(ret == 0); - - zeromem(&cmd, sizeof(emmc_cmd_t)); - cmd.cmd_idx = EMMC_CMD38; - cmd.resp_type = EMMC_RESPONSE_R1B; - ret = ops->send_cmd(&cmd); - assert(ret == 0); - - /* wait to TRAN state */ - do { - state = emmc_device_state(); - } while (state != EMMC_STATE_TRAN); - /* Ignore improbable errors in release builds */ - (void)ret; - return size; -} - -static inline void emmc_rpmb_enable(void) -{ - emmc_set_ext_csd(CMD_EXTCSD_PARTITION_CONFIG, - PART_CFG_BOOT_PARTITION1_ENABLE | - PART_CFG_PARTITION1_ACCESS); -} - -static inline void emmc_rpmb_disable(void) -{ - emmc_set_ext_csd(CMD_EXTCSD_PARTITION_CONFIG, - PART_CFG_BOOT_PARTITION1_ENABLE); -} - -size_t emmc_rpmb_read_blocks(int lba, uintptr_t buf, size_t size) -{ - size_t size_read; - - emmc_rpmb_enable(); - size_read = emmc_read_blocks(lba, buf, size); - emmc_rpmb_disable(); - return size_read; -} - -size_t emmc_rpmb_write_blocks(int lba, const uintptr_t buf, size_t size) -{ - size_t size_written; - - emmc_rpmb_enable(); - size_written = emmc_write_blocks(lba, buf, size); - emmc_rpmb_disable(); - return size_written; -} - -size_t emmc_rpmb_erase_blocks(int lba, size_t size) -{ - size_t size_erased; - - emmc_rpmb_enable(); - size_erased = emmc_erase_blocks(lba, size); - emmc_rpmb_disable(); - return size_erased; -} - -void emmc_init(const emmc_ops_t *ops_ptr, int clk, int width, - unsigned int flags) -{ - assert((ops_ptr != 0) && - (ops_ptr->init != 0) && - (ops_ptr->send_cmd != 0) && - (ops_ptr->set_ios != 0) && - (ops_ptr->prepare != 0) && - (ops_ptr->read != 0) && - (ops_ptr->write != 0) && - (clk != 0) && - ((width == EMMC_BUS_WIDTH_1) || - (width == EMMC_BUS_WIDTH_4) || - (width == EMMC_BUS_WIDTH_8) || - (width == EMMC_BUS_WIDTH_DDR_4) || - (width == EMMC_BUS_WIDTH_DDR_8))); - ops = ops_ptr; - emmc_flags = flags; - - emmc_enumerate(clk, width); -} diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c index 0c9ec1017..217f90c47 100644 --- a/drivers/mmc/mmc.c +++ b/drivers/mmc/mmc.c @@ -24,7 +24,7 @@ static const struct mmc_ops *ops; static unsigned int mmc_ocr_value; static struct mmc_csd_emmc mmc_csd; -static unsigned char mmc_ext_csd[512] __aligned(4); +static unsigned char mmc_ext_csd[512] __aligned(16); static unsigned int mmc_flags; static struct mmc_device_info *mmc_dev_info; static unsigned int rca; @@ -363,8 +363,6 @@ static int mmc_reset_to_idle(void) { int ret; - mdelay(1); - /* CMD0: reset to IDLE */ ret = mmc_send_cmd(MMC_CMD(0), 0, 0, NULL); if (ret != 0) { @@ -413,14 +411,16 @@ static int mmc_enumerate(unsigned int clk, unsigned int bus_width) mmc_reset_to_idle(); - /* CMD8: Send Interface Condition Command */ - ret = mmc_send_cmd(MMC_CMD(8), VHS_2_7_3_6_V | CMD8_CHECK_PATTERN, - MMC_RESPONSE_R(7), &resp_data[0]); - - if ((ret == 0) && ((resp_data[0] & 0xffU) == CMD8_CHECK_PATTERN)) { - ret = sd_send_op_cond(); - } else { + if (mmc_dev_info->mmc_dev_type == MMC_IS_EMMC) { ret = mmc_send_op_cond(); + } else { + /* CMD8: Send Interface Condition Command */ + ret = mmc_send_cmd(MMC_CMD(8), VHS_2_7_3_6_V | CMD8_CHECK_PATTERN, + MMC_RESPONSE_R(7), &resp_data[0]); + + if ((ret == 0) && ((resp_data[0] & 0xffU) == CMD8_CHECK_PATTERN)) { + ret = sd_send_op_cond(); + } } if (ret != 0) { return ret; @@ -473,15 +473,15 @@ static int mmc_enumerate(unsigned int clk, unsigned int bus_width) } } while (ret != MMC_STATE_TRAN); - ret = mmc_fill_device_info(); + ret = mmc_set_ios(clk, bus_width); if (ret != 0) { return ret; } - return mmc_set_ios(clk, bus_width); + return mmc_fill_device_info(); } -size_t mmc_read_blocks(unsigned int lba, uintptr_t buf, size_t size) +size_t mmc_read_blocks(int lba, uintptr_t buf, size_t size) { int ret; unsigned int cmd_idx, cmd_arg; @@ -548,7 +548,7 @@ size_t mmc_read_blocks(unsigned int lba, uintptr_t buf, size_t size) return size; } -size_t mmc_write_blocks(unsigned int lba, const uintptr_t buf, size_t size) +size_t mmc_write_blocks(int lba, const uintptr_t buf, size_t size) { int ret; unsigned int cmd_idx, cmd_arg; @@ -615,7 +615,7 @@ size_t mmc_write_blocks(unsigned int lba, const uintptr_t buf, size_t size) return size; } -size_t mmc_erase_blocks(unsigned int lba, size_t size) +size_t mmc_erase_blocks(int lba, size_t size) { int ret; @@ -661,7 +661,7 @@ static inline void mmc_rpmb_disable(void) PART_CFG_BOOT_PARTITION1_ENABLE); } -size_t mmc_rpmb_read_blocks(unsigned int lba, uintptr_t buf, size_t size) +size_t mmc_rpmb_read_blocks(int lba, uintptr_t buf, size_t size) { size_t size_read; @@ -672,7 +672,7 @@ size_t mmc_rpmb_read_blocks(unsigned int lba, uintptr_t buf, size_t size) return size_read; } -size_t mmc_rpmb_write_blocks(unsigned int lba, const uintptr_t buf, size_t size) +size_t mmc_rpmb_write_blocks(int lba, const uintptr_t buf, size_t size) { size_t size_written; @@ -683,7 +683,7 @@ size_t mmc_rpmb_write_blocks(unsigned int lba, const uintptr_t buf, size_t size) return size_written; } -size_t mmc_rpmb_erase_blocks(unsigned int lba, size_t size) +size_t mmc_rpmb_erase_blocks(int lba, size_t size) { size_t size_erased; diff --git a/drivers/synopsys/emmc/dw_mmc.c b/drivers/synopsys/emmc/dw_mmc.c index 156c2b4eb..b0b0a3fd4 100644 --- a/drivers/synopsys/emmc/dw_mmc.c +++ b/drivers/synopsys/emmc/dw_mmc.c @@ -10,8 +10,8 @@ #include <debug.h> #include <delay_timer.h> #include <dw_mmc.h> -#include <emmc.h> #include <errno.h> +#include <mmc.h> #include <mmio.h> #include <string.h> @@ -107,6 +107,8 @@ #define DWMMC_8BIT_MODE (1 << 6) +#define DWMMC_ADDRESS_MASK U(0x0f) + #define TIMEOUT 100000 struct dw_idmac_desc { @@ -117,13 +119,13 @@ struct dw_idmac_desc { }; static void dw_init(void); -static int dw_send_cmd(emmc_cmd_t *cmd); -static int dw_set_ios(int clk, int width); +static int dw_send_cmd(struct mmc_cmd *cmd); +static int dw_set_ios(unsigned int clk, unsigned int width); static int dw_prepare(int lba, uintptr_t buf, size_t size); static int dw_read(int lba, uintptr_t buf, size_t size); static int dw_write(int lba, uintptr_t buf, size_t size); -static const emmc_ops_t dw_mmc_ops = { +static const struct mmc_ops dw_mmc_ops = { .init = dw_init, .send_cmd = dw_send_cmd, .set_ios = dw_set_ios, @@ -187,7 +189,7 @@ static void dw_init(void) unsigned int data; uintptr_t base; - assert((dw_params.reg_base & EMMC_BLOCK_MASK) == 0); + assert((dw_params.reg_base & MMC_BLOCK_MASK) == 0); base = dw_params.reg_base; mmio_write_32(base + DWMMC_PWREN, 1); @@ -203,7 +205,7 @@ static void dw_init(void) mmio_write_32(base + DWMMC_INTMASK, 0); mmio_write_32(base + DWMMC_TMOUT, ~0); mmio_write_32(base + DWMMC_IDINTEN, ~0); - mmio_write_32(base + DWMMC_BLKSIZ, EMMC_BLOCK_SIZE); + mmio_write_32(base + DWMMC_BLKSIZ, MMC_BLOCK_SIZE); mmio_write_32(base + DWMMC_BYTCNT, 256 * 1024); mmio_write_32(base + DWMMC_DEBNCE, 0x00ffffff); mmio_write_32(base + DWMMC_BMOD, BMOD_SWRESET); @@ -215,11 +217,11 @@ static void dw_init(void) mmio_write_32(base + DWMMC_BMOD, data); udelay(100); - dw_set_clk(EMMC_BOOT_CLK_RATE); + dw_set_clk(MMC_BOOT_CLK_RATE); udelay(100); } -static int dw_send_cmd(emmc_cmd_t *cmd) +static int dw_send_cmd(struct mmc_cmd *cmd) { unsigned int op, data, err_mask; uintptr_t base; @@ -230,22 +232,22 @@ static int dw_send_cmd(emmc_cmd_t *cmd) base = dw_params.reg_base; switch (cmd->cmd_idx) { - case EMMC_CMD0: + case 0: op = CMD_SEND_INIT; break; - case EMMC_CMD12: + case 12: op = CMD_STOP_ABORT_CMD; break; - case EMMC_CMD13: + case 13: op = CMD_WAIT_PRVDATA_COMPLETE; break; - case EMMC_CMD8: - case EMMC_CMD17: - case EMMC_CMD18: + case 8: + case 17: + case 18: op = CMD_DATA_TRANS_EXPECT | CMD_WAIT_PRVDATA_COMPLETE; break; - case EMMC_CMD24: - case EMMC_CMD25: + case 24: + case 25: op = CMD_WRITE | CMD_DATA_TRANS_EXPECT | CMD_WAIT_PRVDATA_COMPLETE; break; @@ -257,11 +259,11 @@ static int dw_send_cmd(emmc_cmd_t *cmd) switch (cmd->resp_type) { case 0: break; - case EMMC_RESPONSE_R2: + case MMC_RESPONSE_R(2): op |= CMD_RESP_EXPECT | CMD_CHECK_RESP_CRC | CMD_RESP_LEN; break; - case EMMC_RESPONSE_R3: + case MMC_RESPONSE_R(3): op |= CMD_RESP_EXPECT; break; default: @@ -307,16 +309,16 @@ static int dw_send_cmd(emmc_cmd_t *cmd) return 0; } -static int dw_set_ios(int clk, int width) +static int dw_set_ios(unsigned int clk, unsigned int width) { switch (width) { - case EMMC_BUS_WIDTH_1: + case MMC_BUS_WIDTH_1: mmio_write_32(dw_params.reg_base + DWMMC_CTYPE, CTYPE_1BIT); break; - case EMMC_BUS_WIDTH_4: + case MMC_BUS_WIDTH_4: mmio_write_32(dw_params.reg_base + DWMMC_CTYPE, CTYPE_4BIT); break; - case EMMC_BUS_WIDTH_8: + case MMC_BUS_WIDTH_8: mmio_write_32(dw_params.reg_base + DWMMC_CTYPE, CTYPE_8BIT); break; default: @@ -333,12 +335,14 @@ static int dw_prepare(int lba, uintptr_t buf, size_t size) int desc_cnt, i, last; uintptr_t base; - assert(((buf & EMMC_BLOCK_MASK) == 0) && - ((size % EMMC_BLOCK_SIZE) == 0) && + assert(((buf & DWMMC_ADDRESS_MASK) == 0) && + ((size % MMC_BLOCK_SIZE) == 0) && (dw_params.desc_size > 0) && - ((dw_params.reg_base & EMMC_BLOCK_MASK) == 0) && - ((dw_params.desc_base & EMMC_BLOCK_MASK) == 0) && - ((dw_params.desc_size & EMMC_BLOCK_MASK) == 0)); + ((dw_params.reg_base & MMC_BLOCK_MASK) == 0) && + ((dw_params.desc_base & MMC_BLOCK_MASK) == 0) && + ((dw_params.desc_size & MMC_BLOCK_MASK) == 0)); + + flush_dcache_range(buf, size); desc_cnt = (size + DWMMC_DMA_MAX_BUFFER_SIZE - 1) / DWMMC_DMA_MAX_BUFFER_SIZE; @@ -367,7 +371,7 @@ static int dw_prepare(int lba, uintptr_t buf, size_t size) (desc + last)->des3 = 0; mmio_write_32(base + DWMMC_DBADDR, dw_params.desc_base); - clean_dcache_range(dw_params.desc_base, + flush_dcache_range(dw_params.desc_base, desc_cnt * DWMMC_DMA_MAX_BUFFER_SIZE); return 0; @@ -383,19 +387,19 @@ static int dw_write(int lba, uintptr_t buf, size_t size) return 0; } -void dw_mmc_init(dw_mmc_params_t *params) +void dw_mmc_init(dw_mmc_params_t *params, struct mmc_device_info *info) { assert((params != 0) && - ((params->reg_base & EMMC_BLOCK_MASK) == 0) && - ((params->desc_base & EMMC_BLOCK_MASK) == 0) && - ((params->desc_size & EMMC_BLOCK_MASK) == 0) && + ((params->reg_base & MMC_BLOCK_MASK) == 0) && + ((params->desc_base & MMC_BLOCK_MASK) == 0) && + ((params->desc_size & MMC_BLOCK_MASK) == 0) && (params->desc_size > 0) && (params->clk_rate > 0) && - ((params->bus_width == EMMC_BUS_WIDTH_1) || - (params->bus_width == EMMC_BUS_WIDTH_4) || - (params->bus_width == EMMC_BUS_WIDTH_8))); + ((params->bus_width == MMC_BUS_WIDTH_1) || + (params->bus_width == MMC_BUS_WIDTH_4) || + (params->bus_width == MMC_BUS_WIDTH_8))); memcpy(&dw_params, params, sizeof(dw_mmc_params_t)); - emmc_init(&dw_mmc_ops, params->clk_rate, params->bus_width, - params->flags); + mmc_init(&dw_mmc_ops, params->clk_rate, params->bus_width, + params->flags, info); } |