Recent vanilla Raspberry Pi kernels started to make use of the hardware random number generator in BCM2835 SoC. As a result, those kernels wouldn't work anymore under QEMU but rather just freeze during the boot process. This patch implements a trivial BCM2835 compatible RNG, and adds it as a peripheral to BCM2835 platform, which allows to boot a vanilla Raspberry Pi kernel under Qemu. Changes since v1: * Prevented guest from writing [31..20] bits in rng_status * Removed redundant minimum_version_id_old * Added field entries for the state * Changed realize function to reset Signed-off-by: Marcin Chojnacki <marcinch7@gmail.com> Message-id: 20170210210857.47893-1-marcinch7@gmail.com Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
28 lines
590 B
C
28 lines
590 B
C
/*
|
|
* BCM2835 Random Number Generator emulation
|
|
*
|
|
* Copyright (C) 2017 Marcin Chojnacki <marcinch7@gmail.com>
|
|
*
|
|
* This work is licensed under the terms of the GNU GPL, version 2 or later.
|
|
* See the COPYING file in the top-level directory.
|
|
*/
|
|
|
|
#ifndef BCM2835_RNG_H
|
|
#define BCM2835_RNG_H
|
|
|
|
#include "hw/sysbus.h"
|
|
|
|
#define TYPE_BCM2835_RNG "bcm2835-rng"
|
|
#define BCM2835_RNG(obj) \
|
|
OBJECT_CHECK(BCM2835RngState, (obj), TYPE_BCM2835_RNG)
|
|
|
|
typedef struct {
|
|
SysBusDevice busdev;
|
|
MemoryRegion iomem;
|
|
|
|
uint32_t rng_ctrl;
|
|
uint32_t rng_status;
|
|
} BCM2835RngState;
|
|
|
|
#endif
|