diff --git a/libvirt-power8-models.patch b/libvirt-power8-models.patch
new file mode 100644
index 0000000..893e420
--- /dev/null
+++ b/libvirt-power8-models.patch
@@ -0,0 +1,18 @@
+--- a/src/cpu/cpu_map.xml 2014/08/19 16:05:34 1.1
++++ b/src/cpu/cpu_map.xml 2014/08/19 16:06:53
+@@ -614,5 +614,15 @@
+
+
+
++
++
++
++
++
++
++
++
++
++
+
+
diff --git a/libvirt-ppc64le-support.patch b/libvirt-ppc64le-support.patch
new file mode 100644
index 0000000..d9d7ac0
--- /dev/null
+++ b/libvirt-ppc64le-support.patch
@@ -0,0 +1,178 @@
+--- a/src/conf/domain_conf.c
++++ b/src/conf/domain_conf.c
+@@ -9515,7 +9515,8 @@
+ (STREQ(def->os.type, "xen") ||
+ STREQ(def->os.type, "linux")))
+ return VIR_DOMAIN_VIDEO_TYPE_XEN;
+- else if (def->os.arch == VIR_ARCH_PPC64)
++ else if (def->os.arch == VIR_ARCH_PPC64 ||
++ def->os.arch == VIR_ARCH_PPC64LE)
+ return VIR_DOMAIN_VIDEO_TYPE_VGA;
+ else
+ return VIR_DOMAIN_VIDEO_TYPE_CIRRUS;
+--- a/src/cpu/cpu_powerpc.c
++++ b/src/cpu/cpu_powerpc.c
+@@ -38,7 +38,7 @@
+
+ VIR_LOG_INIT("cpu.cpu_powerpc");
+
+-static const virArch archs[] = { VIR_ARCH_PPC64 };
++static const virArch archs[] = { VIR_ARCH_PPC64, VIR_ARCH_PPC64LE };
+
+ struct ppc_vendor {
+ char *name;
+--- a/src/qemu/qemu_capabilities.c
++++ b/src/qemu/qemu_capabilities.c
+@@ -624,7 +624,8 @@
+ if (qemuCaps->arch == VIR_ARCH_I686 ||
+ qemuCaps->arch == VIR_ARCH_X86_64)
+ parse = virQEMUCapsParseX86Models;
+- else if (qemuCaps->arch == VIR_ARCH_PPC64)
++ else if (qemuCaps->arch == VIR_ARCH_PPC64 ||
++ qemuCaps->arch == VIR_ARCH_PPC64LE)
+ parse = virQEMUCapsParsePPCModels;
+ else {
+ VIR_DEBUG("don't know how to parse %s CPU models",
+@@ -1984,7 +1985,8 @@
+ return true;
+
+ if (def->os.arch == VIR_ARCH_PPC ||
+- def->os.arch == VIR_ARCH_PPC64) {
++ def->os.arch == VIR_ARCH_PPC64||
++ def->os.arch == VIR_ARCH_PPC64LE) {
+ /*
+ * Usage of pci.0 naming:
+ *
+@@ -3551,7 +3553,9 @@
+ !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE))
+ return false;
+
+- if ((def->os.arch == VIR_ARCH_PPC) || (def->os.arch == VIR_ARCH_PPC64)) {
++ if (def->os.arch == VIR_ARCH_PPC ||
++ def->os.arch == VIR_ARCH_PPC64 ||
++ def->os.arch == VIR_ARCH_PPC64LE) {
+ /* only pseries need -device spapr-vty with -chardev */
+ return (chr->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_SERIAL &&
+ chr->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_SPAPRVIO);
+--- a/src/qemu/qemu_command.c
++++ b/src/qemu/qemu_command.c
+@@ -722,7 +722,8 @@
+ return -1;
+ }
+ } else {
+- if ((def->os.arch == VIR_ARCH_PPC64) &&
++ if ((def->os.arch == VIR_ARCH_PPC64 ||
++ def->os.arch == VIR_ARCH_PPC64LE) &&
+ STREQ(def->os.machine, "pseries")) {
+ *model = VIR_DOMAIN_CONTROLLER_MODEL_SCSI_IBMVSCSI;
+ } else if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_SCSI_LSI)) {
+@@ -1269,7 +1270,8 @@
+
+ for (i = 0; i < def->nserials; i++) {
+ if (def->serials[i]->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_SERIAL &&
+- (def->os.arch == VIR_ARCH_PPC64) &&
++ (def->os.arch == VIR_ARCH_PPC64 ||
++ def->os.arch == VIR_ARCH_PPC64LE) &&
+ STREQ(def->os.machine, "pseries"))
+ def->serials[i]->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_SPAPRVIO;
+ if (qemuAssignSpaprVIOAddress(def, &def->serials[i]->info,
+@@ -1278,7 +1280,8 @@
+ }
+
+ if (def->nvram) {
+- if (def->os.arch == VIR_ARCH_PPC64 &&
++ if ((def->os.arch == VIR_ARCH_PPC64 ||
++ def->os.arch == VIR_ARCH_PPC64LE) &&
+ STREQ(def->os.machine, "pseries"))
+ def->nvram->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_SPAPRVIO;
+ if (qemuAssignSpaprVIOAddress(def, &def->nvram->info,
+@@ -4097,7 +4100,8 @@
+ model = def->model;
+
+ if (model == -1) {
+- if (domainDef->os.arch == VIR_ARCH_PPC64)
++ if (domainDef->os.arch == VIR_ARCH_PPC64 ||
++ domainDef->os.arch == VIR_ARCH_PPC64LE)
+ model = VIR_DOMAIN_CONTROLLER_MODEL_USB_PCI_OHCI;
+ else
+ model = VIR_DOMAIN_CONTROLLER_MODEL_USB_PIIX3_UHCI;
+@@ -8066,7 +8070,8 @@
+ !qemuDomainMachineIsQ35(def) &&
+ (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_PIIX3_USB_UHCI) ||
+ (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_PCI_OHCI) &&
+- def->os.arch == VIR_ARCH_PPC64))) {
++ (def->os.arch == VIR_ARCH_PPC64 ||
++ def->os.arch == VIR_ARCH_PPC64LE)))) {
+ if (usblegacy) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("Multiple legacy USB controllers are "
+@@ -9256,7 +9261,8 @@
+ }
+
+ if (def->nvram) {
+- if (def->os.arch == VIR_ARCH_PPC64 &&
++ if ((def->os.arch == VIR_ARCH_PPC64 ||
++ def->os.arch == VIR_ARCH_PPC64LE) &&
+ STREQ(def->os.machine, "pseries")) {
+ if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_NVRAM)) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+@@ -9368,7 +9374,8 @@
+ {
+ virBuffer cmd = VIR_BUFFER_INITIALIZER;
+
+- if ((arch == VIR_ARCH_PPC64) && STREQ(machine, "pseries")) {
++ if ((arch == VIR_ARCH_PPC64 ||
++ arch == VIR_ARCH_PPC64LE) && STREQ(machine, "pseries")) {
+ if (serial->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_SERIAL &&
+ serial->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_SPAPRVIO) {
+ virBufferAsprintf(&cmd, "spapr-vty,chardev=char%s",
+@@ -9791,7 +9798,8 @@
+ if (VIR_ALLOC(def->src) < 0)
+ goto error;
+
+- if (((dom->os.arch == VIR_ARCH_PPC64) &&
++ if (((dom->os.arch == VIR_ARCH_PPC64 ||
++ dom->os.arch == VIR_ARCH_PPC64LE) &&
+ dom->os.machine && STREQ(dom->os.machine, "pseries")))
+ def->bus = VIR_DOMAIN_DISK_BUS_SCSI;
+ else
+@@ -9883,7 +9891,8 @@
+ } else if (STREQ(keywords[i], "if")) {
+ if (STREQ(values[i], "ide")) {
+ def->bus = VIR_DOMAIN_DISK_BUS_IDE;
+- if (((dom->os.arch == VIR_ARCH_PPC64) &&
++ if (((dom->os.arch == VIR_ARCH_PPC64 ||
++ dom->os.arch == VIR_ARCH_PPC64LE) &&
+ dom->os.machine && STREQ(dom->os.machine, "pseries"))) {
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ _("pseries systems do not support ide devices '%s'"), val);
+@@ -11121,7 +11130,8 @@
+ disk->src->type = VIR_STORAGE_TYPE_FILE;
+ if (STREQ(arg, "-cdrom")) {
+ disk->device = VIR_DOMAIN_DISK_DEVICE_CDROM;
+- if (((def->os.arch == VIR_ARCH_PPC64) &&
++ if (((def->os.arch == VIR_ARCH_PPC64 ||
++ def->os.arch == VIR_ARCH_PPC64LE) &&
+ def->os.machine && STREQ(def->os.machine, "pseries")))
+ disk->bus = VIR_DOMAIN_DISK_BUS_SCSI;
+ if (VIR_STRDUP(disk->dst, "hdc") < 0)
+@@ -11137,7 +11147,8 @@
+ disk->bus = VIR_DOMAIN_DISK_BUS_IDE;
+ else
+ disk->bus = VIR_DOMAIN_DISK_BUS_SCSI;
+- if (((def->os.arch == VIR_ARCH_PPC64) &&
++ if (((def->os.arch == VIR_ARCH_PPC64 ||
++ def->os.arch == VIR_ARCH_PPC64LE) &&
+ def->os.machine && STREQ(def->os.machine, "pseries")))
+ disk->bus = VIR_DOMAIN_DISK_BUS_SCSI;
+ }
+--- a/src/qemu/qemu_domain.c
++++ b/src/qemu/qemu_domain.c
+@@ -754,6 +754,7 @@
+ break;
+
+ case VIR_ARCH_PPC64:
++ case VIR_ARCH_PPC64LE:
+ addPCIRoot = true;
+ addDefaultUSBKBD = true;
+ addDefaultUSBMouse = true;
diff --git a/libvirt.changes b/libvirt.changes
index 3ca3e46..876677c 100644
--- a/libvirt.changes
+++ b/libvirt.changes
@@ -1,3 +1,21 @@
+-------------------------------------------------------------------
+Thu Aug 21 01:29:21 CEST 2014 - ro@suse.de
+
+- remove not necessary hunks from libvirt-ppc64le-support.patch
+- move new patches to section for to be upstreamed
+
+-------------------------------------------------------------------
+Wed Aug 20 01:23:46 CEST 2014 - ro@suse.de
+
+- add patch: libvirt-power8-models.patch
+ add current power8 cpu models to map
+
+-------------------------------------------------------------------
+Tue Aug 19 17:12:50 CEST 2014 - ro@suse.de
+
+- add patch: libvirt-ppc64le-support.patch
+ add preliminary ppc64le support to libvirt
+
-------------------------------------------------------------------
Fri Aug 8 03:23:10 UTC 2014 - cyliu@suse.com
diff --git a/libvirt.spec b/libvirt.spec
index 28b8ded..08d011f 100644
--- a/libvirt.spec
+++ b/libvirt.spec
@@ -432,6 +432,8 @@ Source99: baselibs.conf
Patch100: xen-name-for-devid.patch
Patch101: xen-pv-cdrom.patch
Patch102: blockcopy-check-dst-identical-device.patch
+Patch103: libvirt-ppc64le-support.patch
+Patch104: libvirt-power8-models.patch
# Our patches
Patch200: libvirtd-defaults.patch
Patch201: libvirtd-init-script.patch
@@ -946,6 +948,8 @@ namespaces.
%patch100 -p1
%patch101 -p1
%patch102 -p1
+%patch103 -p1
+%patch104 -p1
%patch200 -p1
%patch201 -p1
%patch202 -p1