Skip to content

Commit

Permalink
iommu/tegra: smmu: Use helper function to check for valid register of…
Browse files Browse the repository at this point in the history
…fset

Do not repeat the checking loop in the read and write
functions. Use a single helper function for that check and
call it in both accessors.

Signed-off-by: Joerg Roedel <joro@8bytes.org>
  • Loading branch information
Joerg Roedel committed Feb 5, 2013
1 parent a6870e9 commit fe1229b
Showing 1 changed file with 18 additions and 17 deletions.
35 changes: 18 additions & 17 deletions drivers/iommu/tegra-smmu.c
Original file line number Diff line number Diff line change
Expand Up @@ -327,36 +327,37 @@ static struct smmu_device *smmu_handle; /* unique for a system */
/*
* SMMU register accessors
*/
static inline u32 smmu_read(struct smmu_device *smmu, size_t offs)
static bool inline smmu_valid_reg(struct smmu_device *smmu,
void __iomem *addr)
{
int i;

for (i = 0; i < smmu->nregs; i++) {
void __iomem *addr = smmu->regbase + offs;

BUG_ON(addr < smmu->regs[i]);
if (addr < smmu->regs[i])
break;
if (addr <= smmu->rege[i])
return readl(addr);
return true;
}

BUG();
return false;
}

static inline void smmu_write(struct smmu_device *smmu, u32 val, size_t offs)
static inline u32 smmu_read(struct smmu_device *smmu, size_t offs)
{
int i;
void __iomem *addr = smmu->regbase + offs;

for (i = 0; i < smmu->nregs; i++) {
void __iomem *addr = smmu->regbase + offs;
BUG_ON(!smmu_valid_reg(smmu, addr));

BUG_ON(addr < smmu->regs[i]);
if (addr <= smmu->rege[i]) {
writel(val, addr);
return;
}
}
return readl(addr);
}

static inline void smmu_write(struct smmu_device *smmu, u32 val, size_t offs)
{
void __iomem *addr = smmu->regbase + offs;

BUG_ON(!smmu_valid_reg(smmu, addr));

BUG();
writel(val, addr);
}

#define VA_PAGE_TO_PA(va, page) \
Expand Down

0 comments on commit fe1229b

Please sign in to comment.