/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ /* * * (C) COPYRIGHT 2021 ARM Limited. All rights reserved. * * This program is free software and is provided to you under the terms of the * GNU General Public License version 2 as published by the Free Software * Foundation, and any use by you of this program is subject to the terms * of such GNU license. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, you can access it online at * http://www.gnu.org/licenses/gpl-2.0.html. * */ /** * Concrete implementation of mali_kbase_hwcnt_backend interface for CSF * backend. */ #ifndef _KBASE_HWCNT_BACKEND_CSF_H_ #define _KBASE_HWCNT_BACKEND_CSF_H_ #include "mali_kbase_hwcnt_backend.h" #include "mali_kbase_hwcnt_backend_csf_if.h" /** * kbase_hwcnt_backend_csf_create() - Create a CSF hardware counter backend * interface. * @csf_if: Non-NULL pointer to a hwcnt backend CSF interface structure * used to create backend interface. * @ring_buf_cnt: The buffer count of CSF hwcnt backend, used when allocate ring * buffer, MUST be power of 2. * @iface: Non-NULL pointer to backend interface structure that is filled * in on creation success. * * Calls to iface->dump_enable_nolock() require the CSF Scheduler IRQ lock. * * Return: 0 on success, else error code. */ int kbase_hwcnt_backend_csf_create(struct kbase_hwcnt_backend_csf_if *csf_if, u32 ring_buf_cnt, struct kbase_hwcnt_backend_interface *iface); /** * kbase_hwcnt_backend_csf_metadata_init() - Initialize the metadata for a CSF * hardware counter backend. * @iface: Non-NULL pointer to backend interface structure * Return: 0 on success, else error code. */ int kbase_hwcnt_backend_csf_metadata_init( struct kbase_hwcnt_backend_interface *iface); /** * kbase_hwcnt_backend_csf_metadata_term() - Terminate the metadata for a CSF * hardware counter backend. * @iface: Non-NULL pointer to backend interface structure. */ void kbase_hwcnt_backend_csf_metadata_term( struct kbase_hwcnt_backend_interface *iface); /** * kbase_hwcnt_backend_csf_destroy() - Destroy a CSF hardware counter backend * interface. * @iface: Pointer to interface to destroy. * * Can be safely called on an all-zeroed interface, or on an already destroyed * interface. */ void kbase_hwcnt_backend_csf_destroy( struct kbase_hwcnt_backend_interface *iface); /** * kbase_hwcnt_backend_csf_protm_entered() - CSF HWC backend function to receive * notification that protected mode * has been entered. * @iface: Non-NULL pointer to HWC backend interface. */ void kbase_hwcnt_backend_csf_protm_entered( struct kbase_hwcnt_backend_interface *iface); /** * kbase_hwcnt_backend_csf_protm_exited() - CSF HWC backend function to receive * notification that protected mode has * been exited. * @iface: Non-NULL pointer to HWC backend interface. */ void kbase_hwcnt_backend_csf_protm_exited( struct kbase_hwcnt_backend_interface *iface); /** * kbase_hwcnt_backend_csf_on_unrecoverable_error() - CSF HWC backend function * called when unrecoverable * errors are detected. * @iface: Non-NULL pointer to HWC backend interface. * * This should be called on encountering errors that can only be recovered from * with reset, or that may put HWC logic in state that could result in hang. For * example, on bus error, or when FW becomes unresponsive. */ void kbase_hwcnt_backend_csf_on_unrecoverable_error( struct kbase_hwcnt_backend_interface *iface); /** * kbase_hwcnt_backend_csf_on_before_reset() - CSF HWC backend function to be * called immediately before a * reset. Takes us out of the * unrecoverable error state, if we * were in it. * @iface: Non-NULL pointer to HWC backend interface. */ void kbase_hwcnt_backend_csf_on_before_reset( struct kbase_hwcnt_backend_interface *iface); /** * kbase_hwcnt_backend_csf_on_prfcnt_sample() - CSF performance counter sample * complete interrupt handler. * @iface: Non-NULL pointer to HWC backend interface. */ void kbase_hwcnt_backend_csf_on_prfcnt_sample( struct kbase_hwcnt_backend_interface *iface); /** * kbase_hwcnt_backend_csf_on_prfcnt_threshold() - CSF performance counter * buffer reach threshold * interrupt handler. * @iface: Non-NULL pointer to HWC backend interface. */ void kbase_hwcnt_backend_csf_on_prfcnt_threshold( struct kbase_hwcnt_backend_interface *iface); /** * kbase_hwcnt_backend_csf_on_prfcnt_overflow() - CSF performance counter buffer * overflow interrupt handler. * @iface: Non-NULL pointer to HWC backend interface. */ void kbase_hwcnt_backend_csf_on_prfcnt_overflow( struct kbase_hwcnt_backend_interface *iface); /** * kbase_hwcnt_backend_csf_on_prfcnt_enable() - CSF performance counter enabled * interrupt handler. * @iface: Non-NULL pointer to HWC backend interface. */ void kbase_hwcnt_backend_csf_on_prfcnt_enable( struct kbase_hwcnt_backend_interface *iface); /** * kbase_hwcnt_backend_csf_on_prfcnt_disable() - CSF performance counter * disabled interrupt handler. * @iface: Non-NULL pointer to HWC backend interface. */ void kbase_hwcnt_backend_csf_on_prfcnt_disable( struct kbase_hwcnt_backend_interface *iface); #endif /* _KBASE_HWCNT_BACKEND_CSF_H_ */