mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-14 21:52:18 -06:00
hw/arm: Connect SPI Controller to BCM2835
This patch will allow the SPI controller to be accessible from BCM2835 based boards as SPI0. SPI driver is usually disabled by default and config.txt does not work. Instead, dtmerge can be used to apply spi=on on a bcm2835 dtb file. Signed-off-by: Rayhan Faizel <rayhan.faizel@gmail.com> Message-id: 20240129221807.2983148-3-rayhan.faizel@gmail.com [PMM: indent tweak] Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
28004fb741
commit
f09c2b7ba9
3 changed files with 19 additions and 2 deletions
|
@ -429,6 +429,7 @@ config RASPI
|
|||
select PL011 # UART
|
||||
select SDHCI
|
||||
select USB_DWC2
|
||||
select BCM2835_SPI
|
||||
|
||||
config STM32F100_SOC
|
||||
bool
|
||||
|
|
|
@ -144,6 +144,10 @@ static void bcm2835_peripherals_init(Object *obj)
|
|||
/* Power Management */
|
||||
object_initialize_child(obj, "powermgt", &s->powermgt,
|
||||
TYPE_BCM2835_POWERMGT);
|
||||
|
||||
/* SPI */
|
||||
object_initialize_child(obj, "bcm2835-spi0", &s->spi[0],
|
||||
TYPE_BCM2835_SPI);
|
||||
}
|
||||
|
||||
static void bcm2835_peripherals_realize(DeviceState *dev, Error **errp)
|
||||
|
@ -402,11 +406,22 @@ static void bcm2835_peripherals_realize(DeviceState *dev, Error **errp)
|
|||
memory_region_add_subregion(&s->peri_mr, PM_OFFSET,
|
||||
sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->powermgt), 0));
|
||||
|
||||
/* SPI */
|
||||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->spi[0]), errp)) {
|
||||
return;
|
||||
}
|
||||
|
||||
memory_region_add_subregion(&s->peri_mr, SPI0_OFFSET,
|
||||
sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->spi[0]), 0));
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->spi[0]), 0,
|
||||
qdev_get_gpio_in_named(DEVICE(&s->ic),
|
||||
BCM2835_IC_GPU_IRQ,
|
||||
INTERRUPT_SPI));
|
||||
|
||||
create_unimp(s, &s->txp, "bcm2835-txp", TXP_OFFSET, 0x1000);
|
||||
create_unimp(s, &s->armtmr, "bcm2835-sp804", ARMCTRL_TIMER0_1_OFFSET, 0x40);
|
||||
create_unimp(s, &s->i2s, "bcm2835-i2s", I2S_OFFSET, 0x100);
|
||||
create_unimp(s, &s->smi, "bcm2835-smi", SMI_OFFSET, 0x100);
|
||||
create_unimp(s, &s->spi[0], "bcm2835-spi0", SPI0_OFFSET, 0x20);
|
||||
create_unimp(s, &s->bscsl, "bcm2835-spis", BSC_SL_OFFSET, 0x100);
|
||||
create_unimp(s, &s->i2c[0], "bcm2835-i2c0", BSC0_OFFSET, 0x20);
|
||||
create_unimp(s, &s->i2c[1], "bcm2835-i2c1", BSC1_OFFSET, 0x20);
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
#include "hw/gpio/bcm2835_gpio.h"
|
||||
#include "hw/timer/bcm2835_systmr.h"
|
||||
#include "hw/usb/hcd-dwc2.h"
|
||||
#include "hw/ssi/bcm2835_spi.h"
|
||||
#include "hw/misc/unimp.h"
|
||||
#include "qom/object.h"
|
||||
|
||||
|
@ -66,7 +67,7 @@ struct BCM2835PeripheralState {
|
|||
BCM2835GpioState gpio;
|
||||
Bcm2835ThermalState thermal;
|
||||
UnimplementedDeviceState i2s;
|
||||
UnimplementedDeviceState spi[1];
|
||||
BCM2835SPIState spi[1];
|
||||
UnimplementedDeviceState i2c[3];
|
||||
UnimplementedDeviceState otp;
|
||||
UnimplementedDeviceState dbus;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue