mirror of https://github.com/xemu-project/xemu.git
aspeed: Introduce a 'boot-emmc' machine option
The default behavior of some Aspeed machines is to boot from the eMMC device, like the rainier-bmc. Others like ast2600-evb could also boot from eMMC if the HW strapping boot-from-eMMC bit was set. Add a property to set or unset this bit. This is useful to test boot images. For now, only activate this property on the ast2600-evb and rainier-bmc machines for which eMMC images are available or can be built. Signed-off-by: Cédric Le Goater <clg@kaod.org> Reviewed-by: Andrew Jeffery <andrew@codeconstruct.com.au> Tested-by: Andrew Jeffery <andrew@codeconstruct.com.au> Tested-by: Philippe Mathieu-Daudé <philmd@linaro.org>
This commit is contained in:
parent
621845a9e3
commit
056b779eaf
|
@ -123,6 +123,8 @@ To boot the machine from the flash image, use an MTD drive :
|
|||
|
||||
Options specific to Aspeed machines are :
|
||||
|
||||
* ``boot-emmc`` to set or unset boot from eMMC (AST2600).
|
||||
|
||||
* ``execute-in-place`` which emulates the boot from the CE0 flash
|
||||
device by using the FMC controller to load the instructions, and
|
||||
not simply from RAM. This takes a little longer.
|
||||
|
|
|
@ -1178,6 +1178,34 @@ static void aspeed_machine_class_init_cpus_defaults(MachineClass *mc)
|
|||
mc->valid_cpu_types = sc->valid_cpu_types;
|
||||
}
|
||||
|
||||
static bool aspeed_machine_ast2600_get_boot_from_emmc(Object *obj, Error **errp)
|
||||
{
|
||||
AspeedMachineState *bmc = ASPEED_MACHINE(obj);
|
||||
|
||||
return !!(bmc->hw_strap1 & SCU_AST2600_HW_STRAP_BOOT_SRC_EMMC);
|
||||
}
|
||||
|
||||
static void aspeed_machine_ast2600_set_boot_from_emmc(Object *obj, bool value,
|
||||
Error **errp)
|
||||
{
|
||||
AspeedMachineState *bmc = ASPEED_MACHINE(obj);
|
||||
|
||||
if (value) {
|
||||
bmc->hw_strap1 |= SCU_AST2600_HW_STRAP_BOOT_SRC_EMMC;
|
||||
} else {
|
||||
bmc->hw_strap1 &= ~SCU_AST2600_HW_STRAP_BOOT_SRC_EMMC;
|
||||
}
|
||||
}
|
||||
|
||||
static void aspeed_machine_ast2600_class_emmc_init(ObjectClass *oc)
|
||||
{
|
||||
object_class_property_add_bool(oc, "boot-emmc",
|
||||
aspeed_machine_ast2600_get_boot_from_emmc,
|
||||
aspeed_machine_ast2600_set_boot_from_emmc);
|
||||
object_class_property_set_description(oc, "boot-emmc",
|
||||
"Set or unset boot from EMMC");
|
||||
}
|
||||
|
||||
static void aspeed_machine_class_init(ObjectClass *oc, void *data)
|
||||
{
|
||||
MachineClass *mc = MACHINE_CLASS(oc);
|
||||
|
@ -1377,6 +1405,7 @@ static void aspeed_machine_ast2600_evb_class_init(ObjectClass *oc, void *data)
|
|||
amc->i2c_init = ast2600_evb_i2c_init;
|
||||
mc->default_ram_size = 1 * GiB;
|
||||
aspeed_machine_class_init_cpus_defaults(mc);
|
||||
aspeed_machine_ast2600_class_emmc_init(oc);
|
||||
};
|
||||
|
||||
static void aspeed_machine_tacoma_class_init(ObjectClass *oc, void *data)
|
||||
|
@ -1449,6 +1478,7 @@ static void aspeed_machine_rainier_class_init(ObjectClass *oc, void *data)
|
|||
amc->i2c_init = rainier_bmc_i2c_init;
|
||||
mc->default_ram_size = 1 * GiB;
|
||||
aspeed_machine_class_init_cpus_defaults(mc);
|
||||
aspeed_machine_ast2600_class_emmc_init(oc);
|
||||
};
|
||||
|
||||
#define FUJI_BMC_RAM_SIZE ASPEED_RAM_SIZE(2 * GiB)
|
||||
|
|
Loading…
Reference in New Issue