vgic.c 37 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499
  1. /*
  2. * Copyright (C) 2012 ARM Ltd.
  3. * Author: Marc Zyngier <marc.zyngier@arm.com>
  4. *
  5. * This program is free software; you can redistribute it and/or modify
  6. * it under the terms of the GNU General Public License version 2 as
  7. * published by the Free Software Foundation.
  8. *
  9. * This program is distributed in the hope that it will be useful,
  10. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. * GNU General Public License for more details.
  13. *
  14. * You should have received a copy of the GNU General Public License
  15. * along with this program; if not, write to the Free Software
  16. * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  17. */
  18. #include <linux/cpu.h>
  19. #include <linux/kvm.h>
  20. #include <linux/kvm_host.h>
  21. #include <linux/interrupt.h>
  22. #include <linux/io.h>
  23. #include <linux/of.h>
  24. #include <linux/of_address.h>
  25. #include <linux/of_irq.h>
  26. #include <linux/irqchip/arm-gic.h>
  27. #include <asm/kvm_emulate.h>
  28. #include <asm/kvm_arm.h>
  29. #include <asm/kvm_mmu.h>
  30. /*
  31. * How the whole thing works (courtesy of Christoffer Dall):
  32. *
  33. * - At any time, the dist->irq_pending_on_cpu is the oracle that knows if
  34. * something is pending
  35. * - VGIC pending interrupts are stored on the vgic.irq_state vgic
  36. * bitmap (this bitmap is updated by both user land ioctls and guest
  37. * mmio ops, and other in-kernel peripherals such as the
  38. * arch. timers) and indicate the 'wire' state.
  39. * - Every time the bitmap changes, the irq_pending_on_cpu oracle is
  40. * recalculated
  41. * - To calculate the oracle, we need info for each cpu from
  42. * compute_pending_for_cpu, which considers:
  43. * - PPI: dist->irq_state & dist->irq_enable
  44. * - SPI: dist->irq_state & dist->irq_enable & dist->irq_spi_target
  45. * - irq_spi_target is a 'formatted' version of the GICD_ICFGR
  46. * registers, stored on each vcpu. We only keep one bit of
  47. * information per interrupt, making sure that only one vcpu can
  48. * accept the interrupt.
  49. * - The same is true when injecting an interrupt, except that we only
  50. * consider a single interrupt at a time. The irq_spi_cpu array
  51. * contains the target CPU for each SPI.
  52. *
  53. * The handling of level interrupts adds some extra complexity. We
  54. * need to track when the interrupt has been EOIed, so we can sample
  55. * the 'line' again. This is achieved as such:
  56. *
  57. * - When a level interrupt is moved onto a vcpu, the corresponding
  58. * bit in irq_active is set. As long as this bit is set, the line
  59. * will be ignored for further interrupts. The interrupt is injected
  60. * into the vcpu with the GICH_LR_EOI bit set (generate a
  61. * maintenance interrupt on EOI).
  62. * - When the interrupt is EOIed, the maintenance interrupt fires,
  63. * and clears the corresponding bit in irq_active. This allow the
  64. * interrupt line to be sampled again.
  65. */
  66. #define VGIC_ADDR_UNDEF (-1)
  67. #define IS_VGIC_ADDR_UNDEF(_x) ((_x) == VGIC_ADDR_UNDEF)
  68. /* Physical address of vgic virtual cpu interface */
  69. static phys_addr_t vgic_vcpu_base;
  70. /* Virtual control interface base address */
  71. static void __iomem *vgic_vctrl_base;
  72. static struct device_node *vgic_node;
  73. #define ACCESS_READ_VALUE (1 << 0)
  74. #define ACCESS_READ_RAZ (0 << 0)
  75. #define ACCESS_READ_MASK(x) ((x) & (1 << 0))
  76. #define ACCESS_WRITE_IGNORED (0 << 1)
  77. #define ACCESS_WRITE_SETBIT (1 << 1)
  78. #define ACCESS_WRITE_CLEARBIT (2 << 1)
  79. #define ACCESS_WRITE_VALUE (3 << 1)
  80. #define ACCESS_WRITE_MASK(x) ((x) & (3 << 1))
  81. static void vgic_retire_disabled_irqs(struct kvm_vcpu *vcpu);
  82. static void vgic_update_state(struct kvm *kvm);
  83. static void vgic_kick_vcpus(struct kvm *kvm);
  84. static void vgic_dispatch_sgi(struct kvm_vcpu *vcpu, u32 reg);
  85. static u32 vgic_nr_lr;
  86. static unsigned int vgic_maint_irq;
  87. static u32 *vgic_bitmap_get_reg(struct vgic_bitmap *x,
  88. int cpuid, u32 offset)
  89. {
  90. offset >>= 2;
  91. if (!offset)
  92. return x->percpu[cpuid].reg;
  93. else
  94. return x->shared.reg + offset - 1;
  95. }
  96. static int vgic_bitmap_get_irq_val(struct vgic_bitmap *x,
  97. int cpuid, int irq)
  98. {
  99. if (irq < VGIC_NR_PRIVATE_IRQS)
  100. return test_bit(irq, x->percpu[cpuid].reg_ul);
  101. return test_bit(irq - VGIC_NR_PRIVATE_IRQS, x->shared.reg_ul);
  102. }
  103. static void vgic_bitmap_set_irq_val(struct vgic_bitmap *x, int cpuid,
  104. int irq, int val)
  105. {
  106. unsigned long *reg;
  107. if (irq < VGIC_NR_PRIVATE_IRQS) {
  108. reg = x->percpu[cpuid].reg_ul;
  109. } else {
  110. reg = x->shared.reg_ul;
  111. irq -= VGIC_NR_PRIVATE_IRQS;
  112. }
  113. if (val)
  114. set_bit(irq, reg);
  115. else
  116. clear_bit(irq, reg);
  117. }
  118. static unsigned long *vgic_bitmap_get_cpu_map(struct vgic_bitmap *x, int cpuid)
  119. {
  120. if (unlikely(cpuid >= VGIC_MAX_CPUS))
  121. return NULL;
  122. return x->percpu[cpuid].reg_ul;
  123. }
  124. static unsigned long *vgic_bitmap_get_shared_map(struct vgic_bitmap *x)
  125. {
  126. return x->shared.reg_ul;
  127. }
  128. static u32 *vgic_bytemap_get_reg(struct vgic_bytemap *x, int cpuid, u32 offset)
  129. {
  130. offset >>= 2;
  131. BUG_ON(offset > (VGIC_NR_IRQS / 4));
  132. if (offset < 4)
  133. return x->percpu[cpuid] + offset;
  134. else
  135. return x->shared + offset - 8;
  136. }
  137. #define VGIC_CFG_LEVEL 0
  138. #define VGIC_CFG_EDGE 1
  139. static bool vgic_irq_is_edge(struct kvm_vcpu *vcpu, int irq)
  140. {
  141. struct vgic_dist *dist = &vcpu->kvm->arch.vgic;
  142. int irq_val;
  143. irq_val = vgic_bitmap_get_irq_val(&dist->irq_cfg, vcpu->vcpu_id, irq);
  144. return irq_val == VGIC_CFG_EDGE;
  145. }
  146. static int vgic_irq_is_enabled(struct kvm_vcpu *vcpu, int irq)
  147. {
  148. struct vgic_dist *dist = &vcpu->kvm->arch.vgic;
  149. return vgic_bitmap_get_irq_val(&dist->irq_enabled, vcpu->vcpu_id, irq);
  150. }
  151. static int vgic_irq_is_active(struct kvm_vcpu *vcpu, int irq)
  152. {
  153. struct vgic_dist *dist = &vcpu->kvm->arch.vgic;
  154. return vgic_bitmap_get_irq_val(&dist->irq_active, vcpu->vcpu_id, irq);
  155. }
  156. static void vgic_irq_set_active(struct kvm_vcpu *vcpu, int irq)
  157. {
  158. struct vgic_dist *dist = &vcpu->kvm->arch.vgic;
  159. vgic_bitmap_set_irq_val(&dist->irq_active, vcpu->vcpu_id, irq, 1);
  160. }
  161. static void vgic_irq_clear_active(struct kvm_vcpu *vcpu, int irq)
  162. {
  163. struct vgic_dist *dist = &vcpu->kvm->arch.vgic;
  164. vgic_bitmap_set_irq_val(&dist->irq_active, vcpu->vcpu_id, irq, 0);
  165. }
  166. static int vgic_dist_irq_is_pending(struct kvm_vcpu *vcpu, int irq)
  167. {
  168. struct vgic_dist *dist = &vcpu->kvm->arch.vgic;
  169. return vgic_bitmap_get_irq_val(&dist->irq_state, vcpu->vcpu_id, irq);
  170. }
  171. static void vgic_dist_irq_set(struct kvm_vcpu *vcpu, int irq)
  172. {
  173. struct vgic_dist *dist = &vcpu->kvm->arch.vgic;
  174. vgic_bitmap_set_irq_val(&dist->irq_state, vcpu->vcpu_id, irq, 1);
  175. }
  176. static void vgic_dist_irq_clear(struct kvm_vcpu *vcpu, int irq)
  177. {
  178. struct vgic_dist *dist = &vcpu->kvm->arch.vgic;
  179. vgic_bitmap_set_irq_val(&dist->irq_state, vcpu->vcpu_id, irq, 0);
  180. }
  181. static void vgic_cpu_irq_set(struct kvm_vcpu *vcpu, int irq)
  182. {
  183. if (irq < VGIC_NR_PRIVATE_IRQS)
  184. set_bit(irq, vcpu->arch.vgic_cpu.pending_percpu);
  185. else
  186. set_bit(irq - VGIC_NR_PRIVATE_IRQS,
  187. vcpu->arch.vgic_cpu.pending_shared);
  188. }
  189. static void vgic_cpu_irq_clear(struct kvm_vcpu *vcpu, int irq)
  190. {
  191. if (irq < VGIC_NR_PRIVATE_IRQS)
  192. clear_bit(irq, vcpu->arch.vgic_cpu.pending_percpu);
  193. else
  194. clear_bit(irq - VGIC_NR_PRIVATE_IRQS,
  195. vcpu->arch.vgic_cpu.pending_shared);
  196. }
  197. static u32 mmio_data_read(struct kvm_exit_mmio *mmio, u32 mask)
  198. {
  199. return *((u32 *)mmio->data) & mask;
  200. }
  201. static void mmio_data_write(struct kvm_exit_mmio *mmio, u32 mask, u32 value)
  202. {
  203. *((u32 *)mmio->data) = value & mask;
  204. }
  205. /**
  206. * vgic_reg_access - access vgic register
  207. * @mmio: pointer to the data describing the mmio access
  208. * @reg: pointer to the virtual backing of vgic distributor data
  209. * @offset: least significant 2 bits used for word offset
  210. * @mode: ACCESS_ mode (see defines above)
  211. *
  212. * Helper to make vgic register access easier using one of the access
  213. * modes defined for vgic register access
  214. * (read,raz,write-ignored,setbit,clearbit,write)
  215. */
  216. static void vgic_reg_access(struct kvm_exit_mmio *mmio, u32 *reg,
  217. phys_addr_t offset, int mode)
  218. {
  219. int word_offset = (offset & 3) * 8;
  220. u32 mask = (1UL << (mmio->len * 8)) - 1;
  221. u32 regval;
  222. /*
  223. * Any alignment fault should have been delivered to the guest
  224. * directly (ARM ARM B3.12.7 "Prioritization of aborts").
  225. */
  226. if (reg) {
  227. regval = *reg;
  228. } else {
  229. BUG_ON(mode != (ACCESS_READ_RAZ | ACCESS_WRITE_IGNORED));
  230. regval = 0;
  231. }
  232. if (mmio->is_write) {
  233. u32 data = mmio_data_read(mmio, mask) << word_offset;
  234. switch (ACCESS_WRITE_MASK(mode)) {
  235. case ACCESS_WRITE_IGNORED:
  236. return;
  237. case ACCESS_WRITE_SETBIT:
  238. regval |= data;
  239. break;
  240. case ACCESS_WRITE_CLEARBIT:
  241. regval &= ~data;
  242. break;
  243. case ACCESS_WRITE_VALUE:
  244. regval = (regval & ~(mask << word_offset)) | data;
  245. break;
  246. }
  247. *reg = regval;
  248. } else {
  249. switch (ACCESS_READ_MASK(mode)) {
  250. case ACCESS_READ_RAZ:
  251. regval = 0;
  252. /* fall through */
  253. case ACCESS_READ_VALUE:
  254. mmio_data_write(mmio, mask, regval >> word_offset);
  255. }
  256. }
  257. }
  258. static bool handle_mmio_misc(struct kvm_vcpu *vcpu,
  259. struct kvm_exit_mmio *mmio, phys_addr_t offset)
  260. {
  261. u32 reg;
  262. u32 word_offset = offset & 3;
  263. switch (offset & ~3) {
  264. case 0: /* CTLR */
  265. reg = vcpu->kvm->arch.vgic.enabled;
  266. vgic_reg_access(mmio, &reg, word_offset,
  267. ACCESS_READ_VALUE | ACCESS_WRITE_VALUE);
  268. if (mmio->is_write) {
  269. vcpu->kvm->arch.vgic.enabled = reg & 1;
  270. vgic_update_state(vcpu->kvm);
  271. return true;
  272. }
  273. break;
  274. case 4: /* TYPER */
  275. reg = (atomic_read(&vcpu->kvm->online_vcpus) - 1) << 5;
  276. reg |= (VGIC_NR_IRQS >> 5) - 1;
  277. vgic_reg_access(mmio, &reg, word_offset,
  278. ACCESS_READ_VALUE | ACCESS_WRITE_IGNORED);
  279. break;
  280. case 8: /* IIDR */
  281. reg = 0x4B00043B;
  282. vgic_reg_access(mmio, &reg, word_offset,
  283. ACCESS_READ_VALUE | ACCESS_WRITE_IGNORED);
  284. break;
  285. }
  286. return false;
  287. }
  288. static bool handle_mmio_raz_wi(struct kvm_vcpu *vcpu,
  289. struct kvm_exit_mmio *mmio, phys_addr_t offset)
  290. {
  291. vgic_reg_access(mmio, NULL, offset,
  292. ACCESS_READ_RAZ | ACCESS_WRITE_IGNORED);
  293. return false;
  294. }
  295. static bool handle_mmio_set_enable_reg(struct kvm_vcpu *vcpu,
  296. struct kvm_exit_mmio *mmio,
  297. phys_addr_t offset)
  298. {
  299. u32 *reg = vgic_bitmap_get_reg(&vcpu->kvm->arch.vgic.irq_enabled,
  300. vcpu->vcpu_id, offset);
  301. vgic_reg_access(mmio, reg, offset,
  302. ACCESS_READ_VALUE | ACCESS_WRITE_SETBIT);
  303. if (mmio->is_write) {
  304. vgic_update_state(vcpu->kvm);
  305. return true;
  306. }
  307. return false;
  308. }
  309. static bool handle_mmio_clear_enable_reg(struct kvm_vcpu *vcpu,
  310. struct kvm_exit_mmio *mmio,
  311. phys_addr_t offset)
  312. {
  313. u32 *reg = vgic_bitmap_get_reg(&vcpu->kvm->arch.vgic.irq_enabled,
  314. vcpu->vcpu_id, offset);
  315. vgic_reg_access(mmio, reg, offset,
  316. ACCESS_READ_VALUE | ACCESS_WRITE_CLEARBIT);
  317. if (mmio->is_write) {
  318. if (offset < 4) /* Force SGI enabled */
  319. *reg |= 0xffff;
  320. vgic_retire_disabled_irqs(vcpu);
  321. vgic_update_state(vcpu->kvm);
  322. return true;
  323. }
  324. return false;
  325. }
  326. static bool handle_mmio_set_pending_reg(struct kvm_vcpu *vcpu,
  327. struct kvm_exit_mmio *mmio,
  328. phys_addr_t offset)
  329. {
  330. u32 *reg = vgic_bitmap_get_reg(&vcpu->kvm->arch.vgic.irq_state,
  331. vcpu->vcpu_id, offset);
  332. vgic_reg_access(mmio, reg, offset,
  333. ACCESS_READ_VALUE | ACCESS_WRITE_SETBIT);
  334. if (mmio->is_write) {
  335. vgic_update_state(vcpu->kvm);
  336. return true;
  337. }
  338. return false;
  339. }
  340. static bool handle_mmio_clear_pending_reg(struct kvm_vcpu *vcpu,
  341. struct kvm_exit_mmio *mmio,
  342. phys_addr_t offset)
  343. {
  344. u32 *reg = vgic_bitmap_get_reg(&vcpu->kvm->arch.vgic.irq_state,
  345. vcpu->vcpu_id, offset);
  346. vgic_reg_access(mmio, reg, offset,
  347. ACCESS_READ_VALUE | ACCESS_WRITE_CLEARBIT);
  348. if (mmio->is_write) {
  349. vgic_update_state(vcpu->kvm);
  350. return true;
  351. }
  352. return false;
  353. }
  354. static bool handle_mmio_priority_reg(struct kvm_vcpu *vcpu,
  355. struct kvm_exit_mmio *mmio,
  356. phys_addr_t offset)
  357. {
  358. u32 *reg = vgic_bytemap_get_reg(&vcpu->kvm->arch.vgic.irq_priority,
  359. vcpu->vcpu_id, offset);
  360. vgic_reg_access(mmio, reg, offset,
  361. ACCESS_READ_VALUE | ACCESS_WRITE_VALUE);
  362. return false;
  363. }
  364. #define GICD_ITARGETSR_SIZE 32
  365. #define GICD_CPUTARGETS_BITS 8
  366. #define GICD_IRQS_PER_ITARGETSR (GICD_ITARGETSR_SIZE / GICD_CPUTARGETS_BITS)
  367. static u32 vgic_get_target_reg(struct kvm *kvm, int irq)
  368. {
  369. struct vgic_dist *dist = &kvm->arch.vgic;
  370. struct kvm_vcpu *vcpu;
  371. int i, c;
  372. unsigned long *bmap;
  373. u32 val = 0;
  374. irq -= VGIC_NR_PRIVATE_IRQS;
  375. kvm_for_each_vcpu(c, vcpu, kvm) {
  376. bmap = vgic_bitmap_get_shared_map(&dist->irq_spi_target[c]);
  377. for (i = 0; i < GICD_IRQS_PER_ITARGETSR; i++)
  378. if (test_bit(irq + i, bmap))
  379. val |= 1 << (c + i * 8);
  380. }
  381. return val;
  382. }
  383. static void vgic_set_target_reg(struct kvm *kvm, u32 val, int irq)
  384. {
  385. struct vgic_dist *dist = &kvm->arch.vgic;
  386. struct kvm_vcpu *vcpu;
  387. int i, c;
  388. unsigned long *bmap;
  389. u32 target;
  390. irq -= VGIC_NR_PRIVATE_IRQS;
  391. /*
  392. * Pick the LSB in each byte. This ensures we target exactly
  393. * one vcpu per IRQ. If the byte is null, assume we target
  394. * CPU0.
  395. */
  396. for (i = 0; i < GICD_IRQS_PER_ITARGETSR; i++) {
  397. int shift = i * GICD_CPUTARGETS_BITS;
  398. target = ffs((val >> shift) & 0xffU);
  399. target = target ? (target - 1) : 0;
  400. dist->irq_spi_cpu[irq + i] = target;
  401. kvm_for_each_vcpu(c, vcpu, kvm) {
  402. bmap = vgic_bitmap_get_shared_map(&dist->irq_spi_target[c]);
  403. if (c == target)
  404. set_bit(irq + i, bmap);
  405. else
  406. clear_bit(irq + i, bmap);
  407. }
  408. }
  409. }
  410. static bool handle_mmio_target_reg(struct kvm_vcpu *vcpu,
  411. struct kvm_exit_mmio *mmio,
  412. phys_addr_t offset)
  413. {
  414. u32 reg;
  415. /* We treat the banked interrupts targets as read-only */
  416. if (offset < 32) {
  417. u32 roreg = 1 << vcpu->vcpu_id;
  418. roreg |= roreg << 8;
  419. roreg |= roreg << 16;
  420. vgic_reg_access(mmio, &roreg, offset,
  421. ACCESS_READ_VALUE | ACCESS_WRITE_IGNORED);
  422. return false;
  423. }
  424. reg = vgic_get_target_reg(vcpu->kvm, offset & ~3U);
  425. vgic_reg_access(mmio, &reg, offset,
  426. ACCESS_READ_VALUE | ACCESS_WRITE_VALUE);
  427. if (mmio->is_write) {
  428. vgic_set_target_reg(vcpu->kvm, reg, offset & ~3U);
  429. vgic_update_state(vcpu->kvm);
  430. return true;
  431. }
  432. return false;
  433. }
  434. static u32 vgic_cfg_expand(u16 val)
  435. {
  436. u32 res = 0;
  437. int i;
  438. /*
  439. * Turn a 16bit value like abcd...mnop into a 32bit word
  440. * a0b0c0d0...m0n0o0p0, which is what the HW cfg register is.
  441. */
  442. for (i = 0; i < 16; i++)
  443. res |= ((val >> i) & VGIC_CFG_EDGE) << (2 * i + 1);
  444. return res;
  445. }
  446. static u16 vgic_cfg_compress(u32 val)
  447. {
  448. u16 res = 0;
  449. int i;
  450. /*
  451. * Turn a 32bit word a0b0c0d0...m0n0o0p0 into 16bit value like
  452. * abcd...mnop which is what we really care about.
  453. */
  454. for (i = 0; i < 16; i++)
  455. res |= ((val >> (i * 2 + 1)) & VGIC_CFG_EDGE) << i;
  456. return res;
  457. }
  458. /*
  459. * The distributor uses 2 bits per IRQ for the CFG register, but the
  460. * LSB is always 0. As such, we only keep the upper bit, and use the
  461. * two above functions to compress/expand the bits
  462. */
  463. static bool handle_mmio_cfg_reg(struct kvm_vcpu *vcpu,
  464. struct kvm_exit_mmio *mmio, phys_addr_t offset)
  465. {
  466. u32 val;
  467. u32 *reg = vgic_bitmap_get_reg(&vcpu->kvm->arch.vgic.irq_cfg,
  468. vcpu->vcpu_id, offset >> 1);
  469. if (offset & 2)
  470. val = *reg >> 16;
  471. else
  472. val = *reg & 0xffff;
  473. val = vgic_cfg_expand(val);
  474. vgic_reg_access(mmio, &val, offset,
  475. ACCESS_READ_VALUE | ACCESS_WRITE_VALUE);
  476. if (mmio->is_write) {
  477. if (offset < 4) {
  478. *reg = ~0U; /* Force PPIs/SGIs to 1 */
  479. return false;
  480. }
  481. val = vgic_cfg_compress(val);
  482. if (offset & 2) {
  483. *reg &= 0xffff;
  484. *reg |= val << 16;
  485. } else {
  486. *reg &= 0xffff << 16;
  487. *reg |= val;
  488. }
  489. }
  490. return false;
  491. }
  492. static bool handle_mmio_sgi_reg(struct kvm_vcpu *vcpu,
  493. struct kvm_exit_mmio *mmio, phys_addr_t offset)
  494. {
  495. u32 reg;
  496. vgic_reg_access(mmio, &reg, offset,
  497. ACCESS_READ_RAZ | ACCESS_WRITE_VALUE);
  498. if (mmio->is_write) {
  499. vgic_dispatch_sgi(vcpu, reg);
  500. vgic_update_state(vcpu->kvm);
  501. return true;
  502. }
  503. return false;
  504. }
  505. /*
  506. * I would have liked to use the kvm_bus_io_*() API instead, but it
  507. * cannot cope with banked registers (only the VM pointer is passed
  508. * around, and we need the vcpu). One of these days, someone please
  509. * fix it!
  510. */
  511. struct mmio_range {
  512. phys_addr_t base;
  513. unsigned long len;
  514. bool (*handle_mmio)(struct kvm_vcpu *vcpu, struct kvm_exit_mmio *mmio,
  515. phys_addr_t offset);
  516. };
  517. static const struct mmio_range vgic_ranges[] = {
  518. {
  519. .base = GIC_DIST_CTRL,
  520. .len = 12,
  521. .handle_mmio = handle_mmio_misc,
  522. },
  523. {
  524. .base = GIC_DIST_IGROUP,
  525. .len = VGIC_NR_IRQS / 8,
  526. .handle_mmio = handle_mmio_raz_wi,
  527. },
  528. {
  529. .base = GIC_DIST_ENABLE_SET,
  530. .len = VGIC_NR_IRQS / 8,
  531. .handle_mmio = handle_mmio_set_enable_reg,
  532. },
  533. {
  534. .base = GIC_DIST_ENABLE_CLEAR,
  535. .len = VGIC_NR_IRQS / 8,
  536. .handle_mmio = handle_mmio_clear_enable_reg,
  537. },
  538. {
  539. .base = GIC_DIST_PENDING_SET,
  540. .len = VGIC_NR_IRQS / 8,
  541. .handle_mmio = handle_mmio_set_pending_reg,
  542. },
  543. {
  544. .base = GIC_DIST_PENDING_CLEAR,
  545. .len = VGIC_NR_IRQS / 8,
  546. .handle_mmio = handle_mmio_clear_pending_reg,
  547. },
  548. {
  549. .base = GIC_DIST_ACTIVE_SET,
  550. .len = VGIC_NR_IRQS / 8,
  551. .handle_mmio = handle_mmio_raz_wi,
  552. },
  553. {
  554. .base = GIC_DIST_ACTIVE_CLEAR,
  555. .len = VGIC_NR_IRQS / 8,
  556. .handle_mmio = handle_mmio_raz_wi,
  557. },
  558. {
  559. .base = GIC_DIST_PRI,
  560. .len = VGIC_NR_IRQS,
  561. .handle_mmio = handle_mmio_priority_reg,
  562. },
  563. {
  564. .base = GIC_DIST_TARGET,
  565. .len = VGIC_NR_IRQS,
  566. .handle_mmio = handle_mmio_target_reg,
  567. },
  568. {
  569. .base = GIC_DIST_CONFIG,
  570. .len = VGIC_NR_IRQS / 4,
  571. .handle_mmio = handle_mmio_cfg_reg,
  572. },
  573. {
  574. .base = GIC_DIST_SOFTINT,
  575. .len = 4,
  576. .handle_mmio = handle_mmio_sgi_reg,
  577. },
  578. {}
  579. };
  580. static const
  581. struct mmio_range *find_matching_range(const struct mmio_range *ranges,
  582. struct kvm_exit_mmio *mmio,
  583. phys_addr_t base)
  584. {
  585. const struct mmio_range *r = ranges;
  586. phys_addr_t addr = mmio->phys_addr - base;
  587. while (r->len) {
  588. if (addr >= r->base &&
  589. (addr + mmio->len) <= (r->base + r->len))
  590. return r;
  591. r++;
  592. }
  593. return NULL;
  594. }
  595. /**
  596. * vgic_handle_mmio - handle an in-kernel MMIO access
  597. * @vcpu: pointer to the vcpu performing the access
  598. * @run: pointer to the kvm_run structure
  599. * @mmio: pointer to the data describing the access
  600. *
  601. * returns true if the MMIO access has been performed in kernel space,
  602. * and false if it needs to be emulated in user space.
  603. */
  604. bool vgic_handle_mmio(struct kvm_vcpu *vcpu, struct kvm_run *run,
  605. struct kvm_exit_mmio *mmio)
  606. {
  607. const struct mmio_range *range;
  608. struct vgic_dist *dist = &vcpu->kvm->arch.vgic;
  609. unsigned long base = dist->vgic_dist_base;
  610. bool updated_state;
  611. unsigned long offset;
  612. if (!irqchip_in_kernel(vcpu->kvm) ||
  613. mmio->phys_addr < base ||
  614. (mmio->phys_addr + mmio->len) > (base + KVM_VGIC_V2_DIST_SIZE))
  615. return false;
  616. /* We don't support ldrd / strd or ldm / stm to the emulated vgic */
  617. if (mmio->len > 4) {
  618. kvm_inject_dabt(vcpu, mmio->phys_addr);
  619. return true;
  620. }
  621. range = find_matching_range(vgic_ranges, mmio, base);
  622. if (unlikely(!range || !range->handle_mmio)) {
  623. pr_warn("Unhandled access %d %08llx %d\n",
  624. mmio->is_write, mmio->phys_addr, mmio->len);
  625. return false;
  626. }
  627. spin_lock(&vcpu->kvm->arch.vgic.lock);
  628. offset = mmio->phys_addr - range->base - base;
  629. updated_state = range->handle_mmio(vcpu, mmio, offset);
  630. spin_unlock(&vcpu->kvm->arch.vgic.lock);
  631. kvm_prepare_mmio(run, mmio);
  632. kvm_handle_mmio_return(vcpu, run);
  633. if (updated_state)
  634. vgic_kick_vcpus(vcpu->kvm);
  635. return true;
  636. }
  637. static void vgic_dispatch_sgi(struct kvm_vcpu *vcpu, u32 reg)
  638. {
  639. struct kvm *kvm = vcpu->kvm;
  640. struct vgic_dist *dist = &kvm->arch.vgic;
  641. int nrcpus = atomic_read(&kvm->online_vcpus);
  642. u8 target_cpus;
  643. int sgi, mode, c, vcpu_id;
  644. vcpu_id = vcpu->vcpu_id;
  645. sgi = reg & 0xf;
  646. target_cpus = (reg >> 16) & 0xff;
  647. mode = (reg >> 24) & 3;
  648. switch (mode) {
  649. case 0:
  650. if (!target_cpus)
  651. return;
  652. case 1:
  653. target_cpus = ((1 << nrcpus) - 1) & ~(1 << vcpu_id) & 0xff;
  654. break;
  655. case 2:
  656. target_cpus = 1 << vcpu_id;
  657. break;
  658. }
  659. kvm_for_each_vcpu(c, vcpu, kvm) {
  660. if (target_cpus & 1) {
  661. /* Flag the SGI as pending */
  662. vgic_dist_irq_set(vcpu, sgi);
  663. dist->irq_sgi_sources[c][sgi] |= 1 << vcpu_id;
  664. kvm_debug("SGI%d from CPU%d to CPU%d\n", sgi, vcpu_id, c);
  665. }
  666. target_cpus >>= 1;
  667. }
  668. }
  669. static int compute_pending_for_cpu(struct kvm_vcpu *vcpu)
  670. {
  671. struct vgic_dist *dist = &vcpu->kvm->arch.vgic;
  672. unsigned long *pending, *enabled, *pend_percpu, *pend_shared;
  673. unsigned long pending_private, pending_shared;
  674. int vcpu_id;
  675. vcpu_id = vcpu->vcpu_id;
  676. pend_percpu = vcpu->arch.vgic_cpu.pending_percpu;
  677. pend_shared = vcpu->arch.vgic_cpu.pending_shared;
  678. pending = vgic_bitmap_get_cpu_map(&dist->irq_state, vcpu_id);
  679. enabled = vgic_bitmap_get_cpu_map(&dist->irq_enabled, vcpu_id);
  680. bitmap_and(pend_percpu, pending, enabled, VGIC_NR_PRIVATE_IRQS);
  681. pending = vgic_bitmap_get_shared_map(&dist->irq_state);
  682. enabled = vgic_bitmap_get_shared_map(&dist->irq_enabled);
  683. bitmap_and(pend_shared, pending, enabled, VGIC_NR_SHARED_IRQS);
  684. bitmap_and(pend_shared, pend_shared,
  685. vgic_bitmap_get_shared_map(&dist->irq_spi_target[vcpu_id]),
  686. VGIC_NR_SHARED_IRQS);
  687. pending_private = find_first_bit(pend_percpu, VGIC_NR_PRIVATE_IRQS);
  688. pending_shared = find_first_bit(pend_shared, VGIC_NR_SHARED_IRQS);
  689. return (pending_private < VGIC_NR_PRIVATE_IRQS ||
  690. pending_shared < VGIC_NR_SHARED_IRQS);
  691. }
  692. /*
  693. * Update the interrupt state and determine which CPUs have pending
  694. * interrupts. Must be called with distributor lock held.
  695. */
  696. static void vgic_update_state(struct kvm *kvm)
  697. {
  698. struct vgic_dist *dist = &kvm->arch.vgic;
  699. struct kvm_vcpu *vcpu;
  700. int c;
  701. if (!dist->enabled) {
  702. set_bit(0, &dist->irq_pending_on_cpu);
  703. return;
  704. }
  705. kvm_for_each_vcpu(c, vcpu, kvm) {
  706. if (compute_pending_for_cpu(vcpu)) {
  707. pr_debug("CPU%d has pending interrupts\n", c);
  708. set_bit(c, &dist->irq_pending_on_cpu);
  709. }
  710. }
  711. }
  712. #define LR_CPUID(lr) \
  713. (((lr) & GICH_LR_PHYSID_CPUID) >> GICH_LR_PHYSID_CPUID_SHIFT)
  714. #define MK_LR_PEND(src, irq) \
  715. (GICH_LR_PENDING_BIT | ((src) << GICH_LR_PHYSID_CPUID_SHIFT) | (irq))
  716. /*
  717. * An interrupt may have been disabled after being made pending on the
  718. * CPU interface (the classic case is a timer running while we're
  719. * rebooting the guest - the interrupt would kick as soon as the CPU
  720. * interface gets enabled, with deadly consequences).
  721. *
  722. * The solution is to examine already active LRs, and check the
  723. * interrupt is still enabled. If not, just retire it.
  724. */
  725. static void vgic_retire_disabled_irqs(struct kvm_vcpu *vcpu)
  726. {
  727. struct vgic_cpu *vgic_cpu = &vcpu->arch.vgic_cpu;
  728. int lr;
  729. for_each_set_bit(lr, vgic_cpu->lr_used, vgic_cpu->nr_lr) {
  730. int irq = vgic_cpu->vgic_lr[lr] & GICH_LR_VIRTUALID;
  731. if (!vgic_irq_is_enabled(vcpu, irq)) {
  732. vgic_cpu->vgic_irq_lr_map[irq] = LR_EMPTY;
  733. clear_bit(lr, vgic_cpu->lr_used);
  734. vgic_cpu->vgic_lr[lr] &= ~GICH_LR_STATE;
  735. if (vgic_irq_is_active(vcpu, irq))
  736. vgic_irq_clear_active(vcpu, irq);
  737. }
  738. }
  739. }
  740. /*
  741. * Queue an interrupt to a CPU virtual interface. Return true on success,
  742. * or false if it wasn't possible to queue it.
  743. */
  744. static bool vgic_queue_irq(struct kvm_vcpu *vcpu, u8 sgi_source_id, int irq)
  745. {
  746. struct vgic_cpu *vgic_cpu = &vcpu->arch.vgic_cpu;
  747. int lr;
  748. /* Sanitize the input... */
  749. BUG_ON(sgi_source_id & ~7);
  750. BUG_ON(sgi_source_id && irq >= VGIC_NR_SGIS);
  751. BUG_ON(irq >= VGIC_NR_IRQS);
  752. kvm_debug("Queue IRQ%d\n", irq);
  753. lr = vgic_cpu->vgic_irq_lr_map[irq];
  754. /* Do we have an active interrupt for the same CPUID? */
  755. if (lr != LR_EMPTY &&
  756. (LR_CPUID(vgic_cpu->vgic_lr[lr]) == sgi_source_id)) {
  757. kvm_debug("LR%d piggyback for IRQ%d %x\n",
  758. lr, irq, vgic_cpu->vgic_lr[lr]);
  759. BUG_ON(!test_bit(lr, vgic_cpu->lr_used));
  760. vgic_cpu->vgic_lr[lr] |= GICH_LR_PENDING_BIT;
  761. return true;
  762. }
  763. /* Try to use another LR for this interrupt */
  764. lr = find_first_zero_bit((unsigned long *)vgic_cpu->lr_used,
  765. vgic_cpu->nr_lr);
  766. if (lr >= vgic_cpu->nr_lr)
  767. return false;
  768. kvm_debug("LR%d allocated for IRQ%d %x\n", lr, irq, sgi_source_id);
  769. vgic_cpu->vgic_lr[lr] = MK_LR_PEND(sgi_source_id, irq);
  770. vgic_cpu->vgic_irq_lr_map[irq] = lr;
  771. set_bit(lr, vgic_cpu->lr_used);
  772. if (!vgic_irq_is_edge(vcpu, irq))
  773. vgic_cpu->vgic_lr[lr] |= GICH_LR_EOI;
  774. return true;
  775. }
  776. static bool vgic_queue_sgi(struct kvm_vcpu *vcpu, int irq)
  777. {
  778. struct vgic_dist *dist = &vcpu->kvm->arch.vgic;
  779. unsigned long sources;
  780. int vcpu_id = vcpu->vcpu_id;
  781. int c;
  782. sources = dist->irq_sgi_sources[vcpu_id][irq];
  783. for_each_set_bit(c, &sources, VGIC_MAX_CPUS) {
  784. if (vgic_queue_irq(vcpu, c, irq))
  785. clear_bit(c, &sources);
  786. }
  787. dist->irq_sgi_sources[vcpu_id][irq] = sources;
  788. /*
  789. * If the sources bitmap has been cleared it means that we
  790. * could queue all the SGIs onto link registers (see the
  791. * clear_bit above), and therefore we are done with them in
  792. * our emulated gic and can get rid of them.
  793. */
  794. if (!sources) {
  795. vgic_dist_irq_clear(vcpu, irq);
  796. vgic_cpu_irq_clear(vcpu, irq);
  797. return true;
  798. }
  799. return false;
  800. }
  801. static bool vgic_queue_hwirq(struct kvm_vcpu *vcpu, int irq)
  802. {
  803. if (vgic_irq_is_active(vcpu, irq))
  804. return true; /* level interrupt, already queued */
  805. if (vgic_queue_irq(vcpu, 0, irq)) {
  806. if (vgic_irq_is_edge(vcpu, irq)) {
  807. vgic_dist_irq_clear(vcpu, irq);
  808. vgic_cpu_irq_clear(vcpu, irq);
  809. } else {
  810. vgic_irq_set_active(vcpu, irq);
  811. }
  812. return true;
  813. }
  814. return false;
  815. }
  816. /*
  817. * Fill the list registers with pending interrupts before running the
  818. * guest.
  819. */
  820. static void __kvm_vgic_flush_hwstate(struct kvm_vcpu *vcpu)
  821. {
  822. struct vgic_cpu *vgic_cpu = &vcpu->arch.vgic_cpu;
  823. struct vgic_dist *dist = &vcpu->kvm->arch.vgic;
  824. int i, vcpu_id;
  825. int overflow = 0;
  826. vcpu_id = vcpu->vcpu_id;
  827. /*
  828. * We may not have any pending interrupt, or the interrupts
  829. * may have been serviced from another vcpu. In all cases,
  830. * move along.
  831. */
  832. if (!kvm_vgic_vcpu_pending_irq(vcpu)) {
  833. pr_debug("CPU%d has no pending interrupt\n", vcpu_id);
  834. goto epilog;
  835. }
  836. /* SGIs */
  837. for_each_set_bit(i, vgic_cpu->pending_percpu, VGIC_NR_SGIS) {
  838. if (!vgic_queue_sgi(vcpu, i))
  839. overflow = 1;
  840. }
  841. /* PPIs */
  842. for_each_set_bit_from(i, vgic_cpu->pending_percpu, VGIC_NR_PRIVATE_IRQS) {
  843. if (!vgic_queue_hwirq(vcpu, i))
  844. overflow = 1;
  845. }
  846. /* SPIs */
  847. for_each_set_bit(i, vgic_cpu->pending_shared, VGIC_NR_SHARED_IRQS) {
  848. if (!vgic_queue_hwirq(vcpu, i + VGIC_NR_PRIVATE_IRQS))
  849. overflow = 1;
  850. }
  851. epilog:
  852. if (overflow) {
  853. vgic_cpu->vgic_hcr |= GICH_HCR_UIE;
  854. } else {
  855. vgic_cpu->vgic_hcr &= ~GICH_HCR_UIE;
  856. /*
  857. * We're about to run this VCPU, and we've consumed
  858. * everything the distributor had in store for
  859. * us. Claim we don't have anything pending. We'll
  860. * adjust that if needed while exiting.
  861. */
  862. clear_bit(vcpu_id, &dist->irq_pending_on_cpu);
  863. }
  864. }
  865. static bool vgic_process_maintenance(struct kvm_vcpu *vcpu)
  866. {
  867. struct vgic_cpu *vgic_cpu = &vcpu->arch.vgic_cpu;
  868. bool level_pending = false;
  869. kvm_debug("MISR = %08x\n", vgic_cpu->vgic_misr);
  870. if (vgic_cpu->vgic_misr & GICH_MISR_EOI) {
  871. /*
  872. * Some level interrupts have been EOIed. Clear their
  873. * active bit.
  874. */
  875. int lr, irq;
  876. for_each_set_bit(lr, (unsigned long *)vgic_cpu->vgic_eisr,
  877. vgic_cpu->nr_lr) {
  878. irq = vgic_cpu->vgic_lr[lr] & GICH_LR_VIRTUALID;
  879. vgic_irq_clear_active(vcpu, irq);
  880. vgic_cpu->vgic_lr[lr] &= ~GICH_LR_EOI;
  881. /* Any additional pending interrupt? */
  882. if (vgic_dist_irq_is_pending(vcpu, irq)) {
  883. vgic_cpu_irq_set(vcpu, irq);
  884. level_pending = true;
  885. } else {
  886. vgic_cpu_irq_clear(vcpu, irq);
  887. }
  888. /*
  889. * Despite being EOIed, the LR may not have
  890. * been marked as empty.
  891. */
  892. set_bit(lr, (unsigned long *)vgic_cpu->vgic_elrsr);
  893. vgic_cpu->vgic_lr[lr] &= ~GICH_LR_ACTIVE_BIT;
  894. }
  895. }
  896. if (vgic_cpu->vgic_misr & GICH_MISR_U)
  897. vgic_cpu->vgic_hcr &= ~GICH_HCR_UIE;
  898. return level_pending;
  899. }
  900. /*
  901. * Sync back the VGIC state after a guest run. The distributor lock is
  902. * needed so we don't get preempted in the middle of the state processing.
  903. */
  904. static void __kvm_vgic_sync_hwstate(struct kvm_vcpu *vcpu)
  905. {
  906. struct vgic_cpu *vgic_cpu = &vcpu->arch.vgic_cpu;
  907. struct vgic_dist *dist = &vcpu->kvm->arch.vgic;
  908. int lr, pending;
  909. bool level_pending;
  910. level_pending = vgic_process_maintenance(vcpu);
  911. /* Clear mappings for empty LRs */
  912. for_each_set_bit(lr, (unsigned long *)vgic_cpu->vgic_elrsr,
  913. vgic_cpu->nr_lr) {
  914. int irq;
  915. if (!test_and_clear_bit(lr, vgic_cpu->lr_used))
  916. continue;
  917. irq = vgic_cpu->vgic_lr[lr] & GICH_LR_VIRTUALID;
  918. BUG_ON(irq >= VGIC_NR_IRQS);
  919. vgic_cpu->vgic_irq_lr_map[irq] = LR_EMPTY;
  920. }
  921. /* Check if we still have something up our sleeve... */
  922. pending = find_first_zero_bit((unsigned long *)vgic_cpu->vgic_elrsr,
  923. vgic_cpu->nr_lr);
  924. if (level_pending || pending < vgic_cpu->nr_lr)
  925. set_bit(vcpu->vcpu_id, &dist->irq_pending_on_cpu);
  926. }
  927. void kvm_vgic_flush_hwstate(struct kvm_vcpu *vcpu)
  928. {
  929. struct vgic_dist *dist = &vcpu->kvm->arch.vgic;
  930. if (!irqchip_in_kernel(vcpu->kvm))
  931. return;
  932. spin_lock(&dist->lock);
  933. __kvm_vgic_flush_hwstate(vcpu);
  934. spin_unlock(&dist->lock);
  935. }
  936. void kvm_vgic_sync_hwstate(struct kvm_vcpu *vcpu)
  937. {
  938. struct vgic_dist *dist = &vcpu->kvm->arch.vgic;
  939. if (!irqchip_in_kernel(vcpu->kvm))
  940. return;
  941. spin_lock(&dist->lock);
  942. __kvm_vgic_sync_hwstate(vcpu);
  943. spin_unlock(&dist->lock);
  944. }
  945. int kvm_vgic_vcpu_pending_irq(struct kvm_vcpu *vcpu)
  946. {
  947. struct vgic_dist *dist = &vcpu->kvm->arch.vgic;
  948. if (!irqchip_in_kernel(vcpu->kvm))
  949. return 0;
  950. return test_bit(vcpu->vcpu_id, &dist->irq_pending_on_cpu);
  951. }
  952. static void vgic_kick_vcpus(struct kvm *kvm)
  953. {
  954. struct kvm_vcpu *vcpu;
  955. int c;
  956. /*
  957. * We've injected an interrupt, time to find out who deserves
  958. * a good kick...
  959. */
  960. kvm_for_each_vcpu(c, vcpu, kvm) {
  961. if (kvm_vgic_vcpu_pending_irq(vcpu))
  962. kvm_vcpu_kick(vcpu);
  963. }
  964. }
  965. static int vgic_validate_injection(struct kvm_vcpu *vcpu, int irq, int level)
  966. {
  967. int is_edge = vgic_irq_is_edge(vcpu, irq);
  968. int state = vgic_dist_irq_is_pending(vcpu, irq);
  969. /*
  970. * Only inject an interrupt if:
  971. * - edge triggered and we have a rising edge
  972. * - level triggered and we change level
  973. */
  974. if (is_edge)
  975. return level > state;
  976. else
  977. return level != state;
  978. }
  979. static bool vgic_update_irq_state(struct kvm *kvm, int cpuid,
  980. unsigned int irq_num, bool level)
  981. {
  982. struct vgic_dist *dist = &kvm->arch.vgic;
  983. struct kvm_vcpu *vcpu;
  984. int is_edge, is_level;
  985. int enabled;
  986. bool ret = true;
  987. spin_lock(&dist->lock);
  988. vcpu = kvm_get_vcpu(kvm, cpuid);
  989. is_edge = vgic_irq_is_edge(vcpu, irq_num);
  990. is_level = !is_edge;
  991. if (!vgic_validate_injection(vcpu, irq_num, level)) {
  992. ret = false;
  993. goto out;
  994. }
  995. if (irq_num >= VGIC_NR_PRIVATE_IRQS) {
  996. cpuid = dist->irq_spi_cpu[irq_num - VGIC_NR_PRIVATE_IRQS];
  997. vcpu = kvm_get_vcpu(kvm, cpuid);
  998. }
  999. kvm_debug("Inject IRQ%d level %d CPU%d\n", irq_num, level, cpuid);
  1000. if (level)
  1001. vgic_dist_irq_set(vcpu, irq_num);
  1002. else
  1003. vgic_dist_irq_clear(vcpu, irq_num);
  1004. enabled = vgic_irq_is_enabled(vcpu, irq_num);
  1005. if (!enabled) {
  1006. ret = false;
  1007. goto out;
  1008. }
  1009. if (is_level && vgic_irq_is_active(vcpu, irq_num)) {
  1010. /*
  1011. * Level interrupt in progress, will be picked up
  1012. * when EOId.
  1013. */
  1014. ret = false;
  1015. goto out;
  1016. }
  1017. if (level) {
  1018. vgic_cpu_irq_set(vcpu, irq_num);
  1019. set_bit(cpuid, &dist->irq_pending_on_cpu);
  1020. }
  1021. out:
  1022. spin_unlock(&dist->lock);
  1023. return ret;
  1024. }
  1025. /**
  1026. * kvm_vgic_inject_irq - Inject an IRQ from a device to the vgic
  1027. * @kvm: The VM structure pointer
  1028. * @cpuid: The CPU for PPIs
  1029. * @irq_num: The IRQ number that is assigned to the device
  1030. * @level: Edge-triggered: true: to trigger the interrupt
  1031. * false: to ignore the call
  1032. * Level-sensitive true: activates an interrupt
  1033. * false: deactivates an interrupt
  1034. *
  1035. * The GIC is not concerned with devices being active-LOW or active-HIGH for
  1036. * level-sensitive interrupts. You can think of the level parameter as 1
  1037. * being HIGH and 0 being LOW and all devices being active-HIGH.
  1038. */
  1039. int kvm_vgic_inject_irq(struct kvm *kvm, int cpuid, unsigned int irq_num,
  1040. bool level)
  1041. {
  1042. if (vgic_update_irq_state(kvm, cpuid, irq_num, level))
  1043. vgic_kick_vcpus(kvm);
  1044. return 0;
  1045. }
  1046. static irqreturn_t vgic_maintenance_handler(int irq, void *data)
  1047. {
  1048. /*
  1049. * We cannot rely on the vgic maintenance interrupt to be
  1050. * delivered synchronously. This means we can only use it to
  1051. * exit the VM, and we perform the handling of EOIed
  1052. * interrupts on the exit path (see vgic_process_maintenance).
  1053. */
  1054. return IRQ_HANDLED;
  1055. }
  1056. int kvm_vgic_vcpu_init(struct kvm_vcpu *vcpu)
  1057. {
  1058. struct vgic_cpu *vgic_cpu = &vcpu->arch.vgic_cpu;
  1059. struct vgic_dist *dist = &vcpu->kvm->arch.vgic;
  1060. int i;
  1061. if (!irqchip_in_kernel(vcpu->kvm))
  1062. return 0;
  1063. if (vcpu->vcpu_id >= VGIC_MAX_CPUS)
  1064. return -EBUSY;
  1065. for (i = 0; i < VGIC_NR_IRQS; i++) {
  1066. if (i < VGIC_NR_PPIS)
  1067. vgic_bitmap_set_irq_val(&dist->irq_enabled,
  1068. vcpu->vcpu_id, i, 1);
  1069. if (i < VGIC_NR_PRIVATE_IRQS)
  1070. vgic_bitmap_set_irq_val(&dist->irq_cfg,
  1071. vcpu->vcpu_id, i, VGIC_CFG_EDGE);
  1072. vgic_cpu->vgic_irq_lr_map[i] = LR_EMPTY;
  1073. }
  1074. /*
  1075. * By forcing VMCR to zero, the GIC will restore the binary
  1076. * points to their reset values. Anything else resets to zero
  1077. * anyway.
  1078. */
  1079. vgic_cpu->vgic_vmcr = 0;
  1080. vgic_cpu->nr_lr = vgic_nr_lr;
  1081. vgic_cpu->vgic_hcr = GICH_HCR_EN; /* Get the show on the road... */
  1082. return 0;
  1083. }
  1084. static void vgic_init_maintenance_interrupt(void *info)
  1085. {
  1086. enable_percpu_irq(vgic_maint_irq, 0);
  1087. }
  1088. static int vgic_cpu_notify(struct notifier_block *self,
  1089. unsigned long action, void *cpu)
  1090. {
  1091. switch (action) {
  1092. case CPU_STARTING:
  1093. case CPU_STARTING_FROZEN:
  1094. vgic_init_maintenance_interrupt(NULL);
  1095. break;
  1096. case CPU_DYING:
  1097. case CPU_DYING_FROZEN:
  1098. disable_percpu_irq(vgic_maint_irq);
  1099. break;
  1100. }
  1101. return NOTIFY_OK;
  1102. }
  1103. static struct notifier_block vgic_cpu_nb = {
  1104. .notifier_call = vgic_cpu_notify,
  1105. };
  1106. int kvm_vgic_hyp_init(void)
  1107. {
  1108. int ret;
  1109. struct resource vctrl_res;
  1110. struct resource vcpu_res;
  1111. vgic_node = of_find_compatible_node(NULL, NULL, "arm,cortex-a15-gic");
  1112. if (!vgic_node) {
  1113. kvm_err("error: no compatible vgic node in DT\n");
  1114. return -ENODEV;
  1115. }
  1116. vgic_maint_irq = irq_of_parse_and_map(vgic_node, 0);
  1117. if (!vgic_maint_irq) {
  1118. kvm_err("error getting vgic maintenance irq from DT\n");
  1119. ret = -ENXIO;
  1120. goto out;
  1121. }
  1122. ret = request_percpu_irq(vgic_maint_irq, vgic_maintenance_handler,
  1123. "vgic", kvm_get_running_vcpus());
  1124. if (ret) {
  1125. kvm_err("Cannot register interrupt %d\n", vgic_maint_irq);
  1126. goto out;
  1127. }
  1128. ret = register_cpu_notifier(&vgic_cpu_nb);
  1129. if (ret) {
  1130. kvm_err("Cannot register vgic CPU notifier\n");
  1131. goto out_free_irq;
  1132. }
  1133. ret = of_address_to_resource(vgic_node, 2, &vctrl_res);
  1134. if (ret) {
  1135. kvm_err("Cannot obtain VCTRL resource\n");
  1136. goto out_free_irq;
  1137. }
  1138. vgic_vctrl_base = of_iomap(vgic_node, 2);
  1139. if (!vgic_vctrl_base) {
  1140. kvm_err("Cannot ioremap VCTRL\n");
  1141. ret = -ENOMEM;
  1142. goto out_free_irq;
  1143. }
  1144. vgic_nr_lr = readl_relaxed(vgic_vctrl_base + GICH_VTR);
  1145. vgic_nr_lr = (vgic_nr_lr & 0x3f) + 1;
  1146. ret = create_hyp_io_mappings(vgic_vctrl_base,
  1147. vgic_vctrl_base + resource_size(&vctrl_res),
  1148. vctrl_res.start);
  1149. if (ret) {
  1150. kvm_err("Cannot map VCTRL into hyp\n");
  1151. goto out_unmap;
  1152. }
  1153. kvm_info("%s@%llx IRQ%d\n", vgic_node->name,
  1154. vctrl_res.start, vgic_maint_irq);
  1155. on_each_cpu(vgic_init_maintenance_interrupt, NULL, 1);
  1156. if (of_address_to_resource(vgic_node, 3, &vcpu_res)) {
  1157. kvm_err("Cannot obtain VCPU resource\n");
  1158. ret = -ENXIO;
  1159. goto out_unmap;
  1160. }
  1161. vgic_vcpu_base = vcpu_res.start;
  1162. goto out;
  1163. out_unmap:
  1164. iounmap(vgic_vctrl_base);
  1165. out_free_irq:
  1166. free_percpu_irq(vgic_maint_irq, kvm_get_running_vcpus());
  1167. out:
  1168. of_node_put(vgic_node);
  1169. return ret;
  1170. }
  1171. int kvm_vgic_init(struct kvm *kvm)
  1172. {
  1173. int ret = 0, i;
  1174. mutex_lock(&kvm->lock);
  1175. if (vgic_initialized(kvm))
  1176. goto out;
  1177. if (IS_VGIC_ADDR_UNDEF(kvm->arch.vgic.vgic_dist_base) ||
  1178. IS_VGIC_ADDR_UNDEF(kvm->arch.vgic.vgic_cpu_base)) {
  1179. kvm_err("Need to set vgic cpu and dist addresses first\n");
  1180. ret = -ENXIO;
  1181. goto out;
  1182. }
  1183. ret = kvm_phys_addr_ioremap(kvm, kvm->arch.vgic.vgic_cpu_base,
  1184. vgic_vcpu_base, KVM_VGIC_V2_CPU_SIZE);
  1185. if (ret) {
  1186. kvm_err("Unable to remap VGIC CPU to VCPU\n");
  1187. goto out;
  1188. }
  1189. for (i = VGIC_NR_PRIVATE_IRQS; i < VGIC_NR_IRQS; i += 4)
  1190. vgic_set_target_reg(kvm, 0, i);
  1191. kvm_timer_init(kvm);
  1192. kvm->arch.vgic.ready = true;
  1193. out:
  1194. mutex_unlock(&kvm->lock);
  1195. return ret;
  1196. }
  1197. int kvm_vgic_create(struct kvm *kvm)
  1198. {
  1199. int ret = 0;
  1200. mutex_lock(&kvm->lock);
  1201. if (atomic_read(&kvm->online_vcpus) || kvm->arch.vgic.vctrl_base) {
  1202. ret = -EEXIST;
  1203. goto out;
  1204. }
  1205. spin_lock_init(&kvm->arch.vgic.lock);
  1206. kvm->arch.vgic.vctrl_base = vgic_vctrl_base;
  1207. kvm->arch.vgic.vgic_dist_base = VGIC_ADDR_UNDEF;
  1208. kvm->arch.vgic.vgic_cpu_base = VGIC_ADDR_UNDEF;
  1209. out:
  1210. mutex_unlock(&kvm->lock);
  1211. return ret;
  1212. }
  1213. static bool vgic_ioaddr_overlap(struct kvm *kvm)
  1214. {
  1215. phys_addr_t dist = kvm->arch.vgic.vgic_dist_base;
  1216. phys_addr_t cpu = kvm->arch.vgic.vgic_cpu_base;
  1217. if (IS_VGIC_ADDR_UNDEF(dist) || IS_VGIC_ADDR_UNDEF(cpu))
  1218. return 0;
  1219. if ((dist <= cpu && dist + KVM_VGIC_V2_DIST_SIZE > cpu) ||
  1220. (cpu <= dist && cpu + KVM_VGIC_V2_CPU_SIZE > dist))
  1221. return -EBUSY;
  1222. return 0;
  1223. }
  1224. static int vgic_ioaddr_assign(struct kvm *kvm, phys_addr_t *ioaddr,
  1225. phys_addr_t addr, phys_addr_t size)
  1226. {
  1227. int ret;
  1228. if (!IS_VGIC_ADDR_UNDEF(*ioaddr))
  1229. return -EEXIST;
  1230. if (addr + size < addr)
  1231. return -EINVAL;
  1232. ret = vgic_ioaddr_overlap(kvm);
  1233. if (ret)
  1234. return ret;
  1235. *ioaddr = addr;
  1236. return ret;
  1237. }
  1238. int kvm_vgic_set_addr(struct kvm *kvm, unsigned long type, u64 addr)
  1239. {
  1240. int r = 0;
  1241. struct vgic_dist *vgic = &kvm->arch.vgic;
  1242. if (addr & ~KVM_PHYS_MASK)
  1243. return -E2BIG;
  1244. if (addr & ~PAGE_MASK)
  1245. return -EINVAL;
  1246. mutex_lock(&kvm->lock);
  1247. switch (type) {
  1248. case KVM_VGIC_V2_ADDR_TYPE_DIST:
  1249. r = vgic_ioaddr_assign(kvm, &vgic->vgic_dist_base,
  1250. addr, KVM_VGIC_V2_DIST_SIZE);
  1251. break;
  1252. case KVM_VGIC_V2_ADDR_TYPE_CPU:
  1253. r = vgic_ioaddr_assign(kvm, &vgic->vgic_cpu_base,
  1254. addr, KVM_VGIC_V2_CPU_SIZE);
  1255. break;
  1256. default:
  1257. r = -ENODEV;
  1258. }
  1259. mutex_unlock(&kvm->lock);
  1260. return r;
  1261. }