[PATCH 01/23] drm/amdgpu: init aperture definitions
Christian König
deathsimple at vodafone.de
Thu Mar 9 09:41:49 UTC 2017
Am 09.03.2017 um 04:44 schrieb Alex Deucher:
> From: Junwei Zhang <Jerry.Zhang at amd.com>
>
> Signed-off-by: Flora Cui <Flora.Cui at amd.com>
> Reviewed-by: Jammy Zhou <Jammy.Zhou at amd.com>
> Reviewed-by: Alex Deucher <alexander.deucher at amd.com>
> Signed-off-by: Alex Deucher <alexander.deucher at amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h | 6 ++++++
> drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c | 24 +++++++++++++++++++++---
> drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | 17 +++++++++++++----
> drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c | 7 +++++++
> drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c | 7 +++++++
> 5 files changed, 54 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
> index 57eaf71..b2ff9e1 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
> @@ -165,6 +165,12 @@ struct amdgpu_vm_manager {
> /* partial resident texture handling */
> spinlock_t prt_lock;
> atomic_t num_prt_users;
> +
> + /* vm aperture */
> + u64 shared_aperture_start;
> + u64 shared_aperture_end;
> + u64 private_aperture_start;
> + u64 private_aperture_end;
Apertures doesn't belong in the VM structure, but rather in amdgpu_mc.
Christian.
> };
>
> void amdgpu_vm_manager_init(struct amdgpu_device *adev);
> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
> index e471c08..cd6a6ec 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
> @@ -1889,7 +1889,8 @@ static void gfx_v7_0_config_init(struct amdgpu_device *adev)
> */
> static void gfx_v7_0_gpu_init(struct amdgpu_device *adev)
> {
> - u32 tmp, sh_mem_cfg;
> + u32 sh_mem_cfg, sh_static_mem_cfg, sh_mem_base;
> + u32 tmp;
> int i;
>
> WREG32(mmGRBM_CNTL, (0xff << GRBM_CNTL__READ_TIMEOUT__SHIFT));
> @@ -1920,15 +1921,32 @@ static void gfx_v7_0_gpu_init(struct amdgpu_device *adev)
> /* where to put LDS, scratch, GPUVM in FSA64 space */
> sh_mem_cfg = REG_SET_FIELD(0, SH_MEM_CONFIG, ALIGNMENT_MODE,
> SH_MEM_ALIGNMENT_MODE_UNALIGNED);
> + sh_mem_cfg = REG_SET_FIELD(sh_mem_cfg, SH_MEM_CONFIG, DEFAULT_MTYPE,
> + MTYPE_NC);
> + sh_mem_cfg = REG_SET_FIELD(sh_mem_cfg, SH_MEM_CONFIG, APE1_MTYPE,
> + MTYPE_UC);
> + sh_mem_cfg = REG_SET_FIELD(sh_mem_cfg, SH_MEM_CONFIG, PRIVATE_ATC, 0);
> +
> + sh_static_mem_cfg = REG_SET_FIELD(0, SH_STATIC_MEM_CONFIG,
> + SWIZZLE_ENABLE, 1);
> + sh_static_mem_cfg = REG_SET_FIELD(sh_static_mem_cfg, SH_STATIC_MEM_CONFIG,
> + ELEMENT_SIZE, 1);
> + sh_static_mem_cfg = REG_SET_FIELD(sh_static_mem_cfg, SH_STATIC_MEM_CONFIG,
> + INDEX_STRIDE, 3);
>
> mutex_lock(&adev->srbm_mutex);
> - for (i = 0; i < 16; i++) {
> + for (i = 0; i < adev->vm_manager.num_ids; i++) {
> + if (i == 0)
> + sh_mem_base = 0;
> + else
> + sh_mem_base = adev->vm_manager.shared_aperture_start >> 48;
> cik_srbm_select(adev, 0, 0, 0, i);
> /* CP and shaders */
> WREG32(mmSH_MEM_CONFIG, sh_mem_cfg);
> WREG32(mmSH_MEM_APE1_BASE, 1);
> WREG32(mmSH_MEM_APE1_LIMIT, 0);
> - WREG32(mmSH_MEM_BASES, 0);
> + WREG32(mmSH_MEM_BASES, sh_mem_base);
> + WREG32(mmSH_STATIC_MEM_CONFIG, sh_static_mem_cfg);
> }
> cik_srbm_select(adev, 0, 0, 0, 0);
> mutex_unlock(&adev->srbm_mutex);
> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
> index 5dcf8db..af6294f 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
> @@ -3859,7 +3859,7 @@ static void gfx_v8_0_config_init(struct amdgpu_device *adev)
>
> static void gfx_v8_0_gpu_init(struct amdgpu_device *adev)
> {
> - u32 tmp;
> + u32 tmp, sh_static_mem_cfg;
> int i;
>
> WREG32_FIELD(GRBM_CNTL, READ_TIMEOUT, 0xFF);
> @@ -3874,8 +3874,14 @@ static void gfx_v8_0_gpu_init(struct amdgpu_device *adev)
>
> /* XXX SH_MEM regs */
> /* where to put LDS, scratch, GPUVM in FSA64 space */
> + sh_static_mem_cfg = REG_SET_FIELD(0, SH_STATIC_MEM_CONFIG,
> + SWIZZLE_ENABLE, 1);
> + sh_static_mem_cfg = REG_SET_FIELD(sh_static_mem_cfg, SH_STATIC_MEM_CONFIG,
> + ELEMENT_SIZE, 1);
> + sh_static_mem_cfg = REG_SET_FIELD(sh_static_mem_cfg, SH_STATIC_MEM_CONFIG,
> + INDEX_STRIDE, 3);
> mutex_lock(&adev->srbm_mutex);
> - for (i = 0; i < 16; i++) {
> + for (i = 0; i < adev->vm_manager.num_ids; i++) {
> vi_srbm_select(adev, 0, 0, 0, i);
> /* CP and shaders */
> if (i == 0) {
> @@ -3884,17 +3890,20 @@ static void gfx_v8_0_gpu_init(struct amdgpu_device *adev)
> tmp = REG_SET_FIELD(tmp, SH_MEM_CONFIG, ALIGNMENT_MODE,
> SH_MEM_ALIGNMENT_MODE_UNALIGNED);
> WREG32(mmSH_MEM_CONFIG, tmp);
> + WREG32(mmSH_MEM_BASES, 0);
> } else {
> tmp = REG_SET_FIELD(0, SH_MEM_CONFIG, DEFAULT_MTYPE, MTYPE_NC);
> - tmp = REG_SET_FIELD(tmp, SH_MEM_CONFIG, APE1_MTYPE, MTYPE_NC);
> + tmp = REG_SET_FIELD(tmp, SH_MEM_CONFIG, APE1_MTYPE, MTYPE_UC);
> tmp = REG_SET_FIELD(tmp, SH_MEM_CONFIG, ALIGNMENT_MODE,
> SH_MEM_ALIGNMENT_MODE_UNALIGNED);
> WREG32(mmSH_MEM_CONFIG, tmp);
> + tmp = adev->vm_manager.shared_aperture_start >> 48;
> + WREG32(mmSH_MEM_BASES, tmp);
> }
>
> WREG32(mmSH_MEM_APE1_BASE, 1);
> WREG32(mmSH_MEM_APE1_LIMIT, 0);
> - WREG32(mmSH_MEM_BASES, 0);
> + WREG32(mmSH_STATIC_MEM_CONFIG, sh_static_mem_cfg);
> }
> vi_srbm_select(adev, 0, 0, 0, 0);
> mutex_unlock(&adev->srbm_mutex);
> diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
> index 552bf6b..dc2b4c7 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
> @@ -726,6 +726,13 @@ static int gmc_v7_0_vm_init(struct amdgpu_device *adev)
> * amdkfd will use VMIDs 8-15
> */
> adev->vm_manager.num_ids = AMDGPU_NUM_OF_VMIDS;
> + adev->vm_manager.shared_aperture_start = 0x2000000000000000ULL;
> + adev->vm_manager.shared_aperture_end =
> + adev->vm_manager.shared_aperture_start + (4ULL << 30) - 1;
> + adev->vm_manager.private_aperture_start =
> + adev->vm_manager.shared_aperture_end + 1;
> + adev->vm_manager.private_aperture_end =
> + adev->vm_manager.private_aperture_start + (4ULL << 30) - 1;
> amdgpu_vm_manager_init(adev);
>
> /* base offset of vram pages */
> diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
> index f2bd016..81b1a49 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
> @@ -857,6 +857,13 @@ static int gmc_v8_0_vm_init(struct amdgpu_device *adev)
> * amdkfd will use VMIDs 8-15
> */
> adev->vm_manager.num_ids = AMDGPU_NUM_OF_VMIDS;
> + adev->vm_manager.shared_aperture_start = 0x2000000000000000ULL;
> + adev->vm_manager.shared_aperture_end =
> + adev->vm_manager.shared_aperture_start + (4ULL << 30) - 1;
> + adev->vm_manager.private_aperture_start =
> + adev->vm_manager.shared_aperture_end + 1;
> + adev->vm_manager.private_aperture_end =
> + adev->vm_manager.private_aperture_start + (4ULL << 30) - 1;
> amdgpu_vm_manager_init(adev);
>
> /* base offset of vram pages */
More information about the amd-gfx
mailing list