mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-01 06:43:53 -06: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:
parent
6181478f63
commit
54a5ba13a9
5 changed files with 169 additions and 0 deletions
|
@ -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
|
Loading…
Add table
Add a link
Reference in a new issue