Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'drm-misc-fixes-2024-09-05' of https://gitlab.freedesktop.org/drm/misc/kernel into drm-fixes

A zpos normalization fix for komeda, a register bitmask fix for nouveau,
a memory leak fix for imagination, three fixes for the recent bridge
HDMI work, a potential DoS fix and a cache coherency for panthor, a
change of panel compatible and a deferred-io fix when used with
non-highmem memory.

Signed-off-by: Dave Airlie <airlied@redhat.com>

From: Maxime Ripard <mripard@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240905-original-radical-guan-e7a2ae@houat

+202 -47
+11 -4
Documentation/devicetree/bindings/display/panel/wl-355608-a8.yaml Documentation/devicetree/bindings/display/panel/anbernic,rg35xx-plus-panel.yaml
··· 1 1 # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) 2 2 %YAML 1.2 3 3 --- 4 - $id: http://devicetree.org/schemas/display/panel/wl-355608-a8.yaml# 4 + $id: http://devicetree.org/schemas/display/panel/anbernic,rg35xx-plus-panel.yaml# 5 5 $schema: http://devicetree.org/meta-schemas/core.yaml# 6 6 7 - title: WL-355608-A8 3.5" (640x480 pixels) 24-bit IPS LCD panel 7 + title: Anbernic RG35XX series (WL-355608-A8) 3.5" 640x480 24-bit IPS LCD panel 8 8 9 9 maintainers: 10 10 - Ryan Walklin <ryan@testtoast.com> ··· 15 15 16 16 properties: 17 17 compatible: 18 - const: wl-355608-a8 18 + oneOf: 19 + - const: anbernic,rg35xx-plus-panel 20 + - items: 21 + - enum: 22 + - anbernic,rg35xx-2024-panel 23 + - anbernic,rg35xx-h-panel 24 + - anbernic,rg35xx-sp-panel 25 + - const: anbernic,rg35xx-plus-panel 19 26 20 27 reg: 21 28 maxItems: 1 ··· 47 40 #size-cells = <0>; 48 41 49 42 panel@0 { 50 - compatible = "wl-355608-a8"; 43 + compatible = "anbernic,rg35xx-plus-panel"; 51 44 reg = <0>; 52 45 53 46 spi-3wire;
+1 -1
MAINTAINERS
··· 7457 7457 T: git https://gitlab.freedesktop.org/drm/misc/kernel.git 7458 7458 F: Documentation/devicetree/bindings/display/bridge/ 7459 7459 F: drivers/gpu/drm/bridge/ 7460 + F: drivers/gpu/drm/display/drm_bridge_connector.c 7460 7461 F: drivers/gpu/drm/drm_bridge.c 7461 - F: drivers/gpu/drm/drm_bridge_connector.c 7462 7462 F: include/drm/drm_bridge.h 7463 7463 F: include/drm/drm_bridge_connector.h 7464 7464
-1
drivers/gpu/drm/Makefile
··· 128 128 drm_kms_helper-y := \ 129 129 drm_atomic_helper.o \ 130 130 drm_atomic_state_helper.o \ 131 - drm_bridge_connector.o \ 132 131 drm_crtc_helper.o \ 133 132 drm_damage_helper.o \ 134 133 drm_encoder_slave.o \
+7 -3
drivers/gpu/drm/arm/display/komeda/komeda_kms.c
··· 160 160 struct drm_plane *plane; 161 161 struct list_head zorder_list; 162 162 int order = 0, err; 163 + u32 slave_zpos = 0; 163 164 164 165 DRM_DEBUG_ATOMIC("[CRTC:%d:%s] calculating normalized zpos values\n", 165 166 crtc->base.id, crtc->name); ··· 200 199 plane_st->zpos, plane_st->normalized_zpos); 201 200 202 201 /* calculate max slave zorder */ 203 - if (has_bit(drm_plane_index(plane), kcrtc->slave_planes)) 202 + if (has_bit(drm_plane_index(plane), kcrtc->slave_planes)) { 203 + slave_zpos = plane_st->normalized_zpos; 204 + if (to_kplane_st(plane_st)->layer_split) 205 + slave_zpos++; 204 206 kcrtc_st->max_slave_zorder = 205 - max(plane_st->normalized_zpos, 206 - kcrtc_st->max_slave_zorder); 207 + max(slave_zpos, kcrtc_st->max_slave_zorder); 208 + } 207 209 } 208 210 209 211 crtc_st->zpos_changed = true;
+1
drivers/gpu/drm/bridge/Kconfig
··· 390 390 depends on OF 391 391 select DRM_DISPLAY_DP_HELPER 392 392 select DRM_DISPLAY_HELPER 393 + select DRM_BRIDGE_CONNECTOR 393 394 select DRM_KMS_HELPER 394 395 select REGMAP_I2C 395 396 select DRM_PANEL
+14 -10
drivers/gpu/drm/display/Kconfig
··· 1 1 # SPDX-License-Identifier: MIT 2 2 3 + config DRM_DISPLAY_DP_AUX_BUS 4 + tristate 5 + depends on DRM 6 + depends on OF || COMPILE_TEST 7 + 3 8 config DRM_DISPLAY_HELPER 4 9 tristate 5 10 depends on DRM 6 11 help 7 12 DRM helpers for display adapters. 8 13 9 - config DRM_DISPLAY_DP_AUX_BUS 10 - tristate 11 - depends on DRM 12 - depends on OF || COMPILE_TEST 14 + if DRM_DISPLAY_HELPER 15 + 16 + config DRM_BRIDGE_CONNECTOR 17 + bool 18 + select DRM_DISPLAY_HDMI_STATE_HELPER 19 + help 20 + DRM connector implementation terminating DRM bridge chains. 13 21 14 22 config DRM_DISPLAY_DP_AUX_CEC 15 23 bool "Enable DisplayPort CEC-Tunneling-over-AUX HDMI support" 16 - depends on DRM && DRM_DISPLAY_HELPER 17 24 select DRM_DISPLAY_DP_HELPER 18 25 select CEC_CORE 19 26 help ··· 32 25 33 26 config DRM_DISPLAY_DP_AUX_CHARDEV 34 27 bool "DRM DP AUX Interface" 35 - depends on DRM && DRM_DISPLAY_HELPER 36 28 select DRM_DISPLAY_DP_HELPER 37 29 help 38 30 Choose this option to enable a /dev/drm_dp_auxN node that allows to ··· 40 34 41 35 config DRM_DISPLAY_DP_HELPER 42 36 bool 43 - depends on DRM_DISPLAY_HELPER 44 37 help 45 38 DRM display helpers for DisplayPort. 46 39 ··· 66 61 67 62 config DRM_DISPLAY_HDCP_HELPER 68 63 bool 69 - depends on DRM_DISPLAY_HELPER 70 64 help 71 65 DRM display helpers for HDCP. 72 66 73 67 config DRM_DISPLAY_HDMI_HELPER 74 68 bool 75 - depends on DRM_DISPLAY_HELPER 76 69 help 77 70 DRM display helpers for HDMI. 78 71 79 72 config DRM_DISPLAY_HDMI_STATE_HELPER 80 73 bool 81 - depends on DRM_DISPLAY_HELPER 82 74 select DRM_DISPLAY_HDMI_HELPER 83 75 help 84 76 DRM KMS state helpers for HDMI. 77 + 78 + endif # DRM_DISPLAY_HELPER
+2
drivers/gpu/drm/display/Makefile
··· 3 3 obj-$(CONFIG_DRM_DISPLAY_DP_AUX_BUS) += drm_dp_aux_bus.o 4 4 5 5 drm_display_helper-y := drm_display_helper_mod.o 6 + drm_display_helper-$(CONFIG_DRM_BRIDGE_CONNECTOR) += \ 7 + drm_bridge_connector.o 6 8 drm_display_helper-$(CONFIG_DRM_DISPLAY_DP_HELPER) += \ 7 9 drm_dp_dual_mode_helper.o \ 8 10 drm_dp_helper.o \
+12 -1
drivers/gpu/drm/drm_bridge_connector.c drivers/gpu/drm/display/drm_bridge_connector.c
··· 216 216 } 217 217 } 218 218 219 + static void drm_bridge_connector_reset(struct drm_connector *connector) 220 + { 221 + struct drm_bridge_connector *bridge_connector = 222 + to_drm_bridge_connector(connector); 223 + 224 + drm_atomic_helper_connector_reset(connector); 225 + if (bridge_connector->bridge_hdmi) 226 + __drm_atomic_helper_connector_hdmi_reset(connector, 227 + connector->state); 228 + } 229 + 219 230 static const struct drm_connector_funcs drm_bridge_connector_funcs = { 220 - .reset = drm_atomic_helper_connector_reset, 231 + .reset = drm_bridge_connector_reset, 221 232 .detect = drm_bridge_connector_detect, 222 233 .fill_modes = drm_helper_probe_single_connector_modes, 223 234 .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state,
+64 -19
drivers/gpu/drm/drm_fbdev_dma.c
··· 36 36 return 0; 37 37 } 38 38 39 - FB_GEN_DEFAULT_DEFERRED_DMAMEM_OPS(drm_fbdev_dma, 40 - drm_fb_helper_damage_range, 41 - drm_fb_helper_damage_area); 42 - 43 39 static int drm_fbdev_dma_fb_mmap(struct fb_info *info, struct vm_area_struct *vma) 44 40 { 45 41 struct drm_fb_helper *fb_helper = info->par; 46 - struct drm_framebuffer *fb = fb_helper->fb; 47 - struct drm_gem_dma_object *dma = drm_fb_dma_get_gem_obj(fb, 0); 48 42 49 - if (!dma->map_noncoherent) 50 - vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot); 51 - 52 - return fb_deferred_io_mmap(info, vma); 43 + return drm_gem_prime_mmap(fb_helper->buffer->gem, vma); 53 44 } 54 45 55 46 static void drm_fbdev_dma_fb_destroy(struct fb_info *info) ··· 64 73 .owner = THIS_MODULE, 65 74 .fb_open = drm_fbdev_dma_fb_open, 66 75 .fb_release = drm_fbdev_dma_fb_release, 76 + __FB_DEFAULT_DMAMEM_OPS_RDWR, 77 + DRM_FB_HELPER_DEFAULT_OPS, 78 + __FB_DEFAULT_DMAMEM_OPS_DRAW, 79 + .fb_mmap = drm_fbdev_dma_fb_mmap, 80 + .fb_destroy = drm_fbdev_dma_fb_destroy, 81 + }; 82 + 83 + FB_GEN_DEFAULT_DEFERRED_DMAMEM_OPS(drm_fbdev_dma, 84 + drm_fb_helper_damage_range, 85 + drm_fb_helper_damage_area); 86 + 87 + static int drm_fbdev_dma_deferred_fb_mmap(struct fb_info *info, struct vm_area_struct *vma) 88 + { 89 + struct drm_fb_helper *fb_helper = info->par; 90 + struct drm_framebuffer *fb = fb_helper->fb; 91 + struct drm_gem_dma_object *dma = drm_fb_dma_get_gem_obj(fb, 0); 92 + 93 + if (!dma->map_noncoherent) 94 + vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot); 95 + 96 + return fb_deferred_io_mmap(info, vma); 97 + } 98 + 99 + static const struct fb_ops drm_fbdev_dma_deferred_fb_ops = { 100 + .owner = THIS_MODULE, 101 + .fb_open = drm_fbdev_dma_fb_open, 102 + .fb_release = drm_fbdev_dma_fb_release, 67 103 __FB_DEFAULT_DEFERRED_OPS_RDWR(drm_fbdev_dma), 68 104 DRM_FB_HELPER_DEFAULT_OPS, 69 105 __FB_DEFAULT_DEFERRED_OPS_DRAW(drm_fbdev_dma), 70 - .fb_mmap = drm_fbdev_dma_fb_mmap, 106 + .fb_mmap = drm_fbdev_dma_deferred_fb_mmap, 71 107 .fb_destroy = drm_fbdev_dma_fb_destroy, 72 108 }; 73 109 ··· 107 89 { 108 90 struct drm_client_dev *client = &fb_helper->client; 109 91 struct drm_device *dev = fb_helper->dev; 92 + bool use_deferred_io = false; 110 93 struct drm_client_buffer *buffer; 111 94 struct drm_gem_dma_object *dma_obj; 112 95 struct drm_framebuffer *fb; ··· 130 111 131 112 fb = buffer->fb; 132 113 114 + /* 115 + * Deferred I/O requires struct page for framebuffer memory, 116 + * which is not guaranteed for all DMA ranges. We thus only 117 + * install deferred I/O if we have a framebuffer that requires 118 + * it. 119 + */ 120 + if (fb->funcs->dirty) 121 + use_deferred_io = true; 122 + 133 123 ret = drm_client_buffer_vmap(buffer, &map); 134 124 if (ret) { 135 125 goto err_drm_client_buffer_delete; ··· 158 130 159 131 drm_fb_helper_fill_info(info, fb_helper, sizes); 160 132 161 - info->fbops = &drm_fbdev_dma_fb_ops; 133 + if (use_deferred_io) 134 + info->fbops = &drm_fbdev_dma_deferred_fb_ops; 135 + else 136 + info->fbops = &drm_fbdev_dma_fb_ops; 162 137 163 138 /* screen */ 164 139 info->flags |= FBINFO_VIRTFB; /* system memory */ ··· 175 144 } 176 145 info->fix.smem_len = info->screen_size; 177 146 178 - /* deferred I/O */ 179 - fb_helper->fbdefio.delay = HZ / 20; 180 - fb_helper->fbdefio.deferred_io = drm_fb_helper_deferred_io; 147 + /* 148 + * Only set up deferred I/O if the screen buffer supports 149 + * it. If this disagrees with the previous test for ->dirty, 150 + * mmap on the /dev/fb file might not work correctly. 151 + */ 152 + if (!is_vmalloc_addr(info->screen_buffer) && info->fix.smem_start) { 153 + unsigned long pfn = info->fix.smem_start >> PAGE_SHIFT; 181 154 182 - info->fbdefio = &fb_helper->fbdefio; 183 - ret = fb_deferred_io_init(info); 184 - if (ret) 185 - goto err_drm_fb_helper_release_info; 155 + if (drm_WARN_ON(dev, !pfn_to_page(pfn))) 156 + use_deferred_io = false; 157 + } 158 + 159 + /* deferred I/O */ 160 + if (use_deferred_io) { 161 + fb_helper->fbdefio.delay = HZ / 20; 162 + fb_helper->fbdefio.deferred_io = drm_fb_helper_deferred_io; 163 + 164 + info->fbdefio = &fb_helper->fbdefio; 165 + ret = fb_deferred_io_init(info); 166 + if (ret) 167 + goto err_drm_fb_helper_release_info; 168 + } 186 169 187 170 return 0; 188 171
+4
drivers/gpu/drm/imagination/pvr_vm.c
··· 114 114 struct drm_gpuva base; 115 115 }; 116 116 117 + #define to_pvr_vm_gpuva(va) container_of_const(va, struct pvr_vm_gpuva, base) 118 + 117 119 enum pvr_vm_bind_type { 118 120 PVR_VM_BIND_TYPE_MAP, 119 121 PVR_VM_BIND_TYPE_UNMAP, ··· 388 386 389 387 drm_gpuva_unmap(&op->unmap); 390 388 drm_gpuva_unlink(op->unmap.va); 389 + kfree(to_pvr_vm_gpuva(op->unmap.va)); 391 390 392 391 return 0; 393 392 } ··· 436 433 } 437 434 438 435 drm_gpuva_unlink(op->remap.unmap->va); 436 + kfree(to_pvr_vm_gpuva(op->remap.unmap->va)); 439 437 440 438 return 0; 441 439 }
+2
drivers/gpu/drm/imx/dcss/Kconfig
··· 2 2 tristate "i.MX8MQ DCSS" 3 3 select IMX_IRQSTEER 4 4 select DRM_KMS_HELPER 5 + select DRM_DISPLAY_HELPER 6 + select DRM_BRIDGE_CONNECTOR 5 7 select DRM_GEM_DMA_HELPER 6 8 select VIDEOMODE_HELPERS 7 9 depends on DRM && ARCH_MXC && ARM64
+2
drivers/gpu/drm/imx/lcdc/Kconfig
··· 3 3 depends on DRM && (ARCH_MXC || COMPILE_TEST) 4 4 select DRM_GEM_DMA_HELPER 5 5 select DRM_KMS_HELPER 6 + select DRM_DISPLAY_HELPER 7 + select DRM_BRIDGE_CONNECTOR 6 8 help 7 9 Found on i.MX1, i.MX21, i.MX25 and i.MX27.
+2
drivers/gpu/drm/ingenic/Kconfig
··· 8 8 select DRM_BRIDGE 9 9 select DRM_PANEL_BRIDGE 10 10 select DRM_KMS_HELPER 11 + select DRM_DISPLAY_HELPER 12 + select DRM_BRIDGE_CONNECTOR 11 13 select DRM_GEM_DMA_HELPER 12 14 select REGMAP 13 15 select REGMAP_MMIO
+2
drivers/gpu/drm/kmb/Kconfig
··· 3 3 depends on DRM 4 4 depends on ARCH_KEEMBAY || COMPILE_TEST 5 5 select DRM_KMS_HELPER 6 + select DRM_DISPLAY_HELPER 7 + select DRM_BRIDGE_CONNECTOR 6 8 select DRM_GEM_DMA_HELPER 7 9 select DRM_MIPI_DSI 8 10 help
+2
drivers/gpu/drm/mediatek/Kconfig
··· 9 9 depends on MTK_MMSYS 10 10 select DRM_GEM_DMA_HELPER if DRM_FBDEV_EMULATION 11 11 select DRM_KMS_HELPER 12 + select DRM_DISPLAY_HELPER 13 + select DRM_BRIDGE_CONNECTOR 12 14 select DRM_MIPI_DSI 13 15 select DRM_PANEL 14 16 select MEMORY
+2
drivers/gpu/drm/meson/Kconfig
··· 4 4 depends on DRM && OF && (ARM || ARM64) 5 5 depends on ARCH_MESON || COMPILE_TEST 6 6 select DRM_KMS_HELPER 7 + select DRM_DISPLAY_HELPER 8 + select DRM_BRIDGE_CONNECTOR 7 9 select DRM_GEM_DMA_HELPER 8 10 select DRM_DISPLAY_CONNECTOR 9 11 select VIDEOMODE_HELPERS
+1
drivers/gpu/drm/msm/Kconfig
··· 17 17 select DRM_DISPLAY_DP_AUX_BUS 18 18 select DRM_DISPLAY_DP_HELPER 19 19 select DRM_DISPLAY_HELPER 20 + select DRM_BRIDGE_CONNECTOR 20 21 select DRM_EXEC 21 22 select DRM_KMS_HELPER 22 23 select DRM_PANEL
+1 -1
drivers/gpu/drm/nouveau/nvkm/subdev/gsp/fwsec.c
··· 324 324 return ret; 325 325 326 326 /* Verify. */ 327 - err = nvkm_rd32(device, 0x001400 + (0xf * 4)) & 0x0000ffff; 327 + err = nvkm_rd32(device, 0x001400 + (0x15 * 4)) & 0x0000ffff; 328 328 if (err) { 329 329 nvkm_error(subdev, "fwsec-sb: 0x%04x\n", err); 330 330 return -EIO;
+2
drivers/gpu/drm/omapdrm/Kconfig
··· 5 5 depends on DRM && OF 6 6 depends on ARCH_OMAP2PLUS || (COMPILE_TEST && PAGE_SIZE_LESS_THAN_64KB) 7 7 select DRM_KMS_HELPER 8 + select DRM_DISPLAY_HELPER 9 + select DRM_BRIDGE_CONNECTOR 8 10 select FB_DMAMEM_HELPERS_DEFERRED if DRM_FBDEV_EMULATION 9 11 select VIDEOMODE_HELPERS 10 12 select HDMI
+1 -1
drivers/gpu/drm/panel/panel-newvision-nv3052c.c
··· 925 925 static const struct of_device_id nv3052c_of_match[] = { 926 926 { .compatible = "leadtek,ltk035c5444t", .data = &ltk035c5444t_panel_info }, 927 927 { .compatible = "fascontek,fs035vg158", .data = &fs035vg158_panel_info }, 928 - { .compatible = "wl-355608-a8", .data = &wl_355608_a8_panel_info }, 928 + { .compatible = "anbernic,rg35xx-plus-panel", .data = &wl_355608_a8_panel_info }, 929 929 { /* sentinel */ } 930 930 }; 931 931 MODULE_DEVICE_TABLE(of, nv3052c_of_match);
+23
drivers/gpu/drm/panthor/panthor_drv.c
··· 10 10 #include <linux/platform_device.h> 11 11 #include <linux/pm_runtime.h> 12 12 13 + #include <drm/drm_auth.h> 13 14 #include <drm/drm_debugfs.h> 14 15 #include <drm/drm_drv.h> 15 16 #include <drm/drm_exec.h> ··· 997 996 return panthor_group_destroy(pfile, args->group_handle); 998 997 } 999 998 999 + static int group_priority_permit(struct drm_file *file, 1000 + u8 priority) 1001 + { 1002 + /* Ensure that priority is valid */ 1003 + if (priority > PANTHOR_GROUP_PRIORITY_HIGH) 1004 + return -EINVAL; 1005 + 1006 + /* Medium priority and below are always allowed */ 1007 + if (priority <= PANTHOR_GROUP_PRIORITY_MEDIUM) 1008 + return 0; 1009 + 1010 + /* Higher priorities require CAP_SYS_NICE or DRM_MASTER */ 1011 + if (capable(CAP_SYS_NICE) || drm_is_current_master(file)) 1012 + return 0; 1013 + 1014 + return -EACCES; 1015 + } 1016 + 1000 1017 static int panthor_ioctl_group_create(struct drm_device *ddev, void *data, 1001 1018 struct drm_file *file) 1002 1019 { ··· 1027 1008 return -EINVAL; 1028 1009 1029 1010 ret = PANTHOR_UOBJ_GET_ARRAY(queue_args, &args->queues); 1011 + if (ret) 1012 + return ret; 1013 + 1014 + ret = group_priority_permit(file, args->priority); 1030 1015 if (ret) 1031 1016 return ret; 1032 1017
+7 -1
drivers/gpu/drm/panthor/panthor_fw.c
··· 1089 1089 panthor_fw_stop(ptdev); 1090 1090 ptdev->fw->fast_reset = false; 1091 1091 drm_err(&ptdev->base, "FW fast reset failed, trying a slow reset"); 1092 + 1093 + ret = panthor_vm_flush_all(ptdev->fw->vm); 1094 + if (ret) { 1095 + drm_err(&ptdev->base, "FW slow reset failed (couldn't flush FW's AS l2cache)"); 1096 + return ret; 1097 + } 1092 1098 } 1093 1099 1094 1100 /* Reload all sections, including RO ones. We're not supposed ··· 1105 1099 1106 1100 ret = panthor_fw_start(ptdev); 1107 1101 if (ret) { 1108 - drm_err(&ptdev->base, "FW slow reset failed"); 1102 + drm_err(&ptdev->base, "FW slow reset failed (couldn't start the FW )"); 1109 1103 return ret; 1110 1104 } 1111 1105
+18 -3
drivers/gpu/drm/panthor/panthor_mmu.c
··· 576 576 if (as_nr < 0) 577 577 return 0; 578 578 579 + /* 580 + * If the AS number is greater than zero, then we can be sure 581 + * the device is up and running, so we don't need to explicitly 582 + * power it up 583 + */ 584 + 579 585 if (op != AS_COMMAND_UNLOCK) 580 586 lock_region(ptdev, as_nr, iova, size); 581 587 ··· 880 874 if (!drm_dev_enter(&ptdev->base, &cookie)) 881 875 return 0; 882 876 883 - /* Flush the PTs only if we're already awake */ 884 - if (pm_runtime_active(ptdev->base.dev)) 885 - ret = mmu_hw_do_operation(vm, iova, size, AS_COMMAND_FLUSH_PT); 877 + ret = mmu_hw_do_operation(vm, iova, size, AS_COMMAND_FLUSH_PT); 886 878 887 879 drm_dev_exit(cookie); 888 880 return ret; 881 + } 882 + 883 + /** 884 + * panthor_vm_flush_all() - Flush L2 caches for the entirety of a VM's AS 885 + * @vm: VM whose cache to flush 886 + * 887 + * Return: 0 on success, a negative error code if flush failed. 888 + */ 889 + int panthor_vm_flush_all(struct panthor_vm *vm) 890 + { 891 + return panthor_vm_flush_range(vm, vm->base.mm_start, vm->base.mm_range); 889 892 } 890 893 891 894 static int panthor_vm_unmap_pages(struct panthor_vm *vm, u64 iova, u64 size)
+1
drivers/gpu/drm/panthor/panthor_mmu.h
··· 31 31 int panthor_vm_active(struct panthor_vm *vm); 32 32 void panthor_vm_idle(struct panthor_vm *vm); 33 33 int panthor_vm_as(struct panthor_vm *vm); 34 + int panthor_vm_flush_all(struct panthor_vm *vm); 34 35 35 36 struct panthor_heap_pool * 36 37 panthor_vm_get_heap_pool(struct panthor_vm *vm, bool create);
+1 -1
drivers/gpu/drm/panthor/panthor_sched.c
··· 3092 3092 if (group_args->pad) 3093 3093 return -EINVAL; 3094 3094 3095 - if (group_args->priority > PANTHOR_CSG_PRIORITY_HIGH) 3095 + if (group_args->priority >= PANTHOR_CSG_PRIORITY_COUNT) 3096 3096 return -EINVAL; 3097 3097 3098 3098 if ((group_args->compute_core_mask & ~ptdev->gpu_info.shader_present) ||
+2
drivers/gpu/drm/renesas/rcar-du/Kconfig
··· 5 5 depends on ARM || ARM64 || COMPILE_TEST 6 6 depends on ARCH_RENESAS || COMPILE_TEST 7 7 select DRM_KMS_HELPER 8 + select DRM_DISPLAY_HELPER 9 + select DRM_BRIDGE_CONNECTOR 8 10 select DRM_GEM_DMA_HELPER 9 11 select VIDEOMODE_HELPERS 10 12 help
+2
drivers/gpu/drm/renesas/rz-du/Kconfig
··· 6 6 depends on VIDEO_RENESAS_VSP1 7 7 select DRM_GEM_DMA_HELPER 8 8 select DRM_KMS_HELPER 9 + select DRM_DISPLAY_HELPER 10 + select DRM_BRIDGE_CONNECTOR 9 11 select VIDEOMODE_HELPERS 10 12 help 11 13 Choose this option if you have an RZ/G2L alike chipset.
+2
drivers/gpu/drm/renesas/shmobile/Kconfig
··· 5 5 depends on ARCH_RENESAS || ARCH_SHMOBILE || COMPILE_TEST 6 6 select BACKLIGHT_CLASS_DEVICE 7 7 select DRM_KMS_HELPER 8 + select DRM_DISPLAY_HELPER 9 + select DRM_BRIDGE_CONNECTOR 8 10 select DRM_GEM_DMA_HELPER 9 11 select VIDEOMODE_HELPERS 10 12 help
+4
drivers/gpu/drm/rockchip/Kconfig
··· 86 86 bool "Rockchip LVDS support" 87 87 depends on DRM_ROCKCHIP 88 88 depends on PINCTRL && OF 89 + select DRM_DISPLAY_HELPER 90 + select DRM_BRIDGE_CONNECTOR 89 91 help 90 92 Choose this option to enable support for Rockchip LVDS controllers. 91 93 Rockchip rk3288 SoC has LVDS TX Controller can be used, and it ··· 98 96 bool "Rockchip RGB support" 99 97 depends on DRM_ROCKCHIP 100 98 depends on PINCTRL 99 + select DRM_DISPLAY_HELPER 100 + select DRM_BRIDGE_CONNECTOR 101 101 help 102 102 Choose this option to enable support for Rockchip RGB output. 103 103 Some Rockchip CRTCs, like rv1108, can directly output parallel
+1
drivers/gpu/drm/tegra/Kconfig
··· 8 8 select DRM_DISPLAY_DP_HELPER 9 9 select DRM_DISPLAY_HDMI_HELPER 10 10 select DRM_DISPLAY_HELPER 11 + select DRM_BRIDGE_CONNECTOR 11 12 select DRM_DISPLAY_DP_AUX_BUS 12 13 select DRM_KMS_HELPER 13 14 select DRM_MIPI_DSI
+2
drivers/gpu/drm/tidss/Kconfig
··· 3 3 depends on DRM && OF 4 4 depends on ARM || ARM64 || COMPILE_TEST 5 5 select DRM_KMS_HELPER 6 + select DRM_DISPLAY_HELPER 7 + select DRM_BRIDGE_CONNECTOR 6 8 select DRM_GEM_DMA_HELPER 7 9 help 8 10 The TI Keystone family SoCs introduced a new generation of
+1
drivers/gpu/drm/xlnx/Kconfig
··· 8 8 select DMA_ENGINE 9 9 select DRM_DISPLAY_DP_HELPER 10 10 select DRM_DISPLAY_HELPER 11 + select DRM_BRIDGE_CONNECTOR 11 12 select DRM_GEM_DMA_HELPER 12 13 select DRM_KMS_HELPER 13 14 select GENERIC_PHY
+5 -1
include/uapi/drm/panthor_drm.h
··· 692 692 /** @PANTHOR_GROUP_PRIORITY_MEDIUM: Medium priority group. */ 693 693 PANTHOR_GROUP_PRIORITY_MEDIUM, 694 694 695 - /** @PANTHOR_GROUP_PRIORITY_HIGH: High priority group. */ 695 + /** 696 + * @PANTHOR_GROUP_PRIORITY_HIGH: High priority group. 697 + * 698 + * Requires CAP_SYS_NICE or DRM_MASTER. 699 + */ 696 700 PANTHOR_GROUP_PRIORITY_HIGH, 697 701 }; 698 702