mirror of https://gitee.com/openkylin/qemu.git
hw/misc/mps2-scc: Use the LED device
Per the 'ARM MPS2 and MPS2+ FPGA Prototyping Boards Technical Reference Manual' (100112_0200_07_en): 2.1 Overview of the MPS2 and MPS2+ hardware The MPS2 and MPS2+ FPGA Prototyping Boards contain the following components and interfaces: * User switches and user LEDs: - Two green LEDs and two push buttons that connect to the FPGA. - Eight green LEDs and one 8-way dip switch that connect to the MCC. Add the 8 LEDs connected to the MCC. This replaces the 'mps2_scc_leds' trace events by the generic 'led_set_intensity' event. Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Luc Michel <luc.michel@greensocs.com> Message-Id: <20200912134041.946260-7-f4bug@amsat.org>
This commit is contained in:
parent
65ad1da23e
commit
435db7ebf5
|
@ -97,6 +97,7 @@ config MPS2_FPGAIO
|
|||
|
||||
config MPS2_SCC
|
||||
bool
|
||||
select LED
|
||||
|
||||
config TZ_MPC
|
||||
bool
|
||||
|
|
|
@ -20,11 +20,13 @@
|
|||
#include "qemu/osdep.h"
|
||||
#include "qemu/log.h"
|
||||
#include "qemu/module.h"
|
||||
#include "qemu/bitops.h"
|
||||
#include "trace.h"
|
||||
#include "hw/sysbus.h"
|
||||
#include "migration/vmstate.h"
|
||||
#include "hw/registerfields.h"
|
||||
#include "hw/misc/mps2-scc.h"
|
||||
#include "hw/misc/led.h"
|
||||
#include "hw/qdev-properties.h"
|
||||
|
||||
REG32(CFG0, 0)
|
||||
|
@ -152,18 +154,10 @@ static void mps2_scc_write(void *opaque, hwaddr offset, uint64_t value,
|
|||
s->cfg0 = value;
|
||||
break;
|
||||
case A_CFG1:
|
||||
/* CFG1 bits [7:0] control the board LEDs. We don't currently have
|
||||
* a mechanism for displaying this graphically, so use a trace event.
|
||||
*/
|
||||
trace_mps2_scc_leds(value & 0x80 ? '*' : '.',
|
||||
value & 0x40 ? '*' : '.',
|
||||
value & 0x20 ? '*' : '.',
|
||||
value & 0x10 ? '*' : '.',
|
||||
value & 0x08 ? '*' : '.',
|
||||
value & 0x04 ? '*' : '.',
|
||||
value & 0x02 ? '*' : '.',
|
||||
value & 0x01 ? '*' : '.');
|
||||
s->cfg1 = value;
|
||||
for (size_t i = 0; i < ARRAY_SIZE(s->led); i++) {
|
||||
led_set_state(s->led[i], extract32(value, i, 1));
|
||||
}
|
||||
break;
|
||||
case A_CFGDATA_OUT:
|
||||
s->cfgdata_out = value;
|
||||
|
@ -236,6 +230,9 @@ static void mps2_scc_reset(DeviceState *dev)
|
|||
for (i = 0; i < NUM_OSCCLK; i++) {
|
||||
s->oscclk[i] = s->oscclk_reset[i];
|
||||
}
|
||||
for (i = 0; i < ARRAY_SIZE(s->led); i++) {
|
||||
device_cold_reset(DEVICE(s->led[i]));
|
||||
}
|
||||
}
|
||||
|
||||
static void mps2_scc_init(Object *obj)
|
||||
|
@ -249,6 +246,14 @@ static void mps2_scc_init(Object *obj)
|
|||
|
||||
static void mps2_scc_realize(DeviceState *dev, Error **errp)
|
||||
{
|
||||
MPS2SCC *s = MPS2_SCC(dev);
|
||||
|
||||
for (size_t i = 0; i < ARRAY_SIZE(s->led); i++) {
|
||||
char *name = g_strdup_printf("SCC LED%zu", i);
|
||||
s->led[i] = led_create_simple(OBJECT(dev), GPIO_POLARITY_ACTIVE_HIGH,
|
||||
LED_COLOR_GREEN, name);
|
||||
g_free(name);
|
||||
}
|
||||
}
|
||||
|
||||
static const VMStateDescription mps2_scc_vmstate = {
|
||||
|
|
|
@ -84,7 +84,6 @@ aspeed_scu_write(uint64_t offset, unsigned size, uint32_t data) "To 0x%" PRIx64
|
|||
mps2_scc_read(uint64_t offset, uint64_t data, unsigned size) "MPS2 SCC read: offset 0x%" PRIx64 " data 0x%" PRIx64 " size %u"
|
||||
mps2_scc_write(uint64_t offset, uint64_t data, unsigned size) "MPS2 SCC write: offset 0x%" PRIx64 " data 0x%" PRIx64 " size %u"
|
||||
mps2_scc_reset(void) "MPS2 SCC: reset"
|
||||
mps2_scc_leds(char led7, char led6, char led5, char led4, char led3, char led2, char led1, char led0) "MPS2 SCC LEDs: %c%c%c%c%c%c%c%c"
|
||||
mps2_scc_cfg_write(unsigned function, unsigned device, uint32_t value) "MPS2 SCC config write: function %d device %d data 0x%" PRIx32
|
||||
mps2_scc_cfg_read(unsigned function, unsigned device, uint32_t value) "MPS2 SCC config read: function %d device %d data 0x%" PRIx32
|
||||
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
#define MPS2_SCC_H
|
||||
|
||||
#include "hw/sysbus.h"
|
||||
#include "hw/misc/led.h"
|
||||
#include "qom/object.h"
|
||||
|
||||
#define TYPE_MPS2_SCC "mps2-scc"
|
||||
|
@ -26,6 +27,7 @@ struct MPS2SCC {
|
|||
|
||||
/*< public >*/
|
||||
MemoryRegion iomem;
|
||||
LEDState *led[8];
|
||||
|
||||
uint32_t cfg0;
|
||||
uint32_t cfg1;
|
||||
|
|
Loading…
Reference in New Issue