blob: 8d186dbf4711ff46810a7e3d2c3eb80932458134 [file]
From 0a7fef0226aa23701f803c6c896708f50fdb74b2 Mon Sep 17 00:00:00 2001
From: "qiankun.wang" <qiankun.wang@amlogic.com>
Date: Thu, 11 May 2023 15:08:24 +0800
Subject: [PATCH] iotrace: support iotrace driver [1/1]
PD#SWPL-114632
Problem:
support iotrace driver
Solution:
support iotrace
Verify:
on s4d_ap222 and c2_af400
Change-Id: Id4dc4f64d886dc551f32d776ebaa2c9c2d5650b0
Signed-off-by: qiankun.wang <qiankun.wang@amlogic.com>
---
arch/arm/include/asm/io.h | 12 ++++++++----
arch/arm64/include/asm/io.h | 7 +++++++
arch/arm64/kernel/image-vars.h | 5 +++++
arch/arm64/kernel/io.c | 6 ++++++
drivers/irqchip/irq-gic.c | 3 +++
fs/pstore/ram_core.c | 3 +++
6 files changed, 32 insertions(+), 4 deletions(-)
diff --git a/arch/arm/include/asm/io.h b/arch/arm/include/asm/io.h
index 79d246ac93ab..b38c3d5f5b39 100644
--- a/arch/arm/include/asm/io.h
+++ b/arch/arm/include/asm/io.h
@@ -50,6 +50,11 @@ void __raw_readsb(const volatile void __iomem *addr, void *data, int bytelen);
void __raw_readsw(const volatile void __iomem *addr, void *data, int wordlen);
void __raw_readsl(const volatile void __iomem *addr, void *data, int longlen);
+#if IS_BUILTIN(CONFIG_AMLOGIC_DEBUG_IOTRACE)
+#include <linux/amlogic/io_32.h>
+#elif IS_MODULE(CONFIG_AMLOGIC_DEBUG_IOTRACE) && defined(MODULE)
+#include <linux/amlogic/io_32.h>
+#else
#if __LINUX_ARM_ARCH__ < 6
/*
* Half-word accesses are problematic with RiscPC due to limitations of
@@ -115,7 +120,7 @@ static inline u32 __raw_readl(const volatile void __iomem *addr)
: "Qo" (*(volatile u32 __force *)addr));
return val;
}
-
+#endif /* CONFIG_AMLOGIC_DEBUG_IOTRACE */
/*
* Architecture ioremap implementation.
*/
@@ -338,12 +343,11 @@ static inline void memcpy_toio(volatile void __iomem *to, const void *from,
mmiocpy((void __force *)to, from, count);
}
#define memcpy_toio(to,from,count) memcpy_toio(to,from,count)
-
-#else
+#else /* __ARMBE__ */
#define memset_io(c,v,l) _memset_io(c,(v),(l))
#define memcpy_fromio(a,c,l) _memcpy_fromio((a),c,(l))
#define memcpy_toio(c,a,l) _memcpy_toio(c,(a),(l))
-#endif
+#endif /*__ARMBE__ */
#endif /* readl */
diff --git a/arch/arm64/include/asm/io.h b/arch/arm64/include/asm/io.h
index 3995652daf81..aff15597d672 100644
--- a/arch/arm64/include/asm/io.h
+++ b/arch/arm64/include/asm/io.h
@@ -18,6 +18,12 @@
#include <asm/alternative.h>
#include <asm/cpufeature.h>
+/* builtin code include iotrace can cause some symbols crc changed */
+#if IS_BUILTIN(CONFIG_AMLOGIC_DEBUG_IOTRACE)
+#include <linux/amlogic/io_64.h>
+#elif (IS_MODULE(CONFIG_AMLOGIC_DEBUG_IOTRACE)) && defined(MODULE)
+#include <linux/amlogic/io_64.h>
+#else
/*
* Generic IO read/write. These perform native-endian accesses.
*/
@@ -89,6 +95,7 @@ static inline u64 __raw_readq(const volatile void __iomem *addr)
: "=r" (val) : "r" (addr));
return val;
}
+#endif
/* IO barriers */
#define __iormb(v) \
diff --git a/arch/arm64/kernel/image-vars.h b/arch/arm64/kernel/image-vars.h
index 41a068e9ce5e..dda0961a7382 100644
--- a/arch/arm64/kernel/image-vars.h
+++ b/arch/arm64/kernel/image-vars.h
@@ -138,6 +138,11 @@ KVM_NVHE_ALIAS(kvm_protected_mode_initialized);
KVM_NVHE_ALIAS(pkvm_force_nc);
#endif
+#if IS_BUILTIN(CONFIG_AMLOGIC_BGKI_DEBUG_IOTRACE)
+KVM_NVHE_ALIAS(pstore_io_save);
+KVM_NVHE_ALIAS(vabits_actual);
+#endif
+
#endif /* CONFIG_KVM */
#endif /* __ARM64_KERNEL_IMAGE_VARS_H */
diff --git a/arch/arm64/kernel/io.c b/arch/arm64/kernel/io.c
index aa7a4ec6a3ae..9186cd23516d 100644
--- a/arch/arm64/kernel/io.c
+++ b/arch/arm64/kernel/io.c
@@ -7,7 +7,13 @@
#include <linux/export.h>
#include <linux/types.h>
+#if IS_BUILTIN(CONFIG_AMLOGIC_DEBUG_IOTRACE)
+#define SKIP_IO_TRACE
#include <linux/io.h>
+#undef SKIP_IO_TRACE
+#else
+#include <linux/io.h>
+#endif
/*
* Copy data from IO memory space to "real" memory space.
diff --git a/drivers/irqchip/irq-gic.c b/drivers/irqchip/irq-gic.c
index a02bdad09318..50041c044a1a 100644
--- a/drivers/irqchip/irq-gic.c
+++ b/drivers/irqchip/irq-gic.c
@@ -17,6 +17,9 @@
* As such, the enable set/clear, pending set/clear and active bit
* registers are banked per-cpu for these sources.
*/
+#if IS_BUILTIN(CONFIG_AMLOGIC_DEBUG_IOTRACE)
+#define SKIP_IO_TRACE
+#endif
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/err.h>
diff --git a/fs/pstore/ram_core.c b/fs/pstore/ram_core.c
index 155c7010b1f8..4f0c82f0e590 100644
--- a/fs/pstore/ram_core.c
+++ b/fs/pstore/ram_core.c
@@ -5,6 +5,9 @@
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+#if IS_BUILTIN(CONFIG_AMLOGIC_DEBUG_IOTRACE)
+#define SKIP_IO_TRACE
+#endif
#include <linux/device.h>
#include <linux/err.h>
#include <linux/errno.h>
--
2.25.1