On Fri, 2016-09-09 at 18:22 +0200, Cédric Le Goater wrote: > Configure the size of the RAM of the SOC using a property to propagate > the value down to the memory controller from the board level. > > Signed-off-by: Cédric Le Goater <c...@kaod.org>
Reviewed-by: Andrew Jeffery <and...@aj.id.au> > --- > hw/arm/aspeed.c | 2 ++ > hw/arm/aspeed_soc.c | 2 ++ > hw/misc/aspeed_sdmc.c | 23 +++++++++++++---------- > include/hw/misc/aspeed_sdmc.h | 1 + > 4 files changed, 18 insertions(+), 10 deletions(-) > > diff --git a/hw/arm/aspeed.c b/hw/arm/aspeed.c > index 9013d35a674c..562bbb253391 100644 > --- a/hw/arm/aspeed.c > +++ b/hw/arm/aspeed.c > @@ -113,6 +113,8 @@ static void aspeed_board_init(MachineState *machine, > &bmc->ram); > object_property_add_const_link(OBJECT(&bmc->soc), "ram", > OBJECT(&bmc->ram), > &error_abort); > + object_property_set_int(OBJECT(&bmc->soc), ram_size, "ram-size", > + &error_abort); > object_property_set_int(OBJECT(&bmc->soc), cfg->hw_strap1, "hw-strap1", > &error_abort); > object_property_set_bool(OBJECT(&bmc->soc), true, "realized", > diff --git a/hw/arm/aspeed_soc.c b/hw/arm/aspeed_soc.c > index 93bc7bb66e4b..c0a310205842 100644 > --- a/hw/arm/aspeed_soc.c > +++ b/hw/arm/aspeed_soc.c > @@ -113,6 +113,8 @@ static void aspeed_soc_init(Object *obj) > qdev_set_parent_bus(DEVICE(&s->sdmc), sysbus_get_default()); > qdev_prop_set_uint32(DEVICE(&s->sdmc), "silicon-rev", > sc->info->silicon_rev); > + object_property_add_alias(obj, "ram-size", OBJECT(&s->sdmc), > + "ram-size", &error_abort); > } > > static void aspeed_soc_realize(DeviceState *dev, Error **errp) > diff --git a/hw/misc/aspeed_sdmc.c b/hw/misc/aspeed_sdmc.c > index 20bcdb52c4df..8830dc084c38 100644 > --- a/hw/misc/aspeed_sdmc.c > +++ b/hw/misc/aspeed_sdmc.c > @@ -140,9 +140,9 @@ static const MemoryRegionOps aspeed_sdmc_ops = { > .valid.max_access_size = 4, > }; > > -static int ast2400_rambits(void) > +static int ast2400_rambits(AspeedSDMCState *s) > { > - switch (ram_size >> 20) { > + switch (s->ram_size >> 20) { > case 64: > return ASPEED_SDMC_DRAM_64MB; > case 128: > @@ -156,14 +156,15 @@ static int ast2400_rambits(void) > } > > /* use a common default */ > - error_report("warning: Invalid RAM size 0x" RAM_ADDR_FMT > - ". Using default 256M", ram_size); > + error_report("warning: Invalid RAM size 0x%" PRIx64 > + ". Using default 256M", s->ram_size); > + s->ram_size = 256 << 20; > return ASPEED_SDMC_DRAM_256MB; > } > > -static int ast2500_rambits(void) > +static int ast2500_rambits(AspeedSDMCState *s) > { > - switch (ram_size >> 20) { > + switch (s->ram_size >> 20) { > case 128: > return ASPEED_SDMC_AST2500_128MB; > case 256: > @@ -177,8 +178,9 @@ static int ast2500_rambits(void) > } > > /* use a common default */ > - error_report("warning: Invalid RAM size 0x" RAM_ADDR_FMT > - ". Using default 512M", ram_size); > + error_report("warning: Invalid RAM size 0x%" PRIx64 > + ". Using default 512M", s->ram_size); > + s->ram_size = 512 << 20; > return ASPEED_SDMC_AST2500_512MB; > } > > @@ -222,11 +224,11 @@ static void aspeed_sdmc_realize(DeviceState *dev, Error > **errp) > > switch (s->silicon_rev) { > case AST2400_A0_SILICON_REV: > - s->ram_bits = ast2400_rambits(); > + s->ram_bits = ast2400_rambits(s); > break; > case AST2500_A0_SILICON_REV: > case AST2500_A1_SILICON_REV: > - s->ram_bits = ast2500_rambits(); > + s->ram_bits = ast2500_rambits(s); > break; > default: > g_assert_not_reached(); > @@ -249,6 +251,7 @@ static const VMStateDescription vmstate_aspeed_sdmc = { > > static Property aspeed_sdmc_properties[] = { > DEFINE_PROP_UINT32("silicon-rev", AspeedSDMCState, silicon_rev, 0), > + DEFINE_PROP_UINT64("ram-size", AspeedSDMCState, ram_size, 0), > DEFINE_PROP_END_OF_LIST(), > }; > > diff --git a/include/hw/misc/aspeed_sdmc.h b/include/hw/misc/aspeed_sdmc.h > index df7dce0edddf..551c8afdf4be 100644 > --- a/include/hw/misc/aspeed_sdmc.h > +++ b/include/hw/misc/aspeed_sdmc.h > @@ -26,6 +26,7 @@ typedef struct AspeedSDMCState { > uint32_t regs[ASPEED_SDMC_NR_REGS]; > uint32_t silicon_rev; > uint32_t ram_bits; > + uint64_t ram_size; > > } AspeedSDMCState; >
signature.asc
Description: This is a digitally signed message part