On Thu Aug 27 15:33:29 2026 +0300, Antti Laakso wrote:
> The ipu7 need specific region for firmware in non-secure mode,
> add support for it.
>
> Signed-off-by: Antti Laakso <[email protected]>
> Signed-off-by: Sakari Ailus <[email protected]>
Patch committed.
Thanks,
Sakari Ailus
drivers/media/pci/intel/ipu6/ipu6-dma.c | 20 +++++++++++++++++---
drivers/media/pci/intel/ipu6/ipu6-dma.h | 2 ++
2 files changed, 19 insertions(+), 3 deletions(-)
---
diff --git a/drivers/media/pci/intel/ipu6/ipu6-dma.c
b/drivers/media/pci/intel/ipu6/ipu6-dma.c
index 6e8295d9c3a3..90f530a93779 100644
--- a/drivers/media/pci/intel/ipu6/ipu6-dma.c
+++ b/drivers/media/pci/intel/ipu6/ipu6-dma.c
@@ -371,6 +371,17 @@ void ipu6_dma_unmap_sg(struct ipu6_bus_device *sys, struct
scatterlist *sglist,
}
EXPORT_SYMBOL_NS_GPL(ipu6_dma_unmap_sg, "INTEL_IPU6");
+static struct iova *ipu7_get_fw_code_region(struct ipu6_bus_device *sys)
+{
+ struct ipu6_mmu *mmu = sys->mmu;
+ unsigned long lo, hi;
+
+ lo = iova_pfn(&mmu->dmap->iovad, IPU7_FW_CODE_REGION_START);
+ hi = iova_pfn(&mmu->dmap->iovad, IPU7_FW_CODE_REGION_END) - 1U;
+
+ return reserve_iova(&mmu->dmap->iovad, lo, hi);
+}
+
int ipu6_dma_map_sg(struct ipu6_bus_device *sys, struct scatterlist *sglist,
int nents, enum dma_data_direction dir,
unsigned long attrs)
@@ -397,10 +408,13 @@ int ipu6_dma_map_sg(struct ipu6_bus_device *sys, struct
scatterlist *sglist,
dev_dbg(dev, "dmamap trying to map %d ents %zu pages\n",
nents, npages);
- iova = alloc_iova(&mmu->dmap->iovad, npages,
- PHYS_PFN(mmu->dmap->mmu_info->aperture_end), 0);
+ if (attrs & DMA_ATTR_RESERVE_REGION)
+ iova = ipu7_get_fw_code_region(sys);
+ else
+ iova = alloc_iova(&mmu->dmap->iovad, npages,
+ PHYS_PFN(mmu->dmap->mmu_info->aperture_end),
0);
if (!iova)
- return 0;
+ return -ENOMEM;
dev_dbg(dev, "dmamap: iova low pfn %lu, high pfn %lu\n", iova->pfn_lo,
iova->pfn_hi);
diff --git a/drivers/media/pci/intel/ipu6/ipu6-dma.h
b/drivers/media/pci/intel/ipu6/ipu6-dma.h
index ae9b9a5df57f..e5e0e7860423 100644
--- a/drivers/media/pci/intel/ipu6/ipu6-dma.h
+++ b/drivers/media/pci/intel/ipu6/ipu6-dma.h
@@ -10,6 +10,8 @@
#include "ipu6-bus.h"
+#define DMA_ATTR_RESERVE_REGION BIT(31)
+
struct ipu6_mmu_info;
struct ipu6_dma_mapping {
_______________________________________________
linuxtv-commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]