[PATCH 17/17] drm/amdgpu: move vram usage by vbios to mman
Christian König
ckoenig.leichtzumerken at gmail.com
Thu Jul 30 09:13:32 UTC 2020
Am 29.07.20 um 19:34 schrieb Alex Deucher:
> It's related to the memory manager so move it there.
>
> Signed-off-by: Alex Deucher <alexander.deucher at amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu.h | 12 -----------
> drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c | 4 ++--
> .../gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c | 4 ++--
> drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 20 +++++++++----------
> drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h | 13 ++++++++++++
> drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c | 6 +++---
> 6 files changed, 30 insertions(+), 29 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> index 44fd0ef7394f..81f6412eb54f 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> @@ -649,16 +649,6 @@ struct amdgpu_atcs {
> struct amdgpu_atcs_functions functions;
> };
>
> -/*
> - * Firmware VRAM reservation
> - */
> -struct amdgpu_fw_vram_usage {
> - u64 start_offset;
> - u64 size;
> - struct amdgpu_bo *reserved_bo;
> - void *va;
> -};
> -
> /*
> * CGS
> */
> @@ -942,8 +932,6 @@ struct amdgpu_device {
> struct delayed_work delayed_init_work;
>
> struct amdgpu_virt virt;
> - /* firmware VRAM reservation */
> - struct amdgpu_fw_vram_usage fw_vram_usage;
>
> /* link all shadow bo */
> struct list_head shadow_list;
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c
> index 29f767e026e4..681f2ef739b1 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c
> @@ -1786,9 +1786,9 @@ static int amdgpu_atombios_allocate_fb_scratch(struct amdgpu_device *adev)
> (uint32_t)(ATOM_VRAM_BLOCK_SRIOV_MSG_SHARE_RESERVATION <<
> ATOM_VRAM_OPERATION_FLAGS_SHIFT)) {
> /* Firmware request VRAM reservation for SR-IOV */
> - adev->fw_vram_usage.start_offset = (start_addr &
> + adev->mman.fw_vram_usage.start_offset = (start_addr &
> (~ATOM_VRAM_OPERATION_FLAGS_MASK)) << 10;
> - adev->fw_vram_usage.size = size << 10;
> + adev->mman.fw_vram_usage.size = size << 10;
> /* Use the default scratch size */
> usage_bytes = 0;
> } else {
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c
> index 1279053324f9..07a835d42b72 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c
> @@ -89,9 +89,9 @@ int amdgpu_atomfirmware_allocate_fb_scratch(struct amdgpu_device *adev)
> (uint32_t)(ATOM_VRAM_BLOCK_SRIOV_MSG_SHARE_RESERVATION <<
> ATOM_VRAM_OPERATION_FLAGS_SHIFT)) {
> /* Firmware request VRAM reservation for SR-IOV */
> - adev->fw_vram_usage.start_offset = (start_addr &
> + adev->mman.fw_vram_usage.start_offset = (start_addr &
> (~ATOM_VRAM_OPERATION_FLAGS_MASK)) << 10;
> - adev->fw_vram_usage.size = size << 10;
> + adev->mman.fw_vram_usage.size = size << 10;
> /* Use the default scratch size */
> usage_bytes = 0;
> } else {
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> index ea9b5b39f640..f81a33f79517 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> @@ -1766,8 +1766,8 @@ static struct ttm_bo_driver amdgpu_bo_driver = {
> */
> static void amdgpu_ttm_fw_reserve_vram_fini(struct amdgpu_device *adev)
> {
> - amdgpu_bo_free_kernel(&adev->fw_vram_usage.reserved_bo,
> - NULL, &adev->fw_vram_usage.va);
> + amdgpu_bo_free_kernel(&adev->mman.fw_vram_usage.reserved_bo,
> + NULL, &adev->mman.fw_vram_usage.va);
> }
>
> /**
> @@ -1781,19 +1781,19 @@ static int amdgpu_ttm_fw_reserve_vram_init(struct amdgpu_device *adev)
> {
> uint64_t vram_size = adev->gmc.visible_vram_size;
>
> - adev->fw_vram_usage.va = NULL;
> - adev->fw_vram_usage.reserved_bo = NULL;
> + adev->mman.fw_vram_usage.va = NULL;
> + adev->mman.fw_vram_usage.reserved_bo = NULL;
>
> - if (adev->fw_vram_usage.size == 0 ||
> - adev->fw_vram_usage.size > vram_size)
> + if (adev->mman.fw_vram_usage.size == 0 ||
> + adev->mman.fw_vram_usage.size > vram_size)
> return 0;
>
> return amdgpu_bo_create_kernel_at(adev,
> - adev->fw_vram_usage.start_offset,
> - adev->fw_vram_usage.size,
> + adev->mman.fw_vram_usage.start_offset,
> + adev->mman.fw_vram_usage.size,
> AMDGPU_GEM_DOMAIN_VRAM,
> - &adev->fw_vram_usage.reserved_bo,
> - &adev->fw_vram_usage.va);
> + &adev->mman.fw_vram_usage.reserved_bo,
> + &adev->mman.fw_vram_usage.va);
> }
>
> /*
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
> index 6d7b83d967ce..95a513f7785f 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
> @@ -41,6 +41,16 @@
>
> #define AMDGPU_POISON 0xd0bed0be
>
> +/*
> + * Firmware VRAM reservation
> + */
> +struct amdgpu_fw_vram_usage {
> + u64 start_offset;
> + u64 size;
> + struct amdgpu_bo *reserved_bo;
> + void *va;
> +};
> +
Maybe we should even inline the structure while doing so. I don't see
the need for a separate struct here.
Christian.
> struct amdgpu_mman {
> struct ttm_bo_device bdev;
> bool mem_global_referenced;
> @@ -70,6 +80,9 @@ struct amdgpu_mman {
> uint8_t *discovery_bin;
> uint32_t discovery_tmr_size;
> struct amdgpu_bo *discovery_memory;
> +
> + /* firmware VRAM reservation */
> + struct amdgpu_fw_vram_usage fw_vram_usage;
> };
>
> struct amdgpu_copy_mem {
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
> index 5cae39d35c04..816e086f00d2 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
> @@ -401,7 +401,7 @@ static void amdgpu_virt_add_bad_page(struct amdgpu_device *adev,
> if (bp_block_size) {
> bp_cnt = bp_block_size / sizeof(uint64_t);
> for (bp_idx = 0; bp_idx < bp_cnt; bp_idx++) {
> - retired_page = *(uint64_t *)(adev->fw_vram_usage.va +
> + retired_page = *(uint64_t *)(adev->mman.fw_vram_usage.va +
> bp_block_offset + bp_idx * sizeof(uint64_t));
> bp.retired_page = retired_page;
>
> @@ -428,10 +428,10 @@ void amdgpu_virt_init_data_exchange(struct amdgpu_device *adev)
> adev->virt.fw_reserve.p_pf2vf = NULL;
> adev->virt.fw_reserve.p_vf2pf = NULL;
>
> - if (adev->fw_vram_usage.va != NULL) {
> + if (adev->mman.fw_vram_usage.va != NULL) {
> adev->virt.fw_reserve.p_pf2vf =
> (struct amd_sriov_msg_pf2vf_info_header *)(
> - adev->fw_vram_usage.va + AMDGIM_DATAEXCHANGE_OFFSET);
> + adev->mman.fw_vram_usage.va + AMDGIM_DATAEXCHANGE_OFFSET);
> AMDGPU_FW_VRAM_PF2VF_READ(adev, header.size, &pf2vf_size);
> AMDGPU_FW_VRAM_PF2VF_READ(adev, checksum, &checksum);
> AMDGPU_FW_VRAM_PF2VF_READ(adev, feature_flags, &adev->virt.gim_feature);
More information about the amd-gfx
mailing list