mmc.c (1937e5aa3b0ec0767a36580db654ef8918c09b84) mmc.c (ab71188ce87ebb66192a5bdbbb9d58052bd32d93)
1/*
2 * Copyright 2008, Freescale Semiconductor, Inc
3 * Andy Fleming
4 *
5 * Based vaguely on the Linux code
6 *
7 * SPDX-License-Identifier: GPL-2.0+
8 */

--- 863 unchanged lines hidden (view full) ---

872 }
873
874 /* divide frequency by 10, since the mults are 10x bigger */
875 freq = fbase[(cmd.response[0] & 0x7)];
876 mult = multipliers[((cmd.response[0] >> 3) & 0xf)];
877
878 mmc->tran_speed = freq * mult;
879
1/*
2 * Copyright 2008, Freescale Semiconductor, Inc
3 * Andy Fleming
4 *
5 * Based vaguely on the Linux code
6 *
7 * SPDX-License-Identifier: GPL-2.0+
8 */

--- 863 unchanged lines hidden (view full) ---

872 }
873
874 /* divide frequency by 10, since the mults are 10x bigger */
875 freq = fbase[(cmd.response[0] & 0x7)];
876 mult = multipliers[((cmd.response[0] >> 3) & 0xf)];
877
878 mmc->tran_speed = freq * mult;
879
880 mmc->dsr_imp = ((cmd.response[1] >> 12) & 0x1);
880 mmc->read_bl_len = 1 << ((cmd.response[1] >> 16) & 0xf);
881
882 if (IS_SD(mmc))
883 mmc->write_bl_len = mmc->read_bl_len;
884 else
885 mmc->write_bl_len = 1 << ((cmd.response[3] >> 22) & 0xf);
886
887 if (mmc->high_capacity) {

--- 14 unchanged lines hidden (view full) ---

902 mmc->capacity_gp[i] = 0;
903
904 if (mmc->read_bl_len > MMC_MAX_BLOCK_LEN)
905 mmc->read_bl_len = MMC_MAX_BLOCK_LEN;
906
907 if (mmc->write_bl_len > MMC_MAX_BLOCK_LEN)
908 mmc->write_bl_len = MMC_MAX_BLOCK_LEN;
909
881 mmc->read_bl_len = 1 << ((cmd.response[1] >> 16) & 0xf);
882
883 if (IS_SD(mmc))
884 mmc->write_bl_len = mmc->read_bl_len;
885 else
886 mmc->write_bl_len = 1 << ((cmd.response[3] >> 22) & 0xf);
887
888 if (mmc->high_capacity) {

--- 14 unchanged lines hidden (view full) ---

903 mmc->capacity_gp[i] = 0;
904
905 if (mmc->read_bl_len > MMC_MAX_BLOCK_LEN)
906 mmc->read_bl_len = MMC_MAX_BLOCK_LEN;
907
908 if (mmc->write_bl_len > MMC_MAX_BLOCK_LEN)
909 mmc->write_bl_len = MMC_MAX_BLOCK_LEN;
910
911 if ((mmc->dsr_imp) && (0xffffffff != mmc->dsr)) {
912 cmd.cmdidx = MMC_CMD_SET_DSR;
913 cmd.cmdarg = (mmc->dsr & 0xffff) << 16;
914 cmd.resp_type = MMC_RSP_NONE;
915 if (mmc_send_cmd(mmc, &cmd, NULL))
916 printf("MMC: SET_DSR failed\n");
917 }
918
910 /* Select the card, and put it into Transfer Mode */
911 if (!mmc_host_is_spi(mmc)) { /* cmd not supported in spi */
912 cmd.cmdidx = MMC_CMD_SELECT_CARD;
913 cmd.resp_type = MMC_RSP_R1;
914 cmd.cmdarg = mmc->rca << 16;
915 err = mmc_send_cmd(mmc, &cmd, NULL);
916
917 if (err)

--- 240 unchanged lines hidden (view full) ---

1158 else
1159 mmc->version = SD_VERSION_2;
1160
1161 return 0;
1162}
1163
1164int mmc_register(struct mmc *mmc)
1165{
919 /* Select the card, and put it into Transfer Mode */
920 if (!mmc_host_is_spi(mmc)) { /* cmd not supported in spi */
921 cmd.cmdidx = MMC_CMD_SELECT_CARD;
922 cmd.resp_type = MMC_RSP_R1;
923 cmd.cmdarg = mmc->rca << 16;
924 err = mmc_send_cmd(mmc, &cmd, NULL);
925
926 if (err)

--- 240 unchanged lines hidden (view full) ---

1167 else
1168 mmc->version = SD_VERSION_2;
1169
1170 return 0;
1171}
1172
1173int mmc_register(struct mmc *mmc)
1174{
1175 /* Setup dsr related values */
1176 mmc->dsr_imp = 0;
1177 mmc->dsr = 0xffffffff;
1166 /* Setup the universal parts of the block interface just once */
1167 mmc->block_dev.if_type = IF_TYPE_MMC;
1168 mmc->block_dev.dev = cur_dev_num++;
1169 mmc->block_dev.removable = 1;
1170 mmc->block_dev.block_read = mmc_bread;
1171 mmc->block_dev.block_write = mmc_bwrite;
1172 mmc->block_dev.block_erase = mmc_berase;
1173 if (!mmc->b_max)

--- 101 unchanged lines hidden (view full) ---

1275 err = mmc_start_init(mmc);
1276
1277 if (!err || err == IN_PROGRESS)
1278 err = mmc_complete_init(mmc);
1279 debug("%s: %d, time %lu\n", __func__, err, get_timer(start));
1280 return err;
1281}
1282
1178 /* Setup the universal parts of the block interface just once */
1179 mmc->block_dev.if_type = IF_TYPE_MMC;
1180 mmc->block_dev.dev = cur_dev_num++;
1181 mmc->block_dev.removable = 1;
1182 mmc->block_dev.block_read = mmc_bread;
1183 mmc->block_dev.block_write = mmc_bwrite;
1184 mmc->block_dev.block_erase = mmc_berase;
1185 if (!mmc->b_max)

--- 101 unchanged lines hidden (view full) ---

1287 err = mmc_start_init(mmc);
1288
1289 if (!err || err == IN_PROGRESS)
1290 err = mmc_complete_init(mmc);
1291 debug("%s: %d, time %lu\n", __func__, err, get_timer(start));
1292 return err;
1293}
1294
1295int mmc_set_dsr(struct mmc *mmc, u16 val)
1296{
1297 mmc->dsr = val;
1298 return 0;
1299}
1300
1283/*
1284 * CPU and board-specific MMC initializations. Aliased function
1285 * signals caller to move on
1286 */
1287static int __def_mmc_init(bd_t *bis)
1288{
1289 return -1;
1290}

--- 200 unchanged lines hidden ---
1301/*
1302 * CPU and board-specific MMC initializations. Aliased function
1303 * signals caller to move on
1304 */
1305static int __def_mmc_init(bd_t *bis)
1306{
1307 return -1;
1308}

--- 200 unchanged lines hidden ---