mirror of https://gitee.com/openkylin/linux.git
drm/amdgpu: add 64bit doorbell functions (v2)
Newer asics need 64 bit doorbells. v2: fix comment (Nils) Reviewed-by: Christian König <christian.koenig@amd.com> Signed-off-by: Ken Wang <Qingqing.Wang@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
7014285ade
commit
832be4041d
|
@ -1521,6 +1521,8 @@ void amdgpu_io_wreg(struct amdgpu_device *adev, u32 reg, u32 v);
|
||||||
|
|
||||||
u32 amdgpu_mm_rdoorbell(struct amdgpu_device *adev, u32 index);
|
u32 amdgpu_mm_rdoorbell(struct amdgpu_device *adev, u32 index);
|
||||||
void amdgpu_mm_wdoorbell(struct amdgpu_device *adev, u32 index, u32 v);
|
void amdgpu_mm_wdoorbell(struct amdgpu_device *adev, u32 index, u32 v);
|
||||||
|
u64 amdgpu_mm_rdoorbell64(struct amdgpu_device *adev, u32 index);
|
||||||
|
void amdgpu_mm_wdoorbell64(struct amdgpu_device *adev, u32 index, u64 v);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Registers read & write functions.
|
* Registers read & write functions.
|
||||||
|
@ -1575,6 +1577,8 @@ void amdgpu_mm_wdoorbell(struct amdgpu_device *adev, u32 index, u32 v);
|
||||||
|
|
||||||
#define RDOORBELL32(index) amdgpu_mm_rdoorbell(adev, (index))
|
#define RDOORBELL32(index) amdgpu_mm_rdoorbell(adev, (index))
|
||||||
#define WDOORBELL32(index, v) amdgpu_mm_wdoorbell(adev, (index), (v))
|
#define WDOORBELL32(index, v) amdgpu_mm_wdoorbell(adev, (index), (v))
|
||||||
|
#define RDOORBELL64(index) amdgpu_mm_rdoorbell64(adev, (index))
|
||||||
|
#define WDOORBELL64(index, v) amdgpu_mm_wdoorbell64(adev, (index), (v))
|
||||||
|
|
||||||
#define REG_FIELD_SHIFT(reg, field) reg##__##field##__SHIFT
|
#define REG_FIELD_SHIFT(reg, field) reg##__##field##__SHIFT
|
||||||
#define REG_FIELD_MASK(reg, field) reg##__##field##_MASK
|
#define REG_FIELD_MASK(reg, field) reg##__##field##_MASK
|
||||||
|
|
|
@ -194,6 +194,44 @@ void amdgpu_mm_wdoorbell(struct amdgpu_device *adev, u32 index, u32 v)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* amdgpu_mm_rdoorbell64 - read a doorbell Qword
|
||||||
|
*
|
||||||
|
* @adev: amdgpu_device pointer
|
||||||
|
* @index: doorbell index
|
||||||
|
*
|
||||||
|
* Returns the value in the doorbell aperture at the
|
||||||
|
* requested doorbell index (VEGA10+).
|
||||||
|
*/
|
||||||
|
u64 amdgpu_mm_rdoorbell64(struct amdgpu_device *adev, u32 index)
|
||||||
|
{
|
||||||
|
if (index < adev->doorbell.num_doorbells) {
|
||||||
|
return atomic64_read((atomic64_t *)(adev->doorbell.ptr + index));
|
||||||
|
} else {
|
||||||
|
DRM_ERROR("reading beyond doorbell aperture: 0x%08x!\n", index);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* amdgpu_mm_wdoorbell64 - write a doorbell Qword
|
||||||
|
*
|
||||||
|
* @adev: amdgpu_device pointer
|
||||||
|
* @index: doorbell index
|
||||||
|
* @v: value to write
|
||||||
|
*
|
||||||
|
* Writes @v to the doorbell aperture at the
|
||||||
|
* requested doorbell index (VEGA10+).
|
||||||
|
*/
|
||||||
|
void amdgpu_mm_wdoorbell64(struct amdgpu_device *adev, u32 index, u64 v)
|
||||||
|
{
|
||||||
|
if (index < adev->doorbell.num_doorbells) {
|
||||||
|
atomic64_set((atomic64_t *)(adev->doorbell.ptr + index), v);
|
||||||
|
} else {
|
||||||
|
DRM_ERROR("writing beyond doorbell aperture: 0x%08x!\n", index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* amdgpu_invalid_rreg - dummy reg read function
|
* amdgpu_invalid_rreg - dummy reg read function
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue