]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
media: platform: amd: low level support for isp4 firmware
authorBin Du <Bin.Du@amd.com>
Wed, 6 May 2026 09:32:44 +0000 (17:32 +0800)
committerSakari Ailus <sakari.ailus@linux.intel.com>
Wed, 6 May 2026 10:48:09 +0000 (13:48 +0300)
Low level functions for accessing the registers and mapping to their
ranges. This change also includes register definitions for ring buffer
used to communicate with ISP Firmware. Ring buffer is the communication
interface between driver and ISP Firmware. Command and responses are
exchanged through the ring buffer.

Co-developed-by: Svetoslav Stoilov <Svetoslav.Stoilov@amd.com>
Signed-off-by: Svetoslav Stoilov <Svetoslav.Stoilov@amd.com>
Signed-off-by: Bin Du <Bin.Du@amd.com>
Reviewed-by: Sultan Alsawaf <sultan@kerneltoast.com>
Tested-by: Alexey Zagorodnikov <xglooom@gmail.com>
Tested-by: Kate Hsuan <hpa@redhat.com>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
MAINTAINERS
drivers/media/platform/amd/isp4/isp4_hw_reg.h [new file with mode: 0644]

index 3b495a4dc786a613d88c814c4bab14cd94e106a6..e2561d95d2513f335061616ca77b0079e16dc50a 100644 (file)
@@ -1164,6 +1164,7 @@ F:        drivers/media/platform/amd/isp4/Kconfig
 F:     drivers/media/platform/amd/isp4/Makefile
 F:     drivers/media/platform/amd/isp4/isp4.c
 F:     drivers/media/platform/amd/isp4/isp4.h
+F:     drivers/media/platform/amd/isp4/isp4_hw_reg.h
 
 AMD KFD
 M:     Felix Kuehling <Felix.Kuehling@amd.com>
