From 9d2ec2e0b69e81d5925e363f3a4e0b6cfaefb7e7 Mon Sep 17 00:00:00 2001 From: Beata Michalska Date: Tue, 20 Dec 2022 20:29:23 +0000 Subject: [PATCH] ANDROID: dma-ops: Add restricted vendor hook Add a vendor hook to arch_setup_dma_ops to allow vendors to perform any necessary post-actions on setting up DMA ops for a given device, focusing mainly on enabling those to opt-in for the Cortex-A510 erratum 2454944. Bug: 263236925 Change-Id: I6fd4d3a30829437fc113ec15ca2e5d060a38e60c Signed-off-by: Beata Michalska --- arch/arm64/mm/dma-mapping.c | 4 ++++ drivers/android/vendor_hooks.c | 2 ++ include/trace/hooks/dma_noalias.h | 19 +++++++++++++++++++ 3 files changed, 25 insertions(+) create mode 100644 include/trace/hooks/dma_noalias.h diff --git a/arch/arm64/mm/dma-mapping.c b/arch/arm64/mm/dma-mapping.c index e75e5e75b192..19ceea8fea1a 100644 --- a/arch/arm64/mm/dma-mapping.c +++ b/arch/arm64/mm/dma-mapping.c @@ -11,6 +11,7 @@ #include #include #include +#include #include @@ -56,6 +57,9 @@ void arch_setup_dma_ops(struct device *dev, u64 dma_base, u64 size, trace_android_rvh_iommu_setup_dma_ops(dev, dma_base, size); } + /* Allow vendor modules to opt-in for the 2454944 erratum workaround */ + trace_android_rvh_setup_dma_ops(dev); + #ifdef CONFIG_XEN if (xen_initial_domain()) dev->dma_ops = &xen_swiotlb_dma_ops; diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index 3ff54d2aa04d..18ef4406879f 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -42,6 +42,7 @@ #include #include #include +#include #include #include #include @@ -210,6 +211,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_die_kernel_fault); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_do_sea); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_do_mem_abort); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_do_sp_pc_abort); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_setup_dma_ops); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_iommu_setup_dma_ops); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_iommu_setup_dma_ops); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_iommu_alloc_iova); diff --git a/include/trace/hooks/dma_noalias.h b/include/trace/hooks/dma_noalias.h new file mode 100644 index 000000000000..2dc7b04d9ab2 --- /dev/null +++ b/include/trace/hooks/dma_noalias.h @@ -0,0 +1,19 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM dma_noalias + +#define TRACE_INCLUDE_PATH trace/hooks + +#if !defined(_TRACE_HOOK_DMA_NOALIAS_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_HOOK_DMA_NOALIAS_H + +#include + +DECLARE_RESTRICTED_HOOK(android_rvh_setup_dma_ops, + TP_PROTO(struct device *dev), + TP_ARGS(dev), 1); + +#endif /*_TRACE_HOOK_DMA_NOALIAS_H */ + +/* This part must be outside protection */ +#include