hw/arm/mps2: Add SPI devices
From 'Application Note AN385', chapter 3.9, SPI: The SMM implements five PL022 SPI modules. Two pairs of modules share the same OR-gated IRQ. Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Message-id: 20200617072539.32686-12-f4bug@amsat.org Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
adbb23b6a8
commit
58f7f3c452
@ -59,7 +59,7 @@ config HIGHBANK
|
||||
select ARM_TIMER # sp804
|
||||
select ARM_V7M
|
||||
select PL011 # UART
|
||||
select PL022 # Serial port
|
||||
select PL022 # SPI
|
||||
select PL031 # RTC
|
||||
select PL061 # GPIO
|
||||
select PL310 # cache controller
|
||||
@ -222,7 +222,7 @@ config STELLARIS
|
||||
select CMSDK_APB_WATCHDOG
|
||||
select I2C
|
||||
select PL011 # UART
|
||||
select PL022 # Serial port
|
||||
select PL022 # SPI
|
||||
select PL061 # GPIO
|
||||
select SSD0303 # OLED display
|
||||
select SSD0323 # OLED display
|
||||
@ -401,7 +401,7 @@ config MPS2
|
||||
select MPS2_FPGAIO
|
||||
select MPS2_SCC
|
||||
select OR_IRQ
|
||||
select PL022 # Serial port
|
||||
select PL022 # SPI
|
||||
select PL080 # DMA controller
|
||||
select SPLIT_IRQ
|
||||
select UNIMP
|
||||
|
@ -39,6 +39,7 @@
|
||||
#include "hw/timer/cmsdk-apb-dualtimer.h"
|
||||
#include "hw/misc/mps2-scc.h"
|
||||
#include "hw/misc/mps2-fpgaio.h"
|
||||
#include "hw/ssi/pl022.h"
|
||||
#include "hw/net/lan9118.h"
|
||||
#include "net/net.h"
|
||||
#include "hw/watchdog/cmsdk-apb-watchdog.h"
|
||||
@ -341,6 +342,29 @@ static void mps2_common_init(MachineState *machine)
|
||||
qdev_prop_set_uint32(DEVICE(&mms->fpgaio), "prescale-clk", 25000000);
|
||||
sysbus_realize(SYS_BUS_DEVICE(&mms->fpgaio), &error_fatal);
|
||||
sysbus_mmio_map(SYS_BUS_DEVICE(&mms->fpgaio), 0, 0x40028000);
|
||||
sysbus_create_simple(TYPE_PL022, 0x40025000, /* External ADC */
|
||||
qdev_get_gpio_in(armv7m, 22));
|
||||
for (i = 0; i < 2; i++) {
|
||||
static const int spi_irqno[] = {11, 24};
|
||||
static const hwaddr spibase[] = {0x40020000, /* APB */
|
||||
0x40021000, /* LCD */
|
||||
0x40026000, /* Shield0 */
|
||||
0x40027000}; /* Shield1 */
|
||||
DeviceState *orgate_dev;
|
||||
Object *orgate;
|
||||
int j;
|
||||
|
||||
orgate = object_new(TYPE_OR_IRQ);
|
||||
object_property_set_int(orgate, 2, "num-lines", &error_fatal);
|
||||
orgate_dev = DEVICE(orgate);
|
||||
qdev_realize(orgate_dev, NULL, &error_fatal);
|
||||
qdev_connect_gpio_out(orgate_dev, 0,
|
||||
qdev_get_gpio_in(armv7m, spi_irqno[i]));
|
||||
for (j = 0; j < 2; j++) {
|
||||
sysbus_create_simple(TYPE_PL022, spibase[2 * i + j],
|
||||
qdev_get_gpio_in(orgate_dev, j));
|
||||
}
|
||||
}
|
||||
|
||||
/* In hardware this is a LAN9220; the LAN9118 is software compatible
|
||||
* except that it doesn't support the checksum-offload feature.
|
||||
|
Loading…
Reference in New Issue
Block a user