[PATCH 1/2] drm/amdgpu: imlement mmio byte access helpers

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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.

Please correct the typo in commit title. With that change,
Reviewed-by: Pixel Ding <Pixel.Ding at amd.com>


â?? 
Sincerely Yours,
Pixel


On 06/03/2018, 7:05 PM, "amd-gfx on behalf of Monk Liu" <amd-gfx-bounces at lists.freedesktop.org on behalf of Monk.Liu at amd.com> wrote:

    mailbox register 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
    
    Change-Id: I1e84f1c6e8e75dc42eb5be09c492fa5e7eb7502a
    Signed-off-by: Monk Liu <Monk.Liu at amd.com>
    ---
     drivers/gpu/drm/amd/amdgpu/amdgpu.h        |  6 ++++++
     drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 26 ++++++++++++++++++++++++++
     2 files changed, 32 insertions(+)
    
    diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
    index 292c7e7..72385bb 100644
    --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
    +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
    @@ -1635,6 +1635,9 @@ uint32_t amdgpu_mm_rreg(struct amdgpu_device *adev, uint32_t reg,
     			uint32_t acc_flags);
     void amdgpu_mm_wreg(struct amdgpu_device *adev, uint32_t reg, uint32_t v,
     		    uint32_t acc_flags);
    +void amdgpu_mm_wreg8(struct amdgpu_device *adev, uint32_t offset, uint8_t value);
    +uint8_t amdgpu_mm_rreg8(struct amdgpu_device *adev, uint32_t offset);
    +
     u32 amdgpu_io_rreg(struct amdgpu_device *adev, u32 reg);
     void amdgpu_io_wreg(struct amdgpu_device *adev, u32 reg, u32 v);
     
    @@ -1658,6 +1661,9 @@ int emu_soc_asic_init(struct amdgpu_device *adev);
     #define RREG32_NO_KIQ(reg) amdgpu_mm_rreg(adev, (reg), AMDGPU_REGS_NO_KIQ)
     #define WREG32_NO_KIQ(reg, v) amdgpu_mm_wreg(adev, (reg), (v), AMDGPU_REGS_NO_KIQ)
     
    +#define RREG8(reg) amdgpu_mm_rreg8(adev, (reg))
    +#define WREG8(reg, v) amdgpu_mm_wreg8(adev, (reg), (v))
    +
     #define RREG32(reg) amdgpu_mm_rreg(adev, (reg), 0)
     #define RREG32_IDX(reg) amdgpu_mm_rreg(adev, (reg), AMDGPU_REGS_IDX)
     #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 65584f6..c8e1940 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,
     	return ret;
     }
     
    +/*
    + * MMIO register read with bytes helper functions
    + * @offset:bytes offset from MMIO start
    + *
    +*/
    +
    +uint8_t amdgpu_mm_rreg8(struct amdgpu_device *adev, uint32_t offset) {
    +	if (offset < adev->rmmio_size)
    +		return (readb(adev->rmmio + offset));
    +	BUG();
    +}
    +
    +/*
    + * MMIO register write with bytes helper functions
    + * @offset:bytes offset from MMIO start
    + * @value: the value want to be written to the register
    + *
    +*/
    +void amdgpu_mm_wreg8(struct amdgpu_device *adev, uint32_t offset, uint8_t value) {
    +	if (offset < adev->rmmio_size)
    +		writeb(value, adev->rmmio + offset);
    +	else
    +		BUG();
    +}
    +
    +
     void amdgpu_mm_wreg(struct amdgpu_device *adev, uint32_t reg, uint32_t v,
     		    uint32_t acc_flags)
     {
    -- 
    2.7.4
    
    _______________________________________________
    amd-gfx mailing list
    amd-gfx at lists.freedesktop.org
    https://lists.freedesktop.org/mailman/listinfo/amd-gfx
    



[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux