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]>
---
v3:
 - Use pr_err() instead of pci_err()
v2:
- Use pci_err() for error reporting instead of printk().

 drivers/video/fbdev/cyber2000fb.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/drivers/video/fbdev/cyber2000fb.c 
b/drivers/video/fbdev/cyber2000fb.c
index 2d12f8e96c7e..9fced6bf6ffd 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")) {
+               pr_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");
+               pr_err("iga5000: cannot map I/O area\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