Thomas Zimmermann ebf85e
From 36ed7e97e260e9b7abf30121b3f58f2c83bf35c1 Mon Sep 17 00:00:00 2001
Thomas Zimmermann ebf85e
From: Jian Jun Chen <jian.jun.chen@intel.com>
Thomas Zimmermann ebf85e
Date: Wed, 19 Jul 2017 12:18:39 +0800
Thomas Zimmermann ebf85e
Subject: [PATCH] drm/i915/gvt: Remove duplicated MMIO entries
Thomas Zimmermann ebf85e
Git-commit: 36ed7e97e260e9b7abf30121b3f58f2c83bf35c1
Thomas Zimmermann ebf85e
Patch-mainline: v4.14-rc1
Thomas Zimmermann ebf85e
References: FATE#322643 bsc#1055900
Thomas Zimmermann ebf85e
Thomas Zimmermann ebf85e
Remove duplicated MMIO entries in the tracked MMIO list. -EEXIST
Thomas Zimmermann ebf85e
is returned if duplicated MMIO entries are found when new MMIO
Thomas Zimmermann ebf85e
entry is added.
Thomas Zimmermann ebf85e
Thomas Zimmermann ebf85e
V2: 
Thomas Zimmermann ebf85e
- Use WARN(1, ...) for more verbose message. (Zhenyu)
Thomas Zimmermann ebf85e
Thomas Zimmermann ebf85e
Signed-off-by: Jian Jun Chen <jian.jun.chen@intel.com>
Thomas Zimmermann ebf85e
Cc: Zhi Wang <zhi.a.wang@intel.com>
Thomas Zimmermann ebf85e
Cc: Changbin Du <changbin.du@intel.com>
Thomas Zimmermann ebf85e
Cc: Zhenyu Wang <zhenyuw@linux.intel.com>
Thomas Zimmermann ebf85e
Reviewed-by: Yulei Zhang <yulei.zhang@intel.com>
Thomas Zimmermann ebf85e
Signed-off-by: Zhenyu Wang <zhenyuw@linux.intel.com>
Thomas Zimmermann ebf85e
Acked-by: Takashi Iwai <tiwai@suse.de>
Thomas Zimmermann ebf85e
Thomas Zimmermann ebf85e
---
Thomas Zimmermann ebf85e
 drivers/gpu/drm/i915/gvt/handlers.c |   18 ++++++++++--------
Thomas Zimmermann ebf85e
 1 file changed, 10 insertions(+), 8 deletions(-)
