* [PATCH 0/7] Make ipu7 fw boot code subsystem agnostic
@ 2026-10-01 12:45 Antti Laakso
2026-10-01 12:45 ` [PATCH 1/7] media: ipu6: Fix media entity names for different ipu versions Antti Laakso
` (6 more replies)
0 siblings, 7 replies; 8+ messages in thread
From: Antti Laakso @ 2026-10-01 12:45 UTC (permalink / raw)
To: linux-media, sakari.ailus, sarang.sapre, divyamani.tripathi; +Cc: manik.bajpai
Make the ipu7 firmware boot and config helpers independent of isys.
The set includes a fix for media entity names, and now entities are
named according to ipu version. Excluding the fix, other changes are
for preparation only and do not intoruce changes to functionality.
Antti Laakso (7):
media: ipu6: Fix media entity names for different ipu versions
media: ipu6: Forward declare struct ipu6_mmu
media: ipu6: Pass the fw context to the ipu7 boot helpers
media: ipu6: Make ipu7 fw config subsystem agnostic
media: ipu6: Export the ipu7 firmware boot state
media: ipu6: Add the ipu7 psys buttress support
media: ipu6: Move ipu7 fw logger and watchdog configuration
drivers/media/pci/intel/ipu6/ipu6-buttress.c | 22 ++++++++++++
drivers/media/pci/intel/ipu6/ipu6-buttress.h | 2 ++
drivers/media/pci/intel/ipu6/ipu6-isys-csi2.c | 3 +-
drivers/media/pci/intel/ipu6/ipu6-isys.c | 3 +-
drivers/media/pci/intel/ipu6/ipu6-isys.h | 18 +++++++++-
drivers/media/pci/intel/ipu6/ipu6-mmu.h | 1 +
.../intel/ipu6/ipu6-platform-buttress-regs.h | 4 +++
drivers/media/pci/intel/ipu6/ipu7-boot.c | 35 ++++++++-----------
drivers/media/pci/intel/ipu6/ipu7-boot.h | 34 ++++++++++++++++--
drivers/media/pci/intel/ipu6/ipu7-fw-com.h | 2 +-
drivers/media/pci/intel/ipu6/ipu7-fw-isys.c | 13 ++++---
drivers/media/pci/intel/ipu6/ipu7-fw-isys.h | 19 ++--------
.../media/pci/intel/ipu6/ipu7-platform-regs.h | 12 +++++++
13 files changed, 118 insertions(+), 50 deletions(-)
--
2.55.0
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 1/7] media: ipu6: Fix media entity names for different ipu versions
2026-10-01 12:45 [PATCH 0/7] Make ipu7 fw boot code subsystem agnostic Antti Laakso
@ 2026-10-01 12:45 ` Antti Laakso
2026-10-01 12:45 ` [PATCH 2/7] media: ipu6: Forward declare struct ipu6_mmu Antti Laakso
` (5 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: Antti Laakso @ 2026-10-01 12:45 UTC (permalink / raw)
To: linux-media, sakari.ailus, sarang.sapre, divyamani.tripathi; +Cc: manik.bajpai
The media entity name prefix is ipu6 for all the hardware, fix it.
Signed-off-by: Antti Laakso <antti.laakso@linux.intel.com>
---
drivers/media/pci/intel/ipu6/ipu6-isys-csi2.c | 3 ++-
drivers/media/pci/intel/ipu6/ipu6-isys.c | 3 ++-
drivers/media/pci/intel/ipu6/ipu6-isys.h | 18 +++++++++++++++++-
3 files changed, 21 insertions(+), 3 deletions(-)
diff --git a/drivers/media/pci/intel/ipu6/ipu6-isys-csi2.c b/drivers/media/pci/intel/ipu6/ipu6-isys-csi2.c
index 4a2b3d460782..152545427930 100644
--- a/drivers/media/pci/intel/ipu6/ipu6-isys-csi2.c
+++ b/drivers/media/pci/intel/ipu6/ipu6-isys-csi2.c
@@ -937,7 +937,8 @@ int ipu6_isys_csi2_init(struct ipu6_isys_csi2 *csi2,
csi2->asd.source = IPU6_FW_ISYS_STREAM_SRC_CSI2_PORT0 + index;
csi2->asd.supported_codes = csi2_supported_codes;
snprintf(csi2->asd.sd.name, sizeof(csi2->asd.sd.name),
- IPU6_ISYS_ENTITY_PREFIX " CSI2 %u", index);
+ "Intel IPU%s CSI2 %u",
+ ipu6_isys_entity_version(isys->adev->isp), index);
v4l2_set_subdevdata(&csi2->asd.sd, &csi2->asd);
ret = v4l2_subdev_init_finalize(&csi2->asd.sd);
if (ret) {
diff --git a/drivers/media/pci/intel/ipu6/ipu6-isys.c b/drivers/media/pci/intel/ipu6/ipu6-isys.c
index a6b79a7be871..094a98e31c06 100644
--- a/drivers/media/pci/intel/ipu6/ipu6-isys.c
+++ b/drivers/media/pci/intel/ipu6/ipu6-isys.c
@@ -263,7 +263,8 @@ static int isys_register_video_devices(struct ipu6_isys *isys)
struct ipu6_isys_video *av = &isys->csi2[i].av[j];
snprintf(av->vdev.name, sizeof(av->vdev.name),
- IPU6_ISYS_ENTITY_PREFIX " ISYS Capture %u",
+ "Intel IPU%s ISYS Capture %u",
+ ipu6_isys_entity_version(isys->adev->isp),
i * NR_OF_CSI2_SRC_PADS + j);
av->isys = isys;
av->aq.vbq.buf_struct_size =
diff --git a/drivers/media/pci/intel/ipu6/ipu6-isys.h b/drivers/media/pci/intel/ipu6/ipu6-isys.h
index c5c8ede8e64e..f4d00f763eba 100644
--- a/drivers/media/pci/intel/ipu6/ipu6-isys.h
+++ b/drivers/media/pci/intel/ipu6/ipu6-isys.h
@@ -25,7 +25,23 @@
struct ipu6_bus_device;
-#define IPU6_ISYS_ENTITY_PREFIX "Intel IPU6"
+#define IPU6_ISYS_ENTITY_VERSION "6"
+#define IPU7_ISYS_ENTITY_VERSION "7"
+#define IPU7P5_ISYS_ENTITY_VERSION "7.5"
+#define IPU8_ISYS_ENTITY_VERSION "8"
+
+static inline const char *ipu6_isys_entity_version(struct ipu6_device *isp)
+{
+ if (IS_IPU8(isp))
+ return IPU8_ISYS_ENTITY_VERSION;
+ if (IS_IPU7P5(isp))
+ return IPU7P5_ISYS_ENTITY_VERSION;
+ if (IS_IPU7_MTL(isp))
+ return IPU7_ISYS_ENTITY_VERSION;
+
+ return IPU6_ISYS_ENTITY_VERSION;
+}
+
/* FW support max 16 streams */
#define IPU6_ISYS_MAX_STREAMS 16
#define ISYS_UNISPART_IRQS (IPU6_ISYS_UNISPART_IRQ_SW | \
--
2.55.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 2/7] media: ipu6: Forward declare struct ipu6_mmu
2026-10-01 12:45 [PATCH 0/7] Make ipu7 fw boot code subsystem agnostic Antti Laakso
2026-10-01 12:45 ` [PATCH 1/7] media: ipu6: Fix media entity names for different ipu versions Antti Laakso
@ 2026-10-01 12:45 ` Antti Laakso
2026-10-01 12:45 ` [PATCH 3/7] media: ipu6: Pass the fw context to the ipu7 boot helpers Antti Laakso
` (4 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: Antti Laakso @ 2026-10-01 12:45 UTC (permalink / raw)
To: linux-media, sakari.ailus, sarang.sapre, divyamani.tripathi; +Cc: manik.bajpai
The struct ipu6_mmu is used by ipu6_mmu_hw_ops, but the latter is
defined before former. Including ipu6-mmu.h on its own would not work,
add a forward declaration.
Signed-off-by: Antti Laakso <antti.laakso@linux.intel.com>
---
drivers/media/pci/intel/ipu6/ipu6-mmu.h | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/media/pci/intel/ipu6/ipu6-mmu.h b/drivers/media/pci/intel/ipu6/ipu6-mmu.h
index 44880478d242..ff113384c126 100644
--- a/drivers/media/pci/intel/ipu6/ipu6-mmu.h
+++ b/drivers/media/pci/intel/ipu6/ipu6-mmu.h
@@ -11,6 +11,7 @@
#include "ipu7-mmu-hw.h"
struct device;
+struct ipu6_mmu;
struct page;
struct ipu6_mmu_info {
--
2.55.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 3/7] media: ipu6: Pass the fw context to the ipu7 boot helpers
2026-10-01 12:45 [PATCH 0/7] Make ipu7 fw boot code subsystem agnostic Antti Laakso
2026-10-01 12:45 ` [PATCH 1/7] media: ipu6: Fix media entity names for different ipu versions Antti Laakso
2026-10-01 12:45 ` [PATCH 2/7] media: ipu6: Forward declare struct ipu6_mmu Antti Laakso
@ 2026-10-01 12:45 ` Antti Laakso
2026-10-01 12:45 ` [PATCH 4/7] media: ipu6: Make ipu7 fw config subsystem agnostic Antti Laakso
` (3 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: Antti Laakso @ 2026-10-01 12:45 UTC (permalink / raw)
To: linux-media, sakari.ailus, sarang.sapre, divyamani.tripathi; +Cc: manik.bajpai
Keep the ipu7 boot helpers sub-system agnostic by passing the
firmware context explicitly. No functional change.
Assisted-by: LLM
Signed-off-by: Antti Laakso <antti.laakso@linux.intel.com>
---
drivers/media/pci/intel/ipu6/ipu7-boot.c | 26 +++++++--------------
drivers/media/pci/intel/ipu6/ipu7-boot.h | 7 ++++--
drivers/media/pci/intel/ipu6/ipu7-fw-isys.c | 9 ++++---
3 files changed, 18 insertions(+), 24 deletions(-)
diff --git a/drivers/media/pci/intel/ipu6/ipu7-boot.c b/drivers/media/pci/intel/ipu6/ipu7-boot.c
index 952c73efd237..f695d668d46b 100644
--- a/drivers/media/pci/intel/ipu6/ipu7-boot.c
+++ b/drivers/media/pci/intel/ipu6/ipu7-boot.c
@@ -12,7 +12,6 @@
#include "ipu6-bus.h"
#include "ipu6-buttress.h"
#include "ipu6-dma.h"
-#include "ipu6-isys.h"
#include "ipu6-platform-buttress-regs.h"
#include "ipu7-boot.h"
#include "ipu7-platform-regs.h"
@@ -163,11 +162,10 @@ static void ipu7_boot_cell_stop(const struct ipu6_bus_device *adev)
writel(val, base + regs->status_ctrl_reg);
}
-static int ipu7_boot_cell_init(const struct ipu6_bus_device *adev)
+static int ipu7_boot_cell_init(const struct ipu6_bus_device *adev,
+ const struct ipu7_fw_com_context *fwctx)
{
const struct boot_regs *regs = &boot_regs[adev->ctrl->subsys_id];
- struct ipu6_isys *isys = ipu6_bus_get_drvdata(adev);
- struct ipu7_fw_com_context *fwctx = isys->fwctx;
void __iomem *base = adev->isp->base;
writel(fwctx->fw_entry, base + regs->fw_start_address_reg);
@@ -191,12 +189,11 @@ static void init_cfg_versions(struct ipu7_boot_abi_cfg *boot_cfg, u32 length, u8
}
int ipu6_ipu7_init_boot_config(struct ipu6_bus_device *adev,
+ struct ipu7_fw_com_context *fwctx,
struct ipu7_fw_com_queue_config *qconfigs,
int num_queues, u32 uc_freq,
dma_addr_t subsys_config, u8 major)
{
- struct ipu6_isys *isys = ipu6_bus_get_drvdata(adev);
- struct ipu7_fw_com_context *fwctx = isys->fwctx;
struct ipu7_boot_abi_cfg *boot_config;
struct ipu7_fw_com_queue_params_config *cfgs;
struct device *dev = &adev->auxdev.dev;
@@ -269,16 +266,12 @@ int ipu6_ipu7_init_boot_config(struct ipu6_bus_device *adev,
}
EXPORT_SYMBOL_NS_GPL(ipu6_ipu7_init_boot_config, "INTEL_IPU6");
-void ipu6_ipu7_release_boot_config(struct ipu6_bus_device *adev)
+void ipu6_ipu7_release_boot_config(struct ipu6_bus_device *adev,
+ struct ipu7_fw_com_context *fwctx)
{
- struct ipu6_isys *isys = ipu6_bus_get_drvdata(adev);
- struct ipu7_fw_com_context *fwctx;
-
- if (!isys || !isys->fwctx)
+ if (!fwctx)
return;
- fwctx = isys->fwctx;
-
if (fwctx->queue_mem) {
ipu6_dma_free(adev, fwctx->queue_mem_size,
fwctx->queue_mem,
@@ -297,18 +290,17 @@ void ipu6_ipu7_release_boot_config(struct ipu6_bus_device *adev)
}
EXPORT_SYMBOL_NS_GPL(ipu6_ipu7_release_boot_config, "INTEL_IPU6");
-int ipu6_ipu7_boot_start_fw(const struct ipu6_bus_device *adev)
+int ipu6_ipu7_boot_start_fw(const struct ipu6_bus_device *adev,
+ struct ipu7_fw_com_context *fwctx)
{
const struct device *dev = &adev->auxdev.dev;
- struct ipu6_isys *isys = ipu6_bus_get_drvdata(adev);
- struct ipu7_fw_com_context *fwctx = isys->fwctx;
u32 timeout = IPU7_FW_START_STOP_TIMEOUT;
void __iomem *base = adev->isp->base;
u32 boot_state, last_boot_state;
u32 indices_addr, msg_ver, id;
int ret;
- ret = ipu7_boot_cell_init(adev);
+ ret = ipu7_boot_cell_init(adev, fwctx);
if (ret)
return ret;
diff --git a/drivers/media/pci/intel/ipu6/ipu7-boot.h b/drivers/media/pci/intel/ipu6/ipu7-boot.h
index f2172b53bed5..48b7cbbde3d3 100644
--- a/drivers/media/pci/intel/ipu6/ipu7-boot.h
+++ b/drivers/media/pci/intel/ipu6/ipu7-boot.h
@@ -36,11 +36,14 @@ struct ipu7_boot_abi_cfg {
} __packed;
int ipu6_ipu7_init_boot_config(struct ipu6_bus_device *adev,
+ struct ipu7_fw_com_context *fwctx,
struct ipu7_fw_com_queue_config *qconfigs,
int num_queues, u32 uc_freq,
dma_addr_t subsys_config, u8 major);
-void ipu6_ipu7_release_boot_config(struct ipu6_bus_device *adev);
-int ipu6_ipu7_boot_start_fw(const struct ipu6_bus_device *adev);
+void ipu6_ipu7_release_boot_config(struct ipu6_bus_device *adev,
+ struct ipu7_fw_com_context *fwctx);
+int ipu6_ipu7_boot_start_fw(const struct ipu6_bus_device *adev,
+ struct ipu7_fw_com_context *fwctx);
int ipu6_ipu7_boot_stop_fw(const struct ipu6_bus_device *adev);
#endif
diff --git a/drivers/media/pci/intel/ipu6/ipu7-fw-isys.c b/drivers/media/pci/intel/ipu6/ipu7-fw-isys.c
index ae8f40f94cc9..b22a01cf6f1b 100644
--- a/drivers/media/pci/intel/ipu6/ipu7-fw-isys.c
+++ b/drivers/media/pci/intel/ipu6/ipu7-fw-isys.c
@@ -25,7 +25,7 @@ static void ipu7_fw_isys_cleanup(struct ipu6_isys *isys)
if (!fwctx)
return;
- ipu6_ipu7_release_boot_config(adev);
+ ipu6_ipu7_release_boot_config(adev, fwctx);
if (fwctx->fw_config) {
ipu6_dma_free(adev, sizeof(*fwctx->fw_config), fwctx->fw_config,
@@ -41,7 +41,7 @@ static void ipu7_fw_isys_cleanup(struct ipu6_isys *isys)
static int ipu7_fw_isys_open(struct ipu6_isys *isys)
{
- return ipu6_ipu7_boot_start_fw(isys->adev);
+ return ipu6_ipu7_boot_start_fw(isys->adev, isys->fwctx);
}
static int ipu7_fw_isys_close(struct ipu6_isys *isys)
@@ -133,9 +133,8 @@ static int ipu7_fw_isys_init(struct ipu6_isys *isys, unsigned int num_streams)
isys->fwctx = fwctx;
- /* IPU8 firmware expects boot-message major version 2, not 1 */
- ret = ipu6_ipu7_init_boot_config(adev, queue_configs, num_queues,
- freq, fw_config_dma_addr,
+ ret = ipu6_ipu7_init_boot_config(adev, fwctx, queue_configs,
+ num_queues, freq, fw_config_dma_addr,
IS_IPU8(adev->isp) ? 2U : 1U);
if (ret) {
ipu7_fw_isys_cleanup(isys);
--
2.55.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 4/7] media: ipu6: Make ipu7 fw config subsystem agnostic
2026-10-01 12:45 [PATCH 0/7] Make ipu7 fw boot code subsystem agnostic Antti Laakso
` (2 preceding siblings ...)
2026-10-01 12:45 ` [PATCH 3/7] media: ipu6: Pass the fw context to the ipu7 boot helpers Antti Laakso
@ 2026-10-01 12:45 ` Antti Laakso
2026-10-01 12:45 ` [PATCH 5/7] media: ipu6: Export the ipu7 firmware boot state Antti Laakso
` (2 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: Antti Laakso @ 2026-10-01 12:45 UTC (permalink / raw)
To: linux-media, sakari.ailus, sarang.sapre, divyamani.tripathi; +Cc: manik.bajpai
The fw_config holds the subsystem configuration blob handed to the
firmware at boot. Make it subsystem agnostic by using void pointer.
No functional change.
Assisted-by: LLM
Signed-off-by: Antti Laakso <antti.laakso@linux.intel.com>
---
drivers/media/pci/intel/ipu6/ipu7-fw-com.h | 2 +-
drivers/media/pci/intel/ipu6/ipu7-fw-isys.c | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/media/pci/intel/ipu6/ipu7-fw-com.h b/drivers/media/pci/intel/ipu6/ipu7-fw-com.h
index 097eaab99547..a98f476a8be1 100644
--- a/drivers/media/pci/intel/ipu6/ipu7-fw-com.h
+++ b/drivers/media/pci/intel/ipu6/ipu7-fw-com.h
@@ -25,7 +25,7 @@ struct ipu7_fw_com_context {
dma_addr_t boot_config_dma_addr;
u32 boot_config_size;
u32 fw_entry;
- struct ipu7_insys_config *fw_config;
+ void *fw_config;
dma_addr_t fw_config_dma_addr;
};
diff --git a/drivers/media/pci/intel/ipu6/ipu7-fw-isys.c b/drivers/media/pci/intel/ipu6/ipu7-fw-isys.c
index b22a01cf6f1b..00780dfa4912 100644
--- a/drivers/media/pci/intel/ipu6/ipu7-fw-isys.c
+++ b/drivers/media/pci/intel/ipu6/ipu7-fw-isys.c
@@ -28,8 +28,8 @@ static void ipu7_fw_isys_cleanup(struct ipu6_isys *isys)
ipu6_ipu7_release_boot_config(adev, fwctx);
if (fwctx->fw_config) {
- ipu6_dma_free(adev, sizeof(*fwctx->fw_config), fwctx->fw_config,
- fwctx->fw_config_dma_addr, 0);
+ ipu6_dma_free(adev, sizeof(struct ipu7_insys_config),
+ fwctx->fw_config, fwctx->fw_config_dma_addr, 0);
fwctx->fw_config = NULL;
fwctx->fw_config_dma_addr = 0;
}
--
2.55.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 5/7] media: ipu6: Export the ipu7 firmware boot state
2026-10-01 12:45 [PATCH 0/7] Make ipu7 fw boot code subsystem agnostic Antti Laakso
` (3 preceding siblings ...)
2026-10-01 12:45 ` [PATCH 4/7] media: ipu6: Make ipu7 fw config subsystem agnostic Antti Laakso
@ 2026-10-01 12:45 ` Antti Laakso
2026-10-01 12:45 ` [PATCH 6/7] media: ipu6: Add the ipu7 psys buttress support Antti Laakso
2026-10-01 12:45 ` [PATCH 7/7] media: ipu6: Move ipu7 fw logger and watchdog configuration Antti Laakso
6 siblings, 0 replies; 8+ messages in thread
From: Antti Laakso @ 2026-10-01 12:45 UTC (permalink / raw)
To: linux-media, sakari.ailus, sarang.sapre, divyamani.tripathi; +Cc: manik.bajpai
Export a boot state accessor, so subsystem interrupt handler can detect
a firmware error state.
Assisted-by: LLM
Signed-off-by: Antti Laakso <antti.laakso@linux.intel.com>
---
drivers/media/pci/intel/ipu6/ipu7-boot.c | 9 ++++++---
drivers/media/pci/intel/ipu6/ipu7-boot.h | 5 +++++
2 files changed, 11 insertions(+), 3 deletions(-)
diff --git a/drivers/media/pci/intel/ipu6/ipu7-boot.c b/drivers/media/pci/intel/ipu6/ipu7-boot.c
index f695d668d46b..965783fd50d2 100644
--- a/drivers/media/pci/intel/ipu6/ipu7-boot.c
+++ b/drivers/media/pci/intel/ipu6/ipu7-boot.c
@@ -18,9 +18,6 @@
#define IPU7_FW_START_STOP_TIMEOUT 2000
#define IPU7_BOOT_CELL_RESET_TIMEOUT (2 * USEC_PER_SEC)
-#define IPU7_BOOT_STATE_CRITICAL(s) (((s) & 0xffff0000U) == 0xdead0000U)
-#define IPU7_BOOT_STATE_READY(s) ((s) == 0x57a7e100U)
-#define IPU7_BOOT_STATE_INACTIVE(s) ((s) == 0x57a7e300U)
#define IPU7_BUTTRESS_REG_FW_BOOT_PARAMS0 0x4000
#define IPU7_BUTTRESS_FW_BOOT_PARAMS_ENTRY(i) \
(IPU7_BUTTRESS_REG_FW_BOOT_PARAMS0 + ((i) * 4U))
@@ -395,3 +392,9 @@ int ipu6_ipu7_boot_stop_fw(const struct ipu6_bus_device *adev)
return 0;
}
EXPORT_SYMBOL_NS_GPL(ipu6_ipu7_boot_stop_fw, "INTEL_IPU6");
+
+u32 ipu6_ipu7_boot_get_state(const struct ipu6_bus_device *adev)
+{
+ return read_fw_boot_param(adev, IPU7_FW_BOOT_STATE_ID);
+}
+EXPORT_SYMBOL_NS_GPL(ipu6_ipu7_boot_get_state, "INTEL_IPU6");
diff --git a/drivers/media/pci/intel/ipu6/ipu7-boot.h b/drivers/media/pci/intel/ipu6/ipu7-boot.h
index 48b7cbbde3d3..a7e59067b3eb 100644
--- a/drivers/media/pci/intel/ipu6/ipu7-boot.h
+++ b/drivers/media/pci/intel/ipu6/ipu7-boot.h
@@ -8,6 +8,10 @@
#define IPU7_BOOT_MSG_VER_MAX_ENTRIES 3U
+#define IPU7_BOOT_STATE_CRITICAL(s) (((s) & 0xffff0000U) == 0xdead0000U)
+#define IPU7_BOOT_STATE_READY(s) ((s) == 0x57a7e100U)
+#define IPU7_BOOT_STATE_INACTIVE(s) ((s) == 0x57a7e300U)
+
struct ipu7_boot_abi_version {
u8 patch;
u8 subminor;
@@ -45,5 +49,6 @@ void ipu6_ipu7_release_boot_config(struct ipu6_bus_device *adev,
int ipu6_ipu7_boot_start_fw(const struct ipu6_bus_device *adev,
struct ipu7_fw_com_context *fwctx);
int ipu6_ipu7_boot_stop_fw(const struct ipu6_bus_device *adev);
+u32 ipu6_ipu7_boot_get_state(const struct ipu6_bus_device *adev);
#endif
--
2.55.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 6/7] media: ipu6: Add the ipu7 psys buttress support
2026-10-01 12:45 [PATCH 0/7] Make ipu7 fw boot code subsystem agnostic Antti Laakso
` (4 preceding siblings ...)
2026-10-01 12:45 ` [PATCH 5/7] media: ipu6: Export the ipu7 firmware boot state Antti Laakso
@ 2026-10-01 12:45 ` Antti Laakso
2026-10-01 12:45 ` [PATCH 7/7] media: ipu6: Move ipu7 fw logger and watchdog configuration Antti Laakso
6 siblings, 0 replies; 8+ messages in thread
From: Antti Laakso @ 2026-10-01 12:45 UTC (permalink / raw)
To: linux-media, sakari.ailus, sarang.sapre, divyamani.tripathi; +Cc: manik.bajpai
Add buttress psys helpers, needed by ipu7 psys driver.
Assisted-by: LLM
Signed-off-by: Antti Laakso <antti.laakso@linux.intel.com>
---
drivers/media/pci/intel/ipu6/ipu6-buttress.c | 22 +++++++++++++++++++
drivers/media/pci/intel/ipu6/ipu6-buttress.h | 2 ++
.../intel/ipu6/ipu6-platform-buttress-regs.h | 4 ++++
.../media/pci/intel/ipu6/ipu7-platform-regs.h | 12 ++++++++++
4 files changed, 40 insertions(+)
diff --git a/drivers/media/pci/intel/ipu6/ipu6-buttress.c b/drivers/media/pci/intel/ipu6/ipu6-buttress.c
index 00d504647c29..f1d236054cf7 100644
--- a/drivers/media/pci/intel/ipu6/ipu6-buttress.c
+++ b/drivers/media/pci/intel/ipu6/ipu6-buttress.c
@@ -1055,6 +1055,28 @@ u32 ipu7_buttress_get_isys_freq(struct ipu6_device *isp)
}
EXPORT_SYMBOL_NS_GPL(ipu7_buttress_get_isys_freq, "INTEL_IPU6");
+/* trigger uc control to wakeup fw */
+void ipu7_buttress_wakeup_psys(const struct ipu6_device *isp)
+{
+ u32 val;
+
+ val = readl(isp->base + IPU7_BUTTRESS_REG_PSYS_UCX_CTRL_STATUS);
+ val |= IPU7_UCX_CTL_WAKEUP;
+ writel(val, isp->base + IPU7_BUTTRESS_REG_PSYS_UCX_CTRL_STATUS);
+}
+EXPORT_SYMBOL_NS_GPL(ipu7_buttress_wakeup_psys, "INTEL_IPU6");
+
+u32 ipu7_buttress_get_psys_freq(struct ipu6_device *isp)
+{
+ u32 val;
+
+ val = readl(isp->base + IPU7_BUTTRESS_REG_PS_WORKPOINT_REQ);
+ val &= IPU7_BUTTRESS_PS_FREQ_CTL_RATIO_MASK;
+
+ return val * IPU7_BUTTRESS_PS_FREQ_RATIO_STEP;
+}
+EXPORT_SYMBOL_NS_GPL(ipu7_buttress_get_psys_freq, "INTEL_IPU6");
+
static const struct x86_cpu_id ipu7_misc_cfg_exclusion[] = {
X86_MATCH_VFM_STEPS(INTEL_PANTHERLAKE_L, 0x1, 0x1, 0),
{},
diff --git a/drivers/media/pci/intel/ipu6/ipu6-buttress.h b/drivers/media/pci/intel/ipu6/ipu6-buttress.h
index 79d8f5893686..39c2951c5370 100644
--- a/drivers/media/pci/intel/ipu6/ipu6-buttress.h
+++ b/drivers/media/pci/intel/ipu6/ipu6-buttress.h
@@ -108,4 +108,6 @@ void ipu6_buttress_csi_port_config(struct ipu6_device *isp,
void ipu6_buttress_restore(struct ipu6_device *isp);
void ipu7_buttress_wakeup_isys(const struct ipu6_device *isp);
u32 ipu7_buttress_get_isys_freq(struct ipu6_device *isp);
+void ipu7_buttress_wakeup_psys(const struct ipu6_device *isp);
+u32 ipu7_buttress_get_psys_freq(struct ipu6_device *isp);
#endif /* IPU6_BUTTRESS_H */
diff --git a/drivers/media/pci/intel/ipu6/ipu6-platform-buttress-regs.h b/drivers/media/pci/intel/ipu6/ipu6-platform-buttress-regs.h
index 04d196c49c60..4c4ca95c7d54 100644
--- a/drivers/media/pci/intel/ipu6/ipu6-platform-buttress-regs.h
+++ b/drivers/media/pci/intel/ipu6/ipu6-platform-buttress-regs.h
@@ -237,6 +237,8 @@ enum {
#define IPU7_BUTTRESS_REG_PB_TIMESTAMP_VALID 0x2038
#define IPU7_BUTTRESS_REG_IS_WORKPOINT_REQ 0x2104
#define IPU7_BUTTRESS_REG_PS_WORKPOINT_REQ 0x2100
+#define IPU7_BUTTRESS_REG_PS_WORKPOINT_DOMAIN_REQ 0x2108
+#define IPU7_BUTTRESS_REG_PS_DOMAINS_STATUS 0x2110
#define IPU7_BUTTRESS_REG_IDLE_WDT 0x218c
#define IPU7_BUTTRESS_REG_ISYS_UCX_CTRL_STATUS 0x2200
#define IPU7_BUTTRESS_REG_ISYS_UCX_START_ADDR 0x2204
@@ -280,6 +282,8 @@ enum {
#define IPU7_FREQ_CTL_CDYN 0x80
#define IPU7_FREQ_CTL_CDYN_SHIFT 8
#define IPU7_BUTTRESS_IS_FREQ_CTL_RATIO_MASK GENMASK(7, 0)
+#define IPU7_BUTTRESS_PS_FREQ_CTL_RATIO_MASK GENMASK(7, 0)
+#define IPU7_BUTTRESS_PS_FREQ_RATIO_STEP 25U
#define IPU7_IS_FREQ_CTL_DEFAULT_RATIO 0x1b
#define IPU7_PS_FREQ_CTL_DEFAULT_RATIO 0x14
/* IS: 400MHz, PS: 400MHz */
diff --git a/drivers/media/pci/intel/ipu6/ipu7-platform-regs.h b/drivers/media/pci/intel/ipu6/ipu7-platform-regs.h
index 39cd5c0890e5..3493e0efe24d 100644
--- a/drivers/media/pci/intel/ipu6/ipu7-platform-regs.h
+++ b/drivers/media/pci/intel/ipu6/ipu7-platform-regs.h
@@ -4,6 +4,8 @@
#ifndef IPU7_PLATFORM_REGS_H
#define IPU7_PLATFORM_REGS_H
+#include <linux/bits.h>
+
#define IPU7_IS_UC_CTRL_BASE 0x230000
#define IPU7_ISYS_DMEM_OFFSET 0x200000
#define IPU7_PS_UC_CTRL_BASE 0x130000
@@ -29,4 +31,14 @@
#define IPU7_TO_SW_IRQ_FW BIT(0)
#define IPU7_REG_PRINTF_AXI_CNTL 0x301c
+/* psys subdomain power request positions in PS_WORKPOINT_DOMAIN_REQ */
+enum ipu7_psys_subdomain_pos {
+ IPU7_PSYS_SUBDOMAIN_LB = 0,
+ IPU7_PSYS_SUBDOMAIN_BB = 1,
+};
+
+#define IPU7_PSYS_DOMAIN_POWER_MASK (BIT(IPU7_PSYS_SUBDOMAIN_LB) | \
+ BIT(IPU7_PSYS_SUBDOMAIN_BB))
+#define IPU7_PSYS_DOMAIN_POWER_IN_PROGRESS BIT(31)
+
#endif
--
2.55.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 7/7] media: ipu6: Move ipu7 fw logger and watchdog configuration
2026-10-01 12:45 [PATCH 0/7] Make ipu7 fw boot code subsystem agnostic Antti Laakso
` (5 preceding siblings ...)
2026-10-01 12:45 ` [PATCH 6/7] media: ipu6: Add the ipu7 psys buttress support Antti Laakso
@ 2026-10-01 12:45 ` Antti Laakso
6 siblings, 0 replies; 8+ messages in thread
From: Antti Laakso @ 2026-10-01 12:45 UTC (permalink / raw)
To: linux-media, sakari.ailus, sarang.sapre, divyamani.tripathi; +Cc: manik.bajpai
The logger and watchdog configurations are not isys specific, move them
to ipu7-boot.h. No functional change.
Assisted-by: LLM
Signed-off-by: Antti Laakso <antti.laakso@linux.intel.com>
---
drivers/media/pci/intel/ipu6/ipu7-boot.h | 22 +++++++++++++++++++++
drivers/media/pci/intel/ipu6/ipu7-fw-isys.h | 19 ++----------------
2 files changed, 24 insertions(+), 17 deletions(-)
diff --git a/drivers/media/pci/intel/ipu6/ipu7-boot.h b/drivers/media/pci/intel/ipu6/ipu7-boot.h
index a7e59067b3eb..e7a21b16f41b 100644
--- a/drivers/media/pci/intel/ipu6/ipu7-boot.h
+++ b/drivers/media/pci/intel/ipu6/ipu7-boot.h
@@ -4,6 +4,8 @@
#ifndef IPU7_BOOT_H
#define IPU7_BOOT_H
+#include <linux/bits.h>
+
#include "ipu7-fw-com.h"
#define IPU7_BOOT_MSG_VER_MAX_ENTRIES 3U
@@ -12,6 +14,26 @@
#define IPU7_BOOT_STATE_READY(s) ((s) == 0x57a7e100U)
#define IPU7_BOOT_STATE_INACTIVE(s) ((s) == 0x57a7e300U)
+#define IPU7_FWLOG_MAX_LOGGER_SOURCES (64U)
+
+#define IPU7_LOGGER_CFG_CHANNEL_ENABLE_SYSCOM BIT(1)
+
+/* Shared by the insys and psys subsystem configurations */
+struct ipu7_fw_logger_config {
+ u8 use_source_severity;
+ u8 source_severity[IPU7_FWLOG_MAX_LOGGER_SOURCES];
+ u8 use_channels_enable_bitmask;
+ u8 channels_enable_bitmask;
+ u8 padding[1];
+ u32 hw_printf_buffer_base_addr;
+ u32 hw_printf_buffer_size_bytes;
+};
+
+struct ipu7_wdt_abi {
+ u32 wdt_timer1_us;
+ u32 wdt_timer2_us;
+};
+
struct ipu7_boot_abi_version {
u8 patch;
u8 subminor;
diff --git a/drivers/media/pci/intel/ipu6/ipu7-fw-isys.h b/drivers/media/pci/intel/ipu6/ipu7-fw-isys.h
index 30289d73be6c..2536f15a4962 100644
--- a/drivers/media/pci/intel/ipu6/ipu7-fw-isys.h
+++ b/drivers/media/pci/intel/ipu6/ipu7-fw-isys.h
@@ -4,9 +4,9 @@
#ifndef IPU7_FW_ISYS_H
#define IPU7_FW_ISYS_H
+#include "ipu7-boot.h"
#include <linux/limits.h>
-#define IPU7_FWLOG_MAX_LOGGER_SOURCES (64U)
#define IPU7_INSYS_MAX_OUTPUT_QUEUES 3U
#define IPU7_INSYS_STREAM_ID_MAX 16U
#define IPU7_INSYS_MAX_INPUT_QUEUES (IPU7_INSYS_STREAM_ID_MAX + 1U)
@@ -158,24 +158,9 @@ enum insys_msg_err_groups {
INSYS_MSG_ERR_GROUP_N,
};
-struct ipu7_fw_isys_logger_config {
- u8 use_source_severity;
- u8 source_severity[IPU7_FWLOG_MAX_LOGGER_SOURCES];
- u8 use_channels_enable_bitmask;
- u8 channels_enable_bitmask;
- u8 padding[1];
- u32 hw_printf_buffer_base_addr;
- u32 hw_printf_buffer_size_bytes;
-};
-
-struct ipu7_wdt_abi {
- u32 wdt_timer1_us;
- u32 wdt_timer2_us;
-};
-
struct ipu7_insys_config {
u32 timeout_val_ms;
- struct ipu7_fw_isys_logger_config logger_config;
+ struct ipu7_fw_logger_config logger_config;
struct ipu7_wdt_abi wdt_config;
};
--
2.55.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
end of thread, other threads:[~2026-10-01 12:46 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-01 12:45 [PATCH 0/7] Make ipu7 fw boot code subsystem agnostic Antti Laakso
2026-10-01 12:45 ` [PATCH 1/7] media: ipu6: Fix media entity names for different ipu versions Antti Laakso
2026-10-01 12:45 ` [PATCH 2/7] media: ipu6: Forward declare struct ipu6_mmu Antti Laakso
2026-10-01 12:45 ` [PATCH 3/7] media: ipu6: Pass the fw context to the ipu7 boot helpers Antti Laakso
2026-10-01 12:45 ` [PATCH 4/7] media: ipu6: Make ipu7 fw config subsystem agnostic Antti Laakso
2026-10-01 12:45 ` [PATCH 5/7] media: ipu6: Export the ipu7 firmware boot state Antti Laakso
2026-10-01 12:45 ` [PATCH 6/7] media: ipu6: Add the ipu7 psys buttress support Antti Laakso
2026-10-01 12:45 ` [PATCH 7/7] media: ipu6: Move ipu7 fw logger and watchdog configuration Antti Laakso
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox