summaryrefslogtreecommitdiffstats
path: root/src/import/chips/p9/procedures/hwp
diff options
context:
space:
mode:
authorBen Gass <bgass@us.ibm.com>2018-08-31 12:42:39 -0500
committerChristian R. Geddes <crgeddes@us.ibm.com>2018-10-18 11:13:33 -0500
commit7504dc6275e7da30b0ce064b2af983457950aca7 (patch)
treef63852ca87b66989329431128d1191a6437b509e /src/import/chips/p9/procedures/hwp
parente5eb14043e5dee87618875f178c5af0c90f5166a (diff)
downloadtalos-hostboot-7504dc6275e7da30b0ce064b2af983457950aca7.tar.gz
talos-hostboot-7504dc6275e7da30b0ce064b2af983457950aca7.zip
Adding p9a_get/put_mmio and explorer_inband
p9a_get/put_mmio implements getMMIO and putMMIO via the ADU. explorer_inband implements functions to access MSCC MMIO registers, MSCC RAM space for commands and responses, and IBM scom registers via inband/mmio to Explorer. Change-Id: I7b0213b1cb426b10f2902e06373295986e01cd9b Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/65569 Tested-by: Hostboot CI <hostboot-ci+hostboot@us.ibm.com> Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Reviewed-by: STEPHEN GLANCY <sglancy@us.ibm.com> Reviewed-by: Louis Stermole <stermole@us.ibm.com> Reviewed-by: Matt K. Light <mklight@us.ibm.com> Reviewed-by: Jennifer A. Stofer <stofer@us.ibm.com> Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/66608 Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Reviewed-by: Christian R. Geddes <crgeddes@us.ibm.com>
Diffstat (limited to 'src/import/chips/p9/procedures/hwp')
-rw-r--r--src/import/chips/p9/procedures/hwp/nest/p9a_get_mmio.C129
-rw-r--r--src/import/chips/p9/procedures/hwp/nest/p9a_get_mmio.H73
-rw-r--r--src/import/chips/p9/procedures/hwp/nest/p9a_get_mmio.mk31
-rw-r--r--src/import/chips/p9/procedures/hwp/nest/p9a_mmio_util.C60
-rw-r--r--src/import/chips/p9/procedures/hwp/nest/p9a_mmio_util.H52
-rw-r--r--src/import/chips/p9/procedures/hwp/nest/p9a_mmio_util.mk26
-rw-r--r--src/import/chips/p9/procedures/hwp/nest/p9a_put_mmio.C129
-rw-r--r--src/import/chips/p9/procedures/hwp/nest/p9a_put_mmio.H73
-rw-r--r--src/import/chips/p9/procedures/hwp/nest/p9a_put_mmio.mk31
9 files changed, 604 insertions, 0 deletions
diff --git a/src/import/chips/p9/procedures/hwp/nest/p9a_get_mmio.C b/src/import/chips/p9/procedures/hwp/nest/p9a_get_mmio.C
new file mode 100644
index 000000000..c2cb8d8ef
--- /dev/null
+++ b/src/import/chips/p9/procedures/hwp/nest/p9a_get_mmio.C
@@ -0,0 +1,129 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/import/chips/p9/procedures/hwp/nest/p9a_get_mmio.C $ */
+/* */
+/* OpenPOWER HostBoot Project */
+/* */
+/* Contributors Listed Below - COPYRIGHT 2018 */
+/* [+] 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 p9a_get_mmio.C
+/// @brief Implement getMMIO via ADU
+//
+// *HWP HWP Owner: Ben Gass bgass@us.ibm.com
+// *HWP FW Owner: Daniel Crowell dcrowell@us.ibm.com
+// *HWP Team: Nest
+// *HWP Level: 2
+// *HWP Consumed by: HB
+
+#include <p9a_get_mmio.H>
+#include <p9a_mmio_util.H>
+#include <p9_adu_setup.H>
+#include <p9_adu_access.H>
+#include <p9_adu_coherent_utils.H>
+
+/// @brief Reads data via mmio from the target
+///
+/// @param[in] i_target HW target to operate on.
+/// @param[in] i_mmioAddr Address to read, relative to this Target's system
+/// MMIO address.
+/// @param[in] i_transSize The transaction size.
+/// @param[out] o_data Buffer that holds data read from HW target.
+/// The size of the buffer determines the number of
+/// amount of bytes that are read.
+/// @return fapi2::ReturnCode. FAPI2_RC_SUCCESS if success, else error code.
+fapi2::ReturnCode p9a_get_mmio(const fapi2::Target<fapi2::TARGET_TYPE_OCMB_CHIP>& i_target,
+ const uint64_t i_mmioAddr,
+ const size_t i_transSize,
+ std::vector<uint8_t>& o_data)
+{
+ uint8_t data[8];
+ uint8_t l_idx;
+ uint8_t l_data_idx;
+ uint32_t l_max_grans;
+ uint32_t l_grans;
+ p9_ADU_oper_flag l_myAduFlag;
+ uint64_t l_addr = i_mmioAddr;
+ fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP> l_proc_target;
+ uint32_t l_i = 0;
+ const auto l_size = o_data.size();
+ char l_hexdata[(l_size * 2) + 1];
+
+ const uint32_t l_tsize = static_cast<uint32_t>(i_transSize);
+
+ FAPI_ASSERT(l_tsize == 4 || l_tsize == 8,
+ fapi2::P9A_MMIO_BAD_SIZE_ERR()
+ .set_TARGET(i_target)
+ .set_SIZE(l_tsize),
+ "Incorrect MMIO size");
+
+ l_grans = (l_size / l_tsize);
+
+ if ((l_size % l_tsize) > 0)
+ {
+ l_grans++;
+ }
+
+ FAPI_TRY(addOMIBase(i_target, l_addr));
+ FAPI_INF("Read address: 0x%lX transaction size: %d", l_addr, l_tsize);
+
+ l_proc_target = i_target.getParent<fapi2::TARGET_TYPE_OMI>().getParent<fapi2::TARGET_TYPE_PROC_CHIP>();
+
+ l_myAduFlag.setOperationType(p9_ADU_oper_flag::CACHE_INHIBIT);
+ l_myAduFlag.setAutoIncrement(true);
+ l_myAduFlag.setTransactionSize(static_cast<p9_ADU_oper_flag::Transaction_size_t>(l_tsize));
+
+ l_data_idx = 0;
+
+ while (l_data_idx < l_size)
+ {
+ FAPI_TRY(p9_adu_setup(l_proc_target, l_addr, true, l_myAduFlag.setFlag(), l_max_grans));
+
+ while (l_grans > 0 && l_max_grans > 0)
+ {
+ FAPI_TRY(p9_adu_access(l_proc_target, l_addr, true, l_myAduFlag.setFlag(),
+ l_data_idx == 0, // The first transaction
+ l_grans == 1, // The last transaction
+ data));
+
+ for (l_idx = (l_addr & 0x4) ; l_idx < 8 && l_data_idx < l_size; l_idx++)
+ {
+ o_data[l_data_idx] = data[l_idx];
+ l_data_idx++;
+ }
+
+ l_grans--;
+ l_max_grans--;
+ l_addr += l_tsize;
+ }
+ }
+
+ for (l_i = 0; l_i < l_size; l_i++)
+ {
+ sprintf(&l_hexdata[l_i * 2], "%02X", o_data[l_i]);
+ }
+
+ FAPI_INF("Read data: 0x%s", l_hexdata);
+
+fapi_try_exit:
+
+ FAPI_DBG("Exiting with return code : 0x%08X...", (uint64_t) fapi2::current_err);
+ return fapi2::current_err;
+}
diff --git a/src/import/chips/p9/procedures/hwp/nest/p9a_get_mmio.H b/src/import/chips/p9/procedures/hwp/nest/p9a_get_mmio.H
new file mode 100644
index 000000000..8e0d482d9
--- /dev/null
+++ b/src/import/chips/p9/procedures/hwp/nest/p9a_get_mmio.H
@@ -0,0 +1,73 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/import/chips/p9/procedures/hwp/nest/p9a_get_mmio.H $ */
+/* */
+/* OpenPOWER HostBoot Project */
+/* */
+/* Contributors Listed Below - COPYRIGHT 2018 */
+/* [+] 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 p9a_get_mmio.H
+/// @brief Implement getMMIO via ADU
+//
+// *HWP HWP Owner: Ben Gass bgass@us.ibm.com
+// *HWP FW Owner: Daniel Crowell dcrowell@us.ibm.com
+// *HWP Team: Nest
+// *HWP Level: 2
+// *HWP Consumed by: HB
+//
+
+#ifndef _P9A_GET_MMIO_H__
+#define _P9A_GET_MMIO_H__
+
+#include <fapi2.H>
+#include <vector>
+
+/// function pointer typedef definition for HWP call support
+typedef fapi2::ReturnCode (*p9a_get_mmio_FP_t)
+(const fapi2::Target<fapi2::TARGET_TYPE_OCMB_CHIP>&,
+ const uint64_t,
+ const size_t,
+ std::vector<uint8_t>&);
+
+//------------------------------------------------------------------------------
+// Function prototypes
+//------------------------------------------------------------------------------
+
+extern "C"
+{
+
+/// @brief Reads data via mmio from the target
+///
+/// @param[in] i_target HW target to operate on.
+/// @param[in] i_mmioAddr Address to read, relative to this Target's system
+/// MMIO address.
+/// @param[in] i_transSize The transaction size.
+/// @param[out] o_data Buffer that holds data read from HW target.
+/// The size of the buffer determines the number of
+/// amount of bytes that are read.
+/// @return fapi2::ReturnCode. FAPI2_RC_SUCCESS if success, else error code.
+ fapi2::ReturnCode p9a_get_mmio(const fapi2::Target<fapi2::TARGET_TYPE_OCMB_CHIP>& i_target,
+ const uint64_t i_mmioAddr,
+ const size_t i_transSize,
+ std::vector<uint8_t>& o_data);
+
+}
+#endif
diff --git a/src/import/chips/p9/procedures/hwp/nest/p9a_get_mmio.mk b/src/import/chips/p9/procedures/hwp/nest/p9a_get_mmio.mk
new file mode 100644
index 000000000..76abb0618
--- /dev/null
+++ b/src/import/chips/p9/procedures/hwp/nest/p9a_get_mmio.mk
@@ -0,0 +1,31 @@
+# IBM_PROLOG_BEGIN_TAG
+# This is an automatically generated prolog.
+#
+# $Source: src/import/chips/p9/procedures/hwp/nest/p9a_get_mmio.mk $
+#
+# OpenPOWER HostBoot Project
+#
+# Contributors Listed Below - COPYRIGHT 2018
+# [+] 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=p9a_get_mmio
+OBJS+=p9a_mmio_util.o
+OBJS+=p9_adu_setup.o
+OBJS+=p9_adu_access.o
+OBJS+=p9_adu_coherent_utils.o
+OBJS+=p9_fbc_utils.o
+$(call BUILD_PROCEDURE)
diff --git a/src/import/chips/p9/procedures/hwp/nest/p9a_mmio_util.C b/src/import/chips/p9/procedures/hwp/nest/p9a_mmio_util.C
new file mode 100644
index 000000000..a1eb3d0dd
--- /dev/null
+++ b/src/import/chips/p9/procedures/hwp/nest/p9a_mmio_util.C
@@ -0,0 +1,60 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/import/chips/p9/procedures/hwp/nest/p9a_mmio_util.C $ */
+/* */
+/* OpenPOWER HostBoot Project */
+/* */
+/* Contributors Listed Below - COPYRIGHT 2018 */
+/* [+] 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 p9a_mmio_util.C
+/// @brief MMIO utility functions
+//
+// *HWP HWP Owner: Ben Gass bgass@us.ibm.com
+// *HWP FW Owner: Daniel Crowell dcrowell@us.ibm.com
+// *HWP Team: Nest
+// *HWP Level: 2
+// *HWP Consumed by: HB
+
+#include <p9a_mmio_util.H>
+#include <p9_adu_setup.H>
+#include <p9_adu_access.H>
+#include <p9_adu_coherent_utils.H>
+
+
+fapi2::ReturnCode addOMIBase(const fapi2::Target<fapi2::TARGET_TYPE_OCMB_CHIP>& i_target,
+ uint64_t& io_mmioAddr)
+{
+ uint64_t l_base_addr;
+
+ fapi2::Target<fapi2::TARGET_TYPE_OMI> l_omi_target = i_target.getParent<fapi2::TARGET_TYPE_OMI>();
+
+ FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_OMI_INBAND_BAR_BASE_ADDR_OFFSET,
+ l_omi_target,
+ l_base_addr),
+ "Error from FAPI_ATTR_GET (ATTR_OMI_INBAND_BAR_BASE_ADDR_OFFSET)");
+
+ io_mmioAddr |= l_base_addr;
+
+fapi_try_exit:
+
+ FAPI_DBG("Exiting with return code : 0x%08X...", (uint64_t) fapi2::current_err);
+ return fapi2::current_err;
+}
diff --git a/src/import/chips/p9/procedures/hwp/nest/p9a_mmio_util.H b/src/import/chips/p9/procedures/hwp/nest/p9a_mmio_util.H
new file mode 100644
index 000000000..550e813a4
--- /dev/null
+++ b/src/import/chips/p9/procedures/hwp/nest/p9a_mmio_util.H
@@ -0,0 +1,52 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/import/chips/p9/procedures/hwp/nest/p9a_mmio_util.H $ */
+/* */
+/* OpenPOWER HostBoot Project */
+/* */
+/* Contributors Listed Below - COPYRIGHT 2018 */
+/* [+] 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 p9a_mmio_util.H
+/// @brief MMIO utility functions
+//
+// *HWP HWP Owner: Ben Gass bgass@us.ibm.com
+// *HWP FW Owner: Daniel Crowell dcrowell@us.ibm.com
+// *HWP Team: Nest
+// *HWP Level: 2
+// *HWP Consumed by: HB
+//
+
+#ifndef _P9A_MMIO_UTIL_H__
+#define _P9A_MMIO_UTIL_H__
+
+#include <fapi2.H>
+#include <vector>
+
+/// @brief Adds the OCMB BAR to the address.
+///
+/// @param[in] i_target HW target to operate on.
+/// @param[inout] io_mmioAddr Address to add bar to
+///
+/// @return fapi2::ReturnCode. FAPI2_RC_SUCCESS if success, else error code.
+fapi2::ReturnCode addOMIBase(const fapi2::Target<fapi2::TARGET_TYPE_OCMB_CHIP>& i_target,
+ uint64_t& io_mmioAddr);
+
+#endif
diff --git a/src/import/chips/p9/procedures/hwp/nest/p9a_mmio_util.mk b/src/import/chips/p9/procedures/hwp/nest/p9a_mmio_util.mk
new file mode 100644
index 000000000..5b68227ad
--- /dev/null
+++ b/src/import/chips/p9/procedures/hwp/nest/p9a_mmio_util.mk
@@ -0,0 +1,26 @@
+# IBM_PROLOG_BEGIN_TAG
+# This is an automatically generated prolog.
+#
+# $Source: src/import/chips/p9/procedures/hwp/nest/p9a_mmio_util.mk $
+#
+# OpenPOWER HostBoot Project
+#
+# Contributors Listed Below - COPYRIGHT 2018
+# [+] 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=p9a_mmio_util
+$(call BUILD_PROCEDURE)
diff --git a/src/import/chips/p9/procedures/hwp/nest/p9a_put_mmio.C b/src/import/chips/p9/procedures/hwp/nest/p9a_put_mmio.C
new file mode 100644
index 000000000..adebd16da
--- /dev/null
+++ b/src/import/chips/p9/procedures/hwp/nest/p9a_put_mmio.C
@@ -0,0 +1,129 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/import/chips/p9/procedures/hwp/nest/p9a_put_mmio.C $ */
+/* */
+/* OpenPOWER HostBoot Project */
+/* */
+/* Contributors Listed Below - COPYRIGHT 2018 */
+/* [+] 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 p9a_put_mmio.C
+/// @brief Implement putMMIO via ADU
+//
+// *HWP HWP Owner: Ben Gass bgass@us.ibm.com
+// *HWP FW Owner: Daniel Crowell dcrowell@us.ibm.com
+// *HWP Team: Nest
+// *HWP Level: 2
+// *HWP Consumed by: HB
+
+#include <p9a_put_mmio.H>
+#include <p9a_mmio_util.H>
+#include <p9_adu_setup.H>
+#include <p9_adu_access.H>
+#include <p9_adu_coherent_utils.H>
+
+/// @brief Writes data via mmio to the target.
+///
+/// @param[in] i_target HW target to operate on.
+/// @param[in] i_mmioAddr Address to read, relative to this Target's system
+/// MMIO address.
+/// @param[in] i_transSize The transaction size.
+/// @param[in] i_data Buffer that holds data to write to the HW target.
+/// The size of the buffer determines the number of
+/// amount of bytes that are written.
+/// @return fapi2::ReturnCode. FAPI2_RC_SUCCESS if success, else error code.
+fapi2::ReturnCode p9a_put_mmio(const fapi2::Target<fapi2::TARGET_TYPE_OCMB_CHIP>& i_target,
+ const uint64_t i_mmioAddr,
+ const size_t i_transSize,
+ const std::vector<uint8_t>& i_data)
+{
+ uint8_t data[8];
+ uint8_t l_idx;
+ uint8_t l_data_idx;
+ uint32_t l_max_grans;
+ uint32_t l_grans;
+ p9_ADU_oper_flag l_myAduFlag;
+ uint64_t l_addr = i_mmioAddr;
+ fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP> l_proc_target;
+
+ auto l_size = i_data.size();
+ char l_hexdata[(l_size * 2) + 1];
+
+ for (uint32_t l_i = 0; l_i < l_size; l_i++)
+ {
+ sprintf(&l_hexdata[l_i * 2], "%02X", i_data[l_i]);
+ }
+
+ uint32_t l_tsize = static_cast<uint32_t>(i_transSize);
+
+ FAPI_ASSERT(l_tsize == 4 || l_tsize == 8,
+ fapi2::P9A_MMIO_BAD_SIZE_ERR()
+ .set_TARGET(i_target)
+ .set_SIZE(l_size),
+ "Incorrect MMIO size");
+
+ l_grans = (l_size / l_tsize);
+
+ if ((l_size % l_tsize) > 0)
+ {
+ l_grans++;
+ }
+
+ FAPI_TRY(addOMIBase(i_target, l_addr));
+ FAPI_INF("Write address: %lX", l_addr);
+ FAPI_INF("Write data: %s", l_hexdata);
+
+ l_proc_target = i_target.getParent<fapi2::TARGET_TYPE_OMI>().getParent<fapi2::TARGET_TYPE_PROC_CHIP>();
+
+ l_myAduFlag.setOperationType(p9_ADU_oper_flag::CACHE_INHIBIT);
+ l_myAduFlag.setAutoIncrement(true);
+ l_myAduFlag.setTransactionSize(static_cast<p9_ADU_oper_flag::Transaction_size_t>(l_tsize));
+
+ l_data_idx = 0;
+
+ while (l_data_idx < l_size)
+ {
+ FAPI_TRY(p9_adu_setup(l_proc_target, l_addr, false, l_myAduFlag.setFlag(), l_max_grans));
+
+ while (l_grans > 0 && l_max_grans > 0)
+ {
+
+ for (l_idx = 0 ; l_idx < l_tsize && l_data_idx < l_size; l_idx++)
+ {
+ data[l_idx + (l_addr & 0x4)] = i_data[l_data_idx];
+ l_data_idx++;
+ }
+
+ FAPI_TRY(p9_adu_access(l_proc_target, l_addr, false, l_myAduFlag.setFlag(),
+ l_data_idx == 0, // The first transaction
+ l_grans == 1, // The last transaction
+ data));
+
+ l_grans--;
+ l_max_grans--;
+ l_addr += l_tsize;
+ }
+ }
+
+fapi_try_exit:
+
+ FAPI_DBG("Exiting with return code : 0x%08X...", (uint64_t) fapi2::current_err);
+ return fapi2::current_err;
+}
diff --git a/src/import/chips/p9/procedures/hwp/nest/p9a_put_mmio.H b/src/import/chips/p9/procedures/hwp/nest/p9a_put_mmio.H
new file mode 100644
index 000000000..befe3fe59
--- /dev/null
+++ b/src/import/chips/p9/procedures/hwp/nest/p9a_put_mmio.H
@@ -0,0 +1,73 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/import/chips/p9/procedures/hwp/nest/p9a_put_mmio.H $ */
+/* */
+/* OpenPOWER HostBoot Project */
+/* */
+/* Contributors Listed Below - COPYRIGHT 2018 */
+/* [+] 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 p9a_put_mmio.H
+/// @brief Implement putMMIO via ADU
+//
+// *HWP HWP Owner: Ben Gass bgass@us.ibm.com
+// *HWP FW Owner: Daniel Crowell dcrowell@us.ibm.com
+// *HWP Team: Nest
+// *HWP Level: 2
+// *HWP Consumed by: HB
+//
+
+#ifndef _P9A_PUT_MMIO_H__
+#define _P9A_PUT_MMIO_H__
+
+#include <fapi2.H>
+#include <vector>
+
+/// function pointer typedef definition for HWP call support
+typedef fapi2::ReturnCode (*p9a_put_mmio_FP_t)
+(const fapi2::Target<fapi2::TARGET_TYPE_OCMB_CHIP>&,
+ const uint64_t,
+ const size_t,
+ const std::vector<uint8_t>&);
+
+//------------------------------------------------------------------------------
+// Function prototypes
+//------------------------------------------------------------------------------
+
+extern "C"
+{
+
+/// @brief Writes data via mmio to the target.
+///
+/// @param[in] i_target HW target to operate on.
+/// @param[in] i_mmioAddr Address to read, relative to this Target's system
+/// MMIO address.
+/// @param[in] i_transSize The transaction size.
+/// @param[in] i_data Buffer that holds data to write to the HW target.
+/// The size of the buffer determines the number of
+/// amount of bytes that are written.
+/// @return fapi2::ReturnCode. FAPI2_RC_SUCCESS if success, else error code.
+ fapi2::ReturnCode p9a_put_mmio(const fapi2::Target<fapi2::TARGET_TYPE_OCMB_CHIP>& i_target,
+ const uint64_t i_mmioAddr,
+ const size_t i_transSize,
+ const std::vector<uint8_t>& i_data);
+
+}
+#endif
diff --git a/src/import/chips/p9/procedures/hwp/nest/p9a_put_mmio.mk b/src/import/chips/p9/procedures/hwp/nest/p9a_put_mmio.mk
new file mode 100644
index 000000000..b5dcf4743
--- /dev/null
+++ b/src/import/chips/p9/procedures/hwp/nest/p9a_put_mmio.mk
@@ -0,0 +1,31 @@
+# IBM_PROLOG_BEGIN_TAG
+# This is an automatically generated prolog.
+#
+# $Source: src/import/chips/p9/procedures/hwp/nest/p9a_put_mmio.mk $
+#
+# OpenPOWER HostBoot Project
+#
+# Contributors Listed Below - COPYRIGHT 2018
+# [+] 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=p9a_put_mmio
+OBJS+=p9a_mmio_util.o
+OBJS+=p9_adu_setup.o
+OBJS+=p9_adu_access.o
+OBJS+=p9_adu_coherent_utils.o
+OBJS+=p9_fbc_utils.o
+$(call BUILD_PROCEDURE)
OpenPOWER on IntegriCloud