diff --git a/drivers/gpu/drm/asahi/file.rs b/drivers/gpu/drm/asahi/file.rs index d8e628cc11709..82b3c71481759 100644 --- a/drivers/gpu/drm/asahi/file.rs +++ b/drivers/gpu/drm/asahi/file.rs @@ -1231,6 +1231,13 @@ impl File { cls_pr_debug!(Errors, "queue_create: Invalid priority\n"); return Err(EINVAL); } + // HIGH has only been run on G17; G13 and G14 keep refusing it. + if data.priority == uapi::drm_asahi_priority_DRM_ASAHI_PRIORITY_HIGH + && !reg_data.gpu.as_any().is::() + { + cls_pr_debug!(Errors, "queue_create: HIGH priority is not supported on this GPU\n"); + return Err(EINVAL); + } // SAFETY: capable() only reads the calling task's credentials (ioctl process context). if data.priority == uapi::drm_asahi_priority_DRM_ASAHI_PRIORITY_HIGH && !unsafe { bindings::capable(bindings::CAP_SYS_NICE as _) } diff --git a/drivers/media/platform/apple/isp/isp-cam.c b/drivers/media/platform/apple/isp/isp-cam.c index a5881c35ffe15..a266c60609614 100644 --- a/drivers/media/platform/apple/isp/isp-cam.c +++ b/drivers/media/platform/apple/isp/isp-cam.c @@ -425,7 +425,8 @@ static int isp_ch_load_setfile(struct apple_isp *isp, u32 ch) memcpy(isp->data_surf->virt, fw->data, len); memset(isp->data_surf->virt + len, 0, setfile->size - len); release_firmware(fw); - if (isp->hw->fw_abi == ISP_FW_ABI_H17) + /* Seen on T6040 only; T8140 runs its setfiles as they are. */ + if (isp->hw->gen == ISP_GEN_T6040) isp_setfile_fixup_h17(isp->data_surf->virt, len); return isp_cmd_ch_set_file_load(isp, ch, isp->data_surf->iova, diff --git a/drivers/media/platform/apple/isp/isp-drv.c b/drivers/media/platform/apple/isp/isp-drv.c index 12d17070c7d4a..da9d459dd8bdb 100644 --- a/drivers/media/platform/apple/isp/isp-drv.c +++ b/drivers/media/platform/apple/isp/isp-drv.c @@ -203,7 +203,9 @@ static int apple_isp_init_iommu(struct apple_isp *isp) * firmware's main memory only up to the end of it. The rest, up to * the heap top, is the host's to back. */ - err = isp_of_region_iova(dev, "data", &data_base, &data_size); + err = -ENOENT; + if (isp->hw->gen == ISP_GEN_T6040) + err = isp_of_region_iova(dev, "data", &data_base, &data_size); if (!err) { isp->fw.data_top = data_base + data_size; if (isp->fw.data_top <= isp->fw.heap_base ||