diff --git a/drivers/media/platform/amd/isp4/isp4_hw_reg.h b/drivers/media/platform/amd/isp4/isp4_hw_reg.h
new file mode 100644 (file)
index 0000000..09c76f7
--- /dev/null
@@ -0,0 +1,124 @@
+/* SPDX-License-Identifier: GPL-2.0+ */
+/*
+ * Copyright (C) 2025 Advanced Micro Devices, Inc.
+ */
+
+#ifndef _ISP4_HW_REG_H_
+#define _ISP4_HW_REG_H_
+
+#include <linux/io.h>
+
+#define ISP_SOFT_RESET                 0x62000
+#define ISP_SYS_INT0_EN                        0x62010
+#define ISP_SYS_INT0_STATUS            0x62014
+#define ISP_SYS_INT0_ACK               0x62018
+#define ISP_CCPU_CNTL                  0x62054
+#define ISP_STATUS                     0x62058
+#define ISP_LOG_RB_BASE_LO0            0x62148
+#define ISP_LOG_RB_BASE_HI0            0x6214c
+#define ISP_LOG_RB_SIZE0               0x62150
+#define ISP_LOG_RB_RPTR0               0x62154
+#define ISP_LOG_RB_WPTR0               0x62158
+#define ISP_RB_BASE_LO1                        0x62170
+#define ISP_RB_BASE_HI1                        0x62174
+#define ISP_RB_SIZE1                   0x62178
+#define ISP_RB_RPTR1                   0x6217c
+#define ISP_RB_WPTR1                   0x62180
+#define ISP_RB_BASE_LO2                        0x62184
+#define ISP_RB_BASE_HI2                        0x62188
+#define ISP_RB_SIZE2                   0x6218c
+#define ISP_RB_RPTR2                   0x62190
+#define ISP_RB_WPTR2                   0x62194
+#define ISP_RB_BASE_LO3                        0x62198
+#define ISP_RB_BASE_HI3                        0x6219c
+#define ISP_RB_SIZE3                   0x621a0
+#define ISP_RB_RPTR3                   0x621a4
+#define ISP_RB_WPTR3                   0x621a8
+#define ISP_RB_BASE_LO4                        0x621ac
+#define ISP_RB_BASE_HI4                        0x621b0
+#define ISP_RB_SIZE4                   0x621b4
+#define ISP_RB_RPTR4                   0x621b8
+#define ISP_RB_WPTR4                   0x621bc
+#define ISP_RB_BASE_LO5                        0x621c0
+#define ISP_RB_BASE_HI5                        0x621c4
+#define ISP_RB_SIZE5                   0x621c8
+#define ISP_RB_RPTR5                   0x621cc
+#define ISP_RB_WPTR5                   0x621d0
+#define ISP_RB_BASE_LO6                        0x621d4
+#define ISP_RB_BASE_HI6                        0x621d8
+#define ISP_RB_SIZE6                   0x621dc
+#define ISP_RB_RPTR6                   0x621e0
+#define ISP_RB_WPTR6                   0x621e4
+#define ISP_RB_BASE_LO7                        0x621e8
+#define ISP_RB_BASE_HI7                        0x621ec
+#define ISP_RB_SIZE7                   0x621f0
+#define ISP_RB_RPTR7                   0x621f4
+#define ISP_RB_WPTR7                   0x621f8
+#define ISP_RB_BASE_LO8                        0x621fc
+#define ISP_RB_BASE_HI8                        0x62200
+#define ISP_RB_SIZE8                   0x62204
+#define ISP_RB_RPTR8                   0x62208
+#define ISP_RB_WPTR8                   0x6220c
+#define ISP_RB_BASE_LO9                        0x62210
+#define ISP_RB_BASE_HI9                        0x62214
+#define ISP_RB_SIZE9                   0x62218
+#define ISP_RB_RPTR9                   0x6221c
+#define ISP_RB_WPTR9                   0x62220
+#define ISP_RB_BASE_LO10               0x62224
+#define ISP_RB_BASE_HI10               0x62228
+#define ISP_RB_SIZE10                  0x6222c
+#define ISP_RB_RPTR10                  0x62230
+#define ISP_RB_WPTR10                  0x62234
+#define ISP_RB_BASE_LO11               0x62238
+#define ISP_RB_BASE_HI11               0x6223c
+#define ISP_RB_SIZE11                  0x62240
+#define ISP_RB_RPTR11                  0x62244
+#define ISP_RB_WPTR11                  0x62248
+#define ISP_RB_BASE_LO12               0x6224c
+#define ISP_RB_BASE_HI12               0x62250
+#define ISP_RB_SIZE12                  0x62254
+#define ISP_RB_RPTR12                  0x62258
+#define ISP_RB_WPTR12                  0x6225c
+
+#define ISP_POWER_STATUS               0x60000
+
+/* ISP_SOFT_RESET */
+#define ISP_SOFT_RESET__CCPU_SOFT_RESET_MASK                   0x00000001UL
+
+/* ISP_CCPU_CNTL */
+#define ISP_CCPU_CNTL__CCPU_HOST_SOFT_RST_MASK                 0x00040000UL
+
+/* ISP_STATUS */
+#define ISP_STATUS__CCPU_REPORT_MASK                           0x000000feUL
+
+/* ISP_SYS_INT0_STATUS */
+#define ISP_SYS_INT0_STATUS__SYS_INT_RINGBUFFER_WPT9_INT_MASK  0x00010000UL
+#define ISP_SYS_INT0_STATUS__SYS_INT_RINGBUFFER_WPT10_INT_MASK 0x00040000UL
+#define ISP_SYS_INT0_STATUS__SYS_INT_RINGBUFFER_WPT11_INT_MASK 0x00100000UL
+#define ISP_SYS_INT0_STATUS__SYS_INT_RINGBUFFER_WPT12_INT_MASK 0x00400000UL
+
+/* ISP_SYS_INT0_EN */
+#define ISP_SYS_INT0_EN__SYS_INT_RINGBUFFER_WPT9_EN_MASK       0x00010000UL
+#define ISP_SYS_INT0_EN__SYS_INT_RINGBUFFER_WPT10_EN_MASK      0x00040000UL
+#define ISP_SYS_INT0_EN__SYS_INT_RINGBUFFER_WPT11_EN_MASK      0x00100000UL
+#define ISP_SYS_INT0_EN__SYS_INT_RINGBUFFER_WPT12_EN_MASK      0x00400000UL
+
+/* ISP_SYS_INT0_ACK */
+#define ISP_SYS_INT0_ACK__SYS_INT_RINGBUFFER_WPT9_ACK_MASK     0x00010000UL
+#define ISP_SYS_INT0_ACK__SYS_INT_RINGBUFFER_WPT10_ACK_MASK    0x00040000UL
+#define ISP_SYS_INT0_ACK__SYS_INT_RINGBUFFER_WPT11_ACK_MASK    0x00100000UL
+#define ISP_SYS_INT0_ACK__SYS_INT_RINGBUFFER_WPT12_ACK_MASK    0x00400000UL
+
+/* Helper functions for reading isp registers */
+static inline u32 isp4hw_rreg(void __iomem *base, u32 reg)
+{
+       return readl(base + reg);
+}
+
+/* Helper functions for writing isp registers */
+static inline void isp4hw_wreg(void __iomem *base, u32 reg, u32 val)
+{
+       return writel(val, base + reg);
+}
+
+#endif /* _ISP4_HW_REG_H_ */