[PATCH 2/2] drm/amdgpu: make psp_ring_init common

Felix Kuehling felix.kuehling at amd.com
Wed Nov 16 21:08:20 UTC 2022


Am 2022-11-16 um 11:40 schrieb Alex Deucher:
> All of the IP specific versions are the same now, so
> we can just use a common function.
>
> Signed-off-by: Alex Deucher <alexander.deucher at amd.com>

The series is

Acked-by: Felix Kuehling <Felix.Kuehling at amd.com>


> ---
>   drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c  | 26 +++++++++++++++++++++++
>   drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h  |  2 --
>   drivers/gpu/drm/amd/amdgpu/psp_v10_0.c   | 27 ------------------------
>   drivers/gpu/drm/amd/amdgpu/psp_v11_0.c   | 27 ------------------------
>   drivers/gpu/drm/amd/amdgpu/psp_v11_0_8.c | 27 ------------------------
>   drivers/gpu/drm/amd/amdgpu/psp_v12_0.c   | 27 ------------------------
>   drivers/gpu/drm/amd/amdgpu/psp_v13_0.c   | 27 ------------------------
>   drivers/gpu/drm/amd/amdgpu/psp_v13_0_4.c | 27 ------------------------
>   drivers/gpu/drm/amd/amdgpu/psp_v3_1.c    | 27 ------------------------
>   9 files changed, 26 insertions(+), 191 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
> index d9cb4c4b8289..7bb2de1d11ff 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
> @@ -52,6 +52,32 @@ static int psp_load_smu_fw(struct psp_context *psp);
>   static int psp_rap_terminate(struct psp_context *psp);
>   static int psp_securedisplay_terminate(struct psp_context *psp);
>   
> +static int psp_ring_init(struct psp_context *psp,
> +			 enum psp_ring_type ring_type)
> +{
> +	int ret = 0;
> +	struct psp_ring *ring;
> +	struct amdgpu_device *adev = psp->adev;
> +
> +	ring = &psp->km_ring;
> +
> +	ring->ring_type = ring_type;
> +
> +	/* allocate 4k Page of Local Frame Buffer memory for ring */
> +	ring->ring_size = 0x1000;
> +	ret = amdgpu_bo_create_kernel(adev, ring->ring_size, PAGE_SIZE,
> +				      AMDGPU_GEM_DOMAIN_VRAM,
> +				      &adev->firmware.rbuf,
> +				      &ring->ring_mem_mc_addr,
> +				      (void **)&ring->ring_mem);
> +	if (ret) {
> +		ring->ring_size = 0;
> +		return ret;
> +	}
> +
> +	return 0;
> +}
> +
>   /*
>    * Due to DF Cstate management centralized to PMFW, the firmware
>    * loading sequence will be updated as below:
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h
> index cbd4194a2883..cf4f60c66122 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h
> @@ -118,7 +118,6 @@ struct psp_funcs
>   	int (*bootloader_load_dbg_drv)(struct psp_context *psp);
>   	int (*bootloader_load_ras_drv)(struct psp_context *psp);
>   	int (*bootloader_load_sos)(struct psp_context *psp);
> -	int (*ring_init)(struct psp_context *psp, enum psp_ring_type ring_type);
>   	int (*ring_create)(struct psp_context *psp,
>   			   enum psp_ring_type ring_type);
>   	int (*ring_stop)(struct psp_context *psp,
> @@ -396,7 +395,6 @@ struct amdgpu_psp_funcs {
>   };
>   
>   
> -#define psp_ring_init(psp, type) (psp)->funcs->ring_init((psp), (type))
>   #define psp_ring_create(psp, type) (psp)->funcs->ring_create((psp), (type))
>   #define psp_ring_stop(psp, type) (psp)->funcs->ring_stop((psp), (type))
>   #define psp_ring_destroy(psp, type) ((psp)->funcs->ring_destroy((psp), (type)))
> diff --git a/drivers/gpu/drm/amd/amdgpu/psp_v10_0.c b/drivers/gpu/drm/amd/amdgpu/psp_v10_0.c
> index ed2293686f0d..9de46fa8f46c 100644
> --- a/drivers/gpu/drm/amd/amdgpu/psp_v10_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/psp_v10_0.c
> @@ -126,32 +126,6 @@ static int psp_v10_0_init_microcode(struct psp_context *psp)
>   	return err;
>   }
>   
> -static int psp_v10_0_ring_init(struct psp_context *psp,
> -			       enum psp_ring_type ring_type)
> -{
> -	int ret = 0;
> -	struct psp_ring *ring;
> -	struct amdgpu_device *adev = psp->adev;
> -
> -	ring = &psp->km_ring;
> -
> -	ring->ring_type = ring_type;
> -
> -	/* allocate 4k Page of Local Frame Buffer memory for ring */
> -	ring->ring_size = 0x1000;
> -	ret = amdgpu_bo_create_kernel(adev, ring->ring_size, PAGE_SIZE,
> -				      AMDGPU_GEM_DOMAIN_VRAM,
> -				      &adev->firmware.rbuf,
> -				      &ring->ring_mem_mc_addr,
> -				      (void **)&ring->ring_mem);
> -	if (ret) {
> -		ring->ring_size = 0;
> -		return ret;
> -	}
> -
> -	return 0;
> -}
> -
>   static int psp_v10_0_ring_create(struct psp_context *psp,
>   				 enum psp_ring_type ring_type)
>   {
> @@ -245,7 +219,6 @@ static void psp_v10_0_ring_set_wptr(struct psp_context *psp, uint32_t value)
>   
>   static const struct psp_funcs psp_v10_0_funcs = {
>   	.init_microcode = psp_v10_0_init_microcode,
> -	.ring_init = psp_v10_0_ring_init,
>   	.ring_create = psp_v10_0_ring_create,
>   	.ring_stop = psp_v10_0_ring_stop,
>   	.ring_destroy = psp_v10_0_ring_destroy,
> diff --git a/drivers/gpu/drm/amd/amdgpu/psp_v11_0.c b/drivers/gpu/drm/amd/amdgpu/psp_v11_0.c
> index 9518b4394a6e..bd3e3e23a939 100644
> --- a/drivers/gpu/drm/amd/amdgpu/psp_v11_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/psp_v11_0.c
> @@ -360,32 +360,6 @@ static int psp_v11_0_bootloader_load_sos(struct psp_context *psp)
>   	return ret;
>   }
>   
> -static int psp_v11_0_ring_init(struct psp_context *psp,
> -			      enum psp_ring_type ring_type)
> -{
> -	int ret = 0;
> -	struct psp_ring *ring;
> -	struct amdgpu_device *adev = psp->adev;
> -
> -	ring = &psp->km_ring;
> -
> -	ring->ring_type = ring_type;
> -
> -	/* allocate 4k Page of Local Frame Buffer memory for ring */
> -	ring->ring_size = 0x1000;
> -	ret = amdgpu_bo_create_kernel(adev, ring->ring_size, PAGE_SIZE,
> -				      AMDGPU_GEM_DOMAIN_VRAM,
> -				      &adev->firmware.rbuf,
> -				      &ring->ring_mem_mc_addr,
> -				      (void **)&ring->ring_mem);
> -	if (ret) {
> -		ring->ring_size = 0;
> -		return ret;
> -	}
> -
> -	return 0;
> -}
> -
>   static int psp_v11_0_ring_stop(struct psp_context *psp,
>   			      enum psp_ring_type ring_type)
>   {
> @@ -779,7 +753,6 @@ static const struct psp_funcs psp_v11_0_funcs = {
>   	.bootloader_load_spl = psp_v11_0_bootloader_load_spl,
>   	.bootloader_load_sysdrv = psp_v11_0_bootloader_load_sysdrv,
>   	.bootloader_load_sos = psp_v11_0_bootloader_load_sos,
> -	.ring_init = psp_v11_0_ring_init,
>   	.ring_create = psp_v11_0_ring_create,
>   	.ring_stop = psp_v11_0_ring_stop,
>   	.ring_destroy = psp_v11_0_ring_destroy,
> diff --git a/drivers/gpu/drm/amd/amdgpu/psp_v11_0_8.c b/drivers/gpu/drm/amd/amdgpu/psp_v11_0_8.c
> index ff13e1beb49b..5697760a819b 100644
> --- a/drivers/gpu/drm/amd/amdgpu/psp_v11_0_8.c
> +++ b/drivers/gpu/drm/amd/amdgpu/psp_v11_0_8.c
> @@ -28,32 +28,6 @@
>   
>   #include "mp/mp_11_0_8_offset.h"
>   
> -static int psp_v11_0_8_ring_init(struct psp_context *psp,
> -			      enum psp_ring_type ring_type)
> -{
> -	int ret = 0;
> -	struct psp_ring *ring;
> -	struct amdgpu_device *adev = psp->adev;
> -
> -	ring = &psp->km_ring;
> -
> -	ring->ring_type = ring_type;
> -
> -	/* allocate 4k Page of Local Frame Buffer memory for ring */
> -	ring->ring_size = 0x1000;
> -	ret = amdgpu_bo_create_kernel(adev, ring->ring_size, PAGE_SIZE,
> -				      AMDGPU_GEM_DOMAIN_VRAM,
> -				      &adev->firmware.rbuf,
> -				      &ring->ring_mem_mc_addr,
> -				      (void **)&ring->ring_mem);
> -	if (ret) {
> -		ring->ring_size = 0;
> -		return ret;
> -	}
> -
> -	return 0;
> -}
> -
>   static int psp_v11_0_8_ring_stop(struct psp_context *psp,
>   			       enum psp_ring_type ring_type)
>   {
> @@ -194,7 +168,6 @@ static void psp_v11_0_8_ring_set_wptr(struct psp_context *psp, uint32_t value)
>   }
>   
>   static const struct psp_funcs psp_v11_0_8_funcs = {
> -	.ring_init = psp_v11_0_8_ring_init,
>   	.ring_create = psp_v11_0_8_ring_create,
>   	.ring_stop = psp_v11_0_8_ring_stop,
>   	.ring_destroy = psp_v11_0_8_ring_destroy,
> diff --git a/drivers/gpu/drm/amd/amdgpu/psp_v12_0.c b/drivers/gpu/drm/amd/amdgpu/psp_v12_0.c
> index d7dd84090c09..8ed2281b6557 100644
> --- a/drivers/gpu/drm/amd/amdgpu/psp_v12_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/psp_v12_0.c
> @@ -236,32 +236,6 @@ static void psp_v12_0_reroute_ih(struct psp_context *psp)
>   		     0x80000000, 0x8000FFFF, false);
>   }
>   
> -static int psp_v12_0_ring_init(struct psp_context *psp,
> -			      enum psp_ring_type ring_type)
> -{
> -	int ret = 0;
> -	struct psp_ring *ring;
> -	struct amdgpu_device *adev = psp->adev;
> -
> -	ring = &psp->km_ring;
> -
> -	ring->ring_type = ring_type;
> -
> -	/* allocate 4k Page of Local Frame Buffer memory for ring */
> -	ring->ring_size = 0x1000;
> -	ret = amdgpu_bo_create_kernel(adev, ring->ring_size, PAGE_SIZE,
> -				      AMDGPU_GEM_DOMAIN_VRAM,
> -				      &adev->firmware.rbuf,
> -				      &ring->ring_mem_mc_addr,
> -				      (void **)&ring->ring_mem);
> -	if (ret) {
> -		ring->ring_size = 0;
> -		return ret;
> -	}
> -
> -	return 0;
> -}
> -
>   static int psp_v12_0_ring_create(struct psp_context *psp,
>   				enum psp_ring_type ring_type)
>   {
> @@ -425,7 +399,6 @@ static const struct psp_funcs psp_v12_0_funcs = {
>   	.init_microcode = psp_v12_0_init_microcode,
>   	.bootloader_load_sysdrv = psp_v12_0_bootloader_load_sysdrv,
>   	.bootloader_load_sos = psp_v12_0_bootloader_load_sos,
> -	.ring_init = psp_v12_0_ring_init,
>   	.ring_create = psp_v12_0_ring_create,
>   	.ring_stop = psp_v12_0_ring_stop,
>   	.ring_destroy = psp_v12_0_ring_destroy,
> diff --git a/drivers/gpu/drm/amd/amdgpu/psp_v13_0.c b/drivers/gpu/drm/amd/amdgpu/psp_v13_0.c
> index 88f9b327183a..ee27bfaba6fd 100644
> --- a/drivers/gpu/drm/amd/amdgpu/psp_v13_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/psp_v13_0.c
> @@ -268,32 +268,6 @@ static int psp_v13_0_bootloader_load_sos(struct psp_context *psp)
>   	return ret;
>   }
>   
> -static int psp_v13_0_ring_init(struct psp_context *psp,
> -			      enum psp_ring_type ring_type)
> -{
> -	int ret = 0;
> -	struct psp_ring *ring;
> -	struct amdgpu_device *adev = psp->adev;
> -
> -	ring = &psp->km_ring;
> -
> -	ring->ring_type = ring_type;
> -
> -	/* allocate 4k Page of Local Frame Buffer memory for ring */
> -	ring->ring_size = 0x1000;
> -	ret = amdgpu_bo_create_kernel(adev, ring->ring_size, PAGE_SIZE,
> -				      AMDGPU_GEM_DOMAIN_VRAM,
> -				      &adev->firmware.rbuf,
> -				      &ring->ring_mem_mc_addr,
> -				      (void **)&ring->ring_mem);
> -	if (ret) {
> -		ring->ring_size = 0;
> -		return ret;
> -	}
> -
> -	return 0;
> -}
> -
>   static int psp_v13_0_ring_stop(struct psp_context *psp,
>   			       enum psp_ring_type ring_type)
>   {
> @@ -729,7 +703,6 @@ static const struct psp_funcs psp_v13_0_funcs = {
>   	.bootloader_load_dbg_drv = psp_v13_0_bootloader_load_dbg_drv,
>   	.bootloader_load_ras_drv = psp_v13_0_bootloader_load_ras_drv,
>   	.bootloader_load_sos = psp_v13_0_bootloader_load_sos,
> -	.ring_init = psp_v13_0_ring_init,
>   	.ring_create = psp_v13_0_ring_create,
>   	.ring_stop = psp_v13_0_ring_stop,
>   	.ring_destroy = psp_v13_0_ring_destroy,
> diff --git a/drivers/gpu/drm/amd/amdgpu/psp_v13_0_4.c b/drivers/gpu/drm/amd/amdgpu/psp_v13_0_4.c
> index 321089dfa7db..9d4e24e518e8 100644
> --- a/drivers/gpu/drm/amd/amdgpu/psp_v13_0_4.c
> +++ b/drivers/gpu/drm/amd/amdgpu/psp_v13_0_4.c
> @@ -199,32 +199,6 @@ static int psp_v13_0_4_bootloader_load_sos(struct psp_context *psp)
>   	return ret;
>   }
>   
> -static int psp_v13_0_4_ring_init(struct psp_context *psp,
> -			      enum psp_ring_type ring_type)
> -{
> -	int ret = 0;
> -	struct psp_ring *ring;
> -	struct amdgpu_device *adev = psp->adev;
> -
> -	ring = &psp->km_ring;
> -
> -	ring->ring_type = ring_type;
> -
> -	/* allocate 4k Page of Local Frame Buffer memory for ring */
> -	ring->ring_size = 0x1000;
> -	ret = amdgpu_bo_create_kernel(adev, ring->ring_size, PAGE_SIZE,
> -				      AMDGPU_GEM_DOMAIN_VRAM,
> -				      &adev->firmware.rbuf,
> -				      &ring->ring_mem_mc_addr,
> -				      (void **)&ring->ring_mem);
> -	if (ret) {
> -		ring->ring_size = 0;
> -		return ret;
> -	}
> -
> -	return 0;
> -}
> -
>   static int psp_v13_0_4_ring_stop(struct psp_context *psp,
>   			       enum psp_ring_type ring_type)
>   {
> @@ -373,7 +347,6 @@ static const struct psp_funcs psp_v13_0_4_funcs = {
>   	.bootloader_load_intf_drv = psp_v13_0_4_bootloader_load_intf_drv,
>   	.bootloader_load_dbg_drv = psp_v13_0_4_bootloader_load_dbg_drv,
>   	.bootloader_load_sos = psp_v13_0_4_bootloader_load_sos,
> -	.ring_init = psp_v13_0_4_ring_init,
>   	.ring_create = psp_v13_0_4_ring_create,
>   	.ring_stop = psp_v13_0_4_ring_stop,
>   	.ring_destroy = psp_v13_0_4_ring_destroy,
> diff --git a/drivers/gpu/drm/amd/amdgpu/psp_v3_1.c b/drivers/gpu/drm/amd/amdgpu/psp_v3_1.c
> index 01f3bcc62a6c..157147c6c94e 100644
> --- a/drivers/gpu/drm/amd/amdgpu/psp_v3_1.c
> +++ b/drivers/gpu/drm/amd/amdgpu/psp_v3_1.c
> @@ -160,32 +160,6 @@ static int psp_v3_1_bootloader_load_sos(struct psp_context *psp)
>   	return ret;
>   }
>   
> -static int psp_v3_1_ring_init(struct psp_context *psp,
> -			      enum psp_ring_type ring_type)
> -{
> -	int ret = 0;
> -	struct psp_ring *ring;
> -	struct amdgpu_device *adev = psp->adev;
> -
> -	ring = &psp->km_ring;
> -
> -	ring->ring_type = ring_type;
> -
> -	/* allocate 4k Page of Local Frame Buffer memory for ring */
> -	ring->ring_size = 0x1000;
> -	ret = amdgpu_bo_create_kernel(adev, ring->ring_size, PAGE_SIZE,
> -				      AMDGPU_GEM_DOMAIN_VRAM,
> -				      &adev->firmware.rbuf,
> -				      &ring->ring_mem_mc_addr,
> -				      (void **)&ring->ring_mem);
> -	if (ret) {
> -		ring->ring_size = 0;
> -		return ret;
> -	}
> -
> -	return 0;
> -}
> -
>   static void psp_v3_1_reroute_ih(struct psp_context *psp)
>   {
>   	struct amdgpu_device *adev = psp->adev;
> @@ -401,7 +375,6 @@ static const struct psp_funcs psp_v3_1_funcs = {
>   	.init_microcode = psp_v3_1_init_microcode,
>   	.bootloader_load_sysdrv = psp_v3_1_bootloader_load_sysdrv,
>   	.bootloader_load_sos = psp_v3_1_bootloader_load_sos,
> -	.ring_init = psp_v3_1_ring_init,
>   	.ring_create = psp_v3_1_ring_create,
>   	.ring_stop = psp_v3_1_ring_stop,
>   	.ring_destroy = psp_v3_1_ring_destroy,


More information about the amd-gfx mailing list