| /* | |
| * Copyright 2023 Google LLC | |
| * Copyright lowRISC contributors | |
| * | |
| * Licensed under the Apache License, Version 2.0 (the "License"); | |
| * you may not use this file except in compliance with the License. | |
| * You may obtain a copy of the License at | |
| * | |
| * http://www.apache.org/licenses/LICENSE-2.0 | |
| * | |
| * Unless required by applicable law or agreed to in writing, software | |
| * distributed under the License is distributed on an "AS IS" BASIS, | |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| * See the License for the specific language governing permissions and | |
| * limitations under the License. | |
| */ | |
| #include "sw/device/lib/dif/dif_isp_wrapper.h" | |
| #include <stddef.h> | |
| #include "sw/device/lib/base/bitfield.h" | |
| #include "sw/device/lib/base/macros.h" | |
| #include "sw/device/lib/dif/dif_base.h" | |
| #include "external/isp_yocto/include/yocto_isp_register_address.h" | |
| #include "isp_wrapper_regs.h" // Generated. | |
| // ISP configuration: | |
| // TPG 128 * 64, raw, bypass modes | |
| dif_result_t dif_isp_wrapper_set_en(const dif_isp_wrapper_t *isp_wrapper) { | |
| if (isp_wrapper == NULL) { | |
| return kDifBadArg; | |
| } | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_IMSC, 0xffffffff); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_IMSC, 0xffffffff); | |
| mmio_region_write32(isp_wrapper->base_addr, VI_CCL, 0x00000002); | |
| mmio_region_write32(isp_wrapper->base_addr, VI_ICCL, 0x00000059); | |
| mmio_region_write32(isp_wrapper->base_addr, VI_IRCL, 0x00000000); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_ACQ_H_OFFS, 0x00000000); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_ACQ_V_OFFS, 0x00000000); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_ACQ_H_SIZE, 0x00000080); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_ACQ_V_SIZE, 0x00000040); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_TPG_TOTAL_IN, 0x00bfc25f); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_TPG_ACT_IN, 0x00200040); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_TPG_FP_IN, 0x002bc11b); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_TPG_BP_IN, 0x0039c0a7); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_TPG_W_IN, 0x003a405d); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_TPG_GAP_IN, 0x000a8015); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_TPG_GAP_STD_IN, 0x00000010); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_TPG_RANDOM_SEED, 0xb6ccff1c); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_TPG_FRAME_NUM, 0x00000001); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_OUT_H_OFFS, 0x00000000); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_OUT_V_OFFS, 0x00000000); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_OUT_H_SIZE, 0x00000080); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_OUT_V_SIZE, 0x00000040); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_BLS_CTRL, 0x00000001); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_BLS_A_FIXED, 0x00000000); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_BLS_B_FIXED, 0x00000000); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_BLS_C_FIXED, 0x00000000); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_BLS_D_FIXED, 0x00000000); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_EXP_CONF, 0x00000000); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_EXP_H_OFFSET, 0x00000012); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_EXP_V_OFFSET, 0x0000001f); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_EXP_H_SIZE, 0x00000012); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_EXP_V_SIZE, 0x00000004); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_DGAIN_RB, 0x006600ba); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_DGAIN_G, 0x00dd00e3); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_DEMOSAIC, 0x00000462); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_FILT_MODE, 0x00000a12); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_FILT_THRES_BL0, 0x0000036d); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_FILT_THRES_BL1, 0x0000028e); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_FILT_THRES_SH0, 0x000003c8); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_FILT_THRES_SH1, 0x000003e2); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_FILT_LUM_WEIGHT, 0x000259b5); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_FILT_FAC_SH1, 0x0000003e); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_FILT_FAC_SH0, 0x0000003d); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_FILT_FAC_MID, 0x0000002c); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_FILT_FAC_BL0, 0x00000021); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_FILT_FAC_BL1, 0x0000000c); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_CAC_CTRL, 0x0000000a); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_CAC_COUNT_START, 0x00200040); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_CAC_A, 0x01f4018c); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_CAC_B, 0x012e01ca); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_CAC_C, 0x003401a4); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_CAC_X_NORM, 0x00030008); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_CAC_Y_NORM, 0x00020015); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_MODE, 0x00000001); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_0, 0x000001ae); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_1, 0x000002b0); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_2, 0x000002db); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_3, 0x000002f9); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_4, 0x000002fd); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_5, 0x000002fe); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_6, 0x000002fe); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_7, 0x000002fe); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_8, 0x000002fe); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_9, 0x000002fe); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_10, 0x000002fe); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_11, 0x000002fe); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_12, 0x000002fe); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_13, 0x000002fe); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_14, 0x000002fe); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_15, 0x000002fe); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_16, 0x000002fe); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_AWB_PROP, 0x80000007); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_AWB_H_OFFS, 0x0000005b); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_AWB_V_OFFS, 0x00000022); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_AWB_H_SIZE, 0x00000005); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_AWB_V_SIZE, 0x00000009); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_AWB_FRAMES, 0x00000000); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_AWB_REF, 0x00006b55); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_AWB_THRESH, 0xeaef51fa); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_CC_COEFF_0, 0x00000004); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_CC_COEFF_1, 0x0000011b); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_CC_COEFF_2, 0x000001af); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_CC_COEFF_3, 0x000001e0); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_CC_COEFF_4, 0x00000020); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_CC_COEFF_5, 0x00000140); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_CC_COEFF_6, 0x00000053); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_CC_COEFF_7, 0x0000002e); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_CC_COEFF_8, 0x000001b7); | |
| mmio_region_write32(isp_wrapper->base_addr, FORMAT_CONV_CTRL, 0x00000001); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_CT_COEFF_0, 0x00000588); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_CT_COEFF_1, 0x000005d9); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_CT_COEFF_2, 0x000004ea); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_CT_COEFF_3, 0x000004f9); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_CT_COEFF_4, 0x0000031e); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_CT_COEFF_5, 0x000006db); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_CT_COEFF_6, 0x000004f6); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_CT_COEFF_7, 0x00000307); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_CT_COEFF_8, 0x00000085); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_CT_OFFSET_R, 0x00000310); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_CT_OFFSET_G, 0x00000592); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_CT_OFFSET_B, 0x00000d58); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_IMSC, 0x000400fc); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_ERR_CLR, 0x00000001); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_MP_Y_BASE_AD_INIT, 0x5a000000); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_MP_Y_SIZE_INIT, 0x0000a800); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_MP_Y_OFFS_CNT_INIT, 0x00000000); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_MP_Y_IRQ_OFFS_INIT, 0x00000000); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_MP_CB_BASE_AD_INIT, 0x5a00a800); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_MP_CB_SIZE_INIT, 0x00005400); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_MP_CB_OFFS_CNT_INIT, 0x00000000); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_MP_CR_BASE_AD_INIT, 0x5a00a800); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_MP_CR_SIZE_INIT, 0x00005400); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_MP_CR_OFFS_CNT_INIT, 0x00000000); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_IMSC, 0x000003ff); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_STATUS_CLR, 0x00000053); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_MP_Y_BASE_AD_INIT2, 0x5a01f800); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_MP_CB_BASE_AD_INIT2, 0x5a02a000); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_MP_CR_BASE_AD_INIT2, 0x5a02f800); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_MP_Y_LLENGTH, 0x00000080); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_OUTPUT_ALIGN_FORMAT, 0x00000401); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_MP_OUTPUT_FIFO_SIZE, 0x00000000); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_MP_Y_PIC_WIDTH, 0x00000080); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_MP_Y_PIC_HEIGHT, 0x00000040); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_MP_Y_PIC_SIZE, 0x00002000); | |
| mmio_region_write32(isp_wrapper->base_addr, SRSZ_CTRL, 0x0000011c); | |
| mmio_region_write32(isp_wrapper->base_addr, SRSZ_SCALE_HY, 0x0000c177); | |
| mmio_region_write32(isp_wrapper->base_addr, SRSZ_SCALE_HCB, 0x0000ec82); | |
| mmio_region_write32(isp_wrapper->base_addr, SRSZ_SCALE_HCR, 0x00000057); | |
| mmio_region_write32(isp_wrapper->base_addr, SRSZ_SCALE_VY, 0x000075d8); | |
| mmio_region_write32(isp_wrapper->base_addr, SRSZ_SCALE_VC, 0x000075d8); | |
| mmio_region_write32(isp_wrapper->base_addr, SRSZ_PHASE_HY, 0x00000000); | |
| mmio_region_write32(isp_wrapper->base_addr, SRSZ_PHASE_HC, 0x00000000); | |
| mmio_region_write32(isp_wrapper->base_addr, SRSZ_PHASE_VY, 0x00000000); | |
| mmio_region_write32(isp_wrapper->base_addr, SRSZ_PHASE_VC, 0x00000000); | |
| mmio_region_write32(isp_wrapper->base_addr, SRSZ_FORMAT_CONV_CTRL, 0x000000fa); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_SP_Y_BASE_AD_INIT, 0x2354d5f8); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_SP_Y_SIZE_INIT, 0x00008000); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_SP_Y_OFFS_CNT_INIT, 0x00000000); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_SP_Y_LLENGTH, 0x00000080); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_SP_CB_BASE_AD_INIT, 0x9fff2d98); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_SP_CB_SIZE_INIT, 0x01673858); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_SP_CB_OFFS_CNT_INIT, 0x00000000); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_SP_CR_BASE_AD_INIT, 0xd3bbca68); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_SP_CR_SIZE_INIT, 0x0f8bf230); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_SP_CR_OFFS_CNT_INIT, 0x00000000); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_SP_Y_PIC_WIDTH, 0x00000080); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_SP_Y_PIC_HEIGHT, 0x00000040); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_SP_Y_PIC_SIZE, 0x00002000); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_SP_Y_BASE_AD_INIT2, 0x1939f6d8); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_SP_CB_BASE_AD_INIT2, 0xf9f91948); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_SP_CR_BASE_AD_INIT2, 0x8335a0b0); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_ACQ_PROP, 0x00000089); | |
| mmio_region_write32(isp_wrapper->base_addr, SRSZ_CTRL, 0x0000011c); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_CTRL, 0x80007250); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_TPG_CTRL, 0x00000d95); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_CTRL, 0x68360808); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_INIT, 0x000000b0); | |
| return kDifOk; | |
| } | |
| // ISP confituration: live, raw and bypass modes | |
| // Input arguments are frame weight, frame height and Y,Cb,Cr written addresses. | |
| dif_result_t _dif_isp_wrapper_set_raw_byp_en( | |
| const dif_isp_wrapper_t *isp_wrapper, const uint32_t frame_h_size, | |
| const uint32_t frame_v_size, const uint32_t frame_h_offs, | |
| const uint32_t frame_v_offs, | |
| // TODO(ykwang): put these variables into a config variable. | |
| const uint32_t y_base_ad_init_addr, const uint32_t cb_base_ad_init_addr, | |
| const uint32_t cr_base_ad_init_addr, const uint32_t y_base_ad_init2_addr, | |
| const uint32_t cb_base_ad_init2_addr, | |
| const uint32_t cr_base_ad_init2_addr) { | |
| if (isp_wrapper == NULL) { | |
| return kDifBadArg; | |
| } | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_IMSC, 0xffffffff); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_IMSC, 0xffffffff); | |
| mmio_region_write32(isp_wrapper->base_addr, VI_CCL, 0x00000002); | |
| mmio_region_write32(isp_wrapper->base_addr, VI_ICCL, 0x00000059); | |
| mmio_region_write32(isp_wrapper->base_addr, VI_IRCL, 0x00000000); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_ACQ_H_OFFS, frame_h_offs); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_ACQ_V_OFFS, frame_v_offs); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_ACQ_H_SIZE, frame_h_size); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_ACQ_V_SIZE, frame_v_size); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_TPG_TOTAL_IN, 0x011d8518); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_TPG_ACT_IN, 0x00a001e0); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_TPG_FP_IN, 0x001c8126); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_TPG_BP_IN, 0x00454129); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_TPG_W_IN, 0x001bc0e9); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_TPG_GAP_IN, 0x003540a0); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_TPG_GAP_STD_IN, 0x00000050); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_TPG_RANDOM_SEED, 0xe30ce95f); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_TPG_FRAME_NUM, 0x00000003); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_OUT_H_OFFS, 0x00000000); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_OUT_V_OFFS, 0x00000000); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_OUT_H_SIZE, frame_h_size); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_OUT_V_SIZE, frame_v_size); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_BLS_CTRL, 0x00000000); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_BLS_A_FIXED, 0x00000000); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_BLS_B_FIXED, 0x00000000); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_BLS_C_FIXED, 0x00000000); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_BLS_D_FIXED, 0x00000000); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_EXP_CONF, 0x00000001); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_EXP_H_OFFSET, 0x000000d3); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_EXP_V_OFFSET, 0x00000017); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_EXP_H_SIZE, 0x00000043); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_EXP_V_SIZE, 0x00000048); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_DGAIN_RB, 0x01a200d7); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_DGAIN_G, 0x00f9011e); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_DEMOSAIC, 0x000004f6); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_FILT_MODE, 0x00000810); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_FILT_THRES_BL0, 0x00000230); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_FILT_THRES_BL1, 0x00000018); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_FILT_THRES_SH0, 0x00000287); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_FILT_THRES_SH1, 0x000003f2); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_FILT_LUM_WEIGHT, 0x00061fdc); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_FILT_FAC_SH1, 0x00000031); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_FILT_FAC_SH0, 0x00000031); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_FILT_FAC_MID, 0x0000002c); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_FILT_FAC_BL0, 0x0000001a); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_FILT_FAC_BL1, 0x00000016); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_CAC_CTRL, 0x00000004); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_CAC_COUNT_START, 0x00f00140); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_CAC_A, 0x01160187); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_CAC_B, 0x005f004c); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_CAC_C, 0x0138017a); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_CAC_X_NORM, 0x00020001); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_CAC_Y_NORM, 0x00060015); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_MODE, 0x00000001); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_0, 0x00000170); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_1, 0x00000178); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_2, 0x00000181); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_3, 0x0000018e); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_4, 0x00000194); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_5, 0x000001b4); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_6, 0x000001b7); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_7, 0x000001b9); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_8, 0x000001ba); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_9, 0x000001ba); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_10, 0x000001ba); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_11, 0x000001ba); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_12, 0x000001ba); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_13, 0x000001ba); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_14, 0x000001ba); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_15, 0x000001ba); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_16, 0x00000303); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_AWB_PROP, 0x00000002); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_AWB_H_OFFS, 0x00000052); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_AWB_V_OFFS, 0x0000016f); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_AWB_H_SIZE, 0x000001be); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_AWB_V_SIZE, 0x00000061); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_AWB_FRAMES, 0x00000001); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_AWB_REF, 0x0000b0c6); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_AWB_THRESH, 0x0b145491); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_CC_COEFF_0, 0x0000008d); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_CC_COEFF_1, 0x000000b1); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_CC_COEFF_2, 0x000000a2); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_CC_COEFF_3, 0x00000078); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_CC_COEFF_4, 0x00000169); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_CC_COEFF_5, 0x000000ba); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_CC_COEFF_6, 0x0000015c); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_CC_COEFF_7, 0x000000f8); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_CC_COEFF_8, 0x0000017c); | |
| mmio_region_write32(isp_wrapper->base_addr, FORMAT_CONV_CTRL, 0x00000000); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_CT_COEFF_0, 0x000005ff); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_CT_COEFF_1, 0x00000707); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_CT_COEFF_2, 0x00000464); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_CT_COEFF_3, 0x00000008); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_CT_COEFF_4, 0x00000058); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_CT_COEFF_5, 0x000007de); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_CT_COEFF_6, 0x00000241); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_CT_COEFF_7, 0x000006ff); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_CT_COEFF_8, 0x0000007d); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_CT_OFFSET_R, 0x000005ec); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_CT_OFFSET_G, 0x00000d7e); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_CT_OFFSET_B, 0x00000dd7); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_IMSC, 0x000400fc); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_ERR_CLR, 0x00000000); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_MP_Y_BASE_AD_INIT, | |
| y_base_ad_init_addr); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_MP_Y_SIZE_INIT, | |
| frame_h_size * frame_v_size); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_MP_Y_OFFS_CNT_INIT, 0x00000000); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_MP_Y_IRQ_OFFS_INIT, 0x00000000); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_MP_CB_BASE_AD_INIT, | |
| cb_base_ad_init_addr); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_MP_CB_SIZE_INIT, 0x00000000); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_MP_CB_OFFS_CNT_INIT, 0x00000000); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_MP_CR_BASE_AD_INIT, | |
| cr_base_ad_init_addr); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_MP_CR_SIZE_INIT, 0x00000000); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_MP_CR_OFFS_CNT_INIT, 0x00000000); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_IMSC, 0x000003ff); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_STATUS_CLR, 0x00000077); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_MP_Y_BASE_AD_INIT2, | |
| y_base_ad_init2_addr); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_MP_CB_BASE_AD_INIT2, | |
| cb_base_ad_init2_addr); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_MP_CR_BASE_AD_INIT2, | |
| cr_base_ad_init2_addr); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_MP_Y_LLENGTH, frame_h_size); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_OUTPUT_ALIGN_FORMAT, | |
| 0x00000401); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_MP_OUTPUT_FIFO_SIZE, 0x00000000); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_MP_Y_PIC_WIDTH, frame_h_size); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_MP_Y_PIC_HEIGHT, frame_v_size); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_MP_Y_PIC_SIZE, | |
| frame_h_size * frame_v_size); | |
| mmio_region_write32(isp_wrapper->base_addr, SRSZ_CTRL, 0x000001c0); | |
| mmio_region_write32(isp_wrapper->base_addr, SRSZ_SCALE_HY, 0x0000546d); | |
| mmio_region_write32(isp_wrapper->base_addr, SRSZ_SCALE_HCB, 0x0000db23); | |
| mmio_region_write32(isp_wrapper->base_addr, SRSZ_SCALE_HCR, 0x000071b7); | |
| mmio_region_write32(isp_wrapper->base_addr, SRSZ_SCALE_VY, 0x00007803); | |
| mmio_region_write32(isp_wrapper->base_addr, SRSZ_SCALE_VC, 0x00005628); | |
| mmio_region_write32(isp_wrapper->base_addr, SRSZ_PHASE_HY, 0x00000000); | |
| mmio_region_write32(isp_wrapper->base_addr, SRSZ_PHASE_HC, 0x00000000); | |
| mmio_region_write32(isp_wrapper->base_addr, SRSZ_PHASE_VY, 0x00000000); | |
| mmio_region_write32(isp_wrapper->base_addr, SRSZ_PHASE_VC, 0x00000000); | |
| mmio_region_write32(isp_wrapper->base_addr, SRSZ_FORMAT_CONV_CTRL, | |
| 0x000000fa); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_SP_Y_BASE_AD_INIT, 0x50000000); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_SP_Y_SIZE_INIT, 0x0006c1c0); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_SP_Y_OFFS_CNT_INIT, | |
| 0x00000000); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_SP_Y_LLENGTH, 0x00000128); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_SP_CB_BASE_AD_INIT, | |
| 0x5006c800); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_SP_CB_SIZE_INIT, 0x00000000); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_SP_CB_OFFS_CNT_INIT, | |
| 0x00000000); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_SP_CR_BASE_AD_INIT, | |
| 0x5006c800); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_SP_CR_SIZE_INIT, 0x00000000); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_SP_CR_OFFS_CNT_INIT, | |
| 0x00000000); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_SP_Y_PIC_WIDTH, 0x00000124); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_SP_Y_PIC_HEIGHT, 0x00000176); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_SP_Y_PIC_SIZE, 0x0001b070); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_SP_Y_BASE_AD_INIT2, | |
| 0x500d9000); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_SP_CB_BASE_AD_INIT2, | |
| 0x50145800); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_SP_CR_BASE_AD_INIT2, | |
| 0x50145800); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_ACQ_PROP, 0x40011); | |
| mmio_region_write32(isp_wrapper->base_addr, SRSZ_CTRL, 0x000001c0); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_CTRL, 0x00207211); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_TPG_CTRL, 0x00000d76); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_CTRL, 0x68352808); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_INIT, 0x000000b0); | |
| return kDifOk; | |
| } | |
| // ISP configuration: | |
| // raw:320x240, byp:320x240 | |
| dif_result_t dif_isp_wrapper_set_raw_320x240_byp_320x240_en( | |
| const dif_isp_wrapper_t *isp_wrapper) { | |
| return _dif_isp_wrapper_set_raw_byp_en(isp_wrapper, 0x140, 0xf0, 0x2, 0x2, | |
| 0x5a000000, 0x5a01a000, 0x5a01a000, | |
| 0x5a020000, 0x5a03a000, 0x5a03a000); | |
| } | |
| // ISP configuration: | |
| // raw:320x240, byp:320x240, hps image address: 0x00300000 | |
| dif_result_t dif_isp_wrapper_set_ml_mem_byp_320x240_en( | |
| const dif_isp_wrapper_t *isp_wrapper) { | |
| return _dif_isp_wrapper_set_raw_byp_en(isp_wrapper, 0x140, 0xf0, 0x2, 0x2, | |
| 0x5a300000, 0x5a320000, 0x5a320000, | |
| 0x5a340000, 0x5a360000, 0x5a360000); | |
| } | |
| // ISP configuration: | |
| // raw:324x324, byp:324x324 | |
| dif_result_t dif_isp_wrapper_set_raw_324x324_byp_324x324_en( | |
| const dif_isp_wrapper_t *isp_wrapper) { | |
| return _dif_isp_wrapper_set_raw_byp_en(isp_wrapper, 0x144, 0x144, 0x0, 0x0, | |
| 0x5a000000, 0x5a01a000, 0x5a01a000, | |
| 0x5a034000, 0x5a04e000, 0x5a04e000); | |
| } | |
| dif_result_t dif_isp_wrapper_clear_en(const dif_isp_wrapper_t *isp_wrapper) { | |
| if (isp_wrapper == NULL) { | |
| return kDifBadArg; | |
| } | |
| //TODO(Ray): not used currently, will update to real interrupt clear registers | |
| mmio_region_write32(isp_wrapper->base_addr, 0xb00, 0x00040000); | |
| return kDifOk; | |
| } | |
| // TODO(ykwang): replace mask function with done which clears status registers. | |
| dif_result_t dif_isp_wrapper_isp_irq_mask(const dif_isp_wrapper_t *isp_wrapper) { | |
| if (isp_wrapper == NULL) { | |
| return kDifBadArg; | |
| } | |
| //ISP_IMSC Interrupt mask, 0 active | |
| mmio_region_write32(isp_wrapper->base_addr, 0xb00, 0x00000000); | |
| return kDifOk; | |
| } | |
| dif_result_t dif_isp_wrapper_mi_irq_mask(const dif_isp_wrapper_t *isp_wrapper) { | |
| if (isp_wrapper == NULL) { | |
| return kDifBadArg; | |
| } | |
| //MI_IMSC Interrupt mask, 0 active | |
| mmio_region_write32(isp_wrapper->base_addr, 0xef8, 0x00000000); | |
| return kDifOk; | |
| } | |
| dif_result_t dif_isp_wrapper_isp_irq_done( | |
| const dif_isp_wrapper_t *isp_wrapper) { | |
| if (isp_wrapper == NULL) { | |
| return kDifBadArg; | |
| } | |
| uint32_t irq_status = mmio_region_read32(isp_wrapper->base_addr, ISP_MIS); | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_ICR, irq_status); | |
| return kDifOk; | |
| } | |
| dif_result_t dif_isp_wrapper_mi_irq_done(const dif_isp_wrapper_t *isp_wrapper) { | |
| if (isp_wrapper == NULL) { | |
| return kDifBadArg; | |
| } | |
| uint32_t irq_status = | |
| mmio_region_read32(isp_wrapper->base_addr, MI_MIS); | |
| mmio_region_write32(isp_wrapper->base_addr, MI_ICR, irq_status); | |
| return kDifOk; | |
| } | |
| dif_result_t dif_isp_wrapper_read_en(const dif_isp_wrapper_t *isp_wrapper, | |
| uint32_t *result) { | |
| if (isp_wrapper == NULL) { | |
| return kDifBadArg; | |
| } | |
| //MI_MIS Masked Interrupt Status | |
| *result = mmio_region_read32(isp_wrapper->base_addr, 0xf00); | |
| return kDifOk; | |
| } | |
| dif_result_t dif_isp_wrapper_read_mi_mis(const dif_isp_wrapper_t *isp_wrapper, uint32_t *result) { | |
| if (isp_wrapper == NULL) { | |
| return kDifBadArg; | |
| } | |
| *result = mmio_region_read32(isp_wrapper->base_addr, MI_MIS); | |
| return kDifOk; | |
| } | |
| dif_result_t dif_isp_wrapper_read_isp_mis(const dif_isp_wrapper_t *isp_wrapper, uint32_t *result) { | |
| if (isp_wrapper == NULL) { | |
| return kDifBadArg; | |
| } | |
| *result = mmio_region_read32(isp_wrapper->base_addr, ISP_MIS); | |
| return kDifOk; | |
| } | |
| dif_result_t dif_isp_wrapper_write_isp_icr(const dif_isp_wrapper_t *isp_wrapper, uint32_t val) { | |
| if (isp_wrapper == NULL) { | |
| return kDifBadArg; | |
| } | |
| mmio_region_write32(isp_wrapper->base_addr, ISP_ICR, val); | |
| return kDifOk; | |
| } | |
| dif_result_t dif_isp_wrapper_write_mi_icr(const dif_isp_wrapper_t *isp_wrapper, uint32_t val) { | |
| if (isp_wrapper == NULL) { | |
| return kDifBadArg; | |
| } | |
| mmio_region_write32(isp_wrapper->base_addr, MI_ICR, val); | |
| return kDifOk; | |
| } |