From 3dd84f7807414970737299c66c42587797e7d2a1 Mon Sep 17 00:00:00 2001 From: Baihan Li Date: Wed, 17 Dec 2025 15:07:15 +0800 Subject: [PATCH] drm/hisilicon/hibmc: fix PCIe 64-bit bar support driver inclusion category: bugfix bugzilla: https://gitee.com/openeuler/kernel/issues/IDDLQ2 CVE: NA ----------------------------------------------------------------------- To support 64-bit bar in PCIe bar mapping for hibmc-drm, add 64-bit bar check and change the bar num for 64-bit situation, because it will occupy two consecutive BARs. Fixes: 5e0df3a08f3d ("drm/hisilicon/hibmc: Add hisilicon hibmc drm master driver") Signed-off-by: Baihan Li --- drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c index 5059cbab354e..d0b85f41a17e 100644 --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c @@ -250,9 +250,19 @@ static int hibmc_hw_map(struct hibmc_drm_private *priv) struct drm_device *dev = &priv->dev; struct pci_dev *pdev = to_pci_dev(dev->dev); resource_size_t ioaddr, iosize; - - ioaddr = pci_resource_start(pdev, 1); - iosize = pci_resource_len(pdev, 1); + unsigned long flags; + unsigned long bar; + + flags = pci_resource_flags(pdev, 0); + if (flags & IORESOURCE_MEM_64) + bar = 2; /* 64-bit bar, change to bar2 */ + else if (flags & IORESOURCE_MEM) + bar = 1; + else + return -ENODEV; + + ioaddr = pci_resource_start(pdev, bar); + iosize = pci_resource_len(pdev, bar); priv->mmio = devm_ioremap(dev->dev, ioaddr, iosize); if (!priv->mmio) { drm_err(dev, "Cannot map mmio region\n"); -- Gitee