Skip to contentSkip to conversation

ARM: datacache always disabled when RAM extends to 0xFFFFFFFF

PATCH New Jaccon Bastiaansen 2 participants 2 messages Aug 27, 2014 Arm (32-bit)

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 ARM: datacache always disabled when RAM extends to 0xFFFFFFFF

The dram_bank_mmu_setup() function contains a loop to configure the data caching policy for each 1 Mbyte page of the RAM memory range. When RAM extends to 0xFFFFFFFF, the RAM start address + the RAM size will equal 2^32. But because the RAM start address and RAM size are unsigned longs, the result of this addition is zero. The loop is therefore not executed and the datacache is effectively disabled.

---
 arch/arm/lib/cache-cp15.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm/lib/cache-cp15.c +1 -1
index 5fdfdbf..dcd881f 100644
@@ -69,7 +69,7 @@ __weak void dram_bank_mmu_setup(int bank)
 
 	debug("%s: bank: %d\n", __func__, bank);
 	for (i = bd->bi_dram[bank].start >> 20;
-	     i < (bd->bi_dram[bank].start + bd->bi_dram[bank].size) >> 20;
+	     i < ((u64)bd->bi_dram[bank].start + (u64)bd->bi_dram[bank].size) >> 20;
 	     i++) {
 #if defined(CONFIG_SYS_ARM_CACHE_WRITETHROUGH)
 		set_section_dcache(i, DCACHE_WRITETHROUGH);
Signature · 1 line
1.7.9.5
#1 lore raw

PATCH 1/1 ARM: datacache always disabled when RAM extends to 0xFFFFFFFF

Quoted 8 lines · Jaccon Bastiaansen

The dram_bank_mmu_setup() function contains a loop to configure the data caching policy for each 1 Mbyte page of the RAM memory range. When RAM extends to 0xFFFFFFFF, the RAM start address + the RAM size will equal 2^32. But because the RAM start address and RAM size are unsigned longs, the result of this addition is zero. The loop is therefore not executed and the datacache is effectively disabled.

Yeah, I sent similar patch [1] long ago. Albert, care to pick it please ?

[1] http://lists.denx.de/pipermail/u-boot/2014-August/185254.html

Best regards,
Marek Vasut