236 lines
6.4 KiB
C
236 lines
6.4 KiB
C
/* 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
|