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]

Reply via email to