Lines Matching refs:cmd

121 	struct mmc_command		*cmd;  member
144 static struct mmc_command *meson_mx_mmc_get_next_cmd(struct mmc_command *cmd) in meson_mx_mmc_get_next_cmd() argument
146 if (cmd->opcode == MMC_SET_BLOCK_COUNT && !cmd->error) in meson_mx_mmc_get_next_cmd()
147 return cmd->mrq->cmd; in meson_mx_mmc_get_next_cmd()
148 else if (mmc_op_multi(cmd->opcode) && in meson_mx_mmc_get_next_cmd()
149 (!cmd->mrq->sbc || cmd->error || cmd->data->error)) in meson_mx_mmc_get_next_cmd()
150 return cmd->mrq->stop; in meson_mx_mmc_get_next_cmd()
156 struct mmc_command *cmd) in meson_mx_mmc_start_cmd() argument
163 host->cmd = cmd; in meson_mx_mmc_start_cmd()
165 if (cmd->busy_timeout) in meson_mx_mmc_start_cmd()
166 timeout = msecs_to_jiffies(cmd->busy_timeout); in meson_mx_mmc_start_cmd()
170 switch (mmc_resp_type(cmd)) { in meson_mx_mmc_start_cmd()
186 if (!(cmd->flags & MMC_RSP_CRC)) in meson_mx_mmc_start_cmd()
189 if (cmd->flags & MMC_RSP_BUSY) in meson_mx_mmc_start_cmd()
192 if (cmd->data) { in meson_mx_mmc_start_cmd()
194 (cmd->data->blocks - 1)); in meson_mx_mmc_start_cmd()
196 pack_size = cmd->data->blksz * BITS_PER_BYTE; in meson_mx_mmc_start_cmd()
205 if (cmd->data->flags & MMC_DATA_WRITE) in meson_mx_mmc_start_cmd()
210 cmd->data->bytes_xfered = 0; in meson_mx_mmc_start_cmd()
214 (0x40 | cmd->opcode)); in meson_mx_mmc_start_cmd()
234 writel(cmd->arg, host->base + MESON_MX_SDIO_ARGU); in meson_mx_mmc_start_cmd()
249 if (host->cmd->error) in meson_mx_mmc_request_done()
253 host->cmd = NULL; in meson_mx_mmc_request_done()
340 struct mmc_command *cmd = mrq->cmd; in meson_mx_mmc_request() local
346 cmd->error = host->error; in meson_mx_mmc_request()
360 meson_mx_mmc_start_cmd(mmc, mrq->cmd); in meson_mx_mmc_request()
364 struct mmc_command *cmd) in meson_mx_mmc_read_response() argument
376 if (cmd->flags & MMC_RSP_136) { in meson_mx_mmc_read_response()
379 cmd->resp[0] = (resp[0] << 8) | ((resp[1] >> 24) & 0xff); in meson_mx_mmc_read_response()
380 cmd->resp[1] = (resp[1] << 8) | ((resp[2] >> 24) & 0xff); in meson_mx_mmc_read_response()
381 cmd->resp[2] = (resp[2] << 8) | ((resp[3] >> 24) & 0xff); in meson_mx_mmc_read_response()
382 cmd->resp[3] = (resp[3] << 8); in meson_mx_mmc_read_response()
383 } else if (cmd->flags & MMC_RSP_PRESENT) { in meson_mx_mmc_read_response()
384 cmd->resp[0] = readl(host->base + MESON_MX_SDIO_ARGU); in meson_mx_mmc_read_response()
391 struct mmc_command *cmd = host->cmd; in meson_mx_mmc_process_cmd_irq() local
398 if (!cmd) in meson_mx_mmc_process_cmd_irq()
401 cmd->error = 0; in meson_mx_mmc_process_cmd_irq()
402 meson_mx_mmc_read_response(host->mmc, cmd); in meson_mx_mmc_process_cmd_irq()
404 if (cmd->data) { in meson_mx_mmc_process_cmd_irq()
407 cmd->error = -EILSEQ; in meson_mx_mmc_process_cmd_irq()
411 cmd->error = -EILSEQ; in meson_mx_mmc_process_cmd_irq()
444 struct mmc_command *cmd = host->cmd, *next_cmd; in meson_mx_mmc_irq_thread() local
446 if (WARN_ON(!cmd)) in meson_mx_mmc_irq_thread()
451 if (cmd->data) { in meson_mx_mmc_irq_thread()
452 dma_unmap_sg(mmc_dev(host->mmc), cmd->data->sg, in meson_mx_mmc_irq_thread()
453 cmd->data->sg_len, in meson_mx_mmc_irq_thread()
454 mmc_get_dma_dir(cmd->data)); in meson_mx_mmc_irq_thread()
456 cmd->data->bytes_xfered = cmd->data->blksz * cmd->data->blocks; in meson_mx_mmc_irq_thread()
459 next_cmd = meson_mx_mmc_get_next_cmd(cmd); in meson_mx_mmc_irq_thread()
487 if (!host->cmd) in meson_mx_mmc_timeout()
492 host->cmd->opcode, readl(host->base + MESON_MX_SDIO_IRQS), in meson_mx_mmc_timeout()
495 host->cmd->error = -ETIMEDOUT; in meson_mx_mmc_timeout()