|
56 | 56 | * Higher density PSRAM (ESP-PSRAM64H/etc.) works as well, but may be too |
57 | 57 | large to effectively use with UMM. Only 256K is available vial malloc, |
58 | 58 | but addresses above 256K do work and can be used for fixed buffers. |
59 | | -
|
| 59 | +
|
60 | 60 | */ |
61 | 61 |
|
62 | 62 | #ifdef MMU_EXTERNAL_HEAP |
|
71 | 71 |
|
72 | 72 | extern"C" { |
73 | 73 |
|
| 74 | +#defineVM_OFFSET_MASK0x007fffffu |
| 75 | + |
74 | 76 | #defineSHORT_MASK0x000008u |
75 | 77 | #defineLOAD_MASK0x00f00fu |
76 | 78 | #defineL8UI_MATCH0x000002u |
@@ -324,21 +326,21 @@ static IRAM_ATTR void loadstore_exception_handler(struct __exception_frame *ef, |
324 | 326 | uint32_t val = ef->a_reg[regno]; |
325 | 327 | uint32_t what = insn & STORE_MASK; |
326 | 328 | if (what == S8I_MATCH) { |
327 | | -spi_ramwrite(spi1, excvaddr &0x1ffff,8-1, val); |
| 329 | +spi_ramwrite(spi1, excvaddr &VM_OFFSET_MASK,8-1, val); |
328 | 330 | }elseif (what == S16I_MATCH) { |
329 | | -spi_ramwrite(spi1, excvaddr &0x1ffff,16-1, val); |
| 331 | +spi_ramwrite(spi1, excvaddr &VM_OFFSET_MASK,16-1, val); |
330 | 332 | }else { |
331 | | -spi_ramwrite(spi1, excvaddr &0x1ffff,32-1, val); |
| 333 | +spi_ramwrite(spi1, excvaddr &VM_OFFSET_MASK,32-1, val); |
332 | 334 | } |
333 | 335 | }else { |
334 | 336 | if (insn & L32_MASK) { |
335 | | - ef->a_reg[regno] =spi_ramread(spi1, excvaddr &0x1ffff,32-1); |
| 337 | + ef->a_reg[regno] =spi_ramread(spi1, excvaddr &VM_OFFSET_MASK,32-1); |
336 | 338 | }elseif (insn & L16_MASK) { |
337 | | - ef->a_reg[regno] =spi_ramread(spi1, excvaddr &0x1ffff,16-1); |
| 339 | + ef->a_reg[regno] =spi_ramread(spi1, excvaddr &VM_OFFSET_MASK,16-1); |
338 | 340 | if ((insn & SIGNED_MASK ) && (ef->a_reg[regno] &0x8000)) |
339 | 341 | ef->a_reg[regno] |=0xffff0000; |
340 | 342 | }else { |
341 | | - ef->a_reg[regno] =spi_ramread(spi1, excvaddr &0x1ffff,8-1); |
| 343 | + ef->a_reg[regno] =spi_ramread(spi1, excvaddr &VM_OFFSET_MASK,8-1); |
342 | 344 | } |
343 | 345 | } |
344 | 346 | } |
@@ -389,6 +391,11 @@ void install_vm_exception_handler() |
389 | 391 | __vm_cache_line[cache_ways -1].next =NULL; |
390 | 392 | } |
391 | 393 |
|
| 394 | +// Our umm_malloc configuration can only support a maximum of 256K RAM. A |
| 395 | +// change would affect the block size of all heaps, and a larger block size |
| 396 | +// would result in wasted space in the smaller heaps. |
| 397 | +static_assert(MMU_EXTERNAL_HEAP <=256,"Heap size must not exceed 256K"); |
| 398 | + |
392 | 399 | // Hook into memory manager |
393 | 400 | umm_init_vm( (void *)0x10000000, MMU_EXTERNAL_HEAP *1024); |
394 | 401 | } |
|