diff --git a/drivers/net/ethernet/lantiq/cqm/falconmx/cqm_proc.c b/drivers/net/ethernet/lantiq/cqm/falconmx/cqm_proc.c
index 40d5708a3b44ab5b8eef9e64564caaf8a72a28cc..323bc1a7da1584c28d2a4605cf013a0f5529ccf2 100644
--- a/drivers/net/ethernet/lantiq/cqm/falconmx/cqm_proc.c
+++ b/drivers/net/ethernet/lantiq/cqm/falconmx/cqm_proc.c
@@ -125,7 +125,7 @@ uint64_t REG64(void *addr)
 
 	reg1 = cbm_r32(addr);
 	reg2 = cbm_r32(addr + 4);
-	readreg = (((u64)reg1) >> 32) + (u64)reg2;
+	readreg = (((u64)reg1) << 32) + (u64)reg2;
 	return readreg;
 }
 EXPORT_SYMBOL(REG64);
@@ -310,11 +310,11 @@ static ssize_t cqm_dma_desc_write(struct file *file, const char __user *buf,
 					PRINTK("Addr: %8p\n", addr);
 					reg64 = REG64(addr);
 					reg1 = (u32)(reg64 >> 32);
-					reg2 = (reg & 0xFFFFFFFF);
+					reg2 = (reg64 & 0xFFFFFFFF);
 
 					reg64 = REG64(addr1);
 					reg3 = (u32)(reg64 >> 32);
-					reg4 = (reg & 0xFFFFFFFF);
+					reg4 = (reg64 & 0xFFFFFFFF);
 					PRINTK("Val:  0x%08x%08x\n",
 					       reg1, reg2);
 					PRINTK("Name: DESC1_%d_IGP_%02d\n",
@@ -323,7 +323,7 @@ static ssize_t cqm_dma_desc_write(struct file *file, const char __user *buf,
 					       addr1);
 					reg64 = REG64(addr1);
 					reg3 = (u32)(reg64 >> 32);
-					reg4 = (reg & 0xFFFFFFFF);
+					reg4 = (reg64 & 0xFFFFFFFF);
 					PRINTK("Val:  0x%08x%08x\n",
 					       reg3, reg4);
 				}
@@ -347,11 +347,11 @@ static ssize_t cqm_dma_desc_write(struct file *file, const char __user *buf,
 				PRINTK("Addr: %8p\n", addr);
 				reg64 = REG64(addr);
 				reg1 = (u32)(reg64 >> 32);
-				reg2 = (reg & 0xFFFFFFFF);
+				reg2 = (reg64 & 0xFFFFFFFF);
 
 				reg64 = REG64(addr1);
 				reg3 = (u32)(reg64 >> 32);
-				reg4 = (reg & 0xFFFFFFFF);
+				reg4 = (reg64 & 0xFFFFFFFF);
 				PRINTK("Val:  0x%08x%08x\n", reg1, reg2);
 				PRINTK("Name: DESC1_0_EGP\n");
 				PRINTK("Addr: %8p\n", addr1);