summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorRoberto Pereira <rpere@google.com>2018-03-15 14:27:12 -0700
committerfaqiang.zhu <faqiang.zhu@nxp.com>2018-11-12 09:18:35 +0800
commit8b91ad3b1e3ce911c287e3e035de4cd920e75919 (patch)
tree6281a38a76dfa84c3eb13a87582f4ac5e0327970 /lib
parent5f019ea53678d3bbda2ea9d84fdff3bcb02628e3 (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.c21
-rw-r--r--lib/trusty/ql-tipc/sysdeps/sysdeps_uboot.c8
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 f388202de5..0f6f5f9090 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 e86b6e0f55..f0d6c69abd 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);