[PATCH qemu 05/38] aspeed: add support for the romulus-bmc board

Andrew Jeffery andrew at aj.id.au
Tue Nov 22 14:06:58 AEDT 2016


On Mon, 2016-11-21 at 15:44 +0100, Cédric Le Goater wrote:
> On 11/21/2016 01:18 PM, Andrew Jeffery wrote:
> > On Fri, 2016-11-18 at 15:21 +0100, Cédric Le Goater wrote:
> > > The Romulus machine is an OpenPOWER system with an AST2500 SoC for
> > > the BMC and a POWER9 chip for the host. It does not make much
> > > difference for qemu a part from the fact that the FMC controller has
> > > two SPI flash module slaves.
> > > 
> > > > Signed-off-by: Cédric Le Goater <clg at kaod.org>
> > > 
> > > ---
> > >  hw/arm/aspeed.c | 45 +++++++++++++++++++++++++++++++++++++++++++++
> > >  1 file changed, 45 insertions(+)
> > > 
> > > diff --git a/hw/arm/aspeed.c b/hw/arm/aspeed.c
> > > index 159d562e8912..aea73f79d92c 100644
> > > --- a/hw/arm/aspeed.c
> > > +++ b/hw/arm/aspeed.c
> > > @@ -41,8 +41,10 @@ typedef struct AspeedBoardConfig {
> > >  enum {
> > >      PALMETTO_BMC,
> > >      AST2500_EVB,
> > > +    ROMULUS_BMC,
> > >  };
> > >  
> > > +/* 0x120CE416 */
> > >  #define PALMETTO_BMC_HW_STRAP1 (                                        \
> > >          SCU_AST2400_HW_STRAP_DRAM_SIZE(DRAM_SIZE_256MB) |               \
> > >          SCU_AST2400_HW_STRAP_DRAM_CONFIG(2 /* DDR3 with CL=6, CWL=5 */) | \
> > > @@ -56,6 +58,7 @@ enum {
> > >          SCU_HW_STRAP_VGA_SIZE_SET(VGA_16M_DRAM) |                       \
> > >          SCU_AST2400_HW_STRAP_BOOT_MODE(AST2400_SPI_BOOT))
> > >  
> > > +/* 0xF100C2E6 */
> > >  #define AST2500_EVB_HW_STRAP1 ((                                        \
> > >          AST2500_HW_STRAP1_DEFAULTS |                                    \
> > >          SCU_AST2500_HW_STRAP_SPI_AUTOFETCH_ENABLE |                     \
> > > @@ -66,6 +69,17 @@ enum {
> > >          SCU_HW_STRAP_MAC0_RGMII) &                                      \
> > >          ~SCU_HW_STRAP_2ND_BOOT_WDT)
> > >  
> > > +/* 0xF10AE216 */
> 
> That is a witherspoon value. I haven't had access to a Romulus yet.

Okay. We can derive it from the schematic anyway. I checked the values
you've configured via the macros and it looks like it matches.

> 
> > > +#define ROMULUS_BMC_HW_STRAP1 (                                     \
> > > +        AST2500_HW_STRAP1_DEFAULTS |                                    \
> > 
> > In the defaults it says we define 16MB VGA memory, but how do we strap
> > for that? It doesn't look like you can set bit 2 from the strapping
> > table, and if we're setting bit 3 as 0 then we're getting either 8 or
> > 32MB of memory. Is there a typo in the datasheet?
> 
> The VGA memory size selection is SCU70[3:2]. Both are RW. We should be fine.

Sorry, that lacked a bit of context. I was looking at the datasheet and
the schematic, and couldn't find a way to affect bit 2 in SCU70. In
qemu that doesn't matter so much, we can "do what we want", but it
seemed the hardware was oddly limited unless I've overlooked something.

> 
> > > +        SCU_AST2500_HW_STRAP_SPI_AUTOFETCH_ENABLE |                     \
> > > +        SCU_AST2500_HW_STRAP_GPIO_STRAP_ENABLE |                        \
> > > +        SCU_AST2500_HW_STRAP_UART_DEBUG |                               \
> > > +        SCU_AST2500_HW_STRAP_DDR4_ENABLE |                              \
> > > +        SCU_AST2500_HW_STRAP_ACPI_ENABLE |                              \
> > 
> > Hello? Is that you Jon??
> > 
> > Does anyone know why we're enabling ACPI on Romulus?
> 
> indeed. no idea why, and there is no default value for this bit.

