Lines Matching full:mmc
18 static ulong mmc_erase_t(struct mmc *mmc, ulong start, lbaint_t blkcnt) in mmc_erase_t() argument
25 if (mmc->high_capacity) { in mmc_erase_t()
28 end = (start + blkcnt - 1) * mmc->write_bl_len; in mmc_erase_t()
29 start *= mmc->write_bl_len; in mmc_erase_t()
39 if (IS_SD(mmc)) { in mmc_erase_t()
46 if (mmc->esr.mmc_can_trim) in mmc_erase_t()
56 err = mmc_send_cmd(mmc, &cmd, NULL); in mmc_erase_t()
63 err = mmc_send_cmd(mmc, &cmd, NULL); in mmc_erase_t()
71 err = mmc_send_cmd(mmc, &cmd, NULL); in mmc_erase_t()
78 puts("mmc erase failed\n"); in mmc_erase_t()
94 struct mmc *mmc = find_mmc_device(dev_num); in mmc_berase() local
99 if (!mmc) in mmc_berase()
111 if (!IS_SD(mmc)) { in mmc_berase()
112 if (mmc->esr.mmc_can_trim) in mmc_berase()
117 err = mmc_erase_t(mmc, start, blkcnt); in mmc_berase()
120 if (mmc_send_status(mmc, timeout)) in mmc_berase()
130 err = div_u64_rem(start, mmc->erase_grp_size, &start_rem); in mmc_berase()
131 err = div_u64_rem(blkcnt, mmc->erase_grp_size, &blkcnt_rem); in mmc_berase()
136 mmc->erase_grp_size, in mmc_berase()
137 start & ~(mmc->erase_grp_size - 1), in mmc_berase()
138 ((start + blkcnt + mmc->erase_grp_size) in mmc_berase()
139 & ~(mmc->erase_grp_size - 1)) - 1); in mmc_berase()
141 if (IS_SD(mmc) && mmc->ssr.au) { in mmc_berase()
142 blk_r = ((blkcnt - blk) > mmc->ssr.au) ? in mmc_berase()
143 mmc->ssr.au : (blkcnt - blk); in mmc_berase()
145 blk_r = ((blkcnt - blk) > mmc->erase_grp_size) ? in mmc_berase()
146 mmc->erase_grp_size : (blkcnt - blk); in mmc_berase()
148 err = mmc_erase_t(mmc, start + blk, blk_r); in mmc_berase()
155 if (mmc_send_status(mmc, timeout)) in mmc_berase()
162 static ulong mmc_write_blocks(struct mmc *mmc, lbaint_t start, in mmc_write_blocks() argument
170 if ((start + blkcnt) > mmc_get_blk_desc(mmc)->lba) { in mmc_write_blocks()
171 printf("MMC: block number 0x" LBAF " exceeds max(0x" LBAF ")\n", in mmc_write_blocks()
172 start + blkcnt, mmc_get_blk_desc(mmc)->lba); in mmc_write_blocks()
183 if (mmc->high_capacity) in mmc_write_blocks()
186 cmd.cmdarg = start * mmc->write_bl_len; in mmc_write_blocks()
192 data.blocksize = mmc->write_bl_len; in mmc_write_blocks()
195 if (mmc_send_cmd(mmc, &cmd, &data)) { in mmc_write_blocks()
196 printf("mmc write failed\n"); in mmc_write_blocks()
203 if (!mmc_host_is_spi(mmc) && blkcnt > 1) { in mmc_write_blocks()
207 if (mmc_send_cmd(mmc, &cmd, NULL)) { in mmc_write_blocks()
208 printf("mmc fail to send stop cmd\n"); in mmc_write_blocks()
214 if (mmc_send_status(mmc, timeout)) in mmc_write_blocks()
235 struct mmc *mmc = find_mmc_device(dev_num); in mmc_bwrite() local
236 if (!mmc) in mmc_bwrite()
243 if (mmc_set_blocklen(mmc, mmc->write_bl_len)) in mmc_bwrite()
247 cur = (blocks_todo > mmc->cfg->b_max) ? in mmc_bwrite()
248 mmc->cfg->b_max : blocks_todo; in mmc_bwrite()
249 if (mmc_write_blocks(mmc, start, cur, src) != cur) { in mmc_bwrite()
251 if (mmc_write_blocks(mmc, start, cur, src) != cur) in mmc_bwrite()
256 src += cur * mmc->write_bl_len; in mmc_bwrite()