diff --git a/openpower/patches/vesnin-patches/hostboot/hostboot-0003-Add-present-bits-info-based-on-pos.patch b/openpower/patches/vesnin-patches/hostboot/hostboot-0003-Add-present-bits-info-based-on-pos.patch
new file mode 100644
index 0000000..02decc4
--- /dev/null
+++ b/openpower/patches/vesnin-patches/hostboot/hostboot-0003-Add-present-bits-info-based-on-pos.patch
@@ -0,0 +1,97 @@
+From e89b453239c0b087e5f61aefa59d29a1ae636e08 Mon Sep 17 00:00:00 2001
+From: Artem Senichev <a.senichev@yadro.com>
+Date: Tue, 13 Mar 2018 15:14:49 +0300
+Subject: [PATCH] Add present bits info based on pos
+
+Originally created by MSI (S188)
+
+Signed-off-by: Artem Senichev <a.senichev@yadro.com>
+---
+ src/usr/hwas/hostbootIstep.C | 52 ++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 52 insertions(+)
+
+diff --git a/src/usr/hwas/hostbootIstep.C b/src/usr/hwas/hostbootIstep.C
+index af3770295..2dc73f383 100644
+--- a/src/usr/hwas/hostbootIstep.C
++++ b/src/usr/hwas/hostbootIstep.C
+@@ -188,6 +188,12 @@ void* host_discover_targets( void *io_pArgs )
+ 
+     // Put out some helpful messages that show which targets we actually found
+     std::map<TARGETING::TYPE,uint64_t> l_presData;
++    std::map<TARGETING::TYPE,uint64_t> Present_Dimm_P0; //for dimms on CPU P0
++    std::map<TARGETING::TYPE,uint64_t> Present_Dimm_P1; //for dimms on CPU P1
++    std::map<TARGETING::TYPE,uint64_t> Present_Dimm_P2; //for dimms on CPU P2
++    std::map<TARGETING::TYPE,uint64_t> Present_Dimm_P3; //for dimms on CPU P3
++    TARGETING::TYPE l_type_dimm;
++
+     for (TargetIterator target = targetService().begin();
+          target != targetService().end();
+          ++target)
+@@ -198,11 +204,50 @@ void* host_discover_targets( void *io_pArgs )
+         }
+         TARGETING::TYPE l_type = target->getAttr<TARGETING::ATTR_TYPE>();
+         TARGETING::ATTR_POSITION_type l_pos = 0;
++        TARGETING::ATTR_HUID_type l_huid = target->getAttr<TARGETING::ATTR_HUID>(); //for showing HUID
++
+         if( target->tryGetAttr<TARGETING::ATTR_POSITION>(l_pos) )
+         {
+             l_presData[l_type] |= (0x8000000000000000 >> l_pos);
++
++            if (l_type == 0x03 ) //if the type is DIMM
++            {
++                l_type_dimm = l_type;
++                if (l_pos < 64 )
++                {
++                    //for dimms on CPU P0
++                    Present_Dimm_P0[l_type] |= (0x8000000000000000 >> l_pos);
++                    CONSOLE::displayf(NULL, "MEMORY-INFO| l_pos = 0x%X, l_type =0x%0X, l_huid=0x%X, Present_Dimm_P0[l_type]=%.8X%.8X", l_pos, l_type, l_huid, Present_Dimm_P0[l_type] >> 32, Present_Dimm_P0[l_type] & 0xFFFFFFFF);
++                }
++                else if ((l_pos >= 64) && (l_pos < 128))
++                {
++                    //for dimms on CPU P1
++                    Present_Dimm_P1[l_type] |= (0x8000000000000000 >> (l_pos - 64));
++                    CONSOLE::displayf(NULL, "MEMORY-INFO| l_pos = 0x%X, l_type =0x%0X, l_huid=0x%X, Present_Dimm_P1[l_type]=%.8X%.8X", l_pos, l_type, l_huid, Present_Dimm_P1[l_type] >> 32, Present_Dimm_P1[l_type] & 0xFFFFFFFF);
++                }
++                else if ((l_pos >= 128) && (l_pos < 192))
++                {
++                    //for dimms on CPU P2
++                    Present_Dimm_P2[l_type] |= (0x8000000000000000 >> (l_pos - 128));
++                    CONSOLE::displayf(NULL, "MEMORY-INFO| l_pos = 0x%X, l_type =0x%0X, l_huid=0x%X, Present_Dimm_P2[l_type]=%.8X%.8X", l_pos, l_type, l_huid, Present_Dimm_P2[l_type] >> 32, Present_Dimm_P2[l_type] & 0xFFFFFFFF);
++                }
++                else if (l_pos >= 192)
++                {
++                    //for dimms on CPU P3
++                    Present_Dimm_P3[l_type] |= (0x8000000000000000 >> (l_pos - 192));
++                    CONSOLE::displayf(NULL, "MEMORY-INFO| l_pos = 0x%X, l_type =0x%0X, l_huid=0x%X, Present_Dimm_P3[l_type]=%.8X%.8X", l_pos, l_type, l_huid, Present_Dimm_P3[l_type] >> 32, Present_Dimm_P3[l_type] & 0xFFFFFFFF);
++                }
++            }
+         }
+     }
++
++    CONSOLE::displayf("HWAS", "=========================================");
++    CONSOLE::displayf("HWAS", "PRESENT> DIMM_P0[03]=%.8X%.8X", Present_Dimm_P0[l_type_dimm] >> 32, Present_Dimm_P0[l_type_dimm] & 0xFFFFFFFF);
++    CONSOLE::displayf("HWAS", "PRESENT> DIMM_P1[03]=%.8X%.8X", Present_Dimm_P1[l_type_dimm] >> 32, Present_Dimm_P1[l_type_dimm] & 0xFFFFFFFF);
++    CONSOLE::displayf("HWAS", "PRESENT> DIMM_P2[03]=%.8X%.8X", Present_Dimm_P2[l_type_dimm] >> 32, Present_Dimm_P2[l_type_dimm] & 0xFFFFFFFF);
++    CONSOLE::displayf("HWAS", "PRESENT> DIMM_P3[03]=%.8X%.8X", Present_Dimm_P3[l_type_dimm] >> 32, Present_Dimm_P3[l_type_dimm] & 0xFFFFFFFF);
++    CONSOLE::displayf("HWAS", "=========================================");
++
+     TARGETING::EntityPath l_epath; //use EntityPath's translation functions
+     for( std::map<TARGETING::TYPE,uint64_t>::iterator itr = l_presData.begin();
+          itr != l_presData.end();
+@@ -210,6 +255,13 @@ void* host_discover_targets( void *io_pArgs )
+     {
+         uint8_t l_type = itr->first;
+         uint64_t l_val = itr->second;
++
++        if (l_type == 0x03)
++        {
++            //to skip DIMM type
++            continue;
++        }
++
+         TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,"PRESENT> %s[%.2X]=%.8X%.8X",
+                 l_epath.pathElementTypeAsString(itr->first), l_type, l_val>>32, l_val&0xFFFFFFFF);
+ #if (!defined(CONFIG_CONSOLE_OUTPUT_TRACE) && defined(CONFIG_CONSOLE))
+-- 
+2.14.1
+
