77 lines
2.2 KiB
C
Executable file
77 lines
2.2 KiB
C
Executable file
/*
|
|
* Copyright (c) 2018 Samsung Electronics Co., Ltd.
|
|
* http://www.samsung.com/
|
|
*
|
|
* EXYNOS - Per-Page Memory Protection Unit(PPMPU) fail detector
|
|
* Author: Junho Choi <junhosj.choi@samsung.com>
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2 as
|
|
* published by the Free Software Foundation.
|
|
*/
|
|
|
|
#ifndef __EXYNOS_PPMPU_H
|
|
#define __EXYNOS_PPMPU_H
|
|
|
|
/* The maximum number of PPMPU channel */
|
|
#define MAX_NUM_OF_PPMPU_CHANNEL (4)
|
|
|
|
/* SFR bits information */
|
|
/* PPMPU Interrupt Status Register */
|
|
#define PPMPU_WRITE_INTR_STATUS_OVERRUN (1 << 3)
|
|
#define PPMPU_READ_INTR_STATUS_OVERRUN (1 << 2)
|
|
#define PPMPU_WRITE_INTR_STATUS (1 << 1)
|
|
#define PPMPU_READ_INTR_STATUS (1 << 0)
|
|
|
|
/* PPMPU Illegal Read/Write Address High Register */
|
|
#define PPMPU_ILLEGAL_ADDR_HIGH_MASK (0xFF << 0)
|
|
|
|
/* PPMPU Illegal Read/Write Field Register */
|
|
#define PPMPU_ILLEGAL_FIELD_FAIL_VC_MASK (0xF << 24)
|
|
#define PPMPU_ILLEGAL_FIELD_FAIL_ID_MASK (0xFFFFFFFF)
|
|
|
|
/* Return values from SMC */
|
|
#define PPMPU_ERROR_INVALID_CH_NUM (0xA00A)
|
|
#define PPMPU_ERROR_INVALID_FAIL_INFO_SIZE (0xA00B)
|
|
|
|
#define PPMPU_NEED_FAIL_INFO_LOGGING (0x1EED)
|
|
#define PPMPU_SKIP_FAIL_INFO_LOGGING (0x2419)
|
|
|
|
/* Flag whether fail read information is logged */
|
|
#define STR_INFO_FLAG (0x50504D50) /* PPMP */
|
|
|
|
/* Direction of illegal access */
|
|
#define PPMPU_ILLEGAL_ACCESS_READ (0)
|
|
#define PPMPU_ILLEGAL_ACCESS_WRITE (1)
|
|
|
|
#define PPMPU_DIRECTION_SHIFT (16)
|
|
|
|
#ifndef __ASSEMBLY__
|
|
/* Registers of PPMPU Fail Information */
|
|
struct ppmpu_fail_info {
|
|
unsigned int ppmpu_intr_stat;
|
|
unsigned int ppmpu_illegal_read_addr_low;
|
|
unsigned int ppmpu_illegal_read_addr_high;
|
|
unsigned int ppmpu_illigal_read_field;
|
|
unsigned int ppmpu_illegal_write_addr_low;
|
|
unsigned int ppmpu_illegal_write_addr_high;
|
|
unsigned int ppmpu_illigal_write_field;
|
|
};
|
|
|
|
/* Data structure for PPMPU Fail Information */
|
|
struct ppmpu_info_data {
|
|
struct device *dev;
|
|
|
|
struct ppmpu_fail_info *fail_info;
|
|
dma_addr_t fail_info_pa;
|
|
unsigned int ch_num;
|
|
unsigned int tzc_ver;
|
|
|
|
unsigned int irq[MAX_NUM_OF_PPMPU_CHANNEL * 2];
|
|
unsigned int irqcnt;
|
|
|
|
unsigned int info_flag;
|
|
int need_log;
|
|
};
|
|
#endif /* __ASSEMBLY__ */
|
|
#endif /* __EXYNOS_PPMPU_H */
|