From c32c304e7267ea60b674d576266d0d040efcc35c Mon Sep 17 00:00:00 2001
From: shiyongbang <shiyongbang@huawei.com>
Date: Mon, 8 Mar 2021 21:01:06 +0800
Subject: [PATCH] openEuler: gpu: hibmc: Fix stuck when switch GUI to text.

to #36078485

commit 4096b2f4156f286bacc1e413924e9390dd770f8b openEuler

gpu: hibmc: Fix stuck when switch GUI to text.

driver inclusion
category: bugfix
bugzilla: NA
CVE: NA

Add remove_conflicting_framebuffers function to fix stuck problem
when switch GUI to text during installation using the ISO file.

Signed-off-by: Shiyongbang <shiyongbang@huawei.com>
Reviewed-by: Wu yang <wuyang7@huawei.com>
Reviewed-by: Li dongming <lidongming5@huawei.com>
Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
Signed-off-by: Zheng Zengkai <zhengzengkai@huawei.com>
Signed-off-by: linsheng <linyan.lin@alibaba-inc.com>
Reviewed-by: Caspar Zhang <caspar@linux.alibaba.com>
Reviewed-by: Shile Zhang <shile.zhang@linux.alibaba.com>
---
 .../gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c    | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c
index b9a6643a6515..7be784a77efa 100644
--- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c
+++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c
@@ -55,6 +55,22 @@ irqreturn_t hibmc_drm_interrupt(int irq, void *arg)
 	return IRQ_HANDLED;
 }
 
+static void hibmc_remove_framebuffers(struct pci_dev *pdev)
+{
+	struct apertures_struct *ap;
+
+	ap = alloc_apertures(1);
+	if (!ap)
+		return;
+
+	ap->ranges[0].base = pci_resource_start(pdev, 0);
+	ap->ranges[0].size = pci_resource_len(pdev, 0);
+
+	drm_fb_helper_remove_conflicting_framebuffers(ap, "hibmcdrmfb", false);
+
+	kfree(ap);
+}
+
 static struct drm_driver hibmc_driver = {
 	.driver_features	= DRIVER_GEM | DRIVER_MODESET |
 				  DRIVER_ATOMIC | DRIVER_HAVE_IRQ,
@@ -367,6 +383,8 @@ int hibmc_load(struct drm_device *dev, unsigned long flags)
 static int hibmc_pci_probe(struct pci_dev *pdev,
 			   const struct pci_device_id *ent)
 {
+	hibmc_remove_framebuffers(pdev);
+
 	return drm_get_pci_dev(pdev, ent, &hibmc_driver);
 }
 
-- 
2.27.0

