return ret;
/* Init ISP */
- err = ia_css_init(&isp->css_env.isp_css_env, NULL,
+ err = ia_css_init(isp->dev, &isp->css_env.isp_css_env, NULL,
(uint32_t)mmu_base_addr, IA_CSS_IRQ_TYPE_PULSE);
if (err != IA_CSS_SUCCESS) {
dev_err(isp->dev, "css init failed --- bad firmware?\n");
int atomisp_css_check_firmware_version(struct atomisp_device *isp)
{
- if (!sh_css_check_firmware_version((void *)isp->firmware->data)) {
- dev_err(isp->dev, "Fw version check failed.\n");
+ if (!sh_css_check_firmware_version(isp->dev, (void *)isp->firmware->data)) {
return -EINVAL;
}
return 0;
isp->css_env.isp_css_env.print_env.error_print = atomisp_css2_err_print;
/* load isp fw into ISP memory */
- err = ia_css_load_firmware(&isp->css_env.isp_css_env,
+ err = ia_css_load_firmware(isp->dev, &isp->css_env.isp_css_env,
&isp->css_env.isp_css_fw);
if (err != IA_CSS_SUCCESS) {
dev_err(isp->dev, "css load fw failed.\n");
return -EINVAL;
}
- ret = ia_css_init(&isp->css_env.isp_css_env, NULL,
+ ret = ia_css_init(isp->dev, &isp->css_env.isp_css_env, NULL,
mmu_base_addr, IA_CSS_IRQ_TYPE_PULSE);
if (ret) {
dev_err(isp->dev, "re-init css failed.\n");
* contents of this firmware package are copied into local data structures, so
* the fw pointer could be freed after this function completes.
*/
-enum ia_css_err ia_css_init(
- const struct ia_css_env *env,
- const struct ia_css_fw *fw,
- u32 l1_base,
- enum ia_css_irq_type irq_type);
+enum ia_css_err ia_css_init(struct device *dev,
+ const struct ia_css_env *env,
+ const struct ia_css_fw *fw,
+ u32 l1_base,
+ enum ia_css_irq_type irq_type);
/* @brief Un-initialize the CSS API.
* @return None
void
ia_css_uninit(void);
-/* @brief Suspend CSS API for power down
- * @return success or faulure code
- *
- * suspend shuts down the system by:
- * unloading all the streams
- * stopping SP
- * performing uninit
- *
- * Currently stream memory is deallocated because of rmmgr issues.
- * Need to come up with a bypass that will leave the streams intact.
- */
-enum ia_css_err
-ia_css_suspend(void);
-
-/* @brief Resume CSS API from power down
- * @return success or failure code
- *
- * After a power cycle, this function will bring the CSS API back into
- * a state where it can be started.
- * This will re-initialize the hardware and all the streams.
- * Call this function only after ia_css_suspend() has been called.
- */
-enum ia_css_err
-ia_css_resume(void);
-
/* @brief Enable use of a separate queue for ISYS events.
*
* @param[in] enable: enable or disable use of separate ISYS event queues.
* firmware only needs to be loaded once).
*/
enum ia_css_err
-ia_css_load_firmware(const struct ia_css_env *env,
+ia_css_load_firmware(struct device *dev, const struct ia_css_env *env,
const struct ia_css_fw *fw);
/* @brief Unloads the firmware
void
ia_css_unload_firmware(void);
-/* @brief Checks firmware version
- * @param[in] fw Firmware package containing the firmware for all
- * predefined ISP binaries.
- * @return Returns true when the firmware version matches with the CSS
- * host code version and returns false otherwise.
- * This function checks if the firmware package version matches with the CSS host code version.
- */
-bool
-ia_css_check_firmware_version(const struct ia_css_fw *fw);
-
#endif /* __IA_CSS_FIRMWARE_H */
*css = default_css;
}
-bool
-ia_css_check_firmware_version(const struct ia_css_fw *fw)
-{
- bool retval = false;
-
- if (fw) {
- retval = sh_css_check_firmware_version(fw->data);
- }
- return retval;
-}
-
enum ia_css_err
-ia_css_load_firmware(const struct ia_css_env *env,
+ia_css_load_firmware(struct device *dev, const struct ia_css_env *env,
const struct ia_css_fw *fw) {
enum ia_css_err err;
}
ia_css_unload_firmware(); /* in case we are called twice */
- err = sh_css_load_firmware(fw->data, fw->bytes);
+ err = sh_css_load_firmware(dev, fw->data, fw->bytes);
if (err == IA_CSS_SUCCESS)
{
err = ia_css_binary_init_infos();
}
enum ia_css_err
-ia_css_init(const struct ia_css_env *env,
+ia_css_init(struct device *dev, const struct ia_css_env *env,
const struct ia_css_fw *fw,
u32 mmu_l1_base,
enum ia_css_irq_type irq_type) {
if (fw)
{
ia_css_unload_firmware(); /* in case we already had firmware loaded */
- err = sh_css_load_firmware(fw->data, fw->bytes);
+ err = sh_css_load_firmware(dev, fw->data, fw->bytes);
if (err != IA_CSS_SUCCESS) {
IA_CSS_LEAVE_ERR(err);
return err;
return err;
}
-enum ia_css_err ia_css_suspend(void)
-{
- int i;
-
- ia_css_debug_dtrace(IA_CSS_DEBUG_TRACE, "ia_css_suspend() enter\n");
- my_css_save.mode = sh_css_mode_suspend;
- for (i = 0; i < MAX_ACTIVE_STREAMS; i++)
- if (my_css_save.stream_seeds[i].stream) {
- ia_css_debug_dtrace(IA_CSS_DEBUG_TRACE, "==*> unloading seed %d (%p)\n", i,
- my_css_save.stream_seeds[i].stream);
- ia_css_stream_unload(my_css_save.stream_seeds[i].stream);
- }
- my_css_save.mode = sh_css_mode_working;
- ia_css_stop_sp();
- ia_css_uninit();
- for (i = 0; i < MAX_ACTIVE_STREAMS; i++)
- ia_css_debug_dtrace(IA_CSS_DEBUG_TRACE, "==*> after 1: seed %d (%p)\n", i,
- my_css_save.stream_seeds[i].stream);
- ia_css_debug_dtrace(IA_CSS_DEBUG_TRACE, "ia_css_suspend() leave\n");
- return IA_CSS_SUCCESS;
-}
-
-enum ia_css_err
-ia_css_resume(void) {
- int i, j;
- enum ia_css_err err;
-
- ia_css_debug_dtrace(IA_CSS_DEBUG_TRACE, "ia_css_resume() enter: void\n");
-
- err = ia_css_init(&my_css_save.driver_env, my_css_save.loaded_fw, my_css_save.mmu_base, my_css_save.irq_type);
- if (err != IA_CSS_SUCCESS)
- return err;
- err = ia_css_start_sp();
- if (err != IA_CSS_SUCCESS)
- return err;
- my_css_save.mode = sh_css_mode_resume;
- for (i = 0; i < MAX_ACTIVE_STREAMS; i++)
- {
- ia_css_debug_dtrace(IA_CSS_DEBUG_TRACE, "==*> seed stream %p\n",
- my_css_save.stream_seeds[i].stream);
- if (my_css_save.stream_seeds[i].stream) {
- ia_css_debug_dtrace(IA_CSS_DEBUG_TRACE, "==*> loading seed %d\n", i);
- err = ia_css_stream_load(my_css_save.stream_seeds[i].stream);
- if (err != IA_CSS_SUCCESS) {
- if (i)
- for (j = 0; j < i; j++)
- ia_css_stream_unload(my_css_save.stream_seeds[j].stream);
- return err;
- }
- err = ia_css_stream_start(my_css_save.stream_seeds[i].stream);
- if (err != IA_CSS_SUCCESS) {
- for (j = 0; j <= i; j++) {
- ia_css_stream_stop(my_css_save.stream_seeds[j].stream);
- ia_css_stream_unload(my_css_save.stream_seeds[j].stream);
- }
- return err;
- }
- *my_css_save.stream_seeds[i].orig_stream = my_css_save.stream_seeds[i].stream;
- for (j = 0; j < my_css_save.stream_seeds[i].num_pipes; j++)
- *my_css_save.stream_seeds[i].orig_pipes[j] =
- my_css_save.stream_seeds[i].pipes[j];
- }
- }
- my_css_save.mode = sh_css_mode_working;
- ia_css_debug_dtrace(IA_CSS_DEBUG_TRACE, "ia_css_resume() leave: return_void\n");
- return IA_CSS_SUCCESS;
-}
-
enum ia_css_err
ia_css_enable_isys_event_queue(bool enable) {
if (sh_css_sp_is_running())
}
bool
-sh_css_check_firmware_version(const char *fw_data)
+sh_css_check_firmware_version(struct device *dev, const char *fw_data)
{
struct sh_css_fw_bi_file_h *file_header;
file_header = &firmware_header->file_header;
if (strcmp(file_header->version, release_version) != 0) {
+ dev_err(dev, "Fw version check failed. Expecting '%s', firmware is '%s'.\n",
+ release_version, file_header->version);
return false;
} else {
/* firmware version matches */
}
enum ia_css_err
-sh_css_load_firmware(const char *fw_data,
+sh_css_load_firmware(struct device *dev, const char *fw_data,
unsigned int fw_size) {
unsigned int i;
struct ia_css_fw_info *binaries;
file_header = &firmware_header->file_header;
binaries = &firmware_header->binary_header;
strncpy(FW_rel_ver_name, file_header->version, min(sizeof(FW_rel_ver_name), sizeof(file_header->version)) - 1);
- valid_firmware = sh_css_check_firmware_version(fw_data);
+ valid_firmware = sh_css_check_firmware_version(dev, fw_data);
if (!valid_firmware) {
IA_CSS_ERROR("CSS code version (%s) and firmware version (%s) mismatch!",
file_header->version, release_version);
*sh_css_get_fw_version(void);
bool
-sh_css_check_firmware_version(const char *fw_data);
+sh_css_check_firmware_version(struct device *dev, const char *fw_data);
enum ia_css_err
-sh_css_load_firmware(const char *fw_data,
+sh_css_load_firmware(struct device *dev, const char *fw_data,
unsigned int fw_size);
void sh_css_unload_firmware(void);