diff options
| author | Corey Swenson <cswenson@us.ibm.com> | 2018-03-23 10:49:35 -0500 |
|---|---|---|
| committer | Daniel M. Crowell <dcrowell@us.ibm.com> | 2018-04-02 13:44:41 -0400 |
| commit | b51298075aee402dbcef485088cfa71a6ca61725 (patch) | |
| tree | 21bd59df20830b108f6b3f6dd835915c28691ec7 /src/usr/ibscom/runtime | |
| parent | 55f0053bc34e10d118e383f782b7be5cb14f59d2 (diff) | |
| download | talos-hostboot-b51298075aee402dbcef485088cfa71a6ca61725.tar.gz talos-hostboot-b51298075aee402dbcef485088cfa71a6ca61725.zip | |
Add ibscom runtime support
- Add ibscom runtime files
- Make ibscom multicast workaround common
- Call from ibscom rt_ibscom
- Make scom sanity check common
- Call from xscom rt_xscom ibscom rt_ibscom
RTC:190144
Change-Id: Ia52feac596ff6b6c8fb9f0db4493f35e4ee837af
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/56215
Tested-by: Jenkins Server <pfd-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>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Reviewed-by: Martin Gloff <mgloff@us.ibm.com>
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/usr/ibscom/runtime')
| -rw-r--r-- | src/usr/ibscom/runtime/makefile | 38 | ||||
| -rw-r--r-- | src/usr/ibscom/runtime/rt_ibscom.C | 114 |
2 files changed, 152 insertions, 0 deletions
diff --git a/src/usr/ibscom/runtime/makefile b/src/usr/ibscom/runtime/makefile new file mode 100644 index 000000000..ba45c1b5e --- /dev/null +++ b/src/usr/ibscom/runtime/makefile @@ -0,0 +1,38 @@ +# IBM_PROLOG_BEGIN_TAG +# This is an automatically generated prolog. +# +# $Source: src/usr/ibscom/runtime/makefile $ +# +# OpenPOWER HostBoot Project +# +# Contributors Listed Below - COPYRIGHT 2013,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 +HOSTBOOT_RUNTIME = 1 +ROOTPATH = ../../../.. +MODULE = ibscom_rt + +#include common ojects between hostboot and runtime hostboot +include ../ibscom.mk + +#include unique object modules +OBJS += rt_ibscom.o + +#SUBDIRS += test.d + +VPATH += .. +include $(ROOTPATH)/config.mk diff --git a/src/usr/ibscom/runtime/rt_ibscom.C b/src/usr/ibscom/runtime/rt_ibscom.C new file mode 100644 index 000000000..d731f1acc --- /dev/null +++ b/src/usr/ibscom/runtime/rt_ibscom.C @@ -0,0 +1,114 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/ibscom/runtime/rt_ibscom.C $ */ +/* */ +/* OpenPOWER HostBoot Project */ +/* */ +/* Contributors Listed Below - COPYRIGHT 2013,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 */ +#include <devicefw/driverif.H> +#include <trace/interface.H> +#include <errl/errlentry.H> +#include <errl/errlmanager.H> +#include <ibscom/ibscomreasoncodes.H> +#include "../ibscom.H" +#include <scom/scomif.H> +#include <scom/runtime/rt_scomif.H> +#include <ibscom/ibscomif.H> + +// Trace definition +trace_desc_t* g_trac_ibscom = NULL; +TRAC_INIT(&g_trac_ibscom, "IBSCOM", 2*KILOBYTE, TRACE::BUFFER_SLOW); + +namespace IBSCOM +{ + +DEVICE_REGISTER_ROUTE(DeviceFW::WILDCARD, + DeviceFW::IBSCOM, + TARGETING::TYPE_MEMBUF, + ibscomPerformOp); + + +/** + * @brief Complete the ibscom op + * + * @param[in] i_opType Operation type, see driverif.H + * @param[in] i_target IBSCom target + * @param[in/out] io_buffer Read: Pointer to output data storage + * Write: Pointer to input data storage + * @param[in/out] io_buflen Input: size of io_buffer (in bytes) + * Output: Read: Size of output data + * Write: Size of data written + * @param[in] i_accessType Access type + * @param[in] i_args This is an argument list for DD framework. + * In this function, there's only one argument, + * which is the MMIO IBSCom address + * @return errlHndl_t + */ +errlHndl_t ibscomPerformOp(DeviceFW::OperationType i_opType, + TARGETING::Target* i_target, + void* io_buffer, + size_t& io_buflen, + int64_t i_accessType, + va_list i_args) +{ + TRACDCOMP(g_trac_ibscom,ENTER_MRK"ibscomPerformOp"); + errlHndl_t l_err = NULL; + uint64_t l_addr = va_arg(i_args,uint64_t); + + do + { + l_err = SCOM::scomOpSanityCheck(i_opType, + i_target, + io_buffer, + io_buflen, + l_addr, + IBSCOM_BUFFER_SIZE); + if( l_err ) + { + // Trace here - sanity check does not know scom type + TRACFCOMP(g_trac_ibscom,"Runtime IBScom sanity check failed"); + break; + } + + // Multicast is not handled correctly by inband scom + // Call workaround to complete manually + bool l_didWorkaround = false; + l_err = doIBScomMulticast(i_opType, + i_target, + io_buffer, + io_buflen, + l_addr, + l_didWorkaround); + if( l_err || l_didWorkaround ) + { + break; + } + + l_err = SCOM::sendScomToHyp(i_opType, i_target, l_addr, io_buffer); + + } while(0); + + TRACDCOMP(g_trac_ibscom,EXIT_MRK"ibscomPerformOp"); + + return l_err; +} + +}; // end namespace IBSCOM + |

