]> git.kernelconcepts.de Git - karo-tx-redboot.git/blobdiff - packages/hal/arm/mx53/karo/v1_0/include/plf_mmap.h
RedBoot TX53 Release 2012-02-15
[karo-tx-redboot.git] / packages / hal / arm / mx53 / karo / v1_0 / include / plf_mmap.h
index 6dc8ea31c6879edd6929ef3d3e00cf5815a17615..eadb89a4277cd186e35a0a176b39a3a8d90aa871 100644 (file)
@@ -68,19 +68,19 @@ CYG_MACRO_END
 
 static unsigned long __inline__ hal_virt_to_phy(unsigned long virt)
 {
-       if (((virt & 0xF0000000) == CSD0_BASE_ADDR) ||
-               ((virt & 0xF0000000) == UNCACHED_RAM_BASE_VIRT)) {
-               virt &= ~0xF0000000;
+       if (((virt & 0xf0000000) >= CSD0_BASE_ADDR) &&
+                       ((virt & 0xf0000000) < CSD0_BASE_ADDR + SDRAM_SIZE)) {
+               virt -= CSD0_BASE_ADDR;
+       } else if (((virt & 0xf0000000) >= UNCACHED_RAM_BASE_VIRT) &&
+                       ((virt & 0xf0000000) < UNCACHED_RAM_BASE_VIRT + SDRAM_SIZE)) {
+               virt -= UNCACHED_RAM_BASE_VIRT;
        }
-       if (virt < SDRAM_SIZE) {
-               return virt | (virt < RAM_BANK0_SIZE ? CSD0_BASE_ADDR : CSD1_BASE_ADDR);
+       if (virt < RAM_BANK0_SIZE) {
+               return virt + CSD0_BASE_ADDR;
+       } else if (virt < SDRAM_SIZE) {
+               return virt - RAM_BANK0_SIZE + CSD1_BASE_ADDR;
        }
-       if ((virt & 0xF0000000) == UNCACHED_RAM_BASE_VIRT) {
-          if (virt >= RAM_BANK0_SIZE) {
-                       virt = virt - CSD0_BASE_ADDR + CSD1_BASE_ADDR - RAM_BANK0_SIZE;
-               }
-       }
-       return virt;
+       return ~0;
 }
 
 /*
@@ -92,13 +92,16 @@ static unsigned long __inline__ hal_ioremap_nocache(unsigned long phy)
        /* 0xb0000000 .. (0xb0000000 + SDRAM_SIZE) is
         * uncacheable memory space which is mapped to SDRAM
         */
-       if ((phy & 0xF0000000) == CSD0_BASE_ADDR) {
-               phy = (phy - CSD0_BASE_ADDR) | UNCACHED_RAM_BASE_VIRT;
-       }
-       if ((phy & 0xF0000000) == CSD1_BASE_ADDR) {
-               phy = (phy - CSD1_BASE_ADDR + CSD0_BASE_ADDR + RAM_BANK0_SIZE) | UNCACHED_RAM_BASE_VIRT;
+       if (((phy & 0xF0000000) >= CSD0_BASE_ADDR) &&
+               ((phy & 0xF0000000) < CSD0_BASE_ADDR + RAM_BANK0_SIZE)) {
+               return (phy - CSD0_BASE_ADDR) + UNCACHED_RAM_BASE_VIRT;
+#ifdef RAM_BANK1_SIZE
+       } else if (((phy & 0xF0000000) >= CSD1_BASE_ADDR) &&
+               ((phy & 0xF0000000) < CSD1_BASE_ADDR + RAM_BANK1_SIZE)) {
+               return (phy - CSD1_BASE_ADDR + RAM_BANK0_SIZE) + UNCACHED_RAM_BASE_VIRT;
+#endif
        }
-       return phy;
+       return ~0;
 }
 
 #endif // CYGONCE_HAL_BOARD_PLATFORM_PLF_MMAP_H