1 /* 2 * Intel(R) Trace Hub Memory Storage Unit 3 * 4 * Copyright (C) 2014-2015 Intel Corporation. 5 * 6 * This program is free software; you can redistribute it and/or modify it 7 * under the terms and conditions of the GNU General Public License, 8 * version 2, as published by the Free Software Foundation. 9 * 10 * This program is distributed in the hope it will be useful, but WITHOUT 11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 12 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 13 * more details. 14 */ 15 16 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 17 18 #include <linux/types.h> 19 #include <linux/module.h> 20 #include <linux/device.h> 21 #include <linux/uaccess.h> 22 #include <linux/sizes.h> 23 #include <linux/printk.h> 24 #include <linux/slab.h> 25 #include <linux/mm.h> 26 #include <linux/fs.h> 27 #include <linux/io.h> 28 #include <linux/dma-mapping.h> 29 30 #include <asm/cacheflush.h> 31 32 #include "intel_th.h" 33 #include "msu.h" 34 35 #define msc_dev(x) (&(x)->thdev->dev) 36 37 /** 38 * struct msc_block - multiblock mode block descriptor 39 * @bdesc: pointer to hardware descriptor (beginning of the block) 40 * @addr: physical address of the block 41 */ 42 struct msc_block { 43 struct msc_block_desc *bdesc; 44 dma_addr_t addr; 45 }; 46 47 /** 48 * struct msc_window - multiblock mode window descriptor 49 * @entry: window list linkage (msc::win_list) 50 * @pgoff: page offset into the buffer that this window starts at 51 * @nr_blocks: number of blocks (pages) in this window 52 * @block: array of block descriptors 53 */ 54 struct msc_window { 55 struct list_head entry; 56 unsigned long pgoff; 57 unsigned int nr_blocks; 58 struct msc *msc; 59 struct msc_block block[0]; 60 }; 61 62 /** 63 * struct msc_iter - iterator for msc buffer 64 * @entry: msc::iter_list linkage 65 * @msc: pointer to the MSC device 66 * @start_win: oldest window 67 * @win: current window 68 * @offset: current logical offset into the buffer 69 * @start_block: oldest block in the window 70 * @block: block number in the window 71 * @block_off: offset into current block 72 * @wrap_count: block wrapping handling 73 * @eof: end of buffer reached 74 */ 75 struct msc_iter { 76 struct list_head entry; 77 struct msc *msc; 78 struct msc_window *start_win; 79 struct msc_window *win; 80 unsigned long offset; 81 int start_block; 82 int block; 83 unsigned int block_off; 84 unsigned int wrap_count; 85 unsigned int eof; 86 }; 87 88 /** 89 * struct msc - MSC device representation 90 * @reg_base: register window base address 91 * @thdev: intel_th_device pointer 92 * @win_list: list of windows in multiblock mode 93 * @nr_pages: total number of pages allocated for this buffer 94 * @single_sz: amount of data in single mode 95 * @single_wrap: single mode wrap occurred 96 * @base: buffer's base pointer 97 * @base_addr: buffer's base address 98 * @user_count: number of users of the buffer 99 * @mmap_count: number of mappings 100 * @buf_mutex: mutex to serialize access to buffer-related bits 101 102 * @enabled: MSC is enabled 103 * @wrap: wrapping is enabled 104 * @mode: MSC operating mode 105 * @burst_len: write burst length 106 * @index: number of this MSC in the MSU 107 */ 108 struct msc { 109 void __iomem *reg_base; 110 struct intel_th_device *thdev; 111 112 struct list_head win_list; 113 unsigned long nr_pages; 114 unsigned long single_sz; 115 unsigned int single_wrap : 1; 116 void *base; 117 dma_addr_t base_addr; 118 119 /* <0: no buffer, 0: no users, >0: active users */ 120 atomic_t user_count; 121 122 atomic_t mmap_count; 123 struct mutex buf_mutex; 124 125 struct list_head iter_list; 126 127 /* config */ 128 unsigned int enabled : 1, 129 wrap : 1; 130 unsigned int mode; 131 unsigned int burst_len; 132 unsigned int index; 133 }; 134 135 static inline bool msc_block_is_empty(struct msc_block_desc *bdesc) 136 { 137 /* header hasn't been written */ 138 if (!bdesc->valid_dw) 139 return true; 140 141 /* valid_dw includes the header */ 142 if (!msc_data_sz(bdesc)) 143 return true; 144 145 return false; 146 } 147 148 /** 149 * msc_oldest_window() - locate the window with oldest data 150 * @msc: MSC device 151 * 152 * This should only be used in multiblock mode. Caller should hold the 153 * msc::user_count reference. 154 * 155 * Return: the oldest window with valid data 156 */ 157 static struct msc_window *msc_oldest_window(struct msc *msc) 158 { 159 struct msc_window *win; 160 u32 reg = ioread32(msc->reg_base + REG_MSU_MSC0NWSA); 161 unsigned long win_addr = (unsigned long)reg << PAGE_SHIFT; 162 unsigned int found = 0; 163 164 if (list_empty(&msc->win_list)) 165 return NULL; 166 167 /* 168 * we might need a radix tree for this, depending on how 169 * many windows a typical user would allocate; ideally it's 170 * something like 2, in which case we're good 171 */ 172 list_for_each_entry(win, &msc->win_list, entry) { 173 if (win->block[0].addr == win_addr) 174 found++; 175 176 /* skip the empty ones */ 177 if (msc_block_is_empty(win->block[0].bdesc)) 178 continue; 179 180 if (found) 181 return win; 182 } 183 184 return list_entry(msc->win_list.next, struct msc_window, entry); 185 } 186 187 /** 188 * msc_win_oldest_block() - locate the oldest block in a given window 189 * @win: window to look at 190 * 191 * Return: index of the block with the oldest data 192 */ 193 static unsigned int msc_win_oldest_block(struct msc_window *win) 194 { 195 unsigned int blk; 196 struct msc_block_desc *bdesc = win->block[0].bdesc; 197 198 /* without wrapping, first block is the oldest */ 199 if (!msc_block_wrapped(bdesc)) 200 return 0; 201 202 /* 203 * with wrapping, last written block contains both the newest and the 204 * oldest data for this window. 205 */ 206 for (blk = 0; blk < win->nr_blocks; blk++) { 207 bdesc = win->block[blk].bdesc; 208 209 if (msc_block_last_written(bdesc)) 210 return blk; 211 } 212 213 return 0; 214 } 215 216 /** 217 * msc_is_last_win() - check if a window is the last one for a given MSC 218 * @win: window 219 * Return: true if @win is the last window in MSC's multiblock buffer 220 */ 221 static inline bool msc_is_last_win(struct msc_window *win) 222 { 223 return win->entry.next == &win->msc->win_list; 224 } 225 226 /** 227 * msc_next_window() - return next window in the multiblock buffer 228 * @win: current window 229 * 230 * Return: window following the current one 231 */ 232 static struct msc_window *msc_next_window(struct msc_window *win) 233 { 234 if (msc_is_last_win(win)) 235 return list_entry(win->msc->win_list.next, struct msc_window, 236 entry); 237 238 return list_entry(win->entry.next, struct msc_window, entry); 239 } 240 241 static struct msc_block_desc *msc_iter_bdesc(struct msc_iter *iter) 242 { 243 return iter->win->block[iter->block].bdesc; 244 } 245 246 static void msc_iter_init(struct msc_iter *iter) 247 { 248 memset(iter, 0, sizeof(*iter)); 249 iter->start_block = -1; 250 iter->block = -1; 251 } 252 253 static struct msc_iter *msc_iter_install(struct msc *msc) 254 { 255 struct msc_iter *iter; 256 257 iter = kzalloc(sizeof(*iter), GFP_KERNEL); 258 if (!iter) 259 return ERR_PTR(-ENOMEM); 260 261 mutex_lock(&msc->buf_mutex); 262 263 /* 264 * Reading and tracing are mutually exclusive; if msc is 265 * enabled, open() will fail; otherwise existing readers 266 * will prevent enabling the msc and the rest of fops don't 267 * need to worry about it. 268 */ 269 if (msc->enabled) { 270 kfree(iter); 271 iter = ERR_PTR(-EBUSY); 272 goto unlock; 273 } 274 275 msc_iter_init(iter); 276 iter->msc = msc; 277 278 list_add_tail(&iter->entry, &msc->iter_list); 279 unlock: 280 mutex_unlock(&msc->buf_mutex); 281 282 return iter; 283 } 284 285 static void msc_iter_remove(struct msc_iter *iter, struct msc *msc) 286 { 287 mutex_lock(&msc->buf_mutex); 288 list_del(&iter->entry); 289 mutex_unlock(&msc->buf_mutex); 290 291 kfree(iter); 292 } 293 294 static void msc_iter_block_start(struct msc_iter *iter) 295 { 296 if (iter->start_block != -1) 297 return; 298 299 iter->start_block = msc_win_oldest_block(iter->win); 300 iter->block = iter->start_block; 301 iter->wrap_count = 0; 302 303 /* 304 * start with the block with oldest data; if data has wrapped 305 * in this window, it should be in this block 306 */ 307 if (msc_block_wrapped(msc_iter_bdesc(iter))) 308 iter->wrap_count = 2; 309 310 } 311 312 static int msc_iter_win_start(struct msc_iter *iter, struct msc *msc) 313 { 314 /* already started, nothing to do */ 315 if (iter->start_win) 316 return 0; 317 318 iter->start_win = msc_oldest_window(msc); 319 if (!iter->start_win) 320 return -EINVAL; 321 322 iter->win = iter->start_win; 323 iter->start_block = -1; 324 325 msc_iter_block_start(iter); 326 327 return 0; 328 } 329 330 static int msc_iter_win_advance(struct msc_iter *iter) 331 { 332 iter->win = msc_next_window(iter->win); 333 iter->start_block = -1; 334 335 if (iter->win == iter->start_win) { 336 iter->eof++; 337 return 1; 338 } 339 340 msc_iter_block_start(iter); 341 342 return 0; 343 } 344 345 static int msc_iter_block_advance(struct msc_iter *iter) 346 { 347 iter->block_off = 0; 348 349 /* wrapping */ 350 if (iter->wrap_count && iter->block == iter->start_block) { 351 iter->wrap_count--; 352 if (!iter->wrap_count) 353 /* copied newest data from the wrapped block */ 354 return msc_iter_win_advance(iter); 355 } 356 357 /* no wrapping, check for last written block */ 358 if (!iter->wrap_count && msc_block_last_written(msc_iter_bdesc(iter))) 359 /* copied newest data for the window */ 360 return msc_iter_win_advance(iter); 361 362 /* block advance */ 363 if (++iter->block == iter->win->nr_blocks) 364 iter->block = 0; 365 366 /* no wrapping, sanity check in case there is no last written block */ 367 if (!iter->wrap_count && iter->block == iter->start_block) 368 return msc_iter_win_advance(iter); 369 370 return 0; 371 } 372 373 /** 374 * msc_buffer_iterate() - go through multiblock buffer's data 375 * @iter: iterator structure 376 * @size: amount of data to scan 377 * @data: callback's private data 378 * @fn: iterator callback 379 * 380 * This will start at the window which will be written to next (containing 381 * the oldest data) and work its way to the current window, calling @fn 382 * for each chunk of data as it goes. 383 * 384 * Caller should have msc::user_count reference to make sure the buffer 385 * doesn't disappear from under us. 386 * 387 * Return: amount of data actually scanned. 388 */ 389 static ssize_t 390 msc_buffer_iterate(struct msc_iter *iter, size_t size, void *data, 391 unsigned long (*fn)(void *, void *, size_t)) 392 { 393 struct msc *msc = iter->msc; 394 size_t len = size; 395 unsigned int advance; 396 397 if (iter->eof) 398 return 0; 399 400 /* start with the oldest window */ 401 if (msc_iter_win_start(iter, msc)) 402 return 0; 403 404 do { 405 unsigned long data_bytes = msc_data_sz(msc_iter_bdesc(iter)); 406 void *src = (void *)msc_iter_bdesc(iter) + MSC_BDESC; 407 size_t tocopy = data_bytes, copied = 0; 408 size_t remaining = 0; 409 410 advance = 1; 411 412 /* 413 * If block wrapping happened, we need to visit the last block 414 * twice, because it contains both the oldest and the newest 415 * data in this window. 416 * 417 * First time (wrap_count==2), in the very beginning, to collect 418 * the oldest data, which is in the range 419 * (data_bytes..DATA_IN_PAGE). 420 * 421 * Second time (wrap_count==1), it's just like any other block, 422 * containing data in the range of [MSC_BDESC..data_bytes]. 423 */ 424 if (iter->block == iter->start_block && iter->wrap_count == 2) { 425 tocopy = DATA_IN_PAGE - data_bytes; 426 src += data_bytes; 427 } 428 429 if (!tocopy) 430 goto next_block; 431 432 tocopy -= iter->block_off; 433 src += iter->block_off; 434 435 if (len < tocopy) { 436 tocopy = len; 437 advance = 0; 438 } 439 440 remaining = fn(data, src, tocopy); 441 442 if (remaining) 443 advance = 0; 444 445 copied = tocopy - remaining; 446 len -= copied; 447 iter->block_off += copied; 448 iter->offset += copied; 449 450 if (!advance) 451 break; 452 453 next_block: 454 if (msc_iter_block_advance(iter)) 455 break; 456 457 } while (len); 458 459 return size - len; 460 } 461 462 /** 463 * msc_buffer_clear_hw_header() - clear hw header for multiblock 464 * @msc: MSC device 465 */ 466 static void msc_buffer_clear_hw_header(struct msc *msc) 467 { 468 struct msc_window *win; 469 470 list_for_each_entry(win, &msc->win_list, entry) { 471 unsigned int blk; 472 size_t hw_sz = sizeof(struct msc_block_desc) - 473 offsetof(struct msc_block_desc, hw_tag); 474 475 for (blk = 0; blk < win->nr_blocks; blk++) { 476 struct msc_block_desc *bdesc = win->block[blk].bdesc; 477 478 memset(&bdesc->hw_tag, 0, hw_sz); 479 } 480 } 481 } 482 483 /** 484 * msc_configure() - set up MSC hardware 485 * @msc: the MSC device to configure 486 * 487 * Program storage mode, wrapping, burst length and trace buffer address 488 * into a given MSC. Then, enable tracing and set msc::enabled. 489 * The latter is serialized on msc::buf_mutex, so make sure to hold it. 490 */ 491 static int msc_configure(struct msc *msc) 492 { 493 u32 reg; 494 495 lockdep_assert_held(&msc->buf_mutex); 496 497 if (msc->mode > MSC_MODE_MULTI) 498 return -ENOTSUPP; 499 500 if (msc->mode == MSC_MODE_MULTI) 501 msc_buffer_clear_hw_header(msc); 502 503 reg = msc->base_addr >> PAGE_SHIFT; 504 iowrite32(reg, msc->reg_base + REG_MSU_MSC0BAR); 505 506 if (msc->mode == MSC_MODE_SINGLE) { 507 reg = msc->nr_pages; 508 iowrite32(reg, msc->reg_base + REG_MSU_MSC0SIZE); 509 } 510 511 reg = ioread32(msc->reg_base + REG_MSU_MSC0CTL); 512 reg &= ~(MSC_MODE | MSC_WRAPEN | MSC_EN | MSC_RD_HDR_OVRD); 513 514 reg |= MSC_EN; 515 reg |= msc->mode << __ffs(MSC_MODE); 516 reg |= msc->burst_len << __ffs(MSC_LEN); 517 518 if (msc->wrap) 519 reg |= MSC_WRAPEN; 520 521 iowrite32(reg, msc->reg_base + REG_MSU_MSC0CTL); 522 523 msc->thdev->output.multiblock = msc->mode == MSC_MODE_MULTI; 524 intel_th_trace_enable(msc->thdev); 525 msc->enabled = 1; 526 527 528 return 0; 529 } 530 531 /** 532 * msc_disable() - disable MSC hardware 533 * @msc: MSC device to disable 534 * 535 * If @msc is enabled, disable tracing on the switch and then disable MSC 536 * storage. Caller must hold msc::buf_mutex. 537 */ 538 static void msc_disable(struct msc *msc) 539 { 540 unsigned long count; 541 u32 reg; 542 543 lockdep_assert_held(&msc->buf_mutex); 544 545 intel_th_trace_disable(msc->thdev); 546 547 for (reg = 0, count = MSC_PLE_WAITLOOP_DEPTH; 548 count && !(reg & MSCSTS_PLE); count--) { 549 reg = ioread32(msc->reg_base + REG_MSU_MSC0STS); 550 cpu_relax(); 551 } 552 553 if (!count) 554 dev_dbg(msc_dev(msc), "timeout waiting for MSC0 PLE\n"); 555 556 if (msc->mode == MSC_MODE_SINGLE) { 557 msc->single_wrap = !!(reg & MSCSTS_WRAPSTAT); 558 559 reg = ioread32(msc->reg_base + REG_MSU_MSC0MWP); 560 msc->single_sz = reg & ((msc->nr_pages << PAGE_SHIFT) - 1); 561 dev_dbg(msc_dev(msc), "MSCnMWP: %08x/%08lx, wrap: %d\n", 562 reg, msc->single_sz, msc->single_wrap); 563 } 564 565 reg = ioread32(msc->reg_base + REG_MSU_MSC0CTL); 566 reg &= ~MSC_EN; 567 iowrite32(reg, msc->reg_base + REG_MSU_MSC0CTL); 568 msc->enabled = 0; 569 570 iowrite32(0, msc->reg_base + REG_MSU_MSC0BAR); 571 iowrite32(0, msc->reg_base + REG_MSU_MSC0SIZE); 572 573 dev_dbg(msc_dev(msc), "MSCnNWSA: %08x\n", 574 ioread32(msc->reg_base + REG_MSU_MSC0NWSA)); 575 576 reg = ioread32(msc->reg_base + REG_MSU_MSC0STS); 577 dev_dbg(msc_dev(msc), "MSCnSTS: %08x\n", reg); 578 } 579 580 static int intel_th_msc_activate(struct intel_th_device *thdev) 581 { 582 struct msc *msc = dev_get_drvdata(&thdev->dev); 583 int ret = -EBUSY; 584 585 if (!atomic_inc_unless_negative(&msc->user_count)) 586 return -ENODEV; 587 588 mutex_lock(&msc->buf_mutex); 589 590 /* if there are readers, refuse */ 591 if (list_empty(&msc->iter_list)) 592 ret = msc_configure(msc); 593 594 mutex_unlock(&msc->buf_mutex); 595 596 if (ret) 597 atomic_dec(&msc->user_count); 598 599 return ret; 600 } 601 602 static void intel_th_msc_deactivate(struct intel_th_device *thdev) 603 { 604 struct msc *msc = dev_get_drvdata(&thdev->dev); 605 606 mutex_lock(&msc->buf_mutex); 607 if (msc->enabled) { 608 msc_disable(msc); 609 atomic_dec(&msc->user_count); 610 } 611 mutex_unlock(&msc->buf_mutex); 612 } 613 614 /** 615 * msc_buffer_contig_alloc() - allocate a contiguous buffer for SINGLE mode 616 * @msc: MSC device 617 * @size: allocation size in bytes 618 * 619 * This modifies msc::base, which requires msc::buf_mutex to serialize, so the 620 * caller is expected to hold it. 621 * 622 * Return: 0 on success, -errno otherwise. 623 */ 624 static int msc_buffer_contig_alloc(struct msc *msc, unsigned long size) 625 { 626 unsigned int order = get_order(size); 627 struct page *page; 628 629 if (!size) 630 return 0; 631 632 page = alloc_pages(GFP_KERNEL | __GFP_ZERO, order); 633 if (!page) 634 return -ENOMEM; 635 636 split_page(page, order); 637 msc->nr_pages = size >> PAGE_SHIFT; 638 msc->base = page_address(page); 639 msc->base_addr = page_to_phys(page); 640 641 return 0; 642 } 643 644 /** 645 * msc_buffer_contig_free() - free a contiguous buffer 646 * @msc: MSC configured in SINGLE mode 647 */ 648 static void msc_buffer_contig_free(struct msc *msc) 649 { 650 unsigned long off; 651 652 for (off = 0; off < msc->nr_pages << PAGE_SHIFT; off += PAGE_SIZE) { 653 struct page *page = virt_to_page(msc->base + off); 654 655 page->mapping = NULL; 656 __free_page(page); 657 } 658 659 msc->nr_pages = 0; 660 } 661 662 /** 663 * msc_buffer_contig_get_page() - find a page at a given offset 664 * @msc: MSC configured in SINGLE mode 665 * @pgoff: page offset 666 * 667 * Return: page, if @pgoff is within the range, NULL otherwise. 668 */ 669 static struct page *msc_buffer_contig_get_page(struct msc *msc, 670 unsigned long pgoff) 671 { 672 if (pgoff >= msc->nr_pages) 673 return NULL; 674 675 return virt_to_page(msc->base + (pgoff << PAGE_SHIFT)); 676 } 677 678 /** 679 * msc_buffer_win_alloc() - alloc a window for a multiblock mode 680 * @msc: MSC device 681 * @nr_blocks: number of pages in this window 682 * 683 * This modifies msc::win_list and msc::base, which requires msc::buf_mutex 684 * to serialize, so the caller is expected to hold it. 685 * 686 * Return: 0 on success, -errno otherwise. 687 */ 688 static int msc_buffer_win_alloc(struct msc *msc, unsigned int nr_blocks) 689 { 690 struct msc_window *win; 691 unsigned long size = PAGE_SIZE; 692 int i, ret = -ENOMEM; 693 694 if (!nr_blocks) 695 return 0; 696 697 win = kzalloc(offsetof(struct msc_window, block[nr_blocks]), 698 GFP_KERNEL); 699 if (!win) 700 return -ENOMEM; 701 702 if (!list_empty(&msc->win_list)) { 703 struct msc_window *prev = list_entry(msc->win_list.prev, 704 struct msc_window, entry); 705 706 win->pgoff = prev->pgoff + prev->nr_blocks; 707 } 708 709 for (i = 0; i < nr_blocks; i++) { 710 win->block[i].bdesc = dma_alloc_coherent(msc_dev(msc), size, 711 &win->block[i].addr, 712 GFP_KERNEL); 713 714 #ifdef CONFIG_X86 715 /* Set the page as uncached */ 716 set_memory_uc((unsigned long)win->block[i].bdesc, 1); 717 #endif 718 719 if (!win->block[i].bdesc) 720 goto err_nomem; 721 } 722 723 win->msc = msc; 724 win->nr_blocks = nr_blocks; 725 726 if (list_empty(&msc->win_list)) { 727 msc->base = win->block[0].bdesc; 728 msc->base_addr = win->block[0].addr; 729 } 730 731 list_add_tail(&win->entry, &msc->win_list); 732 msc->nr_pages += nr_blocks; 733 734 return 0; 735 736 err_nomem: 737 for (i--; i >= 0; i--) { 738 #ifdef CONFIG_X86 739 /* Reset the page to write-back before releasing */ 740 set_memory_wb((unsigned long)win->block[i].bdesc, 1); 741 #endif 742 dma_free_coherent(msc_dev(msc), size, win->block[i].bdesc, 743 win->block[i].addr); 744 } 745 kfree(win); 746 747 return ret; 748 } 749 750 /** 751 * msc_buffer_win_free() - free a window from MSC's window list 752 * @msc: MSC device 753 * @win: window to free 754 * 755 * This modifies msc::win_list and msc::base, which requires msc::buf_mutex 756 * to serialize, so the caller is expected to hold it. 757 */ 758 static void msc_buffer_win_free(struct msc *msc, struct msc_window *win) 759 { 760 int i; 761 762 msc->nr_pages -= win->nr_blocks; 763 764 list_del(&win->entry); 765 if (list_empty(&msc->win_list)) { 766 msc->base = NULL; 767 msc->base_addr = 0; 768 } 769 770 for (i = 0; i < win->nr_blocks; i++) { 771 struct page *page = virt_to_page(win->block[i].bdesc); 772 773 page->mapping = NULL; 774 #ifdef CONFIG_X86 775 /* Reset the page to write-back before releasing */ 776 set_memory_wb((unsigned long)win->block[i].bdesc, 1); 777 #endif 778 dma_free_coherent(msc_dev(win->msc), PAGE_SIZE, 779 win->block[i].bdesc, win->block[i].addr); 780 } 781 782 kfree(win); 783 } 784 785 /** 786 * msc_buffer_relink() - set up block descriptors for multiblock mode 787 * @msc: MSC device 788 * 789 * This traverses msc::win_list, which requires msc::buf_mutex to serialize, 790 * so the caller is expected to hold it. 791 */ 792 static void msc_buffer_relink(struct msc *msc) 793 { 794 struct msc_window *win, *next_win; 795 796 /* call with msc::mutex locked */ 797 list_for_each_entry(win, &msc->win_list, entry) { 798 unsigned int blk; 799 u32 sw_tag = 0; 800 801 /* 802 * Last window's next_win should point to the first window 803 * and MSC_SW_TAG_LASTWIN should be set. 804 */ 805 if (msc_is_last_win(win)) { 806 sw_tag |= MSC_SW_TAG_LASTWIN; 807 next_win = list_entry(msc->win_list.next, 808 struct msc_window, entry); 809 } else { 810 next_win = list_entry(win->entry.next, 811 struct msc_window, entry); 812 } 813 814 for (blk = 0; blk < win->nr_blocks; blk++) { 815 struct msc_block_desc *bdesc = win->block[blk].bdesc; 816 817 memset(bdesc, 0, sizeof(*bdesc)); 818 819 bdesc->next_win = next_win->block[0].addr >> PAGE_SHIFT; 820 821 /* 822 * Similarly to last window, last block should point 823 * to the first one. 824 */ 825 if (blk == win->nr_blocks - 1) { 826 sw_tag |= MSC_SW_TAG_LASTBLK; 827 bdesc->next_blk = 828 win->block[0].addr >> PAGE_SHIFT; 829 } else { 830 bdesc->next_blk = 831 win->block[blk + 1].addr >> PAGE_SHIFT; 832 } 833 834 bdesc->sw_tag = sw_tag; 835 bdesc->block_sz = PAGE_SIZE / 64; 836 } 837 } 838 839 /* 840 * Make the above writes globally visible before tracing is 841 * enabled to make sure hardware sees them coherently. 842 */ 843 wmb(); 844 } 845 846 static void msc_buffer_multi_free(struct msc *msc) 847 { 848 struct msc_window *win, *iter; 849 850 list_for_each_entry_safe(win, iter, &msc->win_list, entry) 851 msc_buffer_win_free(msc, win); 852 } 853 854 static int msc_buffer_multi_alloc(struct msc *msc, unsigned long *nr_pages, 855 unsigned int nr_wins) 856 { 857 int ret, i; 858 859 for (i = 0; i < nr_wins; i++) { 860 ret = msc_buffer_win_alloc(msc, nr_pages[i]); 861 if (ret) { 862 msc_buffer_multi_free(msc); 863 return ret; 864 } 865 } 866 867 msc_buffer_relink(msc); 868 869 return 0; 870 } 871 872 /** 873 * msc_buffer_free() - free buffers for MSC 874 * @msc: MSC device 875 * 876 * Free MSC's storage buffers. 877 * 878 * This modifies msc::win_list and msc::base, which requires msc::buf_mutex to 879 * serialize, so the caller is expected to hold it. 880 */ 881 static void msc_buffer_free(struct msc *msc) 882 { 883 if (msc->mode == MSC_MODE_SINGLE) 884 msc_buffer_contig_free(msc); 885 else if (msc->mode == MSC_MODE_MULTI) 886 msc_buffer_multi_free(msc); 887 } 888 889 /** 890 * msc_buffer_alloc() - allocate a buffer for MSC 891 * @msc: MSC device 892 * @size: allocation size in bytes 893 * 894 * Allocate a storage buffer for MSC, depending on the msc::mode, it will be 895 * either done via msc_buffer_contig_alloc() for SINGLE operation mode or 896 * msc_buffer_win_alloc() for multiblock operation. The latter allocates one 897 * window per invocation, so in multiblock mode this can be called multiple 898 * times for the same MSC to allocate multiple windows. 899 * 900 * This modifies msc::win_list and msc::base, which requires msc::buf_mutex 901 * to serialize, so the caller is expected to hold it. 902 * 903 * Return: 0 on success, -errno otherwise. 904 */ 905 static int msc_buffer_alloc(struct msc *msc, unsigned long *nr_pages, 906 unsigned int nr_wins) 907 { 908 int ret; 909 910 /* -1: buffer not allocated */ 911 if (atomic_read(&msc->user_count) != -1) 912 return -EBUSY; 913 914 if (msc->mode == MSC_MODE_SINGLE) { 915 if (nr_wins != 1) 916 return -EINVAL; 917 918 ret = msc_buffer_contig_alloc(msc, nr_pages[0] << PAGE_SHIFT); 919 } else if (msc->mode == MSC_MODE_MULTI) { 920 ret = msc_buffer_multi_alloc(msc, nr_pages, nr_wins); 921 } else { 922 ret = -ENOTSUPP; 923 } 924 925 if (!ret) { 926 /* allocation should be visible before the counter goes to 0 */ 927 smp_mb__before_atomic(); 928 929 if (WARN_ON_ONCE(atomic_cmpxchg(&msc->user_count, -1, 0) != -1)) 930 return -EINVAL; 931 } 932 933 return ret; 934 } 935 936 /** 937 * msc_buffer_unlocked_free_unless_used() - free a buffer unless it's in use 938 * @msc: MSC device 939 * 940 * This will free MSC buffer unless it is in use or there is no allocated 941 * buffer. 942 * Caller needs to hold msc::buf_mutex. 943 * 944 * Return: 0 on successful deallocation or if there was no buffer to 945 * deallocate, -EBUSY if there are active users. 946 */ 947 static int msc_buffer_unlocked_free_unless_used(struct msc *msc) 948 { 949 int count, ret = 0; 950 951 count = atomic_cmpxchg(&msc->user_count, 0, -1); 952 953 /* > 0: buffer is allocated and has users */ 954 if (count > 0) 955 ret = -EBUSY; 956 /* 0: buffer is allocated, no users */ 957 else if (!count) 958 msc_buffer_free(msc); 959 /* < 0: no buffer, nothing to do */ 960 961 return ret; 962 } 963 964 /** 965 * msc_buffer_free_unless_used() - free a buffer unless it's in use 966 * @msc: MSC device 967 * 968 * This is a locked version of msc_buffer_unlocked_free_unless_used(). 969 */ 970 static int msc_buffer_free_unless_used(struct msc *msc) 971 { 972 int ret; 973 974 mutex_lock(&msc->buf_mutex); 975 ret = msc_buffer_unlocked_free_unless_used(msc); 976 mutex_unlock(&msc->buf_mutex); 977 978 return ret; 979 } 980 981 /** 982 * msc_buffer_get_page() - get MSC buffer page at a given offset 983 * @msc: MSC device 984 * @pgoff: page offset into the storage buffer 985 * 986 * This traverses msc::win_list, so holding msc::buf_mutex is expected from 987 * the caller. 988 * 989 * Return: page if @pgoff corresponds to a valid buffer page or NULL. 990 */ 991 static struct page *msc_buffer_get_page(struct msc *msc, unsigned long pgoff) 992 { 993 struct msc_window *win; 994 995 if (msc->mode == MSC_MODE_SINGLE) 996 return msc_buffer_contig_get_page(msc, pgoff); 997 998 list_for_each_entry(win, &msc->win_list, entry) 999 if (pgoff >= win->pgoff && pgoff < win->pgoff + win->nr_blocks) 1000 goto found; 1001 1002 return NULL; 1003 1004 found: 1005 pgoff -= win->pgoff; 1006 return virt_to_page(win->block[pgoff].bdesc); 1007 } 1008 1009 /** 1010 * struct msc_win_to_user_struct - data for copy_to_user() callback 1011 * @buf: userspace buffer to copy data to 1012 * @offset: running offset 1013 */ 1014 struct msc_win_to_user_struct { 1015 char __user *buf; 1016 unsigned long offset; 1017 }; 1018 1019 /** 1020 * msc_win_to_user() - iterator for msc_buffer_iterate() to copy data to user 1021 * @data: callback's private data 1022 * @src: source buffer 1023 * @len: amount of data to copy from the source buffer 1024 */ 1025 static unsigned long msc_win_to_user(void *data, void *src, size_t len) 1026 { 1027 struct msc_win_to_user_struct *u = data; 1028 unsigned long ret; 1029 1030 ret = copy_to_user(u->buf + u->offset, src, len); 1031 u->offset += len - ret; 1032 1033 return ret; 1034 } 1035 1036 1037 /* 1038 * file operations' callbacks 1039 */ 1040 1041 static int intel_th_msc_open(struct inode *inode, struct file *file) 1042 { 1043 struct intel_th_device *thdev = file->private_data; 1044 struct msc *msc = dev_get_drvdata(&thdev->dev); 1045 struct msc_iter *iter; 1046 1047 if (!capable(CAP_SYS_RAWIO)) 1048 return -EPERM; 1049 1050 iter = msc_iter_install(msc); 1051 if (IS_ERR(iter)) 1052 return PTR_ERR(iter); 1053 1054 file->private_data = iter; 1055 1056 return nonseekable_open(inode, file); 1057 } 1058 1059 static int intel_th_msc_release(struct inode *inode, struct file *file) 1060 { 1061 struct msc_iter *iter = file->private_data; 1062 struct msc *msc = iter->msc; 1063 1064 msc_iter_remove(iter, msc); 1065 1066 return 0; 1067 } 1068 1069 static ssize_t 1070 msc_single_to_user(struct msc *msc, char __user *buf, loff_t off, size_t len) 1071 { 1072 unsigned long size = msc->nr_pages << PAGE_SHIFT, rem = len; 1073 unsigned long start = off, tocopy = 0; 1074 1075 if (msc->single_wrap) { 1076 start += msc->single_sz; 1077 if (start < size) { 1078 tocopy = min(rem, size - start); 1079 if (copy_to_user(buf, msc->base + start, tocopy)) 1080 return -EFAULT; 1081 1082 buf += tocopy; 1083 rem -= tocopy; 1084 start += tocopy; 1085 } 1086 1087 start &= size - 1; 1088 if (rem) { 1089 tocopy = min(rem, msc->single_sz - start); 1090 if (copy_to_user(buf, msc->base + start, tocopy)) 1091 return -EFAULT; 1092 1093 rem -= tocopy; 1094 } 1095 1096 return len - rem; 1097 } 1098 1099 if (copy_to_user(buf, msc->base + start, rem)) 1100 return -EFAULT; 1101 1102 return len; 1103 } 1104 1105 static ssize_t intel_th_msc_read(struct file *file, char __user *buf, 1106 size_t len, loff_t *ppos) 1107 { 1108 struct msc_iter *iter = file->private_data; 1109 struct msc *msc = iter->msc; 1110 size_t size; 1111 loff_t off = *ppos; 1112 ssize_t ret = 0; 1113 1114 if (!atomic_inc_unless_negative(&msc->user_count)) 1115 return 0; 1116 1117 if (msc->mode == MSC_MODE_SINGLE && !msc->single_wrap) 1118 size = msc->single_sz; 1119 else 1120 size = msc->nr_pages << PAGE_SHIFT; 1121 1122 if (!size) 1123 goto put_count; 1124 1125 if (off >= size) 1126 goto put_count; 1127 1128 if (off + len >= size) 1129 len = size - off; 1130 1131 if (msc->mode == MSC_MODE_SINGLE) { 1132 ret = msc_single_to_user(msc, buf, off, len); 1133 if (ret >= 0) 1134 *ppos += ret; 1135 } else if (msc->mode == MSC_MODE_MULTI) { 1136 struct msc_win_to_user_struct u = { 1137 .buf = buf, 1138 .offset = 0, 1139 }; 1140 1141 ret = msc_buffer_iterate(iter, len, &u, msc_win_to_user); 1142 if (ret >= 0) 1143 *ppos = iter->offset; 1144 } else { 1145 ret = -ENOTSUPP; 1146 } 1147 1148 put_count: 1149 atomic_dec(&msc->user_count); 1150 1151 return ret; 1152 } 1153 1154 /* 1155 * vm operations callbacks (vm_ops) 1156 */ 1157 1158 static void msc_mmap_open(struct vm_area_struct *vma) 1159 { 1160 struct msc_iter *iter = vma->vm_file->private_data; 1161 struct msc *msc = iter->msc; 1162 1163 atomic_inc(&msc->mmap_count); 1164 } 1165 1166 static void msc_mmap_close(struct vm_area_struct *vma) 1167 { 1168 struct msc_iter *iter = vma->vm_file->private_data; 1169 struct msc *msc = iter->msc; 1170 unsigned long pg; 1171 1172 if (!atomic_dec_and_mutex_lock(&msc->mmap_count, &msc->buf_mutex)) 1173 return; 1174 1175 /* drop page _refcounts */ 1176 for (pg = 0; pg < msc->nr_pages; pg++) { 1177 struct page *page = msc_buffer_get_page(msc, pg); 1178 1179 if (WARN_ON_ONCE(!page)) 1180 continue; 1181 1182 if (page->mapping) 1183 page->mapping = NULL; 1184 } 1185 1186 /* last mapping -- drop user_count */ 1187 atomic_dec(&msc->user_count); 1188 mutex_unlock(&msc->buf_mutex); 1189 } 1190 1191 static int msc_mmap_fault(struct vm_area_struct *vma, struct vm_fault *vmf) 1192 { 1193 struct msc_iter *iter = vma->vm_file->private_data; 1194 struct msc *msc = iter->msc; 1195 1196 vmf->page = msc_buffer_get_page(msc, vmf->pgoff); 1197 if (!vmf->page) 1198 return VM_FAULT_SIGBUS; 1199 1200 get_page(vmf->page); 1201 vmf->page->mapping = vma->vm_file->f_mapping; 1202 vmf->page->index = vmf->pgoff; 1203 1204 return 0; 1205 } 1206 1207 static const struct vm_operations_struct msc_mmap_ops = { 1208 .open = msc_mmap_open, 1209 .close = msc_mmap_close, 1210 .fault = msc_mmap_fault, 1211 }; 1212 1213 static int intel_th_msc_mmap(struct file *file, struct vm_area_struct *vma) 1214 { 1215 unsigned long size = vma->vm_end - vma->vm_start; 1216 struct msc_iter *iter = vma->vm_file->private_data; 1217 struct msc *msc = iter->msc; 1218 int ret = -EINVAL; 1219 1220 if (!size || offset_in_page(size)) 1221 return -EINVAL; 1222 1223 if (vma->vm_pgoff) 1224 return -EINVAL; 1225 1226 /* grab user_count once per mmap; drop in msc_mmap_close() */ 1227 if (!atomic_inc_unless_negative(&msc->user_count)) 1228 return -EINVAL; 1229 1230 if (msc->mode != MSC_MODE_SINGLE && 1231 msc->mode != MSC_MODE_MULTI) 1232 goto out; 1233 1234 if (size >> PAGE_SHIFT != msc->nr_pages) 1235 goto out; 1236 1237 atomic_set(&msc->mmap_count, 1); 1238 ret = 0; 1239 1240 out: 1241 if (ret) 1242 atomic_dec(&msc->user_count); 1243 1244 vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); 1245 vma->vm_flags |= VM_DONTEXPAND | VM_DONTCOPY; 1246 vma->vm_ops = &msc_mmap_ops; 1247 return ret; 1248 } 1249 1250 static const struct file_operations intel_th_msc_fops = { 1251 .open = intel_th_msc_open, 1252 .release = intel_th_msc_release, 1253 .read = intel_th_msc_read, 1254 .mmap = intel_th_msc_mmap, 1255 .llseek = no_llseek, 1256 .owner = THIS_MODULE, 1257 }; 1258 1259 static int intel_th_msc_init(struct msc *msc) 1260 { 1261 atomic_set(&msc->user_count, -1); 1262 1263 msc->mode = MSC_MODE_MULTI; 1264 mutex_init(&msc->buf_mutex); 1265 INIT_LIST_HEAD(&msc->win_list); 1266 INIT_LIST_HEAD(&msc->iter_list); 1267 1268 msc->burst_len = 1269 (ioread32(msc->reg_base + REG_MSU_MSC0CTL) & MSC_LEN) >> 1270 __ffs(MSC_LEN); 1271 1272 return 0; 1273 } 1274 1275 static const char * const msc_mode[] = { 1276 [MSC_MODE_SINGLE] = "single", 1277 [MSC_MODE_MULTI] = "multi", 1278 [MSC_MODE_EXI] = "ExI", 1279 [MSC_MODE_DEBUG] = "debug", 1280 }; 1281 1282 static ssize_t 1283 wrap_show(struct device *dev, struct device_attribute *attr, char *buf) 1284 { 1285 struct msc *msc = dev_get_drvdata(dev); 1286 1287 return scnprintf(buf, PAGE_SIZE, "%d\n", msc->wrap); 1288 } 1289 1290 static ssize_t 1291 wrap_store(struct device *dev, struct device_attribute *attr, const char *buf, 1292 size_t size) 1293 { 1294 struct msc *msc = dev_get_drvdata(dev); 1295 unsigned long val; 1296 int ret; 1297 1298 ret = kstrtoul(buf, 10, &val); 1299 if (ret) 1300 return ret; 1301 1302 msc->wrap = !!val; 1303 1304 return size; 1305 } 1306 1307 static DEVICE_ATTR_RW(wrap); 1308 1309 static ssize_t 1310 mode_show(struct device *dev, struct device_attribute *attr, char *buf) 1311 { 1312 struct msc *msc = dev_get_drvdata(dev); 1313 1314 return scnprintf(buf, PAGE_SIZE, "%s\n", msc_mode[msc->mode]); 1315 } 1316 1317 static ssize_t 1318 mode_store(struct device *dev, struct device_attribute *attr, const char *buf, 1319 size_t size) 1320 { 1321 struct msc *msc = dev_get_drvdata(dev); 1322 size_t len = size; 1323 char *cp; 1324 int i, ret; 1325 1326 if (!capable(CAP_SYS_RAWIO)) 1327 return -EPERM; 1328 1329 cp = memchr(buf, '\n', len); 1330 if (cp) 1331 len = cp - buf; 1332 1333 for (i = 0; i < ARRAY_SIZE(msc_mode); i++) 1334 if (!strncmp(msc_mode[i], buf, len)) 1335 goto found; 1336 1337 return -EINVAL; 1338 1339 found: 1340 mutex_lock(&msc->buf_mutex); 1341 ret = msc_buffer_unlocked_free_unless_used(msc); 1342 if (!ret) 1343 msc->mode = i; 1344 mutex_unlock(&msc->buf_mutex); 1345 1346 return ret ? ret : size; 1347 } 1348 1349 static DEVICE_ATTR_RW(mode); 1350 1351 static ssize_t 1352 nr_pages_show(struct device *dev, struct device_attribute *attr, char *buf) 1353 { 1354 struct msc *msc = dev_get_drvdata(dev); 1355 struct msc_window *win; 1356 size_t count = 0; 1357 1358 mutex_lock(&msc->buf_mutex); 1359 1360 if (msc->mode == MSC_MODE_SINGLE) 1361 count = scnprintf(buf, PAGE_SIZE, "%ld\n", msc->nr_pages); 1362 else if (msc->mode == MSC_MODE_MULTI) { 1363 list_for_each_entry(win, &msc->win_list, entry) { 1364 count += scnprintf(buf + count, PAGE_SIZE - count, 1365 "%d%c", win->nr_blocks, 1366 msc_is_last_win(win) ? '\n' : ','); 1367 } 1368 } else { 1369 count = scnprintf(buf, PAGE_SIZE, "unsupported\n"); 1370 } 1371 1372 mutex_unlock(&msc->buf_mutex); 1373 1374 return count; 1375 } 1376 1377 static ssize_t 1378 nr_pages_store(struct device *dev, struct device_attribute *attr, 1379 const char *buf, size_t size) 1380 { 1381 struct msc *msc = dev_get_drvdata(dev); 1382 unsigned long val, *win = NULL, *rewin; 1383 size_t len = size; 1384 const char *p = buf; 1385 char *end, *s; 1386 int ret, nr_wins = 0; 1387 1388 if (!capable(CAP_SYS_RAWIO)) 1389 return -EPERM; 1390 1391 ret = msc_buffer_free_unless_used(msc); 1392 if (ret) 1393 return ret; 1394 1395 /* scan the comma-separated list of allocation sizes */ 1396 end = memchr(buf, '\n', len); 1397 if (end) 1398 len = end - buf; 1399 1400 do { 1401 end = memchr(p, ',', len); 1402 s = kstrndup(p, end ? end - p : len, GFP_KERNEL); 1403 if (!s) { 1404 ret = -ENOMEM; 1405 goto free_win; 1406 } 1407 1408 ret = kstrtoul(s, 10, &val); 1409 kfree(s); 1410 1411 if (ret || !val) 1412 goto free_win; 1413 1414 if (nr_wins && msc->mode == MSC_MODE_SINGLE) { 1415 ret = -EINVAL; 1416 goto free_win; 1417 } 1418 1419 nr_wins++; 1420 rewin = krealloc(win, sizeof(*win) * nr_wins, GFP_KERNEL); 1421 if (!rewin) { 1422 kfree(win); 1423 return -ENOMEM; 1424 } 1425 1426 win = rewin; 1427 win[nr_wins - 1] = val; 1428 1429 if (!end) 1430 break; 1431 1432 len -= end - p; 1433 p = end + 1; 1434 } while (len); 1435 1436 mutex_lock(&msc->buf_mutex); 1437 ret = msc_buffer_alloc(msc, win, nr_wins); 1438 mutex_unlock(&msc->buf_mutex); 1439 1440 free_win: 1441 kfree(win); 1442 1443 return ret ? ret : size; 1444 } 1445 1446 static DEVICE_ATTR_RW(nr_pages); 1447 1448 static struct attribute *msc_output_attrs[] = { 1449 &dev_attr_wrap.attr, 1450 &dev_attr_mode.attr, 1451 &dev_attr_nr_pages.attr, 1452 NULL, 1453 }; 1454 1455 static struct attribute_group msc_output_group = { 1456 .attrs = msc_output_attrs, 1457 }; 1458 1459 static int intel_th_msc_probe(struct intel_th_device *thdev) 1460 { 1461 struct device *dev = &thdev->dev; 1462 struct resource *res; 1463 struct msc *msc; 1464 void __iomem *base; 1465 int err; 1466 1467 res = intel_th_device_get_resource(thdev, IORESOURCE_MEM, 0); 1468 if (!res) 1469 return -ENODEV; 1470 1471 base = devm_ioremap(dev, res->start, resource_size(res)); 1472 if (!base) 1473 return -ENOMEM; 1474 1475 msc = devm_kzalloc(dev, sizeof(*msc), GFP_KERNEL); 1476 if (!msc) 1477 return -ENOMEM; 1478 1479 msc->index = thdev->id; 1480 1481 msc->thdev = thdev; 1482 msc->reg_base = base + msc->index * 0x100; 1483 1484 err = intel_th_msc_init(msc); 1485 if (err) 1486 return err; 1487 1488 dev_set_drvdata(dev, msc); 1489 1490 return 0; 1491 } 1492 1493 static void intel_th_msc_remove(struct intel_th_device *thdev) 1494 { 1495 struct msc *msc = dev_get_drvdata(&thdev->dev); 1496 int ret; 1497 1498 intel_th_msc_deactivate(thdev); 1499 1500 /* 1501 * Buffers should not be used at this point except if the 1502 * output character device is still open and the parent 1503 * device gets detached from its bus, which is a FIXME. 1504 */ 1505 ret = msc_buffer_free_unless_used(msc); 1506 WARN_ON_ONCE(ret); 1507 } 1508 1509 static struct intel_th_driver intel_th_msc_driver = { 1510 .probe = intel_th_msc_probe, 1511 .remove = intel_th_msc_remove, 1512 .activate = intel_th_msc_activate, 1513 .deactivate = intel_th_msc_deactivate, 1514 .fops = &intel_th_msc_fops, 1515 .attr_group = &msc_output_group, 1516 .driver = { 1517 .name = "msc", 1518 .owner = THIS_MODULE, 1519 }, 1520 }; 1521 1522 module_driver(intel_th_msc_driver, 1523 intel_th_driver_register, 1524 intel_th_driver_unregister); 1525 1526 MODULE_LICENSE("GPL v2"); 1527 MODULE_DESCRIPTION("Intel(R) Trace Hub Memory Storage Unit driver"); 1528 MODULE_AUTHOR("Alexander Shishkin <alexander.shishkin@linux.intel.com>"); 1529