]> xenbits.xensource.com Git - osstest/seabios.git/commitdiff
virtio-mmio: read/write the hi 32 features for mmio
authorXuan Zhuo <xuanzhuo@linux.alibaba.com>
Mon, 14 Nov 2022 03:58:17 +0000 (11:58 +0800)
committerGerd Hoffmann <kraxel@redhat.com>
Wed, 23 Nov 2022 08:28:54 +0000 (09:28 +0100)
Under mmio, when we read the feature from the device, we should read the
high 32-bit part. Similarly, when writing the feature back, we should
also write back the high 32-bit feature.

Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: Michael S. Tsirkin <mst@redhat.com>
Message-Id: <20221114035818.109511-2-xuanzhuo@linux.alibaba.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
src/hw/virtio-pci.c

index 213c49777c40c5b31bae86138e026e4b52a6d596..89a4f5054b999d10b8ada517e2bea46419512a6a 100644 (file)
@@ -193,7 +193,8 @@ u64 vp_get_features(struct vp_device *vp)
     if (vp->use_mmio) {
         vp_write(&vp->common, virtio_mmio_cfg, device_feature_select, 0);
         f0 = vp_read(&vp->common, virtio_mmio_cfg, device_feature);
-        f1 = 0;
+        vp_write(&vp->common, virtio_mmio_cfg, device_feature_select, 1);
+        f1 = vp_read(&vp->common, virtio_mmio_cfg, device_feature);
     } else if (vp->use_modern) {
         vp_write(&vp->common, virtio_pci_common_cfg, device_feature_select, 0);
         f0 = vp_read(&vp->common, virtio_pci_common_cfg, device_feature);
@@ -214,8 +215,10 @@ void vp_set_features(struct vp_device *vp, u64 features)
     f1 = features >> 32;
 
     if (vp->use_mmio) {
-        vp_write(&vp->common, virtio_mmio_cfg, guest_feature_select, f0);
+        vp_write(&vp->common, virtio_mmio_cfg, guest_feature_select, 0);
         vp_write(&vp->common, virtio_mmio_cfg, guest_feature, f0);
+        vp_write(&vp->common, virtio_mmio_cfg, guest_feature_select, 1);
+        vp_write(&vp->common, virtio_mmio_cfg, guest_feature, f1);
     } else if (vp->use_modern) {
         vp_write(&vp->common, virtio_pci_common_cfg, guest_feature_select, 0);
         vp_write(&vp->common, virtio_pci_common_cfg, guest_feature, f0);