From a0b168f7b38a754cede7a0ee8ccae36010586e11 Mon Sep 17 00:00:00 2001 From: Narendra Muppalla Date: Thu, 12 Dec 2019 10:50:17 -0800 Subject: [PATCH] Config: enable techpack display driver compilation for lahaina This change enables display drivers code compilation for lahaina target and current location of header files is replacing the header files in usr/include/drm directory before installing display specific header files. This change ensures both the drm and msm_drv header files are exported to user mode clients. Change-Id: If6fc347598b902e670b7206dbcb82fe0740b3984 Signed-off-by: Shashank Babu Chinta Venkata Signed-off-by: Abhijit Kulkarni Signed-off-by: Narendra Muppalla --- Makefile | 9 + config/lahainadisp.conf | 8 + config/lahainadispconf.h | 15 + include/uapi/Kbuild | 4 +- include/uapi/display/Kbuild | 4 + include/uapi/{ => display}/drm/Kbuild | 0 include/uapi/{ => display}/drm/msm_drm_pp.h | 0 include/uapi/{ => display}/drm/sde_drm.h | 0 include/uapi/{ => display}/media/Kbuild | 1 + include/uapi/display/media/mmm_color_fmt.h | 1368 +++++++++++++++++ .../{ => display}/media/msm_sde_rotator.h | 0 msm/Makefile | 4 +- msm/sde/sde_connector.h | 4 +- msm/sde/sde_crtc.c | 4 +- msm/sde/sde_encoder_phys_wb.c | 4 +- msm/sde/sde_formats.c | 71 +- msm/sde/sde_hw_pingpong.h | 4 +- msm/sde/sde_hw_util.c | 4 +- msm/sde/sde_plane.c | 6 +- msm/sde/sde_wb.c | 4 +- 20 files changed, 1466 insertions(+), 48 deletions(-) create mode 100644 config/lahainadisp.conf create mode 100644 config/lahainadispconf.h create mode 100644 include/uapi/display/Kbuild rename include/uapi/{ => display}/drm/Kbuild (100%) rename include/uapi/{ => display}/drm/msm_drm_pp.h (100%) rename include/uapi/{ => display}/drm/sde_drm.h (100%) rename include/uapi/{ => display}/media/Kbuild (77%) create mode 100644 include/uapi/display/media/mmm_color_fmt.h rename include/uapi/{ => display}/media/msm_sde_rotator.h (100%) diff --git a/Makefile b/Makefile index b2829628..52aa38f1 100644 --- a/Makefile +++ b/Makefile @@ -9,6 +9,15 @@ ifeq ($(CONFIG_ARCH_KONA), y) LINUXINCLUDE += -include $(srctree)/techpack/display/config/konadispconf.h endif +ifeq ($(CONFIG_ARCH_LAHAINA), y) +include $(srctree)/techpack/display/config/lahainadisp.conf +LINUXINCLUDE += -include $(srctree)/techpack/display/config/lahainadispconf.h +LINUXINCLUDE += \ + -I$(srctree)/techpack/display/include/uapi/display \ + -I$(srctree)/techpack/display/include +USERINCLUDE += -I$(srctree)/techpack/display/include/uapi/display +endif + ifeq ($(CONFIG_ARCH_LITO), y) include $(srctree)/techpack/display/config/saipdisp.conf endif diff --git a/config/lahainadisp.conf b/config/lahainadisp.conf new file mode 100644 index 00000000..00dc311a --- /dev/null +++ b/config/lahainadisp.conf @@ -0,0 +1,8 @@ +export CONFIG_DRM_MSM=y +export CONFIG_DRM_MSM_SDE=y +export CONFIG_SYNC_FILE=y +export CONFIG_DRM_MSM_DSI=y +export CONFIG_DSI_PARSER=y +export CONFIG_DRM_SDE_WB=y +export CONFIG_DRM_MSM_REGISTER_LOGGING=y +export CONFIG_QCOM_MDSS_PLL=y diff --git a/config/lahainadispconf.h b/config/lahainadispconf.h new file mode 100644 index 00000000..37eff52e --- /dev/null +++ b/config/lahainadispconf.h @@ -0,0 +1,15 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Copyright (c) 2020, The Linux Foundation. All rights reserved. + */ + +#define CONFIG_DRM_MSM 1 +#define CONFIG_DRM_MSM_SDE 1 +#define CONFIG_SYNC_FILE 1 +#define CONFIG_DRM_MSM_DSI 1 +#define CONFIG_DSI_PARSER 1 +#define CONFIG_DRM_SDE_WB 1 +#define CONFIG_DRM_MSM_REGISTER_LOGGING 1 +#define CONFIG_DRM_SDE_EVTLOG_DEBUG 1 +#define CONFIG_QCOM_MDSS_PLL 1 + diff --git a/include/uapi/Kbuild b/include/uapi/Kbuild index 9c16774b..75a83a0d 100644 --- a/include/uapi/Kbuild +++ b/include/uapi/Kbuild @@ -1,4 +1,4 @@ # SPDX-License-Identifier: GPL-2.0-only WITH Linux-syscall-note -header-y += media/ -header-y += drm/ +# Top-level Makefile calls into asm-$(ARCH) +# List only non-arch directories below diff --git a/include/uapi/display/Kbuild b/include/uapi/display/Kbuild new file mode 100644 index 00000000..9c16774b --- /dev/null +++ b/include/uapi/display/Kbuild @@ -0,0 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0-only WITH Linux-syscall-note + +header-y += media/ +header-y += drm/ diff --git a/include/uapi/drm/Kbuild b/include/uapi/display/drm/Kbuild similarity index 100% rename from include/uapi/drm/Kbuild rename to include/uapi/display/drm/Kbuild diff --git a/include/uapi/drm/msm_drm_pp.h b/include/uapi/display/drm/msm_drm_pp.h similarity index 100% rename from include/uapi/drm/msm_drm_pp.h rename to include/uapi/display/drm/msm_drm_pp.h diff --git a/include/uapi/drm/sde_drm.h b/include/uapi/display/drm/sde_drm.h similarity index 100% rename from include/uapi/drm/sde_drm.h rename to include/uapi/display/drm/sde_drm.h diff --git a/include/uapi/media/Kbuild b/include/uapi/display/media/Kbuild similarity index 77% rename from include/uapi/media/Kbuild rename to include/uapi/display/media/Kbuild index 5206c4c4..c8bca26b 100644 --- a/include/uapi/media/Kbuild +++ b/include/uapi/display/media/Kbuild @@ -1,3 +1,4 @@ # SPDX-License-Identifier: GPL-2.0-only WITH Linux-syscall-note header-y += msm_sde_rotator.h +header-y += mmm_color_fmt.h diff --git a/include/uapi/display/media/mmm_color_fmt.h b/include/uapi/display/media/mmm_color_fmt.h new file mode 100644 index 00000000..5e4d4930 --- /dev/null +++ b/include/uapi/display/media/mmm_color_fmt.h @@ -0,0 +1,1368 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +/* + * Copyright (c) 2020, The Linux Foundation. All rights reserved. + */ +#ifndef __MMM_COLOR_FMT_INFO_H__ +#define __MMM_COLOR_FMT_INFO_H__ + +/* Width and Height should be multiple of 16 */ +#define INTERLACE_WIDTH_MAX 1920 +#define INTERLACE_HEIGHT_MAX 1920 +#define INTERLACE_MB_PER_FRAME_MAX ((1920*1088)/256) + +#ifndef MMM_COLOR_FMT_ALIGN +#define MMM_COLOR_FMT_ALIGN(__sz, __align) (((__align) & ((__align) - 1)) ?\ + ((((__sz) + (__align) - 1) / (__align)) * (__align)) :\ + (((__sz) + (__align) - 1) & (~((__align) - 1)))) +#endif + +#ifndef MMM_COLOR_FMT_ROUNDUP +#define MMM_COLOR_FMT_ROUNDUP(__sz, __r) (((__sz) + ((__r) - 1)) / (__r)) +#endif + +enum mmm_color_fmts { + /* Venus NV12: + * YUV 4:2:0 image with a plane of 8 bit Y samples followed + * by an interleaved U/V plane containing 8 bit 2x2 subsampled + * colour difference samples. + * + * <-------- Y/UV_Stride --------> + * <------- Width -------> + * Y Y Y Y Y Y Y Y Y Y Y Y . . . . ^ ^ + * Y Y Y Y Y Y Y Y Y Y Y Y . . . . | | + * Y Y Y Y Y Y Y Y Y Y Y Y . . . . Height | + * Y Y Y Y Y Y Y Y Y Y Y Y . . . . | Y_Scanlines + * Y Y Y Y Y Y Y Y Y Y Y Y . . . . | | + * Y Y Y Y Y Y Y Y Y Y Y Y . . . . | | + * Y Y Y Y Y Y Y Y Y Y Y Y . . . . | | + * Y Y Y Y Y Y Y Y Y Y Y Y . . . . V | + * . . . . . . . . . . . . . . . . | + * . . . . . . . . . . . . . . . . | + * . . . . . . . . . . . . . . . . | + * . . . . . . . . . . . . . . . . V + * U V U V U V U V U V U V . . . . ^ + * U V U V U V U V U V U V . . . . | + * U V U V U V U V U V U V . . . . | + * U V U V U V U V U V U V . . . . UV_Scanlines + * . . . . . . . . . . . . . . . . | + * . . . . . . . . . . . . . . . . V + * . . . . . . . . . . . . . . . . --> Buffer size alignment + * + * Y_Stride : Width aligned to 512 + * UV_Stride : Width aligned to 512 + * Y_Scanlines: Height aligned to 512 + * UV_Scanlines: Height/2 aligned to 256 + * Total size = align(Y_Stride * Y_Scanlines + * + UV_Stride * UV_Scanlines, 4096) + */ + MMM_COLOR_FMT_NV12, + /* Venus NV21: + * YUV 4:2:0 image with a plane of 8 bit Y samples followed + * by an interleaved V/U plane containing 8 bit 2x2 subsampled + * colour difference samples. + * + * <-------- Y/UV_Stride --------> + * <------- Width -------> + * Y Y Y Y Y Y Y Y Y Y Y Y . . . . ^ ^ + * Y Y Y Y Y Y Y Y Y Y Y Y . . . . | | + * Y Y Y Y Y Y Y Y Y Y Y Y . . . . Height | + * Y Y Y Y Y Y Y Y Y Y Y Y . . . . | Y_Scanlines + * Y Y Y Y Y Y Y Y Y Y Y Y . . . . | | + * Y Y Y Y Y Y Y Y Y Y Y Y . . . . | | + * Y Y Y Y Y Y Y Y Y Y Y Y . . . . | | + * Y Y Y Y Y Y Y Y Y Y Y Y . . . . V | + * . . . . . . . . . . . . . . . . | + * . . . . . . . . . . . . . . . . | + * . . . . . . . . . . . . . . . . | + * . . . . . . . . . . . . . . . . V + * V U V U V U V U V U V U . . . . ^ + * V U V U V U V U V U V U . . . . | + * V U V U V U V U V U V U . . . . | + * V U V U V U V U V U V U . . . . UV_Scanlines + * . . . . . . . . . . . . . . . . | + * . . . . . . . . . . . . . . . . V + * . . . . . . . . . . . . . . . . --> Padding & Buffer size alignment + * + * Y_Stride : Width aligned to 512 + * UV_Stride : Width aligned to 512 + * Y_Scanlines: Height aligned to 512 + * UV_Scanlines: Height/2 aligned to 256 + * Total size = align(Y_Stride * Y_Scanlines + * + UV_Stride * UV_Scanlines, 4096) + */ + MMM_COLOR_FMT_NV21, + /* + * The buffer can be of 2 types: + * (1) Venus NV12 UBWC Progressive + * (2) Venus NV12 UBWC Interlaced + * + * (1) Venus NV12 UBWC Progressive Buffer Format: + * Compressed Macro-tile format for NV12. + * Contains 4 planes in the following order - + * (A) Y_Meta_Plane + * (B) Y_UBWC_Plane + * (C) UV_Meta_Plane + * (D) UV_UBWC_Plane + * + * Y_Meta_Plane consists of meta information to decode compressed + * tile data in Y_UBWC_Plane. + * Y_UBWC_Plane consists of Y data in compressed macro-tile format. + * UBWC decoder block will use the Y_Meta_Plane data together with + * Y_UBWC_Plane data to produce loss-less uncompressed 8 bit Y samples. + * + * UV_Meta_Plane consists of meta information to decode compressed + * tile data in UV_UBWC_Plane. + * UV_UBWC_Plane consists of UV data in compressed macro-tile format. + * UBWC decoder block will use UV_Meta_Plane data together with + * UV_UBWC_Plane data to produce loss-less uncompressed 8 bit 2x2 + * subsampled color difference samples. + * + * Each tile in Y_UBWC_Plane/UV_UBWC_Plane is independently decodable + * and randomly accessible. There is no dependency between tiles. + * + * <----- Y_Meta_Stride ----> + * <-------- Width ------> + * M M M M M M M M M M M M . . ^ ^ + * M M M M M M M M M M M M . . | | + * M M M M M M M M M M M M . . Height | + * M M M M M M M M M M M M . . | Meta_Y_Scanlines + * M M M M M M M M M M M M . . | | + * M M M M M M M M M M M M . . | | + * M M M M M M M M M M M M . . | | + * M M M M M M M M M M M M . . V | + * . . . . . . . . . . . . . . | + * . . . . . . . . . . . . . . | + * . . . . . . . . . . . . . . -------> Buffer size aligned to 4k + * . . . . . . . . . . . . . . V + * <--Compressed tile Y Stride---> + * <------- Width -------> + * Y* Y* Y* Y* Y* Y* Y* Y* . . . . ^ ^ + * Y* Y* Y* Y* Y* Y* Y* Y* . . . . | | + * Y* Y* Y* Y* Y* Y* Y* Y* . . . . Height | + * Y* Y* Y* Y* Y* Y* Y* Y* . . . . | Macro_tile_Y_Scanlines + * Y* Y* Y* Y* Y* Y* Y* Y* . . . . | | + * Y* Y* Y* Y* Y* Y* Y* Y* . . . . | | + * Y* Y* Y* Y* Y* Y* Y* Y* . . . . | | + * Y* Y* Y* Y* Y* Y* Y* Y* . . . . V | + * . . . . . . . . . . . . . . . . | + * . . . . . . . . . . . . . . . . | + * . . . . . . . . . . . . . . . . -------> Buffer size aligned to 4k + * . . . . . . . . . . . . . . . . V + * <----- UV_Meta_Stride ----> + * M M M M M M M M M M M M . . ^ + * M M M M M M M M M M M M . . | + * M M M M M M M M M M M M . . | + * M M M M M M M M M M M M . . M_UV_Scanlines + * . . . . . . . . . . . . . . | + * . . . . . . . . . . . . . . V + * . . . . . . . . . . . . . . -------> Buffer size aligned to 4k + * <--Compressed tile UV Stride---> + * U* V* U* V* U* V* U* V* . . . . ^ + * U* V* U* V* U* V* U* V* . . . . | + * U* V* U* V* U* V* U* V* . . . . | + * U* V* U* V* U* V* U* V* . . . . UV_Scanlines + * . . . . . . . . . . . . . . . . | + * . . . . . . . . . . . . . . . . V + * . . . . . . . . . . . . . . . . -------> Buffer size aligned to 4k + * + * Y_Stride = align(Width, 128) + * UV_Stride = align(Width, 128) + * Y_Scanlines = align(Height, 32) + * UV_Scanlines = align(Height/2, 32) + * Y_UBWC_Plane_size = align(Y_Stride * Y_Scanlines, 4096) + * UV_UBWC_Plane_size = align(UV_Stride * UV_Scanlines, 4096) + * Y_Meta_Stride = align(roundup(Width, Y_TileWidth), 64) + * Y_Meta_Scanlines = align(roundup(Height, Y_TileHeight), 16) + * Y_Meta_Plane_size = align(Y_Meta_Stride * Y_Meta_Scanlines, 4096) + * UV_Meta_Stride = align(roundup(Width, UV_TileWidth), 64) + * UV_Meta_Scanlines = align(roundup(Height, UV_TileHeight), 16) + * UV_Meta_Plane_size = align(UV_Meta_Stride * UV_Meta_Scanlines, 4096) + * + * Total size = align( Y_UBWC_Plane_size + UV_UBWC_Plane_size + + * Y_Meta_Plane_size + UV_Meta_Plane_size, 4096) + * + * + * (2) Venus NV12 UBWC Interlaced Buffer Format: + * Compressed Macro-tile format for NV12 interlaced. + * Contains 8 planes in the following order - + * (A) Y_Meta_Top_Field_Plane + * (B) Y_UBWC_Top_Field_Plane + * (C) UV_Meta_Top_Field_Plane + * (D) UV_UBWC_Top_Field_Plane + * (E) Y_Meta_Bottom_Field_Plane + * (F) Y_UBWC_Bottom_Field_Plane + * (G) UV_Meta_Bottom_Field_Plane + * (H) UV_UBWC_Bottom_Field_Plane + * Y_Meta_Top_Field_Plane consists of meta information to decode + * compressed tile data for Y_UBWC_Top_Field_Plane. + * Y_UBWC_Top_Field_Plane consists of Y data in compressed macro-tile + * format for top field of an interlaced frame. + * UBWC decoder block will use the Y_Meta_Top_Field_Plane data together + * with Y_UBWC_Top_Field_Plane data to produce loss-less uncompressed + * 8 bit Y samples for top field of an interlaced frame. + * + * UV_Meta_Top_Field_Plane consists of meta information to decode + * compressed tile data in UV_UBWC_Top_Field_Plane. + * UV_UBWC_Top_Field_Plane consists of UV data in compressed macro-tile + * format for top field of an interlaced frame. + * UBWC decoder block will use UV_Meta_Top_Field_Plane data together + * with UV_UBWC_Top_Field_Plane data to produce loss-less uncompressed + * 8 bit subsampled color difference samples for top field of an + * interlaced frame. + * + * Each tile in Y_UBWC_Top_Field_Plane/UV_UBWC_Top_Field_Plane is + * independently decodable and randomly accessible. There is no + * dependency between tiles. + * + * Y_Meta_Bottom_Field_Plane consists of meta information to decode + * compressed tile data for Y_UBWC_Bottom_Field_Plane. + * Y_UBWC_Bottom_Field_Plane consists of Y data in compressed macro-tile + * format for bottom field of an interlaced frame. + * UBWC decoder block will use the Y_Meta_Bottom_Field_Plane data + * together with Y_UBWC_Bottom_Field_Plane data to produce loss-less + * uncompressed 8 bit Y samples for bottom field of an interlaced frame. + * + * UV_Meta_Bottom_Field_Plane consists of meta information to decode + * compressed tile data in UV_UBWC_Bottom_Field_Plane. + * UV_UBWC_Bottom_Field_Plane consists of UV data in compressed + * macro-tile format for bottom field of an interlaced frame. + * UBWC decoder block will use UV_Meta_Bottom_Field_Plane data together + * with UV_UBWC_Bottom_Field_Plane data to produce loss-less + * uncompressed 8 bit subsampled color difference samples for bottom + * field of an interlaced frame. + * + * Each tile in Y_UBWC_Bottom_Field_Plane/UV_UBWC_Bottom_Field_Plane is + * independently decodable and randomly accessible. There is no + * dependency between tiles. + * + * <-----Y_TF_Meta_Stride----> + * <-------- Width ------> + * M M M M M M M M M M M M . . ^ ^ + * M M M M M M M M M M M M . . | | + * M M M M M M M M M M M M . . Half_height | + * M M M M M M M M M M M M . . | Meta_Y_TF_Scanlines + * M M M M M M M M M M M M . . | | + * M M M M M M M M M M M M . . | | + * M M M M M M M M M M M M . . | | + * M M M M M M M M M M M M . . V | + * . . . . . . . . . . . . . . | + * . . . . . . . . . . . . . . | + * . . . . . . . . . . . . . . -------> Buffer size aligned to 4k + * . . . . . . . . . . . . . . V + * <-Compressed tile Y_TF Stride-> + * <------- Width -------> + * Y* Y* Y* Y* Y* Y* Y* Y* . . . . ^ ^ + * Y* Y* Y* Y* Y* Y* Y* Y* . . . . | | + * Y* Y* Y* Y* Y* Y* Y* Y* . . . . Half_height | + * Y* Y* Y* Y* Y* Y* Y* Y* . . . . | Macro_tile_Y_TF_Scanlines + * Y* Y* Y* Y* Y* Y* Y* Y* . . . . | | + * Y* Y* Y* Y* Y* Y* Y* Y* . . . . | | + * Y* Y* Y* Y* Y* Y* Y* Y* . . . . | | + * Y* Y* Y* Y* Y* Y* Y* Y* . . . . V | + * . . . . . . . . . . . . . . . . | + * . . . . . . . . . . . . . . . . | + * . . . . . . . . . . . . . . . . -------> Buffer size aligned to 4k + * . . . . . . . . . . . . . . . . V + * <----UV_TF_Meta_Stride----> + * M M M M M M M M M M M M . . ^ + * M M M M M M M M M M M M . . | + * M M M M M M M M M M M M . . | + * M M M M M M M M M M M M . . M_UV_TF_Scanlines + * . . . . . . . . . . . . . . | + * . . . . . . . . . . . . . . V + * . . . . . . . . . . . . . . -------> Buffer size aligned to 4k + * <-Compressed tile UV_TF Stride-> + * U* V* U* V* U* V* U* V* . . . . ^ + * U* V* U* V* U* V* U* V* . . . . | + * U* V* U* V* U* V* U* V* . . . . | + * U* V* U* V* U* V* U* V* . . . . UV_TF_Scanlines + * . . . . . . . . . . . . . . . . | + * . . . . . . . . . . . . . . . . V + * . . . . . . . . . . . . . . . . -------> Buffer size aligned to 4k + * <-----Y_BF_Meta_Stride----> + * <-------- Width ------> + * M M M M M M M M M M M M . . ^ ^ + * M M M M M M M M M M M M . . | | + * M M M M M M M M M M M M . . Half_height | + * M M M M M M M M M M M M . . | Meta_Y_BF_Scanlines + * M M M M M M M M M M M M . . | | + * M M M M M M M M M M M M . . | | + * M M M M M M M M M M M M . . | | + * M M M M M M M M M M M M . . V | + * . . . . . . . . . . . . . . | + * . . . . . . . . . . . . . . | + * . . . . . . . . . . . . . . -------> Buffer size aligned to 4k + * . . . . . . . . . . . . . . V + * <-Compressed tile Y_BF Stride-> + * <------- Width -------> + * Y* Y* Y* Y* Y* Y* Y* Y* . . . . ^ ^ + * Y* Y* Y* Y* Y* Y* Y* Y* . . . . | | + * Y* Y* Y* Y* Y* Y* Y* Y* . . . . Half_height | + * Y* Y* Y* Y* Y* Y* Y* Y* . . . . | Macro_tile_Y_BF_Scanlines + * Y* Y* Y* Y* Y* Y* Y* Y* . . . . | | + * Y* Y* Y* Y* Y* Y* Y* Y* . . . . | | + * Y* Y* Y* Y* Y* Y* Y* Y* . . . . | | + * Y* Y* Y* Y* Y* Y* Y* Y* . . . . V | + * . . . . . . . . . . . . . . . . | + * . . . . . . . . . . . . . . . . | + * . . . . . . . . . . . . . . . . -------> Buffer size aligned to 4k + * . . . . . . . . . . . . . . . . V + * <----UV_BF_Meta_Stride----> + * M M M M M M M M M M M M . . ^ + * M M M M M M M M M M M M . . | + * M M M M M M M M M M M M . . | + * M M M M M M M M M M M M . . M_UV_BF_Scanlines + * . . . . . . . . . . . . . . | + * . . . . . . . . . . . . . . V + * . . . . . . . . . . . . . . -------> Buffer size aligned to 4k + * <-Compressed tile UV_BF Stride-> + * U* V* U* V* U* V* U* V* . . . . ^ + * U* V* U* V* U* V* U* V* . . . . | + * U* V* U* V* U* V* U* V* . . . . | + * U* V* U* V* U* V* U* V* . . . . UV_BF_Scanlines + * . . . . . . . . . . . . . . . . | + * . . . . . . . . . . . . . . . . V + * . . . . . . . . . . . . . . . . -------> Buffer size aligned to 4k + * + * Half_height = (Height+1)>>1 + * Y_TF_Stride = align(Width, 128) + * UV_TF_Stride = align(Width, 128) + * Y_TF_Scanlines = align(Half_height, 32) + * UV_TF_Scanlines = align((Half_height+1)/2, 32) + * Y_UBWC_TF_Plane_size = align(Y_TF_Stride * Y_TF_Scanlines, 4096) + * UV_UBWC_TF_Plane_size = align(UV_TF_Stride * UV_TF_Scanlines, 4096) + * Y_TF_Meta_Stride = align(roundup(Width, Y_TileWidth), 64) + * Y_TF_Meta_Scanlines = align(roundup(Half_height, Y_TileHeight), 16) + * Y_TF_Meta_Plane_size = + * align(Y_TF_Meta_Stride * Y_TF_Meta_Scanlines, 4096) + * UV_TF_Meta_Stride = align(roundup(Width, UV_TileWidth), 64) + * UV_TF_Meta_Scanlines = align(roundup(Half_height, UV_TileHeight), 16) + * UV_TF_Meta_Plane_size = + * align(UV_TF_Meta_Stride * UV_TF_Meta_Scanlines, 4096) + * Y_BF_Stride = align(Width, 128) + * UV_BF_Stride = align(Width, 128) + * Y_BF_Scanlines = align(Half_height, 32) + * UV_BF_Scanlines = align((Half_height+1)/2, 32) + * Y_UBWC_BF_Plane_size = align(Y_BF_Stride * Y_BF_Scanlines, 4096) + * UV_UBWC_BF_Plane_size = align(UV_BF_Stride * UV_BF_Scanlines, 4096) + * Y_BF_Meta_Stride = align(roundup(Width, Y_TileWidth), 64) + * Y_BF_Meta_Scanlines = align(roundup(Half_height, Y_TileHeight), 16) + * Y_BF_Meta_Plane_size = + * align(Y_BF_Meta_Stride * Y_BF_Meta_Scanlines, 4096) + * UV_BF_Meta_Stride = align(roundup(Width, UV_TileWidth), 64) + * UV_BF_Meta_Scanlines = align(roundup(Half_height, UV_TileHeight), 16) + * UV_BF_Meta_Plane_size = + * align(UV_BF_Meta_Stride * UV_BF_Meta_Scanlines, 4096) + * + * Total size = align( Y_UBWC_TF_Plane_size + UV_UBWC_TF_Plane_size + + * Y_TF_Meta_Plane_size + UV_TF_Meta_Plane_size + + * Y_UBWC_BF_Plane_size + UV_UBWC_BF_Plane_size + + * Y_BF_Meta_Plane_size + UV_BF_Meta_Plane_size +, 4096) + */ + MMM_COLOR_FMT_NV12_UBWC, + /* Venus NV12 10-bit UBWC: + * Compressed Macro-tile format for NV12. + * Contains 4 planes in the following order - + * (A) Y_Meta_Plane + * (B) Y_UBWC_Plane + * (C) UV_Meta_Plane + * (D) UV_UBWC_Plane + * + * Y_Meta_Plane consists of meta information to decode compressed + * tile data in Y_UBWC_Plane. + * Y_UBWC_Plane consists of Y data in compressed macro-tile format. + * UBWC decoder block will use the Y_Meta_Plane data together with + * Y_UBWC_Plane data to produce loss-less uncompressed 10 bit Y samples. + * + * UV_Meta_Plane consists of meta information to decode compressed + * tile data in UV_UBWC_Plane. + * UV_UBWC_Plane consists of UV data in compressed macro-tile format. + * UBWC decoder block will use UV_Meta_Plane data together with + * UV_UBWC_Plane data to produce loss-less uncompressed 10 bit 2x2 + * subsampled color difference samples. + * + * Each tile in Y_UBWC_Plane/UV_UBWC_Plane is independently decodable + * and randomly accessible. There is no dependency between tiles. + * + * <----- Y_Meta_Stride -----> + * <-------- Width ------> + * M M M M M M M M M M M M . . ^ ^ + * M M M M M M M M M M M M . . | | + * M M M M M M M M M M M M . . Height | + * M M M M M M M M M M M M . . | Meta_Y_Scanlines + * M M M M M M M M M M M M . . | | + * M M M M M M M M M M M M . . | | + * M M M M M M M M M M M M . . | | + * M M M M M M M M M M M M . . V | + * . . . . . . . . . . . . . . | + * . . . . . . . . . . . . . . | + * . . . . . . . . . . . . . . -------> Buffer size aligned to 4k + * . . . . . . . . . . . . . . V + * <--Compressed tile Y Stride---> + * <------- Width -------> + * Y* Y* Y* Y* Y* Y* Y* Y* . . . . ^ ^ + * Y* Y* Y* Y* Y* Y* Y* Y* . . . . | | + * Y* Y* Y* Y* Y* Y* Y* Y* . . . . Height | + * Y* Y* Y* Y* Y* Y* Y* Y* . . . . | Macro_tile_Y_Scanlines + * Y* Y* Y* Y* Y* Y* Y* Y* . . . . | | + * Y* Y* Y* Y* Y* Y* Y* Y* . . . . | | + * Y* Y* Y* Y* Y* Y* Y* Y* . . . . | | + * Y* Y* Y* Y* Y* Y* Y* Y* . . . . V | + * . . . . . . . . . . . . . . . . | + * . . . . . . . . . . . . . . . . | + * . . . . . . . . . . . . . . . . -------> Buffer size aligned to 4k + * . . . . . . . . . . . . . . . . V + * <----- UV_Meta_Stride ----> + * M M M M M M M M M M M M . . ^ + * M M M M M M M M M M M M . . | + * M M M M M M M M M M M M . . | + * M M M M M M M M M M M M . . M_UV_Scanlines + * . . . . . . . . . . . . . . | + * . . . . . . . . . . . . . . V + * . . . . . . . . . . . . . . -------> Buffer size aligned to 4k + * <--Compressed tile UV Stride---> + * U* V* U* V* U* V* U* V* . . . . ^ + * U* V* U* V* U* V* U* V* . . . . | + * U* V* U* V* U* V* U* V* . . . . | + * U* V* U* V* U* V* U* V* . . . . UV_Scanlines + * . . . . . . . . . . . . . . . . | + * . . . . . . . . . . . . . . . . V + * . . . . . . . . . . . . . . . . -------> Buffer size aligned to 4k + * + * + * Y_Stride = align(Width * 4/3, 256) + * UV_Stride = align(Width * 4/3, 256) + * Y_Scanlines = align(Height, 32) + * UV_Scanlines = align(Height/2, 16) + * Y_UBWC_Plane_Size = align(Y_Stride * Y_Scanlines, 4096) + * UV_UBWC_Plane_Size = align(UV_Stride * UV_Scanlines, 4096) + * Y_Meta_Stride = align(roundup(Width, Y_TileWidth), 64) + * Y_Meta_Scanlines = align(roundup(Height, Y_TileHeight), 16) + * Y_Meta_Plane_size = align(Y_Meta_Stride * Y_Meta_Scanlines, 4096) + * UV_Meta_Stride = align(roundup(Width, UV_TileWidth), 64) + * UV_Meta_Scanlines = align(roundup(Height, UV_TileHeight), 16) + * UV_Meta_Plane_size = align(UV_Meta_Stride * UV_Meta_Scanlines, 4096) + * + * Total size = align(Y_UBWC_Plane_size + UV_UBWC_Plane_size + + * Y_Meta_Plane_size + UV_Meta_Plane_size, 4096) + */ + MMM_COLOR_FMT_NV12_BPP10_UBWC, + /* Venus RGBA8888 format: + * Contains 1 plane in the following order - + * (A) RGBA plane + * + * <-------- RGB_Stride --------> + * <------- Width -------> + * R R R R R R R R R R R R . . . . ^ ^ + * R R R R R R R R R R R R . . . . | | + * R R R R R R R R R R R R . . . . Height | + * R R R R R R R R R R R R . . . . | RGB_Scanlines + * R R R R R R R R R R R R . . . . | | + * R R R R R R R R R R R R . . . . | | + * R R R R R R R R R R R R . . . . | | + * R R R R R R R R R R R R . . . . V | + * . . . . . . . . . . . . . . . . | + * . . . . . . . . . . . . . . . . | + * . . . . . . . . . . . . . . . . | + * . . . . . . . . . . . . . . . . V + * + * RGB_Stride = align(Width * 4, 128) + * RGB_Scanlines = align(Height, 32) + * RGB_Plane_size = align(RGB_Stride * RGB_Scanlines, 4096) + * + * Total size = align(RGB_Plane_size , 4096) + */ + MMM_COLOR_FMT_RGBA8888, + /* Venus RGBA8888 UBWC format: + * Contains 2 planes in the following order - + * (A) Meta plane + * (B) RGBA plane + * + * <--- RGB_Meta_Stride ----> + * <-------- Width ------> + * M M M M M M M M M M M M . . ^ ^ + * M M M M M M M M M M M M . . | | + * M M M M M M M M M M M M . . Height | + * M M M M M M M M M M M M . . | Meta_RGB_Scanlines + * M M M M M M M M M M M M . . | | + * M M M M M M M M M M M M . . | | + * M M M M M M M M M M M M . . | | + * M M M M M M M M M M M M . . V | + * . . . . . . . . . . . . . . | + * . . . . . . . . . . . . . . | + * . . . . . . . . . . . . . . -------> Buffer size aligned to 4k + * . . . . . . . . . . . . . . V + * <-------- RGB_Stride --------> + * <------- Width -------> + * R R R R R R R R R R R R . . . . ^ ^ + * R R R R R R R R R R R R . . . . | | + * R R R R R R R R R R R R . . . . Height | + * R R R R R R R R R R R R . . . . | RGB_Scanlines + * R R R R R R R R R R R R . . . . | | + * R R R R R R R R R R R R . . . . | | + * R R R R R R R R R R R R . . . . | | + * R R R R R R R R R R R R . . . . V | + * . . . . . . . . . . . . . . . . | + * . . . . . . . . . . . . . . . . | + * . . . . . . . . . . . . . . . . -------> Buffer size aligned to 4k + * . . . . . . . . . . . . . . . . V + * + * RGB_Stride = align(Width * 4, 256) + * RGB_Scanlines = align(Height, 16) + * RGB_Plane_size = align(RGB_Stride * RGB_Scanlines, 4096) + * RGB_Meta_Stride = align(roundup(Width, RGB_TileWidth), 64) + * RGB_Meta_Scanline = align(roundup(Height, RGB_TileHeight), 16) + * RGB_Meta_Plane_size = align(RGB_Meta_Stride * + * RGB_Meta_Scanlines, 4096) + * + * Total size = align(RGB_Meta_Plane_size + RGB_Plane_size, 4096) + */ + MMM_COLOR_FMT_RGBA8888_UBWC, + /* Venus RGBA1010102 UBWC format: + * Contains 2 planes in the following order - + * (A) Meta plane + * (B) RGBA plane + * + * <--- RGB_Meta_Stride ----> + * <-------- Width ------> + * M M M M M M M M M M M M . . ^ ^ + * M M M M M M M M M M M M . . | | + * M M M M M M M M M M M M . . Height | + * M M M M M M M M M M M M . . | Meta_RGB_Scanlines + * M M M M M M M M M M M M . . | | + * M M M M M M M M M M M M . . | | + * M M M M M M M M M M M M . . | | + * M M M M M M M M M M M M . . V | + * . . . . . . . . . . . . . . | + * . . . . . . . . . . . . . . | + * . . . . . . . . . . . . . . -------> Buffer size aligned to 4k + * . . . . . . . . . . . . . . V + * <-------- RGB_Stride --------> + * <------- Width -------> + * R R R R R R R R R R R R . . . . ^ ^ + * R R R R R R R R R R R R . . . . | | + * R R R R R R R R R R R R . . . . Height | + * R R R R R R R R R R R R . . . . | RGB_Scanlines + * R R R R R R R R R R R R . . . . | | + * R R R R R R R R R R R R . . . . | | + * R R R R R R R R R R R R . . . . | | + * R R R R R R R R R R R R . . . . V | + * . . . . . . . . . . . . . . . . | + * . . . . . . . . . . . . . . . . | + * . . . . . . . . . . . . . . . . -------> Buffer size aligned to 4k + * . . . . . . . . . . . . . . . . V + * + * RGB_Stride = align(Width * 4, 256) + * RGB_Scanlines = align(Height, 16) + * RGB_Plane_size = align(RGB_Stride * RGB_Scanlines, 4096) + * RGB_Meta_Stride = align(roundup(Width, RGB_TileWidth), 64) + * RGB_Meta_Scanline = align(roundup(Height, RGB_TileHeight), 16) + * RGB_Meta_Plane_size = align(RGB_Meta_Stride * + * RGB_Meta_Scanlines, 4096) + * + * Total size = align(RGB_Meta_Plane_size + RGB_Plane_size, 4096) + */ + MMM_COLOR_FMT_RGBA1010102_UBWC, + /* Venus RGB565 UBWC format: + * Contains 2 planes in the following order - + * (A) Meta plane + * (B) RGB plane + * + * <--- RGB_Meta_Stride ----> + * <-------- Width ------> + * M M M M M M M M M M M M . . ^ ^ + * M M M M M M M M M M M M . . | | + * M M M M M M M M M M M M . . Height | + * M M M M M M M M M M M M . . | Meta_RGB_Scanlines + * M M M M M M M M M M M M . . | | + * M M M M M M M M M M M M . . | | + * M M M M M M M M M M M M . . | | + * M M M M M M M M M M M M . . V | + * . . . . . . . . . . . . . . | + * . . . . . . . . . . . . . . | + * . . . . . . . . . . . . . . -------> Buffer size aligned to 4k + * . . . . . . . . . . . . . . V + * <-------- RGB_Stride --------> + * <------- Width -------> + * R R R R R R R R R R R R . . . . ^ ^ + * R R R R R R R R R R R R . . . . | | + * R R R R R R R R R R R R . . . . Height | + * R R R R R R R R R R R R . . . . | RGB_Scanlines + * R R R R R R R R R R R R . . . . | | + * R R R R R R R R R R R R . . . . | | + * R R R R R R R R R R R R . . . . | | + * R R R R R R R R R R R R . . . . V | + * . . . . . . . . . . . . . . . . | + * . . . . . . . . . . . . . . . . | + * . . . . . . . . . . . . . . . . -------> Buffer size aligned to 4k + * . . . . . . . . . . . . . . . . V + * + * RGB_Stride = align(Width * 2, 256) + * RGB_Scanlines = align(Height, 16) + * RGB_Plane_size = align(RGB_Stride * RGB_Scanlines, 4096) + * RGB_Meta_Stride = align(roundup(Width, RGB_TileWidth), 64) + * RGB_Meta_Scanline = align(roundup(Height, RGB_TileHeight), 16) + * RGB_Meta_Plane_size = align(RGB_Meta_Stride * + * RGB_Meta_Scanlines, 4096) + * + * Total size = align(RGB_Meta_Plane_size + RGB_Plane_size, 4096) + */ + MMM_COLOR_FMT_RGB565_UBWC, + /* P010 UBWC: + * Compressed Macro-tile format for NV12. + * Contains 4 planes in the following order - + * (A) Y_Meta_Plane + * (B) Y_UBWC_Plane + * (C) UV_Meta_Plane + * (D) UV_UBWC_Plane + * + * Y_Meta_Plane consists of meta information to decode compressed + * tile data in Y_UBWC_Plane. + * Y_UBWC_Plane consists of Y data in compressed macro-tile format. + * UBWC decoder block will use the Y_Meta_Plane data together with + * Y_UBWC_Plane data to produce loss-less uncompressed 10 bit Y samples. + * + * UV_Meta_Plane consists of meta information to decode compressed + * tile data in UV_UBWC_Plane. + * UV_UBWC_Plane consists of UV data in compressed macro-tile format. + * UBWC decoder block will use UV_Meta_Plane data together with + * UV_UBWC_Plane data to produce loss-less uncompressed 10 bit 2x2 + * subsampled color difference samples. + * + * Each tile in Y_UBWC_Plane/UV_UBWC_Plane is independently decodable + * and randomly accessible. There is no dependency between tiles. + * + * <----- Y_Meta_Stride -----> + * <-------- Width ------> + * M M M M M M M M M M M M . . ^ ^ + * M M M M M M M M M M M M . . | | + * M M M M M M M M M M M M . . Height | + * M M M M M M M M M M M M . . | Meta_Y_Scanlines + * M M M M M M M M M M M M . . | | + * M M M M M M M M M M M M . . | | + * M M M M M M M M M M M M . . | | + * M M M M M M M M M M M M . . V | + * . . . . . . . . . . . . . . | + * . . . . . . . . . . . . . . | + * . . . . . . . . . . . . . . -------> Buffer size aligned to 4k + * . . . . . . . . . . . . . . V + * <--Compressed tile Y Stride---> + * <------- Width -------> + * Y* Y* Y* Y* Y* Y* Y* Y* . . . . ^ ^ + * Y* Y* Y* Y* Y* Y* Y* Y* . . . . | | + * Y* Y* Y* Y* Y* Y* Y* Y* . . . . Height | + * Y* Y* Y* Y* Y* Y* Y* Y* . . . . | Macro_tile_Y_Scanlines + * Y* Y* Y* Y* Y* Y* Y* Y* . . . . | | + * Y* Y* Y* Y* Y* Y* Y* Y* . . . . | | + * Y* Y* Y* Y* Y* Y* Y* Y* . . . . | | + * Y* Y* Y* Y* Y* Y* Y* Y* . . . . V | + * . . . . . . . . . . . . . . . . | + * . . . . . . . . . . . . . . . . | + * . . . . . . . . . . . . . . . . -------> Buffer size aligned to 4k + * . . . . . . . . . . . . . . . . V + * <----- UV_Meta_Stride ----> + * M M M M M M M M M M M M . . ^ + * M M M M M M M M M M M M . . | + * M M M M M M M M M M M M . . | + * M M M M M M M M M M M M . . M_UV_Scanlines + * . . . . . . . . . . . . . . | + * . . . . . . . . . . . . . . V + * . . . . . . . . . . . . . . -------> Buffer size aligned to 4k + * <--Compressed tile UV Stride---> + * U* V* U* V* U* V* U* V* . . . . ^ + * U* V* U* V* U* V* U* V* . . . . | + * U* V* U* V* U* V* U* V* . . . . | + * U* V* U* V* U* V* U* V* . . . . UV_Scanlines + * . . . . . . . . . . . . . . . . | + * . . . . . . . . . . . . . . . . V + * . . . . . . . . . . . . . . . . -------> Buffer size aligned to 4k + * + * + * Y_Stride = align(Width * 2, 256) + * UV_Stride = align(Width * 2, 256) + * Y_Scanlines = align(Height, 16) + * UV_Scanlines = align(Height/2, 16) + * Y_UBWC_Plane_Size = align(Y_Stride * Y_Scanlines, 4096) + * UV_UBWC_Plane_Size = align(UV_Stride * UV_Scanlines, 4096) + * Y_Meta_Stride = align(roundup(Width, Y_TileWidth), 64) + * Y_Meta_Scanlines = align(roundup(Height, Y_TileHeight), 16) + * Y_Meta_Plane_size = align(Y_Meta_Stride * Y_Meta_Scanlines, 4096) + * UV_Meta_Stride = align(roundup(Width, UV_TileWidth), 64) + * UV_Meta_Scanlines = align(roundup(Height, UV_TileHeight), 16) + * UV_Meta_Plane_size = align(UV_Meta_Stride * UV_Meta_Scanlines, 4096) + * + * Total size = align(Y_UBWC_Plane_size + UV_UBWC_Plane_size + + * Y_Meta_Plane_size + UV_Meta_Plane_size, 4096) + */ + MMM_COLOR_FMT_P010_UBWC, + /* Venus P010: + * YUV 4:2:0 image with a plane of 10 bit Y samples followed + * by an interleaved U/V plane containing 10 bit 2x2 subsampled + * colour difference samples. + * + * <-------- Y/UV_Stride --------> + * <------- Width -------> + * Y Y Y Y Y Y Y Y Y Y Y Y . . . . ^ ^ + * Y Y Y Y Y Y Y Y Y Y Y Y . . . . | | + * Y Y Y Y Y Y Y Y Y Y Y Y . . . . Height | + * Y Y Y Y Y Y Y Y Y Y Y Y . . . . | Y_Scanlines + * Y Y Y Y Y Y Y Y Y Y Y Y . . . . | | + * Y Y Y Y Y Y Y Y Y Y Y Y . . . . | | + * Y Y Y Y Y Y Y Y Y Y Y Y . . . . | | + * Y Y Y Y Y Y Y Y Y Y Y Y . . . . V | + * . . . . . . . . . . . . . . . . | + * . . . . . . . . . . . . . . . . | + * . . . . . . . . . . . . . . . . | + * . . . . . . . . . . . . . . . . V + * U V U V U V U V U V U V . . . . ^ + * U V U V U V U V U V U V . . . . | + * U V U V U V U V U V U V . . . . | + * U V U V U V U V U V U V . . . . UV_Scanlines + * . . . . . . . . . . . . . . . . | + * . . . . . . . . . . . . . . . . V + * . . . . . . . . . . . . . . . . --> Buffer size alignment + * + * Y_Stride : Width * 2 aligned to 256 + * UV_Stride : Width * 2 aligned to 256 + * Y_Scanlines: Height aligned to 32 + * UV_Scanlines: Height/2 aligned to 16 + * Total size = align(Y_Stride * Y_Scanlines + * + UV_Stride * UV_Scanlines, 4096) + */ + MMM_COLOR_FMT_P010, + /* Venus NV12_512: + * YUV 4:2:0 image with a plane of 8 bit Y samples followed + * by an interleaved U/V plane containing 8 bit 2x2 subsampled + * colour difference samples. + * + * <-------- Y/UV_Stride --------> + * <------- Width -------> + * Y Y Y Y Y Y Y Y Y Y Y Y . . . . ^ ^ + * Y Y Y Y Y Y Y Y Y Y Y Y . . . . | | + * Y Y Y Y Y Y Y Y Y Y Y Y . . . . Height | + * Y Y Y Y Y Y Y Y Y Y Y Y . . . . | Y_Scanlines + * Y Y Y Y Y Y Y Y Y Y Y Y . . . . | | + * Y Y Y Y Y Y Y Y Y Y Y Y . . . . | | + * Y Y Y Y Y Y Y Y Y Y Y Y . . . . | | + * Y Y Y Y Y Y Y Y Y Y Y Y . . . . V | + * . . . . . . . . . . . . . . . . | + * . . . . . . . . . . . . . . . . | + * . . . . . . . . . . . . . . . . | + * . . . . . . . . . . . . . . . . V + * U V U V U V U V U V U V . . . . ^ + * U V U V U V U V U V U V . . . . | + * U V U V U V U V U V U V . . . . | + * U V U V U V U V U V U V . . . . UV_Scanlines + * . . . . . . . . . . . . . . . . | + * . . . . . . . . . . . . . . . . V + * . . . . . . . . . . . . . . . . --> Buffer size alignment + * + * Y_Stride : Width aligned to 512 + * UV_Stride : Width aligned to 512 + * Y_Scanlines: Height aligned to 512 + * UV_Scanlines: Height/2 aligned to 256 + * Total size = align((Y_Stride * Y_Scanlines + * + UV_Stride * UV_Scanlines), 4096) + */ + MMM_COLOR_FMT_NV12_512, +}; + +/* + * Function arguments: + * @color_fmt + * @width + * Progressive: width + * Interlaced: width + */ +static inline unsigned int MMM_COLOR_FMT_Y_STRIDE(unsigned int color_fmt, + unsigned int width) +{ + unsigned int alignment, stride = 0; + + if (!width) + goto invalid_input; + + switch (color_fmt) { + case MMM_COLOR_FMT_NV12: + case MMM_COLOR_FMT_NV21: + case MMM_COLOR_FMT_NV12_512: + alignment = 512; + stride = MMM_COLOR_FMT_ALIGN(width, alignment); + break; + case MMM_COLOR_FMT_NV12_UBWC: + alignment = 128; + stride = MMM_COLOR_FMT_ALIGN(width, alignment); + break; + case MMM_COLOR_FMT_NV12_BPP10_UBWC: + alignment = 256; + stride = MMM_COLOR_FMT_ALIGN(width, 192); + stride = MMM_COLOR_FMT_ALIGN(stride * 4/3, alignment); + break; + case MMM_COLOR_FMT_P010_UBWC: + case MMM_COLOR_FMT_P010: + alignment = 256; + stride = MMM_COLOR_FMT_ALIGN(width * 2, alignment); + break; + default: + break; + } +invalid_input: + return stride; +} + +/* + * Function arguments: + * @color_fmt + * @width + * Progressive: width + * Interlaced: width + */ +static inline unsigned int MMM_COLOR_FMT_UV_STRIDE(unsigned int color_fmt, + unsigned int width) +{ + unsigned int alignment, stride = 0; + + if (!width) + goto invalid_input; + + switch (color_fmt) { + case MMM_COLOR_FMT_NV21: + case MMM_COLOR_FMT_NV12: + case MMM_COLOR_FMT_NV12_512: + alignment = 512; + stride = MMM_COLOR_FMT_ALIGN(width, alignment); + break; + case MMM_COLOR_FMT_NV12_UBWC: + alignment = 128; + stride = MMM_COLOR_FMT_ALIGN(width, alignment); + break; + case MMM_COLOR_FMT_NV12_BPP10_UBWC: + alignment = 256; + stride = MMM_COLOR_FMT_ALIGN(width, 192); + stride = MMM_COLOR_FMT_ALIGN(stride * 4/3, alignment); + break; + case MMM_COLOR_FMT_P010_UBWC: + case MMM_COLOR_FMT_P010: + alignment = 256; + stride = MMM_COLOR_FMT_ALIGN(width * 2, alignment); + break; + default: + break; + } +invalid_input: + return stride; +} + +/* + * Function arguments: + * @color_fmt + * @height + * Progressive: height + * Interlaced: (height+1)>>1 + */ +static inline unsigned int MMM_COLOR_FMT_Y_SCANLINES(unsigned int color_fmt, + unsigned int height) +{ + unsigned int alignment, sclines = 0; + + if (!height) + goto invalid_input; + + switch (color_fmt) { + case MMM_COLOR_FMT_NV12: + case MMM_COLOR_FMT_NV21: + case MMM_COLOR_FMT_NV12_512: + alignment = 512; + break; + case MMM_COLOR_FMT_NV12_UBWC: + case MMM_COLOR_FMT_P010: + alignment = 32; + break; + case MMM_COLOR_FMT_NV12_BPP10_UBWC: + case MMM_COLOR_FMT_P010_UBWC: + alignment = 16; + break; + default: + return 0; + } + sclines = MMM_COLOR_FMT_ALIGN(height, alignment); +invalid_input: + return sclines; +} + +/* + * Function arguments: + * @color_fmt + * @height + * Progressive: height + * Interlaced: (height+1)>>1 + */ +static inline unsigned int MMM_COLOR_FMT_UV_SCANLINES(unsigned int color_fmt, + unsigned int height) +{ + unsigned int alignment, sclines = 0; + + if (!height) + goto invalid_input; + + switch (color_fmt) { + case MMM_COLOR_FMT_NV21: + case MMM_COLOR_FMT_NV12: + case MMM_COLOR_FMT_NV12_512: + alignment = 256; + break; + case MMM_COLOR_FMT_NV12_BPP10_UBWC: + case MMM_COLOR_FMT_P010_UBWC: + case MMM_COLOR_FMT_P010: + alignment = 16; + break; + case MMM_COLOR_FMT_NV12_UBWC: + alignment = 32; + break; + default: + goto invalid_input; + } + + sclines = MMM_COLOR_FMT_ALIGN((height+1)>>1, alignment); + +invalid_input: + return sclines; +} + +/* + * Function arguments: + * @color_fmt + * @width + * Progressive: width + * Interlaced: width + */ +static inline unsigned int MMM_COLOR_FMT_Y_META_STRIDE(unsigned int color_fmt, + unsigned int width) +{ + int y_tile_width = 0, y_meta_stride = 0; + + if (!width) + goto invalid_input; + + switch (color_fmt) { + case MMM_COLOR_FMT_NV12_UBWC: + case MMM_COLOR_FMT_P010_UBWC: + y_tile_width = 32; + break; + case MMM_COLOR_FMT_NV12_BPP10_UBWC: + y_tile_width = 48; + break; + default: + goto invalid_input; + } + + y_meta_stride = MMM_COLOR_FMT_ROUNDUP(width, y_tile_width); + y_meta_stride = MMM_COLOR_FMT_ALIGN(y_meta_stride, 64); + +invalid_input: + return y_meta_stride; +} + +/* + * Function arguments: + * @color_fmt + * @height + * Progressive: height + * Interlaced: (height+1)>>1 + */ +static inline unsigned int MMM_COLOR_FMT_Y_META_SCANLINES( + unsigned int color_fmt, unsigned int height) +{ + int y_tile_height = 0, y_meta_scanlines = 0; + + if (!height) + goto invalid_input; + + switch (color_fmt) { + case MMM_COLOR_FMT_NV12_UBWC: + y_tile_height = 8; + break; + case MMM_COLOR_FMT_NV12_BPP10_UBWC: + case MMM_COLOR_FMT_P010_UBWC: + y_tile_height = 4; + break; + default: + goto invalid_input; + } + + y_meta_scanlines = MMM_COLOR_FMT_ROUNDUP(height, y_tile_height); + y_meta_scanlines = MMM_COLOR_FMT_ALIGN(y_meta_scanlines, 16); + +invalid_input: + return y_meta_scanlines; +} + +/* + * Function arguments: + * @color_fmt + * @width + * Progressive: width + * Interlaced: width + */ +static inline unsigned int MMM_COLOR_FMT_UV_META_STRIDE(unsigned int color_fmt, + unsigned int width) +{ + int uv_tile_width = 0, uv_meta_stride = 0; + + if (!width) + goto invalid_input; + + switch (color_fmt) { + case MMM_COLOR_FMT_NV12_UBWC: + case MMM_COLOR_FMT_P010_UBWC: + uv_tile_width = 16; + break; + case MMM_COLOR_FMT_NV12_BPP10_UBWC: + uv_tile_width = 24; + break; + default: + goto invalid_input; + } + + uv_meta_stride = MMM_COLOR_FMT_ROUNDUP((width+1)>>1, uv_tile_width); + uv_meta_stride = MMM_COLOR_FMT_ALIGN(uv_meta_stride, 64); + +invalid_input: + return uv_meta_stride; +} + +/* + * Function arguments: + * @color_fmt + * @height + * Progressive: height + * Interlaced: (height+1)>>1 + */ +static inline unsigned int MMM_COLOR_FMT_UV_META_SCANLINES( + unsigned int color_fmt, unsigned int height) +{ + int uv_tile_height = 0, uv_meta_scanlines = 0; + + if (!height) + goto invalid_input; + + switch (color_fmt) { + case MMM_COLOR_FMT_NV12_UBWC: + uv_tile_height = 8; + break; + case MMM_COLOR_FMT_NV12_BPP10_UBWC: + case MMM_COLOR_FMT_P010_UBWC: + uv_tile_height = 4; + break; + default: + goto invalid_input; + } + + uv_meta_scanlines = MMM_COLOR_FMT_ROUNDUP((height+1)>>1, + uv_tile_height); + uv_meta_scanlines = MMM_COLOR_FMT_ALIGN(uv_meta_scanlines, 16); + +invalid_input: + return uv_meta_scanlines; +} + +static inline unsigned int MMM_COLOR_FMT_RGB_STRIDE(unsigned int color_fmt, + unsigned int width) +{ + unsigned int alignment = 0, stride = 0, bpp = 4; + + if (!width) + goto invalid_input; + + switch (color_fmt) { + case MMM_COLOR_FMT_RGBA8888: + alignment = 128; + break; + case MMM_COLOR_FMT_RGB565_UBWC: + alignment = 256; + bpp = 2; + break; + case MMM_COLOR_FMT_RGBA8888_UBWC: + case MMM_COLOR_FMT_RGBA1010102_UBWC: + alignment = 256; + break; + default: + goto invalid_input; + } + + stride = MMM_COLOR_FMT_ALIGN(width * bpp, alignment); + +invalid_input: + return stride; +} + +static inline unsigned int MMM_COLOR_FMT_RGB_SCANLINES(unsigned int color_fmt, + unsigned int height) +{ + unsigned int alignment = 0, scanlines = 0; + + if (!height) + goto invalid_input; + + switch (color_fmt) { + case MMM_COLOR_FMT_RGBA8888: + alignment = 32; + break; + case MMM_COLOR_FMT_RGBA8888_UBWC: + case MMM_COLOR_FMT_RGBA1010102_UBWC: + case MMM_COLOR_FMT_RGB565_UBWC: + alignment = 16; + break; + default: + goto invalid_input; + } + + scanlines = MMM_COLOR_FMT_ALIGN(height, alignment); + +invalid_input: + return scanlines; +} + +static inline unsigned int MMM_COLOR_FMT_RGB_META_STRIDE(unsigned int color_fmt, + unsigned int width) +{ + int rgb_tile_width = 0, rgb_meta_stride = 0; + + if (!width) + goto invalid_input; + + switch (color_fmt) { + case MMM_COLOR_FMT_RGBA8888_UBWC: + case MMM_COLOR_FMT_RGBA1010102_UBWC: + case MMM_COLOR_FMT_RGB565_UBWC: + rgb_tile_width = 16; + break; + default: + goto invalid_input; + } + + rgb_meta_stride = MMM_COLOR_FMT_ROUNDUP(width, rgb_tile_width); + rgb_meta_stride = MMM_COLOR_FMT_ALIGN(rgb_meta_stride, 64); + +invalid_input: + return rgb_meta_stride; +} + +static inline unsigned int MMM_COLOR_FMT_RGB_META_SCANLINES( + unsigned int color_fmt, unsigned int height) +{ + int rgb_tile_height = 0, rgb_meta_scanlines = 0; + + if (!height) + goto invalid_input; + + switch (color_fmt) { + case MMM_COLOR_FMT_RGBA8888_UBWC: + case MMM_COLOR_FMT_RGBA1010102_UBWC: + case MMM_COLOR_FMT_RGB565_UBWC: + rgb_tile_height = 4; + break; + default: + goto invalid_input; + } + + rgb_meta_scanlines = MMM_COLOR_FMT_ROUNDUP(height, rgb_tile_height); + rgb_meta_scanlines = MMM_COLOR_FMT_ALIGN(rgb_meta_scanlines, 16); + +invalid_input: + return rgb_meta_scanlines; +} + +/* + * Function arguments: + * @color_fmt + * @width + * Progressive: width + * Interlaced: width + * @height + * Progressive: height + * Interlaced: height + */ +static inline unsigned int MMM_COLOR_FMT_BUFFER_SIZE(unsigned int color_fmt, + unsigned int width, unsigned int height) +{ + unsigned int size = 0; + unsigned int y_plane, uv_plane, y_stride, + uv_stride, y_sclines, uv_sclines; + unsigned int y_ubwc_plane = 0, uv_ubwc_plane = 0; + unsigned int y_meta_stride = 0, y_meta_scanlines = 0; + unsigned int uv_meta_stride = 0, uv_meta_scanlines = 0; + unsigned int y_meta_plane = 0, uv_meta_plane = 0; + unsigned int rgb_stride = 0, rgb_scanlines = 0; + unsigned int rgb_plane = 0, rgb_ubwc_plane = 0, rgb_meta_plane = 0; + unsigned int rgb_meta_stride = 0, rgb_meta_scanlines = 0; + + if (!width || !height) + goto invalid_input; + + y_stride = MMM_COLOR_FMT_Y_STRIDE(color_fmt, width); + uv_stride = MMM_COLOR_FMT_UV_STRIDE(color_fmt, width); + y_sclines = MMM_COLOR_FMT_Y_SCANLINES(color_fmt, height); + uv_sclines = MMM_COLOR_FMT_UV_SCANLINES(color_fmt, height); + rgb_stride = MMM_COLOR_FMT_RGB_STRIDE(color_fmt, width); + rgb_scanlines = MMM_COLOR_FMT_RGB_SCANLINES(color_fmt, height); + + switch (color_fmt) { + case MMM_COLOR_FMT_NV21: + case MMM_COLOR_FMT_NV12: + case MMM_COLOR_FMT_P010: + case MMM_COLOR_FMT_NV12_512: + y_plane = y_stride * y_sclines; + uv_plane = uv_stride * uv_sclines; + size = y_plane + uv_plane; + break; + case MMM_COLOR_FMT_NV12_UBWC: + y_meta_stride = MMM_COLOR_FMT_Y_META_STRIDE(color_fmt, width); + uv_meta_stride = MMM_COLOR_FMT_UV_META_STRIDE(color_fmt, width); + if (width <= INTERLACE_WIDTH_MAX && + height <= INTERLACE_HEIGHT_MAX && + (height * width) / 256 <= INTERLACE_MB_PER_FRAME_MAX) { + y_sclines = MMM_COLOR_FMT_Y_SCANLINES(color_fmt, + (height+1)>>1); + y_ubwc_plane = + MMM_COLOR_FMT_ALIGN(y_stride * y_sclines, 4096); + uv_sclines = MMM_COLOR_FMT_UV_SCANLINES(color_fmt, + (height+1)>>1); + uv_ubwc_plane = MMM_COLOR_FMT_ALIGN( + uv_stride * uv_sclines, 4096); + y_meta_scanlines = MMM_COLOR_FMT_Y_META_SCANLINES( + color_fmt, (height+1)>>1); + y_meta_plane = MMM_COLOR_FMT_ALIGN( + y_meta_stride * y_meta_scanlines, 4096); + uv_meta_scanlines = MMM_COLOR_FMT_UV_META_SCANLINES( + color_fmt, (height+1)>>1); + uv_meta_plane = MMM_COLOR_FMT_ALIGN(uv_meta_stride * + uv_meta_scanlines, 4096); + size = (y_ubwc_plane + uv_ubwc_plane + y_meta_plane + + uv_meta_plane)*2; + } else { + y_sclines = MMM_COLOR_FMT_Y_SCANLINES(color_fmt, + height); + y_ubwc_plane = + MMM_COLOR_FMT_ALIGN(y_stride * y_sclines, 4096); + uv_sclines = MMM_COLOR_FMT_UV_SCANLINES(color_fmt, + height); + uv_ubwc_plane = + MMM_COLOR_FMT_ALIGN(uv_stride * uv_sclines, + 4096); + y_meta_scanlines = MMM_COLOR_FMT_Y_META_SCANLINES( + color_fmt, height); + y_meta_plane = MMM_COLOR_FMT_ALIGN( + y_meta_stride * y_meta_scanlines, 4096); + uv_meta_scanlines = MMM_COLOR_FMT_UV_META_SCANLINES( + color_fmt, height); + uv_meta_plane = MMM_COLOR_FMT_ALIGN(uv_meta_stride * + uv_meta_scanlines, 4096); + size = (y_ubwc_plane + uv_ubwc_plane + y_meta_plane + + uv_meta_plane); + } + break; + case MMM_COLOR_FMT_NV12_BPP10_UBWC: + y_ubwc_plane = MMM_COLOR_FMT_ALIGN(y_stride * y_sclines, 4096); + uv_ubwc_plane = MMM_COLOR_FMT_ALIGN(uv_stride * uv_sclines, + 4096); + y_meta_stride = MMM_COLOR_FMT_Y_META_STRIDE(color_fmt, width); + y_meta_scanlines = MMM_COLOR_FMT_Y_META_SCANLINES(color_fmt, + height); + y_meta_plane = MMM_COLOR_FMT_ALIGN( + y_meta_stride * y_meta_scanlines, 4096); + uv_meta_stride = MMM_COLOR_FMT_UV_META_STRIDE(color_fmt, width); + uv_meta_scanlines = MMM_COLOR_FMT_UV_META_SCANLINES(color_fmt, + height); + uv_meta_plane = MMM_COLOR_FMT_ALIGN(uv_meta_stride * + uv_meta_scanlines, 4096); + + size = y_ubwc_plane + uv_ubwc_plane + y_meta_plane + + uv_meta_plane; + break; + case MMM_COLOR_FMT_P010_UBWC: + y_ubwc_plane = MMM_COLOR_FMT_ALIGN(y_stride * y_sclines, 4096); + uv_ubwc_plane = MMM_COLOR_FMT_ALIGN(uv_stride * uv_sclines, + 4096); + y_meta_stride = MMM_COLOR_FMT_Y_META_STRIDE(color_fmt, width); + y_meta_scanlines = MMM_COLOR_FMT_Y_META_SCANLINES(color_fmt, + height); + y_meta_plane = MMM_COLOR_FMT_ALIGN( + y_meta_stride * y_meta_scanlines, 4096); + uv_meta_stride = MMM_COLOR_FMT_UV_META_STRIDE(color_fmt, width); + uv_meta_scanlines = MMM_COLOR_FMT_UV_META_SCANLINES(color_fmt, + height); + uv_meta_plane = MMM_COLOR_FMT_ALIGN(uv_meta_stride * + uv_meta_scanlines, 4096); + + size = y_ubwc_plane + uv_ubwc_plane + y_meta_plane + + uv_meta_plane; + break; + case MMM_COLOR_FMT_RGBA8888: + rgb_plane = MMM_COLOR_FMT_ALIGN(rgb_stride * rgb_scanlines, + 4096); + size = rgb_plane; + break; + case MMM_COLOR_FMT_RGBA8888_UBWC: + case MMM_COLOR_FMT_RGBA1010102_UBWC: + case MMM_COLOR_FMT_RGB565_UBWC: + rgb_ubwc_plane = MMM_COLOR_FMT_ALIGN(rgb_stride * rgb_scanlines, + 4096); + rgb_meta_stride = MMM_COLOR_FMT_RGB_META_STRIDE(color_fmt, + width); + rgb_meta_scanlines = MMM_COLOR_FMT_RGB_META_SCANLINES(color_fmt, + height); + rgb_meta_plane = MMM_COLOR_FMT_ALIGN(rgb_meta_stride * + rgb_meta_scanlines, 4096); + size = rgb_ubwc_plane + rgb_meta_plane; + break; + default: + break; + } +invalid_input: + return MMM_COLOR_FMT_ALIGN(size, 4096); +} + +static inline unsigned int MMM_COLOR_FMT_BUFFER_SIZE_USED( + unsigned int color_fmt, unsigned int width, + unsigned int height, unsigned int interlace) +{ + unsigned int size = 0; + unsigned int y_stride, uv_stride, y_sclines, uv_sclines; + unsigned int y_ubwc_plane = 0, uv_ubwc_plane = 0; + unsigned int y_meta_stride = 0, y_meta_scanlines = 0; + unsigned int uv_meta_stride = 0, uv_meta_scanlines = 0; + unsigned int y_meta_plane = 0, uv_meta_plane = 0; + + if (!width || !height) + goto invalid_input; + + if (!interlace && color_fmt == MMM_COLOR_FMT_NV12_UBWC) { + y_stride = MMM_COLOR_FMT_Y_STRIDE(color_fmt, width); + uv_stride = MMM_COLOR_FMT_UV_STRIDE(color_fmt, width); + y_sclines = MMM_COLOR_FMT_Y_SCANLINES(color_fmt, height); + y_ubwc_plane = MMM_COLOR_FMT_ALIGN(y_stride * y_sclines, 4096); + uv_sclines = MMM_COLOR_FMT_UV_SCANLINES(color_fmt, height); + uv_ubwc_plane = MMM_COLOR_FMT_ALIGN(uv_stride * uv_sclines, + 4096); + y_meta_stride = MMM_COLOR_FMT_Y_META_STRIDE(color_fmt, width); + y_meta_scanlines = + MMM_COLOR_FMT_Y_META_SCANLINES(color_fmt, height); + y_meta_plane = MMM_COLOR_FMT_ALIGN( + y_meta_stride * y_meta_scanlines, 4096); + uv_meta_stride = MMM_COLOR_FMT_UV_META_STRIDE(color_fmt, width); + uv_meta_scanlines = + MMM_COLOR_FMT_UV_META_SCANLINES(color_fmt, height); + uv_meta_plane = MMM_COLOR_FMT_ALIGN(uv_meta_stride * + uv_meta_scanlines, 4096); + size = (y_ubwc_plane + uv_ubwc_plane + y_meta_plane + + uv_meta_plane); + size = MMM_COLOR_FMT_ALIGN(size, 4096); + } else { + size = MMM_COLOR_FMT_BUFFER_SIZE(color_fmt, width, height); + } +invalid_input: + return size; +} + +#endif diff --git a/include/uapi/media/msm_sde_rotator.h b/include/uapi/display/media/msm_sde_rotator.h similarity index 100% rename from include/uapi/media/msm_sde_rotator.h rename to include/uapi/display/media/msm_sde_rotator.h diff --git a/msm/Makefile b/msm/Makefile index 3b4d2259..da4bc663 100644 --- a/msm/Makefile +++ b/msm/Makefile @@ -22,6 +22,8 @@ msm_drm-$(CONFIG_DRM_MSM_DP) += dp/dp_usbpd.o \ dp/dp_drm.o \ dp/dp_hdcp2p2.o \ dp/dp_mst_drm.o \ + sde_hdcp_1x.o \ + sde_hdcp_2x.o \ msm_drm-$(CONFIG_DRM_MSM_SDE) += sde/sde_crtc.o \ sde/sde_encoder.o \ @@ -45,8 +47,6 @@ msm_drm-$(CONFIG_DRM_MSM_SDE) += sde/sde_crtc.o \ sde/sde_hw_ad4.o \ sde/sde_hw_uidle.o \ sde_edid_parser.o \ - sde_hdcp_1x.o \ - sde_hdcp_2x.o \ sde/sde_hw_catalog.o \ sde/sde_hw_cdm.o \ sde/sde_hw_dspp.o \ diff --git a/msm/sde/sde_connector.h b/msm/sde/sde_connector.h index c948bd14..bc523669 100644 --- a/msm/sde/sde_connector.h +++ b/msm/sde/sde_connector.h @@ -1,12 +1,12 @@ /* SPDX-License-Identifier: GPL-2.0-only */ /* - * Copyright (c) 2016-2019, The Linux Foundation. All rights reserved. + * Copyright (c) 2016-2020, The Linux Foundation. All rights reserved. */ #ifndef _SDE_CONNECTOR_H_ #define _SDE_CONNECTOR_H_ -#include +#include #include #include #include diff --git a/msm/sde/sde_crtc.c b/msm/sde/sde_crtc.c index dbeaa8d4..1c9a1dbc 100644 --- a/msm/sde/sde_crtc.c +++ b/msm/sde/sde_crtc.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2019 The Linux Foundation. All rights reserved. + * Copyright (c) 2014-2020 The Linux Foundation. All rights reserved. * Copyright (C) 2013 Red Hat * Author: Rob Clark * @@ -20,7 +20,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/msm/sde/sde_encoder_phys_wb.c b/msm/sde/sde_encoder_phys_wb.c index 03e9adf4..6cab7f1c 100644 --- a/msm/sde/sde_encoder_phys_wb.c +++ b/msm/sde/sde_encoder_phys_wb.c @@ -1,11 +1,11 @@ // SPDX-License-Identifier: GPL-2.0-only /* - * Copyright (c) 2015-2019, The Linux Foundation. All rights reserved. + * Copyright (c) 2015-2020, The Linux Foundation. All rights reserved. */ #define pr_fmt(fmt) "[drm:%s:%d] " fmt, __func__, __LINE__ #include -#include +#include #include "sde_encoder_phys.h" #include "sde_formats.h" diff --git a/msm/sde/sde_formats.c b/msm/sde/sde_formats.c index 64c24996..7e6be85e 100644 --- a/msm/sde/sde_formats.c +++ b/msm/sde/sde_formats.c @@ -1,12 +1,12 @@ // SPDX-License-Identifier: GPL-2.0-only /* - * Copyright (c) 2015-2019, The Linux Foundation. All rights reserved. + * Copyright (c) 2015-2020, The Linux Foundation. All rights reserved. */ #define pr_fmt(fmt) "[drm:%s:%d] " fmt, __func__, __LINE__ -#include -#include +#include +#include #include "sde_kms.h" #include "sde_formats.h" @@ -686,11 +686,11 @@ static void _sde_get_v_h_subsample_rate( static int _sde_format_get_media_color_ubwc(const struct sde_format *fmt) { static const struct sde_media_color_map sde_media_ubwc_map[] = { - {DRM_FORMAT_ABGR8888, COLOR_FMT_RGBA8888_UBWC}, - {DRM_FORMAT_XBGR8888, COLOR_FMT_RGBA8888_UBWC}, - {DRM_FORMAT_ABGR2101010, COLOR_FMT_RGBA1010102_UBWC}, - {DRM_FORMAT_XBGR2101010, COLOR_FMT_RGBA1010102_UBWC}, - {DRM_FORMAT_BGR565, COLOR_FMT_RGB565_UBWC}, + {DRM_FORMAT_ABGR8888, MMM_COLOR_FMT_RGBA8888_UBWC}, + {DRM_FORMAT_XBGR8888, MMM_COLOR_FMT_RGBA8888_UBWC}, + {DRM_FORMAT_ABGR2101010, MMM_COLOR_FMT_RGBA1010102_UBWC}, + {DRM_FORMAT_XBGR2101010, MMM_COLOR_FMT_RGBA1010102_UBWC}, + {DRM_FORMAT_BGR565, MMM_COLOR_FMT_RGB565_UBWC}, }; int color_fmt = -1; int i; @@ -698,11 +698,11 @@ static int _sde_format_get_media_color_ubwc(const struct sde_format *fmt) if (fmt->base.pixel_format == DRM_FORMAT_NV12) { if (SDE_FORMAT_IS_DX(fmt)) { if (fmt->unpack_tight) - color_fmt = COLOR_FMT_NV12_BPP10_UBWC; + color_fmt = MMM_COLOR_FMT_NV12_BPP10_UBWC; else - color_fmt = COLOR_FMT_P010_UBWC; + color_fmt = MMM_COLOR_FMT_P010_UBWC; } else - color_fmt = COLOR_FMT_NV12_UBWC; + color_fmt = MMM_COLOR_FMT_NV12_UBWC; return color_fmt; } @@ -743,28 +743,36 @@ static int _sde_format_get_plane_sizes_ubwc( uint32_t uv_meta_scanlines = 0; layout->num_planes = 2; - layout->plane_pitch[0] = VENUS_Y_STRIDE(color, width); - y_sclines = VENUS_Y_SCANLINES(color, height); - layout->plane_size[0] = MSM_MEDIA_ALIGN(layout->plane_pitch[0] * + layout->plane_pitch[0] = MMM_COLOR_FMT_Y_STRIDE(color, width); + y_sclines = MMM_COLOR_FMT_Y_SCANLINES(color, height); + layout->plane_size[0] = + MMM_COLOR_FMT_ALIGN(layout->plane_pitch[0] * y_sclines, SDE_UBWC_PLANE_SIZE_ALIGNMENT); - layout->plane_pitch[1] = VENUS_UV_STRIDE(color, width); - uv_sclines = VENUS_UV_SCANLINES(color, height); - layout->plane_size[1] = MSM_MEDIA_ALIGN(layout->plane_pitch[1] * + layout->plane_pitch[1] = MMM_COLOR_FMT_UV_STRIDE(color, width); + uv_sclines = MMM_COLOR_FMT_UV_SCANLINES(color, height); + layout->plane_size[1] = + MMM_COLOR_FMT_ALIGN(layout->plane_pitch[1] * uv_sclines, SDE_UBWC_PLANE_SIZE_ALIGNMENT); if (!meta) goto done; layout->num_planes += 2; - layout->plane_pitch[2] = VENUS_Y_META_STRIDE(color, width); - y_meta_scanlines = VENUS_Y_META_SCANLINES(color, height); - layout->plane_size[2] = MSM_MEDIA_ALIGN(layout->plane_pitch[2] * + layout->plane_pitch[2] = + MMM_COLOR_FMT_Y_META_STRIDE(color, width); + y_meta_scanlines = + MMM_COLOR_FMT_Y_META_SCANLINES(color, height); + layout->plane_size[2] = + MMM_COLOR_FMT_ALIGN(layout->plane_pitch[2] * y_meta_scanlines, SDE_UBWC_PLANE_SIZE_ALIGNMENT); - layout->plane_pitch[3] = VENUS_UV_META_STRIDE(color, width); - uv_meta_scanlines = VENUS_UV_META_SCANLINES(color, height); - layout->plane_size[3] = MSM_MEDIA_ALIGN(layout->plane_pitch[3] * + layout->plane_pitch[3] = + MMM_COLOR_FMT_UV_META_STRIDE(color, width); + uv_meta_scanlines = + MMM_COLOR_FMT_UV_META_SCANLINES(color, height); + layout->plane_size[3] = + MMM_COLOR_FMT_ALIGN(layout->plane_pitch[3] * uv_meta_scanlines, SDE_UBWC_PLANE_SIZE_ALIGNMENT); } else { @@ -772,17 +780,22 @@ static int _sde_format_get_plane_sizes_ubwc( layout->num_planes = 1; - layout->plane_pitch[0] = VENUS_RGB_STRIDE(color, width); - rgb_scanlines = VENUS_RGB_SCANLINES(color, height); - layout->plane_size[0] = MSM_MEDIA_ALIGN(layout->plane_pitch[0] * + layout->plane_pitch[0] = + MMM_COLOR_FMT_RGB_STRIDE(color, width); + rgb_scanlines = MMM_COLOR_FMT_RGB_SCANLINES(color, height); + layout->plane_size[0] = + MMM_COLOR_FMT_ALIGN(layout->plane_pitch[0] * rgb_scanlines, SDE_UBWC_PLANE_SIZE_ALIGNMENT); if (!meta) goto done; layout->num_planes += 2; - layout->plane_pitch[2] = VENUS_RGB_META_STRIDE(color, width); - rgb_meta_scanlines = VENUS_RGB_META_SCANLINES(color, height); - layout->plane_size[2] = MSM_MEDIA_ALIGN(layout->plane_pitch[2] * + layout->plane_pitch[2] = + MMM_COLOR_FMT_RGB_META_STRIDE(color, width); + rgb_meta_scanlines = + MMM_COLOR_FMT_RGB_META_SCANLINES(color, height); + layout->plane_size[2] = + MMM_COLOR_FMT_ALIGN(layout->plane_pitch[2] * rgb_meta_scanlines, SDE_UBWC_PLANE_SIZE_ALIGNMENT); } diff --git a/msm/sde/sde_hw_pingpong.h b/msm/sde/sde_hw_pingpong.h index 102cfc03..32866708 100644 --- a/msm/sde/sde_hw_pingpong.h +++ b/msm/sde/sde_hw_pingpong.h @@ -1,6 +1,6 @@ /* SPDX-License-Identifier: GPL-2.0-only */ /* - * Copyright (c) 2015-2019, The Linux Foundation. All rights reserved. + * Copyright (c) 2015-2020, The Linux Foundation. All rights reserved. */ #ifndef _SDE_HW_PINGPONG_H @@ -10,7 +10,7 @@ #include "sde_hw_mdss.h" #include "sde_hw_util.h" #include "sde_hw_blk.h" -#include +#include struct sde_hw_pingpong; struct sde_hw_merge_3d; diff --git a/msm/sde/sde_hw_util.c b/msm/sde/sde_hw_util.c index 819af9e2..2ba8b237 100644 --- a/msm/sde/sde_hw_util.c +++ b/msm/sde/sde_hw_util.c @@ -1,10 +1,10 @@ // SPDX-License-Identifier: GPL-2.0-only /* - * Copyright (c) 2015-2019, The Linux Foundation. All rights reserved. + * Copyright (c) 2015-2020, The Linux Foundation. All rights reserved. */ #define pr_fmt(fmt) "[drm:%s:%d] " fmt, __func__, __LINE__ -#include +#include #include "msm_drv.h" #include "sde_kms.h" #include "sde_hw_mdss.h" diff --git a/msm/sde/sde_plane.c b/msm/sde/sde_plane.c index fe70fe6b..7041c1b3 100644 --- a/msm/sde/sde_plane.c +++ b/msm/sde/sde_plane.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2014-2019 The Linux Foundation. All rights reserved. + * Copyright (C) 2014-2020 The Linux Foundation. All rights reserved. * Copyright (C) 2013 Red Hat * Author: Rob Clark * @@ -20,8 +20,8 @@ #include #include -#include -#include +#include +#include #include "msm_prop.h" #include "msm_drv.h" diff --git a/msm/sde/sde_wb.c b/msm/sde/sde_wb.c index 051c37e2..aaf404d4 100644 --- a/msm/sde/sde_wb.c +++ b/msm/sde/sde_wb.c @@ -1,11 +1,11 @@ // SPDX-License-Identifier: GPL-2.0-only /* - * Copyright (c) 2015-2019, The Linux Foundation. All rights reserved. + * Copyright (c) 2015-2020, The Linux Foundation. All rights reserved. */ #define pr_fmt(fmt) "[drm:%s:%d] " fmt, __func__, __LINE__ -#include +#include #include #include "msm_kms.h"