SMP Cache Coherency on i.MX6

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

SMP Cache Coherency on i.MX6

1,060 Views
jonathanankers
Contributor I

Hi,

I've been having problems with the cache coherency on the i.MX6 SABRE Lite.

As I understand it, providing that I set up the MMU/caches/SCU/SMP bit correctly, I should not have to perform any explicit cache operations in order for the cached memory to be kept coherent between multiple cores.

I writing a custom bootloader, and the issue that I'm having is that sometimes when I power the board (at least once in every 10 runs), the cache coherency seems to not be working properly, but other times it appears to be working fine. In the cases where it is not working, I can attach a debugger and see that the memory is not coherent between the cores.

My boot sequence is as follows (in pseudocode) -

boot_entry_point:
if (core 0) [invalidate whole SCU; Enable SCU]
disable dcache
disable icache

disable mmu
enable SMP (including setting ACTLR.FW bit)
invalidate TLB
invalidate dcache
invalidate icache
enable mmu
enable dcache
enable icache
if (core 0) [GOTO core0_specific]
else [GOTO coreN_specific]

core0_specific:
invalidate l2cache
enable l2cache
start cores 1..N at address boot_entry_point
branch to main


coreN_specific:
branch to main

For the coherent memory areas, I have the MMU Map setup as Shared, Inner and Outer Write Back Write Allocate.

I have also implemented any relevant Errata from the i.MX6 Dual/Quad Chip Errata (e.g. ERR004325), though I believe that the coherency doesn't work too often for it to be down to a chip Errata.

I have a Zynq 7000 board (ARM A9 Dual Core) running very similar code that does not show any problems. Is there any reason why the cache coherency would not work as I expect on the i.MX6 SABRE Lite?

Regards,

Jon

Labels (2)
0 Kudos
1 Reply

672 Views
Yuri
NXP Employee
NXP Employee

 Hello,

  Please check design, using the recent Design Checklist in Hardware Development Guide for i.MX 6.

 

http://cache.nxp.com/assets/documents/data/en/user-guides/IMX6DQ6SDLHDG.pdf

 

In particular:

 - VDD_SOC_IN requires a 66 uF bulk capacitance.

 - Minimum 85mohm external ESR is required for VDD_HIGH_CAP.

  Refer to EB814 for details.

 

http://cache.nxp.com/files/32bit/doc/eng_bulletin/EB814.pdf

 

 You may create request (ticket) about some non-published i.MX6 cache implementation details.

Support|NXP 

Have a great day,

Yuri

 

------------------------------------------------------------------------------

Note: If this post answers your question, please click the Correct Answer

button. Thank you!

0 Kudos