// SPDX-License-Identifier: GPL-2.0 // // Copyright (c) 2019 MediaTek Inc. #include <asm/barrier.h> #include <linux/clk.h> #include <linux/err.h> #include <linux/io.h> #include <linux/iopoll.h> #include <linux/kernel.h> #include <linux/module.h> #include <linux/platform_device.h> #include <linux/time64.h> #include <linux/remoteproc/mtk_scp.h> #include "mtk_common.h" #define SCP_TIMEOUT_US … /** * scp_ipi_register() - register an ipi function * * @scp: mtk_scp structure * @id: IPI ID * @handler: IPI handler * @priv: private data for IPI handler * * Register an ipi function to receive ipi interrupt from SCP. * * Return: 0 if ipi registers successfully, -error on error. */ int scp_ipi_register(struct mtk_scp *scp, u32 id, scp_ipi_handler_t handler, void *priv) { … } EXPORT_SYMBOL_GPL(…); /** * scp_ipi_unregister() - unregister an ipi function * * @scp: mtk_scp structure * @id: IPI ID * * Unregister an ipi function to receive ipi interrupt from SCP. */ void scp_ipi_unregister(struct mtk_scp *scp, u32 id) { … } EXPORT_SYMBOL_GPL(…); /* * scp_memcpy_aligned() - Copy src to dst, where dst is in SCP SRAM region. * * @dst: Pointer to the destination buffer, should be in SCP SRAM region. * @src: Pointer to the source buffer. * @len: Length of the source buffer to be copied. * * Since AP access of SCP SRAM don't support byte write, this always write a * full word at a time, and may cause some extra bytes to be written at the * beginning & ending of dst. */ void scp_memcpy_aligned(void __iomem *dst, const void *src, unsigned int len) { … } EXPORT_SYMBOL_GPL(…); /** * scp_ipi_lock() - Lock before operations of an IPI ID * * @scp: mtk_scp structure * @id: IPI ID * * Note: This should not be used by drivers other than mtk_scp. */ void scp_ipi_lock(struct mtk_scp *scp, u32 id) { … } EXPORT_SYMBOL_GPL(…); /** * scp_ipi_unlock() - Unlock after operations of an IPI ID * * @scp: mtk_scp structure * @id: IPI ID * * Note: This should not be used by drivers other than mtk_scp. */ void scp_ipi_unlock(struct mtk_scp *scp, u32 id) { … } EXPORT_SYMBOL_GPL(…); /** * scp_ipi_send() - send data from AP to scp. * * @scp: mtk_scp structure * @id: IPI ID * @buf: the data buffer * @len: the data buffer length * @wait: number of msecs to wait for ack. 0 to skip waiting. * * This function is thread-safe. When this function returns, * SCP has received the data and starts the processing. * When the processing completes, IPI handler registered * by scp_ipi_register will be called in interrupt context. * * Return: 0 if sending data successfully, -error on error. **/ int scp_ipi_send(struct mtk_scp *scp, u32 id, void *buf, unsigned int len, unsigned int wait) { … } EXPORT_SYMBOL_GPL(…); MODULE_LICENSE(…) …; MODULE_DESCRIPTION(…) …;