Skip to content

Commit 8a4978c

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

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
@@ -274,8 +274,8 @@ static int isp_firmware_boot_stage2(struct apple_isp *isp)
274274
memset(&args, 0, sizeof(args));
275275
args.ipc_iova = isp->ipc_surf->iova;
276276
args.ipc_size = isp->ipc_surf->size;
277-
args.shared_base = isp->fw.heap_top;
278-
args.shared_size = 0x10000000UL - isp->fw.heap_top;
277+
args.shared_base = isp->fw.heap_top & 0xffffffff;
278+
args.shared_size = 0x10000000UL - args.shared_base;
279279
args.extra_iova = isp->extra_surf->iova;
280280
args.extra_size = isp->extra_surf->size;
281281
args.platform_id = isp->hw->platform_id;
@@ -286,7 +286,7 @@ static int isp_firmware_boot_stage2(struct apple_isp *isp)
286286
isp_iowrite(isp, args_iova, &args, sizeof(args));
287287

288288
isp_gpio_write32(isp, ISP_GPIO_0, args_iova);
289-
isp_gpio_write32(isp, ISP_GPIO_1, 0x0);
289+
isp_gpio_write32(isp, ISP_GPIO_1, args_iova >> 32);
290290
wmb();
291291

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

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

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

0 commit comments

Comments
 (0)