Skip to content

Commit

Permalink
hw/misc: Don't special case RESET_TYPE_COLD in npcm7xx_clk, gcr
Browse files Browse the repository at this point in the history
The npcm7xx_clk and npcm7xx_gcr device reset methods look at
the ResetType argument and only handle RESET_TYPE_COLD,
producing a warning if another reset type is passed. This
is different from how every other three-phase-reset method
we have works, and makes it difficult to add new reset types.

A better pattern is "assume that any reset type you don't know
about should be handled like RESET_TYPE_COLD"; switch these
devices to do that. Then adding a new reset type will only
need to touch those devices where its behaviour really needs
to be different from the standard cold reset.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Luc Michel <luc.michel@amd.com>
Message-id: 20240412160809.1260625-2-peter.maydell@linaro.org
  • Loading branch information
pm215 committed Apr 25, 2024
1 parent a6819c1 commit 1e0f2b3
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 18 deletions.
13 changes: 3 additions & 10 deletions hw/misc/npcm7xx_clk.c
Original file line number Diff line number Diff line change
Expand Up @@ -873,20 +873,13 @@ static void npcm7xx_clk_enter_reset(Object *obj, ResetType type)

QEMU_BUILD_BUG_ON(sizeof(s->regs) != sizeof(cold_reset_values));

switch (type) {
case RESET_TYPE_COLD:
memcpy(s->regs, cold_reset_values, sizeof(cold_reset_values));
s->ref_ns = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL);
npcm7xx_clk_update_all_clocks(s);
return;
}

memcpy(s->regs, cold_reset_values, sizeof(cold_reset_values));
s->ref_ns = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL);
npcm7xx_clk_update_all_clocks(s);
/*
* A small number of registers need to be reset on a core domain reset,
* but no such reset type exists yet.
*/
qemu_log_mask(LOG_UNIMP, "%s: reset type %d not implemented.",
__func__, type);
}

static void npcm7xx_clk_init_clock_hierarchy(NPCM7xxCLKState *s)
Expand Down
12 changes: 4 additions & 8 deletions hw/misc/npcm7xx_gcr.c
Original file line number Diff line number Diff line change
Expand Up @@ -159,14 +159,10 @@ static void npcm7xx_gcr_enter_reset(Object *obj, ResetType type)

QEMU_BUILD_BUG_ON(sizeof(s->regs) != sizeof(cold_reset_values));

switch (type) {
case RESET_TYPE_COLD:
memcpy(s->regs, cold_reset_values, sizeof(s->regs));
s->regs[NPCM7XX_GCR_PWRON] = s->reset_pwron;
s->regs[NPCM7XX_GCR_MDLR] = s->reset_mdlr;
s->regs[NPCM7XX_GCR_INTCR3] = s->reset_intcr3;
break;
}
memcpy(s->regs, cold_reset_values, sizeof(s->regs));
s->regs[NPCM7XX_GCR_PWRON] = s->reset_pwron;
s->regs[NPCM7XX_GCR_MDLR] = s->reset_mdlr;
s->regs[NPCM7XX_GCR_INTCR3] = s->reset_intcr3;
}

static void npcm7xx_gcr_realize(DeviceState *dev, Error **errp)
Expand Down

0 comments on commit 1e0f2b3

Please sign in to comment.