3  * Support for Intel Camera Imaging ISP subsystem.
 
   4  * Copyright (c) 2015, Intel Corporation.
 
   6  * This program is free software; you can redistribute it and/or modify it
 
   7  * under the terms and conditions of the GNU General Public License,
 
   8  * version 2, as published by the Free Software Foundation.
 
  10  * This program is distributed in the hope it will be useful, but WITHOUT
 
  11  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 
  12  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
 
  16 #include "ia_css_bayer_io.host.h"
 
  18 #include "math_support.h"
 
  19 #ifndef IA_CSS_NO_DEBUG
 
  20 #include "ia_css_debug.h"
 
  22 #include "ia_css_isp_params.h"
 
  23 #include "ia_css_frame.h"
 
  26 ia_css_bayer_io_config(
 
  27     const struct ia_css_binary      *binary,
 
  28     const struct sh_css_binary_args *args)
 
  30         const struct ia_css_frame *in_frame = args->in_frame;
 
  31         const struct ia_css_frame **out_frames = (const struct ia_css_frame **)
 
  33         const struct ia_css_frame_info *in_frame_info = (in_frame) ? &in_frame->info :
 
  34                 &binary->in_frame_info;
 
  36         const unsigned int ddr_bits_per_element = sizeof(short) * 8;
 
  37         const unsigned int ddr_elems_per_word = ceil_div(HIVE_ISP_DDR_WORD_BITS,
 
  38                                                 ddr_bits_per_element);
 
  39         unsigned int size_get = 0, size_put = 0;
 
  40         unsigned int offset = 0;
 
  42         if (binary->info->mem_offsets.offsets.param) {
 
  43                 size_get = binary->info->mem_offsets.offsets.param->dmem.get.size;
 
  44                 offset = binary->info->mem_offsets.offsets.param->dmem.get.offset;
 
  48                 struct ia_css_common_io_config *to = (struct ia_css_common_io_config *)
 
  49                                                      &binary->mem_params.params[IA_CSS_PARAM_CLASS_PARAM][IA_CSS_ISP_DMEM].address[offset];
 
  50                 struct dma_port_config config;
 
  51 #ifndef IA_CSS_NO_DEBUG
 
  52                 ia_css_debug_dtrace(IA_CSS_DEBUG_TRACE_PRIVATE,
 
  53                                     "ia_css_bayer_io_config() get part enter:\n");
 
  56                 ia_css_dma_configure_from_info(&config, in_frame_info);
 
  57                 // The base_address of the input frame will be set in the ISP
 
  58                 to->width = in_frame_info->res.width;
 
  59                 to->height = in_frame_info->res.height;
 
  60                 to->stride = config.stride;
 
  61                 to->ddr_elems_per_word = ddr_elems_per_word;
 
  62 #ifndef IA_CSS_NO_DEBUG
 
  63                 ia_css_debug_dtrace(IA_CSS_DEBUG_TRACE_PRIVATE,
 
  64                                     "ia_css_bayer_io_config() get part leave:\n");
 
  68         if (binary->info->mem_offsets.offsets.param) {
 
  69                 size_put = binary->info->mem_offsets.offsets.param->dmem.put.size;
 
  70                 offset = binary->info->mem_offsets.offsets.param->dmem.put.offset;
 
  74                 struct ia_css_common_io_config *to = (struct ia_css_common_io_config *)
 
  75                                                      &binary->mem_params.params[IA_CSS_PARAM_CLASS_PARAM][IA_CSS_ISP_DMEM].address[offset];
 
  76                 struct dma_port_config config;
 
  77 #ifndef IA_CSS_NO_DEBUG
 
  78                 ia_css_debug_dtrace(IA_CSS_DEBUG_TRACE_PRIVATE,
 
  79                                     "ia_css_bayer_io_config() put part enter:\n");
 
  82                 ia_css_dma_configure_from_info(&config, &out_frames[0]->info);
 
  83                 to->base_address = out_frames[0]->data;
 
  84                 to->width = out_frames[0]->info.res.width;
 
  85                 to->height = out_frames[0]->info.res.height;
 
  86                 to->stride = config.stride;
 
  87                 to->ddr_elems_per_word = ddr_elems_per_word;
 
  89 #ifndef IA_CSS_NO_DEBUG
 
  90                 ia_css_debug_dtrace(IA_CSS_DEBUG_TRACE_PRIVATE,
 
  91                                     "ia_css_bayer_io_config() put part leave:\n");