mirror of
https://github.com/mii443/qemu.git
synced 2025-08-30 10:59:53 +00:00
target-arm: Implement BCM2835 hardware RNG
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>
This commit is contained in:
committed by
Peter Maydell
parent
6181478f63
commit
54a5ba13a9
@ -19,6 +19,7 @@
|
||||
#include "hw/dma/bcm2835_dma.h"
|
||||
#include "hw/intc/bcm2835_ic.h"
|
||||
#include "hw/misc/bcm2835_property.h"
|
||||
#include "hw/misc/bcm2835_rng.h"
|
||||
#include "hw/misc/bcm2835_mbox.h"
|
||||
#include "hw/sd/sdhci.h"
|
||||
|
||||
@ -41,6 +42,7 @@ typedef struct BCM2835PeripheralState {
|
||||
BCM2835DMAState dma;
|
||||
BCM2835ICState ic;
|
||||
BCM2835PropertyState property;
|
||||
BCM2835RngState rng;
|
||||
BCM2835MboxState mboxes;
|
||||
SDHCIState sdhci;
|
||||
} BCM2835PeripheralState;
|
||||
|
27
include/hw/misc/bcm2835_rng.h
Normal file
27
include/hw/misc/bcm2835_rng.h
Normal file
@ -0,0 +1,27 @@
|
||||
/*
|
||||
* 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
|
Reference in New Issue
Block a user