
On 12/28/19 7:09 AM, Heinrich Schuchardt wrote:
#define BUFFER_SIZE 16UL
static int virtio_rng_read(struct udevice *dev, void *data, size_t len) { int ret; unsigned int rsize = 0; unsigned char buf[BUFFER_SIZE];
This should be unsigned char buf[BUFFER_SIZE] __aligned(4);
unsigned char *ptr = data; struct virtio_sg sg; struct virtio_sg *sgs = sg; struct virtio_rng_priv *priv = dev_get_priv(dev);
while (len) { sg.addr = buf; sg.length = min(BUFFER_SIZE, len);
ret = virtqueue_add(priv->rng_vq, &sgs, 0, 1); if (ret) return ret;
virtqueue_kick(priv->rng_vq);
while (!virtqueue_get_buf(priv->rng_vq, &rsize)) ; memcpy(ptr, buf, rsize); len -= rsize; ptr += rsize; }
return 0; }