mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-17 07:02:03 -06:00
hw/m68k/mcf5208: add support for reset
Add reset support for mcf5208. Signed-off-by: Angelo Dureghello <angelo@kernel-space.org> Reviewed-by: Thomas Huth <huth@tuxfamily.org> Message-ID: <20240309093459.984565-1-angelo@kernel-space.org> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
This commit is contained in:
parent
bb829cdeff
commit
d3c79c3974
1 changed files with 42 additions and 2 deletions
|
@ -40,6 +40,8 @@
|
||||||
#define PCSR_PRE_SHIFT 8
|
#define PCSR_PRE_SHIFT 8
|
||||||
#define PCSR_PRE_MASK 0x0f00
|
#define PCSR_PRE_MASK 0x0f00
|
||||||
|
|
||||||
|
#define RCR_SOFTRST 0x80
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
MemoryRegion iomem;
|
MemoryRegion iomem;
|
||||||
qemu_irq irq;
|
qemu_irq irq;
|
||||||
|
@ -185,12 +187,50 @@ static const MemoryRegionOps m5208_sys_ops = {
|
||||||
.endianness = DEVICE_NATIVE_ENDIAN,
|
.endianness = DEVICE_NATIVE_ENDIAN,
|
||||||
};
|
};
|
||||||
|
|
||||||
static void mcf5208_sys_init(MemoryRegion *address_space, qemu_irq *pic)
|
static uint64_t m5208_rcm_read(void *opaque, hwaddr addr,
|
||||||
|
unsigned size)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void m5208_rcm_write(void *opaque, hwaddr addr,
|
||||||
|
uint64_t value, unsigned size)
|
||||||
|
{
|
||||||
|
M68kCPU *cpu = opaque;
|
||||||
|
CPUState *cs = CPU(cpu);
|
||||||
|
switch (addr) {
|
||||||
|
case 0x0: /* RCR */
|
||||||
|
if (value & RCR_SOFTRST) {
|
||||||
|
cpu_reset(cs);
|
||||||
|
cpu->env.aregs[7] = ldl_phys(cs->as, 0);
|
||||||
|
cpu->env.pc = ldl_phys(cs->as, 4);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
qemu_log_mask(LOG_GUEST_ERROR, "%s: Bad offset 0x%" HWADDR_PRIX "\n",
|
||||||
|
__func__, addr);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static const MemoryRegionOps m5208_rcm_ops = {
|
||||||
|
.read = m5208_rcm_read,
|
||||||
|
.write = m5208_rcm_write,
|
||||||
|
.endianness = DEVICE_NATIVE_ENDIAN,
|
||||||
|
};
|
||||||
|
|
||||||
|
static void mcf5208_sys_init(MemoryRegion *address_space, qemu_irq *pic,
|
||||||
|
M68kCPU *cpu)
|
||||||
{
|
{
|
||||||
MemoryRegion *iomem = g_new(MemoryRegion, 1);
|
MemoryRegion *iomem = g_new(MemoryRegion, 1);
|
||||||
|
MemoryRegion *iomem_rcm = g_new(MemoryRegion, 1);
|
||||||
m5208_timer_state *s;
|
m5208_timer_state *s;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
/* RCM */
|
||||||
|
memory_region_init_io(iomem_rcm, NULL, &m5208_rcm_ops, cpu,
|
||||||
|
"m5208-rcm", 0x00000080);
|
||||||
|
memory_region_add_subregion(address_space, 0xfc0a0000, iomem_rcm);
|
||||||
/* SDRAMC. */
|
/* SDRAMC. */
|
||||||
memory_region_init_io(iomem, NULL, &m5208_sys_ops, NULL, "m5208-sys", 0x00004000);
|
memory_region_init_io(iomem, NULL, &m5208_sys_ops, NULL, "m5208-sys", 0x00004000);
|
||||||
memory_region_add_subregion(address_space, 0xfc0a8000, iomem);
|
memory_region_add_subregion(address_space, 0xfc0a8000, iomem);
|
||||||
|
@ -265,7 +305,7 @@ static void mcf5208evb_init(MachineState *machine)
|
||||||
mcf_uart_create_mmap(0xfc064000, pic[27], serial_hd(1));
|
mcf_uart_create_mmap(0xfc064000, pic[27], serial_hd(1));
|
||||||
mcf_uart_create_mmap(0xfc068000, pic[28], serial_hd(2));
|
mcf_uart_create_mmap(0xfc068000, pic[28], serial_hd(2));
|
||||||
|
|
||||||
mcf5208_sys_init(address_space_mem, pic);
|
mcf5208_sys_init(address_space_mem, pic, cpu);
|
||||||
|
|
||||||
mcf_fec_init(address_space_mem, 0xfc030000, pic + 36);
|
mcf_fec_init(address_space_mem, 0xfc030000, pic + 36);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue