diff --git a/openpower/package/hostboot/hostboot-0001-Revert-Base-devtree-model-on-vpd.patch b/openpower/package/hostboot/hostboot-0001-Revert-Base-devtree-model-on-vpd.patch
deleted file mode 100644
index efa81c3..0000000
--- a/openpower/package/hostboot/hostboot-0001-Revert-Base-devtree-model-on-vpd.patch
+++ /dev/null
@@ -1,131 +0,0 @@
-From 9d1ec4127e24aeb3c57895731acf71a160b3b193 Mon Sep 17 00:00:00 2001
-From: Bill Hoffa <wghoffa@us.ibm.com>
-Date: Wed, 28 Jan 2015 11:20:18 -0600
-Subject: [PATCH 1/2] New PCIE Patch
-
-Change-Id: Ib601d7a92935670582b9cc1fd8fcd61b68159542
----
- src/usr/targeting/common/genHwsvMrwXml.pl | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/usr/targeting/common/genHwsvMrwXml.pl b/src/usr/targeting/common/genHwsvMrwXml.pl
-index 9c93205..f5c33e0 100755
---- a/src/usr/targeting/common/genHwsvMrwXml.pl
-+++ b/src/usr/targeting/common/genHwsvMrwXml.pl
-@@ -3049,7 +3049,7 @@ sub generate_proc
-             $pcie_list{$ipath}{0}{0}{'lane-mask'},
-             $pcie_list{$ipath}{0}{1}{'lane-mask'},
-             $pcie_list{$ipath}{1}{0}{'lane-mask'},
--            $pcie_list{$ipath}{1}{1}{'lane-mask'}
-+            0x0FF
-         </default>
-     </attribute>
-     <attribute>
--- 
-1.8.2.2
-
-
-From 25148d8c9f85273ee851df99d00782ef8ad7e3de Mon Sep 17 00:00:00 2001
-From: Bill Hoffa <wghoffa@us.ibm.com>
-Date: Thu, 29 Jan 2015 16:28:55 -0600
-Subject: [PATCH 2/2] Temporary Patch to fix Opal Devtree Issue
-
-Change-Id: Ie6aecc4a9b957dfd665f5bda1bb4a72728fba40b
----
- src/usr/devtree/bld_devtree.C | 64 +++----------------------------------------
- 1 file changed, 4 insertions(+), 60 deletions(-)
-
-diff --git a/src/usr/devtree/bld_devtree.C b/src/usr/devtree/bld_devtree.C
-index 07ec253..abe8496 100644
---- a/src/usr/devtree/bld_devtree.C
-+++ b/src/usr/devtree/bld_devtree.C
-@@ -585,6 +585,7 @@ void load_hbrt_image(uint64_t& io_address)
-     }
- }
- 
-+
- errlHndl_t bld_fdt_system(devTree * i_dt, bool i_smallTree)
- {
-     errlHndl_t errhdl = NULL;
-@@ -601,75 +602,18 @@ errlHndl_t bld_fdt_system(devTree * i_dt, bool i_smallTree)
-     // Nothing to do for small trees currently.
-     if (!i_smallTree)
-     {
--        /* Fetch the MRW-defined compatible model from attributes */
--        ATTR_OPAL_MODEL_type l_model = {0};
--        TARGETING::Target* sys = NULL;
--        TARGETING::targetService().getTopLevelTarget(sys);
--        sys->tryGetAttr<TARGETING::ATTR_OPAL_MODEL>(l_model);
- 
-         /* Add compatibility node */
--        const char* l_compats[] = { "ibm,powernv", l_model, NULL };
--        i_dt->addPropertyStrings(rootNode, "compatible", l_compats);
-+        i_dt->addPropertyString(rootNode, "compatible", "ibm,powernv");
- 
-         /* Add system model node */
--        // Based off of the DR field in the OPFR
--        // TODO RTC 118373 -- update to account for firestone/memory riser
--        TARGETING::TargetHandleList l_membTargetList;
--        getAllChips(l_membTargetList, TYPE_MEMBUF);
--
--        //if can't find a centaur for the CVPD, default to unknown
--        if (l_membTargetList.size())
--        {
--            TARGETING::Target * l_pMem = l_membTargetList[0];
--            size_t vpdSize = 0x0;
--
--            // Note: First read with NULL for o_buffer sets vpdSize to the
--            // correct length
--            errhdl = deviceRead( l_pMem,
--                                 NULL,
--                                 vpdSize,
--                                 DEVICE_CVPD_ADDRESS( CVPD::OPFR,
--                                                      CVPD::DR ));
--
--            if(errhdl)
--            {
--                TRACFCOMP(g_trac_devtree,ERR_MRK" Couldn't get DR size for HUID=0x%.8X",
--                          TARGETING::get_huid(l_pMem));
--                i_dt->addPropertyString(rootNode, "model", "unknown");
--                errlCommit(errhdl, DEVTREE_COMP_ID);
--            }
--            else
--            {
--                char drBuf[vpdSize+1];
--                memset(&drBuf, 0x0, (vpdSize+1)); //ensure null terminated str
--                errhdl = deviceRead( l_pMem,
--                                     reinterpret_cast<void*>( &drBuf ),
--                                     vpdSize,
--                                     DEVICE_CVPD_ADDRESS( CVPD::OPFR,
--                                                          CVPD::DR ));
--
--                if(errhdl)
--                {
--                    TRACFCOMP(g_trac_devtree,ERR_MRK" Couldn't read DR for HUID=0x%.8X",
--                              TARGETING::get_huid(l_pMem));
--                }
--                else
--                {
--                    i_dt->addPropertyString(rootNode, "model", drBuf);
--                }
--            }
--        }
--        else //chassis info not found, default to unknown
--        {
--            TRACFCOMP(g_trac_devtree,ERR_MRK" VPD not found, model defaulted to unknown");
--            i_dt->addPropertyString(rootNode, "model", "unknown");
--        }
-+        //TODO RTC:88056 - store model type in attributes?
-+        i_dt->addPropertyString(rootNode, "model", "palmetto");
-     }
- 
-     return errhdl;
- }
- 
--
- errlHndl_t bld_fdt_cpu(devTree * i_dt,
-                        std::vector<uint64_t>& o_homerRegions,
-                        bool i_smallTree)
--- 
-1.8.2.2
-
