提交 90820fd6 编写于 作者: K kong.kongxinwei 提交者: Xie XiuQi

drm: hibmc: fix vga UNF ras error for rebooting system

When rebooting this system, this vga will report unf bit error as follow:

[  OK  ] Reached target Unmount All Filesystems.
[  OK  ] Stopped Remount Root and Kernel File Systems.
[  OK  ] Reached target Shutdown.
[  OK  ] Reached target Final Step.
Starting Reboot...
[  OK  ] Stopped LVM2 metadata daemon.
NOTICE:  ####################################

NOTICE:  [PciRasInterruptHandle]:[385L] PcieRasTestInterruptHandler

NOTICE:  ####################################

NOTICE:  [PciRasInterruptHandle]:[398L] CPU0 PCIe RAS Check...

NOTICE:  [PciRasInterruptHandle]:[409L] Chip: 0x0, PCIe_CE_status  = 0x0
NOTICE:  [PciRasInterruptHandle]:[410L] Chip: 0x0, PCIe_UNF_status = 0x10000
NOTICE:  [PciRasInterruptHandle]:[411L] Chip: 0x0, PCIe_UF_status  = 0x0
NOTICE:  [PciRasInterruptHandle]:[426L] RP Error Source Identify = 0x800000
NOTICE:  [PciRasInterruptHandle]:[438L] ErrSrc Identify = (Bus:0x0) (Dev:0x10) (Func: 0x0)

NOTICE:  [PciRasInterruptHandle]:[457L]  DevSts = 0xa
NOTICE:  [PciRasInterruptHandle]:[458L]    UncErrSts = 0x100000
NOTICE:  [PciRasInterruptHandle]:[459L]      CorErrSts = 0x0
NOTICE:  [PciRasInterruptHandle]:[460L]        RootErrSts = 0x8000024
NOTICE:  ####################################

NOTICE:  Before Notify OS, Dump AER Error data.

Feature or Bugfix:Bugfix
Signed-off-by: Nallan.wang <allan.wang@siliconmotion.com>
Signed-off-by: NXinwei Kong <kong.kongxinwei@hisilicon.com>
Signed-off-by: Nkong.kongxinwei <kong.kongxinwei@hisilicon.com>
Reviewed-by: Nliudongdong <liudongdong3@huawei.com>
Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
上级 6459a1e3
......@@ -70,7 +70,7 @@ static struct drm_driver hibmc_driver = {
.irq_handler = hibmc_drm_interrupt,
};
static int __maybe_unused hibmc_pm_suspend(struct device *dev)
static int hibmc_pm_suspend(struct device *dev)
{
struct pci_dev *pdev = to_pci_dev(dev);
struct drm_device *drm_dev = pci_get_drvdata(pdev);
......@@ -88,7 +88,7 @@ static int __maybe_unused hibmc_pm_suspend(struct device *dev)
return 0;
}
static int __maybe_unused hibmc_pm_resume(struct device *dev)
static int hibmc_pm_resume(struct device *dev)
{
struct pci_dev *pdev = to_pci_dev(dev);
struct drm_device *drm_dev = pci_get_drvdata(pdev);
......@@ -115,7 +115,7 @@ static int hibmc_kms_init(struct hibmc_drm_private *priv)
priv->dev->mode_config.min_width = 0;
priv->dev->mode_config.min_height = 0;
priv->dev->mode_config.max_width = 1920;
priv->dev->mode_config.max_height = 1440;
priv->dev->mode_config.max_height = 1200;
priv->dev->mode_config.fb_base = priv->fb_base;
priv->dev->mode_config.preferred_depth = 24;
......@@ -138,6 +138,21 @@ static int hibmc_kms_init(struct hibmc_drm_private *priv)
return 0;
}
static void hibmc_hw_unmap(struct hibmc_drm_private *priv)
{
struct drm_device *dev = priv->dev;
if (priv->mmio) {
devm_iounmap(dev->dev, priv->mmio);
priv->mmio = NULL;
}
if (priv->fb_map) {
devm_iounmap(dev->dev, priv->fb_map);
priv->fb_map = NULL;
}
}
static void hibmc_kms_fini(struct hibmc_drm_private *priv)
{
if (priv->mode_config_initialized) {
......@@ -284,6 +299,7 @@ static int hibmc_unload(struct drm_device *dev)
hibmc_kms_fini(priv);
hibmc_mm_fini(priv);
hibmc_hw_unmap(priv);
dev->dev_private = NULL;
return 0;
}
......@@ -398,9 +414,15 @@ static void hibmc_pci_remove(struct pci_dev *pdev)
drm_dev_unregister(dev);
hibmc_unload(dev);
pci_disable_device(pdev);
drm_dev_unref(dev);
}
static void hibmc_pci_shutdown(struct pci_dev *pdev)
{
hibmc_pci_remove(pdev);
}
static struct pci_device_id hibmc_pci_table[] = {
{0x19e5, 0x1711, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
{0,}
......@@ -411,6 +433,7 @@ static struct pci_driver hibmc_pci_driver = {
.id_table = hibmc_pci_table,
.probe = hibmc_pci_probe,
.remove = hibmc_pci_remove,
.shutdown = hibmc_pci_shutdown,
.driver.pm = &hibmc_pm_ops,
};
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册