mmc: support packed write command for eMMC4.5 device

This patch supports packed write command of eMMC4.5 device.
Several writes can be grouped in packed command and all data
of the individual commands can be sent in a single transfer
on the bus.

[tlinder@codeaurora.org: Difference in definition:
R1_EXP_EVENT -- > R1_EXCEPTION_EVENT]

(cherry picked from commit 53f8f574c6c68687098cd064af8224da44de2484)

Change-Id: I26ee7c0b957a3aec5e4ffc6d6df806ea38435784
Signed-off-by: Seungwon Jeon <tgih.jun@samsung.com>
Reviewed-by: Maya Erez <merez@codeaurora.org>
Reviewed-by: Namjae Jeon <linkinjeon@gmail.com>
Signed-off-by: Tatyana Brokhman <tlinder@codeaurora.org>
(cherry picked from commit 6d24bc3b6e86412cbfbc37377bbbf196cbdebce9)
This commit is contained in:
Seungwon Jeon
2012-09-27 15:00:26 +02:00
committed by Stephen Boyd
parent 20bafab63b
commit 37e288ec83
6 changed files with 444 additions and 19 deletions

View File

@@ -300,6 +300,11 @@ static inline void mmc_part_add(struct mmc_card *card, unsigned int size,
card->nr_parts++;
}
static inline bool mmc_large_sec(struct mmc_card *card)
{
return card->ext_csd.data_sector_size == 4096;
}
/*
* The world is not perfect and supplies us with broken mmc/sdio devices.
* For at least some of these bugs we need a work-around.

View File

@@ -18,6 +18,9 @@ struct mmc_request;
struct mmc_command {
u32 opcode;
u32 arg;
#define MMC_CMD23_ARG_REL_WR (1 << 31)
#define MMC_CMD23_ARG_PACKED ((0 << 31) | (1 << 30))
#define MMC_CMD23_ARG_TAG_REQ (1 << 29)
u32 resp[4];
unsigned int flags; /* expected response type */
#define MMC_RSP_PRESENT (1 << 0)
@@ -148,6 +151,7 @@ extern int mmc_wait_for_app_cmd(struct mmc_host *, struct mmc_card *,
extern void mmc_start_bkops(struct mmc_card *card, bool from_exception);
extern int __mmc_switch(struct mmc_card *, u8, u8, u8, unsigned int, bool);
extern int mmc_switch(struct mmc_card *, u8, u8, u8, unsigned int);
extern int mmc_send_ext_csd(struct mmc_card *card, u8 *ext_csd);
#define MMC_ERASE_ARG 0x00000000
#define MMC_SECURE_ERASE_ARG 0x80000000