[PATCH v2 08/10] iommu/io-pgtable-arm: Rationalise TTBRn handling
Robin Murphy
robin.murphy at arm.com
Mon Oct 28 18:51:55 UTC 2019
On 28/10/2019 15:09, Steven Price wrote:
[...]
>> --- a/drivers/iommu/io-pgtable-arm-v7s.c
>> +++ b/drivers/iommu/io-pgtable-arm-v7s.c
>> @@ -822,15 +822,13 @@ static struct io_pgtable *arm_v7s_alloc_pgtable(struct io_pgtable_cfg *cfg,
>> /* Ensure the empty pgd is visible before any actual TTBR write */
>> wmb();
>>
>> - /* TTBRs */
>> - cfg->arm_v7s_cfg.ttbr[0] = virt_to_phys(data->pgd) |
>> - ARM_V7S_TTBR_S | ARM_V7S_TTBR_NOS |
>> - (cfg->coherent_walk ?
>> - (ARM_V7S_TTBR_IRGN_ATTR(ARM_V7S_RGN_WBWA) |
>> - ARM_V7S_TTBR_ORGN_ATTR(ARM_V7S_RGN_WBWA)) :
>> - (ARM_V7S_TTBR_IRGN_ATTR(ARM_V7S_RGN_NC) |
>> - ARM_V7S_TTBR_ORGN_ATTR(ARM_V7S_RGN_NC)));
>> - cfg->arm_v7s_cfg.ttbr[1] = 0;
>> + /* TTBR */
>> + cfg->arm_v7s_cfg.ttbr = virt_to_phys(data->pgd) | ARM_V7S_TTBR_S |
>> + (cfg->coherent_walk ? (ARM_V7S_TTBR_NOS |
>> + ARM_V7S_TTBR_IRGN_ATTR(ARM_V7S_RGN_WBWA) |
>> + ARM_V7S_TTBR_ORGN_ATTR(ARM_V7S_RGN_WBWA)) :
>> + (ARM_V7S_TTBR_IRGN_ATTR(ARM_V7S_RGN_NC) |
>> + ARM_V7S_TTBR_ORGN_ATTR(ARM_V7S_RGN_NC)));
>
> ARM_V7S_TTBR_NOS seems to have sneaked into the cfg->coherent_walk
> condition here - which you haven't mentioned in the commit log, so it
> doesn't look like it should be in this commit.
Ah, yes, it's taken a while to remember whether this was something
important that got muddled up in rebasing, but it's actually just
trivial cleanup. For !coherent_walk, the non-cacheable output attribute
makes shareable accesses implicitly outer-shareable, so setting TTBR.NOS
for that case actually does nothing except look misleading. Thus this is
essentially just a cosmetic change included in the reformatting for
clarity and consistency with the LPAE version. I'll call that out in the
commit message, thanks for spotting!
Robin.
More information about the iommu
mailing list