|
@@ -4141,8 +4141,15 @@ uint32_t r100_mm_rreg(struct radeon_device *rdev, uint32_t reg,
|
|
|
if (reg < rdev->rmmio_size && !always_indirect)
|
|
|
return readl(((void __iomem *)rdev->rmmio) + reg);
|
|
|
else {
|
|
|
+ unsigned long flags;
|
|
|
+ uint32_t ret;
|
|
|
+
|
|
|
+ spin_lock_irqsave(&rdev->mmio_idx_lock, flags);
|
|
|
writel(reg, ((void __iomem *)rdev->rmmio) + RADEON_MM_INDEX);
|
|
|
- return readl(((void __iomem *)rdev->rmmio) + RADEON_MM_DATA);
|
|
|
+ ret = readl(((void __iomem *)rdev->rmmio) + RADEON_MM_DATA);
|
|
|
+ spin_unlock_irqrestore(&rdev->mmio_idx_lock, flags);
|
|
|
+
|
|
|
+ return ret;
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -4152,8 +4159,12 @@ void r100_mm_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v,
|
|
|
if (reg < rdev->rmmio_size && !always_indirect)
|
|
|
writel(v, ((void __iomem *)rdev->rmmio) + reg);
|
|
|
else {
|
|
|
+ unsigned long flags;
|
|
|
+
|
|
|
+ spin_lock_irqsave(&rdev->mmio_idx_lock, flags);
|
|
|
writel(reg, ((void __iomem *)rdev->rmmio) + RADEON_MM_INDEX);
|
|
|
writel(v, ((void __iomem *)rdev->rmmio) + RADEON_MM_DATA);
|
|
|
+ spin_unlock_irqrestore(&rdev->mmio_idx_lock, flags);
|
|
|
}
|
|
|
}
|
|
|
|