Skip to content

Commit a606823

Browse files
hoshinolinajannau
authored andcommitted
media: apple: isp: Support >32bit VAs for t602x
Signed-off-by: Asahi Lina <lina@asahilina.net>
1 parent 964fbcd commit a606823

2 files changed

Lines changed: 11 additions & 5 deletions

File tree

drivers/media/platform/apple/isp/isp-drv.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,8 @@ static int apple_isp_init_iommu(struct apple_isp *isp)
121121
return err;
122122
}
123123

124-
drm_mm_init(&isp->iovad, isp->fw.heap_top, vm_size - heap_base);
124+
// FIXME: refactor this, maybe use regular iova stuff?
125+
drm_mm_init(&isp->iovad, isp->fw.heap_top, vm_size - (heap_base & 0xffffffff));
125126

126127
return 0;
127128
}
@@ -137,6 +138,10 @@ static int apple_isp_probe(struct platform_device *pdev)
137138
struct apple_isp *isp;
138139
int err;
139140

141+
err = dma_set_mask_and_coherent(dev, DMA_BIT_MASK(42));
142+
if (err)
143+
return err;
144+
140145
isp = devm_kzalloc(dev, sizeof(*isp), GFP_KERNEL);
141146
if (!isp)
142147
return -ENOMEM;

drivers/media/platform/apple/isp/isp-fw.c

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -275,8 +275,8 @@ static int isp_firmware_boot_stage2(struct apple_isp *isp)
275275
memset(&args, 0, sizeof(args));
276276
args.ipc_iova = isp->ipc_surf->iova;
277277
args.ipc_size = isp->ipc_surf->size;
278-
args.shared_base = isp->fw.heap_top;
279-
args.shared_size = 0x10000000UL - isp->fw.heap_top;
278+
args.shared_base = isp->fw.heap_top & 0xffffffff;
279+
args.shared_size = 0x10000000UL - args.shared_base;
280280
args.extra_iova = isp->extra_surf->iova;
281281
args.extra_size = isp->extra_surf->size;
282282
args.platform_id = isp->hw->platform_id;
@@ -287,7 +287,7 @@ static int isp_firmware_boot_stage2(struct apple_isp *isp)
287287
isp_iowrite(isp, args_iova, &args, sizeof(args));
288288

289289
isp_gpio_write32(isp, ISP_GPIO_0, args_iova);
290-
isp_gpio_write32(isp, ISP_GPIO_1, 0x0);
290+
isp_gpio_write32(isp, ISP_GPIO_1, args_iova >> 32);
291291
wmb();
292292

293293
/* Wait for ISP_GPIO_7 to 0xf7fbdff9 -> 0x8042006 */
@@ -343,7 +343,8 @@ static void isp_free_channel_info(struct apple_isp *isp)
343343

344344
static int isp_fill_channel_info(struct apple_isp *isp)
345345
{
346-
u32 table_iova = isp_gpio_read32(isp, ISP_GPIO_0);
346+
u64 table_iova = isp_gpio_read32(isp, ISP_GPIO_0) |
347+
((u64)isp_gpio_read32(isp, ISP_GPIO_1)) << 32;
347348

348349
isp->ipc_chans = kcalloc(isp->num_ipc_chans,
349350
sizeof(struct isp_channel *), GFP_KERNEL);

0 commit comments

Comments
 (0)