Lines Matching +full:rom +full:- +full:addr
12 * https://www.nxp.com/docs/en/reference-manual/MCF5208RM.pdf
13 * "M5208EVB-RevB 32-bit Microcontroller User Manual"
14 * https://www.nxp.com/docs/en/reference-manual/M5208EVBUM.pdf
19 #include "qemu/error-report.h"
64 if ((s->pcsr & (PCSR_PIE | PCSR_PIF)) == (PCSR_PIE | PCSR_PIF)) in m5208_timer_update()
65 qemu_irq_raise(s->irq); in m5208_timer_update()
67 qemu_irq_lower(s->irq); in m5208_timer_update()
78 /* The PIF bit is set-to-clear. */ in m5208_timer_write()
80 s->pcsr &= ~PCSR_PIF; in m5208_timer_write()
84 if (((s->pcsr ^ value) & ~PCSR_PIE) == 0) { in m5208_timer_write()
85 s->pcsr = value; in m5208_timer_write()
90 ptimer_transaction_begin(s->timer); in m5208_timer_write()
91 if (s->pcsr & PCSR_EN) in m5208_timer_write()
92 ptimer_stop(s->timer); in m5208_timer_write()
94 s->pcsr = value; in m5208_timer_write()
96 prescale = 1 << ((s->pcsr & PCSR_PRE_MASK) >> PCSR_PRE_SHIFT); in m5208_timer_write()
97 ptimer_set_freq(s->timer, (SYS_FREQ / 2) / prescale); in m5208_timer_write()
98 if (s->pcsr & PCSR_RLD) in m5208_timer_write()
99 limit = s->pmr; in m5208_timer_write()
102 ptimer_set_limit(s->timer, limit, 0); in m5208_timer_write()
104 if (s->pcsr & PCSR_EN) in m5208_timer_write()
105 ptimer_run(s->timer, 0); in m5208_timer_write()
106 ptimer_transaction_commit(s->timer); in m5208_timer_write()
109 ptimer_transaction_begin(s->timer); in m5208_timer_write()
110 s->pmr = value; in m5208_timer_write()
111 s->pcsr &= ~PCSR_PIF; in m5208_timer_write()
112 if ((s->pcsr & PCSR_RLD) == 0) { in m5208_timer_write()
113 if (s->pcsr & PCSR_OVW) in m5208_timer_write()
114 ptimer_set_count(s->timer, value); in m5208_timer_write()
116 ptimer_set_limit(s->timer, value, s->pcsr & PCSR_OVW); in m5208_timer_write()
118 ptimer_transaction_commit(s->timer); in m5208_timer_write()
133 s->pcsr |= PCSR_PIF; in m5208_timer_trigger()
137 static uint64_t m5208_timer_read(void *opaque, hwaddr addr, in m5208_timer_read() argument
141 switch (addr) { in m5208_timer_read()
143 return s->pcsr; in m5208_timer_read()
145 return s->pmr; in m5208_timer_read()
147 return ptimer_get_count(s->timer); in m5208_timer_read()
150 __func__, addr); in m5208_timer_read()
161 static uint64_t m5208_sys_read(void *opaque, hwaddr addr, in m5208_sys_read() argument
164 switch (addr) { in m5208_sys_read()
169 if (current_machine->ram_size < (2ULL << n)) { in m5208_sys_read()
173 return (n - 1) | 0x40000000; in m5208_sys_read()
180 __func__, addr); in m5208_sys_read()
185 static void m5208_sys_write(void *opaque, hwaddr addr, in m5208_sys_write() argument
189 __func__, addr); in m5208_sys_write()
198 static uint64_t m5208_rcm_read(void *opaque, hwaddr addr, in m5208_rcm_read() argument
204 static void m5208_rcm_write(void *opaque, hwaddr addr, in m5208_rcm_write() argument
209 switch (addr) { in m5208_rcm_write()
213 cpu->env.aregs[7] = ldl_phys(cs->as, 0); in m5208_rcm_write()
214 cpu->env.pc = ldl_phys(cs->as, 4); in m5208_rcm_write()
219 __func__, addr); in m5208_rcm_write()
240 "m5208-rcm", 0x00000080); in mcf5208_sys_init()
243 memory_region_init_io(iomem, NULL, &m5208_sys_ops, NULL, "m5208-sys", 0x00004000); in mcf5208_sys_init()
248 s->timer = ptimer_init(m5208_timer_trigger, s, PTIMER_POLICY_LEGACY); in mcf5208_sys_init()
249 memory_region_init_io(&s->iomem, NULL, &m5208_timer_ops, s, in mcf5208_sys_init()
250 "m5208-timer", 0x00004000); in mcf5208_sys_init()
252 &s->iomem); in mcf5208_sys_init()
253 s->irq = pic[4 + i]; in mcf5208_sys_init()
279 ram_addr_t ram_size = machine->ram_size; in mcf5208evb_init()
280 const char *kernel_filename = machine->kernel_filename; in mcf5208evb_init()
288 MemoryRegion *rom = g_new(MemoryRegion, 1); in mcf5208evb_init() local
291 cpu = M68K_CPU(cpu_create(machine->cpu_type)); in mcf5208evb_init()
292 env = &cpu->env; in mcf5208evb_init()
295 env->vbr = 0; in mcf5208evb_init()
298 /* ROM at 0x00000000 */ in mcf5208evb_init()
299 memory_region_init_rom(rom, NULL, "mcf5208.rom", ROM_SIZE, &error_fatal); in mcf5208evb_init()
300 memory_region_add_subregion(address_space_mem, 0x00000000, rom); in mcf5208evb_init()
303 memory_region_add_subregion(address_space_mem, 0x40000000, machine->ram); in mcf5208evb_init()
345 if (machine->firmware) { in mcf5208evb_init()
349 fn = qemu_find_file(QEMU_FILE_TYPE_BIOS, machine->firmware); in mcf5208evb_init()
351 error_report("Could not find ROM image '%s'", machine->firmware); in mcf5208evb_init()
355 error_report("Could not load ROM image '%s'", machine->firmware); in mcf5208evb_init()
362 env->pc = ldl_be_p(ptr); in mcf5208evb_init()
367 if (qtest_enabled() || machine->firmware) { in mcf5208evb_init()
391 env->pc = entry; in mcf5208evb_init()
396 mc->desc = "MCF5208EVB"; in mcf5208evb_machine_init()
397 mc->init = mcf5208evb_init; in mcf5208evb_machine_init()
398 mc->is_default = true; in mcf5208evb_machine_init()
399 mc->default_cpu_type = M68K_CPU_TYPE_NAME("m5208"); in mcf5208evb_machine_init()
400 mc->default_ram_id = "mcf5208.ram"; in mcf5208evb_machine_init()