From 48aa1135cffd72d2c2f4067f3e96ae25d6dbfc30 Mon Sep 17 00:00:00 2001 From: "Wludzik, Jozef" Date: Mon, 16 Nov 2020 15:48:04 +0100 Subject: [PATCH] hw/arm/aspeed: Add an intel-ast2500 machine type Include the HW strap setting and some I2C temperature sensors. Signed-off-by: Jason M. Bills Signed-off-by: James Feist --- hw/arm/aspeed.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/hw/arm/aspeed.c b/hw/arm/aspeed.c index fcb1a7cd..514dca85 100644 --- a/hw/arm/aspeed.c +++ b/hw/arm/aspeed.c @@ -68,6 +68,21 @@ struct AspeedMachineState { SCU_HW_STRAP_MAC0_RGMII) & \ ~SCU_HW_STRAP_2ND_BOOT_WDT) +/* intel ast2500 hardware value: 0xF3CCC286 */ +#define INTEL_AST2500_BMC_HW_STRAP1 (( \ + AST2500_HW_STRAP1_DEFAULTS | \ + SCU_AST2500_HW_STRAP_SPI_AUTOFETCH_ENABLE | \ + SCU_AST2500_HW_STRAP_GPIO_STRAP_ENABLE | \ + SCU_AST2500_HW_STRAP_UART_DEBUG | \ + SCU_AST2500_HW_STRAP_ESPI_ENABLE | \ + SCU_AST2500_HW_STRAP_DDR4_ENABLE | \ + SCU_HW_STRAP_GPIOE_PT_EN | \ + SCU_AST2400_HW_STRAP_ACPI_DIS | \ + SCU_HW_STRAP_CLK_48M_IN | \ + SCU_HW_STRAP_VGA_CLASS_CODE | \ + SCU_HW_STRAP_MAC1_RGMII) & \ + ~SCU_HW_STRAP_2ND_BOOT_WDT) + /* Romulus hardware value: 0xF10AD206 */ #define ROMULUS_BMC_HW_STRAP1 ( \ AST2500_HW_STRAP1_DEFAULTS | \ @@ -417,6 +432,24 @@ static void ast2500_evb_i2c_init(AspeedMachineState *bmc) i2c_slave_create_simple(aspeed_i2c_get_bus(&soc->i2c, 11), "ds1338", 0x32); } +static void intel_ast2500_i2c_init(AspeedMachineState *bmc) +{ + AspeedSoCState *soc = &bmc->soc; + DeviceState *dev; + + dev = DEVICE(i2c_slave_create_simple(aspeed_i2c_get_bus(&soc->i2c, 6), "tmp421", 0x4d)); + object_property_set_int(OBJECT(dev), "temperature0", 50000, &error_abort); + /* The s2600wf expects a TMP75 but a TMP105 is compatible */ + dev = DEVICE(i2c_slave_create_simple(aspeed_i2c_get_bus(&soc->i2c, 6), "tmp105", 0x48)); + object_property_set_int(OBJECT(dev), "temperature", 50000, &error_abort); + dev = DEVICE(i2c_slave_create_simple(aspeed_i2c_get_bus(&soc->i2c, 6), "tmp105", 0x49)); + object_property_set_int(OBJECT(dev), "temperature", 50000, &error_abort); + dev = DEVICE(i2c_slave_create_simple(aspeed_i2c_get_bus(&soc->i2c, 6), "tmp105", 0x4a)); + object_property_set_int(OBJECT(dev), "temperature", 50000, &error_abort); + dev = DEVICE(i2c_slave_create_simple(aspeed_i2c_get_bus(&soc->i2c, 6), "tmp105", 0x4b)); + object_property_set_int(OBJECT(dev), "temperature", 50000, &error_abort); +} + static void ast2600_evb_i2c_init(AspeedMachineState *bmc) { /* Start with some devices on our I2C busses */ @@ -620,6 +653,23 @@ static void aspeed_machine_ast2500_evb_class_init(ObjectClass *oc, void *data) aspeed_soc_num_cpus(amc->soc_name); }; +static void aspeed_machine_intel_ast2500_class_init(ObjectClass *oc, void *data) +{ + MachineClass *mc = MACHINE_CLASS(oc); + AspeedMachineClass *amc = ASPEED_MACHINE_CLASS(oc); + + mc->desc = "Intel AST2500 BMC (ARM1176)"; + amc->soc_name = "ast2500-a1"; + amc->hw_strap1 = INTEL_AST2500_BMC_HW_STRAP1; + amc->fmc_model = "n25q512a"; + amc->spi_model = "n25q512a"; + amc->num_cs = 1; + amc->i2c_init = intel_ast2500_i2c_init; + mc->default_ram_size = 512 * MiB; + mc->default_cpus = mc->min_cpus = mc->max_cpus = + aspeed_soc_num_cpus(amc->soc_name); +}; + static void aspeed_machine_romulus_class_init(ObjectClass *oc, void *data) { MachineClass *mc = MACHINE_CLASS(oc); @@ -735,6 +785,10 @@ static const TypeInfo aspeed_machine_types[] = { .name = MACHINE_TYPE_NAME("ast2500-evb"), .parent = TYPE_ASPEED_MACHINE, .class_init = aspeed_machine_ast2500_evb_class_init, + }, { + .name = MACHINE_TYPE_NAME("intel-ast2500"), + .parent = TYPE_ASPEED_MACHINE, + .class_init = aspeed_machine_intel_ast2500_class_init, }, { .name = MACHINE_TYPE_NAME("romulus-bmc"), .parent = TYPE_ASPEED_MACHINE,