Thomas Zimmermann ebf85e
Thomas Zimmermann ebf85e
--- a/drivers/gpu/drm/i915/gvt/handlers.c
Thomas Zimmermann ebf85e
+++ b/drivers/gpu/drm/i915/gvt/handlers.c
Thomas Zimmermann ebf85e
@@ -113,9 +113,17 @@ static int new_mmio_info(struct intel_gv
Thomas Zimmermann ebf85e
 
Thomas Zimmermann ebf85e
 		info->offset = i;
Thomas Zimmermann ebf85e
 		p = find_mmio_info(gvt, info->offset);
Thomas Zimmermann ebf85e
-		if (p)
Thomas Zimmermann ebf85e
-			gvt_err("dup mmio definition offset %x\n",
Thomas Zimmermann ebf85e
+		if (p) {
Thomas Zimmermann ebf85e
+			WARN(1, "dup mmio definition offset %x\n",
Thomas Zimmermann ebf85e
 				info->offset);
Thomas Zimmermann ebf85e
+			kfree(info);
Thomas Zimmermann ebf85e
+
Thomas Zimmermann ebf85e
+			/* We return -EEXIST here to make GVT-g load fail.
Thomas Zimmermann ebf85e
+			 * So duplicated MMIO can be found as soon as
Thomas Zimmermann ebf85e
+			 * possible.
Thomas Zimmermann ebf85e
+			 */
Thomas Zimmermann ebf85e
+			return -EEXIST;
Thomas Zimmermann ebf85e
+		}
Thomas Zimmermann ebf85e
 
Thomas Zimmermann ebf85e
 		info->ro_mask = ro_mask;
Thomas Zimmermann ebf85e
 		info->device = device;
Thomas Zimmermann ebf85e
@@ -2583,7 +2591,6 @@ static int init_broadwell_mmio_info(stru
Thomas Zimmermann ebf85e
 	MMIO_F(0x24d0, 48, F_CMD_ACCESS, 0, 0, D_BDW_PLUS,
Thomas Zimmermann ebf85e
 		NULL, force_nonpriv_write);
Thomas Zimmermann ebf85e
 
Thomas Zimmermann ebf85e
-	MMIO_D(0x22040, D_BDW_PLUS);
Thomas Zimmermann ebf85e
 	MMIO_D(0x44484, D_BDW_PLUS);
Thomas Zimmermann ebf85e
 	MMIO_D(0x4448c, D_BDW_PLUS);
Thomas Zimmermann ebf85e
 
Thomas Zimmermann ebf85e
@@ -2641,7 +2648,6 @@ static int init_skl_mmio_info(struct int
Thomas Zimmermann ebf85e
 	MMIO_D(HSW_PWR_WELL_BIOS, D_SKL_PLUS);
Thomas Zimmermann ebf85e
 	MMIO_DH(HSW_PWR_WELL_DRIVER, D_SKL_PLUS, NULL,
Thomas Zimmermann ebf85e
 						skl_power_well_ctl_write);
Thomas Zimmermann ebf85e
-	MMIO_DH(GEN6_PCODE_MAILBOX, D_SKL_PLUS, NULL, mailbox_write);
Thomas Zimmermann ebf85e
 
Thomas Zimmermann ebf85e
 	MMIO_D(0xa210, D_SKL_PLUS);
Thomas Zimmermann ebf85e
 	MMIO_D(GEN9_MEDIA_PG_IDLE_HYSTERESIS, D_SKL_PLUS);
Thomas Zimmermann ebf85e
@@ -2833,7 +2839,6 @@ static int init_skl_mmio_info(struct int
Thomas Zimmermann ebf85e
 	MMIO_D(0x320f0, D_SKL | D_KBL);
Thomas Zimmermann ebf85e
 
Thomas Zimmermann ebf85e
 	MMIO_DFH(_REG_VCS2_EXCC, D_SKL_PLUS, F_CMD_ACCESS, NULL, NULL);
Thomas Zimmermann ebf85e
-	MMIO_DFH(_REG_VECS_EXCC, D_SKL_PLUS, F_CMD_ACCESS, NULL, NULL);
Thomas Zimmermann ebf85e
 	MMIO_D(0x70034, D_SKL_PLUS);
Thomas Zimmermann ebf85e
 	MMIO_D(0x71034, D_SKL_PLUS);
Thomas Zimmermann ebf85e
 	MMIO_D(0x72034, D_SKL_PLUS);
Thomas Zimmermann ebf85e
@@ -2851,10 +2856,7 @@ static int init_skl_mmio_info(struct int
Thomas Zimmermann ebf85e
 		NULL, NULL);
Thomas Zimmermann ebf85e
 
Thomas Zimmermann ebf85e
 	MMIO_D(0x4ab8, D_KBL);
Thomas Zimmermann ebf85e
-	MMIO_D(0x940c, D_SKL_PLUS);
Thomas Zimmermann ebf85e
 	MMIO_D(0x2248, D_SKL_PLUS | D_KBL);
Thomas Zimmermann ebf85e
-	MMIO_D(0x4ab0, D_SKL | D_KBL);
Thomas Zimmermann ebf85e
-	MMIO_D(0x20d4, D_SKL | D_KBL);
Thomas Zimmermann ebf85e
 
Thomas Zimmermann ebf85e
 	return 0;
Thomas Zimmermann ebf85e
 }