diff options
author | Yangbo Lu <yangbo.lu@nxp.com> | 2020-04-10 10:47:05 +0800 |
---|---|---|
committer | Petr Štetiar <ynezz@true.cz> | 2020-05-07 12:53:06 +0200 |
commit | cddd4591404fb4c53dc0b3c0b15b942cdbed4356 (patch) | |
tree | 392c1179de46b0f804e3789edca19069b64e6b44 /target/linux/layerscape/patches-5.4/805-display-0048-Revert-drm-imx-Extract-IPUv3-specific-KMS-functions-.patch | |
parent | d1d2c0b5579ea4f69a42246c9318539d61ba1999 (diff) | |
download | upstream-cddd4591404fb4c53dc0b3c0b15b942cdbed4356.tar.gz upstream-cddd4591404fb4c53dc0b3c0b15b942cdbed4356.tar.bz2 upstream-cddd4591404fb4c53dc0b3c0b15b942cdbed4356.zip |
layerscape: add patches-5.4
Add patches for linux-5.4. The patches are from NXP LSDK-20.04 release
which was tagged LSDK-20.04-V5.4.
https://source.codeaurora.org/external/qoriq/qoriq-components/linux/
For boards LS1021A-IOT, and Traverse-LS1043 which are not involved in
LSDK, port the dts patches from 4.14.
The patches are sorted into the following categories:
301-arch-xxxx
302-dts-xxxx
303-core-xxxx
701-net-xxxx
801-audio-xxxx
802-can-xxxx
803-clock-xxxx
804-crypto-xxxx
805-display-xxxx
806-dma-xxxx
807-gpio-xxxx
808-i2c-xxxx
809-jailhouse-xxxx
810-keys-xxxx
811-kvm-xxxx
812-pcie-xxxx
813-pm-xxxx
814-qe-xxxx
815-sata-xxxx
816-sdhc-xxxx
817-spi-xxxx
818-thermal-xxxx
819-uart-xxxx
820-usb-xxxx
821-vfio-xxxx
Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
Diffstat (limited to 'target/linux/layerscape/patches-5.4/805-display-0048-Revert-drm-imx-Extract-IPUv3-specific-KMS-functions-.patch')
-rw-r--r-- | target/linux/layerscape/patches-5.4/805-display-0048-Revert-drm-imx-Extract-IPUv3-specific-KMS-functions-.patch | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/target/linux/layerscape/patches-5.4/805-display-0048-Revert-drm-imx-Extract-IPUv3-specific-KMS-functions-.patch b/target/linux/layerscape/patches-5.4/805-display-0048-Revert-drm-imx-Extract-IPUv3-specific-KMS-functions-.patch new file mode 100644 index 0000000000..23411bc117 --- /dev/null +++ b/target/linux/layerscape/patches-5.4/805-display-0048-Revert-drm-imx-Extract-IPUv3-specific-KMS-functions-.patch @@ -0,0 +1,135 @@ +From d2943462cef18cb78680215dec058d5254e63dc3 Mon Sep 17 00:00:00 2001 +From: Yangbo Lu <yangbo.lu@nxp.com> +Date: Mon, 2 Mar 2020 13:45:41 +0800 +Subject: [PATCH] Revert "drm/imx: Extract IPUv3 specific KMS functions to + ipuv3-kms.c (part 1)" + +This reverts commit aad8cd9d3f10c57bbf405e25ed1be491d99b6294. +--- + drivers/gpu/drm/imx/imx-drm-core.c | 81 ++++++++++++++++++++++++++++++++++++++ + drivers/gpu/drm/imx/imx-drm.h | 5 ++- + 2 files changed, 84 insertions(+), 2 deletions(-) + +--- a/drivers/gpu/drm/imx/imx-drm-core.c ++++ b/drivers/gpu/drm/imx/imx-drm-core.c +@@ -28,6 +28,9 @@ + #include <video/dpu.h> + + #include "imx-drm.h" ++#include "ipuv3-plane.h" ++ ++#define MAX_CRTC 4 + + static int legacyfb_depth = 16; + module_param(legacyfb_depth, int, 0444); +@@ -47,6 +50,81 @@ void imx_drm_encoder_destroy(struct drm_ + } + EXPORT_SYMBOL_GPL(imx_drm_encoder_destroy); + ++static int imx_drm_atomic_check(struct drm_device *dev, ++ struct drm_atomic_state *state) ++{ ++ int ret; ++ ++ ret = drm_atomic_helper_check(dev, state); ++ if (ret) ++ return ret; ++ ++ /* ++ * Check modeset again in case crtc_state->mode_changed is ++ * updated in plane's ->atomic_check callback. ++ */ ++ ret = drm_atomic_helper_check_modeset(dev, state); ++ if (ret) ++ return ret; ++ ++ /* Assign PRG/PRE channels and check if all constrains are satisfied. */ ++ ret = ipu_planes_assign_pre(dev, state); ++ if (ret) ++ return ret; ++ ++ return ret; ++} ++ ++static const struct drm_mode_config_funcs imx_drm_mode_config_funcs = { ++ .fb_create = drm_gem_fb_create, ++ .atomic_check = imx_drm_atomic_check, ++ .atomic_commit = drm_atomic_helper_commit, ++}; ++ ++static void imx_drm_atomic_commit_tail(struct drm_atomic_state *state) ++{ ++ struct drm_device *dev = state->dev; ++ struct drm_plane *plane; ++ struct drm_plane_state *old_plane_state, *new_plane_state; ++ bool plane_disabling = false; ++ int i; ++ ++ drm_atomic_helper_commit_modeset_disables(dev, state); ++ ++ drm_atomic_helper_commit_planes(dev, state, ++ DRM_PLANE_COMMIT_ACTIVE_ONLY | ++ DRM_PLANE_COMMIT_NO_DISABLE_AFTER_MODESET); ++ ++ drm_atomic_helper_commit_modeset_enables(dev, state); ++ ++ for_each_oldnew_plane_in_state(state, plane, old_plane_state, new_plane_state, i) { ++ if (drm_atomic_plane_disabling(old_plane_state, new_plane_state)) ++ plane_disabling = true; ++ } ++ ++ /* ++ * The flip done wait is only strictly required by imx-drm if a deferred ++ * plane disable is in-flight. As the core requires blocking commits ++ * to wait for the flip it is done here unconditionally. This keeps the ++ * workitem around a bit longer than required for the majority of ++ * non-blocking commits, but we accept that for the sake of simplicity. ++ */ ++ drm_atomic_helper_wait_for_flip_done(dev, state); ++ ++ if (plane_disabling) { ++ for_each_old_plane_in_state(state, plane, old_plane_state, i) ++ ipu_plane_disable_deferred(plane); ++ ++ } ++ ++ drm_atomic_helper_commit_hw_done(state); ++} ++ ++static const struct drm_mode_config_helper_funcs imx_drm_mode_config_helpers = { ++ .atomic_commit_tail = imx_drm_atomic_commit_tail, ++}; ++ ++ + int imx_drm_encoder_parse_of(struct drm_device *drm, + struct drm_encoder *encoder, struct device_node *np) + { +@@ -163,6 +241,9 @@ static int imx_drm_bind(struct device *d + drm->mode_config.min_height = 1; + drm->mode_config.max_width = 4096; + drm->mode_config.max_height = 4096; ++ drm->mode_config.funcs = &imx_drm_mode_config_funcs; ++ drm->mode_config.helper_private = &imx_drm_mode_config_helpers; ++ drm->mode_config.allow_fb_modifiers = true; + drm->mode_config.normalize_zpos = true; + + drm_mode_config_init(drm); +--- a/drivers/gpu/drm/imx/imx-drm.h ++++ b/drivers/gpu/drm/imx/imx-drm.h +@@ -2,8 +2,6 @@ + #ifndef _IMX_DRM_H_ + #define _IMX_DRM_H_ + +-#define MAX_CRTC 4 +- + struct device_node; + struct drm_crtc; + struct drm_connector; +@@ -40,4 +38,7 @@ int imx_drm_encoder_parse_of(struct drm_ + void imx_drm_connector_destroy(struct drm_connector *connector); + void imx_drm_encoder_destroy(struct drm_encoder *encoder); + ++int ipu_planes_assign_pre(struct drm_device *dev, ++ struct drm_atomic_state *state); ++ + #endif /* _IMX_DRM_H_ */ |