Claim the memory resource associated with the Cyber2000 SPARC MMIO
aperture before accessing it.

This is part of the effort to request memory regions in fbdev drivers.

Signed-off-by: Chintan Patel <[email protected]>
---
 drivers/video/fbdev/cyber2000fb.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/drivers/video/fbdev/cyber2000fb.c 
b/drivers/video/fbdev/cyber2000fb.c
index 2d12f8e96c7e..16ed56180ce2 100644
--- a/drivers/video/fbdev/cyber2000fb.c
+++ b/drivers/video/fbdev/cyber2000fb.c
@@ -47,6 +47,7 @@
 #include <linux/io.h>
 #include <linux/i2c.h>
 #include <linux/i2c-algo-bit.h>
+#include <linux/ioport.h>
 
 #ifdef __arm__
 #include <asm/mach-types.h>
@@ -1620,9 +1621,14 @@ static int cyberpro_pci_enable_mmio(struct cfb_info *cfb)
         */
        unsigned char __iomem *iop;
 
+       if (!request_mem_region(0x3000000, 0x5000, "cyber2000fb iop")) {
+               printk(KERN_ERR "iga5000: cannot reserve I/O area 0x3000000\n");
+               return -EBUSY;
+       }
        iop = ioremap(0x3000000, 0x5000);
        if (iop == NULL) {
                printk(KERN_ERR "iga5000: cannot map I/O\n");
+               release_mem_region(0x3000000, 0x5000);
                return -ENOMEM;
        }
 
@@ -1633,6 +1639,7 @@ static int cyberpro_pci_enable_mmio(struct cfb_info *cfb)
        writeb(EXT_BIU_MISC_LIN_ENABLE, iop + 0x3cf);
 
        iounmap(iop);
+       release_mem_region(0x3000000, 0x5000);
 #else
        /*
         * Most other machine types are "normal", so
-- 
2.43.0

Reply via email to