mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-08 10:13:56 -06:00
Merge remote-tracking branch 'remotes/mcayland/qemu-sparc' into staging
* remotes/mcayland/qemu-sparc: sun4m: Add Sun CG3 framebuffer initialisation function sun4m: Add Sun CG3 framebuffer and corresponding OpenBIOS FCode ROM sun4m: fix slavio timer RUN/STOP bit sun4m: Set HostID in NVRAM Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
d47e95c0c8
11 changed files with 486 additions and 21 deletions
|
@ -51,7 +51,7 @@ typedef struct CPUTimerState {
|
|||
ptimer_state *timer;
|
||||
uint32_t count, counthigh, reached;
|
||||
/* processor only */
|
||||
uint32_t running;
|
||||
uint32_t run;
|
||||
uint64_t limit;
|
||||
} CPUTimerState;
|
||||
|
||||
|
@ -177,7 +177,7 @@ static uint64_t slavio_timer_mem_readl(void *opaque, hwaddr addr,
|
|||
// only available in processor counter/timer
|
||||
// read start/stop status
|
||||
if (timer_index > 0) {
|
||||
ret = t->running;
|
||||
ret = t->run;
|
||||
} else {
|
||||
ret = 0;
|
||||
}
|
||||
|
@ -260,16 +260,15 @@ static void slavio_timer_mem_writel(void *opaque, hwaddr addr,
|
|||
case TIMER_STATUS:
|
||||
if (slavio_timer_is_user(tc)) {
|
||||
// start/stop user counter
|
||||
if ((val & 1) && !t->running) {
|
||||
if (val & 1) {
|
||||
trace_slavio_timer_mem_writel_status_start(timer_index);
|
||||
ptimer_run(t->timer, 0);
|
||||
t->running = 1;
|
||||
} else if (!(val & 1) && t->running) {
|
||||
} else {
|
||||
trace_slavio_timer_mem_writel_status_stop(timer_index);
|
||||
ptimer_stop(t->timer);
|
||||
t->running = 0;
|
||||
}
|
||||
}
|
||||
t->run = val & 1;
|
||||
break;
|
||||
case TIMER_MODE:
|
||||
if (timer_index == 0) {
|
||||
|
@ -284,8 +283,9 @@ static void slavio_timer_mem_writel(void *opaque, hwaddr addr,
|
|||
if (val & processor) { // counter -> user timer
|
||||
qemu_irq_lower(curr_timer->irq);
|
||||
// counters are always running
|
||||
ptimer_stop(curr_timer->timer);
|
||||
curr_timer->running = 0;
|
||||
if (!curr_timer->run) {
|
||||
ptimer_stop(curr_timer->timer);
|
||||
}
|
||||
// user timer limit is always the same
|
||||
curr_timer->limit = TIMER_MAX_COUNT64;
|
||||
ptimer_set_limit(curr_timer->timer,
|
||||
|
@ -296,13 +296,8 @@ static void slavio_timer_mem_writel(void *opaque, hwaddr addr,
|
|||
s->cputimer_mode |= processor;
|
||||
trace_slavio_timer_mem_writel_mode_user(timer_index);
|
||||
} else { // user timer -> counter
|
||||
// stop the user timer if it is running
|
||||
if (curr_timer->running) {
|
||||
ptimer_stop(curr_timer->timer);
|
||||
}
|
||||
// start the counter
|
||||
ptimer_run(curr_timer->timer, 0);
|
||||
curr_timer->running = 1;
|
||||
// clear this processors user timer bit in config
|
||||
// register
|
||||
s->cputimer_mode &= ~processor;
|
||||
|
@ -340,7 +335,7 @@ static const VMStateDescription vmstate_timer = {
|
|||
VMSTATE_UINT32(count, CPUTimerState),
|
||||
VMSTATE_UINT32(counthigh, CPUTimerState),
|
||||
VMSTATE_UINT32(reached, CPUTimerState),
|
||||
VMSTATE_UINT32(running, CPUTimerState),
|
||||
VMSTATE_UINT32(run , CPUTimerState),
|
||||
VMSTATE_PTIMER(timer, CPUTimerState),
|
||||
VMSTATE_END_OF_LIST()
|
||||
}
|
||||
|
@ -373,7 +368,7 @@ static void slavio_timer_reset(DeviceState *d)
|
|||
ptimer_set_limit(curr_timer->timer,
|
||||
LIMIT_TO_PERIODS(TIMER_MAX_COUNT32), 1);
|
||||
ptimer_run(curr_timer->timer, 0);
|
||||
curr_timer->running = 1;
|
||||
curr_timer->run = 1;
|
||||
}
|
||||
}
|
||||
s->cputimer_mode = 0;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue