As they are logic independently from other APIs of amdgpu_psp.c. Change-Id: I3c8014caca8250bef6439e857bea1b64b6c1930a Signed-off-by: Evan Quan <evan.quan@xxxxxxx> --- drivers/gpu/drm/amd/amdgpu/Makefile | 3 +- drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c | 60 +----------------- drivers/gpu/drm/amd/amdgpu/psp_tmr.c | 84 +++++++++++++++++++++++++ drivers/gpu/drm/amd/amdgpu/psp_tmr.h | 32 ++++++++++ 4 files changed, 119 insertions(+), 60 deletions(-) create mode 100644 drivers/gpu/drm/amd/amdgpu/psp_tmr.c create mode 100644 drivers/gpu/drm/amd/amdgpu/psp_tmr.h diff --git a/drivers/gpu/drm/amd/amdgpu/Makefile b/drivers/gpu/drm/amd/amdgpu/Makefile index 30a705db0ef5..99895c6fcd95 100644 --- a/drivers/gpu/drm/amd/amdgpu/Makefile +++ b/drivers/gpu/drm/amd/amdgpu/Makefile @@ -93,7 +93,8 @@ amdgpu-y += \ psp_v11_0.o \ psp_ring.o \ psp_cmn.o \ - psp_xgmi.o + psp_xgmi.o \ + psp_tmr.o # add SMC block amdgpu-y += \ diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c index c33ced8371c3..2007e8948cbc 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c @@ -33,6 +33,7 @@ #include "psp_v10_0.h" #include "psp_v11_0.h" #include "psp_xgmi.h" +#include "psp_tmr.h" #define psp_ring_init(psp, type) \ (psp)->funcs->ring_init((psp), (type)) @@ -125,65 +126,6 @@ static int psp_sw_fini(void *handle) return 0; } -static void psp_prep_tmr_cmd_buf(struct psp_context *psp, - struct psp_gfx_cmd_resp *cmd, - uint64_t tmr_mc, uint32_t size) -{ - if (psp_support_vmr_ring(psp)) - cmd->cmd_id = GFX_CMD_ID_SETUP_VMR; - else - cmd->cmd_id = GFX_CMD_ID_SETUP_TMR; - cmd->cmd.cmd_setup_tmr.buf_phy_addr_lo = lower_32_bits(tmr_mc); - cmd->cmd.cmd_setup_tmr.buf_phy_addr_hi = upper_32_bits(tmr_mc); - cmd->cmd.cmd_setup_tmr.buf_size = size; -} - -/* Set up Trusted Memory Region */ -static int psp_tmr_init(struct psp_context *psp) -{ - int ret; - - /* - * Allocate 3M memory aligned to 1M from Frame Buffer (local - * physical). - * - * Note: this memory need be reserved till the driver - * uninitializes. - */ - ret = amdgpu_bo_create_kernel(psp->adev, PSP_TMR_SIZE, 0x100000, - AMDGPU_GEM_DOMAIN_VRAM, - &psp->tmr_bo, &psp->tmr_mc_addr, &psp->tmr_buf); - - return ret; -} - -static int psp_tmr_load(struct psp_context *psp) -{ - int ret; - struct psp_gfx_cmd_resp *cmd; - - cmd = kzalloc(sizeof(struct psp_gfx_cmd_resp), GFP_KERNEL); - if (!cmd) - return -ENOMEM; - - psp_prep_tmr_cmd_buf(psp, cmd, psp->tmr_mc_addr, PSP_TMR_SIZE); - DRM_INFO("reserve 0x%x from 0x%llx for PSP TMR SIZE\n", - PSP_TMR_SIZE, psp->tmr_mc_addr); - - ret = psp_submit_cmd_buf(psp, NULL, cmd, - psp->fence_buf_mc_addr); - if (ret) - goto failed; - - kfree(cmd); - - return 0; - -failed: - kfree(cmd); - return ret; -} - static void psp_prep_asd_cmd_buf(struct psp_gfx_cmd_resp *cmd, uint64_t asd_mc, uint64_t asd_mc_shared, uint32_t size, uint32_t shared_size) diff --git a/drivers/gpu/drm/amd/amdgpu/psp_tmr.c b/drivers/gpu/drm/amd/amdgpu/psp_tmr.c new file mode 100644 index 000000000000..fd5fa167a56d --- /dev/null +++ b/drivers/gpu/drm/amd/amdgpu/psp_tmr.c @@ -0,0 +1,84 @@ +/* + * Copyright 2018 Advanced Micro Devices, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + */ + +#include "psp_tmr.h" +#include "psp_ring.h" + +static void psp_prep_tmr_cmd_buf(struct psp_context *psp, + struct psp_gfx_cmd_resp *cmd, + uint64_t tmr_mc, uint32_t size) +{ + if (psp_ring_support_vmr(psp)) + cmd->cmd_id = GFX_CMD_ID_SETUP_VMR; + else + cmd->cmd_id = GFX_CMD_ID_SETUP_TMR; + cmd->cmd.cmd_setup_tmr.buf_phy_addr_lo = lower_32_bits(tmr_mc); + cmd->cmd.cmd_setup_tmr.buf_phy_addr_hi = upper_32_bits(tmr_mc); + cmd->cmd.cmd_setup_tmr.buf_size = size; +} + +/* Set up Trusted Memory Region */ +int psp_tmr_init(struct psp_context *psp) +{ + int ret; + + /* + * Allocate 3M memory aligned to 1M from Frame Buffer (local + * physical). + * + * Note: this memory need be reserved till the driver + * uninitializes. + */ + ret = amdgpu_bo_create_kernel(psp->adev, PSP_TMR_SIZE, 0x100000, + AMDGPU_GEM_DOMAIN_VRAM, + &psp->tmr_bo, &psp->tmr_mc_addr, &psp->tmr_buf); + + return ret; +} + +int psp_tmr_load(struct psp_context *psp) +{ + int ret; + struct psp_gfx_cmd_resp *cmd; + + cmd = kzalloc(sizeof(struct psp_gfx_cmd_resp), GFP_KERNEL); + if (!cmd) + return -ENOMEM; + + psp_prep_tmr_cmd_buf(psp, cmd, psp->tmr_mc_addr, PSP_TMR_SIZE); + DRM_INFO("reserve 0x%x from 0x%llx for PSP TMR SIZE\n", + PSP_TMR_SIZE, psp->tmr_mc_addr); + + ret = psp_ring_submit_cmd_buf(psp, NULL, cmd, + psp->fence_buf_mc_addr); + if (ret) + goto failed; + + kfree(cmd); + + return 0; + +failed: + kfree(cmd); + return ret; +} diff --git a/drivers/gpu/drm/amd/amdgpu/psp_tmr.h b/drivers/gpu/drm/amd/amdgpu/psp_tmr.h new file mode 100644 index 000000000000..35328dd122c6 --- /dev/null +++ b/drivers/gpu/drm/amd/amdgpu/psp_tmr.h @@ -0,0 +1,32 @@ +/* + * Copyright 2018 Advanced Micro Devices, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef __PSP_TMR_H +#define __PSP_TMR_H + +#include "amdgpu_psp.h" + +int psp_tmr_init(struct psp_context *psp); +int psp_tmr_load(struct psp_context *psp); + +#endif -- 2.20.1 _______________________________________________ amd-gfx mailing list amd-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/amd-gfx