mirror of
https://github.com/hardkernel/kernel_common_drivers.git
synced 2026-06-25 12:03:48 +09:00
dd14076118
PD#SWPL-78980 Problem: a1 efuse test fail Solution: 1. modify share memory map from noncache to cache 2. use share memory interface which exported by secmonitor driver 3. porting the code of efuse_obj_read/write Verify: c2 Change-Id: Iba250028899eb69df3584c334bfbd7dbd56eb8c0 Signed-off-by: wanwei.jiang <wanwei.jiang@amlogic.com>
136 lines
2.9 KiB
C
136 lines
2.9 KiB
C
/* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */
|
|
/*
|
|
* Copyright (c) 2019 Amlogic, Inc. All rights reserved.
|
|
*/
|
|
|
|
#ifndef __EFUSE_H
|
|
#define __EFUSE_H
|
|
|
|
/* #define EFUSE_READ_ONLY */
|
|
|
|
#ifndef EFUSE_READ_ONLY
|
|
#define EFUSE_CLASS_ATTR CLASS_ATTR_RW
|
|
#else
|
|
#define EFUSE_CLASS_ATTR CLASS_ATTR_RO
|
|
#endif
|
|
|
|
#define EFUSE_CHECK_NAME_LEN 32
|
|
|
|
struct aml_efuse_dev {
|
|
struct platform_device *pdev;
|
|
struct class cls;
|
|
struct cdev cdev;
|
|
dev_t devno;
|
|
void __iomem *reg_base;
|
|
unsigned int secureboot_mask;
|
|
char name[EFUSE_CHECK_NAME_LEN];
|
|
};
|
|
|
|
struct aml_efuse_key {
|
|
int num;
|
|
struct efusekey_info *infos;
|
|
};
|
|
|
|
#define EFUSE_INFO_GET _IO('f', 0x40)
|
|
|
|
#define EFUSE_HAL_API_READ 0
|
|
#define EFUSE_HAL_API_WRITE 1
|
|
#define EFUSE_HAL_API_USER_MAX 3
|
|
|
|
#define AML_DATA_PROCESS (0x820000FF)
|
|
#define AML_D_P_W_EFUSE_AMLOGIC (0x20)
|
|
#define EFUSE_PATTERN_SIZE (0x400)
|
|
#define EFUSE_OBJ_READ (0x8200003B)
|
|
#define EFUSE_OBJ_WRITE (0x8200003C)
|
|
|
|
enum efuse_obj_status_e {
|
|
EFUSE_OBJ_SUCCESS = 0,
|
|
|
|
EFUSE_OBJ_ERR_OTHER_INTERNAL = 1,
|
|
|
|
EFUSE_OBJ_ERR_INVALID_DATA = 100,
|
|
EFUSE_OBJ_ERR_NOT_FOUND,
|
|
EFUSE_OBJ_ERR_DEPENDENCY,
|
|
EFUSE_OBJ_ERR_SIZE,
|
|
EFUSE_OBJ_ERR_NOT_SUPPORT,
|
|
|
|
EFUSE_OBJ_ERR_ACCESS = 200,
|
|
EFUSE_OBJ_ERR_WRITE_PROTECTED = 201,
|
|
|
|
EFUSE_OBJ_ERR_UNKNOWN = 300,
|
|
EFUSE_OBJ_ERR_INTERNAL,
|
|
};
|
|
|
|
enum efuse_obj_info_e {
|
|
EFUSE_OBJ_EFUSE_DATA = 0,
|
|
EFUSE_OBJ_LOCK_STATUS,
|
|
};
|
|
|
|
struct efuse_obj_field_t {
|
|
char name[48];
|
|
unsigned char data[32];
|
|
unsigned int size;
|
|
};
|
|
|
|
/* efuse HAL_API arg */
|
|
struct efuse_hal_api_arg {
|
|
unsigned int cmd;
|
|
unsigned int offset;
|
|
unsigned int size;
|
|
unsigned long buffer;
|
|
unsigned long retcnt;
|
|
};
|
|
|
|
struct aml_efuse_cmd {
|
|
unsigned int read_cmd;
|
|
unsigned int write_cmd;
|
|
unsigned int get_max_cmd;
|
|
unsigned int mem_in_base_cmd;
|
|
unsigned int mem_out_base_cmd;
|
|
};
|
|
|
|
struct lockable_info {
|
|
char itemname[EFUSE_CHECK_NAME_LEN];
|
|
unsigned int subcmd;
|
|
};
|
|
|
|
struct aml_efuse_lockable_check {
|
|
unsigned int main_cmd;
|
|
unsigned int item_num;
|
|
struct lockable_info *infos;
|
|
};
|
|
|
|
extern struct aml_efuse_cmd efuse_cmd;
|
|
extern void __iomem *sharemem_input_base;
|
|
extern void __iomem *sharemem_output_base;
|
|
extern unsigned int efuse_obj_cmd_status;
|
|
|
|
ssize_t efuse_get_max(void);
|
|
ssize_t efuse_read_usr(char *buf, size_t count, loff_t *ppos);
|
|
ssize_t efuse_write_usr(char *buf, size_t count, loff_t *ppos);
|
|
unsigned long efuse_amlogic_set(char *buf, size_t count);
|
|
u32 efuse_obj_write(u32 obj_id, char *name, u8 *buff, u32 size);
|
|
u32 efuse_obj_read(u32 obj_id, char *name, u8 *buff, u32 *size);
|
|
|
|
/*return: 0:is configurated, -1: don't cfg*/
|
|
int efuse_burn_lockable_is_cfg(char *itemname);
|
|
/*
|
|
* return: 1:burned(wrote), 0: not write, -1: fail
|
|
*/
|
|
int efuse_burn_check_burned(char *itemname);
|
|
|
|
#ifdef CONFIG_AMLOGIC_EFUSE
|
|
int __init aml_efuse_init(void);
|
|
void aml_efuse_exit(void);
|
|
#else
|
|
static int __init aml_efuse_init(void)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static void aml_efuse_exit(void)
|
|
{
|
|
}
|
|
#endif
|
|
#endif
|