diff options
Diffstat (limited to 'drivers/staging/media/atomisp/pci/runtime/spctrl/src/spctrl.c')
-rw-r--r-- | drivers/staging/media/atomisp/pci/runtime/spctrl/src/spctrl.c | 42 |
1 files changed, 22 insertions, 20 deletions
diff --git a/drivers/staging/media/atomisp/pci/runtime/spctrl/src/spctrl.c b/drivers/staging/media/atomisp/pci/runtime/spctrl/src/spctrl.c index db39fa273251..753a99703f1e 100644 --- a/drivers/staging/media/atomisp/pci/runtime/spctrl/src/spctrl.c +++ b/drivers/staging/media/atomisp/pci/runtime/spctrl/src/spctrl.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Support for Intel Camera Imaging ISP subsystem. * Copyright (c) 2010 - 2015, Intel Corporation. @@ -12,11 +13,12 @@ * more details. */ +#include "hmm.h" + #include "ia_css_types.h" #define __INLINE_SP__ #include "sp.h" -#include "memory_access.h" #include "assert_support.h" #include "ia_css_spctrl.h" #include "ia_css_debug.h" @@ -26,7 +28,7 @@ struct spctrl_context_info { u32 spctrl_config_dmem_addr; /* location of dmem_cfg in SP dmem */ u32 spctrl_state_dmem_addr; unsigned int sp_entry; /* entry function ptr on SP */ - hrt_vaddress code_addr; /* sp firmware location in host mem-DDR*/ + ia_css_ptr code_addr; /* sp firmware location in host mem-DDR*/ u32 code_size; char *program_name; /* used in case of PLATFORM_SIM */ }; @@ -35,14 +37,14 @@ static struct spctrl_context_info spctrl_cofig_info[N_SP_ID]; static bool spctrl_loaded[N_SP_ID] = {0}; /* Load firmware */ -enum ia_css_err ia_css_spctrl_load_fw(sp_ID_t sp_id, +int ia_css_spctrl_load_fw(sp_ID_t sp_id, ia_css_spctrl_cfg *spctrl_cfg) { - hrt_vaddress code_addr = mmgr_NULL; + ia_css_ptr code_addr = mmgr_NULL; struct ia_css_sp_init_dmem_cfg *init_dmem_cfg; if ((sp_id >= N_SP_ID) || (!spctrl_cfg)) - return IA_CSS_ERR_INVALID_ARGUMENTS; + return -EINVAL; spctrl_cofig_info[sp_id].code_addr = mmgr_NULL; @@ -63,17 +65,17 @@ enum ia_css_err ia_css_spctrl_load_fw(sp_ID_t sp_id, * Data used to be stored separately, because of access alignment constraints, * fix the FW generation instead */ - code_addr = mmgr_malloc(spctrl_cfg->code_size); + code_addr = hmm_alloc(spctrl_cfg->code_size, HMM_BO_PRIVATE, 0, NULL, 0); if (code_addr == mmgr_NULL) - return IA_CSS_ERR_CANNOT_ALLOCATE_MEMORY; - mmgr_store(code_addr, spctrl_cfg->code, spctrl_cfg->code_size); + return -ENOMEM; + hmm_store(code_addr, spctrl_cfg->code, spctrl_cfg->code_size); - if (sizeof(hrt_vaddress) > sizeof(hrt_data)) { + if (sizeof(ia_css_ptr) > sizeof(hrt_data)) { ia_css_debug_dtrace(IA_CSS_DEBUG_ERROR, - "size of hrt_vaddress can not be greater than hrt_data\n"); + "size of ia_css_ptr can not be greater than hrt_data\n"); hmm_free(code_addr); code_addr = mmgr_NULL; - return IA_CSS_ERR_INTERNAL_ERROR; + return -EINVAL; } init_dmem_cfg->ddr_data_addr = code_addr + spctrl_cfg->ddr_data_offset; @@ -82,7 +84,7 @@ enum ia_css_err ia_css_spctrl_load_fw(sp_ID_t sp_id, "DDR address pointer is not properly aligned for DMA transfer\n"); hmm_free(code_addr); code_addr = mmgr_NULL; - return IA_CSS_ERR_INTERNAL_ERROR; + return -EINVAL; } spctrl_cofig_info[sp_id].sp_entry = spctrl_cfg->sp_entry; @@ -96,7 +98,7 @@ enum ia_css_err ia_css_spctrl_load_fw(sp_ID_t sp_id, (hrt_data)spctrl_cofig_info[sp_id].code_addr); sp_ctrl_setbit(sp_id, SP_ICACHE_INV_REG, SP_ICACHE_INV_BIT); spctrl_loaded[sp_id] = true; - return IA_CSS_SUCCESS; + return 0; } /* ISP2401 */ @@ -112,15 +114,15 @@ void sh_css_spctrl_reload_fw(sp_ID_t sp_id) spctrl_loaded[sp_id] = true; } -hrt_vaddress get_sp_code_addr(sp_ID_t sp_id) +ia_css_ptr get_sp_code_addr(sp_ID_t sp_id) { return spctrl_cofig_info[sp_id].code_addr; } -enum ia_css_err ia_css_spctrl_unload_fw(sp_ID_t sp_id) +int ia_css_spctrl_unload_fw(sp_ID_t sp_id) { if ((sp_id >= N_SP_ID) || ((sp_id < N_SP_ID) && (!spctrl_loaded[sp_id]))) - return IA_CSS_ERR_INVALID_ARGUMENTS; + return -EINVAL; /* freeup the resource */ if (spctrl_cofig_info[sp_id].code_addr) { @@ -128,14 +130,14 @@ enum ia_css_err ia_css_spctrl_unload_fw(sp_ID_t sp_id) spctrl_cofig_info[sp_id].code_addr = mmgr_NULL; } spctrl_loaded[sp_id] = false; - return IA_CSS_SUCCESS; + return 0; } /* Initialize dmem_cfg in SP dmem and start SP program*/ -enum ia_css_err ia_css_spctrl_start(sp_ID_t sp_id) +int ia_css_spctrl_start(sp_ID_t sp_id) { if ((sp_id >= N_SP_ID) || ((sp_id < N_SP_ID) && (!spctrl_loaded[sp_id]))) - return IA_CSS_ERR_INVALID_ARGUMENTS; + return -EINVAL; /* Set descr in the SP to initialize the SP DMEM */ /* @@ -154,7 +156,7 @@ enum ia_css_err ia_css_spctrl_start(sp_ID_t sp_id) (hrt_data)spctrl_cofig_info[sp_id].sp_entry); sp_ctrl_setbit(sp_id, SP_SC_REG, SP_RUN_BIT); sp_ctrl_setbit(sp_id, SP_SC_REG, SP_START_BIT); - return IA_CSS_SUCCESS; + return 0; } /* Query the state of SP1 */ |