/* sec_nad.h * * Copyright (C) 2016 Samsung Electronics * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * 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 for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef SEC_NAD_H #define SEC_NAD_H #if defined(CONFIG_SEC_FACTORY) #define NAD_PARAM_NAME "/dev/block/NAD_REFER" #define NAD_OFFSET 8192 #define NAD_ENV_OFFSET 10240 #define NAD_PARAM_READ 0 #define NAD_PARAM_WRITE 1 #define NAD_PARAM_EMPTY 2 #define NAD_DRAM_TEST_NONE 0 #define NAD_DRAM_TEST_PASS 1 #define NAD_DRAM_TEST_FAIL 2 #define NAD_BUFF_SIZE 10 #define NAD_CMD_LIST 3 #define NAD_ACAT_FAIL_SKIP_FLAG 1001 #define UNLIMITED_LOOP_FLAG 1002 #define NAD_SUPPORT_FLAG 1003 #define NAD_ACAT_FLAG 5001 #define NAD_SECOND_FLAG 6001 #define NAD_ACAT_SECOND_FLAG 5002 #define NAD_RETRY_COUNT 30 #define NAD_FAIL_COUNT 10 #define NAD_HPM_BIG_LEVELCOUNT 9 #define NAD_HPM_LIT_LEVELCOUNT 6 #define NAD_HPM_G3D_LEVELCOUNT 4 #define NAD_HPM_MIF_LEVELCOUNT 8 /* MAGIC CODE for NAD API Success */ #define MAGIC_NAD_API_SUCCESS 6057 #if defined(CONFIG_SEC_SUPPORT_SECOND_NAD) typedef struct{ volatile u64 target_addr; /* target address for test */ volatile u64 expected_val; /* written val */ volatile u64 read_val; /* read real value */ unsigned int rank_id; /* dram detail infomation*/ unsigned int bank_id; unsigned int low_data; unsigned int col_data; unsigned int test_item; /* mif or dram */ unsigned int big_level; unsigned int lit_level; unsigned int mif_level; unsigned int int_level; unsigned int op_core_num; /* operating CORE num */ }nad_dram_test_info; typedef struct { char magic[8]; unsigned int error_count; nad_dram_test_info nad_dram_fail_info[20]; }nad_dram_information; typedef struct { unsigned int das; char das_string[10]; unsigned int block; char block_string[10]; unsigned int level; unsigned int vector; char vector_string[10]; }nad_fail_information; #if defined(CONFIG_SEC_NAD_HPM) typedef struct { u8 level; u8 fused_hpm; u8 pba_hpm[10]; u8 pba_hpm_min; unsigned int pba_hpm_ave; unsigned int pba_hpm_var; }hpm_level_information; typedef struct { hpm_level_information hpm_level_info[15]; //L0 ~ L15 u8 level_count; u8 block_pass_fail; }hpm_information; typedef struct { char magic[10]; hpm_information hpm_info[4]; //BIG, LITT, G3D, MIF u8 device_pass_fail; u8 hpm_invalid; char LotID[7]; u8 asv_table_ver; u8 big_grp; u8 lit_grp; u8 g3d_grp; u8 mif_grp; }nad_hpm; #endif typedef struct { unsigned int nad_inform1; unsigned int nad_inform2; nad_fail_information nad_fail_info; }nad_fail_backup_data; #endif #if defined(CONFIG_SEC_NAD_API) static char nad_api_result_string[20*30] = {0,}; typedef struct { char name[20]; unsigned int result; } nad_api_results; #endif struct nad_env { char nad_factory[10]; char nad_result[4]; unsigned int nad_data; char nad_acat[10]; char nad_acat_result[4]; unsigned int nad_acat_data; unsigned int nad_acat_loop_count; unsigned int nad_acat_real_count; char nad_dram_test_need[4]; unsigned int nad_dram_test_result; unsigned int nad_dram_fail_data; unsigned long nad_dram_fail_address; int current_nad_status; unsigned int nad_acat_skip_fail; unsigned int unlimited_loop; unsigned int nad_support; unsigned int max_temperature; unsigned int nad_acat_max_temperature; #if defined(CONFIG_SEC_SUPPORT_SECOND_NAD) unsigned int nad_inform2_data; unsigned int nad_inform3_data; unsigned int nad_init_temperature; unsigned int nad_acat_init_temperature; unsigned int nad_acat_inform2_data; unsigned int nad_acat_inform3_data; char nad_second[10]; char nad_second_result[4]; unsigned int nad_second_data; unsigned int nad_second_inform2_data; unsigned int nad_second_inform3_data; unsigned int nad_second_max_temperature; unsigned int nad_second_init_temperature; char nad_acat_second[10]; char nad_acat_second_result[4]; unsigned int nad_acat_second_data; unsigned int nad_acat_second_inform2_data; unsigned int nad_acat_second_inform3_data; unsigned int nad_acat_second_max_temperature; unsigned int nad_acat_second_init_temperature; nad_fail_information nad_fail_info; /* 1st NAD */ nad_fail_information nad_second_fail_info; /* 2nd NAD */ nad_fail_information nad_acat_fail_info; /* ACAT 1st NAD */ nad_fail_information nad_acat_second_fail_info; /* ACAT 2nd NAD */ nad_dram_information nad_dram_fail_information; nad_dram_information nad_second_dram_fail_information; nad_dram_information nad_acat_dram_fail_information; nad_dram_information nad_acat_second_dram_fail_information; unsigned int nad_acat_second_running_count; unsigned int acat_fail_retry_count; nad_fail_backup_data acat_fail_backup[NAD_FAIL_COUNT]; #if defined(CONFIG_SEC_NAD_HPM) nad_hpm nad_hpm_info; int hpm_min_diff_level_big[NAD_HPM_BIG_LEVELCOUNT]; int hpm_min_diff_level_lit[NAD_HPM_LIT_LEVELCOUNT]; int hpm_min_diff_level_g3d[NAD_HPM_G3D_LEVELCOUNT]; int hpm_min_diff_level_mif[NAD_HPM_MIF_LEVELCOUNT]; #endif #if defined(CONFIG_SEC_NAD_API) int nad_api_status; int nad_api_magic; int nad_api_total_count; nad_api_results nad_api_info[30]; #endif #endif int nad_enter_status; }; struct sec_nad_param { struct work_struct sec_nad_work; struct delayed_work sec_nad_delay_work; unsigned long offset; int state; int retry_cnt; int curr_cnt; }; static struct sec_nad_param sec_nad_param_data; static struct nad_env sec_nad_env; extern unsigned int lpcharge; static DEFINE_MUTEX(sec_nad_param_lock); #endif #endif