150 lines
3.4 KiB
C
Executable File
150 lines
3.4 KiB
C
Executable File
#ifndef _RKP_H
|
|
#define _RKP_H
|
|
|
|
#ifndef __ASSEMBLY__
|
|
|
|
/* uH_RKP Command ID */
|
|
enum {
|
|
RKP_START = 1,
|
|
RKP_DEFERRED_START,
|
|
RKP_WRITE_PGT1,
|
|
RKP_WRITE_PGT2,
|
|
RKP_WRITE_PGT3,
|
|
RKP_EMULT_TTBR0,
|
|
RKP_EMULT_TTBR1,
|
|
RKP_EMULT_DORESUME,
|
|
RKP_FREE_PGD,
|
|
RKP_NEW_PGD,
|
|
RKP_KASLR_MEM,
|
|
RKP_FIMC_VERIFY,
|
|
/* CFP cmds */
|
|
RKP_JOPP_INIT,
|
|
RKP_ROPP_INIT,
|
|
RKP_ROPP_SAVE,
|
|
RKP_ROPP_RELOAD,
|
|
/* and KDT cmds */
|
|
RKP_NOSHIP,
|
|
RKP_MAX
|
|
};
|
|
|
|
#define RKP_PREFIX UL(0x83800000)
|
|
|
|
#define RKP_INIT_MAGIC 0x5afe0001
|
|
#define RKP_VMM_BUFFER 0x600000
|
|
#define RKP_RO_BUFFER UL(0x800000)
|
|
|
|
#define RKP_FIMC_FAIL 0x10
|
|
#define RKP_FIMC_SUCCESS 0xa5
|
|
|
|
/* For RKP Memory*/
|
|
#define RKP_NUM_MEM 0x02
|
|
|
|
/* For 6G RAM */
|
|
#define RKP_PHYS_MAP_START 0xAFE00000
|
|
#define RKP_PHYS_MAP_SIZE 0x700000
|
|
#define RKP_PGT_BITMAP_LEN 0x30000
|
|
|
|
#define RKP_ROBUF_START 0xB0808000
|
|
#define RKP_ROBUF_SIZE (0x7f8000ULL)
|
|
|
|
#define RKP_RBUF_VA (phys_to_virt(RKP_ROBUF_START))
|
|
#define RO_PAGES (RKP_ROBUF_SIZE >> PAGE_SHIFT) // (RKP_ROBUF_SIZE/PAGE_SIZE)
|
|
#define CRED_JAR_RO "cred_jar_ro"
|
|
#define TSEC_JAR "tsec_jar"
|
|
#define VFSMNT_JAR "vfsmnt_cache"
|
|
|
|
#ifdef CONFIG_KNOX_KAP
|
|
extern int boot_mode_security;
|
|
#endif
|
|
|
|
extern u8 rkp_pgt_bitmap[];
|
|
extern u8 rkp_map_bitmap[];
|
|
|
|
typedef struct rkp_init rkp_init_t;
|
|
extern u8 rkp_started;
|
|
extern void *rkp_ro_alloc(void);
|
|
extern void rkp_ro_free(void *free_addr);
|
|
extern unsigned int is_rkp_ro_page(u64 addr);
|
|
|
|
struct rkp_init {
|
|
u32 magic;
|
|
u64 vmalloc_start;
|
|
u64 vmalloc_end;
|
|
u64 init_mm_pgd;
|
|
u64 id_map_pgd;
|
|
u64 zero_pg_addr;
|
|
u64 rkp_pgt_bitmap;
|
|
u64 rkp_map_bitmap;
|
|
u32 rkp_pgt_bitmap_size;
|
|
u32 fimc_verify;
|
|
u64 fimc_phys_addr;
|
|
u64 _text;
|
|
u64 _etext;
|
|
u64 extra_memory_addr;
|
|
u32 extra_memory_size;
|
|
u64 physmap_addr;
|
|
u64 _srodata;
|
|
u64 _erodata;
|
|
u32 large_memory;
|
|
};
|
|
|
|
#define rkp_is_pg_protected(va) rkp_is_protected(va,__pa(va),(u64 *)rkp_pgt_bitmap,1)
|
|
#define rkp_is_pg_dbl_mapped(pa) rkp_is_protected((u64)__va(pa),pa,(u64 *)rkp_map_bitmap,0)
|
|
|
|
#define RKP_PHYS_ADDR_MASK ((1ULL << 40)-1)
|
|
|
|
/*
|
|
* The following all assume PHYS_OFFSET is fix addr
|
|
*/
|
|
#define PHYS_PFN_OFFSET_MIN_DRAM1 (0x80000ULL)
|
|
#define PHYS_PFN_OFFSET_MAX_DRAM1 (0x100000ULL)
|
|
#define PHYS_PFN_OFFSET_MIN_DRAM2 (0x880000ULL)
|
|
#ifdef CONFIG_UH_RKP_6G
|
|
#define PHYS_PFN_OFFSET_MAX_DRAM2 (0x980000ULL)
|
|
#else
|
|
#define PHYS_PFN_OFFSET_MAX_DRAM2 (0x900000ULL)
|
|
#endif
|
|
|
|
#define RKP_EXTRA_MEM_SIZE 0x600000
|
|
|
|
#define DRAM_PFN_GAP (PHYS_PFN_OFFSET_MIN_DRAM2 - PHYS_PFN_OFFSET_MAX_DRAM1)
|
|
|
|
#define FIMC_LIB_OFFSET_VA (VMALLOC_START + 0xF6000000)
|
|
#define FIMC_LIB_START_VA (FIMC_LIB_OFFSET_VA + 0x04000000)
|
|
#define FIMC_VRA_LIB_SIZE (0x80000)
|
|
#define FIMC_DDK_LIB_SIZE (0x400000)
|
|
#define FIMC_RTA_LIB_SIZE (0x300000)
|
|
|
|
#define FIMC_LIB_SIZE (FIMC_VRA_LIB_SIZE + FIMC_DDK_LIB_SIZE + FIMC_RTA_LIB_SIZE)
|
|
|
|
static inline u64 rkp_get_sys_index(u64 pfn) {
|
|
if (pfn >= PHYS_PFN_OFFSET_MIN_DRAM1
|
|
&& pfn < PHYS_PFN_OFFSET_MAX_DRAM1) {
|
|
return ((pfn) - PHYS_PFN_OFFSET);
|
|
}
|
|
if (pfn >= PHYS_PFN_OFFSET_MIN_DRAM2
|
|
&& pfn < PHYS_PFN_OFFSET_MAX_DRAM2) {
|
|
return ((pfn) - PHYS_PFN_OFFSET - DRAM_PFN_GAP);
|
|
}
|
|
return (~0ULL);
|
|
}
|
|
|
|
static inline u8 rkp_is_protected(u64 va,u64 pa, u64 *base_addr,u64 type)
|
|
{
|
|
u64 phys_addr = pa & (RKP_PHYS_ADDR_MASK);
|
|
u64 *p = base_addr;
|
|
u64 rindex;
|
|
u8 val;
|
|
u64 index = rkp_get_sys_index((phys_addr>>PAGE_SHIFT));
|
|
|
|
if (index == (~0ULL))
|
|
return 0;
|
|
|
|
p += (index>>6);
|
|
rindex = index % 64;
|
|
val = (((*p) & (1ULL<<rindex))?1:0);
|
|
return val;
|
|
}
|
|
#endif //__ASSEMBLY__
|
|
#endif //_RKP_H
|