/* * hal_ive.c- Sigmastar * * Copyright (c) [2019~2020] SigmaStar Technology. * * * This software is licensed under the terms of the GNU General Public * License version 2, as published by the Free Software Foundation, and * may be copied, distributed, and modified under those terms. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License version 2 for more details. * */ #include "mdrv_ive.h" #include "hal_ive.h" #include "hal_ive_simulate.h" #include "ms_platform.h" #define HAL_MIU1_BASE 0x80000000 #define ADDR_LOW(addr) (((u32)(addr))&0x0000FFFF) #define ADDR_HIGH(addr) ((((u32)(addr))&0xFFFF0000)>>16) #if 1 #define REGR(base,idx) ms_readw(((uint)base+(idx)*4)) #define REGW(base,idx,val) ms_writew(val,((uint)base+(idx)*4)) #else #define REGR(base,idx) ms_readw(((uint)base+(idx)*4)) #define REGW(base,idx,val) do{IVE_MSG(IVE_MSG_DBG, "write 0x%08X = 0x%04X\n", ((uint)base+(idx)*4), val); ms_writew(val,((uint)base+(idx)*4));} while(0) #endif #define REMOVE_MIU1_OFFSET(input_addr) ((u64)input_addr -0x80000000) ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // // // IRQ API // // // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /******************************************************************************************************************* * ive_hal_init * init IVE HAL layer * * Parameters: * handle: IVE HAL handle * base_addr0: base address 0 * base_addr1: base address 1 * * Return: * none */ void ive_hal_init(ive_hal_handle *handle, phys_addr_t base_addr0, phys_addr_t base_addr1) { memset(handle, 0, sizeof(ive_hal_handle)); handle->base_addr0 = base_addr0; handle->base_addr1 = base_addr1; } /******************************************************************************************************************* * ive_hal_set_irq_mask * Set interrupt trigger mask * * Parameters: * handle: IVE HAL handle * mask: Bitwize mask, defined in IveHalIrqEvent_e * * Return: * none */ void ive_hal_set_irq_mask(ive_hal_handle *handle, IVE_HAL_IRQ_MASK mask) { handle->reg_bank0.irq_mask = ~mask; REGW(handle->base_addr0, 0x10, handle->reg_bank0.reg10); } /******************************************************************************************************************* * ive_hal_clear_irq * Clear triggered interrupt * * Parameters: * handle: IVE HAL handle * mask: Bitwize mask, defined in IveHalIrqEvent_e * * Return: * none */ void ive_hal_clear_irq(ive_hal_handle *handle, IVE_HAL_IRQ_MASK mask) { handle->reg_bank0.woc_irq_clr = mask; REGW(handle->base_addr0, 0x15, handle->reg_bank0.reg15); } /******************************************************************************************************************* * ive_hal_get_irq_check * Check current IRQ status * * Parameters: * handle: IVE HAL handle * mask: Bitwise mask to be checked * * Return: * Checked result, bitwise */ IVE_HAL_IRQ_MASK ive_hal_get_irq_check(ive_hal_handle *handle, IVE_HAL_IRQ_MASK mask) { #if !defined(IVE_SW_SIMULATE) handle->reg_bank0.irq_final_status = REGR(handle->base_addr0, 0x13); #else // defined(IVE_SW_SIMULATE) handle->reg_bank0.irq_final_status = IVE_HAL_IRQ_MASK_FRAME_DONE; #endif // defined(IVE_SW_SIMULATE) return handle->reg_bank0.irq_final_status & mask; } /******************************************************************************************************************* * ive_hal_get_irq * Get current interrupt trigger status * * Parameters: * handle: IVE HAL handle * mask: Bitwize mask, defined in IveHalIrqEvent_e * * Return: * Bitwize status */ u16 ive_hal_get_irq(ive_hal_handle *handle) { #if !defined(IVE_SW_SIMULATE) handle->reg_bank0.irq_final_status = REGR(handle->base_addr0, 0x13); #else // defined(IVE_SW_SIMULATE) handle->reg_bank0.irq_final_status = IVE_HAL_IRQ_MASK_FRAME_DONE; #endif // defined(IVE_SW_SIMULATE) return handle->reg_bank0.irq_final_status; } /******************************************************************************************************************* * ive_hal_set_operation * Set operation of IVE HW * * Parameters: * handle: IVE HAL handle * op_type: operation type * op_mode: operation mode * * Return: * none */ void ive_hal_set_operation(ive_hal_handle *handle, IVE_IOC_OP_TYPE op_type) { handle->reg_bank1.op_type = op_type; REGW(handle->base_addr1, 0x04, handle->reg_bank1.reg04); } /******************************************************************************************************************* * ive_hal_miu_set * Set miu value * * Parameters: * handle: IVE HAL handle * * Return: * none */ void ive_hal_miu_set(ive_hal_handle *handle, int miu_state) { handle->reg_bank0.miu_sel = miu_state; REGW(handle->base_addr0, 0x03, handle->reg_bank0.reg03); } /******************************************************************************************************************* * ive_hal_set_images * Set input & output image * * Parameters: * handle: IVE HAL handle * input: input image * output: output image * * Return: * none */ void ive_hal_set_images(ive_hal_handle *handle, ive_ioc_image *input, ive_ioc_image *output) { int miu_value; u64 input_addr0, input_addr1, input_addr2, output_addr0, output_addr1, output_addr2; IVE_MSG(IVE_MSG_DBG, "Ori -input : address[0] = 0x%p\n",(unsigned char*)input->address[0]); IVE_MSG(IVE_MSG_DBG, "Ori -input : address[1] = 0x%p\n",(unsigned char*)input->address[1]); IVE_MSG(IVE_MSG_DBG, "Ori -input : address[2] = 0x%p\n",(unsigned char*)input->address[2]); #if defined(USE_MIU_DIRECT) input_addr0 = (uintptr_t)(input->address[0]); input_addr1 = (uintptr_t)(input->address[1]); input_addr2 = (uintptr_t)(input->address[2]); output_addr0 = (uintptr_t)(output->address[0]); output_addr1 = (uintptr_t)(output->address[1]); output_addr2 = (uintptr_t)(output->address[2]); #else input_addr0 = Chip_Phys_to_MIU((uintptr_t)input->address[0]); input_addr1 = Chip_Phys_to_MIU((uintptr_t)input->address[1]); input_addr2 = Chip_Phys_to_MIU((uintptr_t)input->address[2]); output_addr0 = Chip_Phys_to_MIU((uintptr_t)output->address[0]); output_addr1 = Chip_Phys_to_MIU((uintptr_t)output->address[1]); output_addr2 = Chip_Phys_to_MIU((uintptr_t)output->address[2]); #endif //Check address and switch MIU if( (input_addr0 >= HAL_MIU1_BASE) || (input_addr1 >= HAL_MIU1_BASE) || (input_addr2 >= HAL_MIU1_BASE) ) { input_addr0 = REMOVE_MIU1_OFFSET(input_addr0); input_addr1 = REMOVE_MIU1_OFFSET(input_addr1); input_addr2 = REMOVE_MIU1_OFFSET(input_addr2); output_addr0 = REMOVE_MIU1_OFFSET(output_addr0); output_addr1 = REMOVE_MIU1_OFFSET(output_addr1); output_addr2 = REMOVE_MIU1_OFFSET(output_addr2); miu_value = 1; ive_hal_miu_set(handle, miu_value); } else { miu_value = 0; ive_hal_miu_set(handle, miu_value); } IVE_MSG(IVE_MSG_DBG, "Final - input_addr0 = %lld\n", input_addr0); IVE_MSG(IVE_MSG_DBG, "Final - input_addr1 = %lld\n", input_addr1); IVE_MSG(IVE_MSG_DBG, "Final - input_addr2 = %lld\n", input_addr2); IVE_MSG(IVE_MSG_DBG, "Final - output_addr0 = %lld\n", output_addr0); IVE_MSG(IVE_MSG_DBG, "Final - output_addr1 = %lld\n", output_addr1); IVE_MSG(IVE_MSG_DBG, "Final - output_addr2 = %lld\n", output_addr2); IVE_MSG(IVE_MSG_DBG, "bank 0 reg 0x%02X = 0x%04x\n", 0x03, REGR(handle->base_addr0, 0x03)); //MIU Register handle->reg_bank1.infmt = input->format; handle->reg_bank1.outfmt = output->format; handle->reg_bank1.frame_width = input->width -1; handle->reg_bank1.frame_height = input->height -1; handle->reg_bank1.src1_addr_low = ADDR_LOW( input_addr0); handle->reg_bank1.src1_addr_high = ADDR_HIGH(input_addr0); handle->reg_bank1.src2_addr_low = ADDR_LOW( input_addr1); handle->reg_bank1.src2_addr_high = ADDR_HIGH(input_addr1); handle->reg_bank1.src3_addr_low = ADDR_LOW( input_addr2); handle->reg_bank1.src3_addr_high = ADDR_HIGH(input_addr2); handle->reg_bank1.src1_stride = input->stride[0] -1; handle->reg_bank1.src2_stride = input->stride[1] -1; handle->reg_bank1.src3_stride = input->stride[2] -1; handle->reg_bank1.dst1_addr_low = ADDR_LOW( output_addr0); handle->reg_bank1.dst1_addr_high = ADDR_HIGH(output_addr0); handle->reg_bank1.dst2_addr_low = ADDR_LOW( output_addr1); handle->reg_bank1.dst2_addr_high = ADDR_HIGH(output_addr1); handle->reg_bank1.dst3_addr_low = ADDR_LOW( output_addr2); handle->reg_bank1.dst3_addr_high = ADDR_HIGH(output_addr2); handle->reg_bank1.dst1_stride = output->stride[0] -1; handle->reg_bank1.dst2_stride = output->stride[1] -1; handle->reg_bank1.dst3_stride = output->stride[2] -1; REGW(handle->base_addr1, 0x05, handle->reg_bank1.reg05); REGW(handle->base_addr1, 0x06, handle->reg_bank1.reg06); REGW(handle->base_addr1, 0x07, handle->reg_bank1.reg07); REGW(handle->base_addr1, 0x08, handle->reg_bank1.reg08); REGW(handle->base_addr1, 0x09, handle->reg_bank1.reg09); REGW(handle->base_addr1, 0x0A, handle->reg_bank1.reg0A); REGW(handle->base_addr1, 0x0B, handle->reg_bank1.reg0B); REGW(handle->base_addr1, 0x0C, handle->reg_bank1.reg0C); REGW(handle->base_addr1, 0x0D, handle->reg_bank1.reg0D); REGW(handle->base_addr1, 0x0E, handle->reg_bank1.reg0E); REGW(handle->base_addr1, 0x0F, handle->reg_bank1.reg0F); REGW(handle->base_addr1, 0x10, handle->reg_bank1.reg10); REGW(handle->base_addr1, 0x11, handle->reg_bank1.reg11); REGW(handle->base_addr1, 0x12, handle->reg_bank1.reg12); REGW(handle->base_addr1, 0x13, handle->reg_bank1.reg13); REGW(handle->base_addr1, 0x14, handle->reg_bank1.reg14); REGW(handle->base_addr1, 0x15, handle->reg_bank1.reg15); REGW(handle->base_addr1, 0x16, handle->reg_bank1.reg16); REGW(handle->base_addr1, 0x17, handle->reg_bank1.reg17); REGW(handle->base_addr1, 0x18, handle->reg_bank1.reg18); REGW(handle->base_addr1, 0x19, handle->reg_bank1.reg19); } /******************************************************************************************************************* * ive_hal_set_coeff_mask * Set mask coefficient * * Parameters: * handle: IVE HAL handle * mask: mask coefficient * * Return: * none */ static void ive_hal_set_coeff_mask(ive_hal_handle *handle, u8 *mask, u8 shift) { handle->reg_bank1.mask0 = mask[0]; handle->reg_bank1.mask1 = mask[1]; handle->reg_bank1.mask2 = mask[2]; handle->reg_bank1.mask3 = mask[3]; handle->reg_bank1.mask4 = mask[4]; handle->reg_bank1.mask5 = mask[5]; handle->reg_bank1.mask6 = mask[6]; handle->reg_bank1.mask7 = mask[7]; handle->reg_bank1.mask8 = mask[8]; handle->reg_bank1.mask9 = mask[9]; handle->reg_bank1.mask10 = mask[10]; handle->reg_bank1.mask11 = mask[11]; handle->reg_bank1.mask12 = mask[12]; handle->reg_bank1.mask13 = mask[13]; handle->reg_bank1.mask14 = mask[14]; handle->reg_bank1.mask15 = mask[15]; handle->reg_bank1.mask16 = mask[16]; handle->reg_bank1.mask17 = mask[17]; handle->reg_bank1.mask18 = mask[18]; handle->reg_bank1.mask19 = mask[19]; handle->reg_bank1.mask20 = mask[20]; handle->reg_bank1.mask21 = mask[21]; handle->reg_bank1.mask22 = mask[22]; handle->reg_bank1.mask23 = mask[23]; handle->reg_bank1.mask24 = mask[24]; handle->reg_bank1.shift = shift; REGW(handle->base_addr1, 0x1A, handle->reg_bank1.reg1A); REGW(handle->base_addr1, 0x1B, handle->reg_bank1.reg1B); REGW(handle->base_addr1, 0x1C, handle->reg_bank1.reg1C); REGW(handle->base_addr1, 0x1D, handle->reg_bank1.reg1D); REGW(handle->base_addr1, 0x1E, handle->reg_bank1.reg1E); REGW(handle->base_addr1, 0x1F, handle->reg_bank1.reg1F); REGW(handle->base_addr1, 0x20, handle->reg_bank1.reg20); REGW(handle->base_addr1, 0x21, handle->reg_bank1.reg21); REGW(handle->base_addr1, 0x22, handle->reg_bank1.reg22); REGW(handle->base_addr1, 0x23, handle->reg_bank1.reg23); REGW(handle->base_addr1, 0x24, handle->reg_bank1.reg24); REGW(handle->base_addr1, 0x25, handle->reg_bank1.reg25); REGW(handle->base_addr1, 0x26, handle->reg_bank1.reg26); } /******************************************************************************************************************* * ive_hal_set_coeff_filter * Set filter coefficient * * Parameters: * handle: IVE HAL handle * coeff: coefficient * * Return: * none */ void ive_hal_set_coeff_filter(ive_hal_handle *handle, ive_ioc_coeff_filter *coeff) { ive_hal_set_coeff_mask(handle, coeff->mask, coeff->shift); } /******************************************************************************************************************* * ive_hal_set_coeff_csc * Set CSC coefficient * * Parameters: * handle: IVE HAL handle * coeff: CSC coefficient * * Return: * none */ void ive_hal_set_coeff_csc(ive_hal_handle *handle, ive_ioc_coeff_csc *coeff) { handle->reg_bank1.csc_coeff0 = coeff->coeff[0]; handle->reg_bank1.csc_coeff1 = coeff->coeff[1]; handle->reg_bank1.csc_coeff2 = coeff->coeff[2]; handle->reg_bank1.csc_coeff3 = coeff->coeff[3]; handle->reg_bank1.csc_coeff4 = coeff->coeff[4]; handle->reg_bank1.csc_coeff5 = coeff->coeff[5]; handle->reg_bank1.csc_coeff6 = coeff->coeff[6]; handle->reg_bank1.csc_coeff7 = coeff->coeff[7]; handle->reg_bank1.csc_coeff8 = coeff->coeff[8]; handle->reg_bank1.csc_offset0 = coeff->offset[0]; handle->reg_bank1.csc_offset1 = coeff->offset[1]; handle->reg_bank1.csc_offset2 = coeff->offset[2]; handle->reg_bank1.csc_clamp0_low = coeff->clamp[0].clamp_low; handle->reg_bank1.csc_clamp0_high = coeff->clamp[0].clamp_high; handle->reg_bank1.csc_clamp1_low = coeff->clamp[1].clamp_low; handle->reg_bank1.csc_clamp1_high = coeff->clamp[1].clamp_high; handle->reg_bank1.csc_clamp2_low = coeff->clamp[2].clamp_low; handle->reg_bank1.csc_clamp2_high = coeff->clamp[2].clamp_high; REGW(handle->base_addr1, 0x30, handle->reg_bank1.reg30); REGW(handle->base_addr1, 0x31, handle->reg_bank1.reg31); REGW(handle->base_addr1, 0x32, handle->reg_bank1.reg32); REGW(handle->base_addr1, 0x33, handle->reg_bank1.reg33); REGW(handle->base_addr1, 0x34, handle->reg_bank1.reg34); REGW(handle->base_addr1, 0x35, handle->reg_bank1.reg35); REGW(handle->base_addr1, 0x36, handle->reg_bank1.reg36); REGW(handle->base_addr1, 0x37, handle->reg_bank1.reg37); REGW(handle->base_addr1, 0x38, handle->reg_bank1.reg38); REGW(handle->base_addr1, 0x39, handle->reg_bank1.reg39); REGW(handle->base_addr1, 0x3A, handle->reg_bank1.reg3A); REGW(handle->base_addr1, 0x3B, handle->reg_bank1.reg3B); REGW(handle->base_addr1, 0x3C, handle->reg_bank1.reg3C); REGW(handle->base_addr1, 0x3D, handle->reg_bank1.reg3D); REGW(handle->base_addr1, 0x3E, handle->reg_bank1.reg3E); } /******************************************************************************************************************* * ive_hal_set_coeff_sobel * Set sobel coefficient * * Parameters: * handle: IVE HAL handle * coeff: coefficient * * Return: * none */ void ive_hal_set_coeff_sobel(ive_hal_handle *handle, ive_ioc_coeff_sobel *coeff) { ive_hal_set_coeff_mask(handle, coeff->mask, 0); handle->reg_bank1.outfmt = coeff->mode; REGW(handle->base_addr1, 0x05, handle->reg_bank1.reg05); } /******************************************************************************************************************* * ive_hal_set_coeff_mag_and_ang * Set mag and ang coefficient * * Parameters: * handle: IVE HAL handle * coeff: coefficient * * Return: * none */ void ive_hal_set_coeff_mag_and_ang(ive_hal_handle *handle, ive_ioc_coeff_mag_and_ang *coeff) { ive_hal_set_coeff_mask(handle, coeff->mask, 0); handle->reg_bank1.outfmt = coeff->mode; handle->reg_bank1.thresh_16bit_1 = coeff->thresh; REGW(handle->base_addr1, 0x05, handle->reg_bank1.reg05); REGW(handle->base_addr1, 0x28, handle->reg_bank1.reg28); } /******************************************************************************************************************* * ive_hal_set_coeff_ord_stat_filter * Set order statistics filter coefficient * * Parameters: * handle: IVE HAL handle * coeff: coefficient * * Return: * none */ void ive_hal_set_coeff_ord_stat_filter(ive_hal_handle *handle, ive_ioc_coeff_ord_stat_filter *coeff) { handle->reg_bank1.op_mode = coeff->mode; REGW(handle->base_addr1, 0x04, handle->reg_bank1.reg04); } /******************************************************************************************************************* * ive_hal_set_coeff_bernsen * Set bernsen coefficient * * Parameters: * handle: IVE HAL handle * coeff: coefficient * * Return: * none */ void ive_hal_set_coeff_bernsen(ive_hal_handle *handle, ive_ioc_coeff_bernsen *coeff) { handle->reg_bank1.op_mode = coeff->mode; handle->reg_bank1.thresh_16bit_1 = coeff->thresh; REGW(handle->base_addr1, 0x04, handle->reg_bank1.reg04); REGW(handle->base_addr1, 0x28, handle->reg_bank1.reg28); } /******************************************************************************************************************* * ive_hal_set_coeff_dilate * Set dilate coefficient * * Parameters: * handle: IVE HAL handle * coeff: coefficient * * Return: * none */ void ive_hal_set_coeff_dilate(ive_hal_handle *handle, ive_ioc_coeff_dilate *coeff) { ive_hal_set_coeff_mask(handle, coeff->mask, 0); } /******************************************************************************************************************* * ive_hal_set_coeff_erode * Set erode coefficient * * Parameters: * handle: IVE HAL handle * coeff: coefficient * * Return: * none */ void ive_hal_set_coeff_erode(ive_hal_handle *handle, ive_ioc_coeff_erode *coeff) { ive_hal_set_coeff_mask(handle, coeff->mask, 0); } /******************************************************************************************************************* * ive_hal_set_coeff_thresh * Set thresh coefficient * * Parameters: * handle: IVE HAL handle * coeff: coefficient * * Return: * none */ void ive_hal_set_coeff_thresh(ive_hal_handle *handle, ive_ioc_coeff_thresh *coeff) { handle->reg_bank1.op_mode = coeff->mode; handle->reg_bank1.mask0 = coeff->min; handle->reg_bank1.mask1 = coeff->mid; handle->reg_bank1.mask2 = coeff->max; handle->reg_bank1.thresh_16bit_1 = coeff->low; handle->reg_bank1.thresh_16bit_2 = coeff->high; REGW(handle->base_addr1, 0x04, handle->reg_bank1.reg04); REGW(handle->base_addr1, 0x1A, handle->reg_bank1.reg1A); REGW(handle->base_addr1, 0x1B, handle->reg_bank1.reg1B); REGW(handle->base_addr1, 0x28, handle->reg_bank1.reg28); REGW(handle->base_addr1, 0x29, handle->reg_bank1.reg29); } /******************************************************************************************************************* * ive_hal_set_coeff_thresh_s16 * Set thresh s16 coefficient * * Parameters: * handle: IVE HAL handle * coeff: coefficient * * Return: * none */ void ive_hal_set_coeff_thresh_s16(ive_hal_handle *handle, ive_ioc_coeff_thresh_s16 *coeff) { handle->reg_bank1.op_mode = coeff->mode; handle->reg_bank1.mask0 = coeff->min; handle->reg_bank1.mask1 = coeff->mid; handle->reg_bank1.mask2 = coeff->max; handle->reg_bank1.thresh_16bit_1 = coeff->low; handle->reg_bank1.thresh_16bit_2 = coeff->high; REGW(handle->base_addr1, 0x04, handle->reg_bank1.reg04); REGW(handle->base_addr1, 0x1A, handle->reg_bank1.reg1A); REGW(handle->base_addr1, 0x1B, handle->reg_bank1.reg1B); REGW(handle->base_addr1, 0x28, handle->reg_bank1.reg28); REGW(handle->base_addr1, 0x29, handle->reg_bank1.reg29); } /******************************************************************************************************************* * ive_hal_set_coeff_thresh_u16 * Set thresh u16 coefficient * * Parameters: * handle: IVE HAL handle * coeff: coefficient * * Return: * none */ void ive_hal_set_coeff_thresh_u16(ive_hal_handle *handle, ive_ioc_coeff_thresh_u16 *coeff) { handle->reg_bank1.op_mode = coeff->mode; handle->reg_bank1.mask0 = coeff->min; handle->reg_bank1.mask1 = coeff->mid; handle->reg_bank1.mask2 = coeff->max; handle->reg_bank1.thresh_16bit_1 = coeff->low; handle->reg_bank1.thresh_16bit_2 = coeff->high; REGW(handle->base_addr1, 0x04, handle->reg_bank1.reg04); REGW(handle->base_addr1, 0x1A, handle->reg_bank1.reg1A); REGW(handle->base_addr1, 0x1B, handle->reg_bank1.reg1B); REGW(handle->base_addr1, 0x28, handle->reg_bank1.reg28); REGW(handle->base_addr1, 0x29, handle->reg_bank1.reg29); } /******************************************************************************************************************* * ive_hal_set_coeff_add * Set add coefficient * * Parameters: * handle: IVE HAL handle * coeff: coefficient * * Return: * none */ void ive_hal_set_coeff_add(ive_hal_handle *handle, ive_ioc_coeff_add *coeff) { handle->reg_bank1.op_mode = coeff->mode; handle->reg_bank1.add_weight_x = coeff->weight_x; handle->reg_bank1.add_weight_y = coeff->weight_y; REGW(handle->base_addr1, 0x04, handle->reg_bank1.reg04); REGW(handle->base_addr1, 0x2B, handle->reg_bank1.reg2B); REGW(handle->base_addr1, 0x2C, handle->reg_bank1.reg2C); } /******************************************************************************************************************* * ive_hal_set_coeff_sub * Set sub coefficient * * Parameters: * handle: IVE HAL handle * coeff: coefficient * * Return: * none */ void ive_hal_set_coeff_sub(ive_hal_handle *handle, ive_ioc_coeff_sub *coeff) { handle->reg_bank1.op_mode = coeff->mode; REGW(handle->base_addr1, 0x04, handle->reg_bank1.reg04); } /******************************************************************************************************************* * ive_hal_set_coeff_16to8 * Set 16 to 8 coefficient * * Parameters: * handle: IVE HAL handle * coeff: coefficient * * Return: * none */ void ive_hal_set_coeff_16to8(ive_hal_handle *handle, ive_ioc_coeff_16to8 *coeff) { handle->reg_bank1.op_mode = coeff->mode; handle->reg_bank1.fraction = (u16)(((u32)coeff->numerator << 16) / (u32)coeff->denominator); handle->reg_bank1.mask0 = coeff->bias; REGW(handle->base_addr1, 0x04, handle->reg_bank1.reg04); REGW(handle->base_addr1, 0x2A, handle->reg_bank1.reg2A); REGW(handle->base_addr1, 0x1A, handle->reg_bank1.reg1A); } /******************************************************************************************************************* * ive_hal_set_coeff_map * Set map coefficient * * Parameters: * handle: IVE HAL handle * coeff: coefficient * * Return: * none */ void ive_hal_set_coeff_map(ive_hal_handle *handle, u64 map_addr) { #if defined(USE_MIU_DIRECT) u64 miu_addr = map_addr; #else u64 miu_addr = Chip_Phys_to_MIU(map_addr); #endif //Check address if( miu_addr >= HAL_MIU1_BASE ) { miu_addr = REMOVE_MIU1_OFFSET(miu_addr); } handle->reg_bank1.src1_addr_low = ADDR_LOW( miu_addr); handle->reg_bank1.src1_addr_high = ADDR_HIGH(miu_addr); REGW(handle->base_addr1, 0x08, handle->reg_bank1.reg08); REGW(handle->base_addr1, 0x09, handle->reg_bank1.reg09); } /******************************************************************************************************************* * ive_hal_set_coeff_integral * Set integral coefficient * * Parameters: * handle: IVE HAL handle * coeff: coefficient * * Return: * none */ void ive_hal_set_coeff_integral(ive_hal_handle *handle, ive_ioc_coeff_integral *coeff) { handle->reg_bank1.op_mode = coeff->mode; REGW(handle->base_addr1, 0x04, handle->reg_bank1.reg04); } /******************************************************************************************************************* * ive_hal_set_coeff_sad * Set SAD coefficient * * Parameters: * handle: IVE HAL handle * coeff: coefficient * * Return: * none */ void ive_hal_set_coeff_sad(ive_hal_handle *handle, ive_ioc_coeff_sad *coeff) { handle->reg_bank1.op_mode = coeff->block_mode; handle->reg_bank1.outfmt = coeff->out_mode; handle->reg_bank1.mask0 = coeff->min; handle->reg_bank1.mask1 = coeff->max; handle->reg_bank1.thresh_16bit_1 = coeff->thresh; REGW(handle->base_addr1, 0x04, handle->reg_bank1.reg04); REGW(handle->base_addr1, 0x05, handle->reg_bank1.reg05); REGW(handle->base_addr1, 0x1A, handle->reg_bank1.reg1A); REGW(handle->base_addr1, 0x28, handle->reg_bank1.reg28); } /******************************************************************************************************************* * ive_hal_set_coeff_lbp * Set LBP coefficient * * Parameters: * handle: IVE HAL handle * coeff: coefficient * * Return: * none */ void ive_hal_set_coeff_ncc(ive_hal_handle *handle, u64 output_addr) { #if defined(USE_MIU_DIRECT) u64 miu_addr = output_addr; #else u64 miu_addr = Chip_Phys_to_MIU(output_addr); #endif //Check address if( miu_addr >= HAL_MIU1_BASE ) { miu_addr = REMOVE_MIU1_OFFSET(miu_addr); } handle->reg_bank1.dst1_addr_low = ADDR_LOW( miu_addr); handle->reg_bank1.dst1_addr_high = ADDR_HIGH(miu_addr); // handle->reg_bank1.dst1_stride = handle->reg_bank1.src1_stride; REGW(handle->base_addr1, 0x0A, handle->reg_bank1.reg0A); REGW(handle->base_addr1, 0x0B, handle->reg_bank1.reg0B); // REGW(handle->base_addr1, 0x15, handle->reg_bank1.reg15); } /******************************************************************************************************************* * ive_hal_set_coeff_lbp * Set LBP coefficient * * Parameters: * handle: IVE HAL handle * coeff: coefficient * * Return: * none */ void ive_hal_set_coeff_lbp(ive_hal_handle *handle, ive_ioc_coeff_lbp *coeff) { handle->reg_bank1.op_mode = coeff->mode; handle->reg_bank1.infmt = coeff->chlmode; handle->reg_bank1.thresh_16bit_1 = coeff->thresh-1; REGW(handle->base_addr1, 0x04, handle->reg_bank1.reg04); REGW(handle->base_addr1, 0x05, handle->reg_bank1.reg05); REGW(handle->base_addr1, 0x28, handle->reg_bank1.reg28); } /******************************************************************************************************************* * ive_hal_set_coeff_bat * Set bat coefficient * * Parameters: * handle: IVE HAL handle * coeff: coefficient * * Return: * none */ void ive_hal_set_coeff_bat(ive_hal_handle *handle, ive_ioc_coeff_bat *coeff) { handle->reg_bank1.thresh_16bit_1 = coeff->h_times; handle->reg_bank1.thresh_16bit_2 = coeff->v_times; REGW(handle->base_addr1, 0x28, handle->reg_bank1.reg28); REGW(handle->base_addr1, 0x29, handle->reg_bank1.reg29); } /******************************************************************************************************************* * ive_hal_set_coeff_adp_thresh * Set adaptive threshold coefficient * * Parameters: * handle: IVE HAL handle * coeff: coefficient * * Return: * none */ void ive_hal_set_coeff_adp_thresh(ive_hal_handle *handle, ive_ioc_coeff_adp_thresh *coeff) { handle->reg_bank1.mask0 = coeff->u8HalfMaskx; handle->reg_bank1.mask1 = coeff->u8HalfMasky; handle->reg_bank1.shift = coeff->s8Offset; handle->reg_bank1.thresh_16bit_1 = coeff->u8ValueThr; handle->reg_bank1.add_weight_x = coeff->u8RateThr; REGW(handle->base_addr1, 0x1A, handle->reg_bank1.reg1A); REGW(handle->base_addr1, 0x26, handle->reg_bank1.reg26); REGW(handle->base_addr1, 0x28, handle->reg_bank1.reg28); REGW(handle->base_addr1, 0x2B, handle->reg_bank1.reg2B); } /******************************************************************************************************************* * ive_hal_set_coeff_matrix_transform * Set matrix transform coefficient * * Parameters: * handle: IVE HAL handle * coeff: coefficient * * Return: * none */ void ive_hal_set_coeff_matrix_transform(ive_hal_handle *handle, ive_ioc_coeff_matrix_transform *coeff) { handle->reg_bank1.op_mode = coeff->ctrl_mode; switch( coeff->chl_mode ) { case IVE_IOC_MODE_MATRIX_TRANSFORM_C1: handle->reg_bank1.infmt = 13; handle->reg_bank1.outfmt = 13; handle->reg_bank1.mask0 = coeff->s16MatrixArray[0] % 256; handle->reg_bank1.mask1 = coeff->s16MatrixArray[0] /256; handle->reg_bank1.mask2 = 0; handle->reg_bank1.mask3 = 0; handle->reg_bank1.mask4 = 0; handle->reg_bank1.mask5 = 0; handle->reg_bank1.mask6 = 0; handle->reg_bank1.mask7 = 0; handle->reg_bank1.mask8 = 0; handle->reg_bank1.mask9 = 0; handle->reg_bank1.mask10 = 0; handle->reg_bank1.mask11 = 0; handle->reg_bank1.mask12 = 0; handle->reg_bank1.mask13 = 0; handle->reg_bank1.mask14 = 0; handle->reg_bank1.mask15 = 0; handle->reg_bank1.mask16 = 0; handle->reg_bank1.mask17 = 0; break; case IVE_IOC_MODE_MATRIX_TRANSFORM_C2: handle->reg_bank1.infmt = 14; handle->reg_bank1.outfmt = 14; handle->reg_bank1.mask0 = coeff->s16MatrixArray[0] % 256; handle->reg_bank1.mask1 = coeff->s16MatrixArray[0] /256; handle->reg_bank1.mask2 = coeff->s16MatrixArray[1] % 256; handle->reg_bank1.mask3 = coeff->s16MatrixArray[1] /256; handle->reg_bank1.mask4 = 0; handle->reg_bank1.mask5 = 0; handle->reg_bank1.mask6 = coeff->s16MatrixArray[2] % 256; handle->reg_bank1.mask7 = coeff->s16MatrixArray[2] /256; handle->reg_bank1.mask8 = coeff->s16MatrixArray[3] % 256; handle->reg_bank1.mask9 = coeff->s16MatrixArray[3] /256; handle->reg_bank1.mask10 = 0; handle->reg_bank1.mask11 = 0; handle->reg_bank1.mask12 = 0; handle->reg_bank1.mask13 = 0; handle->reg_bank1.mask14 = 0; handle->reg_bank1.mask15 = 0; handle->reg_bank1.mask16 = 0; handle->reg_bank1.mask17 = 0; break; case IVE_IOC_MODE_MATRIX_TRANSFORM_C3: handle->reg_bank1.infmt = 15; handle->reg_bank1.outfmt = 15; handle->reg_bank1.mask0 = coeff->s16MatrixArray[0] % 256; handle->reg_bank1.mask1 = coeff->s16MatrixArray[0] /256; handle->reg_bank1.mask2 = coeff->s16MatrixArray[1] % 256; handle->reg_bank1.mask3 = coeff->s16MatrixArray[1] /256; handle->reg_bank1.mask4 = coeff->s16MatrixArray[2] % 256; handle->reg_bank1.mask5 = coeff->s16MatrixArray[2] /256; handle->reg_bank1.mask6 = coeff->s16MatrixArray[3] % 256; handle->reg_bank1.mask7 = coeff->s16MatrixArray[3] /256; handle->reg_bank1.mask8 = coeff->s16MatrixArray[4] % 256; handle->reg_bank1.mask9 = coeff->s16MatrixArray[4] /256; handle->reg_bank1.mask10 = coeff->s16MatrixArray[5] % 256; handle->reg_bank1.mask11 = coeff->s16MatrixArray[5] /256; handle->reg_bank1.mask12 = coeff->s16MatrixArray[6] % 256; handle->reg_bank1.mask13 = coeff->s16MatrixArray[6] /256; handle->reg_bank1.mask14 = coeff->s16MatrixArray[7] % 256; handle->reg_bank1.mask15 = coeff->s16MatrixArray[7] /256; handle->reg_bank1.mask16 = coeff->s16MatrixArray[8] % 256; handle->reg_bank1.mask17 = coeff->s16MatrixArray[8] /256; break; default : IVE_MSG(IVE_MSG_ERR, "Invalid input type of matrix transform!!\n"); break; } REGW(handle->base_addr1, 0x04, handle->reg_bank1.reg04); REGW(handle->base_addr1, 0x05, handle->reg_bank1.reg05); REGW(handle->base_addr1, 0x1A, handle->reg_bank1.reg1A); REGW(handle->base_addr1, 0x1B, handle->reg_bank1.reg1B); REGW(handle->base_addr1, 0x1C, handle->reg_bank1.reg1C); REGW(handle->base_addr1, 0x1D, handle->reg_bank1.reg1D); REGW(handle->base_addr1, 0x1E, handle->reg_bank1.reg1E); REGW(handle->base_addr1, 0x1F, handle->reg_bank1.reg1F); REGW(handle->base_addr1, 0x20, handle->reg_bank1.reg20); REGW(handle->base_addr1, 0x21, handle->reg_bank1.reg21); REGW(handle->base_addr1, 0x22, handle->reg_bank1.reg22); } /******************************************************************************************************************* * ive_hal_set_coeff_image_dot * Set image dot coefficient * * Parameters: * handle: IVE HAL handle * coeff: coefficient * * Return: * none */ void ive_hal_set_coeff_image_dot(ive_hal_handle *handle, ive_ioc_coeff_image_dot *coeff) { handle->reg_bank1.op_mode = coeff->mode; handle->reg_bank1.infmt = 14; REGW(handle->base_addr1, 0x04, handle->reg_bank1.reg04); REGW(handle->base_addr1, 0x05, handle->reg_bank1.reg05); } /******************************************************************************************************************* * ive_hal_start * start IVE HW engine to process images * * Parameters: * handle: IVE HAL handle * * Return: * none */ void ive_hal_start(ive_hal_handle *handle) { #if !defined(IVE_SW_SIMULATE) handle->reg_bank0.sw_fire = 1; REGW(handle->base_addr0, 0x00, handle->reg_bank0.reg00); handle->reg_bank0.sw_fire = 0; // write one clear #else // !defined(IVE_SW_SIMULATE) ive_hal_run_simulate(handle); #endif // defined(IVE_SW_SIMULATE) } /******************************************************************************************************************* * ive_hal_sw_reset * reset IVE HW engine * * Parameters: * handle: IVE HAL handle * * Return: * none */ void ive_hal_sw_reset(ive_hal_handle *handle) { handle->reg_bank0.sw_rst = 1; REGW(handle->base_addr0, 0x02, handle->reg_bank0.reg02); handle->reg_bank0.sw_rst = 0; // write one clear REGW(handle->base_addr0, 0x02, handle->reg_bank0.reg02); memset(&handle->reg_bank0, 0, sizeof(handle->reg_bank0)); memset(&handle->reg_bank1, 0, sizeof(handle->reg_bank1)); } void ive_hal_reg_dump(ive_hal_handle *handle) { IVE_MSG(IVE_MSG_DBG, "clock reg = 0x%04x\n", REGR(0x1F207000, 0x6A)); IVE_MSG(IVE_MSG_DBG, "bank 0 reg 0x%02X = 0x%04x\n", 0x00, REGR(handle->base_addr0, 0x00)); IVE_MSG(IVE_MSG_DBG, "bank 0 reg 0x%02X = 0x%04x\n", 0x01, REGR(handle->base_addr0, 0x01)); IVE_MSG(IVE_MSG_DBG, "bank 0 reg 0x%02X = 0x%04x\n", 0x02, REGR(handle->base_addr0, 0x02)); IVE_MSG(IVE_MSG_DBG, "bank 0 reg 0x%02X = 0x%04x\n", 0x03, REGR(handle->base_addr0, 0x03)); IVE_MSG(IVE_MSG_DBG, "bank 0 reg 0x%02X = 0x%04x\n", 0x10, REGR(handle->base_addr0, 0x10)); IVE_MSG(IVE_MSG_DBG, "bank 0 reg 0x%02X = 0x%04x\n", 0x11, REGR(handle->base_addr0, 0x11)); IVE_MSG(IVE_MSG_DBG, "bank 0 reg 0x%02X = 0x%04x\n", 0x12, REGR(handle->base_addr0, 0x12)); IVE_MSG(IVE_MSG_DBG, "bank 0 reg 0x%02X = 0x%04x\n", 0x13, REGR(handle->base_addr0, 0x13)); IVE_MSG(IVE_MSG_DBG, "bank 0 reg 0x%02X = 0x%04x\n", 0x14, REGR(handle->base_addr0, 0x14)); IVE_MSG(IVE_MSG_DBG, "bank 0 reg 0x%02X = 0x%04x\n", 0x15, REGR(handle->base_addr0, 0x15)); IVE_MSG(IVE_MSG_DBG, "bank 0 reg 0x%02X = 0x%04x\n", 0x16, REGR(handle->base_addr0, 0x16)); IVE_MSG(IVE_MSG_DBG, "bank 0 reg 0x%02X = 0x%04x\n", 0x17, REGR(handle->base_addr0, 0x17)); IVE_MSG(IVE_MSG_DBG, "bank 0 reg 0x%02X = 0x%04x\n", 0x18, REGR(handle->base_addr0, 0x18)); IVE_MSG(IVE_MSG_DBG, "bank 0 reg 0x%02X = 0x%04x\n", 0x20, REGR(handle->base_addr0, 0x20)); IVE_MSG(IVE_MSG_DBG, "bank 0 reg 0x%02X = 0x%04x\n", 0x21, REGR(handle->base_addr0, 0x21)); IVE_MSG(IVE_MSG_DBG, "bank 0 reg 0x%02X = 0x%04x\n", 0x22, REGR(handle->base_addr0, 0x22)); IVE_MSG(IVE_MSG_DBG, "bank 0 reg 0x%02X = 0x%04x\n", 0x23, REGR(handle->base_addr0, 0x23)); IVE_MSG(IVE_MSG_DBG, "bank 0 reg 0x%02X = 0x%04x\n", 0x24, REGR(handle->base_addr0, 0x24)); IVE_MSG(IVE_MSG_DBG, "bank 0 reg 0x%02X = 0x%04x\n", 0x25, REGR(handle->base_addr0, 0x25)); IVE_MSG(IVE_MSG_DBG, "bank 0 reg 0x%02X = 0x%04x\n", 0x30, REGR(handle->base_addr0, 0x30)); IVE_MSG(IVE_MSG_DBG, "bank 0 reg 0x%02X = 0x%04x\n", 0x31, REGR(handle->base_addr0, 0x31)); IVE_MSG(IVE_MSG_DBG, "bank 0 reg 0x%02X = 0x%04x\n", 0x40, REGR(handle->base_addr0, 0x40)); IVE_MSG(IVE_MSG_DBG, "bank 0 reg 0x%02X = 0x%04x\n", 0x41, REGR(handle->base_addr0, 0x41)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x00, REGR(handle->base_addr1, 0x00)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x01, REGR(handle->base_addr1, 0x01)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x02, REGR(handle->base_addr1, 0x02)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x03, REGR(handle->base_addr1, 0x03)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x04, REGR(handle->base_addr1, 0x04)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x05, REGR(handle->base_addr1, 0x05)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x06, REGR(handle->base_addr1, 0x06)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x07, REGR(handle->base_addr1, 0x07)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x08, REGR(handle->base_addr1, 0x08)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x09, REGR(handle->base_addr1, 0x09)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x0A, REGR(handle->base_addr1, 0x0A)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x0B, REGR(handle->base_addr1, 0x0B)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x0C, REGR(handle->base_addr1, 0x0C)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x0D, REGR(handle->base_addr1, 0x0D)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x0E, REGR(handle->base_addr1, 0x0E)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x0F, REGR(handle->base_addr1, 0x0F)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x10, REGR(handle->base_addr1, 0x10)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x11, REGR(handle->base_addr1, 0x11)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x12, REGR(handle->base_addr1, 0x12)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x13, REGR(handle->base_addr1, 0x13)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x14, REGR(handle->base_addr1, 0x14)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x15, REGR(handle->base_addr1, 0x15)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x16, REGR(handle->base_addr1, 0x16)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x17, REGR(handle->base_addr1, 0x17)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x18, REGR(handle->base_addr1, 0x18)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x19, REGR(handle->base_addr1, 0x19)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x1A, REGR(handle->base_addr1, 0x1A)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x1B, REGR(handle->base_addr1, 0x1B)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x1C, REGR(handle->base_addr1, 0x1C)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x1D, REGR(handle->base_addr1, 0x1D)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x1E, REGR(handle->base_addr1, 0x1E)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x1F, REGR(handle->base_addr1, 0x1F)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x20, REGR(handle->base_addr1, 0x20)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x21, REGR(handle->base_addr1, 0x21)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x22, REGR(handle->base_addr1, 0x22)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x23, REGR(handle->base_addr1, 0x23)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x24, REGR(handle->base_addr1, 0x24)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x25, REGR(handle->base_addr1, 0x25)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x26, REGR(handle->base_addr1, 0x26)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x27, REGR(handle->base_addr1, 0x27)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x28, REGR(handle->base_addr1, 0x28)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x29, REGR(handle->base_addr1, 0x29)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x2A, REGR(handle->base_addr1, 0x2A)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x2B, REGR(handle->base_addr1, 0x2B)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x2C, REGR(handle->base_addr1, 0x2C)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x2D, REGR(handle->base_addr1, 0x2D)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x2E, REGR(handle->base_addr1, 0x2E)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x2F, REGR(handle->base_addr1, 0x2F)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x30, REGR(handle->base_addr1, 0x30)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x31, REGR(handle->base_addr1, 0x31)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x32, REGR(handle->base_addr1, 0x32)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x33, REGR(handle->base_addr1, 0x33)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x34, REGR(handle->base_addr1, 0x34)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x35, REGR(handle->base_addr1, 0x35)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x36, REGR(handle->base_addr1, 0x36)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x37, REGR(handle->base_addr1, 0x37)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x38, REGR(handle->base_addr1, 0x38)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x39, REGR(handle->base_addr1, 0x39)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x3A, REGR(handle->base_addr1, 0x3A)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x3B, REGR(handle->base_addr1, 0x3B)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x3C, REGR(handle->base_addr1, 0x3C)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x3D, REGR(handle->base_addr1, 0x3D)); IVE_MSG(IVE_MSG_DBG, "bank 1 reg 0x%02X = 0x%04x\n", 0x3E, REGR(handle->base_addr1, 0x3E)); }