mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-04 18:09:57 +00:00
![Rob Clark](/assets/img/avatar_default.png)
This interface will be used for drm/msm to coordinate with the qcom_adreno_smmu_impl to enable/disable TTBR0 translation. Once TTBR0 translation is enabled, the GPU's CP (Command Processor) will directly switch TTBR0 pgtables (and do the necessary TLB inv) synchronized to the GPU's operation. But help from the SMMU driver is needed to initially bootstrap TTBR0 translation, which cannot be done from the GPU. Since this is a very special case, a private interface is used to avoid adding highly driver specific things to the public iommu interface. Signed-off-by: Rob Clark <robdclark@chromium.org> Reviewed-by: Jordan Crouse <jcrouse@codeaurora.org> Reviewed-by: Bjorn Andersson <bjorn.andersson@linaro.org>
36 lines
No EOL
1.3 KiB
C
36 lines
No EOL
1.3 KiB
C
// SPDX-License-Identifier: GPL-2.0-only
|
|
/*
|
|
* Copyright (C) 2020 Google, Inc
|
|
*/
|
|
|
|
#ifndef __ADRENO_SMMU_PRIV_H
|
|
#define __ADRENO_SMMU_PRIV_H
|
|
|
|
#include <linux/io-pgtable.h>
|
|
|
|
/**
|
|
* struct adreno_smmu_priv - private interface between adreno-smmu and GPU
|
|
*
|
|
* @cookie: An opque token provided by adreno-smmu and passed
|
|
* back into the callbacks
|
|
* @get_ttbr1_cfg: Get the TTBR1 config for the GPUs context-bank
|
|
* @set_ttbr0_cfg: Set the TTBR0 config for the GPUs context bank. A
|
|
* NULL config disables TTBR0 translation, otherwise
|
|
* TTBR0 translation is enabled with the specified cfg
|
|
*
|
|
* The GPU driver (drm/msm) and adreno-smmu work together for controlling
|
|
* the GPU's SMMU instance. This is by necessity, as the GPU is directly
|
|
* updating the SMMU for context switches, while on the other hand we do
|
|
* not want to duplicate all of the initial setup logic from arm-smmu.
|
|
*
|
|
* This private interface is used for the two drivers to coordinate. The
|
|
* cookie and callback functions are populated when the GPU driver attaches
|
|
* it's domain.
|
|
*/
|
|
struct adreno_smmu_priv {
|
|
const void *cookie;
|
|
const struct io_pgtable_cfg *(*get_ttbr1_cfg)(const void *cookie);
|
|
int (*set_ttbr0_cfg)(const void *cookie, const struct io_pgtable_cfg *cfg);
|
|
};
|
|
|
|
#endif /* __ADRENO_SMMU_PRIV_H */ |