1113 lines
43 KiB
C
Executable File
1113 lines
43 KiB
C
Executable File
/*
|
|
* 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));
|
|
}
|