Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e9654a29 authored by Zhen Kong's avatar Zhen Kong Committed by Gerrit - the friendly Code Review server
Browse files

firmware: qcom: tz_log: fix reading log issue on secure boot enabled device



Unlike other debug logs, qsee and hyp log buffer are separated from tz
diag region, so it is not necessary to read tz diag region before
reading qsee or hyp logs. Otherwise, when tz diag region is encrypted
and locked on secure boot enabled devices, reading qsee or hyp logs will
cause XPU violation at tz diag region. Also, update the diagnostic table
with some new items

Change-Id: I2872c4dce876763b5dac5656a982f6ce29cc81f4
Signed-off-by: default avatarZhen Kong <zkong@codeaurora.org>
parent 8d3676a0
Loading
Loading
Loading
Loading
+35 −2
Original line number Diff line number Diff line
@@ -57,6 +57,11 @@
 * TZ 3.X version info
 */
#define QSEE_VERSION_TZ_3_X 0x800000

#define TZBSP_AES_256_ENCRYPTED_KEY_SIZE 256
#define TZBSP_NONCE_LEN 12
#define TZBSP_TAG_LEN 16

/*
 * VMID Table
 */
@@ -125,6 +130,14 @@ struct tzdbg_int_t {
	uint64_t int_count[TZBSP_MAX_CPU_COUNT]; /* # of times seen per CPU */
};

/* warm boot reason for cores */
struct tzbsp_diag_wakeup_info_t {
	/* Wake source info : APCS_GICC_HPPIR */
	uint32_t HPPIR;
	/* Wake source info : APCS_GICC_AHPPIR */
	uint32_t AHPPIR;
};

/*
 * Log ring buffer position
 */
@@ -179,6 +192,10 @@ struct tzdbg_t {
	 * Ring Buffer Length
	 */
	uint32_t ring_len;

	/* Offset for Wakeup info */
	uint32_t wakeup_info_off;

	/*
	 * VMID to EE Mapping
	 */
@@ -193,6 +210,16 @@ struct tzdbg_t {
	struct tzdbg_reset_info_t reset_info[TZBSP_MAX_CPU_COUNT];
	uint32_t num_interrupts;
	struct tzdbg_int_t  int_info[TZBSP_DIAG_INT_NUM];

	/* Wake up info */
	struct tzbsp_diag_wakeup_info_t  wakeup_info[TZBSP_MAX_CPU_COUNT];

	uint8_t key[TZBSP_AES_256_ENCRYPTED_KEY_SIZE];

	uint8_t nonce[TZBSP_NONCE_LEN];

	uint8_t tag[TZBSP_TAG_LEN];

	/*
	 * We need at least 2K for the ring buffer
	 */
@@ -731,10 +758,16 @@ static ssize_t tzdbgfs_read(struct file *file, char __user *buf,
	int len = 0;
	int *tz_id =  file->private_data;

	if (*tz_id == TZDBG_BOOT || *tz_id == TZDBG_RESET ||
		*tz_id == TZDBG_INTERRUPT || *tz_id == TZDBG_GENERAL ||
		*tz_id == TZDBG_VMID || *tz_id == TZDBG_LOG)
		memcpy_fromio((void *)tzdbg.diag_buf, tzdbg.virt_iobase,
						debug_rw_buf_size);

	if (*tz_id == TZDBG_HYP_GENERAL || *tz_id == TZDBG_HYP_LOG)
		memcpy_fromio((void *)tzdbg.hyp_diag_buf, tzdbg.hyp_virt_iobase,
					tzdbg.hyp_debug_rw_buf_size);

	switch (*tz_id) {
	case TZDBG_BOOT:
		len = _disp_tz_boot_stats();