aboutsummaryrefslogtreecommitdiffstats
path: root/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/0520-drm-amd-display-Get-rid-of-seperate-flip-function.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/0520-drm-amd-display-Get-rid-of-seperate-flip-function.patch')
-rw-r--r--meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/0520-drm-amd-display-Get-rid-of-seperate-flip-function.patch197
1 files changed, 0 insertions, 197 deletions
diff --git a/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/0520-drm-amd-display-Get-rid-of-seperate-flip-function.patch b/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/0520-drm-amd-display-Get-rid-of-seperate-flip-function.patch
deleted file mode 100644
index 6b60987a..00000000
--- a/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/0520-drm-amd-display-Get-rid-of-seperate-flip-function.patch
+++ /dev/null
@@ -1,197 +0,0 @@
-From a0f9b7aeae527f6494be28cdcf4d0cba2f2acd57 Mon Sep 17 00:00:00 2001
-From: Andrey Grodzovsky <Andrey.Grodzovsky@amd.com>
-Date: Sun, 4 Jun 2017 09:11:56 -0400
-Subject: [PATCH 0520/4131] drm/amd/display: Get rid of seperate flip function.
-
-This code is remanant of pre atomic age when flip was a
-standalone IOCTL.
-
-Signed-off-by: Andrey Grodzovsky <Andrey.Grodzovsky@amd.com>
-Reviewed-by: Tony Cheng <Tony.Cheng@amd.com>
-Reviewed-by: Harry Wentland <Harry.Wentland@amd.com>
-Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
----
- drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 97 ----------------------
- .../drm/amd/display/amdgpu_dm/amdgpu_dm_types.c | 37 ++++++++-
- 2 files changed, 34 insertions(+), 100 deletions(-)
-
-diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
-index 55b3464..40bab65 100644
---- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
-+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
-@@ -1328,102 +1328,6 @@ static u8 dm_get_backlight_level(struct amdgpu_encoder *amdgpu_encoder)
- return 0;
- }
-
--/******************************************************************************
-- * Page Flip functions
-- ******************************************************************************/
--
--/**
-- * dm_page_flip - called by amdgpu_flip_work_func(), which is triggered
-- * via DRM IOCTL, by user mode.
-- *
-- * @adev: amdgpu_device pointer
-- * @crtc_id: crtc to cleanup pageflip on
-- * @crtc_base: new address of the crtc (GPU MC address)
-- *
-- * Does the actual pageflip (surface address update).
-- */
--static void dm_page_flip(struct amdgpu_device *adev,
-- int crtc_id, u64 crtc_base, bool async)
--{
-- struct amdgpu_crtc *acrtc;
-- const struct dc_stream *stream;
-- struct dc_flip_addrs addr = { {0} };
-- struct dc_surface_update surface_updates[1] = { {0} };
--
-- /*
-- * TODO risk of concurrency issues
-- *
-- * This should guarded by the dal_mutex but we can't do this since the
-- * caller uses a spin_lock on event_lock.
-- *
-- * If we wait on the dal_mutex a second page flip interrupt might come,
-- * spin on the event_lock, disabling interrupts while it does so. At
-- * this point the core can no longer be pre-empted and return to the
-- * thread that waited on the dal_mutex and we're deadlocked.
-- *
-- * With multiple cores the same essentially happens but might just take
-- * a little longer to lock up all cores.
-- *
-- * The reason we should lock on dal_mutex is so that we can be sure
-- * nobody messes with acrtc->stream after we read and check its value.
-- *
-- * We might be able to fix our concurrency issues with a work queue
-- * where we schedule all work items (mode_set, page_flip, etc.) and
-- * execute them one by one. Care needs to be taken to still deal with
-- * any potential concurrency issues arising from interrupt calls.
-- */
--
-- acrtc = adev->mode_info.crtcs[crtc_id];
-- stream = acrtc->stream;
--
--
-- if (acrtc->pflip_status != AMDGPU_FLIP_NONE) {
-- DRM_ERROR("flip queue: acrtc %d, already busy\n", acrtc->crtc_id);
-- /* In commit tail framework this cannot happen */
-- BUG_ON(0);
-- }
--
--
-- /*
-- * Received a page flip call after the display has been reset.
-- * Just return in this case. Everything should be clean-up on reset.
-- */
--
-- if (!stream) {
-- WARN_ON(1);
-- return;
-- }
--
-- addr.address.grph.addr.low_part = lower_32_bits(crtc_base);
-- addr.address.grph.addr.high_part = upper_32_bits(crtc_base);
-- addr.flip_immediate = async;
--
--
-- if (acrtc->base.state->event &&
-- acrtc->base.state->event->event.base.type ==
-- DRM_EVENT_FLIP_COMPLETE) {
-- acrtc->event = acrtc->base.state->event;
--
-- /* Set the flip status */
-- acrtc->pflip_status = AMDGPU_FLIP_SUBMITTED;
--
-- /* Mark this event as consumed */
-- acrtc->base.state->event = NULL;
-- }
--
-- surface_updates->surface = dc_stream_get_status(stream)->surfaces[0];
-- surface_updates->flip_addr = &addr;
--
--
-- dc_update_surfaces_for_stream(adev->dm.dc, surface_updates, 1, stream);
--
-- DRM_DEBUG_DRIVER("%s Flipping to hi: 0x%x, low: 0x%x \n",
-- __func__,
-- addr.address.grph.addr.high_part,
-- addr.address.grph.addr.low_part);
--
--}
--
- static int amdgpu_notify_freesync(struct drm_device *dev, void *data,
- struct drm_file *filp)
- {
-@@ -1465,7 +1369,6 @@ static const struct amdgpu_display_funcs dm_display_funcs = {
- .hpd_sense = NULL,/* called unconditionally */
- .hpd_set_polarity = NULL, /* called unconditionally */
- .hpd_get_gpio_reg = NULL, /* VBIOS parsing. DAL does it. */
-- .page_flip = dm_page_flip, /* called unconditionally */
- .page_flip_get_scanoutpos =
- dm_crtc_get_scanoutpos,/* called unconditionally */
- .add_encoder = NULL, /* VBIOS parsing. DAL does it. */
-diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_types.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_types.c
-index a7e0ae8..83cc5f9 100644
---- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_types.c
-+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_types.c
-@@ -2347,6 +2347,8 @@ static void amdgpu_dm_do_flip(
- struct amdgpu_bo *abo = gem_to_amdgpu_bo(afb->obj);
- struct amdgpu_device *adev = crtc->dev->dev_private;
- bool async_flip = (acrtc->flip_flags & DRM_MODE_PAGE_FLIP_ASYNC) != 0;
-+ struct dc_flip_addrs addr = { {0} };
-+ struct dc_surface_update surface_updates[1] = { {0} };
-
- /* Prepare wait for target vblank early - before the fence-waits */
- target_vblank = target - drm_crtc_vblank_count(crtc) +
-@@ -2360,7 +2362,7 @@ static void amdgpu_dm_do_flip(
- r = amdgpu_bo_reserve(abo, true);
- if (unlikely(r != 0)) {
- DRM_ERROR("failed to reserve buffer before flip\n");
-- BUG_ON(0);
-+ WARN_ON(1);
- }
-
- /* Wait for all fences on this FB */
-@@ -2388,8 +2390,37 @@ static void amdgpu_dm_do_flip(
- /* update crtc fb */
- crtc->primary->fb = fb;
-
-- /* Do the flip (mmio) */
-- adev->mode_info.funcs->page_flip(adev, acrtc->crtc_id, afb->address, async_flip);
-+ WARN_ON(acrtc->pflip_status != AMDGPU_FLIP_NONE);
-+ WARN_ON(!acrtc->stream);
-+
-+ addr.address.grph.addr.low_part = lower_32_bits(afb->address);
-+ addr.address.grph.addr.high_part = upper_32_bits(afb->address);
-+ addr.flip_immediate = async_flip;
-+
-+
-+ if (acrtc->base.state->event &&
-+ acrtc->base.state->event->event.base.type ==
-+ DRM_EVENT_FLIP_COMPLETE) {
-+ acrtc->event = acrtc->base.state->event;
-+
-+ /* Set the flip status */
-+ acrtc->pflip_status = AMDGPU_FLIP_SUBMITTED;
-+
-+ /* Mark this event as consumed */
-+ acrtc->base.state->event = NULL;
-+ }
-+
-+ surface_updates->surface = dc_stream_get_status(acrtc->stream)->surfaces[0];
-+ surface_updates->flip_addr = &addr;
-+
-+
-+ dc_update_surfaces_for_stream(adev->dm.dc, surface_updates, 1, acrtc->stream);
-+
-+ DRM_DEBUG_DRIVER("%s Flipping to hi: 0x%x, low: 0x%x \n",
-+ __func__,
-+ addr.address.grph.addr.high_part,
-+ addr.address.grph.addr.low_part);
-+
-
- spin_unlock_irqrestore(&crtc->dev->event_lock, flags);
- DRM_DEBUG_DRIVER("crtc:%d, pflip_stat:AMDGPU_FLIP_SUBMITTED\n",
---
-2.7.4
-