Split P8 and P9 Hostboot and OCC packages

This was causing a couple of issues:
1) increased complexity in build files
2) It breaks the pkg-version patch detection/checksum
3) Failing to apply patches to would silently fail

The split makes this a bit easier and requires less custom code.

We keep the P9 hostboot/occ named hostboot/occ, so that day-to-day,
nobody notices a difference. The only difference you'll notice
is if doing POWER8 hostboot/occ development, as the package name
will be 'hostboot-p8' or 'occ-p8'.

Fixes: https://github.com/open-power/op-build/issues/876
Fixes: https://github.com/open-power/op-build/issues/1194
Signed-off-by: Stewart Smith <stewart@linux.vnet.ibm.com>
diff --git a/openpower/package/hostboot-p8/0001-Increase-uart-delay.patch b/openpower/package/hostboot-p8/0001-Increase-uart-delay.patch
new file mode 100644
index 0000000..5c916d2
--- /dev/null
+++ b/openpower/package/hostboot-p8/0001-Increase-uart-delay.patch
@@ -0,0 +1,27 @@
+From 0c69e87e86e62253bc5a33cadf41e3d5f80971f0 Mon Sep 17 00:00:00 2001
+From: Brian Silver <bsilver@us.ibm.com>
+Date: Wed, 5 Nov 2014 14:16:36 -0600
+Subject: [PATCH] Changes for Habanero bringup, uart delay and centaur/vddr
+
+Change-Id: I381732be6facd25fb27bbd1f8ac0d75eb5b4980e
+---
+ src/usr/console/uart.C                         |  2 +-
+ src/usr/hwpf/hwp/dram_training/palmetto_vddr.C | 18 +++++++++++++-----
+ 2 files changed, 14 insertions(+), 6 deletions(-)
+
+diff --git a/src/usr/console/uart.C b/src/usr/console/uart.C
+index 385a05c..a269168 100644
+--- a/src/usr/console/uart.C
++++ b/src/usr/console/uart.C
+@@ -116,7 +116,7 @@ namespace CONSOLE
+             // Wait for transmit FIFO to have space.
+             {
+                 const uint64_t DELAY_NS = 100;
+-                const uint64_t DELAY_LOOPS = 10000;
++                const uint64_t DELAY_LOOPS = 100000000;
+ 
+                 uint8_t data = 0;
+                 uint64_t loops = 0;
+-- 
+1.9.1
+
diff --git a/openpower/package/hostboot-p8/0002-GCC-4.9-Make-compiler-use-ELFv1-ABI.patch b/openpower/package/hostboot-p8/0002-GCC-4.9-Make-compiler-use-ELFv1-ABI.patch
new file mode 100644
index 0000000..66bc026
--- /dev/null
+++ b/openpower/package/hostboot-p8/0002-GCC-4.9-Make-compiler-use-ELFv1-ABI.patch
@@ -0,0 +1,36 @@
+From 005cac73915ee6f6b67e9b01ae840b798c1fc80e Mon Sep 17 00:00:00 2001
+From: Andrew Geissler <andrewg@us.ibm.com>
+Date: Mon, 16 Feb 2015 13:43:51 -0600
+Subject: [PATCH] GCC 4.9: Make compiler use ELFv1 ABI.
+
+GCC4.9 defaults to ELFv2 ABI support but we do not have all
+of the needed tools to suppor this.
+
+Change-Id: Iacf49c46b1fb25776ba60d6506ccadff7b46bf60
+RTC: 123430
+---
+ src/build/mkrules/cflags.env.mk |    9 ++++++---
+ 1 files changed, 6 insertions(+), 3 deletions(-)
+
+diff --git a/src/build/mkrules/cflags.env.mk b/src/build/mkrules/cflags.env.mk
+index 8ca32b1..c729341 100644
+--- a/src/build/mkrules/cflags.env.mk
++++ b/src/build/mkrules/cflags.env.mk
+@@ -36,10 +37,12 @@ CFLAGS += -D__HOSTBOOT_MODULE=$(MODULE)
+ endif
+ 
+ COMMONFLAGS += $(OPT_LEVEL) -nostdlib
++# TODO RTC: 123994 - ELFv2 ABI support (-mabi=elfv1)
+ CFLAGS += $(COMMONFLAGS) -mcpu=power7 -nostdinc -g -mno-vsx -mno-altivec\
+           -Wall -Werror -mtraceback=no -pipe \
+-	  -ffunction-sections -fdata-sections -ffreestanding -mbig-endian
+-ASMFLAGS += $(COMMONFLAGS) -mcpu=power7 -mbig-endian
++	  -ffunction-sections -fdata-sections -ffreestanding -mbig-endian \
++      -mabi=elfv1
++ASMFLAGS += $(COMMONFLAGS) -mcpu=power7 -mbig-endian -mabi=elfv1
+ CXXFLAGS += $(CFLAGS) -nostdinc++ -fno-rtti -fno-exceptions -Wall \
+ 	    -fuse-cxa-atexit
+ LDFLAGS += --nostdlib --sort-common -EB $(COMMONFLAGS)
+-- 
+1.7.4.1
+
diff --git a/openpower/package/hostboot-p8/0003-Default-to-std-gnu-03.patch b/openpower/package/hostboot-p8/0003-Default-to-std-gnu-03.patch
new file mode 100644
index 0000000..f6c6710
--- /dev/null
+++ b/openpower/package/hostboot-p8/0003-Default-to-std-gnu-03.patch
@@ -0,0 +1,32 @@
+From bc7b8b21549752274b162c64dbce3c81d20f2cab Mon Sep 17 00:00:00 2001
+From: Stewart Smith <stewart@linux.vnet.ibm.com>
+Date: Thu, 25 Aug 2016 20:22:30 +1000
+Subject: [PATCH 03/10] Default to std=gnu++03
+
+Seeing as no C++ dialect was previously selected, GCC < 6 defaulted
+to GNU++98 as the standard C++ mode. However... it seems that C++03
+is a better match for HostBoot code (confirmed by Patrick Williams
+in https://github.com/open-power/hostboot/pull/62#discussion_r76830612 )
+
+Change-Id: I6661b5b61319c85c2a90926beb6e2662e96dcf06
+Signed-off-by: Stewart Smith <stewart@linux.vnet.ibm.com>
+---
+ src/build/mkrules/cflags.env.mk | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/build/mkrules/cflags.env.mk b/src/build/mkrules/cflags.env.mk
+index c805999..0bae0ec 100644
+--- a/src/build/mkrules/cflags.env.mk
++++ b/src/build/mkrules/cflags.env.mk
+@@ -41,7 +41,7 @@ CFLAGS += $(COMMONFLAGS) -mcpu=power7 -nostdinc -g -mno-vsx -mno-altivec\
+ 	  -ffunction-sections -fdata-sections -ffreestanding -mbig-endian
+ ASMFLAGS += $(COMMONFLAGS) -mcpu=power7 -mbig-endian
+ CXXFLAGS += $(CFLAGS) -nostdinc++ -fno-rtti -fno-exceptions -Wall \
+-	    -fuse-cxa-atexit
++	    -fuse-cxa-atexit -std=gnu++03
+ LDFLAGS += --nostdlib --sort-common -EB $(COMMONFLAGS)
+ 
+ INCFLAGS = $(addprefix -I, $(INCDIR) )
+-- 
+2.7.4
+
diff --git a/openpower/package/hostboot-p8/0004-fix-build-error-return-statement-with-a-value-in-fun.patch b/openpower/package/hostboot-p8/0004-fix-build-error-return-statement-with-a-value-in-fun.patch
new file mode 100644
index 0000000..b1ecacd
--- /dev/null
+++ b/openpower/package/hostboot-p8/0004-fix-build-error-return-statement-with-a-value-in-fun.patch
@@ -0,0 +1,28 @@
+From 6ae906e70c7209e69b750f6566263fe4998dfb48 Mon Sep 17 00:00:00 2001
+From: Stewart Smith <stewart@linux.vnet.ibm.com>
+Date: Thu, 25 Aug 2016 19:22:00 +1000
+Subject: [PATCH 04/10] fix build error: return-statement with a value, in
+ function returning 'void'
+
+Change-Id: I9dc8b698fec95488e209cbc40b928769a26b6de6
+Signed-off-by: Stewart Smith <stewart@linux.vnet.ibm.com>
+---
+ src/include/usr/devicefw/driverif.H | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/include/usr/devicefw/driverif.H b/src/include/usr/devicefw/driverif.H
+index a148725..fb43073 100644
+--- a/src/include/usr/devicefw/driverif.H
++++ b/src/include/usr/devicefw/driverif.H
+@@ -266,7 +266,7 @@ namespace DeviceFW
+                              TargType i_targetType,
+                              deviceOp_t i_regRoute)
+     {
+-        return InvalidParameterType(); // Cause a compile fail if not one of
++        InvalidParameterType(); // Cause a compile fail if not one of
+                                        // the explicit template specializations.
+     }
+ 
+-- 
+2.7.4
+
diff --git a/openpower/package/hostboot-p8/0005-error-dereferencing-type-punned-pointer-will-break-s.patch b/openpower/package/hostboot-p8/0005-error-dereferencing-type-punned-pointer-will-break-s.patch
new file mode 100644
index 0000000..fcfe570
--- /dev/null
+++ b/openpower/package/hostboot-p8/0005-error-dereferencing-type-punned-pointer-will-break-s.patch
@@ -0,0 +1,71 @@
+From 550d36dca3cdec84d47f05711c2569990d3b4708 Mon Sep 17 00:00:00 2001
+From: Stewart Smith <stewart@linux.vnet.ibm.com>
+Date: Thu, 25 Aug 2016 19:27:04 +1000
+Subject: [PATCH 05/10] error: dereferencing type-punned pointer will break
+ strict-aliasing rules
+
+Change-Id: I63accd3e881c941736ece4b4498c2c9d06ff8761
+Signed-off-by: Stewart Smith <stewart@linux.vnet.ibm.com>
+---
+ src/include/usr/hwpf/hwp/mvpd_accessors/getMBvpdAttr.H             | 7 +++++++
+ .../usr/hwpf/hwp/mvpd_accessors/getMBvpdMemoryDataVersion.H        | 1 -
+ src/usr/hwpf/hwp/mvpd_accessors/getMBvpdMemoryDataVersion.C        | 6 +++---
+ 3 files changed, 10 insertions(+), 4 deletions(-)
+
+diff --git a/src/include/usr/hwpf/hwp/mvpd_accessors/getMBvpdAttr.H b/src/include/usr/hwpf/hwp/mvpd_accessors/getMBvpdAttr.H
+index e5af2c9..7edf2bf 100755
+--- a/src/include/usr/hwpf/hwp/mvpd_accessors/getMBvpdAttr.H
++++ b/src/include/usr/hwpf/hwp/mvpd_accessors/getMBvpdAttr.H
+@@ -227,6 +227,13 @@ namespace getAttrData
+         uint8_t              iv_systemType;
+         uint8_t              iv_systemType_ext;
+         uint8_t              iv_dataVersion;
++    public:
++	MBvpdVMKeyword() : iv_version(0),iv_systemType(0),
++			   iv_systemType_ext(0),iv_dataVersion(0) {};
++	operator uint32_t() const {
++		return iv_version << 24 | iv_systemType << 16 |
++			iv_systemType_ext << 8 | iv_dataVersion;
++	}
+     };
+ //  Attribute definition
+     struct MBvpdAttrDef
+diff --git a/src/include/usr/hwpf/hwp/mvpd_accessors/getMBvpdMemoryDataVersion.H b/src/include/usr/hwpf/hwp/mvpd_accessors/getMBvpdMemoryDataVersion.H
+index f172508..85460b2 100644
+--- a/src/include/usr/hwpf/hwp/mvpd_accessors/getMBvpdMemoryDataVersion.H
++++ b/src/include/usr/hwpf/hwp/mvpd_accessors/getMBvpdMemoryDataVersion.H
+@@ -33,7 +33,6 @@
+ #define _HWP_GETMBVPDMEMDATAVERSION_
+ 
+ #include <fapi.H>
+-#define VM_KEYWORD_DEFAULT_VALUE 0x00000000
+ 
+ // function pointer typedef definition for HWP call support
+ typedef fapi::ReturnCode (*getMBvpdMemoryDataVersion_FP_t)
+diff --git a/src/usr/hwpf/hwp/mvpd_accessors/getMBvpdMemoryDataVersion.C b/src/usr/hwpf/hwp/mvpd_accessors/getMBvpdMemoryDataVersion.C
+index 2f83fa2..ef64515 100644
+--- a/src/usr/hwpf/hwp/mvpd_accessors/getMBvpdMemoryDataVersion.C
++++ b/src/usr/hwpf/hwp/mvpd_accessors/getMBvpdMemoryDataVersion.C
+@@ -50,7 +50,7 @@ fapi::ReturnCode getMBvpdMemoryDataVersion(
+     fapi::ReturnCode l_fapirc;
+     DimmType l_dimmType = ISDIMM;
+     fapi::MBvpdRecord  l_record  = fapi::MBVPD_RECORD_SPDX;
+-    uint32_t l_vpdMemoryDataVersion = VM_KEYWORD_DEFAULT_VALUE;   
++    MBvpdVMKeyword l_vpdMemoryDataVersion;
+     uint32_t l_bufSize = sizeof(l_vpdMemoryDataVersion);
+ 
+     FAPI_DBG("getMBvpdMemoryDataVersion: entry ");
+@@ -140,8 +140,8 @@ fapi::ReturnCode getMBvpdMemoryDataVersion(
+         }
+                     
+         // Check if the format byte in the value returned is in between valid range
+-        if (( ((MBvpdVMKeyword *)(&l_vpdMemoryDataVersion))->iv_version >  VM_SUPPORTED_HIGH_VER )||
+-            ( ((MBvpdVMKeyword *)(&l_vpdMemoryDataVersion))->iv_version == VM_NOT_SUPPORTED ))
++        if ((l_vpdMemoryDataVersion.iv_version >  VM_SUPPORTED_HIGH_VER )||
++            (l_vpdMemoryDataVersion.iv_version == VM_NOT_SUPPORTED ))
+         {
+             FAPI_ERR("getMBvpdMemoryDataVersion:"
+                      " keyword data returned is invalid : %d ",
+-- 
+2.7.4
+
diff --git a/openpower/package/hostboot-p8/0006-Change-cv_forcedMemPeriodic-to-uint8_t-as-bool-is-in.patch b/openpower/package/hostboot-p8/0006-Change-cv_forcedMemPeriodic-to-uint8_t-as-bool-is-in.patch
new file mode 100644
index 0000000..666c747
--- /dev/null
+++ b/openpower/package/hostboot-p8/0006-Change-cv_forcedMemPeriodic-to-uint8_t-as-bool-is-in.patch
@@ -0,0 +1,70 @@
+From 74d099aaffa37498859c0840771052f50253ce4d Mon Sep 17 00:00:00 2001
+From: Stewart Smith <stewart@linux.vnet.ibm.com>
+Date: Thu, 25 Aug 2016 19:33:42 +1000
+Subject: [PATCH 06/10] Change cv_forcedMemPeriodic to uint8_t as bool is
+ invalid
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+GCC6 throws the following error:
+operand type ‘bool*’ is incompatible with argument 1 of ‘__sync_fetch_and_and’
+
+GCC documents that bool is invalid for __sync builtins over at:
+https://gcc.gnu.org/onlinedocs/gcc/_005f_005fsync-Builtins.html#g_t_005f_005fsync-Builtins
+" GCC allows any scalar type that is 1, 2, 4 or 8 bytes in size other than the C type _Bool or the C++ type bool"
+
+Change-Id: Iab6415348cb19f590921d8ccc5349867fa57a42d
+Signed-off-by: Stewart Smith <stewart@linux.vnet.ibm.com>
+---
+ src/include/kernel/cpumgr.H | 2 +-
+ src/kernel/cpumgr.C         | 6 +++---
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/src/include/kernel/cpumgr.H b/src/include/kernel/cpumgr.H
+index 68f8972..6e9b697 100644
+--- a/src/include/kernel/cpumgr.H
++++ b/src/include/kernel/cpumgr.H
+@@ -215,7 +215,7 @@ class CpuManager
+              */
+         static uint64_t cv_cpuSeq;
+ 
+-        static bool cv_forcedMemPeriodic;       //!<  force free / coalesce.
++        static uint8_t cv_forcedMemPeriodic;       //!<  force free / coalesce.
+ 
+         // If a shutdown of all CPUs is requested
+         static bool cv_shutdown_requested;
+diff --git a/src/kernel/cpumgr.C b/src/kernel/cpumgr.C
+index 44f61a1..ce7516f 100644
+--- a/src/kernel/cpumgr.C
++++ b/src/kernel/cpumgr.C
+@@ -50,7 +50,7 @@ cpu_t** CpuManager::cv_cpus[KERNEL_MAX_SUPPORTED_NODES];
+ bool CpuManager::cv_shutdown_requested = false;
+ uint64_t CpuManager::cv_shutdown_status = 0;
+ size_t CpuManager::cv_cpuSeq = 0;
+-bool CpuManager::cv_forcedMemPeriodic = false;
++uint8_t CpuManager::cv_forcedMemPeriodic = 0;
+ InteractiveDebug CpuManager::cv_interactive_debug;
+ 
+ CpuManager::CpuManager() : iv_lastStartTimebase(0)
+@@ -361,7 +361,7 @@ void CpuManager::executePeriodics(cpu_t * i_cpu)
+         }
+ 
+         bool forceMemoryPeriodic = __sync_fetch_and_and(&cv_forcedMemPeriodic,
+-                                                        false);
++                                                        0);
+ 
+         ++(i_cpu->periodic_count);
+         if((0 == (i_cpu->periodic_count % CPU_PERIODIC_CHECK_MEMORY)) ||
+@@ -461,7 +461,7 @@ size_t CpuManager::getThreadCount()
+ 
+ void CpuManager::forceMemoryPeriodic()
+ {
+-    cv_forcedMemPeriodic = true;
++    cv_forcedMemPeriodic = 1;
+ }
+ 
+ 
+-- 
+2.7.4
+
diff --git a/openpower/package/hostboot-p8/0007-error-the-compiler-can-assume-that-the-address-of-r-.patch b/openpower/package/hostboot-p8/0007-error-the-compiler-can-assume-that-the-address-of-r-.patch
new file mode 100644
index 0000000..9c2c8f4
--- /dev/null
+++ b/openpower/package/hostboot-p8/0007-error-the-compiler-can-assume-that-the-address-of-r-.patch
@@ -0,0 +1,34 @@
+From 8797f215a09a89c271dab484b892ceedd2486615 Mon Sep 17 00:00:00 2001
+From: Stewart Smith <stewart@linux.vnet.ibm.com>
+Date: Thu, 25 Aug 2016 20:13:11 +1000
+Subject: [PATCH 07/10] =?UTF-8?q?error:=20the=20compiler=20can=20assume=20?=
+ =?UTF-8?q?that=20the=20address=20of=20=E2=80=98r=E2=80=99=20will=20never?=
+ =?UTF-8?q?=20be=20NULL?=
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+     PRDF_ASSERT( &r  != NULL );
+
+Change-Id: I2d60075f9e2232512efe45a5c6aa5563f3a565f5
+Signed-off-by: Stewart Smith <stewart@linux.vnet.ibm.com>
+---
+ src/usr/diag/prdf/common/framework/register/prdfErrorRegister.C | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/src/usr/diag/prdf/common/framework/register/prdfErrorRegister.C b/src/usr/diag/prdf/common/framework/register/prdfErrorRegister.C
+index 9ee1358..ef7279b 100755
+--- a/src/usr/diag/prdf/common/framework/register/prdfErrorRegister.C
++++ b/src/usr/diag/prdf/common/framework/register/prdfErrorRegister.C
+@@ -120,8 +120,6 @@ ErrorRegister::ErrorRegister( SCAN_COMM_REGISTER_CLASS & r, ResolutionMap & rm,
+     ErrorRegisterType(), scr(r), scr_rc(SUCCESS), rMap(rm),
+     xNoErrorOnZeroScr(false), xScrId(scrId)
+ {
+-    PRDF_ASSERT( &r  != NULL );
+-    PRDF_ASSERT( &rm != NULL );
+ }
+ 
+ /*---------------------------------------------------------------------*/
+-- 
+2.7.4
+
diff --git a/openpower/package/hostboot-p8/0008-Fix-compiler-can-assume-address-will-never-be-NULL-e.patch b/openpower/package/hostboot-p8/0008-Fix-compiler-can-assume-address-will-never-be-NULL-e.patch
new file mode 100644
index 0000000..73adecc
--- /dev/null
+++ b/openpower/package/hostboot-p8/0008-Fix-compiler-can-assume-address-will-never-be-NULL-e.patch
@@ -0,0 +1,90 @@
+From b315c53f2803b84e35fe646aa82702b82e8ecd98 Mon Sep 17 00:00:00 2001
+From: Stewart Smith <stewart@linux.vnet.ibm.com>
+Date: Thu, 25 Aug 2016 20:07:58 +1000
+Subject: [PATCH 08/10] Fix compiler can assume address will never be NULL
+ error with GCC6
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+So, it turns out that relying on the address of something passed by
+reference being able to be NULL isn't exactly a good idea, or remotely
+obvious code. So, instead, do the sane thing and pass a pointer and
+check it.
+
+../../../../src/usr/diag/prdf/common/framework/register/prdfOperatorRegister.H:
+In constructor ‘PRDF::AttnTypeRegister::AttnTypeRegister(PRDF::SCAN_COMM_REGISTE
+R_CLASS&, PRDF::SCAN_COMM_REGISTER_CLASS&, PRDF::SCAN_COMM_REGISTER_CLASS&, PRDF
+::SCAN_COMM_REGISTER_CLASS&)’:
+../../../../src/usr/diag/prdf/common/framework/register/prdfOperatorRegister.H:4
+42:21: error: the compiler can assume that the address of ‘i_check’ will never b
+e NULL [-Werror=address]
+         iv_check(  NULL == &i_check   ? &cv_null : &i_check),
+                   ~~^~~~~~~~~~~
+../../../../src/usr/diag/prdf/common/framework/register/prdfOperatorRegister.H:4
+43:21: error: the compiler can assume that the address of ‘i_recov’ will never b
+e NULL [-Werror=address]
+         iv_recov(  NULL == &i_recov   ? &cv_null : &i_recov),
+                   ~~^~~~~~~~~~~
+../../../../src/usr/diag/prdf/common/framework/register/prdfOperatorRegister.H:4
+44:22: error: the compiler can assume that the address of ‘i_special’ will never
+ be NULL [-Werror=address]
+         iv_special(NULL == &i_special ? &cv_null : &i_special),
+                    ~~^~~~~~~~~~~~~
+../../../../src/usr/diag/prdf/common/framework/register/prdfOperatorRegister.H:4
+45:22: error: the compiler can assume that the address of ‘i_proccs’ will never
+be NULL [-Werror=address]
+         iv_proccs( NULL == &i_proccs  ? &cv_null : &i_proccs),
+                    ~~^~~~~~~~~~~~
+
+Change-Id: Iecd8636da67aac24f64f73fd82b1f7ccbfced900
+Signed-off-by: Stewart Smith <stewart@linux.vnet.ibm.com>
+---
+ .../common/framework/register/prdfOperatorRegister.H     | 16 ++++++++--------
+ .../prdf/common/framework/register/prdfScanFacility.C    |  2 +-
+ 2 files changed, 9 insertions(+), 9 deletions(-)
+
+diff --git a/src/usr/diag/prdf/common/framework/register/prdfOperatorRegister.H b/src/usr/diag/prdf/common/framework/register/prdfOperatorRegister.H
+index b0513e4..a26a76e 100755
+--- a/src/usr/diag/prdf/common/framework/register/prdfOperatorRegister.H
++++ b/src/usr/diag/prdf/common/framework/register/prdfOperatorRegister.H
+@@ -434,15 +434,15 @@ class AttnTypeRegister : public SCAN_COMM_REGISTER_CLASS
+         iv_bs = &iv_iBS;
+     }
+ 
+-    AttnTypeRegister( SCAN_COMM_REGISTER_CLASS & i_check,
+-                      SCAN_COMM_REGISTER_CLASS & i_recov,
+-                      SCAN_COMM_REGISTER_CLASS & i_special,
+-                      SCAN_COMM_REGISTER_CLASS & i_proccs ) :
++    AttnTypeRegister( SCAN_COMM_REGISTER_CLASS *i_check,
++                      SCAN_COMM_REGISTER_CLASS *i_recov,
++                      SCAN_COMM_REGISTER_CLASS *i_special,
++                      SCAN_COMM_REGISTER_CLASS *i_proccs ) :
+         SCAN_COMM_REGISTER_CLASS( ),
+-        iv_check(  NULL == &i_check   ? &cv_null : &i_check),
+-        iv_recov(  NULL == &i_recov   ? &cv_null : &i_recov),
+-        iv_special(NULL == &i_special ? &cv_null : &i_special),
+-        iv_proccs( NULL == &i_proccs  ? &cv_null : &i_proccs),
++        iv_check(  NULL == i_check   ? &cv_null : i_check),
++        iv_recov(  NULL == i_recov   ? &cv_null : i_recov),
++        iv_special(NULL == i_special ? &cv_null : i_special),
++        iv_proccs( NULL == i_proccs  ? &cv_null : i_proccs),
+         iv_iBS(0)         // will fully initialize this inside ctor.
+     {
+         uint32_t l_length = 1024;
+diff --git a/src/usr/diag/prdf/common/framework/register/prdfScanFacility.C b/src/usr/diag/prdf/common/framework/register/prdfScanFacility.C
+index 0d379cf..cad5ce8 100755
+--- a/src/usr/diag/prdf/common/framework/register/prdfScanFacility.C
++++ b/src/usr/diag/prdf/common/framework/register/prdfScanFacility.C
+@@ -166,7 +166,7 @@ SCAN_COMM_REGISTER_CLASS &  ScanFacility::GetAttnTypeRegister(
+                                            SCAN_COMM_REGISTER_CLASS * i_special,
+                                            SCAN_COMM_REGISTER_CLASS * i_proccs )
+ {
+-  AttnTypeRegister r(*i_check, *i_recov, *i_special, *i_proccs);
++  AttnTypeRegister r(i_check, i_recov, i_special, i_proccs);
+   return iv_attnRegFw.get(r);
+ }
+ 
+-- 
+2.7.4
+
diff --git a/openpower/package/hostboot-p8/0009-error-in-C-98-l_vmVersionBuf-must-be-initialized-by-.patch b/openpower/package/hostboot-p8/0009-error-in-C-98-l_vmVersionBuf-must-be-initialized-by-.patch
new file mode 100644
index 0000000..7e17bf9
--- /dev/null
+++ b/openpower/package/hostboot-p8/0009-error-in-C-98-l_vmVersionBuf-must-be-initialized-by-.patch
@@ -0,0 +1,33 @@
+From 9279a2bf255392321594b9457a67b796195b0891 Mon Sep 17 00:00:00 2001
+From: Stewart Smith <stewart@linux.vnet.ibm.com>
+Date: Wed, 31 Aug 2016 13:07:17 +1000
+Subject: [PATCH 09/10] =?UTF-8?q?error:=20in=20C++98=20=E2=80=98l=5FvmVers?=
+ =?UTF-8?q?ionBuf=E2=80=99=20must=20be=20initialized=20by=20constructor?=
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+fix GCC6 thrown error
+
+Change-Id: I9aa508843f54c99ebb59822c39590811423ad0b1
+Signed-off-by: Stewart Smith <stewart@linux.vnet.ibm.com>
+---
+ src/usr/hwpf/hwp/mvpd_accessors/getMBvpdAttr.C | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/usr/hwpf/hwp/mvpd_accessors/getMBvpdAttr.C b/src/usr/hwpf/hwp/mvpd_accessors/getMBvpdAttr.C
+index 3739c75..a4685ad 100755
+--- a/src/usr/hwpf/hwp/mvpd_accessors/getMBvpdAttr.C
++++ b/src/usr/hwpf/hwp/mvpd_accessors/getMBvpdAttr.C
+@@ -392,7 +392,7 @@ fapi::ReturnCode getVersion  (const fapi::Target    & i_mbaTarget,
+     fapi::Target l_mbTarget;
+     fapi::MBvpdKeyword l_keyword = fapi::MBVPD_KEYWORD_VM;  // try VM first
+     fapi::MBvpdRecord  l_record  = fapi::MBVPD_RECORD_SPDX; // default to SPDX
+-    MBvpdVMKeyword l_vmVersionBuf={};
++    MBvpdVMKeyword l_vmVersionBuf;
+     uint32_t l_version = 0;
+     uint32_t l_vmBufSize = sizeof(MBvpdVMKeyword); // VM keyword is of 4 bytes.
+     uint16_t l_versionBuf = 0;
+-- 
+2.7.4
+
diff --git a/openpower/package/hostboot-p8/0010-Use-std-gnu-03-for-host-g-invocations.patch b/openpower/package/hostboot-p8/0010-Use-std-gnu-03-for-host-g-invocations.patch
new file mode 100644
index 0000000..a9cef3f
--- /dev/null
+++ b/openpower/package/hostboot-p8/0010-Use-std-gnu-03-for-host-g-invocations.patch
@@ -0,0 +1,69 @@
+From 9852975319c864b47759cc8d7814bf6f9f0f1f4c Mon Sep 17 00:00:00 2001
+From: Stewart Smith <stewart@linux.vnet.ibm.com>
+Date: Thu, 3 Nov 2016 14:36:19 +1100
+Subject: [PATCH 10/10] Use -std=gnu++03 for host g++ invocations
+
+Seeing as the ancient GCC on RHEL6 doesn't actually support -std=gnu++03
+we have to go through some hoops to detect it (we use the same magic
+Make as we use in skiboot to do the same)
+
+Change-Id: I338560ae2ebdac842c8055c07519d542564c3923
+Signed-off-by: Stewart Smith <stewart@linux.vnet.ibm.com>
+---
+ src/usr/hwpf/makefile | 16 ++++++++++++----
+ 1 file changed, 12 insertions(+), 4 deletions(-)
+
+diff --git a/src/usr/hwpf/makefile b/src/usr/hwpf/makefile
+index 8d0bb72..ee8cf13 100644
+--- a/src/usr/hwpf/makefile
++++ b/src/usr/hwpf/makefile
+@@ -5,7 +5,7 @@
+ #
+ # OpenPOWER HostBoot Project
+ #
+-# Contributors Listed Below - COPYRIGHT 2011,2015
++# Contributors Listed Below - COPYRIGHT 2011,2016
+ # [+] International Business Machines Corp.
+ #
+ #
+@@ -402,18 +402,26 @@ $(call GENTARGET, ${IF_CMP_FLEX_TARGET}) : \
+ 	$(C2) "    FLEX       $(notdir $<)"
+ 	$(C1)flex -o$@ $^
+ 
++try = $(shell set -e; if ($(1)) >/dev/null 2>&1; \
++        then echo "$(2)"; \
++        else echo "$(3)"; fi )
++
++try-cflag = $(call try,$(1) $(2) -x c -c /dev/null -o /dev/null,$(2))
++HOSTCFLAGS:=-O3
++HOSTCFLAGS+=$(call try-cflag,$(HOST_PREFIX)g++,-std=gnu++03)
++
+ $(GENDIR)/$(IF_CMP_SUBDIR)/%.host.o: \
+ 	    ifcompiler/%.C $(IF_COMPILER_H_FILES) \
+ 	    $(GENDIR)/$(IF_CMP_YACC_H_TARGET)
+ 	$(C2) "    CXX        $(notdir $<)"
+-	$(C1)$(CCACHE) $(HOST_PREFIX)g++ -O3 $< -I ifcompiler -I $(GENDIR) \
++	$(C1)$(CCACHE) $(HOST_PREFIX)g++ $(HOSTCFLAGS) $< -I ifcompiler -I $(GENDIR) \
+ 			-I $(GENDIR)/$(IF_CMP_SUBDIR) \
+ 			-I $(ROOTPATH)/src/include/usr/hwpf/hwp -c -o $@
+ 
+ $(GENDIR)/$(IF_CMP_YACC_C_TARGET:.c=.host.o): \
+     $(GENDIR)/$(IF_CMP_YACC_C_TARGET) $(IF_COMPILER_H_FILES)
+ 	$(C2) "    CXX        $(notdir $<)"
+-	$(C1)$(CCACHE) $(HOST_PREFIX)g++ -O3 $< -I ifcompiler -I $(GENDIR) \
++	$(C1)$(CCACHE) $(HOST_PREFIX)g++ $(HOSTCFLAGS) $< -I ifcompiler -I $(GENDIR) \
+ 			-I $(GENDIR)/$(IF_CMP_SUBDIR) \
+ 			-I $(ROOTPATH)/src/include/usr/hwpf/hwp -c -o $@
+ 
+@@ -421,7 +429,7 @@ $(GENDIR)/$(IF_CMP_FLEX_TARGET:.c=.host.o): \
+     $(GENDIR)/$(IF_CMP_FLEX_TARGET) $(IF_COMPILER_H_FILES) \
+     $(GENDIR)/$(IF_CMP_YACC_H_TARGET)
+ 	$(C2) "    CXX        $(notdir $<)"
+-	$(C1)$(CCACHE) $(HOST_PREFIX)g++ -O3 -DHOSTBOOT_COMPILE $< -I ifcompiler -I $(GENDIR) \
++	$(C1)$(CCACHE) $(HOST_PREFIX)g++ $(HOSTCFLAGS) -DHOSTBOOT_COMPILE $< -I ifcompiler -I $(GENDIR) \
+ 			-I $(GENDIR)/$(IF_CMP_SUBDIR) \
+ 			-I $(ROOTPATH)/src/include/usr/hwpf/hwp -c -o $@
+ 
+-- 
+2.7.4
+
diff --git a/openpower/package/hostboot-p8/0012-kernel-Update-assembly-for-modern-binutils.patch b/openpower/package/hostboot-p8/0012-kernel-Update-assembly-for-modern-binutils.patch
new file mode 100644
index 0000000..2c51fd3
--- /dev/null
+++ b/openpower/package/hostboot-p8/0012-kernel-Update-assembly-for-modern-binutils.patch
@@ -0,0 +1,72 @@
+From 63c3b788eebfa28f0b4032c209e90cc2df7b2c98 Mon Sep 17 00:00:00 2001
+From: Joel Stanley <joel.stanley@au1.ibm.com>
+Date: Tue, 27 Jun 2017 18:00:09 +0930
+Subject: [PATCH] kernel: Update assembly for modern binutils
+
+From Linux 80f23935cadb ("powerpc: Convert cmp to cmpd in idle enter sequence"):
+
+  PowerPC's "cmp" instruction has four operands. Normally people write
+  "cmpw" or "cmpd" for the second cmp operand 0 or 1. But, frequently
+  people forget, and write "cmp" with just three operands.
+
+  With older binutils this is silently accepted as if this was "cmpw",
+  while often "cmpd" is wanted. With newer binutils GAS will complain
+  about this for 64-bit code. For 32-bit code it still silently assumes
+  "cmpw" is what is meant.
+
+The first two instances are dealing with SPRs, which are 32-bit, so cmpw is correct.
+
+It is not clear what to do in the third use of cmp, but given old toolchains
+have generated cmpw lets assume that we should maintain the behaviour.
+
+Change-Id: Iee5dd5903dcd7ac4028bab0176e08ce3db23b2d5
+Signed-off-by: Joel Stanley <joel.stanley@au1.ibm.com>
+---
+ src/kernel/shutdown.S | 10 ++++++----
+ 1 file changed, 6 insertions(+), 4 deletions(-)
+
+diff --git a/src/kernel/shutdown.S b/src/kernel/shutdown.S
+index 629645b26c81..cad5c66b8137 100644
+--- a/src/kernel/shutdown.S
++++ b/src/kernel/shutdown.S
+@@ -5,7 +5,9 @@
+ #
+ # OpenPOWER HostBoot Project
+ #
+-# COPYRIGHT International Business Machines Corp. 2012,2014
++# Contributors Listed Below - COPYRIGHT 2012,2017
++# [+] International Business Machines Corp.
++#
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+@@ -92,7 +94,7 @@ kernel_shutdown_ea0_1_mode:
+         ;// as it was the one that updated the cpu_count & lowest_pir
+         ;// barrier - 1 wait for all nodes to report
+     mfspr  r10, PIR
+-    cmp    cr0, r10, r7
++    cmpw    cr0, r10, r7
+     bne+ 2f       ;// inside KERNEL_BARRIER below
+ 
+         ;// Perform barrier - 1
+@@ -131,7 +133,7 @@ kernel_shutdown_ea0_1_mode:
+     addi r8, r8, 8
+             ;// Check for PIR == r7.
+     mfspr r10, PIR
+-    cmp cr0, r10, r7
++    cmpw cr0, r10, r7
+     beq 3f
+         ;// Increment thread count.
+ 1:
+@@ -164,7 +166,7 @@ kernel_shutdown_ea0_1_mode:
+ 1:
+     or 1,1,1
+     ld r11, 0(r8)
+-    cmp cr0, r3, r11
++    cmpw cr0, r3, r11
+     bne+ 1b
+     isync
+         ;// All other threads have left, so wait a little bit...
+-- 
+2.13.1
+
diff --git a/openpower/package/hostboot-p8/Config.in b/openpower/package/hostboot-p8/Config.in
new file mode 100644
index 0000000..4dacfab
--- /dev/null
+++ b/openpower/package/hostboot-p8/Config.in
@@ -0,0 +1,17 @@
+config BR2_PACKAGE_HOSTBOOT_P8
+        bool "hostboot-p8"
+        default y if (BR2_OPENPOWER_POWER8)
+        select BR2_CPP
+        help
+            Project to build the hostboot firmware codebase
+
+if BR2_PACKAGE_HOSTBOOT_P8
+
+config BR2_HOSTBOOT_P8_CONFIG_FILE
+        string "Hostboot configuration file for compilation"
+        default default
+        help
+            String used to define hw specific make config file
+
+endif
+
diff --git a/openpower/package/hostboot-p8/hostboot-p8.mk b/openpower/package/hostboot-p8/hostboot-p8.mk
new file mode 100644
index 0000000..c50679e
--- /dev/null
+++ b/openpower/package/hostboot-p8/hostboot-p8.mk
@@ -0,0 +1,32 @@
+################################################################################
+#
+# hostboot for POWER8
+#
+################################################################################
+HOSTBOOT_P8_VERSION ?= d3025f5d7ddd0723946bb54fcb471d2bf1fd2da4
+
+HOSTBOOT_P8_SITE ?= $(call github,open-power,hostboot,$(HOSTBOOT_P8_VERSION))
+
+HOSTBOOT_P8_LICENSE = Apache-2.0
+HOSTBOOT_P8_LICENSE_FILES = LICENSE
+HOSTBOOT_P8_DEPENDENCIES = host-binutils
+
+HOSTBOOT_P8_INSTALL_IMAGES = YES
+HOSTBOOT_P8_INSTALL_TARGET = NO
+
+HOSTBOOT_P8_ENV_VARS=$(TARGET_MAKE_ENV) \
+    CONFIG_FILE=$(BR2_EXTERNAL_OP_BUILD_PATH)/configs/hostboot/$(BR2_HOSTBOOT_P8_CONFIG_FILE) \
+    OPENPOWER_BUILD=1 CROSS_PREFIX=$(TARGET_CROSS) HOST_PREFIX="" HOST_BINUTILS_DIR=$(HOST_BINUTILS_DIR) \
+    HOSTBOOT_P8_VERSION=`cat $(HOSTBOOT_P8_VERSION_FILE)` 
+
+HOSTBOOT_P8_POST_PATCH_HOOKS += HOSTBOOT_P8_APPLY_PATCHES
+
+define HOSTBOOT_P8_BUILD_CMDS
+        $(HOSTBOOT_P8_ENV_VARS) bash -c 'cd $(@D) && source ./env.bash && $(MAKE)'
+endef
+
+define HOSTBOOT_P8_INSTALL_IMAGES_CMDS
+        cd $(@D) && source ./env.bash && $(@D)/src/build/tools/hbDistribute --openpower $(STAGING_DIR)/hostboot_build_images/
+endef
+
+$(eval $(generic-package))