diff --git a/openpower/package/hostboot/hostboot-1020-Revert-jgr17071200-Removed-pdwn-settings.patch b/openpower/package/hostboot/hostboot-1020-Revert-jgr17071200-Removed-pdwn-settings.patch
deleted file mode 100644
index 1bf10aa..0000000
--- a/openpower/package/hostboot/hostboot-1020-Revert-jgr17071200-Removed-pdwn-settings.patch
+++ /dev/null
@@ -1,677 +0,0 @@
-From 73353ff38f95484714356befca6d27cbcefa1d61 Mon Sep 17 00:00:00 2001
-From: "Corey V. Swenson" <cswenson@us.ibm.com>
-Date: Fri, 9 Feb 2018 15:04:22 -0500
-Subject: [PATCH v1] Revert "jgr17071200 Removed pdwn settings"
-
-This reverts commit db4e2f31694ef29c34531fb0579d4d8b7340ca05.
-
-Change-Id: I45e61c75e5f47ef96c7f9de38d7c0184df37b9e9
----
- .../p9/procedures/hwp/initfiles/p9_obus_scom.C     | 603 +++++++++++++++++++++
- 1 file changed, 603 insertions(+)
-
-diff --git a/src/import/chips/p9/procedures/hwp/initfiles/p9_obus_scom.C b/src/import/chips/p9/procedures/hwp/initfiles/p9_obus_scom.C
-index 5c4595e..390061b 100644
---- a/src/import/chips/p9/procedures/hwp/initfiles/p9_obus_scom.C
-+++ b/src/import/chips/p9/procedures/hwp/initfiles/p9_obus_scom.C
-@@ -40,6 +40,7 @@ constexpr uint64_t literal_0b00011 = 0b00011;
- constexpr uint64_t literal_0b100 = 0b100;
- constexpr uint64_t literal_0b1100 = 0b1100;
- constexpr uint64_t literal_0b000000 = 0b000000;
-+constexpr uint64_t literal_0b000 = 0b000;
- constexpr uint64_t literal_0b01 = 0b01;
- constexpr uint64_t literal_0x0 = 0x0;
- constexpr uint64_t literal_0b010 = 0b010;
-@@ -929,6 +930,198 @@ fapi2::ReturnCode p9_obus_scom(const fapi2::Target<fapi2::TARGET_TYPE_OBUS>& TGT
-             FAPI_TRY(fapi2::putScom(TGT0, 0x8000001709010c3full, l_scom_buffer));
-         }
-         {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8000080009010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_RX0_RXPACKS_0_RXPACK_RD_SLICE_0_RX_DAC_REGS_RX_DAC_REGS_RX_LANE_ANA_PDWN_OFF = 0x0;
-+            l_scom_buffer.insert<54, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_RX0_RXPACKS_0_RXPACK_RD_SLICE_0_RX_DAC_REGS_RX_DAC_REGS_RX_LANE_ANA_PDWN_OFF );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8000080009010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8000080109010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_RX0_RXPACKS_0_RXPACK_RD_SLICE_1_RX_DAC_REGS_RX_DAC_REGS_RX_LANE_ANA_PDWN_OFF = 0x0;
-+            l_scom_buffer.insert<54, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_RX0_RXPACKS_0_RXPACK_RD_SLICE_1_RX_DAC_REGS_RX_DAC_REGS_RX_LANE_ANA_PDWN_OFF );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8000080109010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8000080209010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_RX0_RXPACKS_0_RXPACK_RD_SLICE_2_RX_DAC_REGS_RX_DAC_REGS_RX_LANE_ANA_PDWN_OFF = 0x0;
-+            l_scom_buffer.insert<54, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_RX0_RXPACKS_0_RXPACK_RD_SLICE_2_RX_DAC_REGS_RX_DAC_REGS_RX_LANE_ANA_PDWN_OFF );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8000080209010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8000080309010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_RX0_RXPACKS_0_RXPACK_RD_SLICE_3_RX_DAC_REGS_RX_DAC_REGS_RX_LANE_ANA_PDWN_OFF = 0x0;
-+            l_scom_buffer.insert<54, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_RX0_RXPACKS_0_RXPACK_RD_SLICE_3_RX_DAC_REGS_RX_DAC_REGS_RX_LANE_ANA_PDWN_OFF );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8000080309010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8000080409010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_RX0_RXPACKS_1_RXPACK_RD_SLICE_0_RX_DAC_REGS_RX_DAC_REGS_RX_LANE_ANA_PDWN_OFF = 0x0;
-+            l_scom_buffer.insert<54, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_RX0_RXPACKS_1_RXPACK_RD_SLICE_0_RX_DAC_REGS_RX_DAC_REGS_RX_LANE_ANA_PDWN_OFF );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8000080409010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8000080509010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_RX0_RXPACKS_1_RXPACK_RD_SLICE_1_RX_DAC_REGS_RX_DAC_REGS_RX_LANE_ANA_PDWN_OFF = 0x0;
-+            l_scom_buffer.insert<54, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_RX0_RXPACKS_1_RXPACK_RD_SLICE_1_RX_DAC_REGS_RX_DAC_REGS_RX_LANE_ANA_PDWN_OFF );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8000080509010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8000080609010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_RX0_RXPACKS_1_RXPACK_RD_SLICE_2_RX_DAC_REGS_RX_DAC_REGS_RX_LANE_ANA_PDWN_OFF = 0x0;
-+            l_scom_buffer.insert<54, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_RX0_RXPACKS_1_RXPACK_RD_SLICE_2_RX_DAC_REGS_RX_DAC_REGS_RX_LANE_ANA_PDWN_OFF );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8000080609010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8000080709010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_RX0_RXPACKS_1_RXPACK_RD_SLICE_3_RX_DAC_REGS_RX_DAC_REGS_RX_LANE_ANA_PDWN_OFF = 0x0;
-+            l_scom_buffer.insert<54, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_RX0_RXPACKS_1_RXPACK_RD_SLICE_3_RX_DAC_REGS_RX_DAC_REGS_RX_LANE_ANA_PDWN_OFF );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8000080709010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8000080809010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_RX0_RXPACKS_2_RXPACK_RD_SLICE_0_RX_DAC_REGS_RX_DAC_REGS_RX_LANE_ANA_PDWN_OFF = 0x0;
-+            l_scom_buffer.insert<54, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_RX0_RXPACKS_2_RXPACK_RD_SLICE_0_RX_DAC_REGS_RX_DAC_REGS_RX_LANE_ANA_PDWN_OFF );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8000080809010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8000080909010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_RX0_RXPACKS_2_RXPACK_RD_SLICE_1_RX_DAC_REGS_RX_DAC_REGS_RX_LANE_ANA_PDWN_OFF = 0x0;
-+            l_scom_buffer.insert<54, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_RX0_RXPACKS_2_RXPACK_RD_SLICE_1_RX_DAC_REGS_RX_DAC_REGS_RX_LANE_ANA_PDWN_OFF );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8000080909010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8000080a09010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_RX0_RXPACKS_2_RXPACK_RD_SLICE_2_RX_DAC_REGS_RX_DAC_REGS_RX_LANE_ANA_PDWN_OFF = 0x0;
-+            l_scom_buffer.insert<54, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_RX0_RXPACKS_2_RXPACK_RD_SLICE_2_RX_DAC_REGS_RX_DAC_REGS_RX_LANE_ANA_PDWN_OFF );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8000080a09010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8000080b09010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_RX0_RXPACKS_2_RXPACK_RD_SLICE_3_RX_DAC_REGS_RX_DAC_REGS_RX_LANE_ANA_PDWN_OFF = 0x0;
-+            l_scom_buffer.insert<54, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_RX0_RXPACKS_2_RXPACK_RD_SLICE_3_RX_DAC_REGS_RX_DAC_REGS_RX_LANE_ANA_PDWN_OFF );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8000080b09010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8000080c09010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_RX0_RXPACKS_3_RXPACK_RD_SLICE_0_RX_DAC_REGS_RX_DAC_REGS_RX_LANE_ANA_PDWN_OFF = 0x0;
-+            l_scom_buffer.insert<54, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_RX0_RXPACKS_3_RXPACK_RD_SLICE_0_RX_DAC_REGS_RX_DAC_REGS_RX_LANE_ANA_PDWN_OFF );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8000080c09010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8000080d09010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_RX0_RXPACKS_3_RXPACK_RD_SLICE_1_RX_DAC_REGS_RX_DAC_REGS_RX_LANE_ANA_PDWN_OFF = 0x0;
-+            l_scom_buffer.insert<54, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_RX0_RXPACKS_3_RXPACK_RD_SLICE_1_RX_DAC_REGS_RX_DAC_REGS_RX_LANE_ANA_PDWN_OFF );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8000080d09010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8000080e09010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_RX0_RXPACKS_3_RXPACK_RD_SLICE_2_RX_DAC_REGS_RX_DAC_REGS_RX_LANE_ANA_PDWN_OFF = 0x0;
-+            l_scom_buffer.insert<54, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_RX0_RXPACKS_3_RXPACK_RD_SLICE_2_RX_DAC_REGS_RX_DAC_REGS_RX_LANE_ANA_PDWN_OFF );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8000080e09010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8000080f09010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_RX0_RXPACKS_3_RXPACK_RD_SLICE_3_RX_DAC_REGS_RX_DAC_REGS_RX_LANE_ANA_PDWN_OFF = 0x0;
-+            l_scom_buffer.insert<54, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_RX0_RXPACKS_3_RXPACK_RD_SLICE_3_RX_DAC_REGS_RX_DAC_REGS_RX_LANE_ANA_PDWN_OFF );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8000080f09010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8000081009010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_RX0_RXPACKS_4_RXPACK_RD_SLICE_0_RX_DAC_REGS_RX_DAC_REGS_RX_LANE_ANA_PDWN_OFF = 0x0;
-+            l_scom_buffer.insert<54, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_RX0_RXPACKS_4_RXPACK_RD_SLICE_0_RX_DAC_REGS_RX_DAC_REGS_RX_LANE_ANA_PDWN_OFF );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8000081009010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8000081109010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_RX0_RXPACKS_4_RXPACK_RD_SLICE_1_RX_DAC_REGS_RX_DAC_REGS_RX_LANE_ANA_PDWN_OFF = 0x0;
-+            l_scom_buffer.insert<54, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_RX0_RXPACKS_4_RXPACK_RD_SLICE_1_RX_DAC_REGS_RX_DAC_REGS_RX_LANE_ANA_PDWN_OFF );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8000081109010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8000081209010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_RX0_RXPACKS_4_RXPACK_RD_SLICE_2_RX_DAC_REGS_RX_DAC_REGS_RX_LANE_ANA_PDWN_OFF = 0x0;
-+            l_scom_buffer.insert<54, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_RX0_RXPACKS_4_RXPACK_RD_SLICE_2_RX_DAC_REGS_RX_DAC_REGS_RX_LANE_ANA_PDWN_OFF );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8000081209010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8000081309010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_RX0_RXPACKS_4_RXPACK_RD_SLICE_3_RX_DAC_REGS_RX_DAC_REGS_RX_LANE_ANA_PDWN_OFF = 0x0;
-+            l_scom_buffer.insert<54, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_RX0_RXPACKS_4_RXPACK_RD_SLICE_3_RX_DAC_REGS_RX_DAC_REGS_RX_LANE_ANA_PDWN_OFF );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8000081309010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8000081409010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_RX0_RXPACKS_5_RXPACK_RD_SLICE_0_RX_DAC_REGS_RX_DAC_REGS_RX_LANE_ANA_PDWN_OFF = 0x0;
-+            l_scom_buffer.insert<54, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_RX0_RXPACKS_5_RXPACK_RD_SLICE_0_RX_DAC_REGS_RX_DAC_REGS_RX_LANE_ANA_PDWN_OFF );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8000081409010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8000081509010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_RX0_RXPACKS_5_RXPACK_RD_SLICE_1_RX_DAC_REGS_RX_DAC_REGS_RX_LANE_ANA_PDWN_OFF = 0x0;
-+            l_scom_buffer.insert<54, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_RX0_RXPACKS_5_RXPACK_RD_SLICE_1_RX_DAC_REGS_RX_DAC_REGS_RX_LANE_ANA_PDWN_OFF );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8000081509010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8000081609010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_RX0_RXPACKS_5_RXPACK_RD_SLICE_2_RX_DAC_REGS_RX_DAC_REGS_RX_LANE_ANA_PDWN_OFF = 0x0;
-+            l_scom_buffer.insert<54, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_RX0_RXPACKS_5_RXPACK_RD_SLICE_2_RX_DAC_REGS_RX_DAC_REGS_RX_LANE_ANA_PDWN_OFF );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8000081609010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8000081709010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_RX0_RXPACKS_5_RXPACK_RD_SLICE_3_RX_DAC_REGS_RX_DAC_REGS_RX_LANE_ANA_PDWN_OFF = 0x0;
-+            l_scom_buffer.insert<54, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_RX0_RXPACKS_5_RXPACK_RD_SLICE_3_RX_DAC_REGS_RX_DAC_REGS_RX_LANE_ANA_PDWN_OFF );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8000081709010c3full, l_scom_buffer));
-+        }
-+        {
-             FAPI_TRY(fapi2::getScom( TGT0, 0x8000280009010c3full, l_scom_buffer ));
- 
-             l_scom_buffer.insert<52, 5, 59, uint64_t>(literal_0b10000 );
-@@ -4457,6 +4650,198 @@ fapi2::ReturnCode p9_obus_scom(const fapi2::Target<fapi2::TARGET_TYPE_OBUS>& TGT
-             FAPI_TRY(fapi2::putScom(TGT0, 0x8000c81709010c3full, l_scom_buffer));
-         }
-         {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8002200009010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_RX0_RXPACKS_0_RXPACK_RD_SLICE_0_RD_RX_BIT_REGS_RX_LANE_DIG_PDWN_OFF = 0x0;
-+            l_scom_buffer.insert<48, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_RX0_RXPACKS_0_RXPACK_RD_SLICE_0_RD_RX_BIT_REGS_RX_LANE_DIG_PDWN_OFF );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8002200009010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8002200109010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_RX0_RXPACKS_0_RXPACK_RD_SLICE_1_RD_RX_BIT_REGS_RX_LANE_DIG_PDWN_OFF = 0x0;
-+            l_scom_buffer.insert<48, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_RX0_RXPACKS_0_RXPACK_RD_SLICE_1_RD_RX_BIT_REGS_RX_LANE_DIG_PDWN_OFF );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8002200109010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8002200209010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_RX0_RXPACKS_0_RXPACK_RD_SLICE_2_RD_RX_BIT_REGS_RX_LANE_DIG_PDWN_OFF = 0x0;
-+            l_scom_buffer.insert<48, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_RX0_RXPACKS_0_RXPACK_RD_SLICE_2_RD_RX_BIT_REGS_RX_LANE_DIG_PDWN_OFF );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8002200209010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8002200309010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_RX0_RXPACKS_0_RXPACK_RD_SLICE_3_RD_RX_BIT_REGS_RX_LANE_DIG_PDWN_OFF = 0x0;
-+            l_scom_buffer.insert<48, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_RX0_RXPACKS_0_RXPACK_RD_SLICE_3_RD_RX_BIT_REGS_RX_LANE_DIG_PDWN_OFF );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8002200309010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8002200409010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_RX0_RXPACKS_1_RXPACK_RD_SLICE_0_RD_RX_BIT_REGS_RX_LANE_DIG_PDWN_OFF = 0x0;
-+            l_scom_buffer.insert<48, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_RX0_RXPACKS_1_RXPACK_RD_SLICE_0_RD_RX_BIT_REGS_RX_LANE_DIG_PDWN_OFF );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8002200409010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8002200509010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_RX0_RXPACKS_1_RXPACK_RD_SLICE_1_RD_RX_BIT_REGS_RX_LANE_DIG_PDWN_OFF = 0x0;
-+            l_scom_buffer.insert<48, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_RX0_RXPACKS_1_RXPACK_RD_SLICE_1_RD_RX_BIT_REGS_RX_LANE_DIG_PDWN_OFF );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8002200509010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8002200609010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_RX0_RXPACKS_1_RXPACK_RD_SLICE_2_RD_RX_BIT_REGS_RX_LANE_DIG_PDWN_OFF = 0x0;
-+            l_scom_buffer.insert<48, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_RX0_RXPACKS_1_RXPACK_RD_SLICE_2_RD_RX_BIT_REGS_RX_LANE_DIG_PDWN_OFF );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8002200609010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8002200709010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_RX0_RXPACKS_1_RXPACK_RD_SLICE_3_RD_RX_BIT_REGS_RX_LANE_DIG_PDWN_OFF = 0x0;
-+            l_scom_buffer.insert<48, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_RX0_RXPACKS_1_RXPACK_RD_SLICE_3_RD_RX_BIT_REGS_RX_LANE_DIG_PDWN_OFF );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8002200709010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8002200809010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_RX0_RXPACKS_2_RXPACK_RD_SLICE_0_RD_RX_BIT_REGS_RX_LANE_DIG_PDWN_OFF = 0x0;
-+            l_scom_buffer.insert<48, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_RX0_RXPACKS_2_RXPACK_RD_SLICE_0_RD_RX_BIT_REGS_RX_LANE_DIG_PDWN_OFF );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8002200809010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8002200909010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_RX0_RXPACKS_2_RXPACK_RD_SLICE_1_RD_RX_BIT_REGS_RX_LANE_DIG_PDWN_OFF = 0x0;
-+            l_scom_buffer.insert<48, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_RX0_RXPACKS_2_RXPACK_RD_SLICE_1_RD_RX_BIT_REGS_RX_LANE_DIG_PDWN_OFF );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8002200909010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8002200a09010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_RX0_RXPACKS_2_RXPACK_RD_SLICE_2_RD_RX_BIT_REGS_RX_LANE_DIG_PDWN_OFF = 0x0;
-+            l_scom_buffer.insert<48, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_RX0_RXPACKS_2_RXPACK_RD_SLICE_2_RD_RX_BIT_REGS_RX_LANE_DIG_PDWN_OFF );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8002200a09010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8002200b09010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_RX0_RXPACKS_2_RXPACK_RD_SLICE_3_RD_RX_BIT_REGS_RX_LANE_DIG_PDWN_OFF = 0x0;
-+            l_scom_buffer.insert<48, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_RX0_RXPACKS_2_RXPACK_RD_SLICE_3_RD_RX_BIT_REGS_RX_LANE_DIG_PDWN_OFF );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8002200b09010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8002200c09010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_RX0_RXPACKS_3_RXPACK_RD_SLICE_0_RD_RX_BIT_REGS_RX_LANE_DIG_PDWN_OFF = 0x0;
-+            l_scom_buffer.insert<48, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_RX0_RXPACKS_3_RXPACK_RD_SLICE_0_RD_RX_BIT_REGS_RX_LANE_DIG_PDWN_OFF );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8002200c09010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8002200d09010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_RX0_RXPACKS_3_RXPACK_RD_SLICE_1_RD_RX_BIT_REGS_RX_LANE_DIG_PDWN_OFF = 0x0;
-+            l_scom_buffer.insert<48, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_RX0_RXPACKS_3_RXPACK_RD_SLICE_1_RD_RX_BIT_REGS_RX_LANE_DIG_PDWN_OFF );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8002200d09010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8002200e09010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_RX0_RXPACKS_3_RXPACK_RD_SLICE_2_RD_RX_BIT_REGS_RX_LANE_DIG_PDWN_OFF = 0x0;
-+            l_scom_buffer.insert<48, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_RX0_RXPACKS_3_RXPACK_RD_SLICE_2_RD_RX_BIT_REGS_RX_LANE_DIG_PDWN_OFF );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8002200e09010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8002200f09010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_RX0_RXPACKS_3_RXPACK_RD_SLICE_3_RD_RX_BIT_REGS_RX_LANE_DIG_PDWN_OFF = 0x0;
-+            l_scom_buffer.insert<48, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_RX0_RXPACKS_3_RXPACK_RD_SLICE_3_RD_RX_BIT_REGS_RX_LANE_DIG_PDWN_OFF );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8002200f09010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8002201009010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_RX0_RXPACKS_4_RXPACK_RD_SLICE_0_RD_RX_BIT_REGS_RX_LANE_DIG_PDWN_OFF = 0x0;
-+            l_scom_buffer.insert<48, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_RX0_RXPACKS_4_RXPACK_RD_SLICE_0_RD_RX_BIT_REGS_RX_LANE_DIG_PDWN_OFF );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8002201009010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8002201109010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_RX0_RXPACKS_4_RXPACK_RD_SLICE_1_RD_RX_BIT_REGS_RX_LANE_DIG_PDWN_OFF = 0x0;
-+            l_scom_buffer.insert<48, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_RX0_RXPACKS_4_RXPACK_RD_SLICE_1_RD_RX_BIT_REGS_RX_LANE_DIG_PDWN_OFF );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8002201109010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8002201209010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_RX0_RXPACKS_4_RXPACK_RD_SLICE_2_RD_RX_BIT_REGS_RX_LANE_DIG_PDWN_OFF = 0x0;
-+            l_scom_buffer.insert<48, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_RX0_RXPACKS_4_RXPACK_RD_SLICE_2_RD_RX_BIT_REGS_RX_LANE_DIG_PDWN_OFF );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8002201209010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8002201309010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_RX0_RXPACKS_4_RXPACK_RD_SLICE_3_RD_RX_BIT_REGS_RX_LANE_DIG_PDWN_OFF = 0x0;
-+            l_scom_buffer.insert<48, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_RX0_RXPACKS_4_RXPACK_RD_SLICE_3_RD_RX_BIT_REGS_RX_LANE_DIG_PDWN_OFF );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8002201309010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8002201409010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_RX0_RXPACKS_5_RXPACK_RD_SLICE_0_RD_RX_BIT_REGS_RX_LANE_DIG_PDWN_OFF = 0x0;
-+            l_scom_buffer.insert<48, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_RX0_RXPACKS_5_RXPACK_RD_SLICE_0_RD_RX_BIT_REGS_RX_LANE_DIG_PDWN_OFF );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8002201409010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8002201509010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_RX0_RXPACKS_5_RXPACK_RD_SLICE_1_RD_RX_BIT_REGS_RX_LANE_DIG_PDWN_OFF = 0x0;
-+            l_scom_buffer.insert<48, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_RX0_RXPACKS_5_RXPACK_RD_SLICE_1_RD_RX_BIT_REGS_RX_LANE_DIG_PDWN_OFF );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8002201509010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8002201609010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_RX0_RXPACKS_5_RXPACK_RD_SLICE_2_RD_RX_BIT_REGS_RX_LANE_DIG_PDWN_OFF = 0x0;
-+            l_scom_buffer.insert<48, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_RX0_RXPACKS_5_RXPACK_RD_SLICE_2_RD_RX_BIT_REGS_RX_LANE_DIG_PDWN_OFF );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8002201609010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8002201709010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_RX0_RXPACKS_5_RXPACK_RD_SLICE_3_RD_RX_BIT_REGS_RX_LANE_DIG_PDWN_OFF = 0x0;
-+            l_scom_buffer.insert<48, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_RX0_RXPACKS_5_RXPACK_RD_SLICE_3_RD_RX_BIT_REGS_RX_LANE_DIG_PDWN_OFF );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8002201709010c3full, l_scom_buffer));
-+        }
-+        {
-             FAPI_TRY(fapi2::getScom( TGT0, 0x8002280009010c3full, l_scom_buffer ));
- 
-             if (( ! l_TGT2_ATTR_CHIP_EC_FEATURE_OBUS_HW419305))
-@@ -4913,6 +5298,198 @@ fapi2::ReturnCode p9_obus_scom(const fapi2::Target<fapi2::TARGET_TYPE_OBUS>& TGT
-             FAPI_TRY(fapi2::putScom(TGT0, 0x8002281709010c3full, l_scom_buffer));
-         }
-         {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8004040009010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_TX0_TXPACKS_0_TXPACK_DD_SLICE_0_DD_TX_BIT_REGS_TX_LANE_PDWN_ENABLED = 0x0;
-+            l_scom_buffer.insert<48, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_TX0_TXPACKS_0_TXPACK_DD_SLICE_0_DD_TX_BIT_REGS_TX_LANE_PDWN_ENABLED );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8004040009010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8004040109010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_TX0_TXPACKS_0_TXPACK_DD_SLICE_1_DD_TX_BIT_REGS_TX_LANE_PDWN_ENABLED = 0x0;
-+            l_scom_buffer.insert<48, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_TX0_TXPACKS_0_TXPACK_DD_SLICE_1_DD_TX_BIT_REGS_TX_LANE_PDWN_ENABLED );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8004040109010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8004040209010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_TX0_TXPACKS_0_TXPACK_DD_SLICE_2_DD_TX_BIT_REGS_TX_LANE_PDWN_ENABLED = 0x0;
-+            l_scom_buffer.insert<48, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_TX0_TXPACKS_0_TXPACK_DD_SLICE_2_DD_TX_BIT_REGS_TX_LANE_PDWN_ENABLED );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8004040209010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8004040309010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_TX0_TXPACKS_0_TXPACK_DD_SLICE_3_DD_TX_BIT_REGS_TX_LANE_PDWN_ENABLED = 0x0;
-+            l_scom_buffer.insert<48, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_TX0_TXPACKS_0_TXPACK_DD_SLICE_3_DD_TX_BIT_REGS_TX_LANE_PDWN_ENABLED );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8004040309010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8004040409010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_TX0_TXPACKS_1_TXPACK_DD_SLICE_0_DD_TX_BIT_REGS_TX_LANE_PDWN_ENABLED = 0x0;
-+            l_scom_buffer.insert<48, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_TX0_TXPACKS_1_TXPACK_DD_SLICE_0_DD_TX_BIT_REGS_TX_LANE_PDWN_ENABLED );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8004040409010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8004040509010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_TX0_TXPACKS_1_TXPACK_DD_SLICE_1_DD_TX_BIT_REGS_TX_LANE_PDWN_ENABLED = 0x0;
-+            l_scom_buffer.insert<48, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_TX0_TXPACKS_1_TXPACK_DD_SLICE_1_DD_TX_BIT_REGS_TX_LANE_PDWN_ENABLED );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8004040509010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8004040609010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_TX0_TXPACKS_1_TXPACK_DD_SLICE_2_DD_TX_BIT_REGS_TX_LANE_PDWN_ENABLED = 0x0;
-+            l_scom_buffer.insert<48, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_TX0_TXPACKS_1_TXPACK_DD_SLICE_2_DD_TX_BIT_REGS_TX_LANE_PDWN_ENABLED );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8004040609010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8004040709010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_TX0_TXPACKS_1_TXPACK_DD_SLICE_3_DD_TX_BIT_REGS_TX_LANE_PDWN_ENABLED = 0x0;
-+            l_scom_buffer.insert<48, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_TX0_TXPACKS_1_TXPACK_DD_SLICE_3_DD_TX_BIT_REGS_TX_LANE_PDWN_ENABLED );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8004040709010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8004040809010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_TX0_TXPACKS_2_TXPACK_DD_SLICE_0_DD_TX_BIT_REGS_TX_LANE_PDWN_ENABLED = 0x0;
-+            l_scom_buffer.insert<48, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_TX0_TXPACKS_2_TXPACK_DD_SLICE_0_DD_TX_BIT_REGS_TX_LANE_PDWN_ENABLED );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8004040809010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8004040909010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_TX0_TXPACKS_2_TXPACK_DD_SLICE_1_DD_TX_BIT_REGS_TX_LANE_PDWN_ENABLED = 0x0;
-+            l_scom_buffer.insert<48, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_TX0_TXPACKS_2_TXPACK_DD_SLICE_1_DD_TX_BIT_REGS_TX_LANE_PDWN_ENABLED );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8004040909010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8004040a09010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_TX0_TXPACKS_2_TXPACK_DD_SLICE_2_DD_TX_BIT_REGS_TX_LANE_PDWN_ENABLED = 0x0;
-+            l_scom_buffer.insert<48, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_TX0_TXPACKS_2_TXPACK_DD_SLICE_2_DD_TX_BIT_REGS_TX_LANE_PDWN_ENABLED );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8004040a09010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8004040b09010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_TX0_TXPACKS_2_TXPACK_DD_SLICE_3_DD_TX_BIT_REGS_TX_LANE_PDWN_ENABLED = 0x0;
-+            l_scom_buffer.insert<48, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_TX0_TXPACKS_2_TXPACK_DD_SLICE_3_DD_TX_BIT_REGS_TX_LANE_PDWN_ENABLED );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8004040b09010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8004040c09010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_TX0_TXPACKS_3_TXPACK_DD_SLICE_0_DD_TX_BIT_REGS_TX_LANE_PDWN_ENABLED = 0x0;
-+            l_scom_buffer.insert<48, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_TX0_TXPACKS_3_TXPACK_DD_SLICE_0_DD_TX_BIT_REGS_TX_LANE_PDWN_ENABLED );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8004040c09010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8004040d09010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_TX0_TXPACKS_3_TXPACK_DD_SLICE_1_DD_TX_BIT_REGS_TX_LANE_PDWN_ENABLED = 0x0;
-+            l_scom_buffer.insert<48, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_TX0_TXPACKS_3_TXPACK_DD_SLICE_1_DD_TX_BIT_REGS_TX_LANE_PDWN_ENABLED );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8004040d09010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8004040e09010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_TX0_TXPACKS_3_TXPACK_DD_SLICE_2_DD_TX_BIT_REGS_TX_LANE_PDWN_ENABLED = 0x0;
-+            l_scom_buffer.insert<48, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_TX0_TXPACKS_3_TXPACK_DD_SLICE_2_DD_TX_BIT_REGS_TX_LANE_PDWN_ENABLED );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8004040e09010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8004040f09010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_TX0_TXPACKS_3_TXPACK_DD_SLICE_3_DD_TX_BIT_REGS_TX_LANE_PDWN_ENABLED = 0x0;
-+            l_scom_buffer.insert<48, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_TX0_TXPACKS_3_TXPACK_DD_SLICE_3_DD_TX_BIT_REGS_TX_LANE_PDWN_ENABLED );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8004040f09010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8004041009010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_TX0_TXPACKS_4_TXPACK_DD_SLICE_0_DD_TX_BIT_REGS_TX_LANE_PDWN_ENABLED = 0x0;
-+            l_scom_buffer.insert<48, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_TX0_TXPACKS_4_TXPACK_DD_SLICE_0_DD_TX_BIT_REGS_TX_LANE_PDWN_ENABLED );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8004041009010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8004041109010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_TX0_TXPACKS_4_TXPACK_DD_SLICE_1_DD_TX_BIT_REGS_TX_LANE_PDWN_ENABLED = 0x0;
-+            l_scom_buffer.insert<48, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_TX0_TXPACKS_4_TXPACK_DD_SLICE_1_DD_TX_BIT_REGS_TX_LANE_PDWN_ENABLED );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8004041109010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8004041209010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_TX0_TXPACKS_4_TXPACK_DD_SLICE_2_DD_TX_BIT_REGS_TX_LANE_PDWN_ENABLED = 0x0;
-+            l_scom_buffer.insert<48, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_TX0_TXPACKS_4_TXPACK_DD_SLICE_2_DD_TX_BIT_REGS_TX_LANE_PDWN_ENABLED );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8004041209010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8004041309010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_TX0_TXPACKS_4_TXPACK_DD_SLICE_3_DD_TX_BIT_REGS_TX_LANE_PDWN_ENABLED = 0x0;
-+            l_scom_buffer.insert<48, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_TX0_TXPACKS_4_TXPACK_DD_SLICE_3_DD_TX_BIT_REGS_TX_LANE_PDWN_ENABLED );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8004041309010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8004041409010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_TX0_TXPACKS_5_TXPACK_DD_SLICE_0_DD_TX_BIT_REGS_TX_LANE_PDWN_ENABLED = 0x0;
-+            l_scom_buffer.insert<48, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_TX0_TXPACKS_5_TXPACK_DD_SLICE_0_DD_TX_BIT_REGS_TX_LANE_PDWN_ENABLED );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8004041409010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8004041509010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_TX0_TXPACKS_5_TXPACK_DD_SLICE_1_DD_TX_BIT_REGS_TX_LANE_PDWN_ENABLED = 0x0;
-+            l_scom_buffer.insert<48, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_TX0_TXPACKS_5_TXPACK_DD_SLICE_1_DD_TX_BIT_REGS_TX_LANE_PDWN_ENABLED );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8004041509010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8004041609010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_TX0_TXPACKS_5_TXPACK_DD_SLICE_2_DD_TX_BIT_REGS_TX_LANE_PDWN_ENABLED = 0x0;
-+            l_scom_buffer.insert<48, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_TX0_TXPACKS_5_TXPACK_DD_SLICE_2_DD_TX_BIT_REGS_TX_LANE_PDWN_ENABLED );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8004041609010c3full, l_scom_buffer));
-+        }
-+        {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8004041709010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_TX0_TXPACKS_5_TXPACK_DD_SLICE_3_DD_TX_BIT_REGS_TX_LANE_PDWN_ENABLED = 0x0;
-+            l_scom_buffer.insert<48, 1, 63, uint64_t>
-+            (l_IOO0_IOO_CPLT_TX0_TXPACKS_5_TXPACK_DD_SLICE_3_DD_TX_BIT_REGS_TX_LANE_PDWN_ENABLED );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8004041709010c3full, l_scom_buffer));
-+        }
-+        {
-             FAPI_TRY(fapi2::getScom( TGT0, 0x8008000009010c3full, l_scom_buffer ));
- 
-             constexpr auto l_IOO0_IOO_CPLT_RX0_RXCTL_CTL_REGS_RX_CTL_REGS_RX_PG_SPARE_MODE_4_OFF = 0x0;
-@@ -4926,6 +5503,12 @@ fapi2::ReturnCode p9_obus_scom(const fapi2::Target<fapi2::TARGET_TYPE_OBUS>& TGT
-             FAPI_TRY(fapi2::putScom(TGT0, 0x8008080009010c3full, l_scom_buffer));
-         }
-         {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8008100009010c3full, l_scom_buffer ));
-+
-+            l_scom_buffer.insert<48, 3, 61, uint64_t>(literal_0b000 );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8008100009010c3full, l_scom_buffer));
-+        }
-+        {
-             FAPI_TRY(fapi2::getScom( TGT0, 0x8008180009010c3full, l_scom_buffer ));
- 
-             if (((l_TGT0_ATTR_IO_O_CHANNEL_TYPE == fapi2::ENUM_ATTR_IO_O_CHANNEL_TYPE_BOARD)
-@@ -5154,6 +5737,13 @@ fapi2::ReturnCode p9_obus_scom(const fapi2::Target<fapi2::TARGET_TYPE_OBUS>& TGT
-             FAPI_TRY(fapi2::putScom(TGT0, 0x8008880009010c3full, l_scom_buffer));
-         }
-         {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x8008c00009010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_RX0_RXCTL_CTL_REGS_RX_CTL_REGS_RX_IREF_PDWN_B_ON = 0x1;
-+            l_scom_buffer.insert<54, 1, 63, uint64_t>(l_IOO0_IOO_CPLT_RX0_RXCTL_CTL_REGS_RX_CTL_REGS_RX_IREF_PDWN_B_ON );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x8008c00009010c3full, l_scom_buffer));
-+        }
-+        {
-             FAPI_TRY(fapi2::getScom( TGT0, 0x8008d00009010c3full, l_scom_buffer ));
- 
-             if (( ! l_TGT2_ATTR_CHIP_EC_FEATURE_OBUS_HW419305))
-@@ -5224,12 +5814,25 @@ fapi2::ReturnCode p9_obus_scom(const fapi2::Target<fapi2::TARGET_TYPE_OBUS>& TGT
-             FAPI_TRY(fapi2::putScom(TGT0, 0x8009880009010c3full, l_scom_buffer));
-         }
-         {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x800b800009010c3full, l_scom_buffer ));
-+
-+            constexpr auto l_IOO0_IOO_CPLT_RX0_RXCTL_DATASM_DATASM_REGS_RX_CTL_DATASM_CLKDIST_PDWN_OFF = 0x0;
-+            l_scom_buffer.insert<60, 1, 63, uint64_t>(l_IOO0_IOO_CPLT_RX0_RXCTL_DATASM_DATASM_REGS_RX_CTL_DATASM_CLKDIST_PDWN_OFF );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x800b800009010c3full, l_scom_buffer));
-+        }
-+        {
-             FAPI_TRY(fapi2::getScom( TGT0, 0x800c0c0009010c3full, l_scom_buffer ));
- 
-             l_scom_buffer.insert<48, 6, 58, uint64_t>(literal_0b000000 );
-             FAPI_TRY(fapi2::putScom(TGT0, 0x800c0c0009010c3full, l_scom_buffer));
-         }
-         {
-+            FAPI_TRY(fapi2::getScom( TGT0, 0x800c140009010c3full, l_scom_buffer ));
-+
-+            l_scom_buffer.insert<48, 3, 61, uint64_t>(literal_0b000 );
-+            FAPI_TRY(fapi2::putScom(TGT0, 0x800c140009010c3full, l_scom_buffer));
-+        }
-+        {
-             FAPI_TRY(fapi2::getScom( TGT0, 0x800f1c0009010c3full, l_scom_buffer ));
- 
-             l_scom_buffer.insert<48, 5, 59, uint64_t>(literal_0b01110 );
--- 
-1.8.2.2
-
