summaryrefslogtreecommitdiffstats
path: root/src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/proc_setup_bars.C
diff options
context:
space:
mode:
Diffstat (limited to 'src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/proc_setup_bars.C')
-rw-r--r--src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/proc_setup_bars.C3887
1 files changed, 0 insertions, 3887 deletions
diff --git a/src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/proc_setup_bars.C b/src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/proc_setup_bars.C
deleted file mode 100644
index 2315b73cd..000000000
--- a/src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/proc_setup_bars.C
+++ /dev/null
@@ -1,3887 +0,0 @@
-/* IBM_PROLOG_BEGIN_TAG */
-/* This is an automatically generated prolog. */
-/* */
-/* $Source: src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/proc_setup_bars.C $ */
-/* */
-/* OpenPOWER HostBoot Project */
-/* */
-/* Contributors Listed Below - COPYRIGHT 2012,2015 */
-/* [+] International Business Machines Corp. */
-/* */
-/* */
-/* Licensed under the Apache License, Version 2.0 (the "License"); */
-/* you may not use this file except in compliance with the License. */
-/* You may obtain a copy of the License at */
-/* */
-/* http://www.apache.org/licenses/LICENSE-2.0 */
-/* */
-/* Unless required by applicable law or agreed to in writing, software */
-/* distributed under the License is distributed on an "AS IS" BASIS, */
-/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */
-/* implied. See the License for the specific language governing */
-/* permissions and limitations under the License. */
-/* */
-/* IBM_PROLOG_END_TAG */
-// $Id: proc_setup_bars.C,v 1.29 2015/11/10 19:39:58 jmcgill Exp $
-// $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/p8/working/procedures/ipl/fapi/proc_setup_bars.C,v $
-//------------------------------------------------------------------------------
-// *|
-// *! (C) Copyright International Business Machines Corp. 2011
-// *! All Rights Reserved -- Property of IBM
-// *! *** ***
-// *|
-// *! TITLE : proc_setup_bars.C
-// *! DESCRIPTION : Program nest base address registers (BARs) (FAPI)
-// *!
-// *! OWNER NAME : Joe McGill Email: jmcgill@us.ibm.com
-// *!
-//------------------------------------------------------------------------------
-
-
-//------------------------------------------------------------------------------
-// Includes
-//------------------------------------------------------------------------------
-#include <proc_setup_bars.H>
-#include <proc_setup_bars_defs.H>
-
-//------------------------------------------------------------------------------
-// Constant definitions
-//------------------------------------------------------------------------------
-
-// logical size->physical encoding translation maps
-const std::map<uint64_t, uint64_t> proc_setup_bars_nf_bar_size::xlate_map =
- proc_setup_bars_nf_bar_size::create_map();
-
-const std::map<uint64_t, uint64_t> proc_setup_bars_f_bar_size::xlate_map =
- proc_setup_bars_f_bar_size::create_map();
-
-const std::map<uint64_t, uint64_t> proc_setup_bars_fsp_bar_size::xlate_map =
- proc_setup_bars_fsp_bar_size::create_map();
-
-const std::map<uint64_t, uint64_t> proc_setup_bars_fsp_mmio_mask_size::xlate_map =
- proc_setup_bars_fsp_mmio_mask_size::create_map();
-
-const std::map<uint64_t, uint64_t> proc_setup_bars_nx_mmio_bar_size::xlate_map =
- proc_setup_bars_nx_mmio_bar_size::create_map();
-
-const std::map<uint64_t, uint64_t> proc_setup_bars_npu_mmio_bar_size::xlate_map =
- proc_setup_bars_npu_mmio_bar_size::create_map();
-
-const std::map<uint64_t, uint64_t> proc_setup_bars_hca_nm_bar_size::xlate_map =
- proc_setup_bars_hca_nm_bar_size::create_map();
-
-const std::map<uint64_t, uint64_t> proc_setup_bars_as_mmio_bar_size::xlate_map =
- proc_setup_bars_as_mmio_bar_size::create_map();
-
-const std::map<uint64_t, uint64_t> proc_setup_bars_mcd_bar_size::xlate_map =
- proc_setup_bars_mcd_bar_size::create_map();
-
-const std::map<uint64_t, uint64_t> proc_setup_bars_pcie_bar_size::xlate_map =
- proc_setup_bars_pcie_bar_size::create_map();
-
-
-extern "C" {
-
-//------------------------------------------------------------------------------
-// Function definitions
-//------------------------------------------------------------------------------
-
-
-//------------------------------------------------------------------------------
-// function: utility function to display address range/BAR information and
-// check properties
-// parameters: i_bar_def => structure encapsulating address range/BAR
-// properties
-// i_bar_addr_range => structure encapsulating address range
-// returns: true if any properties specified by i_bar_def are violated,
-// false otherwise
-//------------------------------------------------------------------------------
-bool proc_setup_bars_common_check_bar(
- const proc_setup_bars_bar_def& i_bar_def,
- const proc_setup_bars_addr_range& i_bar_addr_range)
-{
- // return code
- fapi::ReturnCode rc;
- // set if error should be logged at end of function
- bool error = false;
-
- do
- {
- // print range information
- i_bar_addr_range.print();
-
- // only check if BAR enable attribute is set
- if (i_bar_addr_range.enabled)
- {
- // ensure that address range lies in fabric real address space
- if (!i_bar_addr_range.is_in_fbc_range())
- {
- FAPI_ERR("proc_setup_bars_common_check_bar: BAR range is not wholly contained in FBC real address space");
- error = true;
- break;
- }
- // ensure that base address value lies in implemented address space
- if (i_bar_addr_range.base_addr &
- i_bar_def.base_addr_mask)
- {
- FAPI_ERR("proc_setup_bars_common_check_bar: BAR base address attribute value is out-of-range");
- error = true;
- break;
- }
- // ensure that address range size is in range
- if ((i_bar_addr_range.size < i_bar_def.size_min) ||
- (i_bar_addr_range.size > i_bar_def.size_max))
- {
- FAPI_ERR("proc_setup_bars_common_check_bar: BAR size attribute value is out-of-range");
- error = true;
- break;
- }
- // check that base address range and mask are aligned
- if (i_bar_def.check_aligned &&
- !i_bar_addr_range.is_aligned())
- {
- FAPI_ERR("proc_setup_bars_common_check_bar: BAR base address/size range values are not aligned");
- error = true;
- break;
- }
- }
- } while(0);
-
- return error;
-}
-
-
-//------------------------------------------------------------------------------
-// function: retrieve attribute (with optional indices) using FAPI AttributeId
-// parameters: i_attr => attribute ID to query
-// i_attr_id => enum identifying attribute function
-// i_target => pointer to chip target
-// i_attr_idx1 => attribute array index1
-// i_attr_idx2 => attribute array index1
-// o_val => output value
-// returns: FAPI_RC_SUCCESS if attribute read is successful & output value
-// is valid,
-// RC_PROC_SETUP_BARS_ATTR_QUERY_ERR if FAPI attribute ID is
-// unsupported,
-// else FAPI_ATTR_GET return code
-//------------------------------------------------------------------------------
-fapi::ReturnCode proc_setup_bars_query_attr(
- const fapi::AttributeId i_attr,
- const proc_setup_bars_attr_id i_attr_id,
- const fapi::Target* i_target,
- const uint32_t i_attr_idx1,
- const uint32_t i_attr_idx2,
- uint64_t& o_val)
-{
- fapi::ReturnCode rc;
-
- FAPI_DBG("proc_setup_bars_query_attr: Start");
-
- // ATTR_PROC_MEM_BASES_ACK
- if (i_attr == fapi::ATTR_PROC_MEM_BASES_ACK)
- {
- fapi::ATTR_PROC_MEM_BASES_ACK_Type attr_data;
- rc = FAPI_ATTR_GET(ATTR_PROC_MEM_BASES_ACK, i_target, attr_data);
- o_val = attr_data[i_attr_idx1];
- }
- // ATTR_PROC_MEM_SIZES_ACK
- else if (i_attr == fapi::ATTR_PROC_MEM_SIZES_ACK)
- {
- fapi::ATTR_PROC_MEM_SIZES_ACK_Type attr_data;
- rc = FAPI_ATTR_GET(ATTR_PROC_MEM_SIZES_ACK, i_target, attr_data);
- o_val = attr_data[i_attr_idx1];
- }
- // ATTR_PROC_MIRROR_BASES_ACK
- else if (i_attr == fapi::ATTR_PROC_MIRROR_BASES_ACK)
- {
- fapi::ATTR_PROC_MIRROR_BASES_ACK_Type attr_data;
- rc = FAPI_ATTR_GET(ATTR_PROC_MIRROR_BASES_ACK, i_target, attr_data);
- o_val = attr_data[i_attr_idx1];
- }
- // ATTR_PROC_MIRROR_SIZES_ACK
- else if (i_attr == fapi::ATTR_PROC_MIRROR_SIZES_ACK)
- {
- fapi::ATTR_PROC_MIRROR_SIZES_ACK_Type attr_data;
- rc = FAPI_ATTR_GET(ATTR_PROC_MIRROR_SIZES_ACK, i_target, attr_data);
- o_val = attr_data[i_attr_idx1];
- }
- // ATTR_PROC_FOREIGN_NEAR_BASE
- else if (i_attr == fapi::ATTR_PROC_FOREIGN_NEAR_BASE)
- {
- fapi::ATTR_PROC_FOREIGN_NEAR_BASE_Type attr_data;
- rc = FAPI_ATTR_GET(ATTR_PROC_FOREIGN_NEAR_BASE, i_target, attr_data);
- o_val = attr_data[i_attr_idx1];
- }
- // ATTR_PROC_FOREIGN_NEAR_SIZE
- else if (i_attr == fapi::ATTR_PROC_FOREIGN_NEAR_SIZE)
- {
- fapi::ATTR_PROC_FOREIGN_NEAR_SIZE_Type attr_data;
- rc = FAPI_ATTR_GET(ATTR_PROC_FOREIGN_NEAR_SIZE, i_target, attr_data);
- o_val = attr_data[i_attr_idx1];
- }
- // ATTR_PROC_FOREIGN_FAR_BASE
- else if (i_attr == fapi::ATTR_PROC_FOREIGN_FAR_BASE)
- {
- fapi::ATTR_PROC_FOREIGN_FAR_BASE_Type attr_data;
- rc = FAPI_ATTR_GET(ATTR_PROC_FOREIGN_FAR_BASE, i_target, attr_data);
- o_val = attr_data[i_attr_idx1];
- }
- // ATTR_PROC_FOREIGN_FAR_SIZE
- else if (i_attr == fapi::ATTR_PROC_FOREIGN_FAR_SIZE)
- {
- fapi::ATTR_PROC_FOREIGN_FAR_SIZE_Type attr_data;
- rc = FAPI_ATTR_GET(ATTR_PROC_FOREIGN_FAR_SIZE, i_target, attr_data);
- o_val = attr_data[i_attr_idx1];
- }
- // ATTR_PROC_PSI_BRIDGE_BAR_BASE_ADDR
- else if (i_attr == fapi::ATTR_PROC_PSI_BRIDGE_BAR_BASE_ADDR)
- {
- fapi::ATTR_PROC_PSI_BRIDGE_BAR_BASE_ADDR_Type attr_data;
- rc = FAPI_ATTR_GET(ATTR_PROC_PSI_BRIDGE_BAR_BASE_ADDR, i_target, attr_data);
- o_val = attr_data;
- }
- // ATTR_PROC_PSI_BRIDGE_BAR_ENABLE
- else if (i_attr == fapi::ATTR_PROC_PSI_BRIDGE_BAR_ENABLE)
- {
- fapi::ATTR_PROC_PSI_BRIDGE_BAR_ENABLE_Type attr_data;
- rc = FAPI_ATTR_GET(ATTR_PROC_PSI_BRIDGE_BAR_ENABLE, i_target, attr_data);
- o_val = attr_data;
- }
- // ATTR_PROC_FSP_BAR_BASE_ADDR
- else if (i_attr == fapi::ATTR_PROC_FSP_BAR_BASE_ADDR)
- {
- fapi::ATTR_PROC_FSP_BAR_BASE_ADDR_Type attr_data;
- rc = FAPI_ATTR_GET(ATTR_PROC_FSP_BAR_BASE_ADDR, i_target, attr_data);
- o_val = attr_data;
- }
- // ATTR_PROC_FSP_BAR_ENABLE
- else if (i_attr == fapi::ATTR_PROC_FSP_BAR_ENABLE)
- {
- fapi::ATTR_PROC_FSP_BAR_ENABLE_Type attr_data;
- rc = FAPI_ATTR_GET(ATTR_PROC_FSP_BAR_ENABLE, i_target, attr_data);
- o_val = attr_data;
- }
- // ATTR_PROC_FSP_BAR_SIZE
- else if (i_attr == fapi::ATTR_PROC_FSP_BAR_SIZE)
- {
- fapi::ATTR_PROC_FSP_BAR_SIZE_Type attr_data;
- rc = FAPI_ATTR_GET(ATTR_PROC_FSP_BAR_SIZE, i_target, attr_data);
- o_val = attr_data;
- }
- // ATTR_PROC_FSP_MMIO_MASK_SIZE
- else if (i_attr == fapi::ATTR_PROC_FSP_MMIO_MASK_SIZE)
- {
- fapi::ATTR_PROC_FSP_MMIO_MASK_SIZE_Type attr_data;
- rc = FAPI_ATTR_GET(ATTR_PROC_FSP_MMIO_MASK_SIZE, i_target, attr_data);
- o_val = attr_data;
- }
- // ATTR_PROC_INTP_BAR_BASE_ADDR
- else if (i_attr == fapi::ATTR_PROC_INTP_BAR_BASE_ADDR)
- {
- fapi::ATTR_PROC_INTP_BAR_BASE_ADDR_Type attr_data;
- rc = FAPI_ATTR_GET(ATTR_PROC_INTP_BAR_BASE_ADDR, i_target, attr_data);
- o_val = attr_data;
- }
- // ATTR_PROC_INTP_BAR_ENABLE
- else if (i_attr == fapi::ATTR_PROC_INTP_BAR_ENABLE)
- {
- fapi::ATTR_PROC_INTP_BAR_ENABLE_Type attr_data;
- rc = FAPI_ATTR_GET(ATTR_PROC_INTP_BAR_ENABLE, i_target, attr_data);
- o_val = attr_data;
- }
- // ATTR_PROC_NX_MMIO_BAR_BASE_ADDR
- else if (i_attr == fapi::ATTR_PROC_NX_MMIO_BAR_BASE_ADDR)
- {
- fapi::ATTR_PROC_NX_MMIO_BAR_BASE_ADDR_Type attr_data;
- rc = FAPI_ATTR_GET(ATTR_PROC_NX_MMIO_BAR_BASE_ADDR, i_target, attr_data);
- o_val = attr_data;
- }
- // ATTR_PROC_NX_MMIO_BAR_ENABLE
- else if (i_attr == fapi::ATTR_PROC_NX_MMIO_BAR_ENABLE)
- {
- fapi::ATTR_PROC_NX_MMIO_BAR_ENABLE_Type attr_data;
- rc = FAPI_ATTR_GET(ATTR_PROC_NX_MMIO_BAR_ENABLE, i_target, attr_data);
- o_val = attr_data;
- }
- // ATTR_PROC_NX_MMIO_BAR_SIZE
- else if (i_attr == fapi::ATTR_PROC_NX_MMIO_BAR_SIZE)
- {
- fapi::ATTR_PROC_NX_MMIO_BAR_SIZE_Type attr_data;
- rc = FAPI_ATTR_GET(ATTR_PROC_NX_MMIO_BAR_SIZE, i_target, attr_data);
- o_val = attr_data;
- }
- // ATTR_PROC_AS_MMIO_BAR_BASE_ADDR
- else if (i_attr == fapi::ATTR_PROC_AS_MMIO_BAR_BASE_ADDR)
- {
- fapi::ATTR_PROC_AS_MMIO_BAR_BASE_ADDR_Type attr_data;
- rc = FAPI_ATTR_GET(ATTR_PROC_AS_MMIO_BAR_BASE_ADDR, i_target, attr_data);
- o_val = attr_data;
- }
- // ATTR_PROC_AS_MMIO_BAR_ENABLE
- else if (i_attr == fapi::ATTR_PROC_AS_MMIO_BAR_ENABLE)
- {
- fapi::ATTR_PROC_AS_MMIO_BAR_ENABLE_Type attr_data;
- rc = FAPI_ATTR_GET(ATTR_PROC_AS_MMIO_BAR_ENABLE, i_target, attr_data);
- o_val = attr_data;
- }
- // ATTR_PROC_AS_MMIO_BAR_SIZE
- else if (i_attr == fapi::ATTR_PROC_AS_MMIO_BAR_SIZE)
- {
- fapi::ATTR_PROC_AS_MMIO_BAR_SIZE_Type attr_data;
- rc = FAPI_ATTR_GET(ATTR_PROC_AS_MMIO_BAR_SIZE, i_target, attr_data);
- o_val = attr_data;
- }
- // ATTR_PROC_NPU_MMIO_BAR_BASE_ADDR
- else if (i_attr == fapi::ATTR_PROC_NPU_MMIO_BAR_BASE_ADDR)
- {
- fapi::ATTR_PROC_NPU_MMIO_BAR_BASE_ADDR_Type attr_data;
- rc = FAPI_ATTR_GET(ATTR_PROC_NPU_MMIO_BAR_BASE_ADDR, i_target, attr_data);
- o_val = attr_data[i_attr_idx1][i_attr_idx2];
- }
- // ATTR_PROC_NPU_MMIO_BAR_ENABLE
- else if (i_attr == fapi::ATTR_PROC_NPU_MMIO_BAR_ENABLE)
- {
- fapi::ATTR_PROC_NPU_MMIO_BAR_ENABLE_Type attr_data;
- rc = FAPI_ATTR_GET(ATTR_PROC_NPU_MMIO_BAR_ENABLE, i_target, attr_data);
- o_val = attr_data[i_attr_idx1][i_attr_idx2];
- }
- // ATTR_PROC_NPU_MMIO_BAR_SIZE
- else if (i_attr == fapi::ATTR_PROC_NPU_MMIO_BAR_SIZE)
- {
- fapi::ATTR_PROC_NPU_MMIO_BAR_SIZE_Type attr_data;
- rc = FAPI_ATTR_GET(ATTR_PROC_NPU_MMIO_BAR_SIZE, i_target, attr_data);
- o_val = attr_data[i_attr_idx1][i_attr_idx2];
- }
- // ATTR_PROC_PCIE_BAR_BASE_ADDR
- else if (i_attr == fapi::ATTR_PROC_PCIE_BAR_BASE_ADDR)
- {
- fapi::ATTR_PROC_PCIE_BAR_BASE_ADDR_Type attr_data;
- rc = FAPI_ATTR_GET(ATTR_PROC_PCIE_BAR_BASE_ADDR, i_target, attr_data);
- o_val = attr_data[i_attr_idx1][i_attr_idx2];
- }
- // ATTR_PROC_PCIE_BAR_ENABLE
- else if (i_attr == fapi::ATTR_PROC_PCIE_BAR_ENABLE)
- {
- fapi::ATTR_PROC_PCIE_BAR_ENABLE_Type attr_data;
- rc = FAPI_ATTR_GET(ATTR_PROC_PCIE_BAR_ENABLE, i_target, attr_data);
- o_val = attr_data[i_attr_idx1][i_attr_idx2];
- }
- // ATTR_PROC_PCIE_BAR_SIZE
- else if (i_attr == fapi::ATTR_PROC_PCIE_BAR_SIZE)
- {
- fapi::ATTR_PROC_PCIE_BAR_SIZE_Type attr_data;
- rc = FAPI_ATTR_GET(ATTR_PROC_PCIE_BAR_SIZE, i_target, attr_data);
- o_val = attr_data[i_attr_idx1][i_attr_idx2];
- }
- else
- {
- FAPI_ERR("proc_setup_bars_query_attr: Unsupported FAPI Attribute ID");
- const fapi::Target & TARGET = *i_target;
- const fapi::AttributeId & FAPI_ATTR_ID = i_attr;
- const proc_setup_bars_attr_id & ATTR_ID = i_attr_id;
- const uint32_t & ATTR_IDX1 = i_attr_idx1;
- const uint32_t & ATTR_IDX2 = i_attr_idx2;
- FAPI_SET_HWP_ERROR(rc,
- RC_PROC_SETUP_BARS_ATTR_QUERY_ERR);
- }
-
- FAPI_DBG("proc_setup_bars_query_attr: End");
- return rc;
-}
-
-
-//------------------------------------------------------------------------------
-// function: retrieve attributes defining unit BAR/range programming
-// parameters: i_target => pointer to chip target
-// i_attr_id => enum identifying BAR/range function
-// i_base_addr_attr => pointer to attribute ID associated with
-// BAR/range base address
-// i_enable_attr => pointer to attribute ID associated with
-// BAR/range enable
-// i_size_attr => pointer to attribute ID associated with
-// BAR/range size
-// i_attr_idx1 => attribute array index1
-// i_attr_idx2 => attribute array index2
-// i_bar_def => structure encapsulating BAR/range
-// properties
-// io_addr_range => address range structure encapsulating
-// attribute values
-// returns: FAPI_RC_SUCCESS if all attribute reads are successful & values
-// are valid,
-// RC_PROC_SETUP_BARS_ATTR_LOOKUP_ERR if no rule is
-// provided to set BAR/range address/enable/size,
-// RC_PROC_SETUP_BARS_ATTR_CONTENT_ERR if BAR/range
-// attribute content violates expected behavior,
-// else FAPI_ATTR_GET return code
-//------------------------------------------------------------------------------
-fapi::ReturnCode proc_setup_bars_get_range_attrs(
- const fapi::Target* i_target,
- const proc_setup_bars_attr_id i_attr_id,
- const fapi::AttributeId* i_base_addr_attr,
- const fapi::AttributeId* i_enable_attr,
- const fapi::AttributeId* i_size_attr,
- const uint32_t i_attr_idx1,
- const uint32_t i_attr_idx2,
- const proc_setup_bars_bar_def& i_bar_def,
- proc_setup_bars_addr_range& io_addr_range)
-{
- // return code
- fapi::ReturnCode rc;
- uint64_t bar_enabled;
-
- FAPI_DBG("proc_setup_bars_get_range_attrs: Start");
- do
- {
- // BAR base address
- if ((i_attr_id == PROC_SETUP_BARS_ATTR_ID_FSP_MMIO) && !i_attr_idx1 && !i_attr_idx2)
- {
- io_addr_range.base_addr = 0x0;
- }
- else if (i_base_addr_attr)
- {
- rc = proc_setup_bars_query_attr(
- *i_base_addr_attr,
- i_attr_id,
- i_target,
- i_attr_idx1, i_attr_idx2,
- io_addr_range.base_addr);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_get_range_attrs: Error querying BAR base address attribute (Unit/Range ID = 0x%X, FAPI Attribute ID = %08X)",
- i_attr_id, *i_base_addr_attr);
- break;
- }
- }
- else
- {
- FAPI_ERR("proc_setup_bars_get_range_attrs: No rule to set range base address");
- const fapi::Target & TARGET = *i_target;
- const proc_setup_bars_attr_id & ATTR_ID = i_attr_id;
- const uint32_t & ATTR_IDX1 = i_attr_idx1;
- const uint32_t & ATTR_IDX2 = i_attr_idx2;
- const proc_setup_bars_attr_lookup_err_type & ERR_TYPE = PROC_SETUP_BARS_BASE_ADDR_ATTR_LOOKUP_ERR;
- FAPI_SET_HWP_ERROR(rc,
- RC_PROC_SETUP_BARS_ATTR_LOOKUP_ERR);
- break;
- }
-
- // BAR size
- if (((i_attr_id == PROC_SETUP_BARS_ATTR_ID_PSI) ||
- (i_attr_id == PROC_SETUP_BARS_ATTR_ID_INTP)) &&
- !i_attr_idx1 && !i_attr_idx2)
- {
- io_addr_range.size = PROC_SETUP_BARS_SIZE_1_MB;
- }
- else if (i_size_attr)
- {
- rc = proc_setup_bars_query_attr(
- *i_size_attr,
- i_attr_id,
- i_target,
- i_attr_idx1, i_attr_idx2,
- io_addr_range.size);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_get_range_attrs: Error querying BAR size attribute (Unit/Range ID = 0x%X, FAPI Attribute ID = 0x%08X)",
- i_attr_id, *i_size_attr);
- break;
- }
- }
- else
- {
- FAPI_ERR("proc_setup_bars_get_range_attrs: No rule to set range size");
- const fapi::Target & TARGET = *i_target;
- const proc_setup_bars_attr_id & ATTR_ID = i_attr_id;
- const uint32_t & ATTR_IDX1 = i_attr_idx1;
- const uint32_t & ATTR_IDX2 = i_attr_idx2;
- const proc_setup_bars_attr_lookup_err_type & ERR_TYPE = PROC_SETUP_BARS_SIZE_ATTR_LOOKUP_ERR;
- FAPI_SET_HWP_ERROR(rc,
- RC_PROC_SETUP_BARS_ATTR_LOOKUP_ERR);
- break;
- }
-
- // BAR enable
- if ((i_attr_id == PROC_SETUP_BARS_ATTR_ID_FSP_MMIO) && !i_attr_idx1 && !i_attr_idx2)
- {
- io_addr_range.enabled = true;
- }
-
- else if (((i_attr_id == PROC_SETUP_BARS_ATTR_ID_NM) && (i_attr_idx1 < PROC_SETUP_BARS_NUM_NON_MIRRORED_RANGES) && !i_attr_idx2) ||
- ((i_attr_id == PROC_SETUP_BARS_ATTR_ID_M) && (i_attr_idx1 < PROC_SETUP_BARS_NUM_MIRRORED_RANGES) && !i_attr_idx2) ||
- ((i_attr_id == PROC_SETUP_BARS_ATTR_ID_FN) && (i_attr_idx1 < PROC_FAB_SMP_NUM_F_LINKS) && !i_attr_idx2) ||
- ((i_attr_id == PROC_SETUP_BARS_ATTR_ID_FF) && (i_attr_idx1 < PROC_FAB_SMP_NUM_F_LINKS) && !i_attr_idx2))
- {
- io_addr_range.enabled = (io_addr_range.size != 0);
- }
- else if (i_enable_attr)
- {
- rc = proc_setup_bars_query_attr(
- *i_enable_attr,
- i_attr_id,
- i_target,
- i_attr_idx1, i_attr_idx2,
- bar_enabled);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_get_range_attrs: Error querying BAR enable attribute (Unit/Range ID = 0x%X, FAPI Attribute ID = 0x%08X)",
- i_attr_id, *i_enable_attr);
- break;
- }
- io_addr_range.enabled = (bar_enabled == 0x1ULL);
- }
- else
- {
- FAPI_ERR("proc_setup_bars_get_range_attrs: No rule to set range enable");
- const fapi::Target & TARGET = *i_target;
- const proc_setup_bars_attr_id & ATTR_ID = i_attr_id;
- const uint32_t & ATTR_IDX1 = i_attr_idx1;
- const uint32_t & ATTR_IDX2 = i_attr_idx2;
- const proc_setup_bars_attr_lookup_err_type & ERR_TYPE = PROC_SETUP_BARS_ENABLE_ATTR_LOOKUP_ERR;
- FAPI_SET_HWP_ERROR(rc,
- RC_PROC_SETUP_BARS_ATTR_LOOKUP_ERR);
- break;
- }
-
- // check BAR attribute content
- if (proc_setup_bars_common_check_bar(
- i_bar_def,
- io_addr_range) != false)
- {
- FAPI_ERR("proc_setup_bars_get_range_attrs: Error from proc_setup_bars_common_check_bar");
- const fapi::Target & TARGET = *i_target;
- const proc_setup_bars_attr_id & ATTR_ID = i_attr_id;
- const uint32_t & ATTR_IDX1 = i_attr_idx1;
- const uint32_t & ATTR_IDX2 = i_attr_idx2;
- const uint64_t & BASE_ADDR = io_addr_range.base_addr;
- const bool & ENABLED = io_addr_range.enabled;
- const uint64_t & SIZE = io_addr_range.size;
- FAPI_SET_HWP_ERROR(rc,
- RC_PROC_SETUP_BARS_ATTR_CONTENT_ERR);
- break;
- }
- } while(0);
-
- FAPI_DBG("proc_setup_bars_get_range_attrs: End");
- return rc;
-}
-
-
-//------------------------------------------------------------------------------
-// function: retrieve attributes defining non-mirrored/mirrored memory ranges
-// parameters: i_target => pointer to chip target
-// i_range_id => enum identifying range function
-// i_base_addr_attr => pointer to attribute ID associated with
-// ange base addresses
-// i_size_attr => pointer to attribute ID associated with
-// range sizes
-// i_num_ranges => number of ranges (attribute dimension)
-// i_range_def => structure encapsulating range
-// properties
-// io_addr_range => address range structure encapsulating
-// attribute
-// values (size will be rounded up to nearest
-// power of two)
-// returns: FAPI_RC_SUCCESS if all attribute reads are successful & values
-// are valid,
-// RC_PROC_SETUP_BARS_CHIP_MEMORY_RANGE_ATTR_OVERLAP_ERR if chip
-// memory range attributes specify overlapping address ranges,
-// RC_PROC_SETUP_BARS_CHIP_MEMORY_RANGE_ERR if merged chip
-// memory address range is invalid,
-// RC_PROC_SETUP_BARS_ATTR_CONTENT_ERR if BAR/range
-// attribute content violates expected behavior,
-// else proc_setup_bars_get_range_attrs failing return code
-//------------------------------------------------------------------------------
-fapi::ReturnCode proc_setup_bars_get_memory_range_attrs(
- const fapi::Target* i_target,
- const proc_setup_bars_attr_id i_range_id,
- const fapi::AttributeId i_base_addr_attr,
- const fapi::AttributeId i_size_attr,
- const uint8_t i_num_ranges,
- const proc_setup_bars_bar_def& i_range_def,
- proc_setup_bars_addr_range& io_addr_range)
-{
- // return code
- fapi::ReturnCode rc;
- // set of ranges, to be checked/merged into single range
- std::vector<proc_setup_bars_addr_range> ranges(i_num_ranges);
-
- // mark function entry
- FAPI_DBG("proc_setup_bars_get_memory_range_attrs: Start");
-
- do
- {
- // build individual ranges
- for (uint8_t r = 0; r < i_num_ranges; r++)
- {
- rc = proc_setup_bars_get_range_attrs(
- i_target,
- i_range_id,
- &i_base_addr_attr,
- NULL,
- &i_size_attr,
- r, 0,
- i_range_def,
- ranges[r]);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_get_memory_range_attrs: Error from proc_setup_bars_get_range_attrs (Range ID = 0x%X, Range index = %d)",
- i_range_id, r);
- break;
- }
- }
- if (!rc.ok())
- {
- break;
- }
-
- // check that ranges are non-overlapping
- if (i_num_ranges > 1)
- {
- for (uint8_t r = 0; (r < i_num_ranges-1) && rc.ok(); r++)
- {
- for (uint8_t x = r+1; x < i_num_ranges; x++)
- {
- if (ranges[r].overlaps(ranges[x]))
- {
- FAPI_ERR("proc_setup_bars_get_memory_range_attrs: Memory range attributes specify overlapping address regions (Range ID = 0x%X, Range index1 = %d, Range index2 = %d)",
- i_range_id, r, x);
- const fapi::Target & TARGET = *i_target;
- const proc_setup_bars_attr_id & RANGE_ID = i_range_id;
- const uint32_t & ATTR_IDX1 = r;
- const uint64_t & BASE_ADDR1 = ranges[r].base_addr;
- const uint64_t & END_ADDR1 = ranges[r].end_addr();
- const bool & ENABLED1 = ranges[r].enabled;
- const uint32_t & ATTR_IDX2 = x;
- const uint64_t & BASE_ADDR2 = ranges[x].base_addr;
- const uint64_t & END_ADDR2 = ranges[x].end_addr();
- const bool & ENABLED2 = ranges[x].enabled;
- FAPI_SET_HWP_ERROR(rc,
- RC_PROC_SETUP_BARS_CHIP_MEMORY_RANGE_ATTR_OVERLAP_ERR);
- break;
- }
- }
- }
- if (!rc.ok())
- {
- break;
- }
- }
-
- // ranges are non-overlapping, merge to single range
- for (uint8_t r = 0; r < i_num_ranges; r++)
- {
- // merge to build single range
- io_addr_range.merge(ranges[r]);
- }
-
- // ensure range is power of 2 aligned
- if (io_addr_range.enabled && !io_addr_range.is_power_of_2())
- {
- io_addr_range.round_next_power_of_2();
- }
-
- // check final range content
- if (proc_setup_bars_common_check_bar(
- i_range_def,
- io_addr_range) != false)
- {
- FAPI_ERR("proc_setup_bars_get_memory_range_attrs: Error from proc_setup_bars_common_check_bar");
- const fapi::Target & TARGET = *i_target;
- const proc_setup_bars_attr_id & RANGE_ID = i_range_id;
- const uint64_t & BASE_ADDR = io_addr_range.base_addr;
- const uint64_t & END_ADDR = io_addr_range.end_addr();
- const bool & ENABLED = io_addr_range.enabled;
- FAPI_SET_HWP_ERROR(rc,
- RC_PROC_SETUP_BARS_CHIP_MEMORY_RANGE_ERR);
- break;
- }
- } while(0);
-
- // mark function exit
- FAPI_DBG("proc_setup_bars_get_memory_range_attrs: End");
- return rc;
-}
-
-
-//------------------------------------------------------------------------------
-// function: wrapper function to call all BAR attribute query functions
-// parameters: io_smp_chip => structure encapsulating single chip in SMP
-// topology (containing target for attribute
-// query and storage for all address ranges)
-// returns: FAPI_RC_SUCCESS if all attribute reads are successful & values
-// are valid,
-// else failing return code from attribute query function
-//------------------------------------------------------------------------------
-fapi::ReturnCode proc_setup_bars_get_bar_attrs(
- proc_setup_bars_smp_chip& io_smp_chip)
-{
- // return code
- fapi::ReturnCode rc;
-
- // mark function entry
- FAPI_DBG("proc_setup_bars_get_bar_attrs: Start");
-
- do
- {
- FAPI_DBG("proc_setup_bars_get_bar_attrs: Querying base address/size attributes for non-mirrored memory range");
- rc = proc_setup_bars_get_memory_range_attrs(
- &(io_smp_chip.chip->this_chip),
- PROC_SETUP_BARS_ATTR_ID_NM,
- fapi::ATTR_PROC_MEM_BASES_ACK,
- fapi::ATTR_PROC_MEM_SIZES_ACK,
- PROC_SETUP_BARS_NUM_NON_MIRRORED_RANGES,
- non_mirrored_range_def,
- io_smp_chip.non_mirrored_range);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_get_bar_attrs: Error from proc_setup_bars_get_memory_range_attrs (non-mirrored)");
- break;
- }
-
- FAPI_DBG("proc_setup_bars_get_bar_attrs: Querying base address/size attributes for mirrored memory range");
- rc = proc_setup_bars_get_memory_range_attrs(
- &(io_smp_chip.chip->this_chip),
- PROC_SETUP_BARS_ATTR_ID_M,
- fapi::ATTR_PROC_MIRROR_BASES_ACK,
- fapi::ATTR_PROC_MIRROR_SIZES_ACK,
- PROC_SETUP_BARS_NUM_MIRRORED_RANGES,
- mirrored_range_def,
- io_smp_chip.mirrored_range);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_get_bar_attrs: Error from proc_setup_bars_get_memory_range_attrs (mirrored)");
- break;
- }
-
- FAPI_DBG("proc_setup_bars_get_bar_attrs: Querying base address/size attributes for foreign near memory ranges");
- for (uint8_t l = 0; l < PROC_FAB_SMP_NUM_F_LINKS; l++)
- {
- rc = proc_setup_bars_get_range_attrs(
- &(io_smp_chip.chip->this_chip),
- PROC_SETUP_BARS_ATTR_ID_FN,
- &f_near_range_base_addr_attr,
- NULL,
- &f_near_range_size_attr,
- l, 0,
- common_f_scope_bar_def,
- io_smp_chip.foreign_near_ranges[l]);
-
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_get_bar_attrs: Error from proc_setup_bars_get_range_attrs (foreign near, link = %d)",
- l);
- break;
- }
- }
- if (!rc.ok())
- {
- break;
- }
-
- FAPI_DBG("proc_setup_bars_get_bar_attrs: Querying base address/size attributes for foreign far memory ranges");
- for (uint8_t l = 0; l < PROC_FAB_SMP_NUM_F_LINKS; l++)
- {
- rc = proc_setup_bars_get_range_attrs(
- &(io_smp_chip.chip->this_chip),
- PROC_SETUP_BARS_ATTR_ID_FF,
- &f_far_range_base_addr_attr,
- NULL,
- &f_far_range_size_attr,
- l, 0,
- common_f_scope_bar_def,
- io_smp_chip.foreign_far_ranges[l]);
-
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_get_bar_attrs: Error from proc_setup_bars_get_range_attrs (foreign far, link = %d)",
- l);
- break;
- }
- }
- if (!rc.ok())
- {
- break;
- }
-
- FAPI_DBG("proc_setup_bars_get_bar_attrs: Querying base address/size attributes for PSI address range");
- rc = proc_setup_bars_get_range_attrs(
- &(io_smp_chip.chip->this_chip),
- PROC_SETUP_BARS_ATTR_ID_PSI,
- &psi_bridge_bar_base_addr_attr,
- &psi_bridge_bar_en_attr,
- NULL,
- 0, 0,
- psi_bridge_bar_def,
- io_smp_chip.psi_range);
-
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_get_bar_attrs: Error from proc_setup_bars_get_range_attrs (PSI)");
- break;
- }
-
- FAPI_DBG("proc_setup_bars_get_bar_attrs: Querying base address/size attributes for FSP address range");
- rc = proc_setup_bars_get_range_attrs(
- &(io_smp_chip.chip->this_chip),
- PROC_SETUP_BARS_ATTR_ID_FSP,
- &fsp_bar_base_addr_attr,
- &fsp_bar_en_attr,
- &fsp_bar_size_attr,
- 0, 0,
- fsp_bar_def,
- io_smp_chip.fsp_range);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_get_bar_attrs: Error from proc_setup_bars_get_range_attrs (FSP)");
- break;
- }
-
- FAPI_DBG("proc_setup_bars_get_bar_attrs: Querying base address/size attributes for FSP MMIO mask");
- rc = proc_setup_bars_get_range_attrs(
- &(io_smp_chip.chip->this_chip),
- PROC_SETUP_BARS_ATTR_ID_FSP_MMIO,
- NULL,
- NULL,
- &fsp_mmio_mask_size_attr,
- 0, 0,
- fsp_mmio_mask_def,
- io_smp_chip.fsp_mmio_mask_range);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_get_bar_attrs: Error from proc_setup_bars_get_range_addrs (FSP MMIO)");
- break;
- }
-
- FAPI_DBG("proc_setup_bars_get_bar_attrs: Querying base address/size attributes for INTP address range");
- rc = proc_setup_bars_get_range_attrs(
- &(io_smp_chip.chip->this_chip),
- PROC_SETUP_BARS_ATTR_ID_INTP,
- &intp_bar_base_addr_attr,
- &intp_bar_en_attr,
- NULL,
- 0, 0,
- intp_bar_def,
- io_smp_chip.intp_range);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_get_bar_attrs: Error from proc_setup_bars_get_range_attrs (INTP)");
- break;
- }
-
- FAPI_DBG("proc_setup_bars_get_bar_attrs: Querying base address/size attributes for NX MMIO address range");
- rc = proc_setup_bars_get_range_attrs(
- &(io_smp_chip.chip->this_chip),
- PROC_SETUP_BARS_ATTR_ID_NX,
- &nx_mmio_bar_base_addr_attr,
- &nx_mmio_bar_en_attr,
- &nx_mmio_bar_size_attr,
- 0, 0,
- nx_mmio_bar_def,
- io_smp_chip.nx_mmio_range);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_get_bar_attrs: Error from proc_setup_bars_get_range_attrs (NX)");
- break;
- }
-
- FAPI_DBG("proc_setup_bars_get_bar_attrs: Querying base address/size attributes for AS MMIO address range");
- rc = proc_setup_bars_get_range_attrs(
- &(io_smp_chip.chip->this_chip),
- PROC_SETUP_BARS_ATTR_ID_AS,
- &as_mmio_bar_base_addr_attr,
- &as_mmio_bar_en_attr,
- &as_mmio_bar_size_attr,
- 0, 0,
- as_mmio_bar_def,
- io_smp_chip.as_mmio_range);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_get_bar_attrs: Error from proc_setup_bars_get_range_attrs (AS)");
- break;
- }
-
- FAPI_DBG("proc_setup_bars_get_bar_attrs: Querying base address/size attributes for NPU MMIO address ranges");
- for (uint8_t u = 0;
- (u < PROC_SETUP_BARS_NPU_NUM_UNITS) && (rc.ok());
- u++)
- {
- for (uint8_t r = 0;
- r < PROC_SETUP_BARS_NPU_MMIO_RANGES_PER_UNIT;
- r++)
- {
- rc = proc_setup_bars_get_range_attrs(
- &(io_smp_chip.chip->this_chip),
- PROC_SETUP_BARS_ATTR_ID_NPU,
- &npu_mmio_bar_base_addr_attr,
- &npu_mmio_bar_en_attr,
- &npu_mmio_bar_size_attr,
- u, r,
- npu_mmio_bar_def,
- io_smp_chip.npu_mmio_ranges[u][r]);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_get_bar_attrs: Error from proc_setup_bars_get_range_attrs (NPU MMIO, unit = %d, range=%d)",
- u, r);
- break;
- }
- }
- }
- if (!rc.ok())
- {
- break;
- }
-
-
- FAPI_DBG("proc_setup_bars_get_bar_attrs: Querying base address/size attributes for PCIe address ranges");
- for (uint8_t u = 0;
- (u < PROC_SETUP_BARS_PCIE_NUM_UNITS) && (rc.ok());
- u++)
- {
- for (uint8_t r = 0;
- r < PROC_SETUP_BARS_PCIE_RANGES_PER_UNIT;
- r++)
- {
- rc = proc_setup_bars_get_range_attrs(
- &(io_smp_chip.chip->this_chip),
- PROC_SETUP_BARS_ATTR_ID_PCIE,
- &pcie_mmio_bar_base_addr_attr,
- &pcie_mmio_bar_en_attr,
- &pcie_mmio_bar_size_attr,
- u, r,
- ((PROC_SETUP_BARS_PCIE_RANGE_TYPE_MMIO[r])?
- (pcie_mmio_bar_def):
- (pcie_phb_bar_def)),
- io_smp_chip.pcie_ranges[u][r]);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_get_bar_attrs: Error from proc_setup_bars_get_range_attrs (PCIE, unit = %d, range=%d)",
- u, r);
- break;
- }
- }
- }
- if (!rc.ok())
- {
- break;
- }
-
- } while(0);
-
- // mark function exit
- FAPI_DBG("proc_setup_bars_get_bar_attrs: End");
- return rc;
-}
-
-
-//------------------------------------------------------------------------------
-// function: wrapper function to call all chip attribute query functions
-// (fabric configuration/node/position/BARs)
-// parameters: i_proc_chip => pointer to HWP input structure for this chip
-// io_smp_chip => fully specified structure encapsulating
-// single chip in SMP topology
-// returns: FAPI_RC_SUCCESS if all attribute reads are successful & values
-// are valid,
-// else failing return code from attribute query function
-//------------------------------------------------------------------------------
-fapi::ReturnCode proc_setup_bars_process_chip(
- proc_setup_bars_proc_chip* i_proc_chip,
- proc_setup_bars_smp_chip& io_smp_chip)
-{
- // return code
- fapi::ReturnCode rc;
- uint8_t pcie_enabled;
- uint8_t nx_enabled;
- uint8_t nv_present;
- uint8_t init_group_as_chip;
- uint8_t dual_capp_present;
-
- // mark function entry
- FAPI_DBG("proc_setup_bars_process_chip: Start");
-
- do
- {
- // set HWP input pointer
- io_smp_chip.chip = i_proc_chip;
-
- // display target information for this chip
- FAPI_DBG("proc_setup_bars_process_chip: Target: %s",
- io_smp_chip.chip->this_chip.toEcmdString());
-
- // determine number of PHBs
- FAPI_DBG("proc_setup_bars_process_chip: Querying PHB configuration");
- rc = FAPI_ATTR_GET(ATTR_PROC_PCIE_NUM_PHB,
- &(io_smp_chip.chip->this_chip),
- io_smp_chip.num_phb);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_process_chip: Error querying ATTR_PROC_PCIE_NUM_PHB");
- break;
- }
-
- // get PCIe/DSMP mux attributes
- FAPI_DBG("proc_setup_bars_process_chip: Querying PCIe/DSMP mux attribute");
- rc = proc_fab_smp_get_pcie_dsmp_mux_attrs(&(io_smp_chip.chip->this_chip),
- io_smp_chip.pcie_not_f_link);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_process_chip: Error from proc_fab_smp_get_pcie_dsmp_mux_attrs");
- break;
- }
-
- // get node ID attribute
- FAPI_DBG("proc_setup_bars_process_chip: Querying node ID attribute");
- rc = proc_fab_smp_get_node_id_attr(&(io_smp_chip.chip->this_chip),
- io_smp_chip.node_id);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_process_chip: Error from proc_fab_smp_get_node_id_attr");
- break;
- }
-
- // get chip ID attribute
- FAPI_DBG("proc_setup_bars_process_chip: Querying chip ID attribute");
- rc = proc_fab_smp_get_chip_id_attr(&(io_smp_chip.chip->this_chip),
- io_smp_chip.chip_id);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_process_chip: Error from proc_fab_smp_get_chip_id_attr");
- break;
- }
-
- // query NX partial good attribute
- rc = FAPI_ATTR_GET(ATTR_PROC_NX_ENABLE,
- &(io_smp_chip.chip->this_chip),
- nx_enabled);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_process_chip: Error querying ATTR_PROC_NX_ENABLE");
- break;
- }
-
- // query PCIE partial good attribute
- rc = FAPI_ATTR_GET(ATTR_PROC_PCIE_ENABLE,
- &(io_smp_chip.chip->this_chip),
- pcie_enabled);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_process_chip: Error querying ATTR_PROC_PCIE_ENABLE");
- break;
- }
-
- io_smp_chip.nx_enabled =
- (nx_enabled == fapi::ENUM_ATTR_PROC_NX_ENABLE_ENABLE);
-
- io_smp_chip.pcie_enabled =
- (pcie_enabled == fapi::ENUM_ATTR_PROC_PCIE_ENABLE_ENABLE);
-
- // configure group BARs to cover chip ranges?
- rc = FAPI_ATTR_GET(ATTR_CHIP_EC_FEATURE_INIT_GROUP_BARS_AS_CHIP_BARS,
- &(io_smp_chip.chip->this_chip),
- init_group_as_chip);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_process_chip: Error querying ATTR_CHIP_EC_FEATURE_INIT_GROUP_BARS_AS_CHIP_BARS");
- break;
- }
- io_smp_chip.init_group_as_chip = (init_group_as_chip != 0);
-
- // get NV link presence attribute
- rc = FAPI_ATTR_GET(ATTR_CHIP_EC_FEATURE_NV_PRESENT,
- &(io_smp_chip.chip->this_chip),
- nv_present);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_process_chip: Error querying ATTR_CHIP_EC_FEATURE_NV_PRESENT");
- break;
- }
- io_smp_chip.nv_present = (nv_present != 0);
-
- // get dual CAPP presence attribute
- rc = FAPI_ATTR_GET(ATTR_CHIP_EC_FEATURE_DUAL_CAPP_PRESENT,
- &(io_smp_chip.chip->this_chip),
- dual_capp_present);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_process_chip: Error querying ATTR_CHIP_EC_FEATURE_DUAL_CAPP_PRESENT");
- break;
- }
- io_smp_chip.dual_capp_present = (dual_capp_present != 0);
-
- // get BAR attributes
- rc = proc_setup_bars_get_bar_attrs(io_smp_chip);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_process_chip: Error from proc_setup_bars_get_bar_attrs");
- break;
- }
- } while(0);
-
- // mark function exit
- FAPI_DBG("proc_setup_bars_process_chip: End");
- return rc;
-}
-
-
-//------------------------------------------------------------------------------
-// function: insert chip structure into proper position within SMP model based
-// on its fabric node/chip ID
-// chip non-mirrored/mirrored range information will be merged
-// with those of its enclosing node
-// parameters: i_smp_chip => structure encapsulating single chip in SMP topology
-// io_smp => structure encapsulating full SMP
-// returns: FAPI_RC_SUCCESS if insertion is successful and merged node ranges
-// are valid,
-// RC_PROC_SETUP_BARS_NODE_ADD_INTERNAL_ERR if node map insert fails,
-// RC_PROC_SETUP_BARS_DUPLICATE_FABRIC_ID_ERR if chips with duplicate
-// fabric node/chip IDs are detected
-//------------------------------------------------------------------------------
-fapi::ReturnCode proc_setup_bars_insert_chip(
- proc_setup_bars_smp_chip& i_smp_chip,
- proc_setup_bars_smp_system& io_smp)
-{
- // return code
- fapi::ReturnCode rc;
- // node/chip ID
- proc_fab_smp_node_id node_id = i_smp_chip.node_id;
- proc_fab_smp_chip_id chip_id = i_smp_chip.chip_id;
-
- // mark function entry
- FAPI_DBG("proc_setup_bars_insert_chip: Start");
-
- do
- {
- FAPI_DBG("proc_setup_bars_insert_chip: Inserting n%d p%d",
- node_id, chip_id);
-
- // search to see if node structure already exists for the node ID
- // associated with this chip
- std::map<proc_fab_smp_node_id, proc_setup_bars_smp_node>::iterator
- n_iter;
- n_iter = io_smp.nodes.find(node_id);
- // no matching node found, create one
- if (n_iter == io_smp.nodes.end())
- {
- FAPI_DBG("proc_setup_bars_insert_chip: No matching node found, inserting new node structure");
- proc_setup_bars_smp_node n;
- std::pair<
- std::map<proc_fab_smp_node_id, proc_setup_bars_smp_node>::iterator,
- bool> ret;
- ret = io_smp.nodes.insert(
- std::pair<proc_fab_smp_node_id, proc_setup_bars_smp_node>
- (node_id, n));
- n_iter = ret.first;
- if (!ret.second)
- {
- FAPI_ERR("proc_setup_bars_insert_chip: Error encountered adding node to SMP map");
- const fapi::Target & TARGET = i_smp_chip.chip->this_chip;
- const proc_fab_smp_node_id & NODE_ID = node_id;
- FAPI_SET_HWP_ERROR(rc,
- RC_PROC_SETUP_BARS_NODE_ADD_INTERNAL_ERR);
- break;
- }
- }
-
- // search to see if match exists in this node for the chip ID associated
- // with this chip
- std::map<proc_fab_smp_chip_id, proc_setup_bars_smp_chip>::iterator
- p_iter;
- p_iter = io_smp.nodes[node_id].chips.find(chip_id);
- // matching chip ID & node ID already found, flag an error
- if (p_iter != io_smp.nodes[node_id].chips.end())
- {
- FAPI_ERR("proc_setup_bars_insert_chip: Duplicate fabric node ID / chip ID found");
- const fapi::Target & TARGET1 = i_smp_chip.chip->this_chip;
- const fapi::Target & TARGET2 = p_iter->second.chip->this_chip;
- const proc_fab_smp_node_id & NODE_ID = node_id;
- const proc_fab_smp_chip_id & CHIP_ID = chip_id;
- FAPI_SET_HWP_ERROR(rc,
- RC_PROC_SETUP_BARS_DUPLICATE_FABRIC_ID_ERR);
- break;
- }
- // insert chip into SMP
- io_smp.nodes[node_id].chips[chip_id] = i_smp_chip;
-
- // update node address regions
- i_smp_chip.non_mirrored_range.print();
- io_smp.nodes[node_id].non_mirrored_range.print();
- io_smp.nodes[node_id].non_mirrored_range.merge(io_smp.nodes[node_id].chips[chip_id].non_mirrored_range);
- io_smp.nodes[node_id].non_mirrored_range.print();
-
- i_smp_chip.mirrored_range.print();
- io_smp.nodes[node_id].mirrored_range.print();
- io_smp.nodes[node_id].mirrored_range.merge(io_smp.nodes[node_id].chips[chip_id].mirrored_range);
- io_smp.nodes[node_id].mirrored_range.print();
- } while(0);
-
- // mark function exit
- FAPI_DBG("proc_setup_bars_insert_chip: End");
- return rc;
-}
-
-
-//------------------------------------------------------------------------------
-// function: wrapper function to process all HWP input structures and build
-// SMP data structure
-// parameters: i_proc_chips => vector of HWP input structures (one entry per
-// chip in SMP)
-// io_smp => fully specified structure encapsulating full SMP
-// returns: FAPI_RC_SUCCESS if all processing is successful,
-// else failing return code from chip processing/insertion wrapper
-// functions
-//------------------------------------------------------------------------------
-fapi::ReturnCode proc_setup_bars_process_chips(
- std::vector<proc_setup_bars_proc_chip>& i_proc_chips,
- proc_setup_bars_smp_system& io_smp)
-{
- // return code
- fapi::ReturnCode rc;
-
- // mark function entry
- FAPI_DBG("proc_setup_bars_process_chips: Start");
-
- do
- {
- // loop over all chips passed from platform to HWP
- std::vector<proc_setup_bars_proc_chip>::iterator c_iter;
- for (c_iter = i_proc_chips.begin();
- c_iter != i_proc_chips.end();
- c_iter++)
- {
- // process platform provided data in chip argument,
- // query chip specific attributes
- proc_setup_bars_smp_chip smp_chip;
- rc = proc_setup_bars_process_chip(&(*c_iter),
- smp_chip);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_process_chips: Error from proc_setup_bars_process_chip");
- break;
- }
-
- // insert chip into SMP data structure given node & chip ID
- rc = proc_setup_bars_insert_chip(smp_chip,
- io_smp);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_process_chips: Error from proc_setup_bars_insert_chip");
- break;
- }
- }
- if (!rc.ok())
- {
- break;
- }
-
- // perform final adjustment on node specific resources once
- // all chips have been processed
- std::map<proc_fab_smp_node_id, proc_setup_bars_smp_node>::iterator n_iter;
- for (n_iter = io_smp.nodes.begin();
- n_iter != io_smp.nodes.end();
- n_iter++)
- {
- FAPI_DBG("Performing final adjustment on n%d", n_iter->first);
-
- // update node address ranges (non-mirrored & mirrored)
- FAPI_DBG("proc_setup_bars_process_chips: Ranges after merging:");
- n_iter->second.non_mirrored_range.print();
- n_iter->second.mirrored_range.print();
-
- // update node address ranges (non-mirrored & mirrored) to
- // ensure ranges are power of 2 aligned
- FAPI_DBG("proc_setup_bars_process_chips: Node %d ranges after power of two alignment:",
- n_iter->first);
- if (n_iter->second.non_mirrored_range.enabled &&
- !n_iter->second.non_mirrored_range.is_power_of_2())
- {
- n_iter->second.non_mirrored_range.round_next_power_of_2();
- }
- n_iter->second.non_mirrored_range.print();
-
- if (n_iter->second.mirrored_range.enabled &&
- !n_iter->second.mirrored_range.is_power_of_2())
- {
- n_iter->second.mirrored_range.round_next_power_of_2();
- }
- n_iter->second.mirrored_range.print();
- }
- if (!rc.ok())
- {
- break;
- }
- } while(0);
-
- // mark function exit
- FAPI_DBG("proc_setup_bars_process_chips: End");
- return rc;
-}
-
-
-//------------------------------------------------------------------------------
-// function: utility function to write HW BAR register given address range
-// structure and register definition structure
-// parameters: i_target => chip target
-// i_scom_addr => BAR SCOM address
-// i_bar_reg_def => structure defining rules to format address
-// range content into register layout
-// i_addr_range => structure defining BAR address range
-// (enable/base/size)
-// returns: FAPI_RC_SUCCESS if register write is successful,
-// RC_PROC_SETUP_BARS_INVALID_BAR_REG_DEF if BAR register definition
-// structure is invalid,
-// RC_PROC_SETUP_BARS_SIZE_XLATE_ERR if logical->physical size
-// translation is unsuccessful,
-// else failing return code from SCOM/data buffer manipulation
-//------------------------------------------------------------------------------
-fapi::ReturnCode proc_setup_bars_common_write_bar_reg(
- const fapi::Target& i_target,
- const uint32_t& i_scom_addr,
- const proc_setup_bars_bar_reg_def& i_bar_reg_def,
- const proc_setup_bars_addr_range& i_addr_range)
-{
- // return code
- fapi::ReturnCode rc;
- uint32_t rc_ecmd = 0;
- // BAR register data buffer
- ecmdDataBufferBase bar_data(64);
- ecmdDataBufferBase bar_data_mask(64);
- ecmdDataBufferBase size_data(64);
- ecmdDataBufferBase static_data(64);
- ecmdDataBufferBase static_data_mask(64);
-
- FAPI_DBG("proc_setup_bars_common_write_bar_reg: Start");
- do
- {
- // write base address
- if (i_bar_reg_def.has_base)
- {
- // previous checking ensures zeroes for all non-implemented bits
- rc_ecmd |= bar_data.setDoubleWord(0, i_addr_range.base_addr);
- // shift position to proper location in register
- if (i_bar_reg_def.base_shift == PROC_SETUP_BARS_SHIFT_LEFT)
- {
- rc_ecmd |= bar_data.shiftLeft(i_bar_reg_def.base_shift_amount);
- }
- else if (i_bar_reg_def.base_shift == PROC_SETUP_BARS_SHIFT_RIGHT)
- {
- rc_ecmd |= bar_data.shiftRight(i_bar_reg_def.base_shift_amount);
- }
- else if (i_bar_reg_def.base_shift != PROC_SETUP_BARS_SHIFT_NONE)
- {
- FAPI_ERR("proc_setup_bars_common_write_bar_reg: Invalid base shift value in register definition");
- const fapi::Target & TARGET = i_target;
- const uint32_t & SCOM_ADDR = i_scom_addr;
- const uint64_t & BASE_ADDR = i_addr_range.base_addr;
- const bool & ENABLED = i_addr_range.enabled;
- const uint64_t & SIZE = i_addr_range.size;
- FAPI_SET_HWP_ERROR(rc, RC_PROC_SETUP_BARS_INVALID_BAR_REG_DEF);
- break;
- }
- // set mask
- rc_ecmd |= bar_data_mask.setBit(i_bar_reg_def.base_start_bit,
- (i_bar_reg_def.base_end_bit -
- i_bar_reg_def.base_start_bit + 1));
- }
-
- // write enable bit
- if (i_bar_reg_def.has_enable)
- {
- rc_ecmd |= bar_data.writeBit(i_bar_reg_def.enable_bit,
- i_addr_range.enabled ? 1 : 0);
- rc_ecmd |= bar_data_mask.setBit(i_bar_reg_def.enable_bit);
- }
-
- // write size field
- if (i_bar_reg_def.has_size)
- {
- // encoded size value for register programming
- std::map<uint64_t, uint64_t>::const_iterator s;
- uint64_t size_xlate;
- // translate size into register encoding
- s = i_bar_reg_def.xlate_map->find(i_addr_range.size);
- if (s == i_bar_reg_def.xlate_map->end())
- {
- FAPI_ERR("proc_setup_bars_common_write_bar_reg: Unsupported BAR size 0x%016llX",
- i_addr_range.size);
- const fapi::Target & TARGET = i_target;
- const uint32_t & SCOM_ADDR = i_scom_addr;
- const uint64_t & BASE_ADDR = i_addr_range.base_addr;
- const bool & ENABLED = i_addr_range.enabled;
- const uint64_t & SIZE = i_addr_range.size;
- FAPI_SET_HWP_ERROR(rc, RC_PROC_SETUP_BARS_SIZE_XLATE_ERR);
- break;
- }
- size_xlate = s->second;
-
- rc_ecmd |= size_data.setDoubleWord(0, size_xlate);
- rc_ecmd |= size_data.shiftLeft(63 - i_bar_reg_def.size_end_bit);
- rc_ecmd |= bar_data.merge(size_data);
- rc_ecmd |= bar_data_mask.setBit(i_bar_reg_def.size_start_bit,
- (i_bar_reg_def.size_end_bit -
- i_bar_reg_def.size_start_bit + 1));
- }
-
- // merge static data & mask
- rc_ecmd |= static_data.setDoubleWord(
- 0,
- i_bar_reg_def.static_data);
- rc_ecmd |= static_data_mask.setDoubleWord(
- 0,
- i_bar_reg_def.static_data_mask);
-
- rc_ecmd |= bar_data.merge(static_data);
- rc_ecmd |= bar_data_mask.merge(static_data_mask);
-
- // check buffer manipulation return codes
- if (rc_ecmd)
- {
- FAPI_ERR("proc_setup_bars_common_write_bar_reg: Error 0x%X setting up BAR data buffer",
- rc_ecmd);
- rc.setEcmdError(rc_ecmd);
- break;
- }
-
- // write BAR register with updated content
- rc = fapiPutScomUnderMask(i_target,
- i_scom_addr,
- bar_data,
- bar_data_mask);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_common_write_bar_reg: fapiPutScomUnderMask error (%08X)",
- i_scom_addr);
- break;
- }
- } while(0);
-
- FAPI_DBG("proc_setup_bars_common_write_bar_reg: End");
- return rc;
-}
-
-
-//------------------------------------------------------------------------------
-// function: write L3 BAR attributes (consumed by winkle image creation
-// procedures) specific to enabled local chip
-// non-mirrored/mirrored memory ranges
-// parameters: i_target => chip target
-// i_is_non_mirrored_range => boolean idenitfying range type
-// (true=non-mirrored, false=mirrored)
-// i_addr_range => structure representing chip
-// non-mirrored/mirrored range
-// returns: FAPI_RC_SUCCESS if attribute writes are successful,
-// RC_PROC_SETUP_BARS_SIZE_XLATE_ERR if logical->physical size
-// translation is unsuccessful,
-// else failing return code from attribute/data buffer manipulation
-//------------------------------------------------------------------------------
-fapi::ReturnCode proc_setup_bars_l3_write_local_chip_memory_bar_attr(
- const fapi::Target* i_target,
- const bool i_is_non_mirrored_range,
- const proc_setup_bars_addr_range& i_addr_range)
-{
- // return code
- fapi::ReturnCode rc;
- uint32_t rc_ecmd = 0;
- // BAR1 register data buffer
- ecmdDataBufferBase bar_data(64);
- ecmdDataBufferBase bar_size_data(64);
- uint64_t bar_attr_data;
-
- FAPI_DBG("proc_setup_bars_l3_write_local_chip_memory_bar_attr: Start");
- do
- {
- // previous checking ensures zeroes for all non-implemented bits
- rc_ecmd |= bar_data.setDoubleWord(0, i_addr_range.base_addr);
- rc_ecmd |= bar_data.shiftLeft(L3_BAR12_BASE_ADDR_LEFT_SHIFT_AMOUNT);
-
- // encoded size value for register programming
- std::map<uint64_t, uint64_t>::const_iterator s;
- uint64_t size_xlate;
- // translate size into register encoding
- s = proc_setup_bars_nf_bar_size::xlate_map.find(i_addr_range.size);
- if (s == proc_setup_bars_nf_bar_size::xlate_map.end())
- {
- FAPI_ERR("proc_setup_bars_l3_write_local_chip_memory_bar_attr: Unsupported BAR size 0x%016llX",
- i_addr_range.size);
- const fapi::Target & TARGET = *i_target;
- const uint32_t & SCOM_ADDR = EX_L3_BAR1_REG_0x1001080B;
- const uint64_t & BASE_ADDR = i_addr_range.base_addr;
- const bool & ENABLED = i_addr_range.enabled;
- const uint64_t & SIZE = i_addr_range.size;
- FAPI_SET_HWP_ERROR(rc, RC_PROC_SETUP_BARS_SIZE_XLATE_ERR);
- break;
- }
- size_xlate = s->second;
- rc_ecmd |= bar_size_data.setDoubleWord(0, size_xlate);
- rc_ecmd |= bar_size_data.shiftLeft(63 - L3_BAR12_SIZE_END_BIT);
- rc_ecmd |= bar_data.merge(bar_size_data);
-
- // enable bit only in BAR2
- if (!i_is_non_mirrored_range)
- {
- rc_ecmd |= bar_data.writeBit(L3_BAR2_ENABLE_BIT,
- i_addr_range.enabled ? 1 : 0);
- }
-
- // check buffer manipulation return codes
- if (rc_ecmd)
- {
- FAPI_ERR("proc_setup_bars_l3_write_local_chip_memory_bar_attr: Error 0x%X setting up BAR data buffer",
- rc_ecmd);
- rc.setEcmdError(rc_ecmd);
- break;
- }
-
- // set data for attribute push
- bar_attr_data = bar_data.getDoubleWord(0);
-
- if (i_is_non_mirrored_range)
- {
- // L3 BAR1 (non-mirrored)
- FAPI_DBG("proc_setup_bars_l3_write_local_chip_memory_bar_attr: Setting ATTR_PROC_L3_BAR1_REG = %016llX",
- bar_attr_data);
- rc = FAPI_ATTR_SET(ATTR_PROC_L3_BAR1_REG,
- i_target,
- bar_attr_data);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_l3_write_local_chip_memory_bar_attr: Error setting ATTR_PROC_L3_BAR1_REG");
- break;
- }
- }
- else
- {
- // L3 BAR2 (mirrored)
- FAPI_DBG("proc_setup_bars_l3_write_local_chip_memory_bar_attr: Setting ATTR_PROC_L3_BAR2_REG = %016llX",
- bar_attr_data);
- rc = FAPI_ATTR_SET(ATTR_PROC_L3_BAR2_REG,
- i_target,
- bar_attr_data);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_l3_write_local_chip_memory_bar_attr: Error setting ATTR_PROC_L3_BAR2_REG");
- break;
- }
- }
- } while(0);
-
- FAPI_DBG("proc_setup_bars_l3_write_local_chip_memory_bar_attr: End");
- return rc;
-}
-
-
-//------------------------------------------------------------------------------
-// function: wrapper function to write PCIe BARs specific to enabled local
-// chip non-mirrored/mirrored memory ranges
-// parameters: i_target => chip target
-// i_num_phb => number of PHBs
-// i_non_mirrored_range => structure representing chip non-mirrored
-// address range
-// i_mirrored_range => structure representing chip mirrored
-// address range
-// returns: FAPI_RC_SUCCESS if all register writes are successful,
-// else failing return code from common BAR write function
-//------------------------------------------------------------------------------
-fapi::ReturnCode proc_setup_bars_pcie_write_local_chip_memory_bars(
- const fapi::Target& i_target,
- const uint8_t i_num_phb,
- const proc_setup_bars_addr_range& i_non_mirrored_range,
- const proc_setup_bars_addr_range& i_mirrored_range)
-{
- // return code
- fapi::ReturnCode rc;
-
- FAPI_DBG("proc_setup_bars_pcie_write_local_chip_memory_bars: Start");
- // loop over all units
- for (uint8_t u = 0;
- u < i_num_phb;
- u++)
- {
- if (i_non_mirrored_range.enabled)
- {
- FAPI_DBG("proc_setup_bars_pcie_write_local_chip_memory_bars: Writing PCIe %d Nodal Non-Mirrored BAR register",
- u);
- rc = proc_setup_bars_common_write_bar_reg(
- i_target,
- PROC_SETUP_BARS_PCIE_CHIP_NON_MIRRORED_BAR[u],
- common_nf_scope_bar_reg_def,
- i_non_mirrored_range);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_pcie_write_local_chip_memory_bars: Error from proc_setup_bars_common_write_bar_reg");
- break;
- }
- }
- if (i_mirrored_range.enabled)
- {
- FAPI_DBG("proc_setup_bars_pcie_write_local_chip_memory_bars: Writing PCIe %d Nodal Mirrored BAR register",
- u);
- rc = proc_setup_bars_common_write_bar_reg(
- i_target,
- PROC_SETUP_BARS_PCIE_CHIP_MIRRORED_BAR[u],
- common_nf_scope_bar_reg_def,
- i_mirrored_range);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_pcie_write_local_chip_memory_bars: Error from proc_setup_bars_common_write_bar_reg");
- break;
- }
- }
- }
-
- FAPI_DBG("proc_setup_bars_pcie_write_local_chip_memory_bars: End");
- return rc;
-}
-
-
-//------------------------------------------------------------------------------
-// function: write L3 BAR attributes (consumed by winkle image creation
-// procedures) specific to enabled local node
-// non-mirrored/mirrored memory ranges
-// parameters: i_target => chip target
-// i_is_non_mirrored_range => boolean idenitfying range type
-// (true=non-mirrored, false=mirrored)
-// i_node_addr_range => structure representing node
-// non-mirrored/mirrored range
-// i_chip_addr_range => structure representing chip
-// non-mirrored/mirrored range
-// returns: FAPI_RC_SUCCESS if attribute writes are successful,
-// else failing return code from attribute/data buffer manipulation
-//------------------------------------------------------------------------------
-fapi::ReturnCode proc_setup_bars_l3_write_local_node_memory_bar_attr(
- const fapi::Target* i_target,
- const bool i_is_non_mirrored_range,
- const proc_setup_bars_addr_range& i_node_addr_range,
- const proc_setup_bars_addr_range& i_chip_addr_range)
-{
- // return code
- fapi::ReturnCode rc;
- uint32_t rc_ecmd = 0;
- ecmdDataBufferBase base(64);
- ecmdDataBufferBase diff(64);
- ecmdDataBufferBase mask(64);
- uint64_t mask_attr = 0x0;
-
- FAPI_DBG("proc_setup_bars_l3_write_local_node_memory_bar_attr: Start");
-
- do
- {
- // retrieve mask register attribute
- rc = FAPI_ATTR_GET(ATTR_PROC_L3_BAR_GROUP_MASK_REG,
- i_target,
- mask_attr);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_l3_write_local_node_memory_bar_attr: Error querying ATTR_PROC_L3_BAR_GROUP_MASK_REG");
- break;
- }
- FAPI_DBG("proc_setup_bars_l3_write_local_node_memory_bar_attr: Read ATTR_PROC_L3_BAR_GROUP_MASK_REG = %016llX",
- mask_attr);
- // push current value into data buffer
- rc_ecmd |= mask.setDoubleWord(0, mask_attr);
-
- // set group mask based on first difference between
- // node start/end addresses
- uint32_t first_diff_bit = 0;
- // load base address
- rc_ecmd |= base.setDoubleWord(0, i_node_addr_range.base_addr);
- // load end address
- rc_ecmd |= diff.setDoubleWord(0, i_node_addr_range.end_addr());
- // XOR base/end address
- rc_ecmd |= diff.setXor(base, 0, 64);
-
- // walk range of XOR result over group mask, stop at first 1 found
- bool match_found = false;
- for (first_diff_bit = L3_BAR_GROUP_MASK_RA_DIFF_START_BIT;
- first_diff_bit <= L3_BAR_GROUP_MASK_RA_DIFF_END_BIT;
- first_diff_bit++)
- {
- if (diff.getBit(first_diff_bit))
- {
- match_found = true;
- break;
- }
- }
-
- if (match_found)
- {
- // set all group mask bits to a 1, starting from first bit which
- // was found to be different, to the end of the mask range
- uint32_t mask_set_start_bit = (i_is_non_mirrored_range)?
- L3_BAR_GROUP_MASK_NON_MIRROR_MASK_START_BIT:
- L3_BAR_GROUP_MASK_MIRROR_MASK_START_BIT;
-
- mask_set_start_bit += (first_diff_bit-
- L3_BAR_GROUP_MASK_RA_DIFF_START_BIT);
-
- uint32_t mask_set_num_bits = (i_is_non_mirrored_range)?
- L3_BAR_GROUP_MASK_NON_MIRROR_MASK_END_BIT:
- L3_BAR_GROUP_MASK_MIRROR_MASK_END_BIT;
-
- mask_set_num_bits -= (mask_set_start_bit-1);
-
- rc_ecmd |= mask.setBit(mask_set_start_bit,
- mask_set_num_bits);
- }
-
- // enable bit only for mirorred region
- if (!i_is_non_mirrored_range)
- {
- rc_ecmd |= mask.writeBit(L3_BAR_GROUP_MASK_MIRROR_ENABLE_BIT,
- i_node_addr_range.enabled ? 1 : 0);
- }
-
- // check buffer manipulation return codes
- if (rc_ecmd)
- {
- FAPI_ERR("proc_setup_bars_l3_write_local_node_memory_bar_attr: Error 0x%X setting up BAR mask data buffer",
- rc_ecmd);
- rc.setEcmdError(rc_ecmd);
- break;
- }
-
- // push current data buffer state back into attribute
- mask_attr = mask.getDoubleWord(0);
- FAPI_DBG("proc_setup_bars_l3_write_local_node_memory_bar_attr: Setting ATTR_PROC_L3_BAR_GROUP_MASK_REG = %016llX",
- mask_attr);
- rc = FAPI_ATTR_SET(ATTR_PROC_L3_BAR_GROUP_MASK_REG,
- i_target,
- mask_attr);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_l3_write_local_node_memory_bar_attr: Error setting ATTR_PROC_L3_BAR_GROUP_MASK_REG");
- break;
- }
-
- // if no memory is installed on the local chip, fill the shared
- // BAR address with the node base
- if (!i_chip_addr_range.enabled)
- {
- // clear size mask
- proc_setup_bars_addr_range base_addr_range = i_node_addr_range;
- base_addr_range.size = PROC_SETUP_BARS_SIZE_4_GB;
-
- rc = proc_setup_bars_l3_write_local_chip_memory_bar_attr(
- i_target,
- i_is_non_mirrored_range,
- base_addr_range);
-
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_l3_write_local_node_memory_bar_attr: Error from proc_setup_bars_l3_write_local_chip_memory_bar_attr");
- break;
- }
- }
- } while(0);
-
-
- FAPI_DBG("proc_setup_bars_l3_write_local_node_memory_bar_attr: End");
- return rc;
-}
-
-
-//------------------------------------------------------------------------------
-// function: wrapper function to write PCIe BARs specific to enabled local
-// node non-mirrored/mirrored memory ranges
-// parameters: i_target => chip target
-// i_num_phb => number of PHBs
-// i_non_mirrored_range => structure representing node non-mirrored
-// address range
-// i_mirrored_range => structure representing node mirrored
-// address range
-// returns: FAPI_RC_SUCCESS if all register writes are successful,
-// else failing return code from common BAR write function
-//------------------------------------------------------------------------------
-fapi::ReturnCode proc_setup_bars_pcie_write_local_node_memory_bars(
- const fapi::Target& i_target,
- const uint8_t i_num_phb,
- const proc_setup_bars_addr_range& i_non_mirrored_range,
- const proc_setup_bars_addr_range& i_mirrored_range)
-{
- // return code
- fapi::ReturnCode rc;
-
- FAPI_DBG("proc_setup_bars_pcie_write_local_node_memory_bars: Start");
- // loop over all units
- for (uint8_t u = 0;
- u < i_num_phb;
- u++)
- {
- if (i_non_mirrored_range.enabled)
- {
- FAPI_DBG("proc_setup_bars_pcie_write_local_node_memory_bars: Writing PCIe %d Group Non-Mirrored BAR register",
- u);
- rc = proc_setup_bars_common_write_bar_reg(
- i_target,
- PROC_SETUP_BARS_PCIE_NODE_NON_MIRRORED_BAR[u],
- common_nf_scope_bar_reg_def,
- i_non_mirrored_range);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_pcie_write_local_node_memory_bars: Error from proc_setup_bars_common_write_bar_reg");
- break;
- }
- }
- if (i_mirrored_range.enabled)
- {
- FAPI_DBG("proc_setup_bars_pcie_write_local_node_memory_bars: Writing PCIe %d Group Mirrored BAR register",
- u);
- rc = proc_setup_bars_common_write_bar_reg(
- i_target,
- PROC_SETUP_BARS_PCIE_NODE_MIRRORED_BAR[u],
- common_nf_scope_bar_reg_def,
- i_mirrored_range);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_pcie_write_local_node_memory_bars: Error from proc_setup_bars_common_write_bar_reg");
- break;
- }
- }
- }
-
- FAPI_DBG("proc_setup_bars_pcie_write_local_node_memory_bars: End");
- return rc;
-}
-
-
-//------------------------------------------------------------------------------
-// function: wrapper function to write PCIe BARs specific to enabled local
-// chip near/far foreign memory ranges
-// NOTE: only links which are marked for processing will be acted on
-// parameters: i_target => chip target
-// i_num_phb => number of PHBs
-// i_process_links => array of boolean values dictating which
-// links should be acted on (one per link)
-// i_foreign_near_ranges => array of structures representing
-// near foreign address range (one per link)
-// i_foreign_far_ranges => array of structures representing
-// far foreign address range (one per link)
-// returns: FAPI_RC_SUCCESS if all register writes are successful,
-// else failing return code from common BAR write function
-//------------------------------------------------------------------------------
-fapi::ReturnCode proc_setup_bars_pcie_write_foreign_memory_bars(
- const fapi::Target& i_target,
- const uint8_t i_num_phb,
- const bool i_process_links[PROC_FAB_SMP_NUM_F_LINKS],
- const proc_setup_bars_addr_range i_foreign_near_ranges[PROC_FAB_SMP_NUM_F_LINKS],
- const proc_setup_bars_addr_range i_foreign_far_ranges[PROC_FAB_SMP_NUM_F_LINKS])
-{
- // return code
- fapi::ReturnCode rc;
-
- FAPI_DBG("proc_setup_bars_pcie_write_foreign_memory_bars: Start");
-
- // loop over all units
- for (uint8_t u = 0;
- (u < i_num_phb) && (rc.ok());
- u++)
- {
- // process ranges
- for (uint8_t r = 0;
- (r < PROC_FAB_SMP_NUM_F_LINKS) && (rc.ok());
- r++)
- {
- if (i_foreign_near_ranges[r].enabled && i_process_links[r])
- {
- FAPI_DBG("proc_setup_bars_pcie_write_foreign_memory_bars: Writing PCIe %d Foreign F%d Near BAR register",
- u, r);
- rc = proc_setup_bars_common_write_bar_reg(
- i_target,
- PROC_SETUP_BARS_PCIE_FOREIGN_NEAR_BAR[u][r],
- common_f_scope_bar_reg_def,
- i_foreign_near_ranges[r]);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_pcie_write_foreign_memory_bars: Error from proc_setup_bars_common_write_bar_reg");
- break;
- }
- }
- if (i_foreign_far_ranges[r].enabled && i_process_links[r])
- {
- FAPI_DBG("proc_setup_bars_pcie_write_foreign_memory_bars: Writing PCIe %d Foreign F%d Far BAR register",
- u, r);
- rc = proc_setup_bars_common_write_bar_reg(
- i_target,
- PROC_SETUP_BARS_PCIE_FOREIGN_FAR_BAR[u][r],
- common_f_scope_bar_reg_def,
- i_foreign_far_ranges[r]);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_pcie_write_foreign_memory_bars: Error from proc_setup_bars_common_write_bar_reg");
- break;
- }
- }
- }
- }
-
- FAPI_DBG("proc_setup_bars_pcie_write_foreign_memory_bars: End");
- return rc;
-}
-
-
-//------------------------------------------------------------------------------
-// function: wrapper function to write enabled PCIe IO BARs
-// parameters: i_target => chip target
-// i_num_phb => number of PHBs
-// io_addr_ranges => 2D array of address range structures
-// encapsulating attribute values
-// (first dimension = unit, second dimension =
-// links per unit)
-// returns: FAPI_RC_SUCCESS if all register writes are successful,
-// else failing return code from common BAR write function or
-// data buffer manipulation
-//------------------------------------------------------------------------------
-fapi::ReturnCode proc_setup_bars_pcie_write_io_bar_regs(
- const fapi::Target& i_target,
- const uint8_t i_num_phb,
- const proc_setup_bars_addr_range addr_ranges[PROC_SETUP_BARS_PCIE_NUM_UNITS][PROC_SETUP_BARS_PCIE_RANGES_PER_UNIT])
-{
- // return code
- fapi::ReturnCode rc;
- uint32_t rc_ecmd = 0;
-
- FAPI_DBG("proc_setup_bars_pcie_write_io_bar_regs: Start");
- // loop over all units
- for (uint8_t u = 0;
- u < i_num_phb;
- u++)
- {
- // enable bit/mask bit per range
- ecmdDataBufferBase enable_data(64);
- ecmdDataBufferBase enable_mask(64);
-
- // loop over all ranges
- for (uint8_t r = 0;
- r < PROC_SETUP_BARS_PCIE_RANGES_PER_UNIT;
- r++)
- {
- if (addr_ranges[u][r].enabled)
- {
- // MMIO range (BAR + mask)
- if (PROC_SETUP_BARS_PCIE_RANGE_TYPE_MMIO[r])
- {
- // write BAR register
- FAPI_DBG("proc_setup_bars_pcie_write_io_bar_regs: Writing PCIe %d MMIO BAR%d register",
- u, r);
- rc = proc_setup_bars_common_write_bar_reg(
- i_target,
- PROC_SETUP_BARS_PCIE_BAR_REGS_MMIO[u][r],
- pcie_mmio_bar_reg_def,
- addr_ranges[u][r]);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_pcie_write_io_bar_regs: Error from proc_setup_bars_common_write_bar_reg");
- break;
- }
-
- // write BAR mask register
- FAPI_DBG("proc_setup_bars_pcie_write_io_bar_regs: Writing PCIe %d MMIO BAR%d Mask register",
- u, r);
- rc = proc_setup_bars_common_write_bar_reg(
- i_target,
- PROC_SETUP_BARS_PCIE_BAR_MASK_REGS_MMIO[u][r],
- pcie_mmio_bar_mask_reg_def,
- addr_ranges[u][r]);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_pcie_write_io_bar_regs: Error from proc_setup_bars_common_write_bar_reg");
- break;
- }
- }
- // PHB range (only BAR, mask is implied)
- else
- {
- for (uint8_t i = 0;
- i < PROC_SETUP_BARS_PCIE_REGS_PER_PHB_RANGE;
- i++)
- {
- FAPI_DBG("proc_setup_bars_pcie_write_io_bar_regs: Writing PCIe %d PHB BAR (%s) register",
- u, (i == 0)?("Nest"):("PCIe"));
- rc = proc_setup_bars_common_write_bar_reg(
- i_target,
- PROC_SETUP_BARS_PCIE_BAR_REGS_PHB[u][i],
- pcie_phb_bar_reg_def,
- addr_ranges[u][r]);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_pcie_write_io_bar_regs: Error from proc_setup_bars_common_write_bar_reg");
- break;
- }
- }
- if (!rc.ok())
- {
- break;
- }
- }
- // set enable bit data/mask
- rc_ecmd |= enable_data.setBit(
- PROC_SETUP_BARS_PCIE_BAR_EN_BIT[r]);
- rc_ecmd |= enable_mask.setBit(
- PROC_SETUP_BARS_PCIE_BAR_EN_BIT[r]);
- // check buffer manipulation return codes
- if (rc_ecmd)
- {
- FAPI_ERR("proc_setup_bars_pcie_write_io_bar_regs: Error 0x%X setting up BAR Enable data buffer",
- rc_ecmd);
- rc.setEcmdError(rc_ecmd);
- break;
- }
- }
- }
- if (!rc.ok())
- {
- break;
- }
-
- if (enable_data.getDoubleWord(0) != 0x0ULL)
- {
- // set static data field with BAR enable bits
- proc_setup_bars_bar_reg_def pcie_bar_en_reg_def =
- {
- false, // base: other reg
- PROC_SETUP_BARS_SHIFT_NONE,
- 0,
- 0,
- 0,
- false, // enable: static data
- 0,
- false, // size: other reg
- 0,
- 0,
- NULL,
- enable_data.getDoubleWord(0),
- enable_mask.getDoubleWord(0)
- };
- proc_setup_bars_addr_range pcie_bar_en_dummy_range;
-
- // write BAR enable register (do last, when all unit BAR content is set)
- rc = proc_setup_bars_common_write_bar_reg(
- i_target,
- PROC_SETUP_BARS_PCIE_BAR_EN_REGS[u],
- pcie_bar_en_reg_def,
- pcie_bar_en_dummy_range);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_pcie_write_io_bar_regs: Error from proc_setup_bars_common_write_bar_reg");
- break;
- }
-
- // if enabling BARs, pull ETU out of reset
- ecmdDataBufferBase etu_reset(64);
- rc = fapiPutScom(i_target,
- PROC_SETUP_BARS_PCIE_ETU_RESET_REGS[u],
- etu_reset);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_pcie_write_io_bar_regs: Error from fapiPutScom (PCIE%d_ETU_RESET_0x%08X)",
- u, PROC_SETUP_BARS_PCIE_ETU_RESET_REGS[u]);
- break;
- }
- }
- }
-
- FAPI_DBG("proc_setup_bars_pcie_write_io_bar_regs: End");
- return rc;
-}
-
-
-//------------------------------------------------------------------------------
-// function: wrapper function to write all BARs tied to local chip region
-// (non-mirrored/mirrored/MMIO regions)
-// parameters: i_smp_chip => structure encapsulating single chip in SMP topology
-// returns: FAPI_RC_SUCCESS if all register writes are successful,
-// else failing return code from common BAR write function
-//------------------------------------------------------------------------------
-//
-// Local chip region BARs:
-//
-// PSI/FSP
-// PSI Bridge BAR (PSI_BRIDGE_BAR_0x0201090A)
-// FSP BAR (PSI_FSP_BAR_0x0201090B)
-// FSP Memory Mask (PSI_FSP_MMR_0x0201090C)
-// FSP MMIO Mask (PSI_BRIDGE_STATUS_CTL_0x0201090E)
-//
-// INTP
-// INTP BAR (ICP_BAR_0x020109CA)
-//
-// L3 (transmitted via attributes)
-// L3 BAR1 (Non-Mirrored) (EX_L3_BAR1_0x1001080B)
-// L3 BAR2 (Mirrored) (EX_L3_BAR2_0x10010813)
-//
-// NX
-// NX MMIO BAR (NX_MMIO_BAR_0x0201308D)
-// NX CXA0 Nodal Non-Mirrored BAR (NX_APC_NODAL_BAR0_0x0201302D)
-// NX CXA1 Nodal Non-Mirrored BAR (NX_CXA1_APC_NODAL_BAR0_0x020131AD)
-// NX Nodal Non-Mirrored BAR (NX_NODAL_BAR0_0x02013095)
-// NX CXA0 Nodal Mirrored BAR (NX_APC_NODAL_BAR1_0x0201302E)
-// NX CXA1 Nodal Mirrored BAR (NX_CXA1_APC_NODAL_BAR1_0x020131AE)
-// NX Nodal Mirrored BAR (NX_NODAL_BAR1_0x02013096)
-//
-// NPU
-// NPU0 Nodal Non-Mirrored BAR (NPU0_NODAL_BAR0_0x08013C04)
-// NPU0 Nodal Mirrored BAR (NPU0_NODAL_BAR1_0x08013C05)
-// NPU1 Nodal Non-Mirrored BAR (NPU1_NODAL_BAR0_0x08013C44)
-// NPU1 Nodal Mirrored BAR (NPU1_NODAL_BAR1_0x08013C45)
-// NPU2 Nodal Non-Mirrored BAR (NPU2_NODAL_BAR0_0x08013D04)
-// NPU2 Nodal Mirrored BAR (NPU2_NODAL_BAR1_0x08013D05)
-// NPU3 Nodal Non-Mirrored BAR (NPU3_NODAL_BAR0_0x08013D44)
-// NPU3 Nodal Mirrored BAR (NPU3_NODAL_BAR1_0x08013D45)
-//
-// NPU0 MMIO BAR0 (NPU0_MMIO_BAR0_0x08013C02)
-// NPU0 MMIO BAR1 (NPU0_MMIO_BAR1_0x08013C03)
-// NPU1 MMIO BAR0 (NPU1_MMIO_BAR0_0x08013C42)
-// NPU1 MMIO BAR1 (NPU1_MMIO_BAR1_0x08013C43)
-// NPU2 MMIO BAR0 (NPU2_MMIO_BAR0_0x08013D02)
-// NPU2 MMIO BAR1 (NPU2_MMIO_BAR1_0x08013D03)
-// NPU3 MMIO BAR0 (NPU3_MMIO_BAR0_0x08013D42)
-// NPU3 MMIO BAR1 (NPU3_MMIO_BAR1_0x08013D43)
-//
-// HCA
-// HCA EN BAR and Range Register (HCA_EN_BAR_0x0201094A)
-// HCA EN Mirror BAR and Range Register (HCA_EN_MIRROR_BAR_0x02010953)
-// HCA EH BAR and Range Register (HCA_EH_BAR_0x0201098A)
-// HCA EH Mirror BAR and Range Register (HCA_EH_MIRROR_BAR_0x02010993)
-//
-// MCD
-// MCD Configuration 0 (Non-Mirrored) (MCD_CN00_0x0201340C)
-// MCD Configuration 1 (Mirrored) (MCD_CN01_0x0201340D)
-//
-// PCIe
-// PCIE0 Nodal Non-Mirrored BAR (PCIE0_NODAL_BAR0_0x02012010)
-// PCIE0 Nodal Mirrored BAR (PCIE0_NODAL_BAR1_0x02012011)
-// PCIE0 IO BAR0 (PCIE0_IO_BAR0_0x02012040)
-// PCIE0 IO BAR0 Mask (PCIE0_IO_MASK0_0x02012043)
-// PCIE0 IO BAR1 (PCIE0_IO_BAR1_0x02012041)
-// PCIE0 IO BAR1 Mask (PCIE0_IO_MASK1_0x02012044)
-// PCIE0 IO BAR2 (PCIE0_IO_BAR2_0x02012042)
-// PCIE0 IO BAR Enable (PCIE0_IO_BAR_EN_0x02012045)
-//
-// PCIE1 Nodal Non-Mirrored BAR (PCIE1_NODAL_BAR0_0x02012410)
-// PCIE1 Nodal Mirrored BAR (PCIE1_NODAL_BAR1_0x02012411)
-// PCIE1_IO BAR0 (PCIE1_IO_BAR0_0x02012440)
-// PCIE1_IO BAR0 Mask (PCIE1_IO_MASK0_0x02012443)
-// PCIE1_IO BAR1 (PCIE1_IO_BAR1_0x02012441)
-// PCIE1_IO BAR1 Mask (PCIE1_IO_MASK1_0x02012444)
-// PCIE1_IO BAR2 (PCIE1_IO_BAR2_0x02012442)
-// PCIE1_IO BAR Enable (PCIE1_IO_BAR_EN_0x02012445)
-//
-// PCIE2 Nodal Non-Mirrored BAR (PCIE2_NODAL_BAR0_0x02012810)
-// PCIE2 Nodal Mirrored BAR (PCIE2_NODAL_BAR1_0x02012811)
-// PCIE2 IO BAR0 (PCIE2_IO_BAR0_0x02012840)
-// PCIE2 IO BAR0 Mask (PCIE2_IO_MASK0_0x02012843)
-// PCIE2 IO BAR1 (PCIE2_IO_BAR1_0x02012841)
-// PCIE2 IO BAR1 Mask (PCIE2_IO_MASK1_0x02012844)
-// PCIE2 IO BAR2 (PCIE2_IO_BAR2_0x02012842)
-// PCIE2 IO BAR Enable (PCIE2_IO_BAR_EN_0x02012845)
-//
-// PCIE3 Nodal Non-Mirrored BAR (PCIE3_NODAL_BAR0_0x02012C10)
-// PCIE3 Nodal Mirrored BAR (PCIE3_NODAL_BAR1_0x02012C11)
-// PCIE3 IO BAR0 (PCIE3_IO_BAR0_0x02012C40)
-// PCIE3 IO BAR0 Mask (PCIE3_IO_MASK0_0x02012C43)
-// PCIE3 IO BAR1 (PCIE3_IO_BAR1_0x02012C41)
-// PCIE3 IO BAR1 Mask (PCIE3_IO_MASK1_0x02012C44)
-// PCIE3 IO BAR2 (PCIE3_IO_BAR2_0x02012C42)
-// PCIE3 IO BAR Enable (PCIE3_IO_BAR_EN_0x02012C45)
-//
-//------------------------------------------------------------------------------
-fapi::ReturnCode
-proc_setup_bars_write_local_chip_region_bars(
- proc_setup_bars_smp_chip& i_smp_chip)
-{
- // return code
- fapi::ReturnCode rc;
-
- FAPI_DBG("proc_setup_bars_write_local_chip_region_bars: Start");
-
- do
- {
- // PSI
- if (i_smp_chip.psi_range.enabled)
- {
- FAPI_DBG("proc_setup_bars_write_local_chip_region_bars: Writing PSI Bridge BAR register");
- rc = proc_setup_bars_common_write_bar_reg(
- i_smp_chip.chip->this_chip,
- PSI_BRIDGE_BAR_0x0201090A,
- psi_bridge_bar_reg_def,
- i_smp_chip.psi_range);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_local_chip_region_bars: Error from proc_setup_bars_common_write_bar_reg");
- break;
- }
- }
-
- // FSP
- if (i_smp_chip.fsp_range.enabled)
- {
- FAPI_DBG("proc_setup_bars_write_local_chip_region_bars: Writing FSP BAR register");
- rc = proc_setup_bars_common_write_bar_reg(
- i_smp_chip.chip->this_chip,
- PSI_FSP_BAR_0x0201090B,
- fsp_bar_reg_def,
- i_smp_chip.fsp_range);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_local_chip_region_bars: Error from proc_setup_bars_common_write_bar_reg");
- break;
- }
-
- FAPI_DBG("proc_setup_bars_write_local_chip_region_bars: Writing FSP Memory Mask register");
- rc = proc_setup_bars_common_write_bar_reg(
- i_smp_chip.chip->this_chip,
- PSI_FSP_MMR_0x0201090C,
- fsp_bar_mask_reg_def,
- i_smp_chip.fsp_range);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_local_chip_region_bars: Error from proc_setup_bars_common_write_bar_reg");
- break;
- }
-
- FAPI_DBG("proc_setup_bars_write_local_chip_region_bars: Writing PSI Bridge Status Control register (FSP BAR enable)");
- rc = proc_setup_bars_common_write_bar_reg(
- i_smp_chip.chip->this_chip,
- PSI_BRIDGE_STATUS_CTL_0x0201090E,
- fsp_bar_en_reg_def,
- i_smp_chip.fsp_range);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_local_chip_region_bars: Error from proc_setup_bars_common_write_bar_reg");
- break;
- }
-
- if (i_smp_chip.fsp_mmio_mask_range.enabled)
- {
- FAPI_DBG("proc_setup_bars_write_local_chip_region_bars: Writing PSI Bridge Status Control register (FSP MMIO mask)");
- rc = proc_setup_bars_common_write_bar_reg(
- i_smp_chip.chip->this_chip,
- PSI_BRIDGE_STATUS_CTL_0x0201090E,
- fsp_mmio_mask_reg_def,
- i_smp_chip.fsp_mmio_mask_range);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_local_chip_region_bars: Error from proc_setup_bars_common_write_bar_reg");
- break;
- }
- }
- }
-
- // INTP
- if (i_smp_chip.intp_range.enabled)
- {
- FAPI_DBG("proc_setup_bars_write_local_chip_region_bars: Writing INTP BAR register");
- rc = proc_setup_bars_common_write_bar_reg(
- i_smp_chip.chip->this_chip,
- ICP_BAR_0x020109CA,
- intp_bar_reg_def,
- i_smp_chip.intp_range);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_local_chip_region_bars: Error from proc_setup_bars_common_write_bar_reg");
- break;
- }
- }
-
- // NX (MMIO)
- if (i_smp_chip.nx_mmio_range.enabled && i_smp_chip.nx_enabled)
- {
- FAPI_DBG("proc_setup_bars_write_local_chip_region_bars: Writing NX MMIO BAR register");
- rc = proc_setup_bars_common_write_bar_reg(
- i_smp_chip.chip->this_chip,
- NX_MMIO_BAR_0x0201308D,
- nx_mmio_bar_reg_def,
- i_smp_chip.nx_mmio_range);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_local_chip_region_bars: Error from proc_setup_bars_common_write_bar_reg");
- break;
- }
-
- FAPI_DBG("proc_setup_bars_write_local_chip_region_bars: Writing AS MMIO BAR register");
- rc = proc_setup_bars_common_write_bar_reg(
- i_smp_chip.chip->this_chip,
- NX_AS_MMIO_BAR_0x0201309E,
- as_mmio_bar_reg_def,
- i_smp_chip.as_mmio_range);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_local_chip_region_bars: Error from proc_setup_bars_common_write_bar_reg");
- break;
- }
- }
-
- // NX (non-mirrored)
- if (i_smp_chip.non_mirrored_range.enabled && i_smp_chip.nx_enabled)
- {
- FAPI_DBG("proc_setup_bars_write_local_chip_region_bars: Writing NX CXA0 APC Nodal Non-Mirrored BAR register");
- rc = proc_setup_bars_common_write_bar_reg(
- i_smp_chip.chip->this_chip,
- NX_APC_NODAL_BAR0_0x0201302D,
- common_nf_scope_bar_reg_def,
- i_smp_chip.non_mirrored_range);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_local_chip_region_bars: Error from proc_setup_bars_common_write_bar_reg");
- break;
- }
-
- if (i_smp_chip.dual_capp_present)
- {
- FAPI_DBG("proc_setup_bars_write_local_chip_region_bars: Writing NX CXA1 APC Nodal Non-Mirrored BAR register");
- rc = proc_setup_bars_common_write_bar_reg(
- i_smp_chip.chip->this_chip,
- NX_CXA1_APC_NODAL_BAR0_0x020131AD,
- common_nf_scope_bar_reg_def,
- i_smp_chip.non_mirrored_range);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_local_chip_region_bars: Error from proc_setup_bars_common_write_bar_reg");
- break;
- }
- }
-
- FAPI_DBG("proc_setup_bars_write_local_chip_region_bars: Writing NX Nodal Non-Mirrored BAR register");
- rc = proc_setup_bars_common_write_bar_reg(
- i_smp_chip.chip->this_chip,
- NX_NODAL_BAR0_0x02013095,
- common_nf_scope_bar_reg_def,
- i_smp_chip.non_mirrored_range);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_local_chip_region_bars: Error from proc_setup_bars_common_write_bar_reg");
- break;
- }
- }
-
- // NX (mirrored)
- if (i_smp_chip.mirrored_range.enabled && i_smp_chip.nx_enabled)
- {
- FAPI_DBG("proc_setup_bars_write_local_chip_region_bars: Writing NX CXA0 APC Nodal Mirrored BAR register");
- rc = proc_setup_bars_common_write_bar_reg(
- i_smp_chip.chip->this_chip,
- NX_APC_NODAL_BAR1_0x0201302E,
- common_nf_scope_bar_reg_def,
- i_smp_chip.mirrored_range);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_local_chip_region_bars: Error from proc_setup_bars_common_write_bar_reg");
- break;
- }
-
- if (i_smp_chip.dual_capp_present)
- {
- FAPI_DBG("proc_setup_bars_write_local_chip_region_bars: Writing NX CXA1 APC Nodal Mirrored BAR register");
- rc = proc_setup_bars_common_write_bar_reg(
- i_smp_chip.chip->this_chip,
- NX_CXA1_APC_NODAL_BAR1_0x020131AE,
- common_nf_scope_bar_reg_def,
- i_smp_chip.mirrored_range);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_local_chip_region_bars: Error from proc_setup_bars_common_write_bar_reg");
- break;
- }
- }
-
- FAPI_DBG("proc_setup_bars_write_local_chip_region_bars: Writing NX Nodal Mirrored BAR register");
- rc = proc_setup_bars_common_write_bar_reg(
- i_smp_chip.chip->this_chip,
- NX_NODAL_BAR1_0x02013096,
- common_nf_scope_bar_reg_def,
- i_smp_chip.mirrored_range);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_local_chip_region_bars: Error from proc_setup_bars_common_write_bar_reg");
- break;
- }
- }
-
- // NPU (non-mirrored)
- if (i_smp_chip.non_mirrored_range.enabled && i_smp_chip.nv_present)
- {
- for (uint8_t u = 0; u < PROC_SETUP_BARS_NPU_NUM_UNITS; u++)
- {
- FAPI_DBG("proc_setup_bars_write_local_chip_region_bars: Writing NPU%d Nodal Non-Mirrored BAR register", u);
- rc = proc_setup_bars_common_write_bar_reg(
- i_smp_chip.chip->this_chip,
- PROC_SETUP_BARS_NPU_CHIP_NON_MIRRORED_BAR[u],
- common_nf_scope_bar_reg_def,
- i_smp_chip.non_mirrored_range);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_local_chip_region_bars: Error from proc_setup_bars_common_write_bar_reg");
- break;
- }
- }
- if (!rc.ok())
- {
- break;
- }
- }
-
- // NPU (mirrored)
- if (i_smp_chip.mirrored_range.enabled && i_smp_chip.nv_present)
- {
- for (uint8_t u = 0; u < PROC_SETUP_BARS_NPU_NUM_UNITS; u++)
- {
- FAPI_DBG("proc_setup_bars_write_local_chip_region_bars: Writing NPU%d Nodal Mirrored BAR register", u);
- rc = proc_setup_bars_common_write_bar_reg(
- i_smp_chip.chip->this_chip,
- PROC_SETUP_BARS_NPU_CHIP_MIRRORED_BAR[u],
- common_nf_scope_bar_reg_def,
- i_smp_chip.mirrored_range);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_local_chip_region_bars: Error from proc_setup_bars_common_write_bar_reg");
- break;
- }
- }
- if (!rc.ok())
- {
- break;
- }
- }
-
- // NPU (MMIO)
- if (i_smp_chip.nv_present)
- {
- for (uint8_t u = 0; (u < PROC_SETUP_BARS_NPU_NUM_UNITS); u++)
- {
- for (uint8_t r = 0; (r < PROC_SETUP_BARS_NPU_MMIO_RANGES_PER_UNIT); r++)
- {
- FAPI_DBG("proc_setup_bars_write_local_chip_region_bars: Writing NPU%d MMIO BAR%d register", u, r);
- rc = proc_setup_bars_common_write_bar_reg(
- i_smp_chip.chip->this_chip,
- PROC_SETUP_BARS_NPU_MMIO_BAR[u][r],
- npu_mmio_bar_reg_def,
- i_smp_chip.npu_mmio_ranges[u][r]);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_local_chip_region_bars: Error from proc_setup_bars_common_write_bar_reg");
- break;
- }
- }
- if (!rc.ok())
- {
- break;
- }
- }
- if (!rc.ok())
- {
- break;
- }
- }
-
- // HCA (non-mirrored)
- if (i_smp_chip.non_mirrored_range.enabled)
- {
- FAPI_DBG("proc_setup_bars_write_local_chip_region_bars: Writing HCA EN BAR and Range (Non-Mirrored) register");
- rc = proc_setup_bars_common_write_bar_reg(
- i_smp_chip.chip->this_chip,
- HCA_EN_BAR_0x0201094A,
- hca_nm_bar_reg_def,
- i_smp_chip.non_mirrored_range);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_local_chip_region_bars: Error from proc_setup_bars_common_write_bar_reg");
- break;
- }
-
- FAPI_DBG("proc_setup_bars_write_local_chip_region_bars: Writing HCA EH BAR and Range (Non-Mirrored) register");
- rc = proc_setup_bars_common_write_bar_reg(
- i_smp_chip.chip->this_chip,
- HCA_EH_BAR_0x0201098A,
- hca_nm_bar_reg_def,
- i_smp_chip.non_mirrored_range);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_local_chip_region_bars: Error from proc_setup_bars_common_write_bar_reg");
- break;
- }
- }
-
- // HCA (mirrored)
- if (i_smp_chip.mirrored_range.enabled)
- {
- FAPI_DBG("proc_setup_bars_write_local_chip_region_bars: Writing HCA EN Mirror BAR and Range (Mirrored) register");
- rc = proc_setup_bars_common_write_bar_reg(
- i_smp_chip.chip->this_chip,
- HCA_EN_MIRROR_BAR_0x02010953,
- hca_m_bar_reg_def,
- i_smp_chip.mirrored_range);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_local_chip_region_bars: Error from proc_setup_bars_common_write_bar_reg");
- break;
- }
-
- FAPI_DBG("proc_setup_bars_write_local_chip_region_bars: Writing HCA EH Mirror BAR and Range (Mirrored) register");
- rc = proc_setup_bars_common_write_bar_reg(
- i_smp_chip.chip->this_chip,
- HCA_EH_MIRROR_BAR_0x02010993,
- hca_m_bar_reg_def,
- i_smp_chip.mirrored_range);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_local_chip_region_bars: Error from proc_setup_bars_common_write_bar_reg");
- break;
- }
- }
-
- // MCD (non-mirrored)
- if (i_smp_chip.non_mirrored_range.enabled)
- {
- FAPI_DBG("proc_setup_bars_write_local_chip_region_bars: Writing MCD Configuration 0 (Non-Mirrored) register");
- rc = proc_setup_bars_common_write_bar_reg(
- i_smp_chip.chip->this_chip,
- MCD_CN00_0x0201340C,
- mcd_nf_bar_reg_def,
- i_smp_chip.non_mirrored_range);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_local_chip_region_bars: Error from proc_setup_bars_common_write_bar_reg");
- break;
- }
- }
-
- // MCD (mirrored)
- if (i_smp_chip.mirrored_range.enabled)
- {
- FAPI_DBG("proc_setup_bars_write_local_chip_region_bars: Writing MCD Configuration 1 (Mirrored) register");
- rc = proc_setup_bars_common_write_bar_reg(
- i_smp_chip.chip->this_chip,
- MCD_CN01_0x0201340D,
- mcd_nf_bar_reg_def,
- i_smp_chip.mirrored_range);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_local_chip_region_bars: Error from proc_setup_bars_common_write_bar_reg");
- break;
- }
- }
-
- // L3 (non-mirrored)
- if (i_smp_chip.non_mirrored_range.enabled)
- {
- FAPI_DBG("proc_setup_bars_write_local_chip_region_bars: Writing L3 BAR1 (Non-Mirrored) attribute");
- rc = proc_setup_bars_l3_write_local_chip_memory_bar_attr(
- &(i_smp_chip.chip->this_chip),
- true,
- i_smp_chip.non_mirrored_range);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_local_chip_region_bars: Error from proc_setup_bars_l3_write_local_chip_memory_bar_attr");
- break;
- }
- }
-
- // L3 (mirrored)
- if (i_smp_chip.mirrored_range.enabled)
- {
- FAPI_DBG("proc_setup_bars_write_local_chip_region_bars: Writing L3 BAR2 (Mirrored) attribute");
- rc = proc_setup_bars_l3_write_local_chip_memory_bar_attr(
- &(i_smp_chip.chip->this_chip),
- false,
- i_smp_chip.mirrored_range);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_local_chip_region_bars: Error from proc_setup_bars_l3_write_local_chip_memory_bar_attr");
- break;
- }
- }
-
- // PCIe (non-mirrored/mirrored)
- if (i_smp_chip.pcie_enabled)
- {
- rc = proc_setup_bars_pcie_write_local_chip_memory_bars(
- i_smp_chip.chip->this_chip,
- i_smp_chip.num_phb,
- i_smp_chip.non_mirrored_range,
- i_smp_chip.mirrored_range);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_local_chip_region_bars: Error from proc_setup_bars_pcie_write_local_chip_memory_bars");
- break;
- }
- }
-
- // PCIe (IO)
- if (i_smp_chip.pcie_enabled)
- {
- rc = proc_setup_bars_pcie_write_io_bar_regs(
- i_smp_chip.chip->this_chip,
- i_smp_chip.num_phb,
- i_smp_chip.pcie_ranges);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_local_chip_region_bars: Error from proc_setup_bars_pcie_write_io_bar_regs");
- break;
- }
- }
- } while(0);
-
- FAPI_DBG("proc_setup_bars_write_local_chip_region_bars: End");
- return rc;
-}
-
-
-//------------------------------------------------------------------------------
-// function: wrapper function to write all BARs tied to local node region
-// (non-mirrored/mirrored regions)
-// parameters: i_smp_chip => structure encapsulating single chip in SMP topology
-// i_smp_node => structure encapsulating node which this chip
-// resides in
-// returns: FAPI_RC_SUCCESS if all register writes are successful,
-// else failing return code from common BAR write function
-//------------------------------------------------------------------------------
-//
-// Local node region BARs:
-//
-// L3 (transmitted via attributes)
-// L3 BAR Group Mask (EX_L3_BAR_GROUP_MASK_0x10010816)
-//
-// NX
-// NX CXA0 Group Non-Mirorred BAR (NX_APC_GROUP_BAR0_0x0201302F)
-// NX CXA1 Group Non-Mirorred BAR (NX_CXA1_APC_GROUP_BAR0_0x020131AF)
-// NX Group Non-Mirorred BAR (NX_GROUP_BAR0_0x02013097)
-// NX CXA0 Group Mirrored BAR (NX_APC_GROUP_BAR1_0x02013030)
-// NX CXA1 Group Mirrored BAR (NX_CXA1_APC_GROUP_BAR1_0x020131B0)
-// NX Group Mirrored BAR (NX_GROUP_BAR1_0x02013098)
-//
-// NPU
-// NPU0 Group Non-Mirrored BAR (NPU0_GROUP_BAR0_0x08013C06)
-// NPU0 Group Mirrored BAR (NPU0_GROUP_BAR1_0x08013C07)
-// NPU1 Group Non-Mirrored BAR (NPU1_GROUP_BAR0_0x08013C46)
-// NPU1 Group Mirrored BAR (NPU1_GROUP_BAR1_0x08013C47)
-// NPU2 Group Non-Mirrored BAR (NPU2_GROUP_BAR0_0x08013D06)
-// NPU2 Group Mirrored BAR (NPU2_GROUP_BAR1_0x08013D07)
-// NPU3 Group Non-Mirrored BAR (NPU3_GROUP_BAR0_0x08013D46)
-// NPU3 Group Mirrored BAR (NPU3_GROUP_BAR1_0x08013D47)
-//
-// PCIe
-// PCIE0 Group Non-Mirrored BAR (PCIE0_GROUP_BAR0_0x02012012)
-// PCIE0 Group Mirrored BAR (PCIE0_GROUP_BAR1_0x02012013)
-//
-// PCIE1 Group Non-Mirrored BAR (PCIE1_GROUP_BAR0_0x02012412)
-// PCIE1 Group Mirrored BAR (PCIE1_GROUP_BAR1_0x02012413)
-//
-// PCIE2 Group Non-Mirrored BAR (PCIE2_GROUP_BAR0_0x02012812)
-// PCIE2 Group Mirrored BAR (PCIE2_GROUP_BAR1_0x02012813)
-//
-// PCIE3 Group Non-Mirrored BAR (PCIE3_GROUP_BAR0_0x02012C12)
-// PCIE3 Group Mirrored BAR (PCIE3_GROUP_BAR1_0x02012C13)
-//
-//------------------------------------------------------------------------------
-fapi::ReturnCode
-proc_setup_bars_write_local_node_region_bars(
- proc_setup_bars_smp_chip& i_smp_chip,
- proc_setup_bars_smp_node& i_smp_node)
-{
- // return code
- fapi::ReturnCode rc;
-
- FAPI_DBG("proc_setup_bars_write_local_node_region_bars: Start");
-
- // set non-mirrored/mirrored ranges based on group=chip EC feature attribute
- proc_setup_bars_addr_range non_mirrored_range =
- ((i_smp_chip.init_group_as_chip)?(i_smp_chip.non_mirrored_range):(i_smp_node.non_mirrored_range));
- proc_setup_bars_addr_range mirrored_range =
- ((i_smp_chip.init_group_as_chip)?(i_smp_chip.mirrored_range):(i_smp_node.mirrored_range));
-
- do
- {
- // NX (non-mirrored)
- if (non_mirrored_range.enabled && i_smp_chip.nx_enabled)
- {
- FAPI_DBG("proc_setup_bars_write_local_node_region_bars: Writing NX CXA0 APC Group Non-Mirrored BAR register");
- rc = proc_setup_bars_common_write_bar_reg(
- i_smp_chip.chip->this_chip,
- NX_APC_GROUP_BAR0_0x0201302F,
- common_nf_scope_bar_reg_def,
- non_mirrored_range);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_local_node_region_bars: Error from proc_setup_bars_common_write_bar_reg");
- break;
- }
-
- if (i_smp_chip.dual_capp_present)
- {
- FAPI_DBG("proc_setup_bars_write_local_node_region_bars: Writing NX CXA1 APC Group Non-Mirrored BAR register");
- rc = proc_setup_bars_common_write_bar_reg(
- i_smp_chip.chip->this_chip,
- NX_CXA1_APC_GROUP_BAR0_0x020131AF,
- common_nf_scope_bar_reg_def,
- non_mirrored_range);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_local_node_region_bars: Error from proc_setup_bars_common_write_bar_reg");
- break;
- }
- }
-
- FAPI_DBG("proc_setup_bars_write_local_node_region_bars: Writing NX Group Non-Mirrored BAR register");
- rc = proc_setup_bars_common_write_bar_reg(
- i_smp_chip.chip->this_chip,
- NX_GROUP_BAR0_0x02013097,
- common_nf_scope_bar_reg_def,
- non_mirrored_range);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_local_node_region_bars: Error from proc_setup_bars_common_write_bar_reg");
- break;
- }
- }
-
- // NX (mirrored)
- if (mirrored_range.enabled && i_smp_chip.nx_enabled)
- {
- FAPI_DBG("proc_setup_bars_write_local_node_region_bars: Writing NX CXA0 APC Group Mirrored BAR register");
- rc = proc_setup_bars_common_write_bar_reg(
- i_smp_chip.chip->this_chip,
- NX_APC_GROUP_BAR1_0x02013030,
- common_nf_scope_bar_reg_def,
- mirrored_range);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_local_node_region_bars: Error from proc_setup_bars_common_write_bar_reg");
- break;
- }
-
- if (i_smp_chip.dual_capp_present)
- {
- FAPI_DBG("proc_setup_bars_write_local_node_region_bars: Writing NX CXA1 APC Group Mirrored BAR register");
- rc = proc_setup_bars_common_write_bar_reg(
- i_smp_chip.chip->this_chip,
- NX_CXA1_APC_GROUP_BAR1_0x020131B0,
- common_nf_scope_bar_reg_def,
- mirrored_range);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_local_node_region_bars: Error from proc_setup_bars_common_write_bar_reg");
- break;
- }
- }
-
- FAPI_DBG("proc_setup_bars_write_local_node_region_bars: Writing NX Group Mirrored BAR register");
- rc = proc_setup_bars_common_write_bar_reg(
- i_smp_chip.chip->this_chip,
- NX_GROUP_BAR1_0x02013098,
- common_nf_scope_bar_reg_def,
- mirrored_range);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_local_node_region_bars: Error from proc_setup_bars_common_write_bar_reg");
- break;
- }
- }
- // NPU (non-mirrored)
- if (non_mirrored_range.enabled && i_smp_chip.nv_present)
- {
- for (uint8_t u = 0; u < PROC_SETUP_BARS_NPU_NUM_UNITS; u++)
- {
- FAPI_DBG("proc_setup_bars_write_local_node_region_bars: Writing NPU%d Group Non-Mirrored BAR register", u);
- rc = proc_setup_bars_common_write_bar_reg(
- i_smp_chip.chip->this_chip,
- PROC_SETUP_BARS_NPU_NODE_NON_MIRRORED_BAR[u],
- common_nf_scope_bar_reg_def,
- non_mirrored_range);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_local_node_region_bars: Error from proc_setup_bars_common_write_bar_reg");
- break;
- }
- }
- if (!rc.ok())
- {
- break;
- }
-
- }
-
- // NPU (mirrored)
- if (mirrored_range.enabled && i_smp_chip.nv_present)
- {
- for (uint8_t u = 0; u < PROC_SETUP_BARS_NPU_NUM_UNITS; u++)
- {
- FAPI_DBG("proc_setup_bars_write_local_node_region_bars: Writing NPU%d Group Mirrored BAR register", u);
- rc = proc_setup_bars_common_write_bar_reg(
- i_smp_chip.chip->this_chip,
- PROC_SETUP_BARS_NPU_NODE_MIRRORED_BAR[u],
- common_nf_scope_bar_reg_def,
- mirrored_range);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_local_node_region_bars: Error from proc_setup_bars_common_write_bar_reg");
- break;
- }
- }
- if (!rc.ok())
- {
- break;
- }
- }
-
- // L3 (non-mirrored)
- if (non_mirrored_range.enabled)
- {
- rc = proc_setup_bars_l3_write_local_node_memory_bar_attr(
- &(i_smp_chip.chip->this_chip),
- true,
- non_mirrored_range,
- i_smp_chip.non_mirrored_range);
-
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_local_node_region_bars: Error from proc_setup_bars_l3_write_local_node_memory_bar_attr");
- break;
- }
- }
-
- // L3 (mirrored)
- if (mirrored_range.enabled)
- {
- rc = proc_setup_bars_l3_write_local_node_memory_bar_attr(
- &(i_smp_chip.chip->this_chip),
- false,
- mirrored_range,
- i_smp_chip.mirrored_range);
-
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_local_node_region_bars: Error from proc_setup_bars_l3_write_local_node_memory_bar_attr");
- break;
- }
- }
-
- // PCIe (non-mirrored/mirrored)
- if (i_smp_chip.pcie_enabled)
- {
- rc = proc_setup_bars_pcie_write_local_node_memory_bars(
- i_smp_chip.chip->this_chip,
- i_smp_chip.num_phb,
- non_mirrored_range,
- mirrored_range);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_local_node_region_bars: Error from proc_setup_bars_pcie_write_local_node_memory_bars");
- break;
- }
- }
- } while(0);
-
- FAPI_DBG("proc_setup_bars_write_local_node_region_bars: End");
- return rc;
-}
-
-
-//------------------------------------------------------------------------------
-// function: wrapper function to write all BARs tied to remote node regions
-// (non-mirrored/mirrored regions)
-// parameters: i_smp_chip => structure encapsulating single chip in SMP
-// topology
-// i_smp_node_a0 => structure encapsulating node reachable from
-// A0 link on this chip
-// i_smp_node_a1 => structure encapsulating node reachable from
-// A1 link on this chip
-// i_smp_node_a2 => structure encapsulating node reachable from
-// A2 link on this chip
-// returns: FAPI_RC_SUCCESS if all register writes are successful,
-// else failing return code from common BAR write function
-//------------------------------------------------------------------------------
-//
-// Remote node region BARs:
-//
-// PB
-// PB Remote Group (A0) Non-Mirrored BAR (PB_RGMCFG00_0x02010C58)
-// PB Remote Group (A0) Mirrored BAR (PB_RGMCFGM00_0x02010C5B)
-// PB Remote Group (A1) Non-Mirrored BAR (PB_RGMCFG01_0x02010C59)
-// PB Remote Group (A1) Mirrored BAR (PB_RGMCFGM01_0x02010C5C)
-// PB Remote Group (A2) Non-Mirrored BAR (PB_RGMCFG10_0x02010C5A)
-// PB Remote Group (A2) Mirrored BAR (PB_RGMCFGM10_0x02010C5D)
-//
-//------------------------------------------------------------------------------
-fapi::ReturnCode
-proc_setup_bars_write_remote_node_region_bars(
- proc_setup_bars_smp_chip& i_smp_chip,
- proc_setup_bars_smp_node& i_smp_node_a0,
- proc_setup_bars_smp_node& i_smp_node_a1,
- proc_setup_bars_smp_node& i_smp_node_a2)
-{
- // return code
- fapi::ReturnCode rc;
-
- FAPI_DBG("proc_setup_bars_write_remote_node_region_bars: Start");
-
- do
- {
- // A0 (non-mirrored)
- if (i_smp_node_a0.non_mirrored_range.enabled)
- {
- FAPI_DBG("proc_setup_bars_write_remote_node_region_bars: Writing PB Remote Group (A0) Non-Mirrored Configuration register");
- rc = proc_setup_bars_common_write_bar_reg(
- i_smp_chip.chip->this_chip,
- PB_RGMCFG00_0x02010C58,
- common_nf_scope_bar_reg_def,
- i_smp_node_a0.non_mirrored_range);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_remote_node_region_bars: Error from proc_setup_bars_common_write_bar_reg");
- break;
- }
- }
-
- // A0 (mirrored)
- if (i_smp_node_a0.mirrored_range.enabled)
- {
- FAPI_DBG("proc_setup_bars_write_remote_node_region_bars: Writing PB Remote Group (A0) Mirrored Configuration register");
- rc = proc_setup_bars_common_write_bar_reg(
- i_smp_chip.chip->this_chip,
- PB_RGMCFGM00_0x02010C5B,
- common_nf_scope_bar_reg_def,
- i_smp_node_a0.mirrored_range);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_remote_node_region_bars: Error from proc_setup_bars_common_write_bar_reg");
- break;
- }
- }
-
- // A1 (non-mirrored)
- if (i_smp_node_a1.non_mirrored_range.enabled)
- {
- FAPI_DBG("proc_setup_bars_write_remote_node_region_bars: Writing PB Remote Group (A1) Non-Mirrored Configuration register");
- rc = proc_setup_bars_common_write_bar_reg(
- i_smp_chip.chip->this_chip,
- PB_RGMCFG01_0x02010C59,
- common_nf_scope_bar_reg_def,
- i_smp_node_a1.non_mirrored_range);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_remote_node_region_bars: Error from proc_setup_bars_common_write_bar_reg");
- break;
- }
- }
-
- // A1 (mirrored)
- if (i_smp_node_a1.mirrored_range.enabled)
- {
- FAPI_DBG("proc_setup_bars_write_remote_node_region_bars: Writing PB Remote Group (A1) Mirrored Configuration register");
- rc = proc_setup_bars_common_write_bar_reg(
- i_smp_chip.chip->this_chip,
- PB_RGMCFGM01_0x02010C5C,
- common_nf_scope_bar_reg_def,
- i_smp_node_a1.mirrored_range);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_remote_node_region_bars: Error from proc_setup_bars_common_write_bar_reg");
- break;
- }
- }
-
- // A2 (non-mirrored)
- if (i_smp_node_a2.non_mirrored_range.enabled)
- {
- FAPI_DBG("proc_setup_bars_write_remote_node_region_bars: Writing PB Remote Group (A2) Non-Mirrored Configuration register");
- rc = proc_setup_bars_common_write_bar_reg(
- i_smp_chip.chip->this_chip,
- PB_RGMCFG10_0x02010C5A,
- common_nf_scope_bar_reg_def,
- i_smp_node_a2.non_mirrored_range);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_remote_node_region_bars: Error from proc_setup_bars_common_write_bar_reg");
- break;
- }
- }
-
- // A2 (mirrored)
- if (i_smp_node_a2.mirrored_range.enabled)
- {
- FAPI_DBG("proc_setup_bars_write_remote_node_region_bars: Writing PB Remote Group (A2) Mirrored Configuration register");
- rc = proc_setup_bars_common_write_bar_reg(
- i_smp_chip.chip->this_chip,
- PB_RGMCFGM10_0x02010C5D,
- common_nf_scope_bar_reg_def,
- i_smp_node_a2.mirrored_range);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_remote_node_region_bars: Error from proc_setup_bars_common_write_bar_reg");
- break;
- }
- }
- } while(0);
-
- FAPI_DBG("proc_setup_bars_write_remote_node_region_bars: End");
- return rc;
-}
-
-
-//------------------------------------------------------------------------------
-// function: wrapper function to write all BARs tied to local chip foreign
-// regions (near/far)
-// parameters: i_smp_chip => structure encapsulating single chip in SMP
-// topology
-// returns: FAPI_RC_SUCCESS if all register writes are successful,
-// else failing return code from common BAR write function
-//------------------------------------------------------------------------------
-//
-// Foreign region BARs:
-//
-// PB
-// PB F0 Near BAR (West) (PB_FLMCFG0_WEST_0x02010C12)
-// PB F0 Near BAR (Center) (PB_FLMCFG0_CENT_0x02010C5E)
-// PB F0 Near BAR (East) (PB_FLMCFG0_EAST_0x02010C92)
-// PB F0 Far BAR (West) (PB_FRMCFG0_WEST_0x02010C14)
-// PB F0 Far BAR (Center) (PB_FRMCFG0_CENT_0x02010C60)
-// PB F0 Far BAR (East) (PB_FRMCFG0_EAST_0x02010C94)
-// PB F1 Near BAR (West) (PB_FLMCFG1_WEST_0x02010C13)
-// PB F1 Near BAR (Center) (PB_FLMCFG1_CENT_0x02010C5F)
-// PB F1 Near BAR (East) (PB_FLMCFG1_EAST_0x02010C93)
-// PB F1 Far BAR (West) (PB_FRMCFG1_WEST_0x02010C15)
-// PB F1 Far BAR (Center) (PB_FRMCFG1_CENT_0x02010C61)
-// PB F1 Far BAR (East) (PB_FRMCFG1_EAST_0x02010C95)
-//
-// NX
-// NX CXA0 APC F0 Near BAR (NX_APC_NEAR_BAR_F0_0x02013031)
-// NX CXA1 APC F0 Near BAR (NX_CXA1_APC_NEAR_BAR_F0_0x020131B1)
-// NX CXA0 APC F0 Far BAR (NX_APC_FAR_BAR_F0_0x02013032)
-// NX CXA1 APC F0 Far BAR (NX_CXA1_APC_FAR_BAR_F0_0x020131B2)
-// NX CXA0 APC F1 Near BAR (NX_APC_NEAR_BAR_F1_0x02013033)
-// NX CXA1 APC F1 Near BAR (NX_CXA1_APC_NEAR_BAR_F1_0x020131B3)
-// NX CXA0 APC F1 Far BAR (NX_APC_FAR_BAR_F1_0x02013034)
-// NX CXA1 APC F1 Far BAR (NX_CXA1_APC_FAR_BAR_F1_0x020131B4)
-// NX F0 Near BAR (NX_NEAR_BAR_F0_0x02013099)
-// NX F0 Far BAR (NX_FAR_BAR_F0_0x0201309A)
-// NX F1 Near BAR (NX_NEAR_BAR_F1_0x0201309B)
-// NX F1 Far BAR (NX_FAR_BAR_F1_0x0201309C)
-//
-// MCD
-// MCD Configuration 2 (F0) (MCD_CN10_0x0201340E)
-// MCD Configuration 3 (F1) (MCD_CN11_0x0201340F)
-//
-// PCIe
-// PCIE0 F0 Near BAR (PCIE0_NEAR_BAR_F0_0x02012014)
-// PCIE0 F0 Far BAR (PCIE0_FAR_BAR_F0_0x02012015)
-// PCIE0 F1 Near BAR (PCIE0_NEAR_BAR_F1_0x02012016)
-// PCIE0 F1 Far BAR (PCIE0_FAR_BAR_F1_0x02012017)
-//
-// PCIE1 F0 Near BAR (PCIE1_NEAR_BAR_F0_0x02012414)
-// PCIE1 F0 Far BAR (PCIE1_FAR_BAR_F0_0x02012415)
-// PCIE1 F1 Near BAR (PCIE1_NEAR_BAR_F1_0x02012416)
-// PCIE1 F1 Far BAR (PCIE1_FAR_BAR_F1_0x02012417)
-//
-// PCIE2 F0 Near BAR (PCIE2_NEAR_BAR_F0_0x02012814)
-// PCIE2 F0 Far BAR (PCIE2_FAR_BAR_F0_0x02012815)
-// PCIE2 F1 Near BAR (PCIE2_NEAR_BAR_F1_0x02012816)
-// PCIE2 F1 Far BAR (PCIE2_FAR_BAR_F1_0x02012817)
-//
-// PCIE3 F0 Near BAR (PCIE3_NEAR_BAR_F0_0x02012C14)
-// PCIE3 F0 Far BAR (PCIE3_FAR_BAR_F0_0x02012C15)
-// PCIE3 F1 Near BAR (PCIE3_NEAR_BAR_F1_0x02012C16)
-// PCIE3 F1 Far BAR (PCIE3_FAR_BAR_F1_0x02012C17)
-//
-//------------------------------------------------------------------------------
-fapi::ReturnCode
-proc_setup_bars_write_foreign_region_bars(
- proc_setup_bars_smp_chip& i_smp_chip)
-{
- // return code
- fapi::ReturnCode rc;
-
- FAPI_DBG("proc_setup_bars_write_foreign_region_bars: Start");
-
- do
- {
- bool process_links[PROC_FAB_SMP_NUM_F_LINKS] =
- {
- i_smp_chip.chip->process_f0,
- i_smp_chip.chip->process_f1
- };
-
- // PCIe (near/far)
- if (i_smp_chip.pcie_enabled)
- {
- rc = proc_setup_bars_pcie_write_foreign_memory_bars(
- i_smp_chip.chip->this_chip,
- i_smp_chip.num_phb,
- process_links,
- i_smp_chip.foreign_near_ranges,
- i_smp_chip.foreign_far_ranges);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_foreign_region_bars: Error from proc_setup_bars_pcie_write_foreign_memory_bars");
- break;
- }
- }
-
- // process ranges
- for (uint8_t r = 0;
- (r < PROC_FAB_SMP_NUM_F_LINKS) && (rc.ok());
- r++)
- {
- // near
- if (process_links[r] &&
- i_smp_chip.foreign_near_ranges[r].enabled)
- {
- // PB (near, west)
- FAPI_DBG("proc_setup_bars_write_foreign_region_bars: Writing PB F%d Near BAR (West) register",
- r);
- rc = proc_setup_bars_common_write_bar_reg(
- i_smp_chip.chip->this_chip,
- (r == 0)?
- PB_FLMCFG0_WEST_0x02010C12:
- PB_FLMCFG1_WEST_0x02010C13,
- common_f_scope_bar_reg_def,
- i_smp_chip.foreign_near_ranges[r]);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_foreign_region_bars: Error from proc_setup_bars_common_write_bar_reg");
- break;
- }
-
- // PB (near, cent)
- FAPI_DBG("proc_setup_bars_write_foreign_region_bars: Writing PB F%d Near BAR (Center) register",
- r);
- rc = proc_setup_bars_common_write_bar_reg(
- i_smp_chip.chip->this_chip,
- (r == 0)?
- PB_FLMCFG0_CENT_0x02010C5E:
- PB_FLMCFG1_CENT_0x02010C5F,
- common_f_scope_bar_reg_def,
- i_smp_chip.foreign_near_ranges[r]);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_foreign_region_bars: Error from proc_setup_bars_common_write_bar_reg");
- break;
- }
-
- // PB (near, east)
- FAPI_DBG("proc_setup_bars_write_foreign_region_bars: Writing PB F%d Near BAR (East) register",
- r);
- rc = proc_setup_bars_common_write_bar_reg(
- i_smp_chip.chip->this_chip,
- (r == 0)?
- PB_FLMCFG0_EAST_0x02010C92:
- PB_FLMCFG1_EAST_0x02010C93,
- common_f_scope_bar_reg_def,
- i_smp_chip.foreign_near_ranges[r]);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_foreign_region_bars: Error from proc_setup_bars_common_write_bar_reg");
- break;
- }
-
- // NX APC (near)
- if (i_smp_chip.nx_enabled)
- {
- FAPI_DBG("proc_setup_bars_write_foreign_region_bars: Writing NX CXA0 APC F%d Near BAR register",
- r);
- rc = proc_setup_bars_common_write_bar_reg(
- i_smp_chip.chip->this_chip,
- (r == 0)?
- NX_APC_NEAR_BAR_F0_0x02013031:
- NX_APC_NEAR_BAR_F1_0x02013033,
- common_f_scope_bar_reg_def,
- i_smp_chip.foreign_near_ranges[r]);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_foreign_region_bars: Error from proc_setup_bars_common_write_bar_reg");
- break;
- }
-
- if (i_smp_chip.dual_capp_present)
- {
- FAPI_DBG("proc_setup_bars_write_foreign_region_bars: Writing NX CXA1 APC F%d Near BAR register",
- r);
- rc = proc_setup_bars_common_write_bar_reg(
- i_smp_chip.chip->this_chip,
- (r == 0)?
- NX_CXA1_APC_NEAR_BAR_F0_0x020131B1:
- NX_CXA1_APC_NEAR_BAR_F1_0x020131B3,
- common_f_scope_bar_reg_def,
- i_smp_chip.foreign_near_ranges[r]);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_foreign_region_bars: Error from proc_setup_bars_common_write_bar_reg");
- break;
- }
- }
- }
-
- // NX (near)
- if (i_smp_chip.nx_enabled)
- {
- FAPI_DBG("proc_setup_bars_write_foreign_region_bars: Writing NX F%d Near BAR register",
- r);
- rc = proc_setup_bars_common_write_bar_reg(
- i_smp_chip.chip->this_chip,
- (r == 0)?
- NX_NEAR_BAR_F0_0x02013099:
- NX_NEAR_BAR_F1_0x0201309B,
- common_f_scope_bar_reg_def,
- i_smp_chip.foreign_near_ranges[r]);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_foreign_region_bars: Error from proc_setup_bars_common_write_bar_reg");
- break;
- }
- }
-
- // MCD (near only)
- FAPI_DBG("proc_setup_bars_write_foreign_region_bars: Writing MCD Configuration %d (F%d) register",
- r+1, r);
- rc = proc_setup_bars_common_write_bar_reg(
- i_smp_chip.chip->this_chip,
- (r == 0)?
- MCD_CN10_0x0201340E:
- MCD_CN11_0x0201340F,
- (r == 0)?
- mcd_f0_bar_reg_def:
- mcd_f1_bar_reg_def,
- i_smp_chip.foreign_near_ranges[r]);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_foreign_region_bars: Error from proc_setup_bars_common_write_bar_reg");
- break;
- }
- }
-
- // far
- if (process_links[r] &&
- i_smp_chip.foreign_near_ranges[r].enabled)
- {
- // PB (far, west)
- FAPI_DBG("proc_setup_bars_write_foreign_region_bars: Writing PB F%d Far BAR (West) register",
- r);
- rc = proc_setup_bars_common_write_bar_reg(
- i_smp_chip.chip->this_chip,
- (r == 0)?
- PB_FRMCFG0_WEST_0x02010C14:
- PB_FRMCFG1_WEST_0x02010C15,
- common_f_scope_bar_reg_def,
- i_smp_chip.foreign_far_ranges[r]);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_foreign_region_bars: Error from proc_setup_bars_common_write_bar_reg");
- break;
- }
-
- // PB (far, center)
- FAPI_DBG("proc_setup_bars_write_foreign_region_bars: Writing PB F%d Far BAR (Center) register",
- r);
- rc = proc_setup_bars_common_write_bar_reg(
- i_smp_chip.chip->this_chip,
- (r == 0)?
- PB_FRMCFG0_CENT_0x02010C60:
- PB_FRMCFG1_CENT_0x02010C61,
- common_f_scope_bar_reg_def,
- i_smp_chip.foreign_far_ranges[r]);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_foreign_region_bars: Error from proc_setup_bars_common_write_bar_reg");
- break;
- }
-
- // PB (far, east)
- FAPI_DBG("proc_setup_bars_write_foreign_region_bars: Writing PB F%d Far BAR (East) register",
- r);
- rc = proc_setup_bars_common_write_bar_reg(
- i_smp_chip.chip->this_chip,
- (r == 0)?
- PB_FRMCFG0_EAST_0x02010C94:
- PB_FRMCFG1_EAST_0x02010C95,
- common_f_scope_bar_reg_def,
- i_smp_chip.foreign_far_ranges[r]);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_foreign_region_bars: Error from proc_setup_bars_common_write_bar_reg");
- break;
- }
-
- // NX APC (far)
- if (i_smp_chip.nx_enabled)
- {
- FAPI_DBG("proc_setup_bars_write_foreign_region_bars: Writing NX CXA0 APC F%d Far BAR register",
- r);
- rc = proc_setup_bars_common_write_bar_reg(
- i_smp_chip.chip->this_chip,
- (r == 0)?
- NX_APC_FAR_BAR_F0_0x02013032:
- NX_APC_FAR_BAR_F1_0x02013034,
- common_f_scope_bar_reg_def,
- i_smp_chip.foreign_far_ranges[r]);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_foreign_region_bars: Error from proc_setup_bars_common_write_bar_reg");
- break;
- }
-
- if (i_smp_chip.dual_capp_present)
- {
- FAPI_DBG("proc_setup_bars_write_foreign_region_bars: Writing NX CXA1 APC F%d Far BAR register",
- r);
- rc = proc_setup_bars_common_write_bar_reg(
- i_smp_chip.chip->this_chip,
- (r == 0)?
- NX_CXA1_APC_FAR_BAR_F0_0x020131B2:
- NX_CXA1_APC_FAR_BAR_F1_0x020131B4,
- common_f_scope_bar_reg_def,
- i_smp_chip.foreign_far_ranges[r]);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_foreign_region_bars: Error from proc_setup_bars_common_write_bar_reg");
- break;
- }
- }
- }
-
- // NX (far)
- if (i_smp_chip.nx_enabled)
- {
- FAPI_DBG("proc_setup_bars_write_foreign_region_bars: Writing NX F%d Far BAR register",
- r);
- rc = proc_setup_bars_common_write_bar_reg(
- i_smp_chip.chip->this_chip,
- (r == 0)?
- NX_FAR_BAR_F0_0x0201309A:
- NX_FAR_BAR_F1_0x0201309C,
- common_f_scope_bar_reg_def,
- i_smp_chip.foreign_far_ranges[r]);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_foreign_region_bars: Error from proc_setup_bars_common_write_bar_reg");
- break;
- }
- }
- }
- }
- } while(0);
-
- FAPI_DBG("proc_setup_bars_write_foreign_region_bars: End");
- return rc;
-}
-
-
-//------------------------------------------------------------------------------
-// function: utility function to find node structure associated with a given
-// target
-// parameters: i_target => chip target
-// i_smp => structure encapsulating SMP topology
-// o_node => node structure associated with chip target input
-// returns: FAPI_RC_SUCCESS if matching node is found
-// RC_PROC_SETUP_BARS_NODE_FIND_INTERNAL_ERR if node map lookup is
-// unsuccessful,
-// else failing return code from node ID attribute query function
-//------------------------------------------------------------------------------
-fapi::ReturnCode
-proc_setup_bars_find_node(
- const fapi::Target& i_target,
- proc_setup_bars_smp_system& i_smp,
- proc_setup_bars_smp_node& o_node)
-{
- // return code
- fapi::ReturnCode rc;
- proc_fab_smp_node_id node_id;
-
- FAPI_DBG("proc_setup_bars_find_node: Start");
-
- do
- {
- // get node ID attribute
- FAPI_DBG("proc_setup_find_node: Querying node ID attribute");
- rc = proc_fab_smp_get_node_id_attr(&(i_target),
- node_id);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_find_node: Error from proc_fab_smp_get_node_id_attr");
- break;
- }
-
- // search to see if node structure already exists for the node ID
- // associated with this chip
- std::map<proc_fab_smp_node_id, proc_setup_bars_smp_node>::iterator
- n_iter;
- n_iter = i_smp.nodes.find(node_id);
- // no match node found, exit
- if (n_iter == i_smp.nodes.end())
- {
- FAPI_ERR("proc_setup_bars_find_node: insert_chip: Error encountered finding node in SMP map");
- const fapi::Target & TARGET = i_target;
- const proc_fab_smp_node_id & NODE_ID = node_id;
- FAPI_SET_HWP_ERROR(rc,
- RC_PROC_SETUP_BARS_NODE_FIND_INTERNAL_ERR);
- break;
- }
- o_node = n_iter->second;
- } while(0);
-
- FAPI_DBG("proc_setup_bars_find_node: End");
- return rc;
-}
-
-//------------------------------------------------------------------------------
-// function: check that all address ranges are non-overlapping
-// parameters: i_smp => structure encapsulating fully
-// specified SMP topology
-// returns: FAPI_RC_SUCCESS if all ranges are non-overlapping
-// else RC_PROC_SETUP_BARS_SYSTEM_RANGE_OVERLAP_ERR
-//------------------------------------------------------------------------------
-fapi::ReturnCode
-proc_setup_bars_check_bars(
- proc_setup_bars_smp_system& i_smp)
-{
- // return code
- fapi::ReturnCode rc;
- std::map<proc_fab_smp_node_id, proc_setup_bars_smp_node>::iterator n_iter;
- std::map<proc_fab_smp_chip_id, proc_setup_bars_smp_chip>::iterator p_iter;
-
- std::vector<proc_setup_bars_addr_range*> sys_ranges;
- std::vector<fapi::Target*> targets;
-
- // fsp_mmio_mask_range specifically excluded, as this range by itself
- // does not represent an active portion of real address space
- const uint32_t ranges_per_chip = 7 +
- (2* PROC_FAB_SMP_NUM_F_LINKS) +
- (PROC_SETUP_BARS_NPU_NUM_UNITS * PROC_SETUP_BARS_NPU_MMIO_RANGES_PER_UNIT) +
- (PROC_SETUP_BARS_PCIE_NUM_UNITS * PROC_SETUP_BARS_PCIE_RANGES_PER_UNIT);
-
- FAPI_DBG("proc_setup_bars_check_bars: Start");
-
- do
- {
- for (n_iter = i_smp.nodes.begin();
- n_iter != i_smp.nodes.end();
- n_iter++)
- {
- for (p_iter = n_iter->second.chips.begin();
- p_iter != n_iter->second.chips.end();
- p_iter++)
- {
- targets.push_back(&(p_iter->second.chip->this_chip));
-
- sys_ranges.push_back(&(p_iter->second.non_mirrored_range));
- sys_ranges.push_back(&(p_iter->second.mirrored_range));
- for (uint8_t l = 0; l < PROC_FAB_SMP_NUM_F_LINKS; l++)
- {
- sys_ranges.push_back(&(p_iter->second.foreign_near_ranges[l]));
- }
- for (uint8_t l = 0; l < PROC_FAB_SMP_NUM_F_LINKS; l++)
- {
- sys_ranges.push_back(&(p_iter->second.foreign_far_ranges[l]));
- }
- sys_ranges.push_back(&(p_iter->second.psi_range));
- sys_ranges.push_back(&(p_iter->second.fsp_range));
- sys_ranges.push_back(&(p_iter->second.intp_range));
- sys_ranges.push_back(&(p_iter->second.nx_mmio_range));
- sys_ranges.push_back(&(p_iter->second.as_mmio_range));
- for (uint8_t u = 0; u < PROC_SETUP_BARS_PCIE_NUM_UNITS; u++)
- {
- for (uint8_t r = 0; r < PROC_SETUP_BARS_PCIE_RANGES_PER_UNIT; r++)
- {
- sys_ranges.push_back(&(p_iter->second.pcie_ranges[u][r]));
- }
- }
- for (uint8_t u = 0; u < PROC_SETUP_BARS_NPU_NUM_UNITS; u++)
- {
- for (uint8_t r = 0; r < PROC_SETUP_BARS_NPU_MMIO_RANGES_PER_UNIT; r++)
- {
- sys_ranges.push_back(&(p_iter->second.npu_mmio_ranges[u][r]));
- }
- }
- }
- }
-
- // check that ranges are non-overlapping
- if (sys_ranges.size() > 1)
- {
- for (uint32_t r = 0; (r < sys_ranges.size()-1) && rc.ok(); r++)
- {
- for (uint32_t x = r+1; x < sys_ranges.size(); x++)
- {
- if (sys_ranges[r]->overlaps(*(sys_ranges[x])))
- {
- uint32_t target_r = r / ranges_per_chip;
- uint32_t range_r = r % ranges_per_chip;
- uint32_t target_x = x / ranges_per_chip;
- uint32_t range_x = x % ranges_per_chip;
-
- FAPI_ERR("proc_setup_bars_check_bars: Overlapping address regions detected");
- FAPI_ERR(" target: %s, Range index = %d",
- targets[target_r]->toEcmdString(), range_r);
- sys_ranges[r]->print();
- FAPI_ERR(" target: %s, Range index = %d",
- targets[target_x]->toEcmdString(), range_x);
- sys_ranges[x]->print();
-
- const fapi::Target & TARGET1 = *(targets[target_r]);
- const uint32_t RANGE_ID1 = range_r;
- const uint64_t & BASE_ADDR1 = sys_ranges[r]->base_addr;
- const uint64_t & END_ADDR1 = sys_ranges[r]->end_addr();
- const bool & ENABLED1 = sys_ranges[r]->enabled;
-
- const fapi::Target & TARGET2 = *(targets[target_x]);
- const uint32_t RANGE_ID2 = range_x;
- const uint64_t & BASE_ADDR2 = sys_ranges[x]->base_addr;
- const uint64_t & END_ADDR2 = sys_ranges[x]->end_addr();
- const bool & ENABLED2 = sys_ranges[x]->enabled;
-
- FAPI_SET_HWP_ERROR(rc,
- RC_PROC_SETUP_BARS_SYSTEM_RANGE_OVERLAP_ERR);
- break;
- }
- }
- }
- if (!rc.ok())
- {
- break;
- }
- }
-
- } while(0);
-
- FAPI_DBG("proc_setup_bars_check_bars: End");
- return rc;
-}
-
-
-//------------------------------------------------------------------------------
-// function: wrapper function to write all chip BARs
-// parameters: i_smp => structure encapsulating fully
-// specified SMP topology
-// i_init_local_chip_local_node => boolean qualifying application
-// of local chip/local node range
-// specific BAR resources
-// returns: FAPI_RC_SUCCESS if all register writes are successful,
-// else failing return code from lower level BAR write/node search
-// functions
-//------------------------------------------------------------------------------
-fapi::ReturnCode
-proc_setup_bars_write_bars(
- proc_setup_bars_smp_system& i_smp,
- const bool i_init_local_chip_local_node)
-{
- // return code
- fapi::ReturnCode rc;
- std::map<proc_fab_smp_node_id, proc_setup_bars_smp_node>::iterator n_iter;
- std::map<proc_fab_smp_chip_id, proc_setup_bars_smp_chip>::iterator p_iter;
-
- FAPI_DBG("proc_setup_bars_write_bars: Start");
-
- do
- {
- for (n_iter = i_smp.nodes.begin();
- (n_iter != i_smp.nodes.end()) && (rc.ok());
- n_iter++)
- {
- for (p_iter = n_iter->second.chips.begin();
- (p_iter != n_iter->second.chips.end()) && (rc.ok());
- p_iter++)
- {
- // init local chip/local node resources?
- if (i_init_local_chip_local_node)
- {
- rc = proc_setup_bars_write_local_chip_region_bars(
- p_iter->second);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_bars: Error from proc_setup_bars_write_local_chip_region_bars");
- break;
- }
-
- rc = proc_setup_bars_write_local_node_region_bars(
- p_iter->second,
- n_iter->second);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_bars: Error from proc_setup_bars_write_local_node_region_bars");
- break;
- }
- }
-
- // determine which remote node ranges should be initialized
- proc_setup_bars_smp_node smp_node_a0;
- proc_setup_bars_smp_node smp_node_a1;
- proc_setup_bars_smp_node smp_node_a2;
- if (p_iter->second.chip->a0_chip.getType() != fapi::TARGET_TYPE_NONE)
- {
- rc = proc_setup_bars_find_node(
- p_iter->second.chip->a0_chip,
- i_smp,
- smp_node_a0);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_write_bars: Error from proc_setup_bars_find_node");
- break;
- }
- }
- if (p_iter->second.chip->a1_chip.getType() != fapi::TARGET_TYPE_NONE)
- {
- rc = proc_setup_bars_find_node(
- p_iter->second.chip->a1_chip,
- i_smp,
- smp_node_a1);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_write_bars: Error from proc_setup_bars_find_node");
- break;
- }
- }
- if (p_iter->second.chip->a2_chip.getType() != fapi::TARGET_TYPE_NONE)
- {
- rc = proc_setup_bars_find_node(
- p_iter->second.chip->a2_chip,
- i_smp,
- smp_node_a2);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_write_bars: Error from proc_setup_bars_find_node");
- break;
- }
- }
-
- // initialize remote node related ranges
- rc = proc_setup_bars_write_remote_node_region_bars(
- p_iter->second,
- smp_node_a0,
- smp_node_a1,
- smp_node_a2);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_bars: Error from proc_setup_bars_write_remote_node_region_bars");
- break;
- }
-
- // initialize foreign link related regions
- rc = proc_setup_bars_write_foreign_region_bars(
- p_iter->second);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_write_bars: Error from proc_setup_bars_write_foreign_region_bars");
- break;
- }
- }
- }
- } while(0);
-
- FAPI_DBG("proc_setup_bars_write_bars: End");
- return rc;
-}
-
-
-//------------------------------------------------------------------------------
-// function: enable MCD probes/unmask FIRs
-// parameters: i_smp => structure encapsulating fully
-// specified SMP topology
-// i_init_local_chip_local_node => boolean qualifying application
-// of local chip/local node range
-// specific BAR resources
-// returns: FAPI_RC_SUCCESS if all register writes are successful,
-// else failing return code from failing SCOM access
-//------------------------------------------------------------------------------
-fapi::ReturnCode proc_setup_bars_config_mcd(
- proc_setup_bars_smp_system& i_smp,
- const bool i_init_local_chip_local_node)
-{
- // return code
- fapi::ReturnCode rc;
- uint32_t rc_ecmd = 0;
-
- ecmdDataBufferBase mcd_fir_mask_data(64);
- ecmdDataBufferBase mcd_recov_data(64);
- ecmdDataBufferBase mcd_recov_mask(64);
- std::map<proc_fab_smp_node_id, proc_setup_bars_smp_node>::const_iterator n_iter;
- std::map<proc_fab_smp_chip_id, proc_setup_bars_smp_chip>::const_iterator p_iter;
-
- FAPI_DBG("proc_setup_bars_config_mcd: Start");
-
- do
- {
- for (n_iter = i_smp.nodes.begin();
- (n_iter != i_smp.nodes.end()) && (rc.ok());
- n_iter++)
- {
- for (p_iter = n_iter->second.chips.begin();
- (p_iter != n_iter->second.chips.end()) && (rc.ok());
- p_iter++)
- {
- bool config_mcd = false;
- bool cfg_enable[PROC_SETUP_BARS_NUM_MCD_CFG] =
- { false, false, false, false };
-
- // ensure MCD probes are enabled and FIR is unmasked if:
- // initializing local chip resources and there is a
- // non-mirrored/mirrored range enabled OR
- // initializing foreign resources and there is a
- // near range enabled
-
- if (i_init_local_chip_local_node &&
- (p_iter->second.non_mirrored_range.enabled ||
- p_iter->second.mirrored_range.enabled))
- {
- config_mcd = true;
- cfg_enable[0] = p_iter->second.non_mirrored_range.enabled;
- cfg_enable[1] = p_iter->second.mirrored_range.enabled;
- }
-
- bool process_f_links[PROC_FAB_SMP_NUM_F_LINKS] =
- {
- p_iter->second.chip->process_f0,
- p_iter->second.chip->process_f1
- };
-
- // process ranges
- for (uint8_t r = 0;
- (r < PROC_FAB_SMP_NUM_F_LINKS);
- r++)
- {
- if (process_f_links[r] &&
- p_iter->second.foreign_near_ranges[r].enabled)
- {
- config_mcd = true;
- cfg_enable[2+r] = true;
- }
- }
-
- if (config_mcd)
- {
- uint64_t mcd_fir_mask = MCD_FIR_MASK_RUNTIME_VAL;
-
- // unmask MCD FIR
- rc_ecmd |= mcd_fir_mask_data.setDoubleWord(
- 0,
- mcd_fir_mask);
-
- // check buffer manipulation return codes
- if (rc_ecmd)
- {
- FAPI_ERR("proc_setup_bars_config_mcd: Error 0x%X setting up FIR mask data buffer",
- rc_ecmd);
- rc.setEcmdError(rc_ecmd);
- break;
- }
-
- rc = fapiPutScom(p_iter->second.chip->this_chip,
- MCD_FIR_MASK_0x02013403,
- mcd_fir_mask_data);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_config_mcd: fapiPutScomUnderMask error (MCD_FIR_MASK_0x02013403)");
- break;
- }
-
- // enable MCD probes for selected config registers
- rc_ecmd |= mcd_recov_data.setBit(MCD_RECOVERY_ENABLE_BIT);
- rc_ecmd |= mcd_recov_mask.setBit(MCD_RECOVERY_ENABLE_BIT);
- for (uint8_t i = 0;
- i < PROC_SETUP_BARS_NUM_MCD_CFG;
- i++)
- {
- rc_ecmd |= mcd_recov_data.writeBit(
- MCD_RECOVERY_CFG_EN_BIT[i],
- cfg_enable[i]);
- rc_ecmd |= mcd_recov_mask.writeBit(
- MCD_RECOVERY_CFG_EN_BIT[i],
- cfg_enable[i]);
- }
-
- // check buffer manipulation return codes
- if (rc_ecmd)
- {
- FAPI_ERR("proc_setup_bars_config_mcd: Error 0x%X setting up recovery data buffer",
- rc_ecmd);
- rc.setEcmdError(rc_ecmd);
- break;
- }
-
- rc = fapiPutScomUnderMask(p_iter->second.chip->this_chip,
- MCD_REC_EVEN_0x02013410,
- mcd_recov_data,
- mcd_recov_mask);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_config_mcd: fapiPutScomUnderMask error (MCD_REC_EVEN_0x02013410)");
- break;
- }
-
- rc = fapiPutScomUnderMask(p_iter->second.chip->this_chip,
- MCD_REC_ODD_0x02013411,
- mcd_recov_data,
- mcd_recov_mask);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_config_mcd: fapiPutScomUnderMask error (MCD_REC_ODD_0x02013411)");
- break;
- }
- }
- }
- }
- } while(0);
-
- FAPI_DBG("proc_setup_bars_config_mcd: End");
- return rc;
-}
-
-
-//------------------------------------------------------------------------------
-// function: proc_setup_bars HWP entry point
-// NOTE: see comments above function prototype in header
-//------------------------------------------------------------------------------
-fapi::ReturnCode proc_setup_bars(
- std::vector<proc_setup_bars_proc_chip>& i_proc_chips,
- const bool i_init_local_chip_local_node)
-{
- // return code
- fapi::ReturnCode rc;
- // SMP model
- proc_setup_bars_smp_system smp;
-
- // mark HWP entry
- FAPI_IMP("proc_setup_bars: Entering ...");
-
- do
- {
- // process all chips passed from platform to HWP, query chip
- // specific attributes and insert into system SMP data structure
- // given logical node & chip ID
- rc = proc_setup_bars_process_chips(i_proc_chips,
- smp);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars: Error from proc_setup_bars_process_chips");
- break;
- }
-
- // check that all ranges are non-overlapping
- rc = proc_setup_bars_check_bars(smp);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars: Error from proc_setup_bars_check_bars");
- break;
- }
-
- // write BAR registers
- rc = proc_setup_bars_write_bars(smp,
- i_init_local_chip_local_node);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars: Error from proc_setup_bars_write_bars");
- break;
- }
-
- // configure MCD resources
- rc = proc_setup_bars_config_mcd(smp,
- i_init_local_chip_local_node);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars: Error from proc_setup_bars_config_mcd");
- break;
- }
-
- } while(0);
-
- // log function exit
- FAPI_IMP("proc_setup_bars: Exiting ...");
- return rc;
-}
-
-
-} // extern "C"
OpenPOWER on IntegriCloud