aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/files/0512-drm-amdgpu-Use-dal-driver-for-CZ.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/files/0512-drm-amdgpu-Use-dal-driver-for-CZ.patch')
-rw-r--r--common/recipes-kernel/linux/files/0512-drm-amdgpu-Use-dal-driver-for-CZ.patch496
1 files changed, 0 insertions, 496 deletions
diff --git a/common/recipes-kernel/linux/files/0512-drm-amdgpu-Use-dal-driver-for-CZ.patch b/common/recipes-kernel/linux/files/0512-drm-amdgpu-Use-dal-driver-for-CZ.patch
deleted file mode 100644
index a37d3c91..00000000
--- a/common/recipes-kernel/linux/files/0512-drm-amdgpu-Use-dal-driver-for-CZ.patch
+++ /dev/null
@@ -1,496 +0,0 @@
-From 351b71a53a01276932fe2269c2bcbd5bf35da0f2 Mon Sep 17 00:00:00 2001
-From: Harry Wentland <harry.wentland@amd.com>
-Date: Thu, 31 Mar 2016 17:45:07 -0400
-Subject: [PATCH 0512/1110] drm/amdgpu: Use dal driver for CZ
-
-Signed-off-by: Harry Wentland <harry.wentland@amd.com>
-Acked-by: Alex Deucher <alexander.deucher@amd.com>
----
- drivers/gpu/drm/amd/amdgpu/Kconfig | 1 +
- drivers/gpu/drm/amd/amdgpu/Makefile | 18 +++++-
- drivers/gpu/drm/amd/amdgpu/amdgpu.h | 12 +++-
- drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 34 ++++++++++-
- drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 4 ++
- drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c | 5 --
- drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c | 11 +++-
- drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h | 51 +++++++++++++++-
- drivers/gpu/drm/amd/amdgpu/vi.c | 96 +++++++++++++++++++++++++++++-
- 9 files changed, 216 insertions(+), 16 deletions(-)
-
-diff --git a/drivers/gpu/drm/amd/amdgpu/Kconfig b/drivers/gpu/drm/amd/amdgpu/Kconfig
-index 7335c04..6b9dac8 100644
---- a/drivers/gpu/drm/amd/amdgpu/Kconfig
-+++ b/drivers/gpu/drm/amd/amdgpu/Kconfig
-@@ -25,3 +25,4 @@ config DRM_AMDGPU_GART_DEBUGFS
- Selecting this option creates a debugfs file to inspect the mapped
- pages. Uses more memory for housekeeping, enable only for debugging.
-
-+source "drivers/gpu/drm/amd/dal/Kconfig"
-diff --git a/drivers/gpu/drm/amd/amdgpu/Makefile b/drivers/gpu/drm/amd/amdgpu/Makefile
-index dceebbb..3efc971 100644
---- a/drivers/gpu/drm/amd/amdgpu/Makefile
-+++ b/drivers/gpu/drm/amd/amdgpu/Makefile
-@@ -3,13 +3,18 @@
- # Direct Rendering Infrastructure (DRI) in XFree86 4.1.0 and higher.
-
- FULL_AMD_PATH=$(src)/..
-+DAL_FOLDER_NAME=dal
-+FULL_AMD_DAL_PATH = $(FULL_AMD_PATH)/$(DAL_FOLDER_NAME)
-
- ccflags-y := -Iinclude/drm -I$(FULL_AMD_PATH)/include/asic_reg \
- -I$(FULL_AMD_PATH)/include \
- -I$(FULL_AMD_PATH)/amdgpu \
- -I$(FULL_AMD_PATH)/scheduler \
- -I$(FULL_AMD_PATH)/powerplay/inc \
-- -I$(FULL_AMD_PATH)/acp/include
-+ -I$(FULL_AMD_PATH)/acp/include \
-+ -I$(FULL_AMD_DAL_PATH) \
-+ -I$(FULL_AMD_DAL_PATH)/include \
-+ -I$(FULL_AMD_DAL_PATH)/amdgpu_dm
-
- amdgpu-y := amdgpu_drv.o
-
-@@ -110,9 +115,18 @@ amdgpu-$(CONFIG_VGA_SWITCHEROO) += amdgpu_atpx_handler.o
- amdgpu-$(CONFIG_ACPI) += amdgpu_acpi.o
- amdgpu-$(CONFIG_MMU_NOTIFIER) += amdgpu_mn.o
-
-+ifneq ($(CONFIG_DRM_AMD_DAL),)
-+
-+RELATIVE_AMD_DAL_PATH = ../$(DAL_FOLDER_NAME)
-+include $(FULL_AMD_DAL_PATH)/Makefile
-+
-+amdgpu-y += $(AMD_DAL_FILES)
-+
-+endif
-+
- ifneq ($(CONFIG_DRM_AMD_POWERPLAY),)
-
--include $(FULL_AMD_PATH)/powerplay/Makefile
-+include drivers/gpu/drm/amd/powerplay/Makefile
-
- amdgpu-y += $(AMD_POWERPLAY_FILES)
-
-diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
-index 06cf1eb..1e5dd09 100644
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
-@@ -52,8 +52,9 @@
- #include "amdgpu_irq.h"
- #include "amdgpu_ucode.h"
- #include "amdgpu_gds.h"
--#include "amd_powerplay.h"
- #include "amdgpu_acp.h"
-+#include "amdgpu_dm.h"
-+#include "amd_powerplay.h"
-
- #include "gpu_scheduler.h"
-
-@@ -82,6 +83,7 @@ extern int amdgpu_vm_size;
- extern int amdgpu_vm_block_size;
- extern int amdgpu_vm_fault_stop;
- extern int amdgpu_vm_debug;
-+extern int amdgpu_dal;
- extern int amdgpu_sched_jobs;
- extern int amdgpu_sched_hw_submission;
- extern int amdgpu_powerplay;
-@@ -2010,6 +2012,7 @@ struct amdgpu_device {
-
- /* display */
- struct amdgpu_mode_info mode_info;
-+ /* For pre-DCE11. DCE11 and later are in "struct amdgpu_device->dm" */
- struct work_struct hotplug_work;
- struct amdgpu_irq_src crtc_irq;
- struct amdgpu_irq_src pageflip_irq;
-@@ -2056,6 +2059,9 @@ struct amdgpu_device {
- /* GDS */
- struct amdgpu_gds gds;
-
-+ /* display related functionality */
-+ struct amdgpu_display_manager dm;
-+
- const struct amdgpu_ip_block_version *ip_blocks;
- int num_ip_blocks;
- struct amdgpu_ip_block_status *ip_block_status;
-@@ -2090,7 +2096,7 @@ void amdgpu_io_wreg(struct amdgpu_device *adev, u32 reg, u32 v);
-
- u32 amdgpu_mm_rdoorbell(struct amdgpu_device *adev, u32 index);
- void amdgpu_mm_wdoorbell(struct amdgpu_device *adev, u32 index, u32 v);
--
-+bool amdgpu_device_has_dal_support(struct amdgpu_device *adev);
- /*
- * Registers read & write functions.
- */
-@@ -2325,6 +2331,8 @@ amdgpu_get_sdma_instance(struct amdgpu_ring *ring)
-
- #define amdgpu_gds_switch(adev, r, v, d, w, a) (adev)->gds.funcs->patch_gds_switch((r), (v), (d), (w), (a))
-
-+#define amdgpu_has_dal_support(adev) (amdgpu_dal && amdgpu_device_has_dal_support(adev))
-+
- /* Common functions */
- int amdgpu_gpu_reset(struct amdgpu_device *adev);
- void amdgpu_pci_config_reset(struct amdgpu_device *adev);
-diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
-index 8ff3286..fcfdf2d 100644
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
-@@ -1378,6 +1378,28 @@ static int amdgpu_resume(struct amdgpu_device *adev)
- return 0;
- }
-
-+
-+/**
-+ * amdgpu_device_has_dal_support - check if dal is supported
-+ *
-+ * @adev: amdgpu_device_pointer
-+ *
-+ * Returns true for supported, false for not supported
-+ */
-+bool amdgpu_device_has_dal_support(struct amdgpu_device *adev)
-+{
-+
-+ switch(adev->asic_type) {
-+ case CHIP_CARRIZO:
-+#if defined(CONFIG_DRM_AMD_DAL) && defined(CONFIG_DRM_AMD_DAL_DCE11_0)
-+ return true;
-+#endif
-+ default:
-+ return false;
-+ }
-+}
-+
-+
- /**
- * amdgpu_device_init - initialize the driver
- *
-@@ -1529,8 +1551,10 @@ int amdgpu_device_init(struct amdgpu_device *adev,
- dev_err(adev->dev, "amdgpu_atombios_get_clock_info failed\n");
- return r;
- }
-+
- /* init i2c buses */
-- amdgpu_atombios_i2c_init(adev);
-+ if (!amdgpu_has_dal_support(adev))
-+ amdgpu_atombios_i2c_init(adev);
-
- /* Fence driver */
- r = amdgpu_fence_driver_init(adev);
-@@ -1630,7 +1654,8 @@ void amdgpu_device_fini(struct amdgpu_device *adev)
- adev->ip_block_status = NULL;
- adev->accel_working = false;
- /* free i2c buses */
-- amdgpu_i2c_fini(adev);
-+ if (!amdgpu_has_dal_support(adev))
-+ amdgpu_i2c_fini(adev);
- amdgpu_atombios_fini(adev);
- kfree(adev->bios);
- adev->bios = NULL;
-@@ -1811,6 +1836,11 @@ int amdgpu_resume_kms(struct drm_device *dev, bool resume, bool fbcon)
- /* blat the mode back in */
- if (fbcon) {
- drm_helper_resume_force_mode(dev);
-+ if (!amdgpu_has_dal_support(adev)) {
-+ /* pre DCE11 */
-+ drm_helper_resume_force_mode(dev);
-+ }
-+
- /* turn on display hw */
- drm_modeset_lock_all(dev);
- list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
-diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
-index 943cdfb..97e5b69 100644
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
-@@ -77,6 +77,7 @@ int amdgpu_vm_block_size = -1;
- int amdgpu_vm_fault_stop = 0;
- int amdgpu_vm_debug = 0;
- int amdgpu_exp_hw_support = 0;
-+int amdgpu_dal = 1;
- int amdgpu_sched_jobs = 32;
- int amdgpu_sched_hw_submission = 2;
- int amdgpu_powerplay = -1;
-@@ -149,6 +150,9 @@ module_param_named(vm_debug, amdgpu_vm_debug, int, 0644);
- MODULE_PARM_DESC(exp_hw_support, "experimental hw support (1 = enable, 0 = disable (default))");
- module_param_named(exp_hw_support, amdgpu_exp_hw_support, int, 0444);
-
-+MODULE_PARM_DESC(dal, "DAL display driver (1 = enable (default), 0 = disable)");
-+module_param_named(dal, amdgpu_dal, int, 0444);
-+
- MODULE_PARM_DESC(sched_jobs, "the max number of jobs supported in the sw queue (default 32)");
- module_param_named(sched_jobs, amdgpu_sched_jobs, int, 0444);
-
-diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c
-index 9191467..e694c99 100644
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c
-@@ -42,11 +42,6 @@
- this contains a helper + a amdgpu fb
- the helper contains a pointer to amdgpu framebuffer baseclass.
- */
--struct amdgpu_fbdev {
-- struct drm_fb_helper helper;
-- struct amdgpu_framebuffer rfb;
-- struct amdgpu_device *adev;
--};
-
- static struct fb_ops amdgpufb_ops = {
- .owner = THIS_MODULE,
-diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
-index 9266c7b..4fe38d7 100644
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
-@@ -36,6 +36,10 @@
-
- #include <linux/pm_runtime.h>
-
-+#ifdef CONFIG_DRM_AMD_DAL
-+#include "amdgpu_dm_irq.h"
-+#endif
-+
- #define AMDGPU_WAIT_IDLE_TIMEOUT 200
-
- /*
-@@ -232,7 +236,12 @@ int amdgpu_irq_init(struct amdgpu_device *adev)
- }
- }
-
-- INIT_WORK(&adev->hotplug_work, amdgpu_hotplug_work_func);
-+ if (!amdgpu_has_dal_support(adev)) {
-+ /* pre DCE11 */
-+ INIT_WORK(&adev->hotplug_work,
-+ amdgpu_hotplug_work_func);
-+ }
-+
- INIT_WORK(&adev->reset_work, amdgpu_irq_reset_work_func);
-
- adev->irq.installed = true;
-diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h
-index 81bd964..d7b9c93 100644
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h
-@@ -37,9 +37,12 @@
- #include <drm/drm_crtc_helper.h>
- #include <drm/drm_fb_helper.h>
- #include <drm/drm_plane_helper.h>
-+#include <drm/drm_fb_helper.h>
- #include <linux/i2c.h>
- #include <linux/i2c-algo-bit.h>
-
-+#include <drm/drm_dp_mst_helper.h>
-+
- struct amdgpu_bo;
- struct amdgpu_device;
- struct amdgpu_encoder;
-@@ -305,6 +308,18 @@ struct amdgpu_display_funcs {
- struct amdgpu_mode_mc_save *save);
- };
-
-+struct amdgpu_framebuffer {
-+ struct drm_framebuffer base;
-+ struct drm_gem_object *obj;
-+};
-+
-+struct amdgpu_fbdev {
-+ struct drm_fb_helper helper;
-+ struct amdgpu_framebuffer rfb;
-+ struct list_head fbdev_list;
-+ struct amdgpu_device *adev;
-+};
-+
- struct amdgpu_mode_info {
- struct atom_context *atom_context;
- struct card_info *atom_card_info;
-@@ -409,6 +424,9 @@ struct amdgpu_crtc {
- u32 wm_high;
- u32 lb_vblank_lead_lines;
- struct drm_display_mode hw_mode;
-+
-+ /* After Set Mode target will be non-NULL */
-+ struct dc_target *target;
- };
-
- struct amdgpu_encoder_atom_dig {
-@@ -498,6 +516,13 @@ enum amdgpu_connector_dither {
- AMDGPU_FMT_DITHER_ENABLE = 1,
- };
-
-+struct amdgpu_dm_dp_aux {
-+ struct drm_dp_aux aux;
-+ uint32_t link_index;
-+};
-+
-+#define TO_DM_AUX(x) container_of((x), struct amdgpu_dm_dp_aux, aux)
-+
- struct amdgpu_connector {
- struct drm_connector base;
- uint32_t connector_id;
-@@ -509,6 +534,12 @@ struct amdgpu_connector {
- /* we need to mind the EDID between detect
- and get modes due to analog/digital/tvencoder */
- struct edid *edid;
-+ /* number of modes generated from EDID at 'dc_sink' */
-+ int num_modes;
-+ /* The 'old' sink - before an HPD.
-+ * The 'current' sink is in dc_link->sink. */
-+ const struct dc_sink *dc_sink;
-+ const struct dc_link *dc_link;
- void *con_priv;
- bool dac_load_detect;
- bool detected_by_load; /* if the connection status was determined by load */
-@@ -519,11 +550,25 @@ struct amdgpu_connector {
- enum amdgpu_connector_audio audio;
- enum amdgpu_connector_dither dither;
- unsigned pixelclock_for_modeset;
-+
-+ struct drm_dp_mst_topology_mgr mst_mgr;
-+ struct amdgpu_dm_dp_aux dm_dp_aux;
-+ struct drm_dp_mst_port *port;
-+ struct amdgpu_connector *mst_port;
-+ bool is_mst_connector;
-+ struct amdgpu_encoder *mst_encoder;
- };
-
--struct amdgpu_framebuffer {
-- struct drm_framebuffer base;
-- struct drm_gem_object *obj;
-+/* TODO: start to use this struct and remove same field from base one */
-+struct amdgpu_mst_connector {
-+ struct amdgpu_connector base;
-+
-+ struct drm_dp_mst_topology_mgr mst_mgr;
-+ struct amdgpu_dm_dp_aux dm_dp_aux;
-+ struct drm_dp_mst_port *port;
-+ struct amdgpu_connector *mst_port;
-+ bool is_mst_connector;
-+ struct amdgpu_encoder *mst_encoder;
- };
-
- #define ENCODER_MODE_IS_DP(em) (((em) == ATOM_ENCODER_MODE_DP) || \
-diff --git a/drivers/gpu/drm/amd/amdgpu/vi.c b/drivers/gpu/drm/amd/amdgpu/vi.c
-index ddbb63a..c3b5ed6 100644
---- a/drivers/gpu/drm/amd/amdgpu/vi.c
-+++ b/drivers/gpu/drm/amd/amdgpu/vi.c
-@@ -73,10 +73,11 @@
- #include "uvd_v5_0.h"
- #include "uvd_v6_0.h"
- #include "vce_v3_0.h"
--#include "amdgpu_powerplay.h"
- #if defined(CONFIG_DRM_AMD_ACP)
- #include "amdgpu_acp.h"
- #endif
-+#include "amdgpu_dm.h"
-+#include "amdgpu_powerplay.h"
-
- /*
- * Indirect registers accessor
-@@ -984,6 +985,89 @@ static const struct amdgpu_ip_block_version cz_ip_blocks[] =
- #endif
- };
-
-+/*
-+ * This is temporary. After we've gone through full testing with
-+ * DAL we want to remove dce_v11
-+ */
-+#if defined(CONFIG_DRM_AMD_DAL)
-+static const struct amdgpu_ip_block_version cz_ip_blocks_dal[] =
-+{
-+ /* ORDER MATTERS! */
-+ {
-+ .type = AMD_IP_BLOCK_TYPE_COMMON,
-+ .major = 2,
-+ .minor = 0,
-+ .rev = 0,
-+ .funcs = &vi_common_ip_funcs,
-+ },
-+ {
-+ .type = AMD_IP_BLOCK_TYPE_GMC,
-+ .major = 8,
-+ .minor = 0,
-+ .rev = 0,
-+ .funcs = &gmc_v8_0_ip_funcs,
-+ },
-+ {
-+ .type = AMD_IP_BLOCK_TYPE_IH,
-+ .major = 3,
-+ .minor = 0,
-+ .rev = 0,
-+ .funcs = &cz_ih_ip_funcs,
-+ },
-+ {
-+ .type = AMD_IP_BLOCK_TYPE_SMC,
-+ .major = 8,
-+ .minor = 0,
-+ .rev = 0,
-+ .funcs = &amdgpu_pp_ip_funcs,
-+ },
-+ {
-+ .type = AMD_IP_BLOCK_TYPE_DCE,
-+ .major = 11,
-+ .minor = 0,
-+ .rev = 0,
-+ .funcs = &amdgpu_dm_funcs,
-+ },
-+ {
-+ .type = AMD_IP_BLOCK_TYPE_GFX,
-+ .major = 8,
-+ .minor = 0,
-+ .rev = 0,
-+ .funcs = &gfx_v8_0_ip_funcs,
-+ },
-+ {
-+ .type = AMD_IP_BLOCK_TYPE_SDMA,
-+ .major = 3,
-+ .minor = 0,
-+ .rev = 0,
-+ .funcs = &sdma_v3_0_ip_funcs,
-+ },
-+ {
-+ .type = AMD_IP_BLOCK_TYPE_UVD,
-+ .major = 6,
-+ .minor = 0,
-+ .rev = 0,
-+ .funcs = &uvd_v6_0_ip_funcs,
-+ },
-+ {
-+ .type = AMD_IP_BLOCK_TYPE_VCE,
-+ .major = 3,
-+ .minor = 0,
-+ .rev = 0,
-+ .funcs = &vce_v3_0_ip_funcs,
-+ },
-+#if defined(CONFIG_DRM_AMD_ACP)
-+ {
-+ .type = AMD_IP_BLOCK_TYPE_ACP,
-+ .major = 2,
-+ .minor = 2,
-+ .rev = 0,
-+ .funcs = &acp_ip_funcs,
-+ },
-+#endif
-+};
-+#endif
-+
- int vi_set_ip_blocks(struct amdgpu_device *adev)
- {
- switch (adev->asic_type) {
-@@ -1001,8 +1085,18 @@ int vi_set_ip_blocks(struct amdgpu_device *adev)
- break;
- case CHIP_CARRIZO:
- case CHIP_STONEY:
-+#if defined(CONFIG_DRM_AMD_DAL)
-+ if (amdgpu_dal && amdgpu_device_has_dal_support(adev)) {
-+ adev->ip_blocks = cz_ip_blocks_dal;
-+ adev->num_ip_blocks = ARRAY_SIZE(cz_ip_blocks_dal);
-+ } else {
-+ adev->ip_blocks = cz_ip_blocks;
-+ adev->num_ip_blocks = ARRAY_SIZE(cz_ip_blocks);
-+ }
-+#else
- adev->ip_blocks = cz_ip_blocks;
- adev->num_ip_blocks = ARRAY_SIZE(cz_ip_blocks);
-+#endif
- break;
- default:
- /* FIXME: not supported yet */
---
-2.7.4
-