1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 * VGIC MMIO handling functions
4 */
5
6#include <linux/bitops.h>
7#include <linux/bsearch.h>
8#include <linux/interrupt.h>
9#include <linux/irq.h>
10#include <linux/kvm.h>
11#include <linux/kvm_host.h>
12#include <kvm/iodev.h>
13#include <kvm/arm_arch_timer.h>
14#include <kvm/arm_vgic.h>
15
16#include "vgic.h"
17#include "vgic-mmio.h"
18
19unsigned long vgic_mmio_read_raz(struct kvm_vcpu *vcpu,
20				 gpa_t addr, unsigned int len)
21{
22	return 0;
23}
24
25unsigned long vgic_mmio_read_rao(struct kvm_vcpu *vcpu,
26				 gpa_t addr, unsigned int len)
27{
28	return -1UL;
29}
30
31void vgic_mmio_write_wi(struct kvm_vcpu *vcpu, gpa_t addr,
32			unsigned int len, unsigned long val)
33{
34	/* Ignore */
35}
36
37int vgic_mmio_uaccess_write_wi(struct kvm_vcpu *vcpu, gpa_t addr,
38			       unsigned int len, unsigned long val)
39{
40	/* Ignore */
41	return 0;
42}
43
44unsigned long vgic_mmio_read_group(struct kvm_vcpu *vcpu,
45				   gpa_t addr, unsigned int len)
46{
47	u32 intid = VGIC_ADDR_TO_INTID(addr, 1);
48	u32 value = 0;
49	int i;
50
51	/* Loop over all IRQs affected by this read */
52	for (i = 0; i < len * 8; i++) {
53		struct vgic_irq *irq = vgic_get_irq(vcpu->kvm, vcpu, intid + i);
54
55		if (irq->group)
56			value |= BIT(i);
57
58		vgic_put_irq(vcpu->kvm, irq);
59	}
60
61	return value;
62}
63
64static void vgic_update_vsgi(struct vgic_irq *irq)
65{
66	WARN_ON(its_prop_update_vsgi(irq->host_irq, irq->priority, irq->group));
67}
68
69void vgic_mmio_write_group(struct kvm_vcpu *vcpu, gpa_t addr,
70			   unsigned int len, unsigned long val)
71{
72	u32 intid = VGIC_ADDR_TO_INTID(addr, 1);
73	int i;
74	unsigned long flags;
75
76	for (i = 0; i < len * 8; i++) {
77		struct vgic_irq *irq = vgic_get_irq(vcpu->kvm, vcpu, intid + i);
78
79		raw_spin_lock_irqsave(&irq->irq_lock, flags);
80		irq->group = !!(val & BIT(i));
81		if (irq->hw && vgic_irq_is_sgi(irq->intid)) {
82			vgic_update_vsgi(irq);
83			raw_spin_unlock_irqrestore(&irq->irq_lock, flags);
84		} else {
85			vgic_queue_irq_unlock(vcpu->kvm, irq, flags);
86		}
87
88		vgic_put_irq(vcpu->kvm, irq);
89	}
90}
91
92/*
93 * Read accesses to both GICD_ICENABLER and GICD_ISENABLER return the value
94 * of the enabled bit, so there is only one function for both here.
95 */
96unsigned long vgic_mmio_read_enable(struct kvm_vcpu *vcpu,
97				    gpa_t addr, unsigned int len)
98{
99	u32 intid = VGIC_ADDR_TO_INTID(addr, 1);
100	u32 value = 0;
101	int i;
102
103	/* Loop over all IRQs affected by this read */
104	for (i = 0; i < len * 8; i++) {
105		struct vgic_irq *irq = vgic_get_irq(vcpu->kvm, vcpu, intid + i);
106
107		if (irq->enabled)
108			value |= (1U << i);
109
110		vgic_put_irq(vcpu->kvm, irq);
111	}
112
113	return value;
114}
115
116void vgic_mmio_write_senable(struct kvm_vcpu *vcpu,
117			     gpa_t addr, unsigned int len,
118			     unsigned long val)
119{
120	u32 intid = VGIC_ADDR_TO_INTID(addr, 1);
121	int i;
122	unsigned long flags;
123
124	for_each_set_bit(i, &val, len * 8) {
125		struct vgic_irq *irq = vgic_get_irq(vcpu->kvm, vcpu, intid + i);
126
127		raw_spin_lock_irqsave(&irq->irq_lock, flags);
128		if (irq->hw && vgic_irq_is_sgi(irq->intid)) {
129			if (!irq->enabled) {
130				struct irq_data *data;
131
132				irq->enabled = true;
133				data = &irq_to_desc(irq->host_irq)->irq_data;
134				while (irqd_irq_disabled(data))
135					enable_irq(irq->host_irq);
136			}
137
138			raw_spin_unlock_irqrestore(&irq->irq_lock, flags);
139			vgic_put_irq(vcpu->kvm, irq);
140
141			continue;
142		} else if (vgic_irq_is_mapped_level(irq)) {
143			bool was_high = irq->line_level;
144
145			/*
146			 * We need to update the state of the interrupt because
147			 * the guest might have changed the state of the device
148			 * while the interrupt was disabled at the VGIC level.
149			 */
150			irq->line_level = vgic_get_phys_line_level(irq);
151			/*
152			 * Deactivate the physical interrupt so the GIC will let
153			 * us know when it is asserted again.
154			 */
155			if (!irq->active && was_high && !irq->line_level)
156				vgic_irq_set_phys_active(irq, false);
157		}
158		irq->enabled = true;
159		vgic_queue_irq_unlock(vcpu->kvm, irq, flags);
160
161		vgic_put_irq(vcpu->kvm, irq);
162	}
163}
164
165void vgic_mmio_write_cenable(struct kvm_vcpu *vcpu,
166			     gpa_t addr, unsigned int len,
167			     unsigned long val)
168{
169	u32 intid = VGIC_ADDR_TO_INTID(addr, 1);
170	int i;
171	unsigned long flags;
172
173	for_each_set_bit(i, &val, len * 8) {
174		struct vgic_irq *irq = vgic_get_irq(vcpu->kvm, vcpu, intid + i);
175
176		raw_spin_lock_irqsave(&irq->irq_lock, flags);
177		if (irq->hw && vgic_irq_is_sgi(irq->intid) && irq->enabled)
178			disable_irq_nosync(irq->host_irq);
179
180		irq->enabled = false;
181
182		raw_spin_unlock_irqrestore(&irq->irq_lock, flags);
183		vgic_put_irq(vcpu->kvm, irq);
184	}
185}
186
187int vgic_uaccess_write_senable(struct kvm_vcpu *vcpu,
188			       gpa_t addr, unsigned int len,
189			       unsigned long val)
190{
191	u32 intid = VGIC_ADDR_TO_INTID(addr, 1);
192	int i;
193	unsigned long flags;
194
195	for_each_set_bit(i, &val, len * 8) {
196		struct vgic_irq *irq = vgic_get_irq(vcpu->kvm, vcpu, intid + i);
197
198		raw_spin_lock_irqsave(&irq->irq_lock, flags);
199		irq->enabled = true;
200		vgic_queue_irq_unlock(vcpu->kvm, irq, flags);
201
202		vgic_put_irq(vcpu->kvm, irq);
203	}
204
205	return 0;
206}
207
208int vgic_uaccess_write_cenable(struct kvm_vcpu *vcpu,
209			       gpa_t addr, unsigned int len,
210			       unsigned long val)
211{
212	u32 intid = VGIC_ADDR_TO_INTID(addr, 1);
213	int i;
214	unsigned long flags;
215
216	for_each_set_bit(i, &val, len * 8) {
217		struct vgic_irq *irq = vgic_get_irq(vcpu->kvm, vcpu, intid + i);
218
219		raw_spin_lock_irqsave(&irq->irq_lock, flags);
220		irq->enabled = false;
221		raw_spin_unlock_irqrestore(&irq->irq_lock, flags);
222
223		vgic_put_irq(vcpu->kvm, irq);
224	}
225
226	return 0;
227}
228
229static unsigned long __read_pending(struct kvm_vcpu *vcpu,
230				    gpa_t addr, unsigned int len,
231				    bool is_user)
232{
233	u32 intid = VGIC_ADDR_TO_INTID(addr, 1);
234	u32 value = 0;
235	int i;
236
237	/* Loop over all IRQs affected by this read */
238	for (i = 0; i < len * 8; i++) {
239		struct vgic_irq *irq = vgic_get_irq(vcpu->kvm, vcpu, intid + i);
240		unsigned long flags;
241		bool val;
242
243		/*
244		 * When used from userspace with a GICv3 model:
245		 *
246		 * Pending state of interrupt is latched in pending_latch
247		 * variable.  Userspace will save and restore pending state
248		 * and line_level separately.
249		 * Refer to Documentation/virt/kvm/devices/arm-vgic-v3.rst
250		 * for handling of ISPENDR and ICPENDR.
251		 */
252		raw_spin_lock_irqsave(&irq->irq_lock, flags);
253		if (irq->hw && vgic_irq_is_sgi(irq->intid)) {
254			int err;
255
256			val = false;
257			err = irq_get_irqchip_state(irq->host_irq,
258						    IRQCHIP_STATE_PENDING,
259						    &val);
260			WARN_RATELIMIT(err, "IRQ %d", irq->host_irq);
261		} else if (!is_user && vgic_irq_is_mapped_level(irq)) {
262			val = vgic_get_phys_line_level(irq);
263		} else {
264			switch (vcpu->kvm->arch.vgic.vgic_model) {
265			case KVM_DEV_TYPE_ARM_VGIC_V3:
266				if (is_user) {
267					val = irq->pending_latch;
268					break;
269				}
270				fallthrough;
271			default:
272				val = irq_is_pending(irq);
273				break;
274			}
275		}
276
277		value |= ((u32)val << i);
278		raw_spin_unlock_irqrestore(&irq->irq_lock, flags);
279
280		vgic_put_irq(vcpu->kvm, irq);
281	}
282
283	return value;
284}
285
286unsigned long vgic_mmio_read_pending(struct kvm_vcpu *vcpu,
287				     gpa_t addr, unsigned int len)
288{
289	return __read_pending(vcpu, addr, len, false);
290}
291
292unsigned long vgic_uaccess_read_pending(struct kvm_vcpu *vcpu,
293					gpa_t addr, unsigned int len)
294{
295	return __read_pending(vcpu, addr, len, true);
296}
297
298static bool is_vgic_v2_sgi(struct kvm_vcpu *vcpu, struct vgic_irq *irq)
299{
300	return (vgic_irq_is_sgi(irq->intid) &&
301		vcpu->kvm->arch.vgic.vgic_model == KVM_DEV_TYPE_ARM_VGIC_V2);
302}
303
304static void __set_pending(struct kvm_vcpu *vcpu, gpa_t addr, unsigned int len,
305			  unsigned long val, bool is_user)
306{
307	u32 intid = VGIC_ADDR_TO_INTID(addr, 1);
308	int i;
309	unsigned long flags;
310
311	for_each_set_bit(i, &val, len * 8) {
312		struct vgic_irq *irq = vgic_get_irq(vcpu->kvm, vcpu, intid + i);
313
314		/* GICD_ISPENDR0 SGI bits are WI when written from the guest. */
315		if (is_vgic_v2_sgi(vcpu, irq) && !is_user) {
316			vgic_put_irq(vcpu->kvm, irq);
317			continue;
318		}
319
320		raw_spin_lock_irqsave(&irq->irq_lock, flags);
321
322		/*
323		 * GICv2 SGIs are terribly broken. We can't restore
324		 * the source of the interrupt, so just pick the vcpu
325		 * itself as the source...
326		 */
327		if (is_vgic_v2_sgi(vcpu, irq))
328			irq->source |= BIT(vcpu->vcpu_id);
329
330		if (irq->hw && vgic_irq_is_sgi(irq->intid)) {
331			/* HW SGI? Ask the GIC to inject it */
332			int err;
333			err = irq_set_irqchip_state(irq->host_irq,
334						    IRQCHIP_STATE_PENDING,
335						    true);
336			WARN_RATELIMIT(err, "IRQ %d", irq->host_irq);
337
338			raw_spin_unlock_irqrestore(&irq->irq_lock, flags);
339			vgic_put_irq(vcpu->kvm, irq);
340
341			continue;
342		}
343
344		irq->pending_latch = true;
345		if (irq->hw && !is_user)
346			vgic_irq_set_phys_active(irq, true);
347
348		vgic_queue_irq_unlock(vcpu->kvm, irq, flags);
349		vgic_put_irq(vcpu->kvm, irq);
350	}
351}
352
353void vgic_mmio_write_spending(struct kvm_vcpu *vcpu,
354			      gpa_t addr, unsigned int len,
355			      unsigned long val)
356{
357	__set_pending(vcpu, addr, len, val, false);
358}
359
360int vgic_uaccess_write_spending(struct kvm_vcpu *vcpu,
361				gpa_t addr, unsigned int len,
362				unsigned long val)
363{
364	__set_pending(vcpu, addr, len, val, true);
365	return 0;
366}
367
368/* Must be called with irq->irq_lock held */
369static void vgic_hw_irq_cpending(struct kvm_vcpu *vcpu, struct vgic_irq *irq)
370{
371	irq->pending_latch = false;
372
373	/*
374	 * We don't want the guest to effectively mask the physical
375	 * interrupt by doing a write to SPENDR followed by a write to
376	 * CPENDR for HW interrupts, so we clear the active state on
377	 * the physical side if the virtual interrupt is not active.
378	 * This may lead to taking an additional interrupt on the
379	 * host, but that should not be a problem as the worst that
380	 * can happen is an additional vgic injection.  We also clear
381	 * the pending state to maintain proper semantics for edge HW
382	 * interrupts.
383	 */
384	vgic_irq_set_phys_pending(irq, false);
385	if (!irq->active)
386		vgic_irq_set_phys_active(irq, false);
387}
388
389static void __clear_pending(struct kvm_vcpu *vcpu,
390			    gpa_t addr, unsigned int len,
391			    unsigned long val, bool is_user)
392{
393	u32 intid = VGIC_ADDR_TO_INTID(addr, 1);
394	int i;
395	unsigned long flags;
396
397	for_each_set_bit(i, &val, len * 8) {
398		struct vgic_irq *irq = vgic_get_irq(vcpu->kvm, vcpu, intid + i);
399
400		/* GICD_ICPENDR0 SGI bits are WI when written from the guest. */
401		if (is_vgic_v2_sgi(vcpu, irq) && !is_user) {
402			vgic_put_irq(vcpu->kvm, irq);
403			continue;
404		}
405
406		raw_spin_lock_irqsave(&irq->irq_lock, flags);
407
408		/*
409		 * More fun with GICv2 SGIs! If we're clearing one of them
410		 * from userspace, which source vcpu to clear? Let's not
411		 * even think of it, and blow the whole set.
412		 */
413		if (is_vgic_v2_sgi(vcpu, irq))
414			irq->source = 0;
415
416		if (irq->hw && vgic_irq_is_sgi(irq->intid)) {
417			/* HW SGI? Ask the GIC to clear its pending bit */
418			int err;
419			err = irq_set_irqchip_state(irq->host_irq,
420						    IRQCHIP_STATE_PENDING,
421						    false);
422			WARN_RATELIMIT(err, "IRQ %d", irq->host_irq);
423
424			raw_spin_unlock_irqrestore(&irq->irq_lock, flags);
425			vgic_put_irq(vcpu->kvm, irq);
426
427			continue;
428		}
429
430		if (irq->hw && !is_user)
431			vgic_hw_irq_cpending(vcpu, irq);
432		else
433			irq->pending_latch = false;
434
435		raw_spin_unlock_irqrestore(&irq->irq_lock, flags);
436		vgic_put_irq(vcpu->kvm, irq);
437	}
438}
439
440void vgic_mmio_write_cpending(struct kvm_vcpu *vcpu,
441			      gpa_t addr, unsigned int len,
442			      unsigned long val)
443{
444	__clear_pending(vcpu, addr, len, val, false);
445}
446
447int vgic_uaccess_write_cpending(struct kvm_vcpu *vcpu,
448				gpa_t addr, unsigned int len,
449				unsigned long val)
450{
451	__clear_pending(vcpu, addr, len, val, true);
452	return 0;
453}
454
455/*
456 * If we are fiddling with an IRQ's active state, we have to make sure the IRQ
457 * is not queued on some running VCPU's LRs, because then the change to the
458 * active state can be overwritten when the VCPU's state is synced coming back
459 * from the guest.
460 *
461 * For shared interrupts as well as GICv3 private interrupts accessed from the
462 * non-owning CPU, we have to stop all the VCPUs because interrupts can be
463 * migrated while we don't hold the IRQ locks and we don't want to be chasing
464 * moving targets.
465 *
466 * For GICv2 private interrupts we don't have to do anything because
467 * userspace accesses to the VGIC state already require all VCPUs to be
468 * stopped, and only the VCPU itself can modify its private interrupts
469 * active state, which guarantees that the VCPU is not running.
470 */
471static void vgic_access_active_prepare(struct kvm_vcpu *vcpu, u32 intid)
472{
473	if ((vcpu->kvm->arch.vgic.vgic_model == KVM_DEV_TYPE_ARM_VGIC_V3 &&
474	     vcpu != kvm_get_running_vcpu()) ||
475	    intid >= VGIC_NR_PRIVATE_IRQS)
476		kvm_arm_halt_guest(vcpu->kvm);
477}
478
479/* See vgic_access_active_prepare */
480static void vgic_access_active_finish(struct kvm_vcpu *vcpu, u32 intid)
481{
482	if ((vcpu->kvm->arch.vgic.vgic_model == KVM_DEV_TYPE_ARM_VGIC_V3 &&
483	     vcpu != kvm_get_running_vcpu()) ||
484	    intid >= VGIC_NR_PRIVATE_IRQS)
485		kvm_arm_resume_guest(vcpu->kvm);
486}
487
488static unsigned long __vgic_mmio_read_active(struct kvm_vcpu *vcpu,
489					     gpa_t addr, unsigned int len)
490{
491	u32 intid = VGIC_ADDR_TO_INTID(addr, 1);
492	u32 value = 0;
493	int i;
494
495	/* Loop over all IRQs affected by this read */
496	for (i = 0; i < len * 8; i++) {
497		struct vgic_irq *irq = vgic_get_irq(vcpu->kvm, vcpu, intid + i);
498
499		/*
500		 * Even for HW interrupts, don't evaluate the HW state as
501		 * all the guest is interested in is the virtual state.
502		 */
503		if (irq->active)
504			value |= (1U << i);
505
506		vgic_put_irq(vcpu->kvm, irq);
507	}
508
509	return value;
510}
511
512unsigned long vgic_mmio_read_active(struct kvm_vcpu *vcpu,
513				    gpa_t addr, unsigned int len)
514{
515	u32 intid = VGIC_ADDR_TO_INTID(addr, 1);
516	u32 val;
517
518	mutex_lock(&vcpu->kvm->arch.config_lock);
519	vgic_access_active_prepare(vcpu, intid);
520
521	val = __vgic_mmio_read_active(vcpu, addr, len);
522
523	vgic_access_active_finish(vcpu, intid);
524	mutex_unlock(&vcpu->kvm->arch.config_lock);
525
526	return val;
527}
528
529unsigned long vgic_uaccess_read_active(struct kvm_vcpu *vcpu,
530				    gpa_t addr, unsigned int len)
531{
532	return __vgic_mmio_read_active(vcpu, addr, len);
533}
534
535/* Must be called with irq->irq_lock held */
536static void vgic_hw_irq_change_active(struct kvm_vcpu *vcpu, struct vgic_irq *irq,
537				      bool active, bool is_uaccess)
538{
539	if (is_uaccess)
540		return;
541
542	irq->active = active;
543	vgic_irq_set_phys_active(irq, active);
544}
545
546static void vgic_mmio_change_active(struct kvm_vcpu *vcpu, struct vgic_irq *irq,
547				    bool active)
548{
549	unsigned long flags;
550	struct kvm_vcpu *requester_vcpu = kvm_get_running_vcpu();
551
552	raw_spin_lock_irqsave(&irq->irq_lock, flags);
553
554	if (irq->hw && !vgic_irq_is_sgi(irq->intid)) {
555		vgic_hw_irq_change_active(vcpu, irq, active, !requester_vcpu);
556	} else if (irq->hw && vgic_irq_is_sgi(irq->intid)) {
557		/*
558		 * GICv4.1 VSGI feature doesn't track an active state,
559		 * so let's not kid ourselves, there is nothing we can
560		 * do here.
561		 */
562		irq->active = false;
563	} else {
564		u32 model = vcpu->kvm->arch.vgic.vgic_model;
565		u8 active_source;
566
567		irq->active = active;
568
569		/*
570		 * The GICv2 architecture indicates that the source CPUID for
571		 * an SGI should be provided during an EOI which implies that
572		 * the active state is stored somewhere, but at the same time
573		 * this state is not architecturally exposed anywhere and we
574		 * have no way of knowing the right source.
575		 *
576		 * This may lead to a VCPU not being able to receive
577		 * additional instances of a particular SGI after migration
578		 * for a GICv2 VM on some GIC implementations.  Oh well.
579		 */
580		active_source = (requester_vcpu) ? requester_vcpu->vcpu_id : 0;
581
582		if (model == KVM_DEV_TYPE_ARM_VGIC_V2 &&
583		    active && vgic_irq_is_sgi(irq->intid))
584			irq->active_source = active_source;
585	}
586
587	if (irq->active)
588		vgic_queue_irq_unlock(vcpu->kvm, irq, flags);
589	else
590		raw_spin_unlock_irqrestore(&irq->irq_lock, flags);
591}
592
593static void __vgic_mmio_write_cactive(struct kvm_vcpu *vcpu,
594				      gpa_t addr, unsigned int len,
595				      unsigned long val)
596{
597	u32 intid = VGIC_ADDR_TO_INTID(addr, 1);
598	int i;
599
600	for_each_set_bit(i, &val, len * 8) {
601		struct vgic_irq *irq = vgic_get_irq(vcpu->kvm, vcpu, intid + i);
602		vgic_mmio_change_active(vcpu, irq, false);
603		vgic_put_irq(vcpu->kvm, irq);
604	}
605}
606
607void vgic_mmio_write_cactive(struct kvm_vcpu *vcpu,
608			     gpa_t addr, unsigned int len,
609			     unsigned long val)
610{
611	u32 intid = VGIC_ADDR_TO_INTID(addr, 1);
612
613	mutex_lock(&vcpu->kvm->arch.config_lock);
614	vgic_access_active_prepare(vcpu, intid);
615
616	__vgic_mmio_write_cactive(vcpu, addr, len, val);
617
618	vgic_access_active_finish(vcpu, intid);
619	mutex_unlock(&vcpu->kvm->arch.config_lock);
620}
621
622int vgic_mmio_uaccess_write_cactive(struct kvm_vcpu *vcpu,
623				     gpa_t addr, unsigned int len,
624				     unsigned long val)
625{
626	__vgic_mmio_write_cactive(vcpu, addr, len, val);
627	return 0;
628}
629
630static void __vgic_mmio_write_sactive(struct kvm_vcpu *vcpu,
631				      gpa_t addr, unsigned int len,
632				      unsigned long val)
633{
634	u32 intid = VGIC_ADDR_TO_INTID(addr, 1);
635	int i;
636
637	for_each_set_bit(i, &val, len * 8) {
638		struct vgic_irq *irq = vgic_get_irq(vcpu->kvm, vcpu, intid + i);
639		vgic_mmio_change_active(vcpu, irq, true);
640		vgic_put_irq(vcpu->kvm, irq);
641	}
642}
643
644void vgic_mmio_write_sactive(struct kvm_vcpu *vcpu,
645			     gpa_t addr, unsigned int len,
646			     unsigned long val)
647{
648	u32 intid = VGIC_ADDR_TO_INTID(addr, 1);
649
650	mutex_lock(&vcpu->kvm->arch.config_lock);
651	vgic_access_active_prepare(vcpu, intid);
652
653	__vgic_mmio_write_sactive(vcpu, addr, len, val);
654
655	vgic_access_active_finish(vcpu, intid);
656	mutex_unlock(&vcpu->kvm->arch.config_lock);
657}
658
659int vgic_mmio_uaccess_write_sactive(struct kvm_vcpu *vcpu,
660				     gpa_t addr, unsigned int len,
661				     unsigned long val)
662{
663	__vgic_mmio_write_sactive(vcpu, addr, len, val);
664	return 0;
665}
666
667unsigned long vgic_mmio_read_priority(struct kvm_vcpu *vcpu,
668				      gpa_t addr, unsigned int len)
669{
670	u32 intid = VGIC_ADDR_TO_INTID(addr, 8);
671	int i;
672	u64 val = 0;
673
674	for (i = 0; i < len; i++) {
675		struct vgic_irq *irq = vgic_get_irq(vcpu->kvm, vcpu, intid + i);
676
677		val |= (u64)irq->priority << (i * 8);
678
679		vgic_put_irq(vcpu->kvm, irq);
680	}
681
682	return val;
683}
684
685/*
686 * We currently don't handle changing the priority of an interrupt that
687 * is already pending on a VCPU. If there is a need for this, we would
688 * need to make this VCPU exit and re-evaluate the priorities, potentially
689 * leading to this interrupt getting presented now to the guest (if it has
690 * been masked by the priority mask before).
691 */
692void vgic_mmio_write_priority(struct kvm_vcpu *vcpu,
693			      gpa_t addr, unsigned int len,
694			      unsigned long val)
695{
696	u32 intid = VGIC_ADDR_TO_INTID(addr, 8);
697	int i;
698	unsigned long flags;
699
700	for (i = 0; i < len; i++) {
701		struct vgic_irq *irq = vgic_get_irq(vcpu->kvm, vcpu, intid + i);
702
703		raw_spin_lock_irqsave(&irq->irq_lock, flags);
704		/* Narrow the priority range to what we actually support */
705		irq->priority = (val >> (i * 8)) & GENMASK(7, 8 - VGIC_PRI_BITS);
706		if (irq->hw && vgic_irq_is_sgi(irq->intid))
707			vgic_update_vsgi(irq);
708		raw_spin_unlock_irqrestore(&irq->irq_lock, flags);
709
710		vgic_put_irq(vcpu->kvm, irq);
711	}
712}
713
714unsigned long vgic_mmio_read_config(struct kvm_vcpu *vcpu,
715				    gpa_t addr, unsigned int len)
716{
717	u32 intid = VGIC_ADDR_TO_INTID(addr, 2);
718	u32 value = 0;
719	int i;
720
721	for (i = 0; i < len * 4; i++) {
722		struct vgic_irq *irq = vgic_get_irq(vcpu->kvm, vcpu, intid + i);
723
724		if (irq->config == VGIC_CONFIG_EDGE)
725			value |= (2U << (i * 2));
726
727		vgic_put_irq(vcpu->kvm, irq);
728	}
729
730	return value;
731}
732
733void vgic_mmio_write_config(struct kvm_vcpu *vcpu,
734			    gpa_t addr, unsigned int len,
735			    unsigned long val)
736{
737	u32 intid = VGIC_ADDR_TO_INTID(addr, 2);
738	int i;
739	unsigned long flags;
740
741	for (i = 0; i < len * 4; i++) {
742		struct vgic_irq *irq;
743
744		/*
745		 * The configuration cannot be changed for SGIs in general,
746		 * for PPIs this is IMPLEMENTATION DEFINED. The arch timer
747		 * code relies on PPIs being level triggered, so we also
748		 * make them read-only here.
749		 */
750		if (intid + i < VGIC_NR_PRIVATE_IRQS)
751			continue;
752
753		irq = vgic_get_irq(vcpu->kvm, vcpu, intid + i);
754		raw_spin_lock_irqsave(&irq->irq_lock, flags);
755
756		if (test_bit(i * 2 + 1, &val))
757			irq->config = VGIC_CONFIG_EDGE;
758		else
759			irq->config = VGIC_CONFIG_LEVEL;
760
761		raw_spin_unlock_irqrestore(&irq->irq_lock, flags);
762		vgic_put_irq(vcpu->kvm, irq);
763	}
764}
765
766u32 vgic_read_irq_line_level_info(struct kvm_vcpu *vcpu, u32 intid)
767{
768	int i;
769	u32 val = 0;
770	int nr_irqs = vcpu->kvm->arch.vgic.nr_spis + VGIC_NR_PRIVATE_IRQS;
771
772	for (i = 0; i < 32; i++) {
773		struct vgic_irq *irq;
774
775		if ((intid + i) < VGIC_NR_SGIS || (intid + i) >= nr_irqs)
776			continue;
777
778		irq = vgic_get_irq(vcpu->kvm, vcpu, intid + i);
779		if (irq->config == VGIC_CONFIG_LEVEL && irq->line_level)
780			val |= (1U << i);
781
782		vgic_put_irq(vcpu->kvm, irq);
783	}
784
785	return val;
786}
787
788void vgic_write_irq_line_level_info(struct kvm_vcpu *vcpu, u32 intid,
789				    const u32 val)
790{
791	int i;
792	int nr_irqs = vcpu->kvm->arch.vgic.nr_spis + VGIC_NR_PRIVATE_IRQS;
793	unsigned long flags;
794
795	for (i = 0; i < 32; i++) {
796		struct vgic_irq *irq;
797		bool new_level;
798
799		if ((intid + i) < VGIC_NR_SGIS || (intid + i) >= nr_irqs)
800			continue;
801
802		irq = vgic_get_irq(vcpu->kvm, vcpu, intid + i);
803
804		/*
805		 * Line level is set irrespective of irq type
806		 * (level or edge) to avoid dependency that VM should
807		 * restore irq config before line level.
808		 */
809		new_level = !!(val & (1U << i));
810		raw_spin_lock_irqsave(&irq->irq_lock, flags);
811		irq->line_level = new_level;
812		if (new_level)
813			vgic_queue_irq_unlock(vcpu->kvm, irq, flags);
814		else
815			raw_spin_unlock_irqrestore(&irq->irq_lock, flags);
816
817		vgic_put_irq(vcpu->kvm, irq);
818	}
819}
820
821static int match_region(const void *key, const void *elt)
822{
823	const unsigned int offset = (unsigned long)key;
824	const struct vgic_register_region *region = elt;
825
826	if (offset < region->reg_offset)
827		return -1;
828
829	if (offset >= region->reg_offset + region->len)
830		return 1;
831
832	return 0;
833}
834
835const struct vgic_register_region *
836vgic_find_mmio_region(const struct vgic_register_region *regions,
837		      int nr_regions, unsigned int offset)
838{
839	return bsearch((void *)(uintptr_t)offset, regions, nr_regions,
840		       sizeof(regions[0]), match_region);
841}
842
843void vgic_set_vmcr(struct kvm_vcpu *vcpu, struct vgic_vmcr *vmcr)
844{
845	if (kvm_vgic_global_state.type == VGIC_V2)
846		vgic_v2_set_vmcr(vcpu, vmcr);
847	else
848		vgic_v3_set_vmcr(vcpu, vmcr);
849}
850
851void vgic_get_vmcr(struct kvm_vcpu *vcpu, struct vgic_vmcr *vmcr)
852{
853	if (kvm_vgic_global_state.type == VGIC_V2)
854		vgic_v2_get_vmcr(vcpu, vmcr);
855	else
856		vgic_v3_get_vmcr(vcpu, vmcr);
857}
858
859/*
860 * kvm_mmio_read_buf() returns a value in a format where it can be converted
861 * to a byte array and be directly observed as the guest wanted it to appear
862 * in memory if it had done the store itself, which is LE for the GIC, as the
863 * guest knows the GIC is always LE.
864 *
865 * We convert this value to the CPUs native format to deal with it as a data
866 * value.
867 */
868unsigned long vgic_data_mmio_bus_to_host(const void *val, unsigned int len)
869{
870	unsigned long data = kvm_mmio_read_buf(val, len);
871
872	switch (len) {
873	case 1:
874		return data;
875	case 2:
876		return le16_to_cpu(data);
877	case 4:
878		return le32_to_cpu(data);
879	default:
880		return le64_to_cpu(data);
881	}
882}
883
884/*
885 * kvm_mmio_write_buf() expects a value in a format such that if converted to
886 * a byte array it is observed as the guest would see it if it could perform
887 * the load directly.  Since the GIC is LE, and the guest knows this, the
888 * guest expects a value in little endian format.
889 *
890 * We convert the data value from the CPUs native format to LE so that the
891 * value is returned in the proper format.
892 */
893void vgic_data_host_to_mmio_bus(void *buf, unsigned int len,
894				unsigned long data)
895{
896	switch (len) {
897	case 1:
898		break;
899	case 2:
900		data = cpu_to_le16(data);
901		break;
902	case 4:
903		data = cpu_to_le32(data);
904		break;
905	default:
906		data = cpu_to_le64(data);
907	}
908
909	kvm_mmio_write_buf(buf, len, data);
910}
911
912static
913struct vgic_io_device *kvm_to_vgic_iodev(const struct kvm_io_device *dev)
914{
915	return container_of(dev, struct vgic_io_device, dev);
916}
917
918static bool check_region(const struct kvm *kvm,
919			 const struct vgic_register_region *region,
920			 gpa_t addr, int len)
921{
922	int flags, nr_irqs = kvm->arch.vgic.nr_spis + VGIC_NR_PRIVATE_IRQS;
923
924	switch (len) {
925	case sizeof(u8):
926		flags = VGIC_ACCESS_8bit;
927		break;
928	case sizeof(u32):
929		flags = VGIC_ACCESS_32bit;
930		break;
931	case sizeof(u64):
932		flags = VGIC_ACCESS_64bit;
933		break;
934	default:
935		return false;
936	}
937
938	if ((region->access_flags & flags) && IS_ALIGNED(addr, len)) {
939		if (!region->bits_per_irq)
940			return true;
941
942		/* Do we access a non-allocated IRQ? */
943		return VGIC_ADDR_TO_INTID(addr, region->bits_per_irq) < nr_irqs;
944	}
945
946	return false;
947}
948
949const struct vgic_register_region *
950vgic_get_mmio_region(struct kvm_vcpu *vcpu, struct vgic_io_device *iodev,
951		     gpa_t addr, int len)
952{
953	const struct vgic_register_region *region;
954
955	region = vgic_find_mmio_region(iodev->regions, iodev->nr_regions,
956				       addr - iodev->base_addr);
957	if (!region || !check_region(vcpu->kvm, region, addr, len))
958		return NULL;
959
960	return region;
961}
962
963static int vgic_uaccess_read(struct kvm_vcpu *vcpu, struct vgic_io_device *iodev,
964			     gpa_t addr, u32 *val)
965{
966	const struct vgic_register_region *region;
967	struct kvm_vcpu *r_vcpu;
968
969	region = vgic_get_mmio_region(vcpu, iodev, addr, sizeof(u32));
970	if (!region) {
971		*val = 0;
972		return 0;
973	}
974
975	r_vcpu = iodev->redist_vcpu ? iodev->redist_vcpu : vcpu;
976	if (region->uaccess_read)
977		*val = region->uaccess_read(r_vcpu, addr, sizeof(u32));
978	else
979		*val = region->read(r_vcpu, addr, sizeof(u32));
980
981	return 0;
982}
983
984static int vgic_uaccess_write(struct kvm_vcpu *vcpu, struct vgic_io_device *iodev,
985			      gpa_t addr, const u32 *val)
986{
987	const struct vgic_register_region *region;
988	struct kvm_vcpu *r_vcpu;
989
990	region = vgic_get_mmio_region(vcpu, iodev, addr, sizeof(u32));
991	if (!region)
992		return 0;
993
994	r_vcpu = iodev->redist_vcpu ? iodev->redist_vcpu : vcpu;
995	if (region->uaccess_write)
996		return region->uaccess_write(r_vcpu, addr, sizeof(u32), *val);
997
998	region->write(r_vcpu, addr, sizeof(u32), *val);
999	return 0;
1000}
1001
1002/*
1003 * Userland access to VGIC registers.
1004 */
1005int vgic_uaccess(struct kvm_vcpu *vcpu, struct vgic_io_device *dev,
1006		 bool is_write, int offset, u32 *val)
1007{
1008	if (is_write)
1009		return vgic_uaccess_write(vcpu, dev, offset, val);
1010	else
1011		return vgic_uaccess_read(vcpu, dev, offset, val);
1012}
1013
1014static int dispatch_mmio_read(struct kvm_vcpu *vcpu, struct kvm_io_device *dev,
1015			      gpa_t addr, int len, void *val)
1016{
1017	struct vgic_io_device *iodev = kvm_to_vgic_iodev(dev);
1018	const struct vgic_register_region *region;
1019	unsigned long data = 0;
1020
1021	region = vgic_get_mmio_region(vcpu, iodev, addr, len);
1022	if (!region) {
1023		memset(val, 0, len);
1024		return 0;
1025	}
1026
1027	switch (iodev->iodev_type) {
1028	case IODEV_CPUIF:
1029		data = region->read(vcpu, addr, len);
1030		break;
1031	case IODEV_DIST:
1032		data = region->read(vcpu, addr, len);
1033		break;
1034	case IODEV_REDIST:
1035		data = region->read(iodev->redist_vcpu, addr, len);
1036		break;
1037	case IODEV_ITS:
1038		data = region->its_read(vcpu->kvm, iodev->its, addr, len);
1039		break;
1040	}
1041
1042	vgic_data_host_to_mmio_bus(val, len, data);
1043	return 0;
1044}
1045
1046static int dispatch_mmio_write(struct kvm_vcpu *vcpu, struct kvm_io_device *dev,
1047			       gpa_t addr, int len, const void *val)
1048{
1049	struct vgic_io_device *iodev = kvm_to_vgic_iodev(dev);
1050	const struct vgic_register_region *region;
1051	unsigned long data = vgic_data_mmio_bus_to_host(val, len);
1052
1053	region = vgic_get_mmio_region(vcpu, iodev, addr, len);
1054	if (!region)
1055		return 0;
1056
1057	switch (iodev->iodev_type) {
1058	case IODEV_CPUIF:
1059		region->write(vcpu, addr, len, data);
1060		break;
1061	case IODEV_DIST:
1062		region->write(vcpu, addr, len, data);
1063		break;
1064	case IODEV_REDIST:
1065		region->write(iodev->redist_vcpu, addr, len, data);
1066		break;
1067	case IODEV_ITS:
1068		region->its_write(vcpu->kvm, iodev->its, addr, len, data);
1069		break;
1070	}
1071
1072	return 0;
1073}
1074
1075const struct kvm_io_device_ops kvm_io_gic_ops = {
1076	.read = dispatch_mmio_read,
1077	.write = dispatch_mmio_write,
1078};
1079
1080int vgic_register_dist_iodev(struct kvm *kvm, gpa_t dist_base_address,
1081			     enum vgic_type type)
1082{
1083	struct vgic_io_device *io_device = &kvm->arch.vgic.dist_iodev;
1084	unsigned int len;
1085
1086	switch (type) {
1087	case VGIC_V2:
1088		len = vgic_v2_init_dist_iodev(io_device);
1089		break;
1090	case VGIC_V3:
1091		len = vgic_v3_init_dist_iodev(io_device);
1092		break;
1093	default:
1094		BUG_ON(1);
1095	}
1096
1097	io_device->base_addr = dist_base_address;
1098	io_device->iodev_type = IODEV_DIST;
1099	io_device->redist_vcpu = NULL;
1100
1101	return kvm_io_bus_register_dev(kvm, KVM_MMIO_BUS, dist_base_address,
1102				       len, &io_device->dev);
1103}
1104