1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * MHI Endpoint bus stack 4 * 5 * Copyright (C) 2022 Linaro Ltd. 6 * Author: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org> 7 */ 8 9 #include <linux/bitfield.h> 10 #include <linux/delay.h> 11 #include <linux/dma-direction.h> 12 #include <linux/interrupt.h> 13 #include <linux/io.h> 14 #include <linux/irq.h> 15 #include <linux/mhi_ep.h> 16 #include <linux/mod_devicetable.h> 17 #include <linux/module.h> 18 #include "internal.h" 19 20 #define M0_WAIT_DELAY_MS 100 21 #define M0_WAIT_COUNT 100 22 23 static DEFINE_IDA(mhi_ep_cntrl_ida); 24 25 static int mhi_ep_create_device(struct mhi_ep_cntrl *mhi_cntrl, u32 ch_id); 26 static int mhi_ep_destroy_device(struct device *dev, void *data); 27 28 static int mhi_ep_send_event(struct mhi_ep_cntrl *mhi_cntrl, u32 ring_idx, 29 struct mhi_ring_element *el, bool bei) 30 { 31 struct device *dev = &mhi_cntrl->mhi_dev->dev; 32 union mhi_ep_ring_ctx *ctx; 33 struct mhi_ep_ring *ring; 34 int ret; 35 36 mutex_lock(&mhi_cntrl->event_lock); 37 ring = &mhi_cntrl->mhi_event[ring_idx].ring; 38 ctx = (union mhi_ep_ring_ctx *)&mhi_cntrl->ev_ctx_cache[ring_idx]; 39 if (!ring->started) { 40 ret = mhi_ep_ring_start(mhi_cntrl, ring, ctx); 41 if (ret) { 42 dev_err(dev, "Error starting event ring (%u)\n", ring_idx); 43 goto err_unlock; 44 } 45 } 46 47 /* Add element to the event ring */ 48 ret = mhi_ep_ring_add_element(ring, el); 49 if (ret) { 50 dev_err(dev, "Error adding element to event ring (%u)\n", ring_idx); 51 goto err_unlock; 52 } 53 54 mutex_unlock(&mhi_cntrl->event_lock); 55 56 /* 57 * As per the MHI specification, section 4.3, Interrupt moderation: 58 * 59 * 1. If BEI flag is not set, cancel any pending intmodt work if started 60 * for the event ring and raise IRQ immediately. 61 * 62 * 2. If both BEI and intmodt are set, and if no IRQ is pending for the 63 * same event ring, start the IRQ delayed work as per the value of 64 * intmodt. If previous IRQ is pending, then do nothing as the pending 65 * IRQ is enough for the host to process the current event ring element. 66 * 67 * 3. If BEI is set and intmodt is not set, no need to raise IRQ. 68 */ 69 if (!bei) { 70 if (READ_ONCE(ring->irq_pending)) 71 cancel_delayed_work(&ring->intmodt_work); 72 73 mhi_cntrl->raise_irq(mhi_cntrl, ring->irq_vector); 74 } else if (ring->intmodt && !READ_ONCE(ring->irq_pending)) { 75 WRITE_ONCE(ring->irq_pending, true); 76 schedule_delayed_work(&ring->intmodt_work, msecs_to_jiffies(ring->intmodt)); 77 } 78 79 return 0; 80 81 err_unlock: 82 mutex_unlock(&mhi_cntrl->event_lock); 83 84 return ret; 85 } 86 87 static int mhi_ep_send_completion_event(struct mhi_ep_cntrl *mhi_cntrl, struct mhi_ep_ring *ring, 88 struct mhi_ring_element *tre, u32 len, enum mhi_ev_ccs code) 89 { 90 struct mhi_ring_element *event; 91 int ret; 92 93 event = kmem_cache_zalloc(mhi_cntrl->ev_ring_el_cache, GFP_KERNEL); 94 if (!event) 95 return -ENOMEM; 96 97 event->ptr = cpu_to_le64(ring->rbase + ring->rd_offset * sizeof(*tre)); 98 event->dword[0] = MHI_TRE_EV_DWORD0(code, len); 99 event->dword[1] = MHI_TRE_EV_DWORD1(ring->ch_id, MHI_PKT_TYPE_TX_EVENT); 100 101 ret = mhi_ep_send_event(mhi_cntrl, ring->er_index, event, MHI_TRE_DATA_GET_BEI(tre)); 102 kmem_cache_free(mhi_cntrl->ev_ring_el_cache, event); 103 104 return ret; 105 } 106 107 int mhi_ep_send_state_change_event(struct mhi_ep_cntrl *mhi_cntrl, enum mhi_state state) 108 { 109 struct mhi_ring_element *event; 110 int ret; 111 112 event = kmem_cache_zalloc(mhi_cntrl->ev_ring_el_cache, GFP_KERNEL); 113 if (!event) 114 return -ENOMEM; 115 116 event->dword[0] = MHI_SC_EV_DWORD0(state); 117 event->dword[1] = MHI_SC_EV_DWORD1(MHI_PKT_TYPE_STATE_CHANGE_EVENT); 118 119 ret = mhi_ep_send_event(mhi_cntrl, 0, event, 0); 120 kmem_cache_free(mhi_cntrl->ev_ring_el_cache, event); 121 122 return ret; 123 } 124 125 int mhi_ep_send_ee_event(struct mhi_ep_cntrl *mhi_cntrl, enum mhi_ee_type exec_env) 126 { 127 struct mhi_ring_element *event; 128 int ret; 129 130 event = kmem_cache_zalloc(mhi_cntrl->ev_ring_el_cache, GFP_KERNEL); 131 if (!event) 132 return -ENOMEM; 133 134 event->dword[0] = MHI_EE_EV_DWORD0(exec_env); 135 event->dword[1] = MHI_SC_EV_DWORD1(MHI_PKT_TYPE_EE_EVENT); 136 137 ret = mhi_ep_send_event(mhi_cntrl, 0, event, 0); 138 kmem_cache_free(mhi_cntrl->ev_ring_el_cache, event); 139 140 return ret; 141 } 142 143 static int mhi_ep_send_cmd_comp_event(struct mhi_ep_cntrl *mhi_cntrl, enum mhi_ev_ccs code) 144 { 145 struct mhi_ep_ring *ring = &mhi_cntrl->mhi_cmd->ring; 146 struct mhi_ring_element *event; 147 int ret; 148 149 event = kmem_cache_zalloc(mhi_cntrl->ev_ring_el_cache, GFP_KERNEL); 150 if (!event) 151 return -ENOMEM; 152 153 event->ptr = cpu_to_le64(ring->rbase + ring->rd_offset * sizeof(struct mhi_ring_element)); 154 event->dword[0] = MHI_CC_EV_DWORD0(code); 155 event->dword[1] = MHI_CC_EV_DWORD1(MHI_PKT_TYPE_CMD_COMPLETION_EVENT); 156 157 ret = mhi_ep_send_event(mhi_cntrl, 0, event, 0); 158 kmem_cache_free(mhi_cntrl->ev_ring_el_cache, event); 159 160 return ret; 161 } 162 163 static int mhi_ep_process_cmd_ring(struct mhi_ep_ring *ring, struct mhi_ring_element *el) 164 { 165 struct mhi_ep_cntrl *mhi_cntrl = ring->mhi_cntrl; 166 struct device *dev = &mhi_cntrl->mhi_dev->dev; 167 struct mhi_result result = {}; 168 struct mhi_ep_chan *mhi_chan; 169 struct mhi_ep_ring *ch_ring; 170 u32 tmp, ch_id; 171 int ret; 172 173 ch_id = MHI_TRE_GET_CMD_CHID(el); 174 175 /* Check if the channel is supported by the controller */ 176 if ((ch_id >= mhi_cntrl->max_chan) || !mhi_cntrl->mhi_chan[ch_id].name) { 177 dev_dbg(dev, "Channel (%u) not supported!\n", ch_id); 178 return -ENODEV; 179 } 180 181 mhi_chan = &mhi_cntrl->mhi_chan[ch_id]; 182 ch_ring = &mhi_cntrl->mhi_chan[ch_id].ring; 183 184 switch (MHI_TRE_GET_CMD_TYPE(el)) { 185 case MHI_PKT_TYPE_START_CHAN_CMD: 186 dev_dbg(dev, "Received START command for channel (%u)\n", ch_id); 187 188 mutex_lock(&mhi_chan->lock); 189 /* Initialize and configure the corresponding channel ring */ 190 if (!ch_ring->started) { 191 ret = mhi_ep_ring_start(mhi_cntrl, ch_ring, 192 (union mhi_ep_ring_ctx *)&mhi_cntrl->ch_ctx_cache[ch_id]); 193 if (ret) { 194 dev_err(dev, "Failed to start ring for channel (%u)\n", ch_id); 195 ret = mhi_ep_send_cmd_comp_event(mhi_cntrl, 196 MHI_EV_CC_UNDEFINED_ERR); 197 if (ret) 198 dev_err(dev, "Error sending completion event: %d\n", ret); 199 200 goto err_unlock; 201 } 202 203 mhi_chan->rd_offset = ch_ring->rd_offset; 204 } 205 206 /* Set channel state to RUNNING */ 207 mhi_chan->state = MHI_CH_STATE_RUNNING; 208 tmp = le32_to_cpu(mhi_cntrl->ch_ctx_cache[ch_id].chcfg); 209 tmp &= ~CHAN_CTX_CHSTATE_MASK; 210 tmp |= FIELD_PREP(CHAN_CTX_CHSTATE_MASK, MHI_CH_STATE_RUNNING); 211 mhi_cntrl->ch_ctx_cache[ch_id].chcfg = cpu_to_le32(tmp); 212 213 ret = mhi_ep_send_cmd_comp_event(mhi_cntrl, MHI_EV_CC_SUCCESS); 214 if (ret) { 215 dev_err(dev, "Error sending command completion event (%u)\n", 216 MHI_EV_CC_SUCCESS); 217 goto err_unlock; 218 } 219 220 mutex_unlock(&mhi_chan->lock); 221 222 /* 223 * Create MHI device only during UL channel start. Since the MHI 224 * channels operate in a pair, we'll associate both UL and DL 225 * channels to the same device. 226 * 227 * We also need to check for mhi_dev != NULL because, the host 228 * will issue START_CHAN command during resume and we don't 229 * destroy the device during suspend. 230 */ 231 if (!(ch_id % 2) && !mhi_chan->mhi_dev) { 232 ret = mhi_ep_create_device(mhi_cntrl, ch_id); 233 if (ret) { 234 dev_err(dev, "Error creating device for channel (%u)\n", ch_id); 235 mutex_lock(&mhi_cntrl->state_lock); 236 mhi_ep_handle_syserr(mhi_cntrl); 237 mutex_unlock(&mhi_cntrl->state_lock); 238 return ret; 239 } 240 } 241 242 /* Finally, enable DB for the channel */ 243 mhi_ep_mmio_enable_chdb(mhi_cntrl, ch_id); 244 245 break; 246 case MHI_PKT_TYPE_STOP_CHAN_CMD: 247 dev_dbg(dev, "Received STOP command for channel (%u)\n", ch_id); 248 if (!ch_ring->started) { 249 dev_err(dev, "Channel (%u) not opened\n", ch_id); 250 return -ENODEV; 251 } 252 253 mutex_lock(&mhi_chan->lock); 254 /* Disable DB for the channel */ 255 mhi_ep_mmio_disable_chdb(mhi_cntrl, ch_id); 256 257 /* Send channel disconnect status to client drivers */ 258 if (mhi_chan->xfer_cb) { 259 result.transaction_status = -ENOTCONN; 260 result.bytes_xferd = 0; 261 mhi_chan->xfer_cb(mhi_chan->mhi_dev, &result); 262 } 263 264 /* Set channel state to STOP */ 265 mhi_chan->state = MHI_CH_STATE_STOP; 266 tmp = le32_to_cpu(mhi_cntrl->ch_ctx_cache[ch_id].chcfg); 267 tmp &= ~CHAN_CTX_CHSTATE_MASK; 268 tmp |= FIELD_PREP(CHAN_CTX_CHSTATE_MASK, MHI_CH_STATE_STOP); 269 mhi_cntrl->ch_ctx_cache[ch_id].chcfg = cpu_to_le32(tmp); 270 271 ret = mhi_ep_send_cmd_comp_event(mhi_cntrl, MHI_EV_CC_SUCCESS); 272 if (ret) { 273 dev_err(dev, "Error sending command completion event (%u)\n", 274 MHI_EV_CC_SUCCESS); 275 goto err_unlock; 276 } 277 278 mutex_unlock(&mhi_chan->lock); 279 break; 280 case MHI_PKT_TYPE_RESET_CHAN_CMD: 281 dev_dbg(dev, "Received RESET command for channel (%u)\n", ch_id); 282 if (!ch_ring->started) { 283 dev_err(dev, "Channel (%u) not opened\n", ch_id); 284 return -ENODEV; 285 } 286 287 mutex_lock(&mhi_chan->lock); 288 /* Stop and reset the transfer ring */ 289 mhi_ep_ring_reset(mhi_cntrl, ch_ring); 290 291 /* Send channel disconnect status to client driver */ 292 if (mhi_chan->xfer_cb) { 293 result.transaction_status = -ENOTCONN; 294 result.bytes_xferd = 0; 295 mhi_chan->xfer_cb(mhi_chan->mhi_dev, &result); 296 } 297 298 /* Set channel state to DISABLED */ 299 mhi_chan->state = MHI_CH_STATE_DISABLED; 300 tmp = le32_to_cpu(mhi_cntrl->ch_ctx_cache[ch_id].chcfg); 301 tmp &= ~CHAN_CTX_CHSTATE_MASK; 302 tmp |= FIELD_PREP(CHAN_CTX_CHSTATE_MASK, MHI_CH_STATE_DISABLED); 303 mhi_cntrl->ch_ctx_cache[ch_id].chcfg = cpu_to_le32(tmp); 304 305 ret = mhi_ep_send_cmd_comp_event(mhi_cntrl, MHI_EV_CC_SUCCESS); 306 if (ret) { 307 dev_err(dev, "Error sending command completion event (%u)\n", 308 MHI_EV_CC_SUCCESS); 309 goto err_unlock; 310 } 311 312 mutex_unlock(&mhi_chan->lock); 313 break; 314 default: 315 dev_err(dev, "Invalid command received: %lu for channel (%u)\n", 316 MHI_TRE_GET_CMD_TYPE(el), ch_id); 317 return -EINVAL; 318 } 319 320 return 0; 321 322 err_unlock: 323 mutex_unlock(&mhi_chan->lock); 324 325 return ret; 326 } 327 328 bool mhi_ep_queue_is_empty(struct mhi_ep_device *mhi_dev, enum dma_data_direction dir) 329 { 330 struct mhi_ep_chan *mhi_chan = (dir == DMA_FROM_DEVICE) ? mhi_dev->dl_chan : 331 mhi_dev->ul_chan; 332 struct mhi_ep_cntrl *mhi_cntrl = mhi_dev->mhi_cntrl; 333 struct mhi_ep_ring *ring = &mhi_cntrl->mhi_chan[mhi_chan->chan].ring; 334 335 return !!(mhi_chan->rd_offset == ring->wr_offset); 336 } 337 EXPORT_SYMBOL_GPL(mhi_ep_queue_is_empty); 338 339 static void mhi_ep_read_completion(struct mhi_ep_buf_info *buf_info) 340 { 341 struct mhi_ep_device *mhi_dev = buf_info->mhi_dev; 342 struct mhi_ep_cntrl *mhi_cntrl = mhi_dev->mhi_cntrl; 343 struct mhi_ep_chan *mhi_chan = mhi_dev->ul_chan; 344 struct mhi_ep_ring *ring = &mhi_cntrl->mhi_chan[mhi_chan->chan].ring; 345 struct mhi_ring_element *el = &ring->ring_cache[ring->rd_offset]; 346 struct mhi_result result = {}; 347 int ret; 348 349 if (mhi_chan->xfer_cb) { 350 result.buf_addr = buf_info->cb_buf; 351 result.dir = mhi_chan->dir; 352 result.bytes_xferd = buf_info->size; 353 354 mhi_chan->xfer_cb(mhi_dev, &result); 355 } 356 357 /* 358 * The host will split the data packet into multiple TREs if it can't fit 359 * the packet in a single TRE. In that case, CHAIN flag will be set by the 360 * host for all TREs except the last one. 361 */ 362 if (buf_info->code != MHI_EV_CC_OVERFLOW) { 363 if (MHI_TRE_DATA_GET_CHAIN(el)) { 364 /* 365 * IEOB (Interrupt on End of Block) flag will be set by the host if 366 * it expects the completion event for all TREs of a TD. 367 */ 368 if (MHI_TRE_DATA_GET_IEOB(el)) { 369 ret = mhi_ep_send_completion_event(mhi_cntrl, ring, el, 370 MHI_TRE_DATA_GET_LEN(el), 371 MHI_EV_CC_EOB); 372 if (ret) { 373 dev_err(&mhi_chan->mhi_dev->dev, 374 "Error sending transfer compl. event\n"); 375 goto err_free_tre_buf; 376 } 377 } 378 } else { 379 /* 380 * IEOT (Interrupt on End of Transfer) flag will be set by the host 381 * for the last TRE of the TD and expects the completion event for 382 * the same. 383 */ 384 if (MHI_TRE_DATA_GET_IEOT(el)) { 385 ret = mhi_ep_send_completion_event(mhi_cntrl, ring, el, 386 MHI_TRE_DATA_GET_LEN(el), 387 MHI_EV_CC_EOT); 388 if (ret) { 389 dev_err(&mhi_chan->mhi_dev->dev, 390 "Error sending transfer compl. event\n"); 391 goto err_free_tre_buf; 392 } 393 } 394 } 395 } 396 397 mhi_ep_ring_inc_index(ring); 398 399 err_free_tre_buf: 400 kmem_cache_free(mhi_cntrl->tre_buf_cache, buf_info->cb_buf); 401 } 402 403 static int mhi_ep_read_channel(struct mhi_ep_cntrl *mhi_cntrl, 404 struct mhi_ep_ring *ring) 405 { 406 struct mhi_ep_chan *mhi_chan = &mhi_cntrl->mhi_chan[ring->ch_id]; 407 struct device *dev = &mhi_cntrl->mhi_dev->dev; 408 size_t tr_len, read_offset; 409 struct mhi_ep_buf_info buf_info = {}; 410 u32 len = MHI_EP_DEFAULT_MTU; 411 struct mhi_ring_element *el; 412 void *buf_addr; 413 int ret; 414 415 do { 416 /* Don't process the transfer ring if the channel is not in RUNNING state */ 417 if (mhi_chan->state != MHI_CH_STATE_RUNNING) { 418 dev_err(dev, "Channel not available\n"); 419 return -ENODEV; 420 } 421 422 el = &ring->ring_cache[mhi_chan->rd_offset]; 423 424 /* Check if there is data pending to be read from previous read operation */ 425 if (mhi_chan->tre_bytes_left) { 426 dev_dbg(dev, "TRE bytes remaining: %u\n", mhi_chan->tre_bytes_left); 427 tr_len = min(len, mhi_chan->tre_bytes_left); 428 } else { 429 mhi_chan->tre_loc = MHI_TRE_DATA_GET_PTR(el); 430 mhi_chan->tre_size = MHI_TRE_DATA_GET_LEN(el); 431 mhi_chan->tre_bytes_left = mhi_chan->tre_size; 432 433 tr_len = min(len, mhi_chan->tre_size); 434 } 435 436 read_offset = mhi_chan->tre_size - mhi_chan->tre_bytes_left; 437 438 buf_addr = kmem_cache_zalloc(mhi_cntrl->tre_buf_cache, GFP_KERNEL); 439 if (!buf_addr) 440 return -ENOMEM; 441 442 buf_info.host_addr = mhi_chan->tre_loc + read_offset; 443 buf_info.dev_addr = buf_addr; 444 buf_info.size = tr_len; 445 buf_info.cb = mhi_ep_read_completion; 446 buf_info.cb_buf = buf_addr; 447 buf_info.mhi_dev = mhi_chan->mhi_dev; 448 449 if (mhi_chan->tre_bytes_left - tr_len) 450 buf_info.code = MHI_EV_CC_OVERFLOW; 451 452 dev_dbg(dev, "Reading %zd bytes from channel (%u)\n", tr_len, ring->ch_id); 453 ret = mhi_cntrl->read_async(mhi_cntrl, &buf_info); 454 if (ret) { 455 dev_err(&mhi_chan->mhi_dev->dev, "Error reading from channel\n"); 456 goto err_free_buf_addr; 457 } 458 459 mhi_chan->tre_bytes_left -= tr_len; 460 461 if (!mhi_chan->tre_bytes_left) 462 mhi_chan->rd_offset = (mhi_chan->rd_offset + 1) % ring->ring_size; 463 /* Read until the some buffer is left or the ring becomes not empty */ 464 } while (!mhi_ep_queue_is_empty(mhi_chan->mhi_dev, DMA_TO_DEVICE)); 465 466 return 0; 467 468 err_free_buf_addr: 469 kmem_cache_free(mhi_cntrl->tre_buf_cache, buf_addr); 470 471 return ret; 472 } 473 474 static int mhi_ep_process_ch_ring(struct mhi_ep_ring *ring) 475 { 476 struct mhi_ep_cntrl *mhi_cntrl = ring->mhi_cntrl; 477 struct mhi_result result = {}; 478 struct mhi_ep_chan *mhi_chan; 479 int ret; 480 481 mhi_chan = &mhi_cntrl->mhi_chan[ring->ch_id]; 482 483 /* 484 * Bail out if transfer callback is not registered for the channel. 485 * This is most likely due to the client driver not loaded at this point. 486 */ 487 if (!mhi_chan->xfer_cb) { 488 dev_err(&mhi_chan->mhi_dev->dev, "Client driver not available\n"); 489 return -ENODEV; 490 } 491 492 if (ring->ch_id % 2) { 493 /* DL channel */ 494 result.dir = mhi_chan->dir; 495 mhi_chan->xfer_cb(mhi_chan->mhi_dev, &result); 496 } else { 497 /* UL channel */ 498 ret = mhi_ep_read_channel(mhi_cntrl, ring); 499 if (ret) { 500 dev_err(&mhi_chan->mhi_dev->dev, "Failed to read channel\n"); 501 return ret; 502 } 503 } 504 505 return 0; 506 } 507 508 static void mhi_ep_skb_completion(struct mhi_ep_buf_info *buf_info) 509 { 510 struct mhi_ep_device *mhi_dev = buf_info->mhi_dev; 511 struct mhi_ep_cntrl *mhi_cntrl = mhi_dev->mhi_cntrl; 512 struct mhi_ep_chan *mhi_chan = mhi_dev->dl_chan; 513 struct mhi_ep_ring *ring = &mhi_cntrl->mhi_chan[mhi_chan->chan].ring; 514 struct mhi_ring_element *el = &ring->ring_cache[ring->rd_offset]; 515 struct device *dev = &mhi_dev->dev; 516 struct mhi_result result = {}; 517 int ret; 518 519 if (mhi_chan->xfer_cb) { 520 result.buf_addr = buf_info->cb_buf; 521 result.dir = mhi_chan->dir; 522 result.bytes_xferd = buf_info->size; 523 524 mhi_chan->xfer_cb(mhi_dev, &result); 525 } 526 527 ret = mhi_ep_send_completion_event(mhi_cntrl, ring, el, buf_info->size, 528 buf_info->code); 529 if (ret) { 530 dev_err(dev, "Error sending transfer completion event\n"); 531 return; 532 } 533 534 mhi_ep_ring_inc_index(ring); 535 } 536 537 /* TODO: Handle partially formed TDs */ 538 int mhi_ep_queue_skb(struct mhi_ep_device *mhi_dev, struct sk_buff *skb) 539 { 540 struct mhi_ep_cntrl *mhi_cntrl = mhi_dev->mhi_cntrl; 541 struct mhi_ep_chan *mhi_chan = mhi_dev->dl_chan; 542 struct device *dev = &mhi_chan->mhi_dev->dev; 543 struct mhi_ep_buf_info buf_info = {}; 544 struct mhi_ring_element *el; 545 u32 buf_left, read_offset; 546 struct mhi_ep_ring *ring; 547 size_t tr_len; 548 u32 tre_len; 549 int ret; 550 551 buf_left = skb->len; 552 ring = &mhi_cntrl->mhi_chan[mhi_chan->chan].ring; 553 554 mutex_lock(&mhi_chan->lock); 555 556 do { 557 /* Don't process the transfer ring if the channel is not in RUNNING state */ 558 if (mhi_chan->state != MHI_CH_STATE_RUNNING) { 559 dev_err(dev, "Channel not available\n"); 560 ret = -ENODEV; 561 goto err_exit; 562 } 563 564 if (mhi_ep_queue_is_empty(mhi_dev, DMA_FROM_DEVICE)) { 565 dev_err(dev, "TRE not available!\n"); 566 ret = -ENOSPC; 567 goto err_exit; 568 } 569 570 el = &ring->ring_cache[mhi_chan->rd_offset]; 571 tre_len = MHI_TRE_DATA_GET_LEN(el); 572 573 tr_len = min(buf_left, tre_len); 574 read_offset = skb->len - buf_left; 575 576 buf_info.dev_addr = skb->data + read_offset; 577 buf_info.host_addr = MHI_TRE_DATA_GET_PTR(el); 578 buf_info.size = tr_len; 579 buf_info.cb = mhi_ep_skb_completion; 580 buf_info.cb_buf = skb; 581 buf_info.mhi_dev = mhi_dev; 582 583 /* 584 * For all TREs queued by the host for DL channel, only the EOT flag will be set. 585 * If the packet doesn't fit into a single TRE, send the OVERFLOW event to 586 * the host so that the host can adjust the packet boundary to next TREs. Else send 587 * the EOT event to the host indicating the packet boundary. 588 */ 589 if (buf_left - tr_len) 590 buf_info.code = MHI_EV_CC_OVERFLOW; 591 else 592 buf_info.code = MHI_EV_CC_EOT; 593 594 dev_dbg(dev, "Writing %zd bytes to channel (%u)\n", tr_len, ring->ch_id); 595 ret = mhi_cntrl->write_async(mhi_cntrl, &buf_info); 596 if (ret) { 597 dev_err(dev, "Error writing to the channel\n"); 598 goto err_exit; 599 } 600 601 buf_left -= tr_len; 602 603 /* 604 * Update the read offset cached in mhi_chan. Actual read offset 605 * will be updated by the completion handler. 606 */ 607 mhi_chan->rd_offset = (mhi_chan->rd_offset + 1) % ring->ring_size; 608 } while (buf_left); 609 610 mutex_unlock(&mhi_chan->lock); 611 612 return 0; 613 614 err_exit: 615 mutex_unlock(&mhi_chan->lock); 616 617 return ret; 618 } 619 EXPORT_SYMBOL_GPL(mhi_ep_queue_skb); 620 621 static int mhi_ep_cache_host_cfg(struct mhi_ep_cntrl *mhi_cntrl) 622 { 623 size_t cmd_ctx_host_size, ch_ctx_host_size, ev_ctx_host_size; 624 struct device *dev = &mhi_cntrl->mhi_dev->dev; 625 int ret; 626 627 /* Update the number of event rings (NER) programmed by the host */ 628 mhi_ep_mmio_update_ner(mhi_cntrl); 629 630 dev_dbg(dev, "Number of Event rings: %u, HW Event rings: %u\n", 631 mhi_cntrl->event_rings, mhi_cntrl->hw_event_rings); 632 633 ch_ctx_host_size = sizeof(struct mhi_chan_ctxt) * mhi_cntrl->max_chan; 634 ev_ctx_host_size = sizeof(struct mhi_event_ctxt) * mhi_cntrl->event_rings; 635 cmd_ctx_host_size = sizeof(struct mhi_cmd_ctxt) * NR_OF_CMD_RINGS; 636 637 /* Get the channel context base pointer from host */ 638 mhi_ep_mmio_get_chc_base(mhi_cntrl); 639 640 /* Allocate and map memory for caching host channel context */ 641 ret = mhi_cntrl->alloc_map(mhi_cntrl, mhi_cntrl->ch_ctx_host_pa, 642 &mhi_cntrl->ch_ctx_cache_phys, 643 (void __iomem **) &mhi_cntrl->ch_ctx_cache, 644 ch_ctx_host_size); 645 if (ret) { 646 dev_err(dev, "Failed to allocate and map ch_ctx_cache\n"); 647 return ret; 648 } 649 650 /* Get the event context base pointer from host */ 651 mhi_ep_mmio_get_erc_base(mhi_cntrl); 652 653 /* Allocate and map memory for caching host event context */ 654 ret = mhi_cntrl->alloc_map(mhi_cntrl, mhi_cntrl->ev_ctx_host_pa, 655 &mhi_cntrl->ev_ctx_cache_phys, 656 (void __iomem **) &mhi_cntrl->ev_ctx_cache, 657 ev_ctx_host_size); 658 if (ret) { 659 dev_err(dev, "Failed to allocate and map ev_ctx_cache\n"); 660 goto err_ch_ctx; 661 } 662 663 /* Get the command context base pointer from host */ 664 mhi_ep_mmio_get_crc_base(mhi_cntrl); 665 666 /* Allocate and map memory for caching host command context */ 667 ret = mhi_cntrl->alloc_map(mhi_cntrl, mhi_cntrl->cmd_ctx_host_pa, 668 &mhi_cntrl->cmd_ctx_cache_phys, 669 (void __iomem **) &mhi_cntrl->cmd_ctx_cache, 670 cmd_ctx_host_size); 671 if (ret) { 672 dev_err(dev, "Failed to allocate and map cmd_ctx_cache\n"); 673 goto err_ev_ctx; 674 } 675 676 /* Initialize command ring */ 677 ret = mhi_ep_ring_start(mhi_cntrl, &mhi_cntrl->mhi_cmd->ring, 678 (union mhi_ep_ring_ctx *)mhi_cntrl->cmd_ctx_cache); 679 if (ret) { 680 dev_err(dev, "Failed to start the command ring\n"); 681 goto err_cmd_ctx; 682 } 683 684 return ret; 685 686 err_cmd_ctx: 687 mhi_cntrl->unmap_free(mhi_cntrl, mhi_cntrl->cmd_ctx_host_pa, mhi_cntrl->cmd_ctx_cache_phys, 688 (void __iomem *) mhi_cntrl->cmd_ctx_cache, cmd_ctx_host_size); 689 690 err_ev_ctx: 691 mhi_cntrl->unmap_free(mhi_cntrl, mhi_cntrl->ev_ctx_host_pa, mhi_cntrl->ev_ctx_cache_phys, 692 (void __iomem *) mhi_cntrl->ev_ctx_cache, ev_ctx_host_size); 693 694 err_ch_ctx: 695 mhi_cntrl->unmap_free(mhi_cntrl, mhi_cntrl->ch_ctx_host_pa, mhi_cntrl->ch_ctx_cache_phys, 696 (void __iomem *) mhi_cntrl->ch_ctx_cache, ch_ctx_host_size); 697 698 return ret; 699 } 700 701 static void mhi_ep_free_host_cfg(struct mhi_ep_cntrl *mhi_cntrl) 702 { 703 size_t cmd_ctx_host_size, ch_ctx_host_size, ev_ctx_host_size; 704 705 ch_ctx_host_size = sizeof(struct mhi_chan_ctxt) * mhi_cntrl->max_chan; 706 ev_ctx_host_size = sizeof(struct mhi_event_ctxt) * mhi_cntrl->event_rings; 707 cmd_ctx_host_size = sizeof(struct mhi_cmd_ctxt) * NR_OF_CMD_RINGS; 708 709 mhi_cntrl->unmap_free(mhi_cntrl, mhi_cntrl->cmd_ctx_host_pa, mhi_cntrl->cmd_ctx_cache_phys, 710 (void __iomem *) mhi_cntrl->cmd_ctx_cache, cmd_ctx_host_size); 711 712 mhi_cntrl->unmap_free(mhi_cntrl, mhi_cntrl->ev_ctx_host_pa, mhi_cntrl->ev_ctx_cache_phys, 713 (void __iomem *) mhi_cntrl->ev_ctx_cache, ev_ctx_host_size); 714 715 mhi_cntrl->unmap_free(mhi_cntrl, mhi_cntrl->ch_ctx_host_pa, mhi_cntrl->ch_ctx_cache_phys, 716 (void __iomem *) mhi_cntrl->ch_ctx_cache, ch_ctx_host_size); 717 } 718 719 static void mhi_ep_enable_int(struct mhi_ep_cntrl *mhi_cntrl) 720 { 721 /* 722 * Doorbell interrupts are enabled when the corresponding channel gets started. 723 * Enabling all interrupts here triggers spurious irqs as some of the interrupts 724 * associated with hw channels always get triggered. 725 */ 726 mhi_ep_mmio_enable_ctrl_interrupt(mhi_cntrl); 727 mhi_ep_mmio_enable_cmdb_interrupt(mhi_cntrl); 728 } 729 730 static int mhi_ep_enable(struct mhi_ep_cntrl *mhi_cntrl) 731 { 732 struct device *dev = &mhi_cntrl->mhi_dev->dev; 733 enum mhi_state state; 734 bool mhi_reset; 735 u32 count = 0; 736 int ret; 737 738 /* Wait for Host to set the M0 state */ 739 do { 740 msleep(M0_WAIT_DELAY_MS); 741 mhi_ep_mmio_get_mhi_state(mhi_cntrl, &state, &mhi_reset); 742 if (mhi_reset) { 743 /* Clear the MHI reset if host is in reset state */ 744 mhi_ep_mmio_clear_reset(mhi_cntrl); 745 dev_info(dev, "Detected Host reset while waiting for M0\n"); 746 } 747 count++; 748 } while (state != MHI_STATE_M0 && count < M0_WAIT_COUNT); 749 750 if (state != MHI_STATE_M0) { 751 dev_err(dev, "Host failed to enter M0\n"); 752 return -ETIMEDOUT; 753 } 754 755 ret = mhi_ep_cache_host_cfg(mhi_cntrl); 756 if (ret) { 757 dev_err(dev, "Failed to cache host config\n"); 758 return ret; 759 } 760 761 mhi_ep_mmio_set_env(mhi_cntrl, MHI_EE_AMSS); 762 763 /* Enable all interrupts now */ 764 mhi_ep_enable_int(mhi_cntrl); 765 766 return 0; 767 } 768 769 static void mhi_ep_cmd_ring_worker(struct work_struct *work) 770 { 771 struct mhi_ep_cntrl *mhi_cntrl = container_of(work, struct mhi_ep_cntrl, cmd_ring_work); 772 struct mhi_ep_ring *ring = &mhi_cntrl->mhi_cmd->ring; 773 struct device *dev = &mhi_cntrl->mhi_dev->dev; 774 struct mhi_ring_element *el; 775 int ret; 776 777 /* Update the write offset for the ring */ 778 ret = mhi_ep_update_wr_offset(ring); 779 if (ret) { 780 dev_err(dev, "Error updating write offset for ring\n"); 781 return; 782 } 783 784 /* Sanity check to make sure there are elements in the ring */ 785 if (ring->rd_offset == ring->wr_offset) 786 return; 787 788 /* 789 * Process command ring element till write offset. In case of an error, just try to 790 * process next element. 791 */ 792 while (ring->rd_offset != ring->wr_offset) { 793 el = &ring->ring_cache[ring->rd_offset]; 794 795 ret = mhi_ep_process_cmd_ring(ring, el); 796 if (ret && ret != -ENODEV) 797 dev_err(dev, "Error processing cmd ring element: %zu\n", ring->rd_offset); 798 799 mhi_ep_ring_inc_index(ring); 800 } 801 } 802 803 static void mhi_ep_ch_ring_worker(struct work_struct *work) 804 { 805 struct mhi_ep_cntrl *mhi_cntrl = container_of(work, struct mhi_ep_cntrl, ch_ring_work); 806 struct device *dev = &mhi_cntrl->mhi_dev->dev; 807 struct mhi_ep_ring_item *itr, *tmp; 808 struct mhi_ep_ring *ring; 809 struct mhi_ep_chan *chan; 810 unsigned long flags; 811 LIST_HEAD(head); 812 int ret; 813 814 spin_lock_irqsave(&mhi_cntrl->list_lock, flags); 815 list_splice_tail_init(&mhi_cntrl->ch_db_list, &head); 816 spin_unlock_irqrestore(&mhi_cntrl->list_lock, flags); 817 818 /* Process each queued channel ring. In case of an error, just process next element. */ 819 list_for_each_entry_safe(itr, tmp, &head, node) { 820 list_del(&itr->node); 821 ring = itr->ring; 822 823 chan = &mhi_cntrl->mhi_chan[ring->ch_id]; 824 mutex_lock(&chan->lock); 825 826 /* 827 * The ring could've stopped while we waited to grab the (chan->lock), so do 828 * a sanity check before going further. 829 */ 830 if (!ring->started) { 831 mutex_unlock(&chan->lock); 832 kfree(itr); 833 continue; 834 } 835 836 /* Update the write offset for the ring */ 837 ret = mhi_ep_update_wr_offset(ring); 838 if (ret) { 839 dev_err(dev, "Error updating write offset for ring\n"); 840 mutex_unlock(&chan->lock); 841 kmem_cache_free(mhi_cntrl->ring_item_cache, itr); 842 continue; 843 } 844 845 /* Sanity check to make sure there are elements in the ring */ 846 if (chan->rd_offset == ring->wr_offset) { 847 mutex_unlock(&chan->lock); 848 kmem_cache_free(mhi_cntrl->ring_item_cache, itr); 849 continue; 850 } 851 852 dev_dbg(dev, "Processing the ring for channel (%u)\n", ring->ch_id); 853 ret = mhi_ep_process_ch_ring(ring); 854 if (ret) { 855 dev_err(dev, "Error processing ring for channel (%u): %d\n", 856 ring->ch_id, ret); 857 mutex_unlock(&chan->lock); 858 kmem_cache_free(mhi_cntrl->ring_item_cache, itr); 859 continue; 860 } 861 862 mutex_unlock(&chan->lock); 863 kmem_cache_free(mhi_cntrl->ring_item_cache, itr); 864 } 865 } 866 867 static void mhi_ep_state_worker(struct work_struct *work) 868 { 869 struct mhi_ep_cntrl *mhi_cntrl = container_of(work, struct mhi_ep_cntrl, state_work); 870 struct device *dev = &mhi_cntrl->mhi_dev->dev; 871 struct mhi_ep_state_transition *itr, *tmp; 872 unsigned long flags; 873 LIST_HEAD(head); 874 int ret; 875 876 spin_lock_irqsave(&mhi_cntrl->list_lock, flags); 877 list_splice_tail_init(&mhi_cntrl->st_transition_list, &head); 878 spin_unlock_irqrestore(&mhi_cntrl->list_lock, flags); 879 880 list_for_each_entry_safe(itr, tmp, &head, node) { 881 list_del(&itr->node); 882 dev_dbg(dev, "Handling MHI state transition to %s\n", 883 mhi_state_str(itr->state)); 884 885 switch (itr->state) { 886 case MHI_STATE_M0: 887 ret = mhi_ep_set_m0_state(mhi_cntrl); 888 if (ret) 889 dev_err(dev, "Failed to transition to M0 state\n"); 890 break; 891 case MHI_STATE_M3: 892 ret = mhi_ep_set_m3_state(mhi_cntrl); 893 if (ret) 894 dev_err(dev, "Failed to transition to M3 state\n"); 895 break; 896 default: 897 dev_err(dev, "Invalid MHI state transition: %d\n", itr->state); 898 break; 899 } 900 kfree(itr); 901 } 902 } 903 904 static void mhi_ep_queue_channel_db(struct mhi_ep_cntrl *mhi_cntrl, unsigned long ch_int, 905 u32 ch_idx) 906 { 907 struct mhi_ep_ring_item *item; 908 struct mhi_ep_ring *ring; 909 bool work = !!ch_int; 910 LIST_HEAD(head); 911 u32 i; 912 913 /* First add the ring items to a local list */ 914 for_each_set_bit(i, &ch_int, 32) { 915 /* Channel index varies for each register: 0, 32, 64, 96 */ 916 u32 ch_id = ch_idx + i; 917 918 ring = &mhi_cntrl->mhi_chan[ch_id].ring; 919 item = kmem_cache_zalloc(mhi_cntrl->ring_item_cache, GFP_ATOMIC); 920 if (!item) 921 return; 922 923 item->ring = ring; 924 list_add_tail(&item->node, &head); 925 } 926 927 /* Now, splice the local list into ch_db_list and queue the work item */ 928 if (work) { 929 spin_lock(&mhi_cntrl->list_lock); 930 list_splice_tail_init(&head, &mhi_cntrl->ch_db_list); 931 spin_unlock(&mhi_cntrl->list_lock); 932 933 queue_work(mhi_cntrl->wq, &mhi_cntrl->ch_ring_work); 934 } 935 } 936 937 /* 938 * Channel interrupt statuses are contained in 4 registers each of 32bit length. 939 * For checking all interrupts, we need to loop through each registers and then 940 * check for bits set. 941 */ 942 static void mhi_ep_check_channel_interrupt(struct mhi_ep_cntrl *mhi_cntrl) 943 { 944 u32 ch_int, ch_idx, i; 945 946 /* Bail out if there is no channel doorbell interrupt */ 947 if (!mhi_ep_mmio_read_chdb_status_interrupts(mhi_cntrl)) 948 return; 949 950 for (i = 0; i < MHI_MASK_ROWS_CH_DB; i++) { 951 ch_idx = i * MHI_MASK_CH_LEN; 952 953 /* Only process channel interrupt if the mask is enabled */ 954 ch_int = mhi_cntrl->chdb[i].status & mhi_cntrl->chdb[i].mask; 955 if (ch_int) { 956 mhi_ep_queue_channel_db(mhi_cntrl, ch_int, ch_idx); 957 mhi_ep_mmio_write(mhi_cntrl, MHI_CHDB_INT_CLEAR_n(i), 958 mhi_cntrl->chdb[i].status); 959 } 960 } 961 } 962 963 static void mhi_ep_process_ctrl_interrupt(struct mhi_ep_cntrl *mhi_cntrl, 964 enum mhi_state state) 965 { 966 struct mhi_ep_state_transition *item; 967 968 item = kzalloc_obj(*item, GFP_ATOMIC); 969 if (!item) 970 return; 971 972 item->state = state; 973 spin_lock(&mhi_cntrl->list_lock); 974 list_add_tail(&item->node, &mhi_cntrl->st_transition_list); 975 spin_unlock(&mhi_cntrl->list_lock); 976 977 queue_work(mhi_cntrl->wq, &mhi_cntrl->state_work); 978 } 979 980 /* 981 * Interrupt handler that services interrupts raised by the host writing to 982 * MHICTRL and Command ring doorbell (CRDB) registers for state change and 983 * channel interrupts. 984 */ 985 static irqreturn_t mhi_ep_irq(int irq, void *data) 986 { 987 struct mhi_ep_cntrl *mhi_cntrl = data; 988 struct device *dev = &mhi_cntrl->mhi_dev->dev; 989 enum mhi_state state; 990 u32 int_value; 991 bool mhi_reset; 992 993 /* Acknowledge the ctrl interrupt */ 994 int_value = mhi_ep_mmio_read(mhi_cntrl, MHI_CTRL_INT_STATUS); 995 mhi_ep_mmio_write(mhi_cntrl, MHI_CTRL_INT_CLEAR, int_value); 996 997 /* Check for ctrl interrupt */ 998 if (FIELD_GET(MHI_CTRL_INT_STATUS_MSK, int_value)) { 999 dev_dbg(dev, "Processing ctrl interrupt\n"); 1000 mhi_ep_mmio_get_mhi_state(mhi_cntrl, &state, &mhi_reset); 1001 if (mhi_reset) { 1002 dev_info(dev, "Host triggered MHI reset!\n"); 1003 disable_irq_nosync(mhi_cntrl->irq); 1004 schedule_work(&mhi_cntrl->reset_work); 1005 return IRQ_HANDLED; 1006 } 1007 1008 mhi_ep_process_ctrl_interrupt(mhi_cntrl, state); 1009 } 1010 1011 /* Check for command doorbell interrupt */ 1012 if (FIELD_GET(MHI_CTRL_INT_STATUS_CRDB_MSK, int_value)) { 1013 dev_dbg(dev, "Processing command doorbell interrupt\n"); 1014 queue_work(mhi_cntrl->wq, &mhi_cntrl->cmd_ring_work); 1015 } 1016 1017 /* Check for channel interrupts */ 1018 mhi_ep_check_channel_interrupt(mhi_cntrl); 1019 1020 return IRQ_HANDLED; 1021 } 1022 1023 static void mhi_ep_abort_transfer(struct mhi_ep_cntrl *mhi_cntrl) 1024 { 1025 struct mhi_ep_ring *ch_ring, *ev_ring; 1026 struct mhi_result result = {}; 1027 struct mhi_ep_chan *mhi_chan; 1028 int i; 1029 1030 /* Stop all the channels */ 1031 for (i = 0; i < mhi_cntrl->max_chan; i++) { 1032 mhi_chan = &mhi_cntrl->mhi_chan[i]; 1033 if (!mhi_chan->ring.started) 1034 continue; 1035 1036 mutex_lock(&mhi_chan->lock); 1037 /* Send channel disconnect status to client drivers */ 1038 if (mhi_chan->xfer_cb) { 1039 result.transaction_status = -ENOTCONN; 1040 result.bytes_xferd = 0; 1041 mhi_chan->xfer_cb(mhi_chan->mhi_dev, &result); 1042 } 1043 1044 mhi_chan->state = MHI_CH_STATE_DISABLED; 1045 mutex_unlock(&mhi_chan->lock); 1046 } 1047 1048 flush_workqueue(mhi_cntrl->wq); 1049 1050 /* Destroy devices associated with all channels */ 1051 device_for_each_child(&mhi_cntrl->mhi_dev->dev, NULL, mhi_ep_destroy_device); 1052 1053 /* Stop and reset the transfer rings */ 1054 for (i = 0; i < mhi_cntrl->max_chan; i++) { 1055 mhi_chan = &mhi_cntrl->mhi_chan[i]; 1056 if (!mhi_chan->ring.started) 1057 continue; 1058 1059 ch_ring = &mhi_cntrl->mhi_chan[i].ring; 1060 mutex_lock(&mhi_chan->lock); 1061 mhi_ep_ring_reset(mhi_cntrl, ch_ring); 1062 mutex_unlock(&mhi_chan->lock); 1063 } 1064 1065 /* Stop and reset the event rings */ 1066 for (i = 0; i < mhi_cntrl->event_rings; i++) { 1067 ev_ring = &mhi_cntrl->mhi_event[i].ring; 1068 if (!ev_ring->started) 1069 continue; 1070 1071 mutex_lock(&mhi_cntrl->event_lock); 1072 mhi_ep_ring_reset(mhi_cntrl, ev_ring); 1073 mutex_unlock(&mhi_cntrl->event_lock); 1074 } 1075 1076 /* Stop and reset the command ring */ 1077 mhi_ep_ring_reset(mhi_cntrl, &mhi_cntrl->mhi_cmd->ring); 1078 1079 mhi_ep_free_host_cfg(mhi_cntrl); 1080 mhi_ep_mmio_mask_interrupts(mhi_cntrl); 1081 1082 mhi_cntrl->enabled = false; 1083 } 1084 1085 static void mhi_ep_reset_worker(struct work_struct *work) 1086 { 1087 struct mhi_ep_cntrl *mhi_cntrl = container_of(work, struct mhi_ep_cntrl, reset_work); 1088 enum mhi_state cur_state; 1089 1090 mhi_ep_power_down(mhi_cntrl); 1091 1092 /* Reset MMIO to signal host that the MHI_RESET is completed in endpoint */ 1093 mhi_ep_mmio_reset(mhi_cntrl); 1094 1095 mutex_lock(&mhi_cntrl->state_lock); 1096 cur_state = mhi_cntrl->mhi_state; 1097 mutex_unlock(&mhi_cntrl->state_lock); 1098 1099 /* 1100 * Only proceed further if the reset is due to SYS_ERR. The host will 1101 * issue reset during shutdown also and we don't need to do re-init in 1102 * that case. 1103 */ 1104 if (cur_state == MHI_STATE_SYS_ERR) 1105 mhi_ep_power_up(mhi_cntrl); 1106 } 1107 1108 /* 1109 * We don't need to do anything special other than setting the MHI SYS_ERR 1110 * state. The host will reset all contexts and issue MHI RESET so that we 1111 * could also recover from error state. 1112 */ 1113 void mhi_ep_handle_syserr(struct mhi_ep_cntrl *mhi_cntrl) 1114 { 1115 struct device *dev = &mhi_cntrl->mhi_dev->dev; 1116 int ret; 1117 1118 ret = mhi_ep_set_mhi_state(mhi_cntrl, MHI_STATE_SYS_ERR); 1119 if (ret) 1120 return; 1121 1122 /* Signal host that the device went to SYS_ERR state */ 1123 ret = mhi_ep_send_state_change_event(mhi_cntrl, MHI_STATE_SYS_ERR); 1124 if (ret) 1125 dev_err(dev, "Failed sending SYS_ERR state change event: %d\n", ret); 1126 } 1127 1128 int mhi_ep_power_up(struct mhi_ep_cntrl *mhi_cntrl) 1129 { 1130 struct device *dev = &mhi_cntrl->mhi_dev->dev; 1131 int ret, i; 1132 1133 /* 1134 * Mask all interrupts until the state machine is ready. Interrupts will 1135 * be enabled later with mhi_ep_enable(). 1136 */ 1137 mhi_ep_mmio_mask_interrupts(mhi_cntrl); 1138 mhi_ep_mmio_init(mhi_cntrl); 1139 1140 mhi_cntrl->mhi_event = kzalloc_objs(*mhi_cntrl->mhi_event, 1141 mhi_cntrl->event_rings); 1142 if (!mhi_cntrl->mhi_event) 1143 return -ENOMEM; 1144 1145 /* Initialize command, channel and event rings */ 1146 mhi_ep_ring_init(&mhi_cntrl->mhi_cmd->ring, RING_TYPE_CMD, 0); 1147 for (i = 0; i < mhi_cntrl->max_chan; i++) 1148 mhi_ep_ring_init(&mhi_cntrl->mhi_chan[i].ring, RING_TYPE_CH, i); 1149 for (i = 0; i < mhi_cntrl->event_rings; i++) 1150 mhi_ep_ring_init(&mhi_cntrl->mhi_event[i].ring, RING_TYPE_ER, i); 1151 1152 mutex_lock(&mhi_cntrl->state_lock); 1153 mhi_cntrl->mhi_state = MHI_STATE_RESET; 1154 mutex_unlock(&mhi_cntrl->state_lock); 1155 1156 /* Set AMSS EE before signaling ready state */ 1157 mhi_ep_mmio_set_env(mhi_cntrl, MHI_EE_AMSS); 1158 1159 /* All set, notify the host that we are ready */ 1160 ret = mhi_ep_set_ready_state(mhi_cntrl); 1161 if (ret) 1162 goto err_free_event; 1163 1164 dev_dbg(dev, "READY state notification sent to the host\n"); 1165 1166 ret = mhi_ep_enable(mhi_cntrl); 1167 if (ret) { 1168 dev_err(dev, "Failed to enable MHI endpoint\n"); 1169 goto err_free_event; 1170 } 1171 1172 enable_irq(mhi_cntrl->irq); 1173 mhi_cntrl->enabled = true; 1174 1175 return 0; 1176 1177 err_free_event: 1178 kfree(mhi_cntrl->mhi_event); 1179 1180 return ret; 1181 } 1182 EXPORT_SYMBOL_GPL(mhi_ep_power_up); 1183 1184 void mhi_ep_power_down(struct mhi_ep_cntrl *mhi_cntrl) 1185 { 1186 if (mhi_cntrl->enabled) { 1187 mhi_ep_abort_transfer(mhi_cntrl); 1188 kfree(mhi_cntrl->mhi_event); 1189 disable_irq(mhi_cntrl->irq); 1190 } 1191 } 1192 EXPORT_SYMBOL_GPL(mhi_ep_power_down); 1193 1194 void mhi_ep_suspend_channels(struct mhi_ep_cntrl *mhi_cntrl) 1195 { 1196 struct mhi_ep_chan *mhi_chan; 1197 u32 tmp; 1198 int i; 1199 1200 for (i = 0; i < mhi_cntrl->max_chan; i++) { 1201 mhi_chan = &mhi_cntrl->mhi_chan[i]; 1202 1203 if (!mhi_chan->mhi_dev) 1204 continue; 1205 1206 mutex_lock(&mhi_chan->lock); 1207 /* Skip if the channel is not currently running */ 1208 tmp = le32_to_cpu(mhi_cntrl->ch_ctx_cache[i].chcfg); 1209 if (FIELD_GET(CHAN_CTX_CHSTATE_MASK, tmp) != MHI_CH_STATE_RUNNING) { 1210 mutex_unlock(&mhi_chan->lock); 1211 continue; 1212 } 1213 1214 dev_dbg(&mhi_chan->mhi_dev->dev, "Suspending channel\n"); 1215 /* Set channel state to SUSPENDED */ 1216 mhi_chan->state = MHI_CH_STATE_SUSPENDED; 1217 tmp &= ~CHAN_CTX_CHSTATE_MASK; 1218 tmp |= FIELD_PREP(CHAN_CTX_CHSTATE_MASK, MHI_CH_STATE_SUSPENDED); 1219 mhi_cntrl->ch_ctx_cache[i].chcfg = cpu_to_le32(tmp); 1220 mutex_unlock(&mhi_chan->lock); 1221 } 1222 } 1223 1224 void mhi_ep_resume_channels(struct mhi_ep_cntrl *mhi_cntrl) 1225 { 1226 struct mhi_ep_chan *mhi_chan; 1227 u32 tmp; 1228 int i; 1229 1230 for (i = 0; i < mhi_cntrl->max_chan; i++) { 1231 mhi_chan = &mhi_cntrl->mhi_chan[i]; 1232 1233 if (!mhi_chan->mhi_dev) 1234 continue; 1235 1236 mutex_lock(&mhi_chan->lock); 1237 /* Skip if the channel is not currently suspended */ 1238 tmp = le32_to_cpu(mhi_cntrl->ch_ctx_cache[i].chcfg); 1239 if (FIELD_GET(CHAN_CTX_CHSTATE_MASK, tmp) != MHI_CH_STATE_SUSPENDED) { 1240 mutex_unlock(&mhi_chan->lock); 1241 continue; 1242 } 1243 1244 dev_dbg(&mhi_chan->mhi_dev->dev, "Resuming channel\n"); 1245 /* Set channel state to RUNNING */ 1246 mhi_chan->state = MHI_CH_STATE_RUNNING; 1247 tmp &= ~CHAN_CTX_CHSTATE_MASK; 1248 tmp |= FIELD_PREP(CHAN_CTX_CHSTATE_MASK, MHI_CH_STATE_RUNNING); 1249 mhi_cntrl->ch_ctx_cache[i].chcfg = cpu_to_le32(tmp); 1250 mutex_unlock(&mhi_chan->lock); 1251 } 1252 } 1253 1254 static void mhi_ep_release_device(struct device *dev) 1255 { 1256 struct mhi_ep_device *mhi_dev = to_mhi_ep_device(dev); 1257 1258 if (mhi_dev->dev_type == MHI_DEVICE_CONTROLLER) 1259 mhi_dev->mhi_cntrl->mhi_dev = NULL; 1260 1261 /* 1262 * We need to set the mhi_chan->mhi_dev to NULL here since the MHI 1263 * devices for the channels will only get created in mhi_ep_create_device() 1264 * if the mhi_dev associated with it is NULL. 1265 */ 1266 if (mhi_dev->ul_chan) 1267 mhi_dev->ul_chan->mhi_dev = NULL; 1268 1269 if (mhi_dev->dl_chan) 1270 mhi_dev->dl_chan->mhi_dev = NULL; 1271 1272 kfree(mhi_dev); 1273 } 1274 1275 static struct mhi_ep_device *mhi_ep_alloc_device(struct mhi_ep_cntrl *mhi_cntrl, 1276 enum mhi_device_type dev_type) 1277 { 1278 struct mhi_ep_device *mhi_dev; 1279 struct device *dev; 1280 1281 mhi_dev = kzalloc_obj(*mhi_dev); 1282 if (!mhi_dev) 1283 return ERR_PTR(-ENOMEM); 1284 1285 dev = &mhi_dev->dev; 1286 device_initialize(dev); 1287 dev->bus = &mhi_ep_bus_type; 1288 dev->release = mhi_ep_release_device; 1289 1290 /* Controller device is always allocated first */ 1291 if (dev_type == MHI_DEVICE_CONTROLLER) 1292 /* for MHI controller device, parent is the bus device (e.g. PCI EPF) */ 1293 dev->parent = mhi_cntrl->cntrl_dev; 1294 else 1295 /* for MHI client devices, parent is the MHI controller device */ 1296 dev->parent = &mhi_cntrl->mhi_dev->dev; 1297 1298 mhi_dev->mhi_cntrl = mhi_cntrl; 1299 mhi_dev->dev_type = dev_type; 1300 1301 return mhi_dev; 1302 } 1303 1304 /* 1305 * MHI channels are always defined in pairs with UL as the even numbered 1306 * channel and DL as odd numbered one. This function gets UL channel (primary) 1307 * as the ch_id and always looks after the next entry in channel list for 1308 * the corresponding DL channel (secondary). 1309 */ 1310 static int mhi_ep_create_device(struct mhi_ep_cntrl *mhi_cntrl, u32 ch_id) 1311 { 1312 struct mhi_ep_chan *mhi_chan = &mhi_cntrl->mhi_chan[ch_id]; 1313 struct device *dev = mhi_cntrl->cntrl_dev; 1314 struct mhi_ep_device *mhi_dev; 1315 int ret; 1316 1317 /* Check if the channel name is same for both UL and DL */ 1318 if (strcmp(mhi_chan->name, mhi_chan[1].name)) { 1319 dev_err(dev, "UL and DL channel names are not same: (%s) != (%s)\n", 1320 mhi_chan->name, mhi_chan[1].name); 1321 return -EINVAL; 1322 } 1323 1324 mhi_dev = mhi_ep_alloc_device(mhi_cntrl, MHI_DEVICE_XFER); 1325 if (IS_ERR(mhi_dev)) 1326 return PTR_ERR(mhi_dev); 1327 1328 /* Configure primary channel */ 1329 mhi_dev->ul_chan = mhi_chan; 1330 get_device(&mhi_dev->dev); 1331 mhi_chan->mhi_dev = mhi_dev; 1332 1333 /* Configure secondary channel as well */ 1334 mhi_chan++; 1335 mhi_dev->dl_chan = mhi_chan; 1336 get_device(&mhi_dev->dev); 1337 mhi_chan->mhi_dev = mhi_dev; 1338 1339 /* Channel name is same for both UL and DL */ 1340 mhi_dev->name = mhi_chan->name; 1341 ret = dev_set_name(&mhi_dev->dev, "%s_%s", 1342 dev_name(&mhi_cntrl->mhi_dev->dev), 1343 mhi_dev->name); 1344 if (ret) { 1345 put_device(&mhi_dev->dev); 1346 return ret; 1347 } 1348 1349 ret = device_add(&mhi_dev->dev); 1350 if (ret) 1351 put_device(&mhi_dev->dev); 1352 1353 return ret; 1354 } 1355 1356 static int mhi_ep_destroy_device(struct device *dev, void *data) 1357 { 1358 struct mhi_ep_device *mhi_dev; 1359 struct mhi_ep_cntrl *mhi_cntrl; 1360 struct mhi_ep_chan *ul_chan, *dl_chan; 1361 1362 if (dev->bus != &mhi_ep_bus_type) 1363 return 0; 1364 1365 mhi_dev = to_mhi_ep_device(dev); 1366 mhi_cntrl = mhi_dev->mhi_cntrl; 1367 1368 /* Only destroy devices created for channels */ 1369 if (mhi_dev->dev_type == MHI_DEVICE_CONTROLLER) 1370 return 0; 1371 1372 ul_chan = mhi_dev->ul_chan; 1373 dl_chan = mhi_dev->dl_chan; 1374 1375 if (ul_chan) 1376 put_device(&ul_chan->mhi_dev->dev); 1377 1378 if (dl_chan) 1379 put_device(&dl_chan->mhi_dev->dev); 1380 1381 dev_dbg(&mhi_cntrl->mhi_dev->dev, "Destroying device for chan:%s\n", 1382 mhi_dev->name); 1383 1384 /* Notify the client and remove the device from MHI bus */ 1385 device_del(dev); 1386 put_device(dev); 1387 1388 return 0; 1389 } 1390 1391 static int mhi_ep_chan_init(struct mhi_ep_cntrl *mhi_cntrl, 1392 const struct mhi_ep_cntrl_config *config) 1393 { 1394 const struct mhi_ep_channel_config *ch_cfg; 1395 struct device *dev = mhi_cntrl->cntrl_dev; 1396 u32 chan, i; 1397 int ret = -EINVAL; 1398 1399 mhi_cntrl->max_chan = config->max_channels; 1400 1401 /* 1402 * Allocate max_channels supported by the MHI endpoint and populate 1403 * only the defined channels 1404 */ 1405 mhi_cntrl->mhi_chan = kzalloc_objs(*mhi_cntrl->mhi_chan, 1406 mhi_cntrl->max_chan); 1407 if (!mhi_cntrl->mhi_chan) 1408 return -ENOMEM; 1409 1410 for (i = 0; i < config->num_channels; i++) { 1411 struct mhi_ep_chan *mhi_chan; 1412 1413 ch_cfg = &config->ch_cfg[i]; 1414 1415 chan = ch_cfg->num; 1416 if (chan >= mhi_cntrl->max_chan) { 1417 dev_err(dev, "Channel (%u) exceeds maximum available channels (%u)\n", 1418 chan, mhi_cntrl->max_chan); 1419 goto error_chan_cfg; 1420 } 1421 1422 /* Bi-directional and direction less channels are not supported */ 1423 if (ch_cfg->dir == DMA_BIDIRECTIONAL || ch_cfg->dir == DMA_NONE) { 1424 dev_err(dev, "Invalid direction (%u) for channel (%u)\n", 1425 ch_cfg->dir, chan); 1426 goto error_chan_cfg; 1427 } 1428 1429 mhi_chan = &mhi_cntrl->mhi_chan[chan]; 1430 mhi_chan->name = ch_cfg->name; 1431 mhi_chan->chan = chan; 1432 mhi_chan->dir = ch_cfg->dir; 1433 mutex_init(&mhi_chan->lock); 1434 } 1435 1436 return 0; 1437 1438 error_chan_cfg: 1439 kfree(mhi_cntrl->mhi_chan); 1440 1441 return ret; 1442 } 1443 1444 /* 1445 * Allocate channel and command rings here. Event rings will be allocated 1446 * in mhi_ep_power_up() as the config comes from the host. 1447 */ 1448 int mhi_ep_register_controller(struct mhi_ep_cntrl *mhi_cntrl, 1449 const struct mhi_ep_cntrl_config *config) 1450 { 1451 struct mhi_ep_device *mhi_dev; 1452 int ret; 1453 1454 if (!mhi_cntrl || !mhi_cntrl->cntrl_dev || !mhi_cntrl->mmio || !mhi_cntrl->irq) 1455 return -EINVAL; 1456 1457 if (!mhi_cntrl->read_sync || !mhi_cntrl->write_sync || 1458 !mhi_cntrl->read_async || !mhi_cntrl->write_async) 1459 return -EINVAL; 1460 1461 ret = mhi_ep_chan_init(mhi_cntrl, config); 1462 if (ret) 1463 return ret; 1464 1465 mhi_cntrl->mhi_cmd = kzalloc_objs(*mhi_cntrl->mhi_cmd, NR_OF_CMD_RINGS); 1466 if (!mhi_cntrl->mhi_cmd) { 1467 ret = -ENOMEM; 1468 goto err_free_ch; 1469 } 1470 1471 mhi_cntrl->ev_ring_el_cache = kmem_cache_create("mhi_ep_event_ring_el", 1472 sizeof(struct mhi_ring_element), 0, 1473 0, NULL); 1474 if (!mhi_cntrl->ev_ring_el_cache) { 1475 ret = -ENOMEM; 1476 goto err_free_cmd; 1477 } 1478 1479 mhi_cntrl->tre_buf_cache = kmem_cache_create("mhi_ep_tre_buf", MHI_EP_DEFAULT_MTU, 0, 1480 0, NULL); 1481 if (!mhi_cntrl->tre_buf_cache) { 1482 ret = -ENOMEM; 1483 goto err_destroy_ev_ring_el_cache; 1484 } 1485 1486 mhi_cntrl->ring_item_cache = kmem_cache_create("mhi_ep_ring_item", 1487 sizeof(struct mhi_ep_ring_item), 0, 1488 0, NULL); 1489 if (!mhi_cntrl->ring_item_cache) { 1490 ret = -ENOMEM; 1491 goto err_destroy_tre_buf_cache; 1492 } 1493 1494 INIT_WORK(&mhi_cntrl->state_work, mhi_ep_state_worker); 1495 INIT_WORK(&mhi_cntrl->reset_work, mhi_ep_reset_worker); 1496 INIT_WORK(&mhi_cntrl->cmd_ring_work, mhi_ep_cmd_ring_worker); 1497 INIT_WORK(&mhi_cntrl->ch_ring_work, mhi_ep_ch_ring_worker); 1498 1499 mhi_cntrl->wq = alloc_workqueue("mhi_ep_wq", WQ_PERCPU, 0); 1500 if (!mhi_cntrl->wq) { 1501 ret = -ENOMEM; 1502 goto err_destroy_ring_item_cache; 1503 } 1504 1505 INIT_LIST_HEAD(&mhi_cntrl->st_transition_list); 1506 INIT_LIST_HEAD(&mhi_cntrl->ch_db_list); 1507 spin_lock_init(&mhi_cntrl->list_lock); 1508 mutex_init(&mhi_cntrl->state_lock); 1509 mutex_init(&mhi_cntrl->event_lock); 1510 1511 /* Set MHI version and AMSS EE before enumeration */ 1512 mhi_ep_mmio_write(mhi_cntrl, EP_MHIVER, config->mhi_version); 1513 mhi_ep_mmio_set_env(mhi_cntrl, MHI_EE_AMSS); 1514 1515 /* Set controller index */ 1516 ret = ida_alloc(&mhi_ep_cntrl_ida, GFP_KERNEL); 1517 if (ret < 0) 1518 goto err_destroy_wq; 1519 1520 mhi_cntrl->index = ret; 1521 1522 irq_set_status_flags(mhi_cntrl->irq, IRQ_NOAUTOEN); 1523 ret = request_irq(mhi_cntrl->irq, mhi_ep_irq, IRQF_TRIGGER_HIGH, 1524 "doorbell_irq", mhi_cntrl); 1525 if (ret) { 1526 dev_err(mhi_cntrl->cntrl_dev, "Failed to request Doorbell IRQ\n"); 1527 goto err_ida_free; 1528 } 1529 1530 /* Allocate the controller device */ 1531 mhi_dev = mhi_ep_alloc_device(mhi_cntrl, MHI_DEVICE_CONTROLLER); 1532 if (IS_ERR(mhi_dev)) { 1533 dev_err(mhi_cntrl->cntrl_dev, "Failed to allocate controller device\n"); 1534 ret = PTR_ERR(mhi_dev); 1535 goto err_free_irq; 1536 } 1537 1538 ret = dev_set_name(&mhi_dev->dev, "mhi_ep%u", mhi_cntrl->index); 1539 if (ret) 1540 goto err_put_dev; 1541 1542 mhi_dev->name = dev_name(&mhi_dev->dev); 1543 mhi_cntrl->mhi_dev = mhi_dev; 1544 1545 ret = device_add(&mhi_dev->dev); 1546 if (ret) 1547 goto err_put_dev; 1548 1549 dev_dbg(&mhi_dev->dev, "MHI EP Controller registered\n"); 1550 1551 return 0; 1552 1553 err_put_dev: 1554 put_device(&mhi_dev->dev); 1555 err_free_irq: 1556 free_irq(mhi_cntrl->irq, mhi_cntrl); 1557 err_ida_free: 1558 ida_free(&mhi_ep_cntrl_ida, mhi_cntrl->index); 1559 err_destroy_wq: 1560 destroy_workqueue(mhi_cntrl->wq); 1561 err_destroy_ring_item_cache: 1562 kmem_cache_destroy(mhi_cntrl->ring_item_cache); 1563 err_destroy_ev_ring_el_cache: 1564 kmem_cache_destroy(mhi_cntrl->ev_ring_el_cache); 1565 err_destroy_tre_buf_cache: 1566 kmem_cache_destroy(mhi_cntrl->tre_buf_cache); 1567 err_free_cmd: 1568 kfree(mhi_cntrl->mhi_cmd); 1569 err_free_ch: 1570 kfree(mhi_cntrl->mhi_chan); 1571 1572 return ret; 1573 } 1574 EXPORT_SYMBOL_GPL(mhi_ep_register_controller); 1575 1576 /* 1577 * It is expected that the controller drivers will power down the MHI EP stack 1578 * using "mhi_ep_power_down()" before calling this function to unregister themselves. 1579 */ 1580 void mhi_ep_unregister_controller(struct mhi_ep_cntrl *mhi_cntrl) 1581 { 1582 struct mhi_ep_device *mhi_dev = mhi_cntrl->mhi_dev; 1583 1584 destroy_workqueue(mhi_cntrl->wq); 1585 1586 free_irq(mhi_cntrl->irq, mhi_cntrl); 1587 1588 kmem_cache_destroy(mhi_cntrl->tre_buf_cache); 1589 kmem_cache_destroy(mhi_cntrl->ev_ring_el_cache); 1590 kmem_cache_destroy(mhi_cntrl->ring_item_cache); 1591 kfree(mhi_cntrl->mhi_cmd); 1592 kfree(mhi_cntrl->mhi_chan); 1593 1594 device_del(&mhi_dev->dev); 1595 put_device(&mhi_dev->dev); 1596 1597 ida_free(&mhi_ep_cntrl_ida, mhi_cntrl->index); 1598 } 1599 EXPORT_SYMBOL_GPL(mhi_ep_unregister_controller); 1600 1601 static int mhi_ep_probe(struct device *dev) 1602 { 1603 struct mhi_ep_device *mhi_dev = to_mhi_ep_device(dev); 1604 struct mhi_ep_driver *mhi_drv = to_mhi_ep_driver(dev->driver); 1605 struct mhi_ep_chan *ul_chan = mhi_dev->ul_chan; 1606 struct mhi_ep_chan *dl_chan = mhi_dev->dl_chan; 1607 1608 ul_chan->xfer_cb = mhi_drv->ul_xfer_cb; 1609 dl_chan->xfer_cb = mhi_drv->dl_xfer_cb; 1610 1611 return mhi_drv->probe(mhi_dev, mhi_dev->id); 1612 } 1613 1614 static void mhi_ep_remove(struct device *dev) 1615 { 1616 struct mhi_ep_device *mhi_dev = to_mhi_ep_device(dev); 1617 struct mhi_ep_driver *mhi_drv = to_mhi_ep_driver(dev->driver); 1618 struct mhi_result result = {}; 1619 struct mhi_ep_chan *mhi_chan; 1620 int dir; 1621 1622 /* Skip if it is a controller device */ 1623 if (mhi_dev->dev_type == MHI_DEVICE_CONTROLLER) 1624 return; 1625 1626 /* Disconnect the channels associated with the driver */ 1627 for (dir = 0; dir < 2; dir++) { 1628 mhi_chan = dir ? mhi_dev->ul_chan : mhi_dev->dl_chan; 1629 1630 if (!mhi_chan) 1631 continue; 1632 1633 mutex_lock(&mhi_chan->lock); 1634 /* Send channel disconnect status to the client driver */ 1635 if (mhi_chan->xfer_cb) { 1636 result.transaction_status = -ENOTCONN; 1637 result.bytes_xferd = 0; 1638 mhi_chan->xfer_cb(mhi_chan->mhi_dev, &result); 1639 } 1640 1641 mhi_chan->state = MHI_CH_STATE_DISABLED; 1642 mhi_chan->xfer_cb = NULL; 1643 mutex_unlock(&mhi_chan->lock); 1644 } 1645 1646 /* Remove the client driver now */ 1647 mhi_drv->remove(mhi_dev); 1648 } 1649 1650 int __mhi_ep_driver_register(struct mhi_ep_driver *mhi_drv, struct module *owner) 1651 { 1652 struct device_driver *driver = &mhi_drv->driver; 1653 1654 if (!mhi_drv->probe || !mhi_drv->remove) 1655 return -EINVAL; 1656 1657 /* Client drivers should have callbacks defined for both channels */ 1658 if (!mhi_drv->ul_xfer_cb || !mhi_drv->dl_xfer_cb) 1659 return -EINVAL; 1660 1661 driver->bus = &mhi_ep_bus_type; 1662 driver->owner = owner; 1663 1664 return driver_register(driver); 1665 } 1666 EXPORT_SYMBOL_GPL(__mhi_ep_driver_register); 1667 1668 void mhi_ep_driver_unregister(struct mhi_ep_driver *mhi_drv) 1669 { 1670 driver_unregister(&mhi_drv->driver); 1671 } 1672 EXPORT_SYMBOL_GPL(mhi_ep_driver_unregister); 1673 1674 static int mhi_ep_uevent(const struct device *dev, struct kobj_uevent_env *env) 1675 { 1676 const struct mhi_ep_device *mhi_dev = to_mhi_ep_device(dev); 1677 1678 return add_uevent_var(env, "MODALIAS=" MHI_EP_DEVICE_MODALIAS_FMT, 1679 mhi_dev->name); 1680 } 1681 1682 static int mhi_ep_match(struct device *dev, const struct device_driver *drv) 1683 { 1684 struct mhi_ep_device *mhi_dev = to_mhi_ep_device(dev); 1685 const struct mhi_ep_driver *mhi_drv = to_mhi_ep_driver(drv); 1686 const struct mhi_device_id *id; 1687 1688 /* 1689 * If the device is a controller type then there is no client driver 1690 * associated with it 1691 */ 1692 if (mhi_dev->dev_type == MHI_DEVICE_CONTROLLER) 1693 return 0; 1694 1695 for (id = mhi_drv->id_table; id->chan[0]; id++) 1696 if (!strcmp(mhi_dev->name, id->chan)) { 1697 mhi_dev->id = id; 1698 return 1; 1699 } 1700 1701 return 0; 1702 }; 1703 1704 const struct bus_type mhi_ep_bus_type = { 1705 .name = "mhi_ep", 1706 .dev_name = "mhi_ep", 1707 .match = mhi_ep_match, 1708 .uevent = mhi_ep_uevent, 1709 .probe = mhi_ep_probe, 1710 .remove = mhi_ep_remove, 1711 }; 1712 1713 static int __init mhi_ep_init(void) 1714 { 1715 return bus_register(&mhi_ep_bus_type); 1716 } 1717 1718 static void __exit mhi_ep_exit(void) 1719 { 1720 bus_unregister(&mhi_ep_bus_type); 1721 } 1722 1723 postcore_initcall(mhi_ep_init); 1724 module_exit(mhi_ep_exit); 1725 1726 MODULE_LICENSE("GPL v2"); 1727 MODULE_DESCRIPTION("MHI Bus Endpoint stack"); 1728 MODULE_AUTHOR("Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>"); 1729