2 * Intel MIC Platform Software Stack (MPSS)
4 * Copyright(c) 2013 Intel Corporation.
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License, version 2, as
8 * published by the Free Software Foundation.
10 * This program is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * General Public License for more details.
15 * The full GNU General Public License is included in this distribution in
16 * the file called "COPYING".
18 * Disclaimer: The codes contained in these modules may be specific to
19 * the Intel Software Development Platform codenamed: Knights Ferry, and
20 * the Intel product codenamed: Knights Corner, and are not backward
21 * compatible with other Intel products. Additionally, Intel will NOT
22 * support the codes or instruction set in future products.
26 * virtio for kvm on s390
28 * Copyright IBM Corp. 2008
30 * This program is free software; you can redistribute it and/or modify
31 * it under the terms of the GNU General Public License (version 2 only)
32 * as published by the Free Software Foundation.
34 * Author(s): Christian Borntraeger <borntraeger@de.ibm.com>
36 * Intel MIC Card driver.
39 #include <linux/delay.h>
40 #include <linux/slab.h>
41 #include <linux/virtio_config.h>
43 #include "../common/mic_dev.h"
44 #include "mic_virtio.h"
46 #define VIRTIO_SUBCODE_64 0x0D00
48 #define MIC_MAX_VRINGS 4
50 struct virtio_device vdev
;
51 struct mic_device_desc __iomem
*desc
;
52 struct mic_device_ctrl __iomem
*dc
;
53 struct mic_device
*mdev
;
54 void __iomem
*vr
[MIC_MAX_VRINGS
];
55 int used_size
[MIC_MAX_VRINGS
];
56 struct completion reset_done
;
57 struct mic_irq
*virtio_cookie
;
61 static struct mic_irq
*virtio_config_cookie
;
62 #define to_micvdev(vd) container_of(vd, struct mic_vdev, vdev)
64 /* Helper API to obtain the parent of the virtio device */
65 static inline struct device
*mic_dev(struct mic_vdev
*mvdev
)
67 return mvdev
->vdev
.dev
.parent
;
70 /* This gets the device's feature bits. */
71 static u32
mic_get_features(struct virtio_device
*vdev
)
75 struct mic_device_desc __iomem
*desc
= to_micvdev(vdev
)->desc
;
76 u8 __iomem
*in_features
= mic_vq_features(desc
);
77 int feature_len
= ioread8(&desc
->feature_len
);
79 bits
= min_t(unsigned, feature_len
,
80 sizeof(vdev
->features
)) * 8;
81 for (i
= 0; i
< bits
; i
++)
82 if (ioread8(&in_features
[i
/ 8]) & (BIT(i
% 8)))
88 static void mic_finalize_features(struct virtio_device
*vdev
)
91 struct mic_device_desc __iomem
*desc
= to_micvdev(vdev
)->desc
;
92 u8 feature_len
= ioread8(&desc
->feature_len
);
93 /* Second half of bitmap is features we accept. */
94 u8 __iomem
*out_features
=
95 mic_vq_features(desc
) + feature_len
;
97 /* Give virtio_ring a chance to accept features. */
98 vring_transport_features(vdev
);
100 memset_io(out_features
, 0, feature_len
);
101 bits
= min_t(unsigned, feature_len
,
102 sizeof(vdev
->features
)) * 8;
103 for (i
= 0; i
< bits
; i
++) {
104 if (test_bit(i
, vdev
->features
))
105 iowrite8(ioread8(&out_features
[i
/ 8]) | (1 << (i
% 8)),
106 &out_features
[i
/ 8]);
111 * Reading and writing elements in config space
113 static void mic_get(struct virtio_device
*vdev
, unsigned int offset
,
114 void *buf
, unsigned len
)
116 struct mic_device_desc __iomem
*desc
= to_micvdev(vdev
)->desc
;
118 if (offset
+ len
> ioread8(&desc
->config_len
))
120 memcpy_fromio(buf
, mic_vq_configspace(desc
) + offset
, len
);
123 static void mic_set(struct virtio_device
*vdev
, unsigned int offset
,
124 const void *buf
, unsigned len
)
126 struct mic_device_desc __iomem
*desc
= to_micvdev(vdev
)->desc
;
128 if (offset
+ len
> ioread8(&desc
->config_len
))
130 memcpy_toio(mic_vq_configspace(desc
) + offset
, buf
, len
);
134 * The operations to get and set the status word just access the status
135 * field of the device descriptor. set_status also interrupts the host
136 * to tell about status changes.
138 static u8
mic_get_status(struct virtio_device
*vdev
)
140 return ioread8(&to_micvdev(vdev
)->desc
->status
);
143 static void mic_set_status(struct virtio_device
*vdev
, u8 status
)
145 struct mic_vdev
*mvdev
= to_micvdev(vdev
);
148 iowrite8(status
, &mvdev
->desc
->status
);
149 mic_send_intr(mvdev
->mdev
, mvdev
->c2h_vdev_db
);
152 /* Inform host on a virtio device reset and wait for ack from host */
153 static void mic_reset_inform_host(struct virtio_device
*vdev
)
155 struct mic_vdev
*mvdev
= to_micvdev(vdev
);
156 struct mic_device_ctrl __iomem
*dc
= mvdev
->dc
;
159 iowrite8(0, &dc
->host_ack
);
160 iowrite8(1, &dc
->vdev_reset
);
161 mic_send_intr(mvdev
->mdev
, mvdev
->c2h_vdev_db
);
163 /* Wait till host completes all card accesses and acks the reset */
164 for (retry
= 100; retry
--;) {
165 if (ioread8(&dc
->host_ack
))
170 dev_dbg(mic_dev(mvdev
), "%s: retry: %d\n", __func__
, retry
);
172 /* Reset status to 0 in case we timed out */
173 iowrite8(0, &mvdev
->desc
->status
);
176 static void mic_reset(struct virtio_device
*vdev
)
178 struct mic_vdev
*mvdev
= to_micvdev(vdev
);
180 dev_dbg(mic_dev(mvdev
), "%s: virtio id %d\n",
181 __func__
, vdev
->id
.device
);
183 mic_reset_inform_host(vdev
);
184 complete_all(&mvdev
->reset_done
);
188 * The virtio_ring code calls this API when it wants to notify the Host.
190 static bool mic_notify(struct virtqueue
*vq
)
192 struct mic_vdev
*mvdev
= vq
->priv
;
194 mic_send_intr(mvdev
->mdev
, mvdev
->c2h_vdev_db
);
198 static void mic_del_vq(struct virtqueue
*vq
, int n
)
200 struct mic_vdev
*mvdev
= to_micvdev(vq
->vdev
);
201 struct vring
*vr
= (struct vring
*)(vq
+ 1);
203 free_pages((unsigned long) vr
->used
, get_order(mvdev
->used_size
[n
]));
204 vring_del_virtqueue(vq
);
205 mic_card_unmap(mvdev
->mdev
, mvdev
->vr
[n
]);
209 static void mic_del_vqs(struct virtio_device
*vdev
)
211 struct mic_vdev
*mvdev
= to_micvdev(vdev
);
212 struct virtqueue
*vq
, *n
;
215 dev_dbg(mic_dev(mvdev
), "%s\n", __func__
);
217 list_for_each_entry_safe(vq
, n
, &vdev
->vqs
, list
)
218 mic_del_vq(vq
, idx
++);
222 * This routine will assign vring's allocated in host/io memory. Code in
223 * virtio_ring.c however continues to access this io memory as if it were local
224 * memory without io accessors.
226 static struct virtqueue
*mic_find_vq(struct virtio_device
*vdev
,
228 void (*callback
)(struct virtqueue
*vq
),
231 struct mic_vdev
*mvdev
= to_micvdev(vdev
);
232 struct mic_vqconfig __iomem
*vqconfig
;
233 struct mic_vqconfig config
;
234 struct virtqueue
*vq
;
236 struct _mic_vring_info __iomem
*info
;
238 int vr_size
, _vr_size
, err
, magic
;
240 u8 type
= ioread8(&mvdev
->desc
->type
);
242 if (index
>= ioread8(&mvdev
->desc
->num_vq
))
243 return ERR_PTR(-ENOENT
);
246 return ERR_PTR(-ENOENT
);
248 /* First assign the vring's allocated in host memory */
249 vqconfig
= mic_vq_config(mvdev
->desc
) + index
;
250 memcpy_fromio(&config
, vqconfig
, sizeof(config
));
251 _vr_size
= vring_size(le16_to_cpu(config
.num
), MIC_VIRTIO_RING_ALIGN
);
252 vr_size
= PAGE_ALIGN(_vr_size
+ sizeof(struct _mic_vring_info
));
253 va
= mic_card_map(mvdev
->mdev
, le64_to_cpu(config
.address
), vr_size
);
255 return ERR_PTR(-ENOMEM
);
256 mvdev
->vr
[index
] = va
;
257 memset_io(va
, 0x0, _vr_size
);
258 vq
= vring_new_virtqueue(index
, le16_to_cpu(config
.num
),
259 MIC_VIRTIO_RING_ALIGN
, vdev
, false,
260 (void __force
*)va
, mic_notify
, callback
,
266 info
= va
+ _vr_size
;
267 magic
= ioread32(&info
->magic
);
269 if (WARN(magic
!= MIC_MAGIC
+ type
+ index
, "magic mismatch")) {
274 /* Allocate and reassign used ring now */
275 mvdev
->used_size
[index
] = PAGE_ALIGN(sizeof(__u16
) * 3 +
276 sizeof(struct vring_used_elem
) *
277 le16_to_cpu(config
.num
));
278 used
= (void *)__get_free_pages(GFP_KERNEL
| __GFP_ZERO
,
279 get_order(mvdev
->used_size
[index
]));
282 dev_err(mic_dev(mvdev
), "%s %d err %d\n",
283 __func__
, __LINE__
, err
);
286 iowrite64(virt_to_phys(used
), &vqconfig
->used_address
);
289 * To reassign the used ring here we are directly accessing
290 * struct vring_virtqueue which is a private data structure
291 * in virtio_ring.c. At the minimum, a BUILD_BUG_ON() in
292 * vring_new_virtqueue() would ensure that
293 * (&vq->vring == (struct vring *) (&vq->vq + 1));
295 vr
= (struct vring
*)(vq
+ 1);
301 vring_del_virtqueue(vq
);
303 mic_card_unmap(mvdev
->mdev
, mvdev
->vr
[index
]);
307 static int mic_find_vqs(struct virtio_device
*vdev
, unsigned nvqs
,
308 struct virtqueue
*vqs
[],
309 vq_callback_t
*callbacks
[],
312 struct mic_vdev
*mvdev
= to_micvdev(vdev
);
313 struct mic_device_ctrl __iomem
*dc
= mvdev
->dc
;
316 /* We must have this many virtqueues. */
317 if (nvqs
> ioread8(&mvdev
->desc
->num_vq
))
320 for (i
= 0; i
< nvqs
; ++i
) {
321 dev_dbg(mic_dev(mvdev
), "%s: %d: %s\n",
322 __func__
, i
, names
[i
]);
323 vqs
[i
] = mic_find_vq(vdev
, i
, callbacks
[i
], names
[i
]);
324 if (IS_ERR(vqs
[i
])) {
325 err
= PTR_ERR(vqs
[i
]);
330 iowrite8(1, &dc
->used_address_updated
);
332 * Send an interrupt to the host to inform it that used
333 * rings have been re-assigned.
335 mic_send_intr(mvdev
->mdev
, mvdev
->c2h_vdev_db
);
336 for (retry
= 100; retry
--;) {
337 if (!ioread8(&dc
->used_address_updated
))
342 dev_dbg(mic_dev(mvdev
), "%s: retry: %d\n", __func__
, retry
);
355 * The config ops structure as defined by virtio config
357 static struct virtio_config_ops mic_vq_config_ops
= {
358 .get_features
= mic_get_features
,
359 .finalize_features
= mic_finalize_features
,
362 .get_status
= mic_get_status
,
363 .set_status
= mic_set_status
,
365 .find_vqs
= mic_find_vqs
,
366 .del_vqs
= mic_del_vqs
,
370 mic_virtio_intr_handler(int irq
, void *data
)
372 struct mic_vdev
*mvdev
= data
;
373 struct virtqueue
*vq
;
375 mic_ack_interrupt(mvdev
->mdev
);
376 list_for_each_entry(vq
, &mvdev
->vdev
.vqs
, list
)
377 vring_interrupt(0, vq
);
382 static void mic_virtio_release_dev(struct device
*_d
)
385 * No need for a release method similar to virtio PCI.
386 * Provide an empty one to avoid getting a warning from core.
391 * adds a new device and register it with virtio
392 * appropriate drivers are loaded by the device model
394 static int mic_add_device(struct mic_device_desc __iomem
*d
,
395 unsigned int offset
, struct mic_driver
*mdrv
)
397 struct mic_vdev
*mvdev
;
400 u8 type
= ioread8(&d
->type
);
402 mvdev
= kzalloc(sizeof(*mvdev
), GFP_KERNEL
);
404 dev_err(mdrv
->dev
, "Cannot allocate mic dev %u type %u\n",
409 mvdev
->mdev
= &mdrv
->mdev
;
410 mvdev
->vdev
.dev
.parent
= mdrv
->dev
;
411 mvdev
->vdev
.dev
.release
= mic_virtio_release_dev
;
412 mvdev
->vdev
.id
.device
= type
;
413 mvdev
->vdev
.config
= &mic_vq_config_ops
;
415 mvdev
->dc
= (void __iomem
*)d
+ mic_aligned_desc_size(d
);
416 init_completion(&mvdev
->reset_done
);
418 virtio_db
= mic_next_card_db();
419 mvdev
->virtio_cookie
= mic_request_card_irq(mic_virtio_intr_handler
,
420 "virtio intr", mvdev
, virtio_db
);
421 if (IS_ERR(mvdev
->virtio_cookie
)) {
422 ret
= PTR_ERR(mvdev
->virtio_cookie
);
425 iowrite8((u8
)virtio_db
, &mvdev
->dc
->h2c_vdev_db
);
426 mvdev
->c2h_vdev_db
= ioread8(&mvdev
->dc
->c2h_vdev_db
);
428 ret
= register_virtio_device(&mvdev
->vdev
);
430 dev_err(mic_dev(mvdev
),
431 "Failed to register mic device %u type %u\n",
435 iowrite64((u64
)mvdev
, &mvdev
->dc
->vdev
);
436 dev_dbg(mic_dev(mvdev
), "%s: registered mic device %u type %u mvdev %p\n",
437 __func__
, offset
, type
, mvdev
);
442 mic_free_card_irq(mvdev
->virtio_cookie
, mvdev
);
449 * match for a mic device with a specific desc pointer
451 static int mic_match_desc(struct device
*dev
, void *data
)
453 struct virtio_device
*vdev
= dev_to_virtio(dev
);
454 struct mic_vdev
*mvdev
= to_micvdev(vdev
);
456 return mvdev
->desc
== (void __iomem
*)data
;
459 static void mic_handle_config_change(struct mic_device_desc __iomem
*d
,
460 unsigned int offset
, struct mic_driver
*mdrv
)
462 struct mic_device_ctrl __iomem
*dc
463 = (void __iomem
*)d
+ mic_aligned_desc_size(d
);
464 struct mic_vdev
*mvdev
= (struct mic_vdev
*)ioread64(&dc
->vdev
);
465 struct virtio_driver
*drv
;
467 if (ioread8(&dc
->config_change
) != MIC_VIRTIO_PARAM_CONFIG_CHANGED
)
470 dev_dbg(mdrv
->dev
, "%s %d\n", __func__
, __LINE__
);
471 drv
= container_of(mvdev
->vdev
.dev
.driver
,
472 struct virtio_driver
, driver
);
473 if (drv
->config_changed
)
474 drv
->config_changed(&mvdev
->vdev
);
475 iowrite8(1, &dc
->guest_ack
);
479 * removes a virtio device if a hot remove event has been
480 * requested by the host.
482 static int mic_remove_device(struct mic_device_desc __iomem
*d
,
483 unsigned int offset
, struct mic_driver
*mdrv
)
485 struct mic_device_ctrl __iomem
*dc
486 = (void __iomem
*)d
+ mic_aligned_desc_size(d
);
487 struct mic_vdev
*mvdev
= (struct mic_vdev
*)ioread64(&dc
->vdev
);
491 if (ioread8(&dc
->config_change
) == MIC_VIRTIO_PARAM_DEV_REMOVE
) {
493 "%s %d config_change %d type %d mvdev %p\n",
495 ioread8(&dc
->config_change
), ioread8(&d
->type
), mvdev
);
497 status
= ioread8(&d
->status
);
498 reinit_completion(&mvdev
->reset_done
);
499 unregister_virtio_device(&mvdev
->vdev
);
500 mic_free_card_irq(mvdev
->virtio_cookie
, mvdev
);
501 if (status
& VIRTIO_CONFIG_S_DRIVER_OK
)
502 wait_for_completion(&mvdev
->reset_done
);
504 iowrite8(1, &dc
->guest_ack
);
505 dev_dbg(mdrv
->dev
, "%s %d guest_ack %d\n",
506 __func__
, __LINE__
, ioread8(&dc
->guest_ack
));
513 #define REMOVE_DEVICES true
515 static void mic_scan_devices(struct mic_driver
*mdrv
, bool remove
)
519 struct mic_device_desc __iomem
*d
;
520 struct mic_device_ctrl __iomem
*dc
;
524 for (i
= sizeof(struct mic_bootparam
); i
< MIC_DP_SIZE
;
525 i
+= mic_total_desc_size(d
)) {
527 dc
= (void __iomem
*)d
+ mic_aligned_desc_size(d
);
529 * This read barrier is paired with the corresponding write
530 * barrier on the host which is inserted before adding or
531 * removing a virtio device descriptor, by updating the type.
534 type
= ioread8(&d
->type
);
543 /* device already exists */
544 dev
= device_find_child(mdrv
->dev
, (void __force
*)d
,
548 iowrite8(MIC_VIRTIO_PARAM_DEV_REMOVE
,
551 mic_handle_config_change(d
, i
, mdrv
);
552 ret
= mic_remove_device(d
, i
, mdrv
);
554 iowrite8(-1, &d
->type
);
556 iowrite8(0, &dc
->config_change
);
557 iowrite8(0, &dc
->guest_ack
);
563 dev_dbg(mdrv
->dev
, "%s %d Adding new virtio device %p\n",
564 __func__
, __LINE__
, d
);
566 mic_add_device(d
, i
, mdrv
);
571 * mic_hotplug_device tries to find changes in the device page.
573 static void mic_hotplug_devices(struct work_struct
*work
)
575 struct mic_driver
*mdrv
= container_of(work
,
576 struct mic_driver
, hotplug_work
);
578 mic_scan_devices(mdrv
, !REMOVE_DEVICES
);
582 * Interrupt handler for hot plug/config changes etc.
585 mic_extint_handler(int irq
, void *data
)
587 struct mic_driver
*mdrv
= (struct mic_driver
*)data
;
589 dev_dbg(mdrv
->dev
, "%s %d hotplug work\n",
591 mic_ack_interrupt(&mdrv
->mdev
);
592 schedule_work(&mdrv
->hotplug_work
);
597 * Init function for virtio
599 int mic_devices_init(struct mic_driver
*mdrv
)
602 struct mic_bootparam __iomem
*bootparam
;
605 INIT_WORK(&mdrv
->hotplug_work
, mic_hotplug_devices
);
606 mic_scan_devices(mdrv
, !REMOVE_DEVICES
);
608 config_db
= mic_next_card_db();
609 virtio_config_cookie
= mic_request_card_irq(mic_extint_handler
,
610 "virtio_config_intr", mdrv
, config_db
);
611 if (IS_ERR(virtio_config_cookie
)) {
612 rc
= PTR_ERR(virtio_config_cookie
);
616 bootparam
= mdrv
->dp
;
617 iowrite8(config_db
, &bootparam
->h2c_config_db
);
624 * Uninit function for virtio
626 void mic_devices_uninit(struct mic_driver
*mdrv
)
628 struct mic_bootparam __iomem
*bootparam
= mdrv
->dp
;
629 iowrite8(-1, &bootparam
->h2c_config_db
);
630 mic_free_card_irq(virtio_config_cookie
, mdrv
);
631 flush_work(&mdrv
->hotplug_work
);
632 mic_scan_devices(mdrv
, REMOVE_DEVICES
);