Skip to content

Commit

Permalink
Lookup remote node's HRMOR value save from prev boot during MPIPL
Browse files Browse the repository at this point in the history
When getting the interrp initialized for the MPIPL boot we need to
look up the remote node's hrmor value that each node stored away in
the ipc_data_area_t of each node. Previously the code was relying
on all of the HRMORs to be evenly laid out in intervals of the master
node's hrmor. This calculation is no longer valid, we must look up
the value stored on the previous boot.

Change-Id: I6f059ba14ef759ffd2d033f60bfa3e2a25d3a88b
CQ: SW439088
Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/63399
Reviewed-by: Michael Baiocchi <mbaiocch@us.ibm.com>
Reviewed-by: Roland Veloz <rveloz@us.ibm.com>
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Reviewed-by: Christian R. Geddes <crgeddes@us.ibm.com>
  • Loading branch information
crgeddes committed Jul 27, 2018
1 parent 3b48d9e commit 10ccdde
Showing 1 changed file with 19 additions and 1 deletion.
20 changes: 19 additions & 1 deletion src/usr/intr/intrrp.C
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@
#include <p9_misc_scom_addresses.H>
#include <p9n2_misc_scom_addresses_fld.H>
#include <util/utilmbox_scratch.H>
#include <util/align.H>
#include <errl/errludprintk.H>

using namespace INTR;
Expand Down Expand Up @@ -2486,9 +2487,26 @@ errlHndl_t IntrRp::syncNodes(intr_mpipl_sync_t i_sync_type)
}
else if(this_node_info->exist[node])
{
// Read the remote ipc address for this node and store it as an integer
uint64_t l_remote_ipc_addr =
reinterpret_cast<uint64_t>(KernelIpc::ipc_data_area.remote_ipc_data_addr[node]);

// perform a block map to get a page aligned vaddr that contains the info we want
void* l_pageAlignedPtr = mm_block_map(reinterpret_cast<void *>(ALIGN_PAGE_DOWN(l_remote_ipc_addr)),
ALIGN_PAGE(sizeof(KernelIpc::ipc_data_area_t) + PAGE_SIZE));

KernelIpc::ipc_data_area_t * l_node_ipc_data_area =
reinterpret_cast<KernelIpc::ipc_data_area_t *>(
reinterpret_cast<uint64_t>(l_pageAlignedPtr) +
(l_remote_ipc_addr % PAGE_SIZE) );

hrmorBase = l_node_ipc_data_area->hrmor_base;

mm_block_unmap(reinterpret_cast<void *>(ALIGN_PAGE_DOWN(l_remote_ipc_addr)));

node_info_ptr =
reinterpret_cast<void *>
((node*hrmorBase)+VMM_INTERNODE_PRESERVED_MEMORY_ADDR);
((hrmorBase)+VMM_INTERNODE_PRESERVED_MEMORY_ADDR);

internode_info_t * node_info =
reinterpret_cast<internode_info_t *>
Expand Down

0 comments on commit 10ccdde

Please sign in to comment.