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

drm: xlnx: zynqmp_dpsub: Allow configuration of layer mode

Add a mode parameter to the zynqmp_disp_layer_enable() to set the layer
mode, to prepare for live mode support.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

+22 -23
+9 -21
drivers/gpu/drm/xlnx/zynqmp_disp.c
··· 79 79 }; 80 80 81 81 /** 82 - * enum zynqmp_disp_layer_mode - Layer mode 83 - * @ZYNQMP_DISP_LAYER_NONLIVE: non-live (memory) mode 84 - * @ZYNQMP_DISP_LAYER_LIVE: live (stream) mode 85 - */ 86 - enum zynqmp_disp_layer_mode { 87 - ZYNQMP_DISP_LAYER_NONLIVE, 88 - ZYNQMP_DISP_LAYER_LIVE 89 - }; 90 - 91 - /** 92 82 * struct zynqmp_disp_layer_dma - DMA channel for one data plane of a layer 93 83 * @chan: DMA channel 94 84 * @xt: Interleaved DMA descriptor template ··· 121 131 122 132 const struct zynqmp_disp_format *disp_fmt; 123 133 const struct drm_format_info *drm_fmt; 124 - enum zynqmp_disp_layer_mode mode; 134 + enum zynqmp_dpsub_layer_mode mode; 125 135 }; 126 136 127 137 /** ··· 509 519 * zynqmp_disp_avbuf_enable_video - Enable a video layer 510 520 * @disp: Display controller 511 521 * @layer: The layer 512 - * @mode: Operating mode of layer 513 522 * 514 523 * Enable the video/graphics buffer for @layer. 515 524 */ 516 525 static void zynqmp_disp_avbuf_enable_video(struct zynqmp_disp *disp, 517 - struct zynqmp_disp_layer *layer, 518 - enum zynqmp_disp_layer_mode mode) 526 + struct zynqmp_disp_layer *layer) 519 527 { 520 528 u32 val; 521 529 522 530 val = zynqmp_disp_avbuf_read(disp, ZYNQMP_DISP_AV_BUF_OUTPUT); 523 531 if (zynqmp_disp_layer_is_video(layer)) { 524 532 val &= ~ZYNQMP_DISP_AV_BUF_OUTPUT_VID1_MASK; 525 - if (mode == ZYNQMP_DISP_LAYER_NONLIVE) 533 + if (layer->mode == ZYNQMP_DPSUB_LAYER_NONLIVE) 526 534 val |= ZYNQMP_DISP_AV_BUF_OUTPUT_VID1_MEM; 527 535 else 528 536 val |= ZYNQMP_DISP_AV_BUF_OUTPUT_VID1_LIVE; 529 537 } else { 530 538 val &= ~ZYNQMP_DISP_AV_BUF_OUTPUT_VID2_MASK; 531 539 val |= ZYNQMP_DISP_AV_BUF_OUTPUT_VID2_MEM; 532 - if (mode == ZYNQMP_DISP_LAYER_NONLIVE) 540 + if (layer->mode == ZYNQMP_DPSUB_LAYER_NONLIVE) 533 541 val |= ZYNQMP_DISP_AV_BUF_OUTPUT_VID2_MEM; 534 542 else 535 543 val |= ZYNQMP_DISP_AV_BUF_OUTPUT_VID2_LIVE; ··· 902 914 /** 903 915 * zynqmp_disp_layer_enable - Enable a layer 904 916 * @layer: The layer 917 + * @mode: Operating mode of layer 905 918 * 906 919 * Enable the @layer in the audio/video buffer manager and the blender. DMA 907 920 * channels are started separately by zynqmp_disp_layer_update(). 908 921 */ 909 - void zynqmp_disp_layer_enable(struct zynqmp_disp_layer *layer) 922 + void zynqmp_disp_layer_enable(struct zynqmp_disp_layer *layer, 923 + enum zynqmp_dpsub_layer_mode mode) 910 924 { 911 - zynqmp_disp_avbuf_enable_video(layer->disp, layer, 912 - ZYNQMP_DISP_LAYER_NONLIVE); 925 + layer->mode = mode; 926 + zynqmp_disp_avbuf_enable_video(layer->disp, layer); 913 927 zynqmp_disp_blend_layer_enable(layer->disp, layer); 914 - 915 - layer->mode = ZYNQMP_DISP_LAYER_NONLIVE; 916 928 } 917 929 918 930 /**
+12 -1
drivers/gpu/drm/xlnx/zynqmp_disp.h
··· 42 42 ZYNQMP_DPSUB_LAYER_GFX, 43 43 }; 44 44 45 + /** 46 + * enum zynqmp_dpsub_layer_mode - Layer mode 47 + * @ZYNQMP_DPSUB_LAYER_NONLIVE: non-live (memory) mode 48 + * @ZYNQMP_DPSUB_LAYER_LIVE: live (stream) mode 49 + */ 50 + enum zynqmp_dpsub_layer_mode { 51 + ZYNQMP_DPSUB_LAYER_NONLIVE, 52 + ZYNQMP_DPSUB_LAYER_LIVE, 53 + }; 54 + 45 55 void zynqmp_disp_enable(struct zynqmp_disp *disp); 46 56 void zynqmp_disp_disable(struct zynqmp_disp *disp); 47 57 int zynqmp_disp_setup_clock(struct zynqmp_disp *disp, ··· 62 52 63 53 u32 *zynqmp_disp_layer_drm_formats(struct zynqmp_disp_layer *layer, 64 54 unsigned int *num_formats); 65 - void zynqmp_disp_layer_enable(struct zynqmp_disp_layer *layer); 55 + void zynqmp_disp_layer_enable(struct zynqmp_disp_layer *layer, 56 + enum zynqmp_dpsub_layer_mode mode); 66 57 void zynqmp_disp_layer_disable(struct zynqmp_disp_layer *layer); 67 58 void zynqmp_disp_layer_set_format(struct zynqmp_disp_layer *layer, 68 59 const struct drm_format_info *info);
+1 -1
drivers/gpu/drm/xlnx/zynqmp_kms.c
··· 123 123 124 124 /* Enable or re-enable the plane if the format has changed. */ 125 125 if (format_changed) 126 - zynqmp_disp_layer_enable(layer); 126 + zynqmp_disp_layer_enable(layer, ZYNQMP_DPSUB_LAYER_NONLIVE); 127 127 } 128 128 129 129 static const struct drm_plane_helper_funcs zynqmp_dpsub_plane_helper_funcs = {