[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2] allwinner-a10: add config script support
From: |
liguang |
Subject: |
[Qemu-devel] [PATCH v2] allwinner-a10: add config script support |
Date: |
Thu, 26 Dec 2013 14:47:18 +0800 |
sunxi-linux kernel parses a special config
script to do hardware configuration, bootloader
loads script into fixed RAM address, then
kernel will learn from it.
this script is transformed from a text script
into binary by a tool.
reference:
http://linux-sunxi.org/Sunxi-tools
script file address:
http://dl.dbank.com/c00aonvlmw
Signed-off-by: liguang <address@hidden>
---
hw/arm/allwinner-a10.c | 27 +++++++++++++++++++++++++++
hw/arm/cubieboard.c | 2 ++
include/hw/arm/allwinner-a10.h | 5 +++++
3 files changed, 34 insertions(+), 0 deletions(-)
diff --git a/hw/arm/allwinner-a10.c b/hw/arm/allwinner-a10.c
index 4658e19..f65b40b 100644
--- a/hw/arm/allwinner-a10.c
+++ b/hw/arm/allwinner-a10.c
@@ -18,6 +18,33 @@
#include "hw/sysbus.h"
#include "hw/devices.h"
#include "hw/arm/allwinner-a10.h"
+#include "hw/loader.h"
+#include "sysemu/sysemu.h"
+
+void aw_a10_load_script(void)
+{
+ char *file_name;
+ int file_size;
+
+ if (bios_name == NULL) {
+ bios_name = AW_CONFIG_SCRIPT;
+ }
+
+ file_name = qemu_find_file(QEMU_FILE_TYPE_BIOS, bios_name);
+ if (file_name == NULL) {
+ error_report("can't find %s\n", bios_name);
+ return;
+ }
+ file_size = get_image_size(file_name);
+ if (file_size < 0) {
+ error_report("can't get file size of %s\n", file_name);
+ return;
+ }
+ if (load_image_targphys(file_name, AW_SCRIPT_ADDR, file_size) < 0) {
+ error_report("can't load %s\n", file_name);
+ return;
+ }
+}
static void aw_a10_init(Object *obj)
{
diff --git a/hw/arm/cubieboard.c b/hw/arm/cubieboard.c
index 3fcb6d2..8482974 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();
+
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..ad20659 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 "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(void);
+
#define ALLWINNER_H_
#endif
--
1.7.2.5
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Qemu-devel] [PATCH v2] allwinner-a10: add config script support,
liguang <=