diff --git a/openpower/package/hostboot/hostboot-0002-Revert-Mark-Read-Only-Partitions-as-Such.patch b/openpower/package/hostboot/hostboot-0002-Revert-Mark-Read-Only-Partitions-as-Such.patch
deleted file mode 100644
index c572fee..0000000
--- a/openpower/package/hostboot/hostboot-0002-Revert-Mark-Read-Only-Partitions-as-Such.patch
+++ /dev/null
@@ -1,371 +0,0 @@
-From 3dba59d5b60a9ad307b91d4063279cb1535cda8f Mon Sep 17 00:00:00 2001
-From: Stewart Smith <stewart@linux.ibm.com>
-Date: Wed, 18 Apr 2018 17:06:09 +1000
-Subject: [PATCH] Revert "Mark Read-Only Partitions as Such"
-
-This reverts commit f5cd23d6c3be17356e0851ec5d5bb65cee48f15f.
-
-Only changing the presence of this commit, we go from failing to boot
-(error below) to being able to boot.
-
- 24.41069|ISTEP 10. 2 - host_slave_sbe_update
- 24.44213|System shutting down with error status 0x90000012
- 24.45270|================================================
- 24.45420|Error reported by initservice (0x0500) PLID 0x90000012
- 24.45422|  Initialization Service launched a function and
-the task returned an error.
- 24.45423|  ModuleId   0x01 BASE_INITSVC_MOD_ID
- 24.45573|  ReasonCode 0x0506 WAIT_FN_FAILED
- 24.45574|  UserData1  task id or task return code : 0x00000000000000ec
- 24.45574|  UserData2  returned status from task : 0x0000000000000001
- 24.45575|------------------------------------------------
- 24.45875|  Callout type             : Procedure Callout
- 24.45876|  Procedure                : EPUB_PRC_HB_CODE
- 24.45876|  Priority                 : SRCI_PRIORITY_HIGH
- 24.45877|------------------------------------------------
- 24.45878|  host_slave_sbe_update
- 24.45878|------------------------------------------------
- 24.45879|  Hostboot Build ID:
- 24.45879|================================================
-
-Change-Id: I7ac38afc8bed608d6272f1ef6f099e3fc03bb270
-Signed-off-by: Stewart Smith <stewart@linux.ibm.com>
----
- src/include/usr/pnor/pnor_reasoncodes.H         |   1 -
- src/usr/pnor/pnorrp.C                           |  15 +-
- src/usr/pnor/test/pnorrptest.H                  | 188 ++++++++----------------
- src/usr/secureboot/base/test/securerommgrtest.H |  20 ---
- 4 files changed, 71 insertions(+), 153 deletions(-)
-
-diff --git a/src/include/usr/pnor/pnor_reasoncodes.H b/src/include/usr/pnor/pnor_reasoncodes.H
-index 2835f8a153d0..4dd2ef1c43de 100644
---- a/src/include/usr/pnor/pnor_reasoncodes.H
-+++ b/src/include/usr/pnor/pnor_reasoncodes.H
-@@ -187,7 +187,6 @@ namespace PNOR
-         RC_SECURE_SIZE_MISMATCH      = PNOR_COMP_ID | 0x3A,
-         RC_NOT_PAGE_ALIGNED          = PNOR_COMP_ID | 0x3B,
-         RC_SECURE_PRO_SIZE_MISMATCH  = PNOR_COMP_ID | 0x3C,
--        RC_READ_ONLY_PERM_FAIL       = PNOR_COMP_ID | 0x3D,
- 
-         //@fixme-RTC:131607-Temporary value to allow HWSV compile
-         //termination_rc
-diff --git a/src/usr/pnor/pnorrp.C b/src/usr/pnor/pnorrp.C
-index df88ba821b70..e33a1b0c377c 100644
---- a/src/usr/pnor/pnorrp.C
-+++ b/src/usr/pnor/pnorrp.C
-@@ -1776,31 +1776,32 @@ errlHndl_t PnorRP::setVirtAddrs(void)
-           // Handle section permissions
-         if (iv_TOC[i].misc & FFS_MISC_READ_ONLY)
-         {
--            // Partitions marked with readOnly flag should be
--            // READ_ONLY and not WRITABLE.
-+            // Need to set permissions to allow writing to virtual
-+            // addresses, but prevents the kernel from ejecting
-+            // dirty pages (no WRITE_TRACKED).
-             int rc = mm_set_permission(
-                                     (void*)iv_TOC[i].virtAddr,
-                                     iv_TOC[i].size,
--                                    READ_ONLY);
-+                                    WRITABLE);
-             if (rc)
-             {
--                TRACFCOMP(g_trac_pnor, "E>PnorRP::readTOC: Failed to set block permissions to READ_ONLY for section %s.",
-+                TRACFCOMP(g_trac_pnor, "E>PnorRP::readTOC: Failed to set block permissions to WRITABLE for section %s.",
-                           SectionIdToString(i));
-                 /*@
-                 * @errortype
-                 * @moduleid PNOR::MOD_PNORRP_READTOC
--                * @reasoncode PNOR::RC_READ_ONLY_PERM_FAIL
-+                * @reasoncode PNOR::RC_WRITABLE_PERM_FAIL
-                 * @userdata1 PNOR section id
-                 * @userdata2 PNOR section vaddr
-                 * @devdesc Could not set permissions of the
--                *          given PNOR section to READ_ONLY
-+                *          given PNOR section to WRITABLE
-                 * @custdesc A problem occurred while reading
-                 *           Processor NOR flash partition table
-                 */
-                 l_errhdl = new ERRORLOG::ErrlEntry(
-                                 ERRORLOG::ERRL_SEV_UNRECOVERABLE,
-                                 PNOR::MOD_PNORRP_READTOC,
--                                PNOR::RC_READ_ONLY_PERM_FAIL,
-+                                PNOR::RC_WRITABLE_PERM_FAIL,
-                                 i,
-                                 iv_TOC[i].virtAddr,
-                                 true /*Add HB SW Callout*/);
-diff --git a/src/usr/pnor/test/pnorrptest.H b/src/usr/pnor/test/pnorrptest.H
-index 5108840f5040..942eff9abdff 100644
---- a/src/usr/pnor/test/pnorrptest.H
-+++ b/src/usr/pnor/test/pnorrptest.H
-@@ -5,7 +5,7 @@
- /*                                                                        */
- /* OpenPOWER HostBoot Project                                             */
- /*                                                                        */
--/* Contributors Listed Below - COPYRIGHT 2011,2018                        */
-+/* Contributors Listed Below - COPYRIGHT 2011,2017                        */
- /* [+] Google Inc.                                                        */
- /* [+] International Business Machines Corp.                              */
- /*                                                                        */
-@@ -39,7 +39,6 @@
- #include <sys/msg.h>
- #include <limits.h>
- #include <sys/mm.h>
--#include <sys/task.h>
- #include <targeting/common/targetservice.H>
- #include <devicefw/userif.H>
- #include <config.h>
-@@ -626,53 +625,82 @@ class PnorRpTest : public CxxTest::TestSuite
-     }
- 
-     /**
--     * @brief PNOR RP test - read_ReadOnly_partition
--     *        Tests if we can read a readOnly partition
-+     * @brief PNOR RP test - ReadOnlyTag
-+     *        Tests if readOnly tag on a section is being processed correctly
-      *
-      */
--    void test_read_ReadOnly_partition(void)
-+    void test_ReadOnlyTag(void)
-     {
--        TRACFCOMP(g_trac_pnor,"PnorRpTest::test_read_ReadOnly_partition Start");
--
--        int l_status = TASK_STATUS_EXITED_CLEAN;
--        PNOR::SectionId l_testroSecId = PNOR::TESTRO;
--        tid_t l_childTask =
--                         task_create(readFromReadOnlyPartition, &l_testroSecId);
-+        TRACFCOMP(g_trac_pnor, "PnorRpTest::test_ReadOnlyTag Start" );
-+        PNOR::SectionInfo_t l_info;
-+        errlHndl_t l_errhdl = NULL;
-+        uint64_t chip_select = 0xF;
-+        bool needs_ecc = false;
- 
--        if((l_childTask != task_wait_tid(l_childTask, &l_status, nullptr)) ||
--           (l_status != TASK_STATUS_EXITED_CLEAN))
-+        l_errhdl = PNOR::getSectionInfo(PNOR::TESTRO, l_info);
-+        if( l_errhdl )
-         {
--            TS_FAIL("Could not read from readOnly partition.");
-+            TRACFCOMP(g_trac_pnor, "PnorRpTest::test_ReadOnlyTag> ERROR : getSectionInfo returned error for %d : RC=%X",
-+                      PNOR::TESTRO, l_errhdl->reasonCode());
-+            ERRORLOG::errlCommit(l_errhdl, PNOR_COMP_ID);
-+            TS_FAIL( "PnorRpTest::test_ReadOnlyTag> ERROR : could not read pnor section %d", PNOR::TESTRO);
-         }
--        TRACFCOMP(g_trac_pnor,"PnorRpTest::test_read_ReadOnly_partition End");
--    }
- 
--    /**
--     * @brief PNOR RP test - write_ReadOnly_partition
--     *        Tests if we can write to a readOnly partition (fail expected)
--     *
--     */
--    void test_write_ReadOnly_partition(void)
--    {
--        TRACFCOMP(g_trac_pnor,
--                             "PnorRpTest::test_write_ReadOnly_partition Start");
-+        // Write some data
-+        const uint64_t l_writeData = 0x1122334455667788;
-+        uint64_t* l_dataptr = reinterpret_cast<uint64_t*> (l_info.vaddr);
-+        l_dataptr[0] = l_writeData;
- 
--        int l_status = TASK_STATUS_EXITED_CLEAN;
--        PNOR::SectionId l_testroSecId = PNOR::TESTRO;
-+        // Flush the page to make sure it gets out to the device
-+        // Due to ReadOnly permissions set on TESTRO should be a no-op
-+        int rc = mm_remove_pages( RELEASE, l_dataptr, PAGESIZE );
-+        if( rc )
-+        {
-+            TRACFCOMP( g_trac_pnor, "PnorRpTest::test_ReadOnlyTag> ERROR : error on RELEASE : rc=%X", rc );
-+            TS_FAIL( "PnorRpTest::test_ReadOnlyTag> ERROR : error on RELEASE" );
-+        }
- 
--        printk("Test case: Expect to see uncaught exception! ");
--        tid_t l_childTask =
--                          task_create(writeToReadOnlyPartition, &l_testroSecId);
-+        // Get physical address of pnor section
-+        uint64_t l_address = 0;
-+        l_errhdl = PnorRP::getInstance().computeDeviceAddr((void*)l_info.vaddr,
-+                                                        l_address,
-+                                                        chip_select,
-+                                                        needs_ecc);
-+        if(l_errhdl)
-+        {
-+            TRACFCOMP(g_trac_pnor, "PnorRpTest::test_ReadOnlyTag> ERROR : computeDeviceAddr vaddr = 0x%X",l_info.vaddr);
-+            errlCommit(l_errhdl,PNOR_COMP_ID);
-+            TS_FAIL( "PnorRpTest::test_ReadOnlyTag> ERROR : computeDeviceAddr vaddr = 0x%X",l_info.vaddr);
-+        }
- 
--        if((l_childTask != task_wait_tid(l_childTask, &l_status, nullptr)) ||
--           (l_status != TASK_STATUS_CRASHED))
-+        // Read pnor section and check if write did not occur
-+        uint64_t l_readData = 0;
-+        size_t l_size = sizeof(uint64_t);
-+        l_errhdl = deviceRead(TARGETING::MASTER_PROCESSOR_CHIP_TARGET_SENTINEL,
-+                              &l_readData,
-+                              l_size,
-+                              DEVICE_PNOR_ADDRESS(0, l_address));
-+        TRACFCOMP(g_trac_pnor, "PnorRpTest::test_ReadOnlyTag> Read Data = 0x%X",l_readData);
-+        if(l_errhdl)
-         {
--            TS_FAIL("Write to readOnly partition exception not caught.");
-+            TS_FAIL("PnorRpTest::test_ReadOnlyTag: deviceRead() failed! Error committed.");
-+            ERRORLOG::errlCommit(l_errhdl, PNOR_COMP_ID);
-+        }
-+        if(l_readData == l_writeData)
-+        {
-+            TS_FAIL("PnorRpTest::test_ReadOnlyTag: Data was written to readOnly section = %s",
-+                     l_info.name);
-+        }
-+        if(l_size != sizeof(uint64_t))
-+        {
-+            TS_FAIL("PnorRpTest::test_ReadOnlyTag: deviceRead() Read length not expected value. Addr: 0x%llx, Exp: %d, Act: %d",
-+                    l_address, sizeof(uint64_t), l_size);
-         }
- 
--        TRACFCOMP(g_trac_pnor, "PnorRpTest::test_write_ReadOnly_partition End");
-+        TRACFCOMP(g_trac_pnor, "PnorRpTest::test_ReadOnlyTag End");
-     }
- 
-+
-     //@todo - import config data from build and compare to section info
- 
-     /**
-@@ -885,97 +913,7 @@ class PnorRpTest : public CxxTest::TestSuite
- 
-         } while (0);
- #endif
--    }
--
--    private:
--    static void* readFromReadOnlyPartition(void* i_section)
--    {
--        TRACFCOMP(g_trac_pnor, "readFromReadOnlyPartition Start");
--        PNOR::SectionId* l_section =
--                                reinterpret_cast<PNOR::SectionId*>(i_section);
--        PNOR::SectionInfo_t l_info;
--        errlHndl_t l_errhdl = nullptr;
--
--        do {
--
--        if(isEnforcedSecureSection(*l_section))
--        {
--            TS_FAIL("readFromReadOnlyPartition: section %d is secure."
--                    " readFromReadOnlyPartition does not support testing"
--                    " secure sections.", *l_section);
--            break;
--        }
--
--        l_errhdl = PNOR::getSectionInfo(*l_section, l_info);
--        if(l_errhdl)
--        {
--            TRACFCOMP(g_trac_pnor, "readFromReadOnlyPartition: getSectionInfo "
--                      " returned an error for section %d : RC = 0x%.04x",
--                      *l_section, l_errhdl->reasonCode());
--            ERRORLOG::errlCommit(l_errhdl, PNOR_COMP_ID);
--            TS_FAIL("readFromReadOnlyPartition: failed to getSectionInfo"
--                    " for section %d", *l_section);
--            break;
--        }
--
--        uint64_t l_data = 0;
--        memcpy(&l_data, (void*)l_info.vaddr, sizeof(l_data));
--        // For this testing purpose, it doesn't actually matter what the data is
--        } while(0);
--        TRACFCOMP(g_trac_pnor, "readFromReadOnlyPartition End");
--        return nullptr;
--    }
--
--    static void* writeToReadOnlyPartition(void* i_section)
--    {
--        TRACFCOMP(g_trac_pnor, "writeToReadOnlyPartition Start");
--        PNOR::SectionId* l_section =
--                                reinterpret_cast<PNOR::SectionId*>(i_section);
--        PNOR::SectionInfo_t l_info;
--        errlHndl_t l_errhdl = nullptr;
--
--        do {
--
--        if(isEnforcedSecureSection(*l_section))
--        {
--            TS_FAIL("writeToReadOnlyPartition: section %d is secure."
--                    " writeToReadOnlyPartition does not support testing secure"
--                    " sections.", *l_section);
--            break;
--        }
--
--        l_errhdl = PNOR::getSectionInfo(*l_section, l_info);
--        if(l_errhdl)
--        {
--            TRACFCOMP(g_trac_pnor, "writeToReadOnlyPartition:"
--                      " getSectionInfo returned"
--                      " an error for section %d : RC=0x%.04x",
--                      *l_section, l_errhdl->reasonCode());
--            ERRORLOG::errlCommit(l_errhdl, PNOR_COMP_ID);
--            TS_FAIL("writeToReadOnlyPartition: could not read pnor section %d",
--                                                                    *l_section);
--            break;
--        }
--
--        // Write some data; should cause a task crash
--        const uint64_t l_writeData = 0x1122334455667788;
--        uint64_t* l_dataptr = reinterpret_cast<uint64_t*> (l_info.vaddr);
--        l_dataptr[0] = l_writeData;
--
--        int rc = mm_remove_pages(RELEASE, l_dataptr, PAGESIZE);
--        if(!rc)
--        {
--            TRACFCOMP(g_trac_pnor, "writeToReadOnlyPartition : uncaught "
--                      "exception - write to a readOnly partition succeeded");
--            TS_FAIL("writeToReadOnlyPartition : no error returned on writing to"
--                    " a readOnly partition");
--            break;
--        }
--
--        } while(0);
--        TRACFCOMP(g_trac_pnor, "writeToReadOnlyPartition End");
--        return nullptr;
--    }
-+     }
- };
- 
- 
-diff --git a/src/usr/secureboot/base/test/securerommgrtest.H b/src/usr/secureboot/base/test/securerommgrtest.H
-index 35e70f707598..8ffa8375daff 100644
---- a/src/usr/secureboot/base/test/securerommgrtest.H
-+++ b/src/usr/secureboot/base/test/securerommgrtest.H
-@@ -380,16 +380,6 @@ class SecureRomManagerTest : public CxxTest::TestSuite
-                                - VFS::VfsRp::getInstance().iv_unprotectedOffset
-                                + l_vaddr;
-         memcpy(l_originPage, reinterpret_cast<uint8_t*>(l_pnorVaddr), PAGESIZE);
--        // Open the write permissions to allow the test to temporarily corrupt
--        // the partition.
--        int l_rc = mm_set_permission(reinterpret_cast<void*>(l_pnorVaddr),
--                                     2*PAGESIZE,
--                                     WRITABLE);
--        if(l_rc)
--        {
--            TS_FAIL("mm_set_permission: Cannot set permissions to write");
--            break;
--        }
- 
-         // Corrupt page
-         uint8_t l_corruptByte = 0xFF;
-@@ -410,16 +400,6 @@ class SecureRomManagerTest : public CxxTest::TestSuite
-         delete l_errl;
-         l_errl = nullptr;
- 
--        // Reset to read-only permissions.
--        l_rc = mm_set_permission(reinterpret_cast<void*>(l_pnorVaddr),
--                                     2*PAGESIZE,
--                                     READ_ONLY);
--        if(l_rc)
--        {
--            TS_FAIL("mm_set_permission: Cannot reset permissions to read only");
--            break;
--        }
--
-         } while(0);
- 
-         if ( signedFile_pageAddr != nullptr   )
--- 
-2.14.3
-
diff --git a/openpower/package/openpower-pnor/openpower-pnor.mk b/openpower/package/openpower-pnor/openpower-pnor.mk
index 04511fb..8fe7e07 100644
--- a/openpower/package/openpower-pnor/openpower-pnor.mk
+++ b/openpower/package/openpower-pnor/openpower-pnor.mk
@@ -4,7 +4,7 @@
 #
 ################################################################################
 
-OPENPOWER_PNOR_VERSION ?= f6d970c6a600a7e248fa5d604eb471db4482760b
+OPENPOWER_PNOR_VERSION ?= 491ac2632f951ba77e2220ed87b8002b01ed6fae
 OPENPOWER_PNOR_SITE ?= $(call github,open-power,pnor,$(OPENPOWER_PNOR_VERSION))
 
 OPENPOWER_PNOR_LICENSE = Apache-2.0
