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