u32 nv_read_part_test(u32 nvid,u32 off,u32 len)
{
    u32 ret;
    u8* tempdata;
    u32 i= 0;

    tempdata = (u8*)nv_malloc(len +1);
    if(NULL == tempdata)
    {
        return BSP_ERR_NV_MALLOC_FAIL;
    }

    ret = bsp_nvm_readpart(nvid,off,tempdata,len);
    if(NV_OK != ret)
    {
        nv_free(tempdata);
        return BSP_ERR_NV_READ_DATA_FAIL;
    }

    for(i=0;i<len;i++)
    {
        if((i%16) == 0)
        {
            printf("\n");
        }
        printf("%2.2x ",(u8)(*(tempdata+i)));
    }

    printf("\n");
    nv_free(tempdata);
    return NV_OK;
}
int tem_protect_nv_config(void)
{   
    unsigned int i = 0;
    unsigned int  ret = 0;
    unsigned int nv_id = 0;
    unsigned int length = 0;
    
    DRV_HKADC_DATA_AREA *p_area = (DRV_HKADC_DATA_AREA *)TEMPERATURE_VIRT_ADDR;  
    
    p_area->magic_start = TEMPERATURE_MAGIC_DATA;
    
    for(i = 0; i < HKADC_CHAN_MAX; i++)
    {
        nv_id = NV_ID_DRV_TEMP_HKADC_CONFIG;
        if(0 != (ret = bsp_nvm_readpart(nv_id, i*(sizeof(TEMP_HKADC_CHAN_CONFIG)), (u8*)(&(p_area->chan_cfg[i])), sizeof(TEMP_HKADC_CHAN_CONFIG))))
        {
            goto nv_hkadc_error;
        }
        
        length = p_area->chan_cfg[i].temp_data_len;
		/*lint -save -e734 -e571*/
        nv_id  = (unsigned int)(p_area->chan_cfg[i].temp_table[0].temp);
        /*lint -restore*/
        if(0 != nv_id && (0 != length))
        {
            if(0 != (ret = bsp_nvm_read(nv_id, (u8*)(p_area->chan_cfg[i].temp_table), sizeof(TEM_VOLT_TABLE) * length)))
            {
                goto nv_hkadc_error;
            }
        }
    }

    nv_id = NV_ID_DRV_TEMP_BATTERY_CONFIG;
    if(0 != (ret = bsp_nvm_read(nv_id, (u8*)(&(p_area->sys_temp_cfg)), sizeof(DRV_SYS_TEMP_STRU))))
    {
        goto nv_hkadc_error;
    }

    nv_id = NV_ID_DRV_TEMP_TSENS_CONFIG;
    if(0 != (ret = bsp_nvm_read(nv_id, (u8*)(p_area->tens_cfg), sizeof(TEMP_TSENS_REGION_CONFIG) * TSENS_REGION_MAX)))
    {
        goto nv_hkadc_error;
    }

    nv_id = NV_ID_DRV_TEMP_CHAN_MAP;
    if(0 != (ret = bsp_nvm_read(nv_id, (u8*)(p_area->phy_tbl), sizeof(BSP_U16) * HKADC_CHAN_MAX)))
    {
        goto nv_hkadc_error;
    }

    nv_id = NV_ID_DRV_TSENS_TABLE;
    if(0 != (ret = bsp_nvm_read(nv_id, (u8*)(&(p_area->region_cfg)), sizeof(TSENS_REGION_CONFIG))))
    {
        goto nv_hkadc_error;
    }

    p_area->magic_end = TEMPERATURE_MAGIC_DATA;

    return TEMPERATURE_OK;

nv_hkadc_error:
    tem_print_error("nv =0x%x read fail, ret = 0x%x, i = %d.\n", nv_id, ret, i);
    return TEMPERATURE_ERROR;
}