[PATCH 2/9] iommu/arm-smmu: Calculate SMMU_CB_BASE from smmu register values
From: Will Deacon <hidden>
Date: 2013-09-27 11:08:32
Also in:
linux-iommu
From: Will Deacon <hidden>
Date: 2013-09-27 11:08:32
Also in:
linux-iommu
On Fri, Sep 27, 2013 at 12:05:21PM +0100, Andreas Herrmann wrote:
On Fri, Sep 27, 2013 at 06:51:53AM -0400, Will Deacon wrote:quoted
Well, we should already print the "device is 0x%lx bytes but only mapped 0x%lx!" message, which I think is enough to go and figure out what happened.No, you can map a larger region and still wrongly calculate cb_base w/o this warning.
Gotcha.
So the required check is something like
/* Check for mismatch between SMMU address space size and size of mapped region */
size = 1 << (((id >> ID1_NUMPAGENDXB_SHIFT) & ID1_NUMPAGENDXB_MASK) + 1);
size *= (smmu->pagesize << 1);
if (smmu->size != size)
dev_warn(smmu->dev,
"SMMU_GLOBAL_SIZE (0x%lx) differs from mapped "
region size (0x%lx)!\n", size, smmu->size);Sure, tightening up that check sounds like a good idea. Looking forward to the next version of the patches! (I need some more time to think about that secure config access patch :). Will