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.crosthwa...@petalogix.com> --- hw/fdt_generic_devices.c | 45 +++++++++++++++++++++++++++++++++++++++++++ hw/fdt_generic_devices.h | 8 +++++++ hw/microblaze/Makefile.objs | 1 + 3 files changed, 54 insertions(+), 0 deletions(-) create mode 100644 hw/fdt_generic_devices.c create mode 100644 hw/fdt_generic_devices.h diff --git a/hw/fdt_generic_devices.c b/hw/fdt_generic_devices.c new file mode 100644 index 0000000..91b3c5b --- /dev/null +++ b/hw/fdt_generic_devices.c @@ -0,0 +1,45 @@ + +#include "blockdev.h" + +#include "fdt_generic_util.h" +#include "fdt_generic_devices.h" + +#define FLASH_SECTOR_SIZE (64 * 1024) + +/* FIXME: This file should go away. When these devices are properly QOMified + * then these FDT creations should happen automatically without need for these + * explict shim functions + */ + +int pflash_cfi01_fdt_init(char *node_path, FDTMachineInfo *fdti, void *opaque) +{ + + int flash_base = 0; + int flash_size = 0; + Error *errp = NULL; + + int be = *((int *)opaque); + + DriveInfo *dinfo; + int bank_width; + + flash_base = qemu_devtree_getprop_cell(fdti->fdt, node_path, "reg", 0, + false, &errp); + flash_size = qemu_devtree_getprop_cell(fdti->fdt, node_path, "reg", 1, + false, &errp); + bank_width = qemu_devtree_getprop_cell(fdti->fdt, node_path, "bank-width", + 0, false, &errp); + assert_no_error(errp); + + printf("FDT: FLASH: baseaddr: 0x%x, size: 0x%x\n", + flash_base, flash_size); + + dinfo = drive_get_next(IF_PFLASH); + pflash_cfi01_register(flash_base, NULL, node_path, flash_size, + dinfo ? dinfo->bdrv : NULL, FLASH_SECTOR_SIZE, + flash_size/FLASH_SECTOR_SIZE, + bank_width, 0x89, 0x18, 0x0000, 0x0, be); + return 0; +} + +#endif /* CONFIG_FDT */ 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/microblaze/Makefile.objs b/hw/microblaze/Makefile.objs index 23f9cbb..ef2d6b7 100644 --- a/hw/microblaze/Makefile.objs +++ b/hw/microblaze/Makefile.objs @@ -8,5 +8,6 @@ obj-$(CONFIG_FDT) += ../device_tree.o obj-$(CONFIG_FDT_GENERIC) += fdt_generic.o obj-$(CONFIG_FDT_GENERIC) += fdt_generic_util.o +obj-$(CONFIG_FDT_GENERIC) += fdt_generic_devices.o obj-y := $(addprefix ../,$(obj-y)) -- 1.7.0.4