]> git.karo-electronics.de Git - linux-beck.git/commitdiff
iommu/tegra: smmu: Use helper function to check for valid register offset
authorJoerg Roedel <joro@8bytes.org>
Mon, 4 Feb 2013 19:40:58 +0000 (20:40 +0100)
committerJoerg Roedel <joro@8bytes.org>
Tue, 5 Feb 2013 13:18:24 +0000 (14:18 +0100)
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>
drivers/iommu/tegra-smmu.c

index 2fecbe7fd7fdd897566756eae739b730bc82ceb6..774728313f517eb73b291f4147619ba0143112d4 100644 (file)
@@ -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)        \