This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

SC and SD states in case of ReadNoSnoop transactions

Hi All,

This question is regarding "ReadNoSnoop" transaction of AMBA- ACE protocol.

If "ReadNoSnoop" transaction is used in a region of memory that is not shareable with other masters, then how can the cache line have have "Shared Clean" or "Shared Dirty" state as its starting state for "ReadNoSnoop" transaction?

Please have a look at the table C4-2 "Other permitted ReadNoSnoop cache line state changes" on page no. C4-197 in ACE SPEC Document "ARM IHI 0022E".

  • Firstly, these line transitions starting from a Shared state are the 'Permitted' transitions, not the 'Expected' ones.  A 'Permitted' usage is legal with regards to maintaining coherency, but is not expected or efficient.  In this case, it is not expected that a master would issue a ReadNoSnoop for line it already holds as there would be no benefit, but this would not create a functional problem.

    The reason you may start in a Shared state is that any line that is held in a Unique state can be downgraded to Shared at any time.  So a line that is held as UniqueDirty could be downgraded by the master to SharedDirty.  There's probably not a good reason to do this in non-shareable memory, but it is legal and will not break data coherency and so the Specification allows it.

    There is then no reason for the Specification to prevent a master from issuing a ReadNoSnoop to non-shareable memory if it has started the line in a Shared state.  Again, this won't break coherency or cause any other kind of functional issue and so it is permissible.