Patchwork [RFC,V1,05/14] pflash_cfi01: Added fdt generic platform support

login
register
mail settings
Submitter Peter A. G. Crosthwaite
Date Aug. 25, 2011, 6:41 a.m.
Message ID <1314254480-22438-6-git-send-email-peter.crosthwaite@petalogix.com>
Download mbox | patch
Permalink /patch/111472/
State New
Headers show

Comments

Peter A. G. Crosthwaite - Aug. 25, 2011, 6:41 a.m.
Added fdt generic platform support. Note that this does not add the fdt init
handler to the table of registered models as this needs to be handled in a
platform dependent way (due to target endianness issues). Fdt generic machine
models are required to register this device should it be supported.

Signed-off-by: Peter A. G. Crosthwaite <peter.crosthwaite@petalogix.com>
---
 hw/fdt_generic_devices.h |    8 ++++++++
 hw/pflash_cfi01.c        |   37 +++++++++++++++++++++++++++++++++++++
 2 files changed, 45 insertions(+), 0 deletions(-)
 create mode 100644 hw/fdt_generic_devices.h

Patch

diff --git a/hw/fdt_generic_devices.h b/hw/fdt_generic_devices.h
new file mode 100644
index 0000000..3bb4c05
--- /dev/null
+++ b/hw/fdt_generic_devices.h
@@ -0,0 +1,8 @@ 
+#ifndef FDT_GENERIC_DEVICES_H
+#define FDT_GENERIC_DEVICES_H
+
+#include "fdt_generic.h"
+
+int pflash_cfi01_fdt_init(char *node_path, FDTMachineInfo *fdti, void *opaque);
+
+#endif /* FDT_GENERIC_DEVICES_H */
diff --git a/hw/pflash_cfi01.c b/hw/pflash_cfi01.c
index 90e1301..5cc6c17 100644
--- a/hw/pflash_cfi01.c
+++ b/hw/pflash_cfi01.c
@@ -724,3 +724,40 @@  pflash_t *pflash_cfi01_register(target_phys_addr_t base, ram_addr_t off,
 
     return pfl;
 }
+
+#ifdef CONFIG_FDT
+
+#include "blockdev.h"
+
+#include "fdt_generic_util.h"
+#include "fdt_generic_devices.h"
+
+int pflash_cfi01_fdt_init(char *node_path, FDTMachineInfo *fdti, void *opaque) {
+
+    ram_addr_t phys_flash;
+    int flash_base = 0;
+    int flash_size = 0;
+
+    int be = *((int*)opaque);
+
+    DriveInfo *dinfo;
+    int bank_width;
+
+    flash_base = qemu_devtree_getprop(fdti->fdt, NULL, node_path, "reg", 0, 0);
+    flash_size = qemu_devtree_getprop(fdti->fdt, NULL, node_path, "reg", 1, 0);
+    bank_width = qemu_devtree_getprop(fdti->fdt, NULL, node_path, "bank-width",
+        0, 0);
+
+    printf("FDT: FLASH: baseaddr: 0x%x, size: 0x%x\n",
+           flash_base, flash_size);
+
+    phys_flash = qemu_ram_alloc(NULL, "mb.flash", flash_size);
+    dinfo = drive_get(IF_PFLASH, 0, 0);
+    pflash_cfi01_register(flash_base, phys_flash,
+        dinfo ? dinfo->bdrv : NULL, (64 * 1024),
+        flash_size >> 16,
+        bank_width, 0x89, 0x18, 0x0000, 0x0, be);
+    return 0;
+}
+
+#endif /* CONFIG_FDT */