diff options
author | stefano babic | 2007-11-20 10:40:24 +0100 |
---|---|---|
committer | Wolfgang Denk | 2008-02-03 23:58:21 +0100 |
commit | c95219fae2a7add7daa2f91aedca65b1698465c7 (patch) | |
tree | 0a4683aa73ab09344dd57c2f2a2a966736e6f337 /include | |
parent | 96bbfa1e6625ce23a150936863b3ecf4c853eb33 (diff) |
MMC for PXA 27X (resubmit)
MMC support for X_Scale PXA is broken and does not work.
Mainly, the mmc_init() function cannot recognize current SD/MMC cards.
There were already some patches around the world but none of them was
merged into the official u-boot tree.
This patch makes order fixing this issue. Resubmit after code cleanup.
Applied and tested on PXA 270 (TrizepsIV module).
Signed-off-by: Stefano Babic <sbabic@denx.de>
Diffstat (limited to 'include')
-rw-r--r-- | include/asm-arm/arch-pxa/mmc.h | 79 | ||||
-rw-r--r-- | include/part.h | 1 |
2 files changed, 44 insertions, 36 deletions
diff --git a/include/asm-arm/arch-pxa/mmc.h b/include/asm-arm/arch-pxa/mmc.h index a62679a1a1a..b9304b1bdc0 100644 --- a/include/asm-arm/arch-pxa/mmc.h +++ b/include/asm-arm/arch-pxa/mmc.h @@ -54,14 +54,17 @@ #define MMC_SPI_CRC_ON (0x01UL << 1) /* MMC_CMDAT */ +#define MMC_CMDAT_SD_4DAT (0x0001UL << 8) #define MMC_CMDAT_MMC_DMA_EN (0x0001UL << 7) #define MMC_CMDAT_INIT (0x0001UL << 6) #define MMC_CMDAT_BUSY (0x0001UL << 5) +#define MMC_CMDAT_BCR (0x0003UL << 5) #define MMC_CMDAT_STREAM (0x0001UL << 4) #define MMC_CMDAT_BLOCK (0x0000UL << 4) #define MMC_CMDAT_WRITE (0x0001UL << 3) #define MMC_CMDAT_READ (0x0000UL << 3) #define MMC_CMDAT_DATA_EN (0x0001UL << 2) +#define MMC_CMDAT_R0 (0) #define MMC_CMDAT_R1 (0x0001UL) #define MMC_CMDAT_R2 (0x0002UL) #define MMC_CMDAT_R3 (0x0003UL) @@ -111,6 +114,7 @@ #define MMC_CMD_SEND_OP_COND 1 #define MMC_CMD_ALL_SEND_CID 2 #define MMC_CMD_SET_RCA 3 +#define MMC_CMD_SELECT_CARD 7 #define MMC_CMD_SEND_CSD 9 #define MMC_CMD_SEND_CID 10 #define MMC_CMD_SEND_STATUS 13 @@ -118,6 +122,10 @@ #define MMC_CMD_READ_BLOCK 17 #define MMC_CMD_RD_BLK_MULTI 18 #define MMC_CMD_WRITE_BLOCK 24 +#define MMC_CMD_APP_CMD 55 + +#define SD_CMD_APP_SET_BUS_WIDTH 6 +#define SD_CMD_APP_OP_COND 41 #define MMC_MAX_BLOCK_SIZE 512 @@ -158,42 +166,41 @@ typedef struct mmc_cid typedef struct mmc_csd { - uchar ecc:2, - file_format:2, - tmp_write_protect:1, - perm_write_protect:1, - copy:1, - file_format_grp:1; - uint64_t content_prot_app:1, - rsvd3:4, - write_bl_partial:1, - write_bl_len:4, - r2w_factor:3, - default_ecc:2, - wp_grp_enable:1, - wp_grp_size:5, - erase_grp_mult:5, - erase_grp_size:5, - c_size_mult1:3, - vdd_w_curr_max:3, - vdd_w_curr_min:3, - vdd_r_curr_max:3, - vdd_r_curr_min:3, - c_size:12, - rsvd2:2, - dsr_imp:1, - read_blk_misalign:1, - write_blk_misalign:1, - read_bl_partial:1; - - ushort read_bl_len:4, - ccc:12; - uchar tran_speed; - uchar nsac; - uchar taac; - uchar rsvd1:2, - spec_vers:4, - csd_structure:2; + uint8_t csd_structure:2, + spec_ver:4, + rsvd1:2; + uint8_t taac; + uint8_t nsac; + uint8_t tran_speed; + uint16_t ccc:12, + read_bl_len:4; + uint64_t read_bl_partial:1, + write_blk_misalign:1, + read_blk_misalign:1, + dsr_imp:1, + rsvd2:2, + c_size:12, + vdd_r_curr_min:3, + vdd_r_curr_max:3, + vdd_w_curr_min:3, + vdd_w_curr_max:3, + c_size_mult:3, + erase_blk_en:1, + sector_size:7, + wp_grp_size:7, + wp_grp_enable:1, + default_ecc:2, + r2w_factor:3, + write_bl_len:4, + write_bl_partial:1, + rsvd3:4, + content_prot_app:1; + uint8_t file_format_grp:1, + copy:1, + perm_write_protect:1, + tmp_write_protect:1, + file_format:2, + ecc:2; } mmc_csd_t; diff --git a/include/part.h b/include/part.h index 37b2b6845bc..8407aa05d26 100644 --- a/include/part.h +++ b/include/part.h @@ -59,6 +59,7 @@ typedef struct block_dev_desc { #define IF_TYPE_USB 4 #define IF_TYPE_DOC 5 #define IF_TYPE_MMC 6 +#define IF_TYPE_SD 7 /* Part types */ #define PART_TYPE_UNKNOWN 0x00 |