On 2020-07-01 19:47, Jon Hunter wrote:
On 01/07/2020 19:28, Krishna Reddy wrote:
+ - description: NVIDIA SoCs that use more than one "arm,mmu-500"
Hmm, there must be a better way to word that to express that it only applies to the sets of SMMUs that must be programmed identically, and not any other independent MMU-500s that might also happen to be in the same SoC.
Let me reword it to "NVIDIA SoCs that must program multiple MMU-500s identically".
+ items:
+ - enum:
+ - nvdia,tegra194-smmu
+ - const: arm,mmu-500
Is the fallback compatible appropriate here? If software treats this as a standard MMU-500 it will only program the first instance (because the second isn't presented as a separate MMU-500) - is there any way that isn't going to blow up?
When compatible is set to both nvidia,tegra194-smmu and arm,mmu-500, implementation override ensure that both instances are programmed. Isn't it? I am not sure I follow your comment fully.
The problem is, if for some reason someone had a Tegra194, but only set
the compatible string to 'arm,mmu-500' it would assume that it was a
normal arm,mmu-500 and only one instance would be programmed. We always
want at least 2 of the 3 instances programmed and so we should only
match 'nvidia,tegra194-smmu'. In fact, I think that we also need to
update the arm_smmu_of_match table to add 'nvidia,tegra194-smmu' with
the data set to &arm_mmu500.
Right, the main concern is if the shiny new DT gets passed to an older
kernel (or other OS entirely) which doesn't know the
"nvdia,tegra194-smmu" compatible but would match on "arm,mmu-500" and
bind a standard driver thinking it's going to work OK. The user would
probably prefer that no driver matched and both instances were left
turned off, than face the fallout of only one of them being set up.
Robin.