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