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 u64
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
, sizeof(features
)) * 8;
80 for (i
= 0; i
< bits
; i
++)
81 if (ioread8(&in_features
[i
/ 8]) & (BIT(i
% 8)))
87 static int mic_finalize_features(struct virtio_device
*vdev
)
90 struct mic_device_desc __iomem
*desc
= to_micvdev(vdev
)->desc
;
91 u8 feature_len
= ioread8(&desc
->feature_len
);
92 /* Second half of bitmap is features we accept. */
93 u8 __iomem
*out_features
=
94 mic_vq_features(desc
) + feature_len
;
96 /* Give virtio_ring a chance to accept features. */
97 vring_transport_features(vdev
);
99 /* Make sure we don't have any features > 32 bits! */
100 BUG_ON((u32
)vdev
->features
!= vdev
->features
);
102 memset_io(out_features
, 0, feature_len
);
103 bits
= min_t(unsigned, feature_len
,
104 sizeof(vdev
->features
)) * 8;
105 for (i
= 0; i
< bits
; i
++) {
106 if (__virtio_test_bit(vdev
, i
))
107 iowrite8(ioread8(&out_features
[i
/ 8]) | (1 << (i
% 8)),
108 &out_features
[i
/ 8]);
115 * Reading and writing elements in config space
117 static void mic_get(struct virtio_device
*vdev
, unsigned int offset
,
118 void *buf
, unsigned len
)
120 struct mic_device_desc __iomem
*desc
= to_micvdev(vdev
)->desc
;
122 if (offset
+ len
> ioread8(&desc
->config_len
))
124 memcpy_fromio(buf
, mic_vq_configspace(desc
) + offset
, len
);
127 static void mic_set(struct virtio_device
*vdev
, unsigned int offset
,
128 const void *buf
, unsigned len
)
130 struct mic_device_desc __iomem
*desc
= to_micvdev(vdev
)->desc
;
132 if (offset
+ len
> ioread8(&desc
->config_len
))
134 memcpy_toio(mic_vq_configspace(desc
) + offset
, buf
, len
);
138 * The operations to get and set the status word just access the status
139 * field of the device descriptor. set_status also interrupts the host
140 * to tell about status changes.
142 static u8
mic_get_status(struct virtio_device
*vdev
)
144 return ioread8(&to_micvdev(vdev
)->desc
->status
);
147 static void mic_set_status(struct virtio_device
*vdev
, u8 status
)
149 struct mic_vdev
*mvdev
= to_micvdev(vdev
);
152 iowrite8(status
, &mvdev
->desc
->status
);
153 mic_send_intr(mvdev
->mdev
, mvdev
->c2h_vdev_db
);
156 /* Inform host on a virtio device reset and wait for ack from host */
157 static void mic_reset_inform_host(struct virtio_device
*vdev
)
159 struct mic_vdev
*mvdev
= to_micvdev(vdev
);
160 struct mic_device_ctrl __iomem
*dc
= mvdev
->dc
;
163 iowrite8(0, &dc
->host_ack
);
164 iowrite8(1, &dc
->vdev_reset
);
165 mic_send_intr(mvdev
->mdev
, mvdev
->c2h_vdev_db
);
167 /* Wait till host completes all card accesses and acks the reset */
168 for (retry
= 100; retry
--;) {
169 if (ioread8(&dc
->host_ack
))
174 dev_dbg(mic_dev(mvdev
), "%s: retry: %d\n", __func__
, retry
);
176 /* Reset status to 0 in case we timed out */
177 iowrite8(0, &mvdev
->desc
->status
);
180 static void mic_reset(struct virtio_device
*vdev
)
182 struct mic_vdev
*mvdev
= to_micvdev(vdev
);
184 dev_dbg(mic_dev(mvdev
), "%s: virtio id %d\n",
185 __func__
, vdev
->id
.device
);
187 mic_reset_inform_host(vdev
);
188 complete_all(&mvdev
->reset_done
);
192 * The virtio_ring code calls this API when it wants to notify the Host.
194 static bool mic_notify(struct virtqueue
*vq
)
196 struct mic_vdev
*mvdev
= vq
->priv
;
198 mic_send_intr(mvdev
->mdev
, mvdev
->c2h_vdev_db
);
202 static void mic_del_vq(struct virtqueue
*vq
, int n
)
204 struct mic_vdev
*mvdev
= to_micvdev(vq
->vdev
);
205 struct vring
*vr
= (struct vring
*)(vq
+ 1);
207 free_pages((unsigned long) vr
->used
, get_order(mvdev
->used_size
[n
]));
208 vring_del_virtqueue(vq
);
209 mic_card_unmap(mvdev
->mdev
, mvdev
->vr
[n
]);
213 static void mic_del_vqs(struct virtio_device
*vdev
)
215 struct mic_vdev
*mvdev
= to_micvdev(vdev
);
216 struct virtqueue
*vq
, *n
;
219 dev_dbg(mic_dev(mvdev
), "%s\n", __func__
);
221 list_for_each_entry_safe(vq
, n
, &vdev
->vqs
, list
)
222 mic_del_vq(vq
, idx
++);
226 * This routine will assign vring's allocated in host/io memory. Code in
227 * virtio_ring.c however continues to access this io memory as if it were local
228 * memory without io accessors.
230 static struct virtqueue
*mic_find_vq(struct virtio_device
*vdev
,
232 void (*callback
)(struct virtqueue
*vq
),
235 struct mic_vdev
*mvdev
= to_micvdev(vdev
);
236 struct mic_vqconfig __iomem
*vqconfig
;
237 struct mic_vqconfig config
;
238 struct virtqueue
*vq
;
240 struct _mic_vring_info __iomem
*info
;
242 int vr_size
, _vr_size
, err
, magic
;
244 u8 type
= ioread8(&mvdev
->desc
->type
);
246 if (index
>= ioread8(&mvdev
->desc
->num_vq
))
247 return ERR_PTR(-ENOENT
);
250 return ERR_PTR(-ENOENT
);
252 /* First assign the vring's allocated in host memory */
253 vqconfig
= mic_vq_config(mvdev
->desc
) + index
;
254 memcpy_fromio(&config
, vqconfig
, sizeof(config
));
255 _vr_size
= vring_size(le16_to_cpu(config
.num
), MIC_VIRTIO_RING_ALIGN
);
256 vr_size
= PAGE_ALIGN(_vr_size
+ sizeof(struct _mic_vring_info
));
257 va
= mic_card_map(mvdev
->mdev
, le64_to_cpu(config
.address
), vr_size
);
259 return ERR_PTR(-ENOMEM
);
260 mvdev
->vr
[index
] = va
;
261 memset_io(va
, 0x0, _vr_size
);
262 vq
= vring_new_virtqueue(index
, le16_to_cpu(config
.num
),
263 MIC_VIRTIO_RING_ALIGN
, vdev
, false,
264 (void __force
*)va
, mic_notify
, callback
,
270 info
= va
+ _vr_size
;
271 magic
= ioread32(&info
->magic
);
273 if (WARN(magic
!= MIC_MAGIC
+ type
+ index
, "magic mismatch")) {
278 /* Allocate and reassign used ring now */
279 mvdev
->used_size
[index
] = PAGE_ALIGN(sizeof(__u16
) * 3 +
280 sizeof(struct vring_used_elem
) *
281 le16_to_cpu(config
.num
));
282 used
= (void *)__get_free_pages(GFP_KERNEL
| __GFP_ZERO
,
283 get_order(mvdev
->used_size
[index
]));
286 dev_err(mic_dev(mvdev
), "%s %d err %d\n",
287 __func__
, __LINE__
, err
);
290 iowrite64(virt_to_phys(used
), &vqconfig
->used_address
);
293 * To reassign the used ring here we are directly accessing
294 * struct vring_virtqueue which is a private data structure
295 * in virtio_ring.c. At the minimum, a BUILD_BUG_ON() in
296 * vring_new_virtqueue() would ensure that
297 * (&vq->vring == (struct vring *) (&vq->vq + 1));
299 vr
= (struct vring
*)(vq
+ 1);
305 vring_del_virtqueue(vq
);
307 mic_card_unmap(mvdev
->mdev
, mvdev
->vr
[index
]);
311 static int mic_find_vqs(struct virtio_device
*vdev
, unsigned nvqs
,
312 struct virtqueue
*vqs
[],
313 vq_callback_t
*callbacks
[],
316 struct mic_vdev
*mvdev
= to_micvdev(vdev
);
317 struct mic_device_ctrl __iomem
*dc
= mvdev
->dc
;
320 /* We must have this many virtqueues. */
321 if (nvqs
> ioread8(&mvdev
->desc
->num_vq
))
324 for (i
= 0; i
< nvqs
; ++i
) {
325 dev_dbg(mic_dev(mvdev
), "%s: %d: %s\n",
326 __func__
, i
, names
[i
]);
327 vqs
[i
] = mic_find_vq(vdev
, i
, callbacks
[i
], names
[i
]);
328 if (IS_ERR(vqs
[i
])) {
329 err
= PTR_ERR(vqs
[i
]);
334 iowrite8(1, &dc
->used_address_updated
);
336 * Send an interrupt to the host to inform it that used
337 * rings have been re-assigned.
339 mic_send_intr(mvdev
->mdev
, mvdev
->c2h_vdev_db
);
340 for (retry
= 100; retry
--;) {
341 if (!ioread8(&dc
->used_address_updated
))
346 dev_dbg(mic_dev(mvdev
), "%s: retry: %d\n", __func__
, retry
);
359 * The config ops structure as defined by virtio config
361 static struct virtio_config_ops mic_vq_config_ops
= {
362 .get_features
= mic_get_features
,
363 .finalize_features
= mic_finalize_features
,
366 .get_status
= mic_get_status
,
367 .set_status
= mic_set_status
,
369 .find_vqs
= mic_find_vqs
,
370 .del_vqs
= mic_del_vqs
,
374 mic_virtio_intr_handler(int irq
, void *data
)
376 struct mic_vdev
*mvdev
= data
;
377 struct virtqueue
*vq
;
379 mic_ack_interrupt(mvdev
->mdev
);
380 list_for_each_entry(vq
, &mvdev
->vdev
.vqs
, list
)
381 vring_interrupt(0, vq
);
386 static void mic_virtio_release_dev(struct device
*_d
)
389 * No need for a release method similar to virtio PCI.
390 * Provide an empty one to avoid getting a warning from core.
395 * adds a new device and register it with virtio
396 * appropriate drivers are loaded by the device model
398 static int mic_add_device(struct mic_device_desc __iomem
*d
,
399 unsigned int offset
, struct mic_driver
*mdrv
)
401 struct mic_vdev
*mvdev
;
404 u8 type
= ioread8(&d
->type
);
406 mvdev
= kzalloc(sizeof(*mvdev
), GFP_KERNEL
);
408 dev_err(mdrv
->dev
, "Cannot allocate mic dev %u type %u\n",
413 mvdev
->mdev
= &mdrv
->mdev
;
414 mvdev
->vdev
.dev
.parent
= mdrv
->dev
;
415 mvdev
->vdev
.dev
.release
= mic_virtio_release_dev
;
416 mvdev
->vdev
.id
.device
= type
;
417 mvdev
->vdev
.config
= &mic_vq_config_ops
;
419 mvdev
->dc
= (void __iomem
*)d
+ mic_aligned_desc_size(d
);
420 init_completion(&mvdev
->reset_done
);
422 virtio_db
= mic_next_card_db();
423 mvdev
->virtio_cookie
= mic_request_card_irq(mic_virtio_intr_handler
,
424 NULL
, "virtio intr", mvdev
, virtio_db
);
425 if (IS_ERR(mvdev
->virtio_cookie
)) {
426 ret
= PTR_ERR(mvdev
->virtio_cookie
);
429 iowrite8((u8
)virtio_db
, &mvdev
->dc
->h2c_vdev_db
);
430 mvdev
->c2h_vdev_db
= ioread8(&mvdev
->dc
->c2h_vdev_db
);
432 ret
= register_virtio_device(&mvdev
->vdev
);
434 dev_err(mic_dev(mvdev
),
435 "Failed to register mic device %u type %u\n",
439 iowrite64((u64
)mvdev
, &mvdev
->dc
->vdev
);
440 dev_dbg(mic_dev(mvdev
), "%s: registered mic device %u type %u mvdev %p\n",
441 __func__
, offset
, type
, mvdev
);
446 mic_free_card_irq(mvdev
->virtio_cookie
, mvdev
);
453 * match for a mic device with a specific desc pointer
455 static int mic_match_desc(struct device
*dev
, void *data
)
457 struct virtio_device
*vdev
= dev_to_virtio(dev
);
458 struct mic_vdev
*mvdev
= to_micvdev(vdev
);
460 return mvdev
->desc
== (void __iomem
*)data
;
463 static void mic_handle_config_change(struct mic_device_desc __iomem
*d
,
464 unsigned int offset
, struct mic_driver
*mdrv
)
466 struct mic_device_ctrl __iomem
*dc
467 = (void __iomem
*)d
+ mic_aligned_desc_size(d
);
468 struct mic_vdev
*mvdev
= (struct mic_vdev
*)ioread64(&dc
->vdev
);
470 if (ioread8(&dc
->config_change
) != MIC_VIRTIO_PARAM_CONFIG_CHANGED
)
473 dev_dbg(mdrv
->dev
, "%s %d\n", __func__
, __LINE__
);
474 virtio_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
, NULL
,
610 "virtio_config_intr", mdrv
,
612 if (IS_ERR(virtio_config_cookie
)) {
613 rc
= PTR_ERR(virtio_config_cookie
);
617 bootparam
= mdrv
->dp
;
618 iowrite8(config_db
, &bootparam
->h2c_config_db
);
625 * Uninit function for virtio
627 void mic_devices_uninit(struct mic_driver
*mdrv
)
629 struct mic_bootparam __iomem
*bootparam
= mdrv
->dp
;
630 iowrite8(-1, &bootparam
->h2c_config_db
);
631 mic_free_card_irq(virtio_config_cookie
, mdrv
);
632 flush_work(&mdrv
->hotplug_work
);
633 mic_scan_devices(mdrv
, REMOVE_DEVICES
);