diff options
author | Ben Gass <bgass@us.ibm.com> | 2018-08-31 12:42:39 -0500 |
---|---|---|
committer | Christian R. Geddes <crgeddes@us.ibm.com> | 2018-10-18 11:13:33 -0500 |
commit | 7504dc6275e7da30b0ce064b2af983457950aca7 (patch) | |
tree | f63852ca87b66989329431128d1191a6437b509e /src/import/chips/p9/procedures/hwp | |
parent | e5eb14043e5dee87618875f178c5af0c90f5166a (diff) | |
download | talos-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')
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) |