msm8976-common: Calculate TrustZone size at runtime

Change-Id: I0e9154efb96f07347f87f7ca9d6829803815b40f
This commit is contained in:
dianlujitao 2017-01-26 16:34:17 +08:00 committed by LuK1337
parent 34842dbf45
commit e7edb4e11d
1 changed files with 10 additions and 5 deletions

View File

@ -32,13 +32,11 @@
#define MAX(a, b) (((a) > (b)) ? (a) : (b))
#define ALPHABET_LEN 256
#define KB 1024
#define TZ_PART_PATH "/dev/block/bootdevice/by-name/tz"
#define TZ_VER_STR "QC_IMAGE_VERSION_STRING="
#define TZ_VER_STR_LEN 24
#define TZ_VER_BUF_LEN 255
#define TZ_SZ 4096 * KB /* MMAP 4096K of TZ, TZ partition is 4096K */
/* Boyer-Moore string search implementation from Wikipedia */
@ -121,6 +119,7 @@ static char * bm_search(const char *str, size_t str_len, const char *pat,
static int get_tz_version(char *ver_str, size_t len) {
int ret = 0;
int fd;
int tz_size;
char *tz_data = NULL;
char *offset = NULL;
@ -130,21 +129,27 @@ static int get_tz_version(char *ver_str, size_t len) {
goto err_ret;
}
tz_data = (char *) mmap(NULL, TZ_SZ, PROT_READ, MAP_PRIVATE, fd, 0);
tz_size = lseek64(fd, 0, SEEK_END);
if (tz_size == -1) {
ret = errno;
goto err_fd_close;
}
tz_data = (char *) mmap(NULL, tz_size, PROT_READ, MAP_PRIVATE, fd, 0);
if (tz_data == (char *)-1) {
ret = errno;
goto err_fd_close;
}
/* Do Boyer-Moore search across TZ data */
offset = bm_search(tz_data, TZ_SZ, TZ_VER_STR, TZ_VER_STR_LEN);
offset = bm_search(tz_data, tz_size, TZ_VER_STR, TZ_VER_STR_LEN);
if (offset != NULL) {
strncpy(ver_str, offset + TZ_VER_STR_LEN, len);
} else {
ret = -ENOENT;
}
munmap(tz_data, TZ_SZ);
munmap(tz_data, tz_size);
err_fd_close:
close(fd);
err_ret: