]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
virtio: fix get_config / set_config for legacy VirtIO targets
authorDmitry Baryshkov <dmitry.baryshkov@linaro.org>
Mon, 12 Feb 2024 07:37:08 +0000 (09:37 +0200)
committerTom Rini <trini@konsulko.com>
Tue, 5 Mar 2024 13:37:53 +0000 (08:37 -0500)
The functions virtio_pci_get_config() and virtio_pci_set_config() don't
take the offset into account when reading the config space. For example
this manifests when U-Boot tries to read the MAC address of the VirtIO
networking device. It reads 6 equa bytes instead of the proper addess.

Fix those functions by taking the offset in the config space into
account.

Fixes: 4135e10732a0 ("virtio: Add virtio over pci transport driver")
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
drivers/virtio/virtio_pci_legacy.c

index cf5dfb17a94d65ebf9ef325a5805a9529abf8cbf..aa89604ae84dc80884126f0cb0489d88cec12bc0 100644 (file)
@@ -107,7 +107,7 @@ static int virtio_pci_get_config(struct udevice *udev, unsigned int offset,
        int i;
 
        for (i = 0; i < len; i++)
-               ptr[i] = ioread8(ioaddr + i);
+               ptr[i] = ioread8(ioaddr + offset + i);
 
        return 0;
 }
@@ -121,7 +121,7 @@ static int virtio_pci_set_config(struct udevice *udev, unsigned int offset,
        int i;
 
        for (i = 0; i < len; i++)
-               iowrite8(ptr[i], ioaddr + i);
+               iowrite8(ptr[i], ioaddr + offset + i);
 
        return 0;
 }