11bd4fe43Sopenharmony_ci#!/bin/sh
21bd4fe43Sopenharmony_ci# Copyright (C) 2021 Hisilicon (Shanghai) Technologies Co., Ltd. All rights reserved.
31bd4fe43Sopenharmony_ci
41bd4fe43Sopenharmony_ci# Usage: ./load3516dv300 [ -r|-i|-a ] [ sensor0~1 ]
51bd4fe43Sopenharmony_ci#         -r : rmmod all modules
61bd4fe43Sopenharmony_ci#         -i : insmod all modules
71bd4fe43Sopenharmony_ci#         -a : rmmod all modules and then insmod them
81bd4fe43Sopenharmony_ci# e.g: RAW:        ./load3516dv300 -i -sensor0 imx335 -sensor1 imx335
91bd4fe43Sopenharmony_ci# e.g: BT1120/DC : ./load3516dv300 -i -sensor0 imx327 -sensor1 imx327 -osmem 128 -yuv0 1
101bd4fe43Sopenharmony_ci# e.g: BT656     : ./load3516dv300 -i -sensor0 imx327 -sensor1 imx327 -osmem 128 -yuv0 2
111bd4fe43Sopenharmony_ci
121bd4fe43Sopenharmony_ci####################Variables Definition##########################
131bd4fe43Sopenharmony_ci
141bd4fe43Sopenharmony_ciSNS_TYPE0=imx335;           # sensor type
151bd4fe43Sopenharmony_ciSNS_TYPE1=NULL;            	# sensor type
161bd4fe43Sopenharmony_ciYUV_TYPE0=0;                # 0 -- raw, 1 -- bt1120/DC, 2 --bt656
171bd4fe43Sopenharmony_ciCHIP_TYPE=hi3516dv300;      # chip type
181bd4fe43Sopenharmony_ci#DDR start:0x80000000,   kernel start:0x80000000,  OS(128M); MMZ start:0x88000000
191bd4fe43Sopenharmony_cimem_total=512                # 512M, total mem
201bd4fe43Sopenharmony_cimem_start=0x80000000          # phy mem start
211bd4fe43Sopenharmony_cios_mem_size=128               # 128M, os mem
221bd4fe43Sopenharmony_cimmz_start=0x88000000;         # mmz start addr
231bd4fe43Sopenharmony_cimmz_size=384M;               # 384M, mmz size
241bd4fe43Sopenharmony_ci##################################################################
251bd4fe43Sopenharmony_ci
261bd4fe43Sopenharmony_cireport_error()
271bd4fe43Sopenharmony_ci{
281bd4fe43Sopenharmony_ci    echo "******* Error: There's something wrong, please check! *****"
291bd4fe43Sopenharmony_ci    exit 1
301bd4fe43Sopenharmony_ci}
311bd4fe43Sopenharmony_ci
321bd4fe43Sopenharmony_ciinsert_isp()
331bd4fe43Sopenharmony_ci{
341bd4fe43Sopenharmony_ci    insmod hi3516cv500_isp.ko
351bd4fe43Sopenharmony_ci}
361bd4fe43Sopenharmony_ci
371bd4fe43Sopenharmony_ci
381bd4fe43Sopenharmony_ciinsert_ko()
391bd4fe43Sopenharmony_ci{
401bd4fe43Sopenharmony_ci    # driver load
411bd4fe43Sopenharmony_ci    #insmod hi_osal.ko anony=1 mmz_allocator=hisi mmz=anonymous,0,$mmz_start,$mmz_size || report_error
421bd4fe43Sopenharmony_ci    insmod hi_osal.ko anony=1 mmz_allocator=hisi mmz=anonymous,0,0xA8000000,384M
431bd4fe43Sopenharmony_ci    insmod hi_irq.ko
441bd4fe43Sopenharmony_ci    insmod hi_proc.ko
451bd4fe43Sopenharmony_ci
461bd4fe43Sopenharmony_ci    # sys config
471bd4fe43Sopenharmony_ci    insmod sys_config.ko chip=$CHIP_TYPE sensors=sns0=$SNS_TYPE0,sns1=$SNS_TYPE1, g_cmos_yuv_flag=$YUV_TYPE0
481bd4fe43Sopenharmony_ci    insmod hi3516cv500_base.ko
491bd4fe43Sopenharmony_ci    insmod hi3516cv500_sys.ko
501bd4fe43Sopenharmony_ci    insmod hi3516cv500_tde.ko
511bd4fe43Sopenharmony_ci    insmod hi3516cv500_vo_dev.ko
521bd4fe43Sopenharmony_ci    insmod hifb.ko video="hifb:vram0_size:16200"     # default fb0:1080p
531bd4fe43Sopenharmony_ci    insmod hi3516cv500_hdmi.ko
541bd4fe43Sopenharmony_ci
551bd4fe43Sopenharmony_ci    insmod hi_mipi_rx.ko
561bd4fe43Sopenharmony_ci}
571bd4fe43Sopenharmony_ci
581bd4fe43Sopenharmony_ciremove_ko()
591bd4fe43Sopenharmony_ci{
601bd4fe43Sopenharmony_ci    rmmod hi_mipi_rx
611bd4fe43Sopenharmony_ci    rmmod hifb
621bd4fe43Sopenharmony_ci    rmmod hi3516cv500_vo_dev.ko
631bd4fe43Sopenharmony_ci    rmmod hi3516cv500_tde
641bd4fe43Sopenharmony_ci    rmmod hi3516cv500_hdmi
651bd4fe43Sopenharmony_ci    rmmod hi3516cv500_sys
661bd4fe43Sopenharmony_ci    rmmod hi3516cv500_base
671bd4fe43Sopenharmony_ci    rmmod sys_config
681bd4fe43Sopenharmony_ci
691bd4fe43Sopenharmony_ci    rmmod hi_irq.ko
701bd4fe43Sopenharmony_ci    rmmod hi_proc.ko
711bd4fe43Sopenharmony_ci    rmmod hi_osal
721bd4fe43Sopenharmony_ci    rmmod hi_securec.ko
731bd4fe43Sopenharmony_ci}
741bd4fe43Sopenharmony_ci
751bd4fe43Sopenharmony_cisys_restore()
761bd4fe43Sopenharmony_ci{
771bd4fe43Sopenharmony_ci    ####################################################
781bd4fe43Sopenharmony_ci    clkcfg_hi3516cv500.sh > /dev/null
791bd4fe43Sopenharmony_ci
801bd4fe43Sopenharmony_ci    # system configuration
811bd4fe43Sopenharmony_ci    sysctl_hi3516cv500.sh  # > /dev/null
821bd4fe43Sopenharmony_ci    sns_config;
831bd4fe43Sopenharmony_ci}
841bd4fe43Sopenharmony_ci
851bd4fe43Sopenharmony_ciload_usage()
861bd4fe43Sopenharmony_ci{
871bd4fe43Sopenharmony_ci    echo "Usage:  ./load3516dv300 [-option] [sensor0~1]"
881bd4fe43Sopenharmony_ci    echo "options:"
891bd4fe43Sopenharmony_ci    echo "    -i                       insert modules"
901bd4fe43Sopenharmony_ci    echo "    -r                       remove modules"
911bd4fe43Sopenharmony_ci    echo "    -a                       remove modules first, then insert modules"
921bd4fe43Sopenharmony_ci    echo "    -sensor sensor_name      config sensor type [default: imx335]"
931bd4fe43Sopenharmony_ci    echo "    -total mem_size          config total mem size [unit: M, default: 512]"
941bd4fe43Sopenharmony_ci    echo "    -osmem os_mem_size       config os mem size [unit: M, default: 128]"
951bd4fe43Sopenharmony_ci    echo "    -h                       help information"
961bd4fe43Sopenharmony_ci    echo -e "Available sensors: imx327 imx335 os05a imx307"
971bd4fe43Sopenharmony_ci    echo -e "for example: ./load3516dv300 -i -sensor0 imx335 -sensor1 imx335\n"
981bd4fe43Sopenharmony_ci}
991bd4fe43Sopenharmony_ci
1001bd4fe43Sopenharmony_cicalc_mmz_info()
1011bd4fe43Sopenharmony_ci{
1021bd4fe43Sopenharmony_ci    mmz_start=`echo "$mem_start $os_mem_size"  |
1031bd4fe43Sopenharmony_ci    awk 'BEGIN { temp = 0; }
1041bd4fe43Sopenharmony_ci    {
1051bd4fe43Sopenharmony_ci        temp = $1/1024/1024 + $2;
1061bd4fe43Sopenharmony_ci    }
1071bd4fe43Sopenharmony_ci    END { printf("0x%x00000\n", temp); }'`
1081bd4fe43Sopenharmony_ci
1091bd4fe43Sopenharmony_ci    mmz_size=`echo "$mem_total $os_mem_size"  |
1101bd4fe43Sopenharmony_ci    awk 'BEGIN { temp = 0; }
1111bd4fe43Sopenharmony_ci    {
1121bd4fe43Sopenharmony_ci        temp = $1 - $2;
1131bd4fe43Sopenharmony_ci    }
1141bd4fe43Sopenharmony_ci    END { printf("%dM\n", temp); }'`
1151bd4fe43Sopenharmony_ci    echo "mmz_start: $mmz_start, mmz_size: $mmz_size"
1161bd4fe43Sopenharmony_ci}
1171bd4fe43Sopenharmony_ci
1181bd4fe43Sopenharmony_ci######################parse arg###################################
1191bd4fe43Sopenharmony_cib_arg_sensor0=0
1201bd4fe43Sopenharmony_cib_arg_sensor1=0
1211bd4fe43Sopenharmony_cib_arg_yuv_type0=0
1221bd4fe43Sopenharmony_cib_arg_insmod=0
1231bd4fe43Sopenharmony_cib_arg_remove=0
1241bd4fe43Sopenharmony_cib_arg_restore=0
1251bd4fe43Sopenharmony_cib_arg_total_mem=0
1261bd4fe43Sopenharmony_cib_arg_os_mem=0
1271bd4fe43Sopenharmony_ci
1281bd4fe43Sopenharmony_cifor arg in $@
1291bd4fe43Sopenharmony_cido
1301bd4fe43Sopenharmony_ci    if [ $b_arg_sensor0 -eq 1 ] ; then
1311bd4fe43Sopenharmony_ci        b_arg_sensor0=0;
1321bd4fe43Sopenharmony_ci        SNS_TYPE0=$arg;
1331bd4fe43Sopenharmony_ci    fi
1341bd4fe43Sopenharmony_ci    if [ $b_arg_sensor1 -eq 1 ] ; then
1351bd4fe43Sopenharmony_ci        b_arg_sensor1=0;
1361bd4fe43Sopenharmony_ci        SNS_TYPE1=$arg;
1371bd4fe43Sopenharmony_ci    fi
1381bd4fe43Sopenharmony_ci    if [ $b_arg_total_mem -eq 1 ]; then
1391bd4fe43Sopenharmony_ci        b_arg_total_mem=0;
1401bd4fe43Sopenharmony_ci        mem_total=$arg;
1411bd4fe43Sopenharmony_ci
1421bd4fe43Sopenharmony_ci        if [ -z $mem_total ]; then
1431bd4fe43Sopenharmony_ci            echo "[error] mem_total is null"
1441bd4fe43Sopenharmony_ci            exit;
1451bd4fe43Sopenharmony_ci        fi
1461bd4fe43Sopenharmony_ci    fi
1471bd4fe43Sopenharmony_ci
1481bd4fe43Sopenharmony_ci    if [ $b_arg_os_mem -eq 1 ] ; then
1491bd4fe43Sopenharmony_ci        b_arg_os_mem=0;
1501bd4fe43Sopenharmony_ci        os_mem_size=$arg;
1511bd4fe43Sopenharmony_ci
1521bd4fe43Sopenharmony_ci        if [ -z $os_mem_size ]; then
1531bd4fe43Sopenharmony_ci            echo "[error] os_mem_size is null"
1541bd4fe43Sopenharmony_ci            exit;
1551bd4fe43Sopenharmony_ci        fi
1561bd4fe43Sopenharmony_ci    fi
1571bd4fe43Sopenharmony_ci
1581bd4fe43Sopenharmony_ci    if [ $b_arg_yuv_type0 -eq 1 ] ; then
1591bd4fe43Sopenharmony_ci        b_arg_yuv_type0=0;
1601bd4fe43Sopenharmony_ci        YUV_TYPE0=$arg;
1611bd4fe43Sopenharmony_ci    fi
1621bd4fe43Sopenharmony_ci
1631bd4fe43Sopenharmony_ci    case $arg in
1641bd4fe43Sopenharmony_ci        "-i")
1651bd4fe43Sopenharmony_ci            b_arg_insmod=1;
1661bd4fe43Sopenharmony_ci            ;;
1671bd4fe43Sopenharmony_ci        "-r")
1681bd4fe43Sopenharmony_ci            b_arg_remove=1;
1691bd4fe43Sopenharmony_ci            ;;
1701bd4fe43Sopenharmony_ci        "-a")
1711bd4fe43Sopenharmony_ci            b_arg_insmod=1;
1721bd4fe43Sopenharmony_ci            b_arg_remove=1;
1731bd4fe43Sopenharmony_ci            ;;
1741bd4fe43Sopenharmony_ci        "-h")
1751bd4fe43Sopenharmony_ci            load_usage;
1761bd4fe43Sopenharmony_ci            ;;
1771bd4fe43Sopenharmony_ci        "-sensor0")
1781bd4fe43Sopenharmony_ci            b_arg_sensor0=1;
1791bd4fe43Sopenharmony_ci            ;;
1801bd4fe43Sopenharmony_ci        "-sensor")
1811bd4fe43Sopenharmony_ci            b_arg_sensor0=1;
1821bd4fe43Sopenharmony_ci            ;;
1831bd4fe43Sopenharmony_ci        "-sensor1")
1841bd4fe43Sopenharmony_ci            b_arg_sensor1=1;
1851bd4fe43Sopenharmony_ci            ;;
1861bd4fe43Sopenharmony_ci        "-osmem")
1871bd4fe43Sopenharmony_ci            b_arg_os_mem=1;
1881bd4fe43Sopenharmony_ci            ;;
1891bd4fe43Sopenharmony_ci        "-yuv0")
1901bd4fe43Sopenharmony_ci            b_arg_yuv_type0=1;
1911bd4fe43Sopenharmony_ci            ;;
1921bd4fe43Sopenharmony_ci        "-total")
1931bd4fe43Sopenharmony_ci            b_arg_total_mem=1;
1941bd4fe43Sopenharmony_ci            ;;
1951bd4fe43Sopenharmony_ci        "-restore")
1961bd4fe43Sopenharmony_ci            b_arg_restore=1;
1971bd4fe43Sopenharmony_ci            ;;
1981bd4fe43Sopenharmony_ci    esac
1991bd4fe43Sopenharmony_cidone
2001bd4fe43Sopenharmony_ci#######################parse arg end########################
2011bd4fe43Sopenharmony_ciif [ $os_mem_size -ge $mem_total ] ; then
2021bd4fe43Sopenharmony_ci    echo "[err] os_mem[$os_mem_size], over total_mem[$mem_total]"
2031bd4fe43Sopenharmony_ci    exit;
2041bd4fe43Sopenharmony_cifi
2051bd4fe43Sopenharmony_ci
2061bd4fe43Sopenharmony_cicalc_mmz_info;
2071bd4fe43Sopenharmony_ci
2081bd4fe43Sopenharmony_ci#######################Action###############################
2091bd4fe43Sopenharmony_ci
2101bd4fe43Sopenharmony_ciif [ $# -lt 1 ]; then
2111bd4fe43Sopenharmony_ci    load_usage;
2121bd4fe43Sopenharmony_ci    exit 0;
2131bd4fe43Sopenharmony_cifi
2141bd4fe43Sopenharmony_ci
2151bd4fe43Sopenharmony_ci
2161bd4fe43Sopenharmony_ciif [ $b_arg_remove -eq 1 ]; then
2171bd4fe43Sopenharmony_ci    remove_ko;
2181bd4fe43Sopenharmony_cifi
2191bd4fe43Sopenharmony_ci
2201bd4fe43Sopenharmony_ciif [ $b_arg_insmod -eq 1 ]; then
2211bd4fe43Sopenharmony_ci    insert_ko;
2221bd4fe43Sopenharmony_cifi
2231bd4fe43Sopenharmony_ci
2241bd4fe43Sopenharmony_ciif [ $b_arg_restore -eq 1 ]; then
2251bd4fe43Sopenharmony_ci    sys_restore;
2261bd4fe43Sopenharmony_cifi
2271bd4fe43Sopenharmony_ci
228