summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorBrian Vanderpool <vanderp@us.ibm.com>2016-05-19 13:32:06 -0500
committerDaniel M. Crowell <dcrowell@us.ibm.com>2017-12-10 15:56:51 -0500
commitd3ecbc6808176aa9a73c9fb94470028f67633f05 (patch)
tree461a791e1e29dd2bff3b035c97ed4dda68e3ee47 /src
parenta9a0baba8c4c63c3367eb4f18626acc69eea784d (diff)
downloadtalos-hostboot-d3ecbc6808176aa9a73c9fb94470028f67633f05.tar.gz
talos-hostboot-d3ecbc6808176aa9a73c9fb94470028f67633f05.zip
Initial check-in of p9_cme_sram_access
Change-Id: I8e280251e7ff420aa60007a7fe053fd8681726b3 RTC:148998 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/24824 Tested-by: Jenkins Server Reviewed-by: AMIT J. TENDOLKAR <amit.tendolkar@in.ibm.com> Reviewed-by: Jennifer A. Stofer <stofer@us.ibm.com> Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/50670 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com> Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src')
-rw-r--r--src/import/chips/p9/procedures/hwp/pm/p9_cme_sram_access.C164
-rw-r--r--src/import/chips/p9/procedures/hwp/pm/p9_cme_sram_access.H99
-rw-r--r--src/import/chips/p9/procedures/hwp/pm/p9_cme_sram_access.mk27
-rw-r--r--src/import/chips/p9/procedures/xml/error_info/p9_cme_sram_access_errors.xml38
4 files changed, 328 insertions, 0 deletions
diff --git a/src/import/chips/p9/procedures/hwp/pm/p9_cme_sram_access.C b/src/import/chips/p9/procedures/hwp/pm/p9_cme_sram_access.C
new file mode 100644
index 000000000..25404108d
--- /dev/null
+++ b/src/import/chips/p9/procedures/hwp/pm/p9_cme_sram_access.C
@@ -0,0 +1,164 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/import/chips/p9/procedures/hwp/pm/p9_cme_sram_access.C $ */
+/* */
+/* OpenPOWER HostBoot Project */
+/* */
+/* Contributors Listed Below - COPYRIGHT 2015,2017 */
+/* [+] 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 */
+///
+/// @file p9_cme_sram_access.C
+/// @brief Display data from the targetted CME's SRAM array.
+
+// *HWP HWP Owner : Brian Vanderpool <vanderp@us.ibm.com>
+// *HWP Backup HWP Owner: Greg Still <stillgs@us.ibm.com>
+// *HWP FW Owner : Sangeetha T S <sangeet2@in.ibm.com>
+// *HWP Team : PM
+// *HWP Level : 2
+// *HWP Consumed by : HS:CRO:SBE
+///
+///-----------------------------------------------------------------------------
+
+///
+/// High-level procedure flow:
+/// @verbatim
+/// High-level procedure flow:
+///
+///
+/// @endverbatim
+
+// -----------------------------------------------------------------------------
+// Includes
+// -----------------------------------------------------------------------------
+#include <p9_cme_sram_access.H>
+
+
+
+// ----------------------------------------------------------------------
+// Constants
+// ----------------------------------------------------------------------
+
+const uint8_t CSCR_AUTO_INCREMENT_BIT = 0;
+
+
+// -----------------------------------------------------------------------------
+// Function prototypes
+// -----------------------------------------------------------------------------
+
+// -----------------------------------------------------------------------------
+// Function definitions
+// -----------------------------------------------------------------------------
+
+/// @brief Dump the contents of the CME SRAM
+///
+/// @param [in] i_cme_target EX target
+/// @param [in] i_start_address Start Address is between 0xFFFF80000 and 0xFFFFFFFF and must be 8B aligned
+/// @param [in] i_length_dword Length in dwords (# of accesses)
+/// @param [out] o_data Output Data
+/// @param [out] o_dwords_read Number of actual words in the output buffer.
+///
+/// @retval FAPI_RC_SUCCESS
+/// @retval ERROR defined in xml
+
+fapi2::ReturnCode p9_cme_sram_access(
+ const fapi2::Target<fapi2::TARGET_TYPE_EX>& i_cme_target,
+ const uint32_t i_start_address,
+ const uint32_t i_length_dword,
+ uint64_t* o_data,
+ uint32_t& o_dwords_read)
+{
+
+ fapi2::buffer<uint64_t> l_data64;
+
+ // These are initialized before being used.
+ // Not doing an initial assignment to 0 to save space on the SBE.
+ uint32_t l_norm_address;
+ uint32_t l_words_to_read;
+
+
+ FAPI_IMP("> p9_cme_sram_access");
+
+ // Ensure the address is between 0xFFFF8000 and 0xFFFFFFFF.
+ // No need to check the upper limit, since that will overflow the uint32_t data type.
+
+ if (i_start_address < 0xFFFF8000)
+ {
+ // Return Error - invalid start address
+ FAPI_DBG("Invalid Start Address %08X", i_start_address);
+ FAPI_ASSERT(false,
+ fapi2::CME_SRAM_ACCESS_ERROR().set_ADDRESS(i_start_address),
+ "Invalid CME Start address");
+ }
+
+ if ((i_start_address & 0x00000007) != 0)
+ {
+ // Return Error - invalid start address alignment
+ FAPI_DBG("Invalid Start Address alignment %08X", i_start_address);
+ FAPI_ASSERT(false,
+ fapi2::CME_SRAM_ACCESS_ERROR().set_ADDRESS(i_start_address),
+ "Invalid CME Start address alignment");
+ }
+
+
+ // Enable auto increment
+ FAPI_INF(" CME display enable auto increment mode");
+ l_data64.flush<0>().setBit<CSCR_AUTO_INCREMENT_BIT>();
+ FAPI_TRY(fapi2::putScom(i_cme_target, EX_CSCR_OR, l_data64), "Error enabling auto increment mode");
+
+
+
+ // Set the CME address
+ // The SRAM address is defined as 16:28 (64k) but the CME only supports 32k, so mask off bit 16
+
+ l_norm_address = i_start_address & 0x00007FF8;
+
+ l_data64 = ((uint64_t)(l_norm_address)) << 32;
+
+ FAPI_DBG(" CME Setting Read address (CSAR) to 0x%08X", l_data64);
+ FAPI_TRY(fapi2::putScom(i_cme_target, EX_CSAR, l_data64), "Error setting read address in CSR");
+
+ // Compute the number of words
+ if ((l_norm_address + i_length_dword * 8) > 0x8000)
+ {
+ l_words_to_read = (0x8000 - l_norm_address) / 8;
+ }
+ else
+ {
+ l_words_to_read = i_length_dword;
+ }
+
+ FAPI_DBG(" Reading %d words From 0x%08X to 0x%08X", l_words_to_read, l_norm_address,
+ l_norm_address + l_words_to_read * 8);
+
+ // o_dwords_read will indicate the number of words successfully read. Increment after each read.
+ o_dwords_read = 0;
+
+ for (uint32_t x = 0; x < l_words_to_read; x++)
+ {
+ FAPI_TRY(fapi2::getScom(i_cme_target, EX_CSDR, l_data64), "Error reading data from CSDR");
+ o_data[x] = l_data64();
+ o_dwords_read++;
+ }
+
+
+
+fapi_try_exit:
+ FAPI_INF("< p9_cme_sram_access");
+ return fapi2::current_err;
+}
diff --git a/src/import/chips/p9/procedures/hwp/pm/p9_cme_sram_access.H b/src/import/chips/p9/procedures/hwp/pm/p9_cme_sram_access.H
new file mode 100644
index 000000000..7b64df928
--- /dev/null
+++ b/src/import/chips/p9/procedures/hwp/pm/p9_cme_sram_access.H
@@ -0,0 +1,99 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/import/chips/p9/procedures/hwp/pm/p9_cme_sram_access.H $ */
+/* */
+/* OpenPOWER HostBoot Project */
+/* */
+/* Contributors Listed Below - COPYRIGHT 2015,2017 */
+/* [+] 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 */
+///
+/// @file p9_cme_sram_access.H
+/// @brief Display data from the targetted CME's SRAM array.
+///
+// *HWP HWP Owner : Brian Vanderpool <vanderp@us.ibm.com>
+// *HWP Backup HWP Owner: Greg Still <stillgs@us.ibm.com>
+// *HWP FW Owner : Sangeetha T S <sangeet2@in.ibm.com>
+// *HWP Team : PM
+// *HWP Level : 2
+// *HWP Consumed by : HS:CRO:SBE
+///
+///-----------------------------------------------------------------------------
+
+#ifndef _p9_cme_sram_access_H_
+#define _p9_cme_sram_access_H_
+
+//------------------------------------------------------------------------------
+// Includes
+//------------------------------------------------------------------------------
+
+#include <fapi2.H>
+#include <p9_quad_scom_addresses.H>
+
+#include <p9_pm.H>
+
+
+// function pointer typedef definition for HWP call support
+typedef fapi2::ReturnCode (*p9_cme_sram_access_FP_t) (
+ const fapi2::Target<fapi2::TARGET_TYPE_EX>& i_cme_target,
+ const uint32_t i_start_address,
+ const uint32_t i_length_dword,
+ uint64_t* o_data,
+ uint32_t& o_dwords_read);
+
+extern "C" {
+
+
+// -----------------------------------------------------------------------------
+// Function prototype
+// -----------------------------------------------------------------------------
+
+/// @addtogroup pm_fapi
+/// @{
+
+/// @brief Display data from the targetted CME's SRAM array.
+///
+/// High-level procedure flow:
+///
+///
+/// Procedure Prereq:
+/// - System clocks are running
+/// - CME to display is enabled and unfenced
+/// Note that the address does not wrap if the length + starting address exceeds the maximum address
+///
+/// @param [in] i_cme_target EX target
+/// @param [in] i_start_address Start Address is between 0xFFFF80000 and 0xFFFFFFFF and must be 8B aligned
+/// @param [in] i_length_dword Length in dwords (# of accesses)
+/// @param [out] o_data Output Data
+/// @param [out] o_dwords_read Number of actual words in the output buffer.
+
+///
+/// @retval FAPI2_RC_SUCCESS
+/// @retval RC_PROCPM_GPE_CODE_BAD_MODE
+ fapi2::ReturnCode p9_cme_sram_access(
+ const fapi2::Target<fapi2::TARGET_TYPE_EX>& i_cme_target,
+ const uint32_t i_start_address,
+ const uint32_t i_length_dword,
+ uint64_t* o_data,
+ uint32_t& o_dwords_read);
+
+/// @} end addtogroup
+
+} // extern "C"
+
+#endif // _p9_cme_sram_access_H_
diff --git a/src/import/chips/p9/procedures/hwp/pm/p9_cme_sram_access.mk b/src/import/chips/p9/procedures/hwp/pm/p9_cme_sram_access.mk
new file mode 100644
index 000000000..adea041d8
--- /dev/null
+++ b/src/import/chips/p9/procedures/hwp/pm/p9_cme_sram_access.mk
@@ -0,0 +1,27 @@
+# IBM_PROLOG_BEGIN_TAG
+# This is an automatically generated prolog.
+#
+# $Source: src/import/chips/p9/procedures/hwp/pm/p9_cme_sram_access.mk $
+#
+# OpenPOWER HostBoot Project
+#
+# Contributors Listed Below - COPYRIGHT 2015,2017
+# [+] 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
+PROCEDURE=p9_cme_sram_access
+#$(call ADD_MODULE_SRCDIR,$(PROCEDURE),$(ROOTPATH)/chips/p9/procedures/hwp/lib)
+$(call BUILD_PROCEDURE)
diff --git a/src/import/chips/p9/procedures/xml/error_info/p9_cme_sram_access_errors.xml b/src/import/chips/p9/procedures/xml/error_info/p9_cme_sram_access_errors.xml
new file mode 100644
index 000000000..05a485bc4
--- /dev/null
+++ b/src/import/chips/p9/procedures/xml/error_info/p9_cme_sram_access_errors.xml
@@ -0,0 +1,38 @@
+<!-- IBM_PROLOG_BEGIN_TAG -->
+<!-- This is an automatically generated prolog. -->
+<!-- -->
+<!-- $Source: src/import/chips/p9/procedures/xml/error_info/p9_cme_sram_access_errors.xml $ -->
+<!-- -->
+<!-- OpenPOWER HostBoot Project -->
+<!-- -->
+<!-- Contributors Listed Below - COPYRIGHT 2015,2017 -->
+<!-- [+] 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 -->
+<!-- Error definitions for p9_cme_sram_access procedure -->
+<hwpErrors>
+ <!-- *********************************************************************-->
+ <hwpError>
+ <rc>RC_CME_SRAM_ACCESS_ERROR</rc>
+ <description>Incorrect Address passed to CME SRAM Display routine
+ </description>
+ <ffdc>ADDRESS</ffdc>
+ <callout>
+ <procedure>CODE</procedure>
+ <priority>HIGH</priority>
+ </callout>
+ </hwpError>
+</hwpErrors>
OpenPOWER on IntegriCloud