aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMonk Liu <Monk.Liu@amd.com>2018-01-04 05:13:20 -0500
committerAlex Deucher <alexander.deucher@amd.com>2018-03-14 15:38:26 -0400
commit421a2a30c121660c4628e4494dcca1fceab8a4be (patch)
tree9a1e82f112d113cbd344fcf4baaf403db5bbd8bc
parent1e09b05386f32efbebb798cf0341eca4b424c960 (diff)
drm/amdgpu: implement mmio byte access helper for MB
mailbox registers can be accessed with a byte boundry according to BIF team, so this patch prepares register byte access and will be used by following patches. Actually, for mailbox registers once the byte field is touched even not changed, the mailbox behaves, so we need the byte width accessing to those sort of regs. Signed-off-by: Monk Liu <Monk.Liu@amd.com> Reviewed-by: Pixel Ding <Pixel.Ding@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu.h6
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_device.c26
2 files changed, 32 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
index eba4abc8aac6..98b05be03f0e 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
@@ -1632,6 +1632,9 @@ uint32_t amdgpu_mm_rreg(struct amdgpu_device *adev, uint32_t reg,
1632 uint32_t acc_flags); 1632 uint32_t acc_flags);
1633void amdgpu_mm_wreg(struct amdgpu_device *adev, uint32_t reg, uint32_t v, 1633void amdgpu_mm_wreg(struct amdgpu_device *adev, uint32_t reg, uint32_t v,
1634 uint32_t acc_flags); 1634 uint32_t acc_flags);
1635void amdgpu_mm_wreg8(struct amdgpu_device *adev, uint32_t offset, uint8_t value);
1636uint8_t amdgpu_mm_rreg8(struct amdgpu_device *adev, uint32_t offset);
1637
1635u32 amdgpu_io_rreg(struct amdgpu_device *adev, u32 reg); 1638u32 amdgpu_io_rreg(struct amdgpu_device *adev, u32 reg);
1636void amdgpu_io_wreg(struct amdgpu_device *adev, u32 reg, u32 v); 1639void amdgpu_io_wreg(struct amdgpu_device *adev, u32 reg, u32 v);
1637 1640
@@ -1655,6 +1658,9 @@ int emu_soc_asic_init(struct amdgpu_device *adev);
1655#define RREG32_NO_KIQ(reg) amdgpu_mm_rreg(adev, (reg), AMDGPU_REGS_NO_KIQ) 1658#define RREG32_NO_KIQ(reg) amdgpu_mm_rreg(adev, (reg), AMDGPU_REGS_NO_KIQ)
1656#define WREG32_NO_KIQ(reg, v) amdgpu_mm_wreg(adev, (reg), (v), AMDGPU_REGS_NO_KIQ) 1659#define WREG32_NO_KIQ(reg, v) amdgpu_mm_wreg(adev, (reg), (v), AMDGPU_REGS_NO_KIQ)
1657 1660
1661#define RREG8(reg) amdgpu_mm_rreg8(adev, (reg))
1662#define WREG8(reg, v) amdgpu_mm_wreg8(adev, (reg), (v))
1663
1658#define RREG32(reg) amdgpu_mm_rreg(adev, (reg), 0) 1664#define RREG32(reg) amdgpu_mm_rreg(adev, (reg), 0)
1659#define RREG32_IDX(reg) amdgpu_mm_rreg(adev, (reg), AMDGPU_REGS_IDX) 1665#define RREG32_IDX(reg) amdgpu_mm_rreg(adev, (reg), AMDGPU_REGS_IDX)
1660#define DREG32(reg) printk(KERN_INFO "REGISTER: " #reg " : 0x%08X\n", amdgpu_mm_rreg(adev, (reg), 0)) 1666#define DREG32(reg) printk(KERN_INFO "REGISTER: " #reg " : 0x%08X\n", amdgpu_mm_rreg(adev, (reg), 0))
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
index cc582e2271e1..e32ff159ba89 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
@@ -121,6 +121,32 @@ uint32_t amdgpu_mm_rreg(struct amdgpu_device *adev, uint32_t reg,
121 return ret; 121 return ret;
122} 122}
123 123
124/*
125 * MMIO register read with bytes helper functions
126 * @offset:bytes offset from MMIO start
127 *
128*/
129
130uint8_t amdgpu_mm_rreg8(struct amdgpu_device *adev, uint32_t offset) {
131 if (offset < adev->rmmio_size)
132 return (readb(adev->rmmio + offset));
133 BUG();
134}
135
136/*
137 * MMIO register write with bytes helper functions
138 * @offset:bytes offset from MMIO start
139 * @value: the value want to be written to the register
140 *
141*/
142void amdgpu_mm_wreg8(struct amdgpu_device *adev, uint32_t offset, uint8_t value) {
143 if (offset < adev->rmmio_size)
144 writeb(value, adev->rmmio + offset);
145 else
146 BUG();
147}
148
149
124void amdgpu_mm_wreg(struct amdgpu_device *adev, uint32_t reg, uint32_t v, 150void amdgpu_mm_wreg(struct amdgpu_device *adev, uint32_t reg, uint32_t v,
125 uint32_t acc_flags) 151 uint32_t acc_flags)
126{ 152{