sd_ops.c (7434B)
1// SPDX-License-Identifier: GPL-2.0-or-later 2/* 3 * linux/drivers/mmc/core/sd_ops.h 4 * 5 * Copyright 2006-2007 Pierre Ossman 6 */ 7 8#include <linux/slab.h> 9#include <linux/types.h> 10#include <linux/export.h> 11#include <linux/scatterlist.h> 12 13#include <linux/mmc/host.h> 14#include <linux/mmc/card.h> 15#include <linux/mmc/mmc.h> 16#include <linux/mmc/sd.h> 17 18#include "core.h" 19#include "sd_ops.h" 20#include "mmc_ops.h" 21 22int mmc_app_cmd(struct mmc_host *host, struct mmc_card *card) 23{ 24 int err; 25 struct mmc_command cmd = {}; 26 27 if (WARN_ON(card && card->host != host)) 28 return -EINVAL; 29 30 cmd.opcode = MMC_APP_CMD; 31 32 if (card) { 33 cmd.arg = card->rca << 16; 34 cmd.flags = MMC_RSP_SPI_R1 | MMC_RSP_R1 | MMC_CMD_AC; 35 } else { 36 cmd.arg = 0; 37 cmd.flags = MMC_RSP_SPI_R1 | MMC_RSP_R1 | MMC_CMD_BCR; 38 } 39 40 err = mmc_wait_for_cmd(host, &cmd, 0); 41 if (err) 42 return err; 43 44 /* Check that card supported application commands */ 45 if (!mmc_host_is_spi(host) && !(cmd.resp[0] & R1_APP_CMD)) 46 return -EOPNOTSUPP; 47 48 return 0; 49} 50EXPORT_SYMBOL_GPL(mmc_app_cmd); 51 52static int mmc_wait_for_app_cmd(struct mmc_host *host, struct mmc_card *card, 53 struct mmc_command *cmd) 54{ 55 struct mmc_request mrq = {}; 56 int i, err = -EIO; 57 58 /* 59 * We have to resend MMC_APP_CMD for each attempt so 60 * we cannot use the retries field in mmc_command. 61 */ 62 for (i = 0; i <= MMC_CMD_RETRIES; i++) { 63 err = mmc_app_cmd(host, card); 64 if (err) { 65 /* no point in retrying; no APP commands allowed */ 66 if (mmc_host_is_spi(host)) { 67 if (cmd->resp[0] & R1_SPI_ILLEGAL_COMMAND) 68 break; 69 } 70 continue; 71 } 72 73 memset(&mrq, 0, sizeof(struct mmc_request)); 74 75 memset(cmd->resp, 0, sizeof(cmd->resp)); 76 cmd->retries = 0; 77 78 mrq.cmd = cmd; 79 cmd->data = NULL; 80 81 mmc_wait_for_req(host, &mrq); 82 83 err = cmd->error; 84 if (!cmd->error) 85 break; 86 87 /* no point in retrying illegal APP commands */ 88 if (mmc_host_is_spi(host)) { 89 if (cmd->resp[0] & R1_SPI_ILLEGAL_COMMAND) 90 break; 91 } 92 } 93 94 return err; 95} 96 97int mmc_app_set_bus_width(struct mmc_card *card, int width) 98{ 99 struct mmc_command cmd = {}; 100 101 cmd.opcode = SD_APP_SET_BUS_WIDTH; 102 cmd.flags = MMC_RSP_R1 | MMC_CMD_AC; 103 104 switch (width) { 105 case MMC_BUS_WIDTH_1: 106 cmd.arg = SD_BUS_WIDTH_1; 107 break; 108 case MMC_BUS_WIDTH_4: 109 cmd.arg = SD_BUS_WIDTH_4; 110 break; 111 default: 112 return -EINVAL; 113 } 114 115 return mmc_wait_for_app_cmd(card->host, card, &cmd); 116} 117 118int mmc_send_app_op_cond(struct mmc_host *host, u32 ocr, u32 *rocr) 119{ 120 struct mmc_command cmd = {}; 121 int i, err = 0; 122 123 cmd.opcode = SD_APP_OP_COND; 124 if (mmc_host_is_spi(host)) 125 cmd.arg = ocr & (1 << 30); /* SPI only defines one bit */ 126 else 127 cmd.arg = ocr; 128 cmd.flags = MMC_RSP_SPI_R1 | MMC_RSP_R3 | MMC_CMD_BCR; 129 130 for (i = 100; i; i--) { 131 err = mmc_wait_for_app_cmd(host, NULL, &cmd); 132 if (err) 133 break; 134 135 /* if we're just probing, do a single pass */ 136 if (ocr == 0) 137 break; 138 139 /* otherwise wait until reset completes */ 140 if (mmc_host_is_spi(host)) { 141 if (!(cmd.resp[0] & R1_SPI_IDLE)) 142 break; 143 } else { 144 if (cmd.resp[0] & MMC_CARD_BUSY) 145 break; 146 } 147 148 err = -ETIMEDOUT; 149 150 mmc_delay(10); 151 } 152 153 if (!i) 154 pr_err("%s: card never left busy state\n", mmc_hostname(host)); 155 156 if (rocr && !mmc_host_is_spi(host)) 157 *rocr = cmd.resp[0]; 158 159 return err; 160} 161 162static int __mmc_send_if_cond(struct mmc_host *host, u32 ocr, u8 pcie_bits, 163 u32 *resp) 164{ 165 struct mmc_command cmd = {}; 166 int err; 167 static const u8 test_pattern = 0xAA; 168 u8 result_pattern; 169 170 /* 171 * To support SD 2.0 cards, we must always invoke SD_SEND_IF_COND 172 * before SD_APP_OP_COND. This command will harmlessly fail for 173 * SD 1.0 cards. 174 */ 175 cmd.opcode = SD_SEND_IF_COND; 176 cmd.arg = ((ocr & 0xFF8000) != 0) << 8 | pcie_bits << 8 | test_pattern; 177 cmd.flags = MMC_RSP_SPI_R7 | MMC_RSP_R7 | MMC_CMD_BCR; 178 179 err = mmc_wait_for_cmd(host, &cmd, 0); 180 if (err) 181 return err; 182 183 if (mmc_host_is_spi(host)) 184 result_pattern = cmd.resp[1] & 0xFF; 185 else 186 result_pattern = cmd.resp[0] & 0xFF; 187 188 if (result_pattern != test_pattern) 189 return -EIO; 190 191 if (resp) 192 *resp = cmd.resp[0]; 193 194 return 0; 195} 196 197int mmc_send_if_cond(struct mmc_host *host, u32 ocr) 198{ 199 return __mmc_send_if_cond(host, ocr, 0, NULL); 200} 201 202int mmc_send_if_cond_pcie(struct mmc_host *host, u32 ocr) 203{ 204 u32 resp = 0; 205 u8 pcie_bits = 0; 206 int ret; 207 208 if (host->caps2 & MMC_CAP2_SD_EXP) { 209 /* Probe card for SD express support via PCIe. */ 210 pcie_bits = 0x10; 211 if (host->caps2 & MMC_CAP2_SD_EXP_1_2V) 212 /* Probe also for 1.2V support. */ 213 pcie_bits = 0x30; 214 } 215 216 ret = __mmc_send_if_cond(host, ocr, pcie_bits, &resp); 217 if (ret) 218 return 0; 219 220 /* Continue with the SD express init, if the card supports it. */ 221 resp &= 0x3000; 222 if (pcie_bits && resp) { 223 if (resp == 0x3000) 224 host->ios.timing = MMC_TIMING_SD_EXP_1_2V; 225 else 226 host->ios.timing = MMC_TIMING_SD_EXP; 227 228 /* 229 * According to the spec the clock shall also be gated, but 230 * let's leave this to the host driver for more flexibility. 231 */ 232 return host->ops->init_sd_express(host, &host->ios); 233 } 234 235 return 0; 236} 237 238int mmc_send_relative_addr(struct mmc_host *host, unsigned int *rca) 239{ 240 int err; 241 struct mmc_command cmd = {}; 242 243 cmd.opcode = SD_SEND_RELATIVE_ADDR; 244 cmd.arg = 0; 245 cmd.flags = MMC_RSP_R6 | MMC_CMD_BCR; 246 247 err = mmc_wait_for_cmd(host, &cmd, MMC_CMD_RETRIES); 248 if (err) 249 return err; 250 251 *rca = cmd.resp[0] >> 16; 252 253 return 0; 254} 255 256int mmc_app_send_scr(struct mmc_card *card) 257{ 258 int err; 259 struct mmc_request mrq = {}; 260 struct mmc_command cmd = {}; 261 struct mmc_data data = {}; 262 struct scatterlist sg; 263 __be32 *scr; 264 265 /* NOTE: caller guarantees scr is heap-allocated */ 266 267 err = mmc_app_cmd(card->host, card); 268 if (err) 269 return err; 270 271 /* dma onto stack is unsafe/nonportable, but callers to this 272 * routine normally provide temporary on-stack buffers ... 273 */ 274 scr = kmalloc(sizeof(card->raw_scr), GFP_KERNEL); 275 if (!scr) 276 return -ENOMEM; 277 278 mrq.cmd = &cmd; 279 mrq.data = &data; 280 281 cmd.opcode = SD_APP_SEND_SCR; 282 cmd.arg = 0; 283 cmd.flags = MMC_RSP_SPI_R1 | MMC_RSP_R1 | MMC_CMD_ADTC; 284 285 data.blksz = 8; 286 data.blocks = 1; 287 data.flags = MMC_DATA_READ; 288 data.sg = &sg; 289 data.sg_len = 1; 290 291 sg_init_one(&sg, scr, 8); 292 293 mmc_set_data_timeout(&data, card); 294 295 mmc_wait_for_req(card->host, &mrq); 296 297 card->raw_scr[0] = be32_to_cpu(scr[0]); 298 card->raw_scr[1] = be32_to_cpu(scr[1]); 299 300 kfree(scr); 301 302 if (cmd.error) 303 return cmd.error; 304 if (data.error) 305 return data.error; 306 307 return 0; 308} 309 310int mmc_sd_switch(struct mmc_card *card, int mode, int group, 311 u8 value, u8 *resp) 312{ 313 u32 cmd_args; 314 315 /* NOTE: caller guarantees resp is heap-allocated */ 316 317 mode = !!mode; 318 value &= 0xF; 319 cmd_args = mode << 31 | 0x00FFFFFF; 320 cmd_args &= ~(0xF << (group * 4)); 321 cmd_args |= value << (group * 4); 322 323 return mmc_send_adtc_data(card, card->host, SD_SWITCH, cmd_args, resp, 324 64); 325} 326 327int mmc_app_sd_status(struct mmc_card *card, void *ssr) 328{ 329 int err; 330 struct mmc_request mrq = {}; 331 struct mmc_command cmd = {}; 332 struct mmc_data data = {}; 333 struct scatterlist sg; 334 335 /* NOTE: caller guarantees ssr is heap-allocated */ 336 337 err = mmc_app_cmd(card->host, card); 338 if (err) 339 return err; 340 341 mrq.cmd = &cmd; 342 mrq.data = &data; 343 344 cmd.opcode = SD_APP_SD_STATUS; 345 cmd.arg = 0; 346 cmd.flags = MMC_RSP_SPI_R2 | MMC_RSP_R1 | MMC_CMD_ADTC; 347 348 data.blksz = 64; 349 data.blocks = 1; 350 data.flags = MMC_DATA_READ; 351 data.sg = &sg; 352 data.sg_len = 1; 353 354 sg_init_one(&sg, ssr, 64); 355 356 mmc_set_data_timeout(&data, card); 357 358 mmc_wait_for_req(card->host, &mrq); 359 360 if (cmd.error) 361 return cmd.error; 362 if (data.error) 363 return data.error; 364 365 return 0; 366}