--- src/nv.h.orig	2011-07-14 02:51:53.000000000 +0800
+++ src/nv.h	2012-05-10 18:15:51.000000000 +0800
@@ -364,6 +364,14 @@
              ((offset) >= (nv)->agp.address) &&                                \
              (((offset) + ((length)-1)) <= (nv)->agp.address + ((nv)->agp.size-1)))
 
+#define IS_REG_RANGE_WITHIN_MAPPING(nv, roffset, rlength, moffset, mlength)    \
+             (((moffset) <= ((nv)->regs->address + ((roffset) + (rlength)-1))) &&\
+             (((moffset) + (mlength)-1) >= ((nv)->regs->address + (roffset))))
+
+#define IS_BLACKLISTED_REG_OFFSET(nv, offset, length)                          \
+             ((IS_REG_RANGE_WITHIN_MAPPING(nv, 0x1000, 0x1000, offset, length)) ||\
+             (IS_REG_RANGE_WITHIN_MAPPING(nv, 0x700000, 0x100000, offset, length)))
+
 /* duplicated from nvos.h for external builds */
 #ifndef NVOS_AGP_CONFIG_DISABLE_AGP
 #  define NVOS_AGP_CONFIG_DISABLE_AGP (0x00000000)
--- src/nvidia_subr.c.orig	2012-05-10 18:09:01.000000000 +0800
+++ src/nvidia_subr.c	2012-05-10 18:13:41.000000000 +0800
@@ -1464,6 +1464,8 @@
     }
 
     if (IS_REG_OFFSET(nv, offset, PAGE_SIZE)) {
+        if (IS_BLACKLISTED_REG_OFFSET(nv, offset, PAGE_SIZE))
+             return -1;
         *physical = offset;
         return 0;
     }
