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

Memory attribute configuration in SMMU-v3

Hi,

I am currently working on enabling SMMU-v3 in hypervisor, I notice in SMMU-v3, there are several memory attribute configuration options.

1.  SMMU_CR1

a.  TABLE_SH for  Table access Shareability

b.  TABLE_OC for  Table access Outer Cacheability

c.  TABLE_IC for  Table access Inner Cancheability.

same configurations for queue access( QUEUE_SH,  QUEUE_OC,  QUEUE_IC)

  • I am not sure here table access by CPU or SMMU? and the cacheablity of which agent, the CPU or SMMU?
  • In linux smmu-v3 driver, it configures the SMMU_CR1 with code

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

    /* CR1 (table and queue memory attributes) */

    reg = (CR1_SH_ISH << CR1_TABLE_SH_SHIFT) |

          (CR1_CACHE_WB << CR1_TABLE_OC_SHIFT) |

          (CR1_CACHE_WB << CR1_TABLE_IC_SHIFT) |

          (CR1_SH_ISH << CR1_QUEUE_SH_SHIFT) |

          (CR1_CACHE_WB << CR1_QUEUE_OC_SHIFT) |

          (CR1_CACHE_WB << CR1_QUEUE_IC_SHIFT);

    writel_relaxed(reg, smmu->base + ARM_SMMU_CR1);

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

always configure the register with the dedicated value without thinking about  SMMU_IDR0  COHACC, bit [4]( Coherent access supported to translations, structures and queues.), if there is one SMMU with COHACC as 0, do not support Coherent access, it can only use non-cacheable memory, but the cr1 always configured with cacheablity, does the SMMU works properly?

2. STE

a.  [169:168] S2IR0 for  Inner region Cacheability for stage 2 translation table access.

b.  [171:170] S2OR0 for  Outer region Cacheability for stage 2 translation table access.

c.  [173:172] S2SH0 for  Shareability for stage 2 translation table access

  • the same question for stage2 ttb, the configure refers to cacheablity of which side (CPU or SMMU)?
  • In my hypervisor, SMMU use the stage 2 ttb created by CPU, should the configure the same shareablity and cacheablity? If SMMU do not support Coherent access, how to configure the bits?

 

thanks

Parents
  • I think this is probably more a driver question than a SMMU question.  What SMMU_IDR0.COHACC is reporting is whether the SMMU supports IO coherency for accessing queues and config structures.  What the ISH/OSH/.. fields are doing is software telling the SMMU what attributes to use for accessing different structures.

    If the SMMU supports coherent memory, then software might choose to take advantage of that.  Configuring the attributes used by the CPU and SMMU when each access the structures to exploit coherency.

    Or the SMMU might not support IO coherency for these accesses.  Or, the SMMU might support it, but software might specify attributes that don't exploit the support.  In either case, the SMMU can still access memory.  But it will be up to software to ensure coherency (e.g. by using cache ops).  The attributes software chooses for the queues and tables will impact what work is required to ensure coherency.

     

Reply
  • I think this is probably more a driver question than a SMMU question.  What SMMU_IDR0.COHACC is reporting is whether the SMMU supports IO coherency for accessing queues and config structures.  What the ISH/OSH/.. fields are doing is software telling the SMMU what attributes to use for accessing different structures.

    If the SMMU supports coherent memory, then software might choose to take advantage of that.  Configuring the attributes used by the CPU and SMMU when each access the structures to exploit coherency.

    Or the SMMU might not support IO coherency for these accesses.  Or, the SMMU might support it, but software might specify attributes that don't exploit the support.  In either case, the SMMU can still access memory.  But it will be up to software to ensure coherency (e.g. by using cache ops).  The attributes software chooses for the queues and tables will impact what work is required to ensure coherency.

     

Children