sunxi-linux kernel parse config script to do hardware configurations Signed-off-by: liguang <lig.f...@cn.fujitsu.com> --- hw/arm/allwinner-a10.c | 18 ++++++++++++++++++ hw/arm/cubieboard.c | 2 ++ include/hw/arm/allwinner-a10.h | 5 +++++ pc-bios/aw-script.bin | Bin 0 -> 50188 bytes 4 files changed, 25 insertions(+), 0 deletions(-) create mode 100644 pc-bios/aw-script.bin
diff --git a/hw/arm/allwinner-a10.c b/hw/arm/allwinner-a10.c index 4658e19..b189897 100644 --- a/hw/arm/allwinner-a10.c +++ b/hw/arm/allwinner-a10.c @@ -18,6 +18,7 @@ #include "hw/sysbus.h" #include "hw/devices.h" #include "hw/arm/allwinner-a10.h" +#include "hw/loader.h" static void aw_a10_init(Object *obj) { @@ -33,6 +34,23 @@ static void aw_a10_init(Object *obj) qdev_set_parent_bus(DEVICE(&s->timer), sysbus_get_default()); } + void aw_a10_load_script(const char *s) +{ + char *file_name; + int file_size; + + file_name = qemu_find_file(QEMU_FILE_TYPE_BIOS, s); + file_size = get_image_size(file_name); + if (file_size < 0) { + error_report("%s size is wrong\n", AW_CONFIG_SCRIPT); + return; + } + if (load_image_targphys(file_name, AW_SCRIPT_ADDR, file_size) < 0) { + error_report("can't load %s\n", AW_CONFIG_SCRIPT); + return; + } +} + static void aw_a10_realize(DeviceState *dev, Error **errp) { AwA10State *s = AW_A10(dev); diff --git a/hw/arm/cubieboard.c b/hw/arm/cubieboard.c index 3fcb6d2..888256e 100644 --- a/hw/arm/cubieboard.c +++ b/hw/arm/cubieboard.c @@ -48,6 +48,8 @@ static void cubieboard_init(QEMUMachineInitArgs *args) memory_region_add_subregion(get_system_memory(), AW_A10_SDRAM_BASE, &s->sdram); + aw_a10_load_script(AW_CONFIG_SCRIPT); + cubieboard_binfo.ram_size = args->ram_size; cubieboard_binfo.kernel_filename = args->kernel_filename; cubieboard_binfo.kernel_cmdline = args->kernel_cmdline; diff --git a/include/hw/arm/allwinner-a10.h b/include/hw/arm/allwinner-a10.h index da36647..d395067 100644 --- a/include/hw/arm/allwinner-a10.h +++ b/include/hw/arm/allwinner-a10.h @@ -17,6 +17,9 @@ #define AW_A10_SDRAM_BASE 0x40000000 +#define AW_CONFIG_SCRIPT "aw-script.bin" +#define AW_SCRIPT_ADDR 0x43000000 + #define TYPE_AW_A10 "allwinner-a10" #define AW_A10(obj) OBJECT_CHECK(AwA10State, (obj), TYPE_AW_A10) @@ -31,5 +34,7 @@ typedef struct AwA10State { AwA10PICState intc; } AwA10State; +void aw_a10_load_script(const char *s); + #define ALLWINNER_H_ #endif diff --git a/pc-bios/aw-script.bin b/pc-bios/aw-script.bin new file mode 100644 index 0000000000000000000000000000000000000000..47bca6ff62695aca99ca4b9f2c6d74e98828b062 GIT binary patch literal 50188 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 OR4(L_e&nE(Z~qHdc_O6% literal 0 HcmV?d00001 -- 1.7.2.5