diff options
author | PixelBot AutoMerger <android-nexus-securitybot@system.gserviceaccount.com> | 2024-02-04 18:54:59 -0800 |
---|---|---|
committer | SecurityBot <android-nexus-securitybot@system.gserviceaccount.com> | 2024-02-04 18:54:59 -0800 |
commit | c835ea1dc0c1b5f7bbf7557f811caab7bfa57939 (patch) | |
tree | 23b02126271ba1af3043d7b4826c6a819536a209 | |
parent | b7c474e559432b331183c869198c50c0e8abeae2 (diff) | |
parent | 78d5d68e86e0b0e5b86fcc2d864d022acb10f132 (diff) | |
download | trusty-android-gs-shusky-5.15-android15-beta.tar.gz |
Merge android14-gs-pixel-5.15-24Q2 into android14-gs-pixel-5.15android-15-beta-1_r0.8android-15-beta-1_r0.7android-gs-shusky-5.15-android15-dpandroid-gs-shusky-5.15-android15-beta
SBMerger: 603054162
Change-Id: If5003a4fc8a4f2675a0beb57016c168eb235a752
Signed-off-by: SecurityBot <android-nexus-securitybot@system.gserviceaccount.com>
-rw-r--r-- | drivers/trusty/trusty-ipc.c | 2 | ||||
-rw-r--r-- | drivers/trusty/trusty.c | 16 | ||||
-rw-r--r-- | include/linux/trusty/arm_ffa.h | 7 |
3 files changed, 20 insertions, 5 deletions
diff --git a/drivers/trusty/trusty-ipc.c b/drivers/trusty/trusty-ipc.c index 3a54663..b75d8ff 100644 --- a/drivers/trusty/trusty-ipc.c +++ b/drivers/trusty/trusty-ipc.c @@ -226,7 +226,7 @@ static struct tipc_msg_buf *vds_alloc_msg_buf(struct tipc_virtio_dev *vds, { int ret; struct tipc_msg_buf *mb; - size_t sz = vds->msg_buf_max_sz; + size_t sz = ALIGN(vds->msg_buf_max_sz, PAGE_SIZE); pgprot_t pgprot = share_write ? PAGE_KERNEL : PAGE_KERNEL_RO; /* allocate tracking structure */ diff --git a/drivers/trusty/trusty.c b/drivers/trusty/trusty.c index 6cfa5af..aa3b5b3 100644 --- a/drivers/trusty/trusty.c +++ b/drivers/trusty/trusty.c @@ -349,7 +349,7 @@ int trusty_transfer_memory(struct device *dev, u64 *id, emad->comp_mrd_offset = comp_mrd_offset; emad->reserved_8_15 = 0; } - comp_mrd->total_page_count = len / PAGE_SIZE; + comp_mrd->total_page_count = len / FFA_PAGE_SIZE; comp_mrd->address_range_count = nents; comp_mrd->reserved_8_15 = 0; @@ -364,7 +364,7 @@ int trusty_transfer_memory(struct device *dev, u64 *id, for (i = 0; i < lcount; i++) { cons_mrd[i].address = sg_dma_address(sg); - cons_mrd[i].page_count = sg_dma_len(sg) / PAGE_SIZE; + cons_mrd[i].page_count = sg_dma_len(sg) / FFA_PAGE_SIZE; cons_mrd[i].reserved_12_15 = 0; sg = sg_next(sg); } @@ -622,6 +622,14 @@ static int trusty_init_msg_buf(struct trusty_state *s, struct device *dev) s->ffa_local_id = smc_ret.r2; s->ffa_remote_id = 0x8000; + /* + * The pKVM hypervisor uses the same page size as the host, including for + * stage-2 mappings. So the rx/tx buffers need to be page-sized multiple, + * and page-aligned. + * + * TODO: This can be made more generic by discovering the required size + * through SMC_FC_FFA_FEATURES later. + */ s->ffa_tx = kmalloc(PAGE_SIZE, GFP_KERNEL); if (!s->ffa_tx) { ret = -ENOMEM; @@ -644,8 +652,8 @@ static int trusty_init_msg_buf(struct trusty_state *s, struct device *dev) goto err_unaligned_rx_buf; } - smc_ret = trusty_smc8(SMC_FCZ_FFA_RXTX_MAP, tx_paddr, rx_paddr, 1, 0, - 0, 0, 0); + smc_ret = trusty_smc8(SMC_FCZ_FFA_RXTX_MAP, tx_paddr, rx_paddr, + PAGE_SIZE / FFA_PAGE_SIZE, 0, 0, 0, 0); if (smc_ret.r0 != SMC_FC_FFA_SUCCESS) { dev_err(s->dev, "%s: SMC_FCZ_FFA_RXTX_MAP failed 0x%lx 0x%lx 0x%lx\n", __func__, smc_ret.r0, smc_ret.r1, smc_ret.r2); diff --git a/include/linux/trusty/arm_ffa.h b/include/linux/trusty/arm_ffa.h index ab7b2af..95d31b3 100644 --- a/include/linux/trusty/arm_ffa.h +++ b/include/linux/trusty/arm_ffa.h @@ -36,6 +36,13 @@ SMC_FASTCALL64_NR(SMC_ENTITY_SHARED_MEMORY, nr) /** + * FF-A specification mentions explicitly about '4K pages'. This should + * not be confused with the kernel PAGE_SIZE, which is the translation + * granule kernel is configured and may be one among 4K, 16K and 64K. + */ +#define FFA_PAGE_SIZE SZ_4K + +/** * typedef ffa_endpoint_id16_t - Endpoint ID * * Current implementation only supports VMIDs. FFA spec also support stream |