Message ID | 1473438177-26079-12-git-send-email-clg@kaod.org |
---|---|
State | New |
Headers | show |
On Fri, 2016-09-09 at 18:22 +0200, Cédric Le Goater wrote: > There is no need to do this at each reset as the RAM size will not > change. > > Signed-off-by: Cédric Le Goater <clg@kaod.org> Reviewed-by: Andrew Jeffery <andrew@aj.id.au> > --- > hw/misc/aspeed_sdmc.c | 16 ++++++++++++++-- > include/hw/misc/aspeed_sdmc.h | 1 + > 2 files changed, 15 insertions(+), 2 deletions(-) > > diff --git a/hw/misc/aspeed_sdmc.c b/hw/misc/aspeed_sdmc.c > index 244e5c0dc5ef..1d2825237728 100644 > --- a/hw/misc/aspeed_sdmc.c > +++ b/hw/misc/aspeed_sdmc.c > @@ -192,7 +192,7 @@ static void aspeed_sdmc_reset(DeviceState *dev) > case AST2400_A0_SILICON_REV: > s->regs[R_CONF] |= > ASPEED_SDMC_VGA_COMPAT | > - ASPEED_SDMC_DRAM_SIZE(ast2400_rambits()); > + ASPEED_SDMC_DRAM_SIZE(s->ram_bits); > break; > > case AST2500_A0_SILICON_REV: > @@ -200,7 +200,7 @@ static void aspeed_sdmc_reset(DeviceState *dev) > s->regs[R_CONF] |= > ASPEED_SDMC_HW_VERSION(1) | > ASPEED_SDMC_VGA_APERTURE(ASPEED_SDMC_VGA_64MB) | > - ASPEED_SDMC_DRAM_SIZE(ast2500_rambits()); > + ASPEED_SDMC_DRAM_SIZE(s->ram_bits); > break; > > default: > @@ -219,6 +219,18 @@ static void aspeed_sdmc_realize(DeviceState *dev, Error **errp) > return; > } > > + switch (s->silicon_rev) { > + case AST2400_A0_SILICON_REV: > + s->ram_bits = ast2400_rambits(); > + break; > + case AST2500_A0_SILICON_REV: > + case AST2500_A1_SILICON_REV: > + s->ram_bits = ast2500_rambits(); > + break; > + default: > + g_assert_not_reached(); > + } > + > memory_region_init_io(&s->iomem, OBJECT(s), &aspeed_sdmc_ops, s, > TYPE_ASPEED_SDMC, 0x1000); > sysbus_init_mmio(sbd, &s->iomem); > diff --git a/include/hw/misc/aspeed_sdmc.h b/include/hw/misc/aspeed_sdmc.h > index 7e081f6d2b86..df7dce0edddf 100644 > --- a/include/hw/misc/aspeed_sdmc.h > +++ b/include/hw/misc/aspeed_sdmc.h > @@ -25,6 +25,7 @@ typedef struct AspeedSDMCState { > > uint32_t regs[ASPEED_SDMC_NR_REGS]; > uint32_t silicon_rev; > + uint32_t ram_bits; > > } AspeedSDMCState; >
diff --git a/hw/misc/aspeed_sdmc.c b/hw/misc/aspeed_sdmc.c index 244e5c0dc5ef..1d2825237728 100644 --- a/hw/misc/aspeed_sdmc.c +++ b/hw/misc/aspeed_sdmc.c @@ -192,7 +192,7 @@ static void aspeed_sdmc_reset(DeviceState *dev) case AST2400_A0_SILICON_REV: s->regs[R_CONF] |= ASPEED_SDMC_VGA_COMPAT | - ASPEED_SDMC_DRAM_SIZE(ast2400_rambits()); + ASPEED_SDMC_DRAM_SIZE(s->ram_bits); break; case AST2500_A0_SILICON_REV: @@ -200,7 +200,7 @@ static void aspeed_sdmc_reset(DeviceState *dev) s->regs[R_CONF] |= ASPEED_SDMC_HW_VERSION(1) | ASPEED_SDMC_VGA_APERTURE(ASPEED_SDMC_VGA_64MB) | - ASPEED_SDMC_DRAM_SIZE(ast2500_rambits()); + ASPEED_SDMC_DRAM_SIZE(s->ram_bits); break; default: @@ -219,6 +219,18 @@ static void aspeed_sdmc_realize(DeviceState *dev, Error **errp) return; } + switch (s->silicon_rev) { + case AST2400_A0_SILICON_REV: + s->ram_bits = ast2400_rambits(); + break; + case AST2500_A0_SILICON_REV: + case AST2500_A1_SILICON_REV: + s->ram_bits = ast2500_rambits(); + break; + default: + g_assert_not_reached(); + } + memory_region_init_io(&s->iomem, OBJECT(s), &aspeed_sdmc_ops, s, TYPE_ASPEED_SDMC, 0x1000); sysbus_init_mmio(sbd, &s->iomem); diff --git a/include/hw/misc/aspeed_sdmc.h b/include/hw/misc/aspeed_sdmc.h index 7e081f6d2b86..df7dce0edddf 100644 --- a/include/hw/misc/aspeed_sdmc.h +++ b/include/hw/misc/aspeed_sdmc.h @@ -25,6 +25,7 @@ typedef struct AspeedSDMCState { uint32_t regs[ASPEED_SDMC_NR_REGS]; uint32_t silicon_rev; + uint32_t ram_bits; } AspeedSDMCState;
There is no need to do this at each reset as the RAM size will not change. Signed-off-by: Cédric Le Goater <clg@kaod.org> --- hw/misc/aspeed_sdmc.c | 16 ++++++++++++++-- include/hw/misc/aspeed_sdmc.h | 1 + 2 files changed, 15 insertions(+), 2 deletions(-)