1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * Test driver to test endpoint functionality 4 * 5 * Copyright (C) 2017 Texas Instruments 6 * Author: Kishon Vijay Abraham I <kishon@ti.com> 7 */ 8 9 #include <linux/crc32.h> 10 #include <linux/delay.h> 11 #include <linux/dmaengine.h> 12 #include <linux/io.h> 13 #include <linux/module.h> 14 #include <linux/msi.h> 15 #include <linux/slab.h> 16 #include <linux/pci_ids.h> 17 #include <linux/random.h> 18 19 #include <linux/pci-epc.h> 20 #include <linux/pci-epf.h> 21 #include <linux/pci-ep-msi.h> 22 #include <linux/pci_regs.h> 23 24 #define IRQ_TYPE_INTX 0 25 #define IRQ_TYPE_MSI 1 26 #define IRQ_TYPE_MSIX 2 27 28 #define COMMAND_RAISE_INTX_IRQ BIT(0) 29 #define COMMAND_RAISE_MSI_IRQ BIT(1) 30 #define COMMAND_RAISE_MSIX_IRQ BIT(2) 31 #define COMMAND_READ BIT(3) 32 #define COMMAND_WRITE BIT(4) 33 #define COMMAND_COPY BIT(5) 34 #define COMMAND_ENABLE_DOORBELL BIT(6) 35 #define COMMAND_DISABLE_DOORBELL BIT(7) 36 #define COMMAND_BAR_SUBRANGE_SETUP BIT(8) 37 #define COMMAND_BAR_SUBRANGE_CLEAR BIT(9) 38 39 #define STATUS_READ_SUCCESS BIT(0) 40 #define STATUS_READ_FAIL BIT(1) 41 #define STATUS_WRITE_SUCCESS BIT(2) 42 #define STATUS_WRITE_FAIL BIT(3) 43 #define STATUS_COPY_SUCCESS BIT(4) 44 #define STATUS_COPY_FAIL BIT(5) 45 #define STATUS_IRQ_RAISED BIT(6) 46 #define STATUS_SRC_ADDR_INVALID BIT(7) 47 #define STATUS_DST_ADDR_INVALID BIT(8) 48 #define STATUS_DOORBELL_SUCCESS BIT(9) 49 #define STATUS_DOORBELL_ENABLE_SUCCESS BIT(10) 50 #define STATUS_DOORBELL_ENABLE_FAIL BIT(11) 51 #define STATUS_DOORBELL_DISABLE_SUCCESS BIT(12) 52 #define STATUS_DOORBELL_DISABLE_FAIL BIT(13) 53 #define STATUS_BAR_SUBRANGE_SETUP_SUCCESS BIT(14) 54 #define STATUS_BAR_SUBRANGE_SETUP_FAIL BIT(15) 55 #define STATUS_BAR_SUBRANGE_CLEAR_SUCCESS BIT(16) 56 #define STATUS_BAR_SUBRANGE_CLEAR_FAIL BIT(17) 57 #define STATUS_NO_RESOURCE BIT(18) 58 59 #define FLAG_USE_DMA BIT(0) 60 61 #define TIMER_RESOLUTION 1 62 63 #define CAP_UNALIGNED_ACCESS BIT(0) 64 #define CAP_MSI BIT(1) 65 #define CAP_MSIX BIT(2) 66 #define CAP_INTX BIT(3) 67 #define CAP_SUBRANGE_MAPPING BIT(4) 68 #define CAP_DYNAMIC_INBOUND_MAPPING BIT(5) 69 #define CAP_BAR0_RESERVED BIT(6) 70 #define CAP_BAR1_RESERVED BIT(7) 71 #define CAP_BAR2_RESERVED BIT(8) 72 #define CAP_BAR3_RESERVED BIT(9) 73 #define CAP_BAR4_RESERVED BIT(10) 74 #define CAP_BAR5_RESERVED BIT(11) 75 76 #define PCI_EPF_TEST_BAR_SUBRANGE_NSUB 2 77 78 static struct workqueue_struct *kpcitest_workqueue; 79 80 struct pci_epf_test { 81 void *reg[PCI_STD_NUM_BARS]; 82 struct pci_epf *epf; 83 struct config_group group; 84 enum pci_barno test_reg_bar; 85 size_t msix_table_offset; 86 struct delayed_work cmd_handler; 87 struct dma_chan *dma_chan_tx; 88 struct dma_chan *dma_chan_rx; 89 struct dma_chan *transfer_chan; 90 dma_cookie_t transfer_cookie; 91 enum dma_status transfer_status; 92 struct completion transfer_complete; 93 bool dma_supported; 94 bool dma_private; 95 const struct pci_epc_features *epc_features; 96 struct pci_epf_bar db_bar; 97 bool db_bar_programmed; 98 size_t bar_size[PCI_STD_NUM_BARS]; 99 }; 100 101 struct pci_epf_test_reg { 102 __le32 magic; 103 __le32 command; 104 __le32 status; 105 __le64 src_addr; 106 __le64 dst_addr; 107 __le32 size; 108 __le32 checksum; 109 __le32 irq_type; 110 __le32 irq_number; 111 __le32 flags; 112 __le32 caps; 113 __le32 doorbell_bar; 114 __le32 doorbell_offset; 115 __le32 doorbell_data; 116 } __packed; 117 118 static struct pci_epf_header test_header = { 119 .vendorid = PCI_ANY_ID, 120 .deviceid = PCI_ANY_ID, 121 .baseclass_code = PCI_CLASS_OTHERS, 122 .interrupt_pin = PCI_INTERRUPT_INTA, 123 }; 124 125 /* default BAR sizes, can be overridden by the user using configfs */ 126 static size_t default_bar_size[] = { 131072, 131072, 131072, 131072, 131072, 1048576 }; 127 128 static void pci_epf_test_dma_callback(void *param) 129 { 130 struct pci_epf_test *epf_test = param; 131 struct dma_tx_state state; 132 133 epf_test->transfer_status = 134 dmaengine_tx_status(epf_test->transfer_chan, 135 epf_test->transfer_cookie, &state); 136 if (epf_test->transfer_status == DMA_COMPLETE || 137 epf_test->transfer_status == DMA_ERROR) 138 complete(&epf_test->transfer_complete); 139 } 140 141 /** 142 * pci_epf_test_data_transfer() - Function that uses dmaengine API to transfer 143 * data between PCIe EP and remote PCIe RC 144 * @epf_test: the EPF test device that performs the data transfer operation 145 * @dma_dst: The destination address of the data transfer. It can be a physical 146 * address given by pci_epc_mem_alloc_addr or DMA mapping APIs. 147 * @dma_src: The source address of the data transfer. It can be a physical 148 * address given by pci_epc_mem_alloc_addr or DMA mapping APIs. 149 * @len: The size of the data transfer 150 * @dma_remote: remote RC physical address 151 * @dir: DMA transfer direction 152 * 153 * Function that uses dmaengine API to transfer data between PCIe EP and remote 154 * PCIe RC. The source and destination address can be a physical address given 155 * by pci_epc_mem_alloc_addr or the one obtained using DMA mapping APIs. 156 * 157 * The function returns '0' on success and negative value on failure. 158 */ 159 static int pci_epf_test_data_transfer(struct pci_epf_test *epf_test, 160 dma_addr_t dma_dst, dma_addr_t dma_src, 161 size_t len, dma_addr_t dma_remote, 162 enum dma_transfer_direction dir) 163 { 164 struct dma_chan *chan = (dir == DMA_MEM_TO_DEV) ? 165 epf_test->dma_chan_tx : epf_test->dma_chan_rx; 166 dma_addr_t dma_local = (dir == DMA_MEM_TO_DEV) ? dma_src : dma_dst; 167 enum dma_ctrl_flags flags = DMA_CTRL_ACK | DMA_PREP_INTERRUPT; 168 struct pci_epf *epf = epf_test->epf; 169 struct dma_async_tx_descriptor *tx; 170 struct dma_slave_config sconf = {}; 171 struct device *dev = &epf->dev; 172 int ret; 173 174 if (IS_ERR_OR_NULL(chan)) { 175 dev_err(dev, "Invalid DMA memcpy channel\n"); 176 return -EINVAL; 177 } 178 179 if (epf_test->dma_private) { 180 sconf.direction = dir; 181 if (dir == DMA_MEM_TO_DEV) 182 sconf.dst_addr = dma_remote; 183 else 184 sconf.src_addr = dma_remote; 185 186 if (dmaengine_slave_config(chan, &sconf)) { 187 dev_err(dev, "DMA slave config fail\n"); 188 return -EIO; 189 } 190 tx = dmaengine_prep_slave_single(chan, dma_local, len, dir, 191 flags); 192 } else { 193 tx = dmaengine_prep_dma_memcpy(chan, dma_dst, dma_src, len, 194 flags); 195 } 196 197 if (!tx) { 198 dev_err(dev, "Failed to prepare DMA memcpy\n"); 199 return -EIO; 200 } 201 202 reinit_completion(&epf_test->transfer_complete); 203 epf_test->transfer_chan = chan; 204 tx->callback = pci_epf_test_dma_callback; 205 tx->callback_param = epf_test; 206 epf_test->transfer_cookie = dmaengine_submit(tx); 207 208 ret = dma_submit_error(epf_test->transfer_cookie); 209 if (ret) { 210 dev_err(dev, "Failed to do DMA tx_submit %d\n", ret); 211 goto terminate; 212 } 213 214 dma_async_issue_pending(chan); 215 ret = wait_for_completion_interruptible(&epf_test->transfer_complete); 216 if (ret < 0) { 217 dev_err(dev, "DMA wait_for_completion interrupted\n"); 218 goto terminate; 219 } 220 221 if (epf_test->transfer_status == DMA_ERROR) { 222 dev_err(dev, "DMA transfer failed\n"); 223 ret = -EIO; 224 } 225 226 terminate: 227 dmaengine_terminate_sync(chan); 228 229 return ret; 230 } 231 232 struct epf_dma_filter { 233 struct device *dev; 234 u32 dma_mask; 235 }; 236 237 static bool epf_dma_filter_fn(struct dma_chan *chan, void *node) 238 { 239 struct epf_dma_filter *filter = node; 240 struct dma_slave_caps caps; 241 242 memset(&caps, 0, sizeof(caps)); 243 dma_get_slave_caps(chan, &caps); 244 245 return chan->device->dev == filter->dev 246 && (filter->dma_mask & caps.directions); 247 } 248 249 /** 250 * pci_epf_test_init_dma_chan() - Function to initialize EPF test DMA channel 251 * @epf_test: the EPF test device that performs data transfer operation 252 * 253 * Function to initialize EPF test DMA channel. 254 */ 255 static int pci_epf_test_init_dma_chan(struct pci_epf_test *epf_test) 256 { 257 struct pci_epf *epf = epf_test->epf; 258 struct device *dev = &epf->dev; 259 struct epf_dma_filter filter; 260 struct dma_chan *dma_chan; 261 dma_cap_mask_t mask; 262 int ret; 263 264 filter.dev = epf->epc->dev.parent; 265 filter.dma_mask = BIT(DMA_DEV_TO_MEM); 266 267 dma_cap_zero(mask); 268 dma_cap_set(DMA_SLAVE, mask); 269 dma_chan = dma_request_channel(mask, epf_dma_filter_fn, &filter); 270 if (!dma_chan) { 271 dev_info(dev, "Failed to get private DMA rx channel. Falling back to generic one\n"); 272 goto fail_back_tx; 273 } 274 275 epf_test->dma_chan_rx = dma_chan; 276 277 filter.dma_mask = BIT(DMA_MEM_TO_DEV); 278 dma_chan = dma_request_channel(mask, epf_dma_filter_fn, &filter); 279 280 if (!dma_chan) { 281 dev_info(dev, "Failed to get private DMA tx channel. Falling back to generic one\n"); 282 goto fail_back_rx; 283 } 284 285 epf_test->dma_chan_tx = dma_chan; 286 epf_test->dma_private = true; 287 288 init_completion(&epf_test->transfer_complete); 289 290 return 0; 291 292 fail_back_rx: 293 dma_release_channel(epf_test->dma_chan_rx); 294 epf_test->dma_chan_rx = NULL; 295 296 fail_back_tx: 297 dma_cap_zero(mask); 298 dma_cap_set(DMA_MEMCPY, mask); 299 300 dma_chan = dma_request_chan_by_mask(&mask); 301 if (IS_ERR(dma_chan)) { 302 ret = PTR_ERR(dma_chan); 303 if (ret != -EPROBE_DEFER) 304 dev_err(dev, "Failed to get DMA channel\n"); 305 return ret; 306 } 307 init_completion(&epf_test->transfer_complete); 308 309 epf_test->dma_chan_tx = epf_test->dma_chan_rx = dma_chan; 310 311 return 0; 312 } 313 314 /** 315 * pci_epf_test_clean_dma_chan() - Function to cleanup EPF test DMA channel 316 * @epf_test: the EPF test device that performs data transfer operation 317 * 318 * Helper to cleanup EPF test DMA channel. 319 */ 320 static void pci_epf_test_clean_dma_chan(struct pci_epf_test *epf_test) 321 { 322 if (!epf_test->dma_supported) 323 return; 324 325 if (epf_test->dma_chan_tx) { 326 dma_release_channel(epf_test->dma_chan_tx); 327 if (epf_test->dma_chan_tx == epf_test->dma_chan_rx) { 328 epf_test->dma_chan_tx = NULL; 329 epf_test->dma_chan_rx = NULL; 330 return; 331 } 332 epf_test->dma_chan_tx = NULL; 333 } 334 335 if (epf_test->dma_chan_rx) { 336 dma_release_channel(epf_test->dma_chan_rx); 337 epf_test->dma_chan_rx = NULL; 338 } 339 } 340 341 static void pci_epf_test_print_rate(struct pci_epf_test *epf_test, 342 const char *op, u64 size, 343 struct timespec64 *start, 344 struct timespec64 *end, bool dma) 345 { 346 struct timespec64 ts = timespec64_sub(*end, *start); 347 u64 rate = 0, ns; 348 349 /* calculate the rate */ 350 ns = timespec64_to_ns(&ts); 351 if (ns) 352 rate = div64_u64(size * NSEC_PER_SEC, ns * 1000); 353 354 dev_info(&epf_test->epf->dev, 355 "%s => Size: %llu B, DMA: %s, Time: %ptSp s, Rate: %llu KB/s\n", 356 op, size, dma ? "YES" : "NO", &ts, rate); 357 } 358 359 static void pci_epf_test_copy(struct pci_epf_test *epf_test, 360 struct pci_epf_test_reg *reg) 361 { 362 int ret = 0; 363 struct timespec64 start, end; 364 struct pci_epf *epf = epf_test->epf; 365 struct pci_epc *epc = epf->epc; 366 struct device *dev = &epf->dev; 367 struct pci_epc_map src_map, dst_map; 368 u64 src_addr = le64_to_cpu(reg->src_addr); 369 u64 dst_addr = le64_to_cpu(reg->dst_addr); 370 size_t orig_size, copy_size; 371 ssize_t map_size = 0; 372 u32 flags = le32_to_cpu(reg->flags); 373 u32 status = 0; 374 void *copy_buf = NULL, *buf; 375 376 orig_size = copy_size = le32_to_cpu(reg->size); 377 378 if (flags & FLAG_USE_DMA) { 379 if (!dma_has_cap(DMA_MEMCPY, epf_test->dma_chan_tx->device->cap_mask)) { 380 dev_err(dev, "DMA controller doesn't support MEMCPY\n"); 381 ret = -EINVAL; 382 goto set_status; 383 } 384 } else { 385 copy_buf = kzalloc(copy_size, GFP_KERNEL); 386 if (!copy_buf) { 387 ret = -ENOMEM; 388 goto set_status; 389 } 390 buf = copy_buf; 391 } 392 393 while (copy_size) { 394 ret = pci_epc_mem_map(epc, epf->func_no, epf->vfunc_no, 395 src_addr, copy_size, &src_map); 396 if (ret) { 397 dev_err(dev, "Failed to map source address\n"); 398 status = STATUS_SRC_ADDR_INVALID; 399 goto free_buf; 400 } 401 402 ret = pci_epc_mem_map(epf->epc, epf->func_no, epf->vfunc_no, 403 dst_addr, copy_size, &dst_map); 404 if (ret) { 405 dev_err(dev, "Failed to map destination address\n"); 406 status = STATUS_DST_ADDR_INVALID; 407 pci_epc_mem_unmap(epc, epf->func_no, epf->vfunc_no, 408 &src_map); 409 goto free_buf; 410 } 411 412 map_size = min_t(size_t, dst_map.pci_size, src_map.pci_size); 413 414 ktime_get_ts64(&start); 415 if (flags & FLAG_USE_DMA) { 416 ret = pci_epf_test_data_transfer(epf_test, 417 dst_map.phys_addr, src_map.phys_addr, 418 map_size, 0, DMA_MEM_TO_MEM); 419 if (ret) { 420 dev_err(dev, "Data transfer failed\n"); 421 goto unmap; 422 } 423 } else { 424 memcpy_fromio(buf, src_map.virt_addr, map_size); 425 memcpy_toio(dst_map.virt_addr, buf, map_size); 426 buf += map_size; 427 } 428 ktime_get_ts64(&end); 429 430 copy_size -= map_size; 431 src_addr += map_size; 432 dst_addr += map_size; 433 434 pci_epc_mem_unmap(epc, epf->func_no, epf->vfunc_no, &dst_map); 435 pci_epc_mem_unmap(epc, epf->func_no, epf->vfunc_no, &src_map); 436 map_size = 0; 437 } 438 439 pci_epf_test_print_rate(epf_test, "COPY", orig_size, &start, &end, 440 flags & FLAG_USE_DMA); 441 442 unmap: 443 if (map_size) { 444 pci_epc_mem_unmap(epc, epf->func_no, epf->vfunc_no, &dst_map); 445 pci_epc_mem_unmap(epc, epf->func_no, epf->vfunc_no, &src_map); 446 } 447 448 free_buf: 449 kfree(copy_buf); 450 451 set_status: 452 if (!ret) 453 status |= STATUS_COPY_SUCCESS; 454 else 455 status |= STATUS_COPY_FAIL; 456 reg->status = cpu_to_le32(status); 457 } 458 459 static void pci_epf_test_read(struct pci_epf_test *epf_test, 460 struct pci_epf_test_reg *reg) 461 { 462 int ret = 0; 463 void *src_buf, *buf; 464 u32 crc32; 465 struct pci_epc_map map; 466 phys_addr_t dst_phys_addr; 467 struct timespec64 start, end; 468 struct pci_epf *epf = epf_test->epf; 469 struct pci_epc *epc = epf->epc; 470 struct device *dev = &epf->dev; 471 struct device *dma_dev = epf->epc->dev.parent; 472 u64 src_addr = le64_to_cpu(reg->src_addr); 473 size_t orig_size, src_size; 474 ssize_t map_size = 0; 475 u32 flags = le32_to_cpu(reg->flags); 476 u32 checksum = le32_to_cpu(reg->checksum); 477 u32 status = 0; 478 479 orig_size = src_size = le32_to_cpu(reg->size); 480 481 src_buf = kzalloc(src_size, GFP_KERNEL); 482 if (!src_buf) { 483 ret = -ENOMEM; 484 goto set_status; 485 } 486 buf = src_buf; 487 488 while (src_size) { 489 ret = pci_epc_mem_map(epc, epf->func_no, epf->vfunc_no, 490 src_addr, src_size, &map); 491 if (ret) { 492 dev_err(dev, "Failed to map address\n"); 493 status = STATUS_SRC_ADDR_INVALID; 494 goto free_buf; 495 } 496 497 map_size = map.pci_size; 498 if (flags & FLAG_USE_DMA) { 499 dst_phys_addr = dma_map_single(dma_dev, buf, map_size, 500 DMA_FROM_DEVICE); 501 if (dma_mapping_error(dma_dev, dst_phys_addr)) { 502 dev_err(dev, 503 "Failed to map destination buffer addr\n"); 504 ret = -ENOMEM; 505 goto unmap; 506 } 507 508 ktime_get_ts64(&start); 509 ret = pci_epf_test_data_transfer(epf_test, 510 dst_phys_addr, map.phys_addr, 511 map_size, src_addr, DMA_DEV_TO_MEM); 512 if (ret) 513 dev_err(dev, "Data transfer failed\n"); 514 ktime_get_ts64(&end); 515 516 dma_unmap_single(dma_dev, dst_phys_addr, map_size, 517 DMA_FROM_DEVICE); 518 519 if (ret) 520 goto unmap; 521 } else { 522 ktime_get_ts64(&start); 523 memcpy_fromio(buf, map.virt_addr, map_size); 524 ktime_get_ts64(&end); 525 } 526 527 src_size -= map_size; 528 src_addr += map_size; 529 buf += map_size; 530 531 pci_epc_mem_unmap(epc, epf->func_no, epf->vfunc_no, &map); 532 map_size = 0; 533 } 534 535 pci_epf_test_print_rate(epf_test, "READ", orig_size, &start, &end, 536 flags & FLAG_USE_DMA); 537 538 crc32 = crc32_le(~0, src_buf, orig_size); 539 if (crc32 != checksum) 540 ret = -EIO; 541 542 unmap: 543 if (map_size) 544 pci_epc_mem_unmap(epc, epf->func_no, epf->vfunc_no, &map); 545 546 free_buf: 547 kfree(src_buf); 548 549 set_status: 550 if (!ret) 551 status |= STATUS_READ_SUCCESS; 552 else 553 status |= STATUS_READ_FAIL; 554 reg->status = cpu_to_le32(status); 555 } 556 557 static void pci_epf_test_write(struct pci_epf_test *epf_test, 558 struct pci_epf_test_reg *reg) 559 { 560 int ret = 0; 561 void *dst_buf, *buf; 562 struct pci_epc_map map; 563 phys_addr_t src_phys_addr; 564 struct timespec64 start, end; 565 struct pci_epf *epf = epf_test->epf; 566 struct pci_epc *epc = epf->epc; 567 struct device *dev = &epf->dev; 568 struct device *dma_dev = epf->epc->dev.parent; 569 u64 dst_addr = le64_to_cpu(reg->dst_addr); 570 size_t orig_size, dst_size; 571 ssize_t map_size = 0; 572 u32 flags = le32_to_cpu(reg->flags); 573 u32 status = 0; 574 575 orig_size = dst_size = le32_to_cpu(reg->size); 576 577 dst_buf = kzalloc(dst_size, GFP_KERNEL); 578 if (!dst_buf) { 579 ret = -ENOMEM; 580 goto set_status; 581 } 582 get_random_bytes(dst_buf, dst_size); 583 reg->checksum = cpu_to_le32(crc32_le(~0, dst_buf, dst_size)); 584 buf = dst_buf; 585 586 while (dst_size) { 587 ret = pci_epc_mem_map(epc, epf->func_no, epf->vfunc_no, 588 dst_addr, dst_size, &map); 589 if (ret) { 590 dev_err(dev, "Failed to map address\n"); 591 status = STATUS_DST_ADDR_INVALID; 592 goto free_buf; 593 } 594 595 map_size = map.pci_size; 596 if (flags & FLAG_USE_DMA) { 597 src_phys_addr = dma_map_single(dma_dev, buf, map_size, 598 DMA_TO_DEVICE); 599 if (dma_mapping_error(dma_dev, src_phys_addr)) { 600 dev_err(dev, 601 "Failed to map source buffer addr\n"); 602 ret = -ENOMEM; 603 goto unmap; 604 } 605 606 ktime_get_ts64(&start); 607 608 ret = pci_epf_test_data_transfer(epf_test, 609 map.phys_addr, src_phys_addr, 610 map_size, dst_addr, 611 DMA_MEM_TO_DEV); 612 if (ret) 613 dev_err(dev, "Data transfer failed\n"); 614 ktime_get_ts64(&end); 615 616 dma_unmap_single(dma_dev, src_phys_addr, map_size, 617 DMA_TO_DEVICE); 618 619 if (ret) 620 goto unmap; 621 } else { 622 ktime_get_ts64(&start); 623 memcpy_toio(map.virt_addr, buf, map_size); 624 ktime_get_ts64(&end); 625 } 626 627 dst_size -= map_size; 628 dst_addr += map_size; 629 buf += map_size; 630 631 pci_epc_mem_unmap(epc, epf->func_no, epf->vfunc_no, &map); 632 map_size = 0; 633 } 634 635 pci_epf_test_print_rate(epf_test, "WRITE", orig_size, &start, &end, 636 flags & FLAG_USE_DMA); 637 638 /* 639 * wait 1ms inorder for the write to complete. Without this delay L3 640 * error in observed in the host system. 641 */ 642 usleep_range(1000, 2000); 643 644 unmap: 645 if (map_size) 646 pci_epc_mem_unmap(epc, epf->func_no, epf->vfunc_no, &map); 647 648 free_buf: 649 kfree(dst_buf); 650 651 set_status: 652 if (!ret) 653 status |= STATUS_WRITE_SUCCESS; 654 else 655 status |= STATUS_WRITE_FAIL; 656 reg->status = cpu_to_le32(status); 657 } 658 659 static void pci_epf_test_raise_irq(struct pci_epf_test *epf_test, 660 struct pci_epf_test_reg *reg) 661 { 662 struct pci_epf *epf = epf_test->epf; 663 struct device *dev = &epf->dev; 664 struct pci_epc *epc = epf->epc; 665 u32 status = le32_to_cpu(reg->status); 666 u32 irq_number = le32_to_cpu(reg->irq_number); 667 u32 irq_type = le32_to_cpu(reg->irq_type); 668 int count; 669 670 /* 671 * Set the status before raising the IRQ to ensure that the host sees 672 * the updated value when it gets the IRQ. 673 */ 674 status |= STATUS_IRQ_RAISED; 675 WRITE_ONCE(reg->status, cpu_to_le32(status)); 676 677 switch (irq_type) { 678 case IRQ_TYPE_INTX: 679 pci_epc_raise_irq(epc, epf->func_no, epf->vfunc_no, 680 PCI_IRQ_INTX, 0); 681 break; 682 case IRQ_TYPE_MSI: 683 count = pci_epc_get_msi(epc, epf->func_no, epf->vfunc_no); 684 if (irq_number > count || count <= 0) { 685 dev_err(dev, "Invalid MSI IRQ number %d / %d\n", 686 irq_number, count); 687 return; 688 } 689 pci_epc_raise_irq(epc, epf->func_no, epf->vfunc_no, 690 PCI_IRQ_MSI, irq_number); 691 break; 692 case IRQ_TYPE_MSIX: 693 count = pci_epc_get_msix(epc, epf->func_no, epf->vfunc_no); 694 if (irq_number > count || count <= 0) { 695 dev_err(dev, "Invalid MSI-X IRQ number %d / %d\n", 696 irq_number, count); 697 return; 698 } 699 pci_epc_raise_irq(epc, epf->func_no, epf->vfunc_no, 700 PCI_IRQ_MSIX, irq_number); 701 break; 702 default: 703 dev_err(dev, "Failed to raise IRQ, unknown type\n"); 704 break; 705 } 706 } 707 708 static irqreturn_t pci_epf_test_doorbell_handler(int irq, void *data) 709 { 710 struct pci_epf_test *epf_test = data; 711 enum pci_barno test_reg_bar = epf_test->test_reg_bar; 712 struct pci_epf_test_reg *reg = epf_test->reg[test_reg_bar]; 713 u32 status = le32_to_cpu(reg->status); 714 715 status |= STATUS_DOORBELL_SUCCESS; 716 reg->status = cpu_to_le32(status); 717 pci_epf_test_raise_irq(epf_test, reg); 718 719 return IRQ_HANDLED; 720 } 721 722 static void pci_epf_test_doorbell_cleanup(struct pci_epf_test *epf_test) 723 { 724 struct pci_epf_test_reg *reg = epf_test->reg[epf_test->test_reg_bar]; 725 struct pci_epf *epf = epf_test->epf; 726 727 reg->doorbell_bar = cpu_to_le32(NO_BAR); 728 729 pci_epf_free_doorbell(epf); 730 } 731 732 static void pci_epf_test_enable_doorbell(struct pci_epf_test *epf_test, 733 struct pci_epf_test_reg *reg) 734 { 735 u32 status = le32_to_cpu(reg->status); 736 struct pci_epf *epf = epf_test->epf; 737 struct pci_epf_doorbell_msg *db; 738 struct pci_epc *epc = epf->epc; 739 unsigned long irq_flags; 740 struct msi_msg *msg; 741 enum pci_barno bar; 742 size_t offset; 743 int ret; 744 745 ret = pci_epf_alloc_doorbell(epf, 1); 746 if (ret) 747 goto set_status_err; 748 749 db = &epf->db_msg[0]; 750 msg = &db->msg; 751 epf_test->db_bar_programmed = false; 752 753 if (db->bar != NO_BAR) { 754 /* 755 * The doorbell target is already exposed via a platform-owned 756 * fixed BAR 757 */ 758 bar = db->bar; 759 offset = db->offset; 760 } else { 761 bar = pci_epc_get_next_free_bar(epf_test->epc_features, 762 epf_test->test_reg_bar + 1); 763 if (bar < BAR_0) 764 goto err_doorbell_cleanup; 765 } 766 767 irq_flags = epf->db_msg[0].irq_flags | IRQF_ONESHOT; 768 769 ret = request_threaded_irq(epf->db_msg[0].virq, NULL, 770 pci_epf_test_doorbell_handler, irq_flags, 771 "pci-ep-test-doorbell", epf_test); 772 if (ret) { 773 dev_err(&epf->dev, 774 "Failed to request doorbell IRQ: %d\n", 775 epf->db_msg[0].virq); 776 goto err_doorbell_cleanup; 777 } 778 779 reg->doorbell_data = cpu_to_le32(msg->data); 780 reg->doorbell_bar = cpu_to_le32(bar); 781 782 if (db->bar == NO_BAR) { 783 ret = pci_epf_align_inbound_addr(epf, bar, 784 ((u64)msg->address_hi << 32) | 785 msg->address_lo, 786 &epf_test->db_bar.phys_addr, 787 &offset); 788 789 if (ret) 790 goto err_free_irq; 791 } 792 793 reg->doorbell_offset = cpu_to_le32(offset); 794 795 if (db->bar == NO_BAR) { 796 epf_test->db_bar.barno = bar; 797 epf_test->db_bar.size = epf->bar[bar].size; 798 epf_test->db_bar.flags = epf->bar[bar].flags; 799 800 ret = pci_epc_set_bar(epc, epf->func_no, epf->vfunc_no, &epf_test->db_bar); 801 if (ret) 802 goto err_free_irq; 803 804 epf_test->db_bar_programmed = true; 805 } 806 807 status |= STATUS_DOORBELL_ENABLE_SUCCESS; 808 reg->status = cpu_to_le32(status); 809 return; 810 811 err_free_irq: 812 free_irq(epf->db_msg[0].virq, epf_test); 813 err_doorbell_cleanup: 814 pci_epf_test_doorbell_cleanup(epf_test); 815 set_status_err: 816 status |= STATUS_DOORBELL_ENABLE_FAIL; 817 reg->status = cpu_to_le32(status); 818 } 819 820 static void pci_epf_test_disable_doorbell(struct pci_epf_test *epf_test, 821 struct pci_epf_test_reg *reg) 822 { 823 enum pci_barno bar = le32_to_cpu(reg->doorbell_bar); 824 u32 status = le32_to_cpu(reg->status); 825 struct pci_epf *epf = epf_test->epf; 826 struct pci_epc *epc = epf->epc; 827 int ret; 828 829 if (bar < BAR_0) 830 goto set_status_err; 831 832 free_irq(epf->db_msg[0].virq, epf_test); 833 pci_epf_test_doorbell_cleanup(epf_test); 834 835 if (epf_test->db_bar_programmed) { 836 /* 837 * The doorbell feature temporarily overrides the inbound 838 * translation to point to the address stored in 839 * epf_test->db_bar.phys_addr, i.e., it calls set_bar() 840 * twice without ever calling clear_bar(), as calling 841 * clear_bar() would clear the BAR's PCI address assigned 842 * by the host. Thus, when disabling the doorbell, restore 843 * the inbound translation to point to the memory allocated 844 * for the BAR. 845 */ 846 ret = pci_epc_set_bar(epc, epf->func_no, epf->vfunc_no, &epf->bar[bar]); 847 if (ret) 848 goto set_status_err; 849 850 epf_test->db_bar_programmed = false; 851 } 852 853 status |= STATUS_DOORBELL_DISABLE_SUCCESS; 854 reg->status = cpu_to_le32(status); 855 856 return; 857 858 set_status_err: 859 status |= STATUS_DOORBELL_DISABLE_FAIL; 860 reg->status = cpu_to_le32(status); 861 } 862 863 static u8 pci_epf_test_subrange_sig_byte(enum pci_barno barno, 864 unsigned int subno) 865 { 866 return 0x50 + (barno * 8) + subno; 867 } 868 869 static void pci_epf_test_bar_subrange_setup(struct pci_epf_test *epf_test, 870 struct pci_epf_test_reg *reg) 871 { 872 struct pci_epf_bar_submap *submap, *old_submap; 873 struct pci_epf *epf = epf_test->epf; 874 struct pci_epc *epc = epf->epc; 875 struct pci_epf_bar *bar; 876 unsigned int nsub = PCI_EPF_TEST_BAR_SUBRANGE_NSUB, old_nsub; 877 /* reg->size carries BAR number for BAR_SUBRANGE_* commands. */ 878 enum pci_barno barno = le32_to_cpu(reg->size); 879 u32 status = le32_to_cpu(reg->status); 880 unsigned int i, phys_idx; 881 size_t sub_size; 882 u8 *addr; 883 int ret; 884 885 if (barno >= PCI_STD_NUM_BARS) { 886 dev_err(&epf->dev, "Invalid barno: %d\n", barno); 887 goto err; 888 } 889 890 /* Host side should've avoided test_reg_bar, this is a safeguard. */ 891 if (barno == epf_test->test_reg_bar) { 892 dev_err(&epf->dev, "test_reg_bar cannot be used for subrange test\n"); 893 goto err; 894 } 895 896 if (!epf_test->epc_features->dynamic_inbound_mapping || 897 !epf_test->epc_features->subrange_mapping) { 898 dev_err(&epf->dev, "epc driver does not support subrange mapping\n"); 899 goto err; 900 } 901 902 bar = &epf->bar[barno]; 903 if (!bar->size || !bar->addr) { 904 dev_err(&epf->dev, "bar size/addr (%zu/%p) is invalid\n", 905 bar->size, bar->addr); 906 goto err; 907 } 908 909 if (bar->size % nsub) { 910 dev_err(&epf->dev, "BAR size %zu is not divisible by %u\n", 911 bar->size, nsub); 912 goto err; 913 } 914 915 sub_size = bar->size / nsub; 916 917 submap = kzalloc_objs(*submap, nsub); 918 if (!submap) 919 goto err; 920 921 for (i = 0; i < nsub; i++) { 922 /* Swap the two halves so RC can verify ordering. */ 923 phys_idx = i ^ 1; 924 submap[i].phys_addr = bar->phys_addr + (phys_idx * sub_size); 925 submap[i].size = sub_size; 926 } 927 928 old_submap = bar->submap; 929 old_nsub = bar->num_submap; 930 931 bar->submap = submap; 932 bar->num_submap = nsub; 933 934 ret = pci_epc_set_bar(epc, epf->func_no, epf->vfunc_no, bar); 935 if (ret) { 936 dev_err(&epf->dev, "pci_epc_set_bar() failed: %d\n", ret); 937 if (ret == -ENOSPC) 938 status |= STATUS_NO_RESOURCE; 939 bar->submap = old_submap; 940 bar->num_submap = old_nsub; 941 ret = pci_epc_set_bar(epc, epf->func_no, epf->vfunc_no, bar); 942 if (ret) 943 dev_warn(&epf->dev, "Failed to restore the original BAR mapping: %d\n", 944 ret); 945 946 kfree(submap); 947 goto err; 948 } 949 kfree(old_submap); 950 951 /* 952 * Fill deterministic signatures into the physical regions that 953 * each BAR subrange maps to. RC verifies these to ensure the 954 * submap order is really applied. 955 */ 956 addr = (u8 *)bar->addr; 957 for (i = 0; i < nsub; i++) { 958 phys_idx = i ^ 1; 959 memset(addr + (phys_idx * sub_size), 960 pci_epf_test_subrange_sig_byte(barno, i), 961 sub_size); 962 } 963 964 status |= STATUS_BAR_SUBRANGE_SETUP_SUCCESS; 965 reg->status = cpu_to_le32(status); 966 return; 967 968 err: 969 status |= STATUS_BAR_SUBRANGE_SETUP_FAIL; 970 reg->status = cpu_to_le32(status); 971 } 972 973 static void pci_epf_test_bar_subrange_clear(struct pci_epf_test *epf_test, 974 struct pci_epf_test_reg *reg) 975 { 976 struct pci_epf *epf = epf_test->epf; 977 struct pci_epf_bar_submap *submap; 978 struct pci_epc *epc = epf->epc; 979 /* reg->size carries BAR number for BAR_SUBRANGE_* commands. */ 980 enum pci_barno barno = le32_to_cpu(reg->size); 981 u32 status = le32_to_cpu(reg->status); 982 struct pci_epf_bar *bar; 983 unsigned int nsub; 984 int ret; 985 986 if (barno >= PCI_STD_NUM_BARS) { 987 dev_err(&epf->dev, "Invalid barno: %d\n", barno); 988 goto err; 989 } 990 991 bar = &epf->bar[barno]; 992 submap = bar->submap; 993 nsub = bar->num_submap; 994 995 if (!submap || !nsub) 996 goto err; 997 998 bar->submap = NULL; 999 bar->num_submap = 0; 1000 1001 ret = pci_epc_set_bar(epc, epf->func_no, epf->vfunc_no, bar); 1002 if (ret) { 1003 bar->submap = submap; 1004 bar->num_submap = nsub; 1005 dev_err(&epf->dev, "pci_epc_set_bar() failed: %d\n", ret); 1006 goto err; 1007 } 1008 kfree(submap); 1009 1010 status |= STATUS_BAR_SUBRANGE_CLEAR_SUCCESS; 1011 reg->status = cpu_to_le32(status); 1012 return; 1013 1014 err: 1015 status |= STATUS_BAR_SUBRANGE_CLEAR_FAIL; 1016 reg->status = cpu_to_le32(status); 1017 } 1018 1019 static void pci_epf_test_cmd_handler(struct work_struct *work) 1020 { 1021 u32 command; 1022 struct pci_epf_test *epf_test = container_of(work, struct pci_epf_test, 1023 cmd_handler.work); 1024 struct pci_epf *epf = epf_test->epf; 1025 struct device *dev = &epf->dev; 1026 enum pci_barno test_reg_bar = epf_test->test_reg_bar; 1027 struct pci_epf_test_reg *reg = epf_test->reg[test_reg_bar]; 1028 u32 irq_type = le32_to_cpu(reg->irq_type); 1029 1030 command = le32_to_cpu(READ_ONCE(reg->command)); 1031 if (!command) 1032 goto reset_handler; 1033 1034 WRITE_ONCE(reg->command, 0); 1035 WRITE_ONCE(reg->status, 0); 1036 1037 if ((le32_to_cpu(READ_ONCE(reg->flags)) & FLAG_USE_DMA) && 1038 !epf_test->dma_supported) { 1039 dev_err(dev, "Cannot transfer data using DMA\n"); 1040 goto reset_handler; 1041 } 1042 1043 if (irq_type > IRQ_TYPE_MSIX) { 1044 dev_err(dev, "Failed to detect IRQ type\n"); 1045 goto reset_handler; 1046 } 1047 1048 switch (command) { 1049 case COMMAND_RAISE_INTX_IRQ: 1050 case COMMAND_RAISE_MSI_IRQ: 1051 case COMMAND_RAISE_MSIX_IRQ: 1052 pci_epf_test_raise_irq(epf_test, reg); 1053 break; 1054 case COMMAND_WRITE: 1055 pci_epf_test_write(epf_test, reg); 1056 pci_epf_test_raise_irq(epf_test, reg); 1057 break; 1058 case COMMAND_READ: 1059 pci_epf_test_read(epf_test, reg); 1060 pci_epf_test_raise_irq(epf_test, reg); 1061 break; 1062 case COMMAND_COPY: 1063 pci_epf_test_copy(epf_test, reg); 1064 pci_epf_test_raise_irq(epf_test, reg); 1065 break; 1066 case COMMAND_ENABLE_DOORBELL: 1067 pci_epf_test_enable_doorbell(epf_test, reg); 1068 pci_epf_test_raise_irq(epf_test, reg); 1069 break; 1070 case COMMAND_DISABLE_DOORBELL: 1071 pci_epf_test_disable_doorbell(epf_test, reg); 1072 pci_epf_test_raise_irq(epf_test, reg); 1073 break; 1074 case COMMAND_BAR_SUBRANGE_SETUP: 1075 pci_epf_test_bar_subrange_setup(epf_test, reg); 1076 pci_epf_test_raise_irq(epf_test, reg); 1077 break; 1078 case COMMAND_BAR_SUBRANGE_CLEAR: 1079 pci_epf_test_bar_subrange_clear(epf_test, reg); 1080 pci_epf_test_raise_irq(epf_test, reg); 1081 break; 1082 default: 1083 dev_err(dev, "Invalid command 0x%x\n", command); 1084 break; 1085 } 1086 1087 reset_handler: 1088 queue_delayed_work(kpcitest_workqueue, &epf_test->cmd_handler, 1089 msecs_to_jiffies(1)); 1090 } 1091 1092 static int pci_epf_test_set_bar(struct pci_epf *epf) 1093 { 1094 int bar, ret; 1095 struct pci_epc *epc = epf->epc; 1096 struct device *dev = &epf->dev; 1097 struct pci_epf_test *epf_test = epf_get_drvdata(epf); 1098 enum pci_barno test_reg_bar = epf_test->test_reg_bar; 1099 1100 for (bar = 0; bar < PCI_STD_NUM_BARS; bar++) { 1101 if (!epf_test->reg[bar]) 1102 continue; 1103 1104 ret = pci_epc_set_bar(epc, epf->func_no, epf->vfunc_no, 1105 &epf->bar[bar]); 1106 if (ret) { 1107 pci_epf_free_space(epf, epf_test->reg[bar], bar, 1108 PRIMARY_INTERFACE); 1109 epf_test->reg[bar] = NULL; 1110 dev_err(dev, "Failed to set BAR%d\n", bar); 1111 if (bar == test_reg_bar) 1112 return ret; 1113 } 1114 } 1115 1116 return 0; 1117 } 1118 1119 static void pci_epf_test_clear_bar(struct pci_epf *epf) 1120 { 1121 struct pci_epf_test *epf_test = epf_get_drvdata(epf); 1122 struct pci_epc *epc = epf->epc; 1123 int bar; 1124 1125 for (bar = 0; bar < PCI_STD_NUM_BARS; bar++) { 1126 if (!epf_test->reg[bar]) 1127 continue; 1128 1129 pci_epc_clear_bar(epc, epf->func_no, epf->vfunc_no, 1130 &epf->bar[bar]); 1131 } 1132 } 1133 1134 static void pci_epf_test_set_capabilities(struct pci_epf *epf) 1135 { 1136 struct pci_epf_test *epf_test = epf_get_drvdata(epf); 1137 enum pci_barno test_reg_bar = epf_test->test_reg_bar; 1138 struct pci_epf_test_reg *reg = epf_test->reg[test_reg_bar]; 1139 struct pci_epc *epc = epf->epc; 1140 u32 caps = 0; 1141 1142 if (epc->ops->align_addr) 1143 caps |= CAP_UNALIGNED_ACCESS; 1144 1145 if (epf_test->epc_features->msi_capable) 1146 caps |= CAP_MSI; 1147 1148 if (epf_test->epc_features->msix_capable) 1149 caps |= CAP_MSIX; 1150 1151 if (epf_test->epc_features->intx_capable) 1152 caps |= CAP_INTX; 1153 1154 if (epf_test->epc_features->dynamic_inbound_mapping) 1155 caps |= CAP_DYNAMIC_INBOUND_MAPPING; 1156 1157 if (epf_test->epc_features->dynamic_inbound_mapping && 1158 epf_test->epc_features->subrange_mapping) 1159 caps |= CAP_SUBRANGE_MAPPING; 1160 1161 if (epf_test->epc_features->bar[BAR_0].type == BAR_RESERVED) 1162 caps |= CAP_BAR0_RESERVED; 1163 1164 if (epf_test->epc_features->bar[BAR_1].type == BAR_RESERVED) 1165 caps |= CAP_BAR1_RESERVED; 1166 1167 if (epf_test->epc_features->bar[BAR_2].type == BAR_RESERVED) 1168 caps |= CAP_BAR2_RESERVED; 1169 1170 if (epf_test->epc_features->bar[BAR_3].type == BAR_RESERVED) 1171 caps |= CAP_BAR3_RESERVED; 1172 1173 if (epf_test->epc_features->bar[BAR_4].type == BAR_RESERVED) 1174 caps |= CAP_BAR4_RESERVED; 1175 1176 if (epf_test->epc_features->bar[BAR_5].type == BAR_RESERVED) 1177 caps |= CAP_BAR5_RESERVED; 1178 1179 reg->caps = cpu_to_le32(caps); 1180 } 1181 1182 static int pci_epf_test_epc_init(struct pci_epf *epf) 1183 { 1184 struct pci_epf_test *epf_test = epf_get_drvdata(epf); 1185 struct pci_epf_header *header = epf->header; 1186 const struct pci_epc_features *epc_features = epf_test->epc_features; 1187 struct pci_epc *epc = epf->epc; 1188 struct device *dev = &epf->dev; 1189 bool linkup_notifier = false; 1190 int ret; 1191 1192 epf_test->dma_supported = true; 1193 1194 ret = pci_epf_test_init_dma_chan(epf_test); 1195 if (ret) 1196 epf_test->dma_supported = false; 1197 1198 if (epf->vfunc_no <= 1) { 1199 ret = pci_epc_write_header(epc, epf->func_no, epf->vfunc_no, header); 1200 if (ret) { 1201 dev_err(dev, "Configuration header write failed\n"); 1202 return ret; 1203 } 1204 } 1205 1206 pci_epf_test_set_capabilities(epf); 1207 1208 ret = pci_epf_test_set_bar(epf); 1209 if (ret) 1210 return ret; 1211 1212 if (epc_features->msi_capable) { 1213 ret = pci_epc_set_msi(epc, epf->func_no, epf->vfunc_no, 1214 epf->msi_interrupts); 1215 if (ret) { 1216 dev_err(dev, "MSI configuration failed\n"); 1217 return ret; 1218 } 1219 } 1220 1221 if (epc_features->msix_capable) { 1222 ret = pci_epc_set_msix(epc, epf->func_no, epf->vfunc_no, 1223 epf->msix_interrupts, 1224 epf_test->test_reg_bar, 1225 epf_test->msix_table_offset); 1226 if (ret) { 1227 dev_err(dev, "MSI-X configuration failed\n"); 1228 return ret; 1229 } 1230 } 1231 1232 linkup_notifier = epc_features->linkup_notifier; 1233 if (!linkup_notifier) 1234 queue_work(kpcitest_workqueue, &epf_test->cmd_handler.work); 1235 1236 return 0; 1237 } 1238 1239 static void pci_epf_test_epc_deinit(struct pci_epf *epf) 1240 { 1241 struct pci_epf_test *epf_test = epf_get_drvdata(epf); 1242 1243 cancel_delayed_work_sync(&epf_test->cmd_handler); 1244 pci_epf_test_clean_dma_chan(epf_test); 1245 pci_epf_test_clear_bar(epf); 1246 } 1247 1248 static int pci_epf_test_link_up(struct pci_epf *epf) 1249 { 1250 struct pci_epf_test *epf_test = epf_get_drvdata(epf); 1251 1252 queue_delayed_work(kpcitest_workqueue, &epf_test->cmd_handler, 1253 msecs_to_jiffies(1)); 1254 1255 return 0; 1256 } 1257 1258 static int pci_epf_test_link_down(struct pci_epf *epf) 1259 { 1260 struct pci_epf_test *epf_test = epf_get_drvdata(epf); 1261 1262 cancel_delayed_work_sync(&epf_test->cmd_handler); 1263 1264 return 0; 1265 } 1266 1267 static const struct pci_epc_event_ops pci_epf_test_event_ops = { 1268 .epc_init = pci_epf_test_epc_init, 1269 .epc_deinit = pci_epf_test_epc_deinit, 1270 .link_up = pci_epf_test_link_up, 1271 .link_down = pci_epf_test_link_down, 1272 }; 1273 1274 static int pci_epf_test_alloc_space(struct pci_epf *epf) 1275 { 1276 struct pci_epf_test *epf_test = epf_get_drvdata(epf); 1277 struct device *dev = &epf->dev; 1278 size_t msix_table_size = 0; 1279 size_t test_reg_bar_size; 1280 size_t pba_size = 0; 1281 void *base; 1282 enum pci_barno test_reg_bar = epf_test->test_reg_bar; 1283 enum pci_barno bar; 1284 const struct pci_epc_features *epc_features = epf_test->epc_features; 1285 size_t test_reg_size; 1286 1287 test_reg_bar_size = ALIGN(sizeof(struct pci_epf_test_reg), 128); 1288 1289 if (epc_features->msix_capable) { 1290 msix_table_size = PCI_MSIX_ENTRY_SIZE * epf->msix_interrupts; 1291 epf_test->msix_table_offset = test_reg_bar_size; 1292 /* Align to QWORD or 8 Bytes */ 1293 pba_size = ALIGN(DIV_ROUND_UP(epf->msix_interrupts, 8), 8); 1294 } 1295 test_reg_size = test_reg_bar_size + msix_table_size + pba_size; 1296 1297 base = pci_epf_alloc_space(epf, test_reg_size, test_reg_bar, 1298 epc_features, PRIMARY_INTERFACE); 1299 if (!base) { 1300 dev_err(dev, "Failed to allocated register space\n"); 1301 return -ENOMEM; 1302 } 1303 epf_test->reg[test_reg_bar] = base; 1304 1305 for (bar = BAR_0; bar < PCI_STD_NUM_BARS; bar++) { 1306 bar = pci_epc_get_next_free_bar(epc_features, bar); 1307 if (bar == NO_BAR) 1308 break; 1309 1310 if (bar == test_reg_bar) 1311 continue; 1312 1313 if (epc_features->bar[bar].type == BAR_FIXED) 1314 test_reg_size = epc_features->bar[bar].fixed_size; 1315 else 1316 test_reg_size = epf_test->bar_size[bar]; 1317 1318 base = pci_epf_alloc_space(epf, test_reg_size, bar, 1319 epc_features, PRIMARY_INTERFACE); 1320 if (!base) 1321 dev_err(dev, "Failed to allocate space for BAR%d\n", 1322 bar); 1323 epf_test->reg[bar] = base; 1324 } 1325 1326 return 0; 1327 } 1328 1329 static void pci_epf_test_free_space(struct pci_epf *epf) 1330 { 1331 struct pci_epf_test *epf_test = epf_get_drvdata(epf); 1332 int bar; 1333 1334 for (bar = 0; bar < PCI_STD_NUM_BARS; bar++) { 1335 if (!epf_test->reg[bar]) 1336 continue; 1337 1338 pci_epf_free_space(epf, epf_test->reg[bar], bar, 1339 PRIMARY_INTERFACE); 1340 epf_test->reg[bar] = NULL; 1341 } 1342 } 1343 1344 static int pci_epf_test_bind(struct pci_epf *epf) 1345 { 1346 int ret; 1347 struct pci_epf_test *epf_test = epf_get_drvdata(epf); 1348 const struct pci_epc_features *epc_features; 1349 enum pci_barno test_reg_bar = BAR_0; 1350 struct pci_epc *epc = epf->epc; 1351 1352 if (WARN_ON_ONCE(!epc)) 1353 return -EINVAL; 1354 1355 epc_features = pci_epc_get_features(epc, epf->func_no, epf->vfunc_no); 1356 if (!epc_features) { 1357 dev_err(&epf->dev, "epc_features not implemented\n"); 1358 return -EOPNOTSUPP; 1359 } 1360 1361 test_reg_bar = pci_epc_get_first_free_bar(epc_features); 1362 if (test_reg_bar < 0) 1363 return -EINVAL; 1364 1365 epf_test->test_reg_bar = test_reg_bar; 1366 epf_test->epc_features = epc_features; 1367 1368 ret = pci_epf_test_alloc_space(epf); 1369 if (ret) 1370 return ret; 1371 1372 return 0; 1373 } 1374 1375 static void pci_epf_test_unbind(struct pci_epf *epf) 1376 { 1377 struct pci_epf_test *epf_test = epf_get_drvdata(epf); 1378 struct pci_epc *epc = epf->epc; 1379 1380 cancel_delayed_work_sync(&epf_test->cmd_handler); 1381 if (epc->init_complete) { 1382 pci_epf_test_clean_dma_chan(epf_test); 1383 pci_epf_test_clear_bar(epf); 1384 } 1385 pci_epf_test_free_space(epf); 1386 } 1387 1388 #define PCI_EPF_TEST_BAR_SIZE_R(_name, _id) \ 1389 static ssize_t pci_epf_test_##_name##_show(struct config_item *item, \ 1390 char *page) \ 1391 { \ 1392 struct config_group *group = to_config_group(item); \ 1393 struct pci_epf_test *epf_test = \ 1394 container_of(group, struct pci_epf_test, group); \ 1395 \ 1396 return sysfs_emit(page, "%zu\n", epf_test->bar_size[_id]); \ 1397 } 1398 1399 #define PCI_EPF_TEST_BAR_SIZE_W(_name, _id) \ 1400 static ssize_t pci_epf_test_##_name##_store(struct config_item *item, \ 1401 const char *page, \ 1402 size_t len) \ 1403 { \ 1404 struct config_group *group = to_config_group(item); \ 1405 struct pci_epf_test *epf_test = \ 1406 container_of(group, struct pci_epf_test, group); \ 1407 int val, ret; \ 1408 \ 1409 /* \ 1410 * BAR sizes can only be modified before binding to an EPC, \ 1411 * because pci_epf_test_alloc_space() is called in .bind(). \ 1412 */ \ 1413 if (epf_test->epf->epc) \ 1414 return -EOPNOTSUPP; \ 1415 \ 1416 ret = kstrtouint(page, 0, &val); \ 1417 if (ret) \ 1418 return ret; \ 1419 \ 1420 if (!is_power_of_2(val)) \ 1421 return -EINVAL; \ 1422 \ 1423 epf_test->bar_size[_id] = val; \ 1424 \ 1425 return len; \ 1426 } 1427 1428 PCI_EPF_TEST_BAR_SIZE_R(bar0_size, BAR_0) 1429 PCI_EPF_TEST_BAR_SIZE_W(bar0_size, BAR_0) 1430 PCI_EPF_TEST_BAR_SIZE_R(bar1_size, BAR_1) 1431 PCI_EPF_TEST_BAR_SIZE_W(bar1_size, BAR_1) 1432 PCI_EPF_TEST_BAR_SIZE_R(bar2_size, BAR_2) 1433 PCI_EPF_TEST_BAR_SIZE_W(bar2_size, BAR_2) 1434 PCI_EPF_TEST_BAR_SIZE_R(bar3_size, BAR_3) 1435 PCI_EPF_TEST_BAR_SIZE_W(bar3_size, BAR_3) 1436 PCI_EPF_TEST_BAR_SIZE_R(bar4_size, BAR_4) 1437 PCI_EPF_TEST_BAR_SIZE_W(bar4_size, BAR_4) 1438 PCI_EPF_TEST_BAR_SIZE_R(bar5_size, BAR_5) 1439 PCI_EPF_TEST_BAR_SIZE_W(bar5_size, BAR_5) 1440 1441 CONFIGFS_ATTR(pci_epf_test_, bar0_size); 1442 CONFIGFS_ATTR(pci_epf_test_, bar1_size); 1443 CONFIGFS_ATTR(pci_epf_test_, bar2_size); 1444 CONFIGFS_ATTR(pci_epf_test_, bar3_size); 1445 CONFIGFS_ATTR(pci_epf_test_, bar4_size); 1446 CONFIGFS_ATTR(pci_epf_test_, bar5_size); 1447 1448 static struct configfs_attribute *pci_epf_test_attrs[] = { 1449 &pci_epf_test_attr_bar0_size, 1450 &pci_epf_test_attr_bar1_size, 1451 &pci_epf_test_attr_bar2_size, 1452 &pci_epf_test_attr_bar3_size, 1453 &pci_epf_test_attr_bar4_size, 1454 &pci_epf_test_attr_bar5_size, 1455 NULL, 1456 }; 1457 1458 static const struct config_item_type pci_epf_test_group_type = { 1459 .ct_attrs = pci_epf_test_attrs, 1460 .ct_owner = THIS_MODULE, 1461 }; 1462 1463 static struct config_group *pci_epf_test_add_cfs(struct pci_epf *epf, 1464 struct config_group *group) 1465 { 1466 struct pci_epf_test *epf_test = epf_get_drvdata(epf); 1467 struct config_group *epf_group = &epf_test->group; 1468 struct device *dev = &epf->dev; 1469 1470 config_group_init_type_name(epf_group, dev_name(dev), 1471 &pci_epf_test_group_type); 1472 1473 return epf_group; 1474 } 1475 1476 static const struct pci_epf_device_id pci_epf_test_ids[] = { 1477 { 1478 .name = "pci_epf_test", 1479 }, 1480 {}, 1481 }; 1482 1483 static int pci_epf_test_probe(struct pci_epf *epf, 1484 const struct pci_epf_device_id *id) 1485 { 1486 struct pci_epf_test *epf_test; 1487 struct device *dev = &epf->dev; 1488 enum pci_barno bar; 1489 1490 epf_test = devm_kzalloc(dev, sizeof(*epf_test), GFP_KERNEL); 1491 if (!epf_test) 1492 return -ENOMEM; 1493 1494 epf->header = &test_header; 1495 epf_test->epf = epf; 1496 for (bar = BAR_0; bar < PCI_STD_NUM_BARS; bar++) 1497 epf_test->bar_size[bar] = default_bar_size[bar]; 1498 1499 INIT_DELAYED_WORK(&epf_test->cmd_handler, pci_epf_test_cmd_handler); 1500 1501 epf->event_ops = &pci_epf_test_event_ops; 1502 1503 epf_set_drvdata(epf, epf_test); 1504 return 0; 1505 } 1506 1507 static const struct pci_epf_ops ops = { 1508 .unbind = pci_epf_test_unbind, 1509 .bind = pci_epf_test_bind, 1510 .add_cfs = pci_epf_test_add_cfs, 1511 }; 1512 1513 static struct pci_epf_driver test_driver = { 1514 .driver.name = "pci_epf_test", 1515 .probe = pci_epf_test_probe, 1516 .id_table = pci_epf_test_ids, 1517 .ops = &ops, 1518 .owner = THIS_MODULE, 1519 }; 1520 1521 static int __init pci_epf_test_init(void) 1522 { 1523 int ret; 1524 1525 kpcitest_workqueue = alloc_workqueue("kpcitest", 1526 WQ_MEM_RECLAIM | WQ_HIGHPRI | WQ_PERCPU, 0); 1527 if (!kpcitest_workqueue) { 1528 pr_err("Failed to allocate the kpcitest work queue\n"); 1529 return -ENOMEM; 1530 } 1531 1532 ret = pci_epf_register_driver(&test_driver); 1533 if (ret) { 1534 destroy_workqueue(kpcitest_workqueue); 1535 pr_err("Failed to register pci epf test driver --> %d\n", ret); 1536 return ret; 1537 } 1538 1539 return 0; 1540 } 1541 module_init(pci_epf_test_init); 1542 1543 static void __exit pci_epf_test_exit(void) 1544 { 1545 if (kpcitest_workqueue) 1546 destroy_workqueue(kpcitest_workqueue); 1547 pci_epf_unregister_driver(&test_driver); 1548 } 1549 module_exit(pci_epf_test_exit); 1550 1551 MODULE_DESCRIPTION("PCI EPF TEST DRIVER"); 1552 MODULE_AUTHOR("Kishon Vijay Abraham I <kishon@ti.com>"); 1553 MODULE_LICENSE("GPL v2"); 1554