Comparing the AST2400 and AST2500 datasheets it seems Aspeed inverted
the meaning of the bit in the AST2500. Which might mean the strapping
was a hangover from systems with an AST2400.

Joel/Patrick: This strapping conflicts with the following nets:

PM_PCIE_SLOT1_WAKE_L (GPIOY0_SIOS3#)
PM_PCIE_SLOT2_WAKE_L (GPIOY1_SIOS5#)
PM_PCIE_SLOT3_WAKE_L (GPIOY2_SIOPWREQ#)
PM_PCIE_SLOT4_WAKE_L (GPIOY3_SIOONCTRL#)
PM_PCIE_SLOT5_WAKE_L (GPIOZ0_VPOG2_NORA0_SIOPBI#)

It also affects the following not-connected nets:

NC_BMC_GPIOZ1 (GPIOZ1_VPOG3_NORA1_SIOPWRGD)
NC_BMC_GPIOZ2 (GPIOZ2_VPOG4_NORA2_SIOPBO#)
NC_BMC_GPIOZ3 (GPIOZ3_VPOG5_NORA3_SIOSCI#)

> 
> 
> > > +        SCU_HW_STRAP_SPI_WIDTH |                                        \
> > > +        SCU_HW_STRAP_SPI_MODE(SCU_HW_STRAP_SPI_M_S_EN))
> > 
> > According to the schematic I have we're setting bit 27 (Fast reset mode
> > for ARM ICE debugger). But apparently that's not what's been read off
> > some existing Romulus?
> 
> again this is a witherspoon value. It might be different on a Romulus.

According to the schematics I have the bit is set for Romulus.

Andrew

> 
> Thanks,
> 
> C.
> 
> 
> > > +
> > >  static const AspeedBoardConfig aspeed_boards[] = {
> > >      [PALMETTO_BMC] = {
> > >          .soc_name  = "ast2400-a0",
> > > @@ -79,6 +93,12 @@ static const AspeedBoardConfig aspeed_boards[] = {
> > >          .fmc_model = "n25q256a",
> > >          .spi_model = "mx25l25635e",
> > >      },
> > > +    [ROMULUS_BMC]  = {
> > > +        .soc_name  = "ast2500-a1",
> > > +        .hw_strap1 = ROMULUS_BMC_HW_STRAP1,
> > > +        .fmc_model = "n25q256a",
> > > +        .spi_model = "mx66l1g45g",
> > > +    },
> > >  };
> > >  
> > >  static void aspeed_board_init_flashes(AspeedSMCState *s, const char *flashtype,
> > > @@ -200,10 +220,35 @@ static const TypeInfo ast2500_evb_type = {
> > >      .class_init = ast2500_evb_class_init,
> > >  };
> > >  
> > > +static void romulus_bmc_init(MachineState *machine)
> > > +{
> > > +    aspeed_board_init(machine, &aspeed_boards[ROMULUS_BMC]);
> > > +}
> > > +
> > > +static void romulus_bmc_class_init(ObjectClass *oc, void *data)
> > > +{
> > > +    MachineClass *mc = MACHINE_CLASS(oc);
> > > +
> > > +    mc->desc = "OpenPOWER Romulus BMC (ARM1176)";
> > > +    mc->init = romulus_bmc_init;
> > > +    mc->max_cpus = 1;
> > > +    mc->no_sdcard = 1;
> > > +    mc->no_floppy = 1;
> > > +    mc->no_cdrom = 1;
> > > +    mc->no_parallel = 1;
> > > +}
> > > +
> > > +static const TypeInfo romulus_bmc_type = {
> > > +    .name = MACHINE_TYPE_NAME("romulus-bmc"),
> > > +    .parent = TYPE_MACHINE,
> > > +    .class_init = romulus_bmc_class_init,
> > > +};
> > > +
> > >  static void aspeed_machine_init(void)
> > >  {
> > >      type_register_static(&palmetto_bmc_type);
> > >      type_register_static(&ast2500_evb_type);
> > > +    type_register_static(&romulus_bmc_type);
> > >  }
> > >  
> > >  type_init(aspeed_machine_init)
> 
> 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 801 bytes
Desc: This is a digitally signed message part
URL: <http://lists.ozlabs.org/pipermail/openbmc/attachments/20161122/7fed158f/attachment.sig>


More information about the openbmc mailing list