diff options
author | Roberto Pereira <rpere@google.com> | 2018-03-15 14:27:12 -0700 |
---|---|---|
committer | faqiang.zhu <faqiang.zhu@nxp.com> | 2018-11-12 09:18:35 +0800 |
commit | 8b91ad3b1e3ce911c287e3e035de4cd920e75919 (patch) | |
tree | 6281a38a76dfa84c3eb13a87582f4ac5e0327970 /lib | |
parent | 5f019ea53678d3bbda2ea9d84fdff3bcb02628e3 (diff) |
ql-tipc: sysdeps: Change memory allocation to be page based
Changed trusty_membuf_alloc and trusty_membuf_free to trusty_alloc_pages and
trusty_free_pages. The memory allocated by these functions is intended
to be shared with the secure world so it should be inherently page based.
Updated u-boot sysdeps and trusty_ipc_dev_create/shutdown to use these
new functions
Change-Id: Ica1aa5b0cb50eba6ce18914d048e731133d94c4f
Diffstat (limited to 'lib')
-rw-r--r-- | lib/trusty/ql-tipc/ipc_dev.c | 21 | ||||
-rw-r--r-- | lib/trusty/ql-tipc/sysdeps/sysdeps_uboot.c | 8 |
2 files changed, 15 insertions, 14 deletions
diff --git a/lib/trusty/ql-tipc/ipc_dev.c b/lib/trusty/ql-tipc/ipc_dev.c index f388202de57..0f6f5f90907 100644 --- a/lib/trusty/ql-tipc/ipc_dev.c +++ b/lib/trusty/ql-tipc/ipc_dev.c @@ -156,14 +156,15 @@ static int check_response(struct trusty_ipc_dev *dev, int trusty_ipc_dev_create(struct trusty_ipc_dev **idev, struct trusty_dev *tdev, - size_t buf_size) + size_t shared_buf_size) { int rc; struct trusty_ipc_dev *dev; trusty_assert(idev); - - trusty_debug("%s: Create new Trusty IPC device (%zu)\n", __func__, buf_size); + trusty_assert(!(shared_buf_size % PAGE_SIZE)); + trusty_debug("%s: Create new Trusty IPC device (%zu)\n", __func__, + shared_buf_size); /* allocate device context */ dev = trusty_calloc(1, sizeof(*dev)); @@ -174,14 +175,14 @@ int trusty_ipc_dev_create(struct trusty_ipc_dev **idev, dev->tdev = tdev; /* allocate shared buffer */ - dev->buf_size = buf_size; - dev->buf_vaddr = trusty_membuf_alloc(&dev->buf_ns, buf_size); + dev->buf_size = shared_buf_size; + dev->buf_vaddr = trusty_alloc_pages(&dev->buf_ns, + shared_buf_size / PAGE_SIZE); if (!dev->buf_vaddr) { trusty_error("%s: failed to allocate shared memory\n", __func__); rc = TRUSTY_ERR_NO_MEMORY; - goto err_alloc_membuf; + goto err_alloc_pages; } - /* call secure OS to register shared buffer */ rc = trusty_dev_init_ipc(dev->tdev, &dev->buf_ns, dev->buf_size); if (rc != 0) { @@ -197,8 +198,8 @@ int trusty_ipc_dev_create(struct trusty_ipc_dev **idev, return TRUSTY_ERR_NONE; err_create_sec_dev: - trusty_membuf_free(dev->buf_vaddr); -err_alloc_membuf: + trusty_free_pages(dev->buf_vaddr, dev->buf_size / PAGE_SIZE); +err_alloc_pages: trusty_free(dev); return rc; } @@ -217,7 +218,7 @@ void trusty_ipc_dev_shutdown(struct trusty_ipc_dev *dev) trusty_error("%s: failed (%d) to shutdown Trusty IPC device\n", __func__, rc); } - trusty_membuf_free(dev->buf_vaddr); + trusty_free_pages(dev->buf_vaddr, dev->buf_size / PAGE_SIZE); trusty_free(dev); } diff --git a/lib/trusty/ql-tipc/sysdeps/sysdeps_uboot.c b/lib/trusty/ql-tipc/sysdeps/sysdeps_uboot.c index e86b6e0f55a..f0d6c69abde 100644 --- a/lib/trusty/ql-tipc/sysdeps/sysdeps_uboot.c +++ b/lib/trusty/ql-tipc/sysdeps/sysdeps_uboot.c @@ -99,25 +99,25 @@ void trusty_free(void *addr) free(addr); } -void *trusty_membuf_alloc(struct ns_mem_page_info *page_info, size_t size) +void *trusty_alloc_pages(struct ns_mem_page_info *page_info, unsigned count) { void *va = NULL; int res; - va = memalign(4096, size); + va = memalign(PAGE_SIZE, count * PAGE_SIZE); if (!va) return NULL; /* get memory attibutes */ res = trusty_encode_page_info(page_info, va); if (res) { - trusty_membuf_free(va); + trusty_free_pages(va, count); return NULL; } return va; } -void trusty_membuf_free(void *va) +void trusty_free_pages(void *va, unsigned count) { if (va) free(va); |