The driver calls ioremap() on the HGA video memory at 0xb0000 without
first reserving the physical address range. This leaves the kernel
resource tree incomplete and can cause silent conflicts with other
drivers claiming the same range.
Add a devm_request_mem_region() call before ioremap() in
hga_card_detect() to reserve the memory region.
Signed-off-by: Hardik Phalet <hardik.phalet@pm.me>
Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
Signed-off-by: Helge Deller <deller@gmx.de>
spin_unlock_irqrestore(&hga_reg_lock, flags);
}
-static int hga_card_detect(void)
+static int hga_card_detect(struct platform_device *pdev)
{
int count = 0;
void __iomem *p, *q;
hga_vram_len = 0x08000;
+ if (!devm_request_mem_region(&pdev->dev, 0xb0000, hga_vram_len, "hgafb")) {
+ dev_err(&pdev->dev, "cannot reserve video memory at 0xb0000\n");
+ return -EBUSY;
+ }
+
hga_vram = ioremap(0xb0000, hga_vram_len);
if (!hga_vram)
return -ENOMEM;
struct fb_info *info;
int ret;
- ret = hga_card_detect();
+ ret = hga_card_detect(pdev);
if (ret)
return ret;