Merge "mm-drivers: hw_fence: switch to qcom_scm_assign_mem from hyp_assign_phys"

此提交包含在:
qctecmdr
2023-01-24 15:43:49 -08:00
提交者 Gerrit - the friendly Code Review server
當前提交 a63269b7e0

查看文件

@@ -8,6 +8,7 @@
#include <linux/io.h>
#include <linux/gunyah/gh_rm_drv.h>
#include <linux/gunyah/gh_dbl.h>
#include <linux/qcom_scm.h>
#include <soc/qcom/secure_buffer.h>
#include "hw_fence_drv_priv.h"
@@ -339,18 +340,19 @@ int hw_fence_utils_init_virq(struct hw_fence_driver_data *drv_data)
static int hw_fence_gunyah_share_mem(struct hw_fence_driver_data *drv_data,
gh_vmid_t self, gh_vmid_t peer)
{
u32 src_vmlist[1] = {self};
int src_perms[2] = {PERM_READ | PERM_WRITE | PERM_EXEC};
int dst_vmlist[2] = {self, peer};
int dst_perms[2] = {PERM_READ | PERM_WRITE, PERM_READ | PERM_WRITE};
struct qcom_scm_vmperm src_vmlist[] = {{self, PERM_READ | PERM_WRITE | PERM_EXEC}};
struct qcom_scm_vmperm dst_vmlist[] = {{self, PERM_READ | PERM_WRITE},
{peer, PERM_READ | PERM_WRITE}};
int srcvmids = BIT(src_vmlist[0].vmid);
int dstvmids = BIT(dst_vmlist[0].vmid) | BIT(dst_vmlist[1].vmid);
struct gh_acl_desc *acl;
struct gh_sgl_desc *sgl;
int ret;
ret = hyp_assign_phys(drv_data->res.start, resource_size(&drv_data->res),
src_vmlist, 1, dst_vmlist, dst_perms, 2);
ret = qcom_scm_assign_mem(drv_data->res.start, resource_size(&drv_data->res), &srcvmids,
dst_vmlist, ARRAY_SIZE(dst_vmlist));
if (ret) {
HWFNC_ERR("%s: hyp_assign_phys failed addr=%x size=%u err=%d\n",
HWFNC_ERR("%s: qcom_scm_assign_mem failed addr=%x size=%u err=%d\n",
__func__, drv_data->res.start, drv_data->size, ret);
return ret;
}
@@ -379,9 +381,8 @@ static int hw_fence_gunyah_share_mem(struct hw_fence_driver_data *drv_data,
HWFNC_ERR("%s: gh_rm_mem_share failed addr=%x size=%u err=%d\n",
__func__, drv_data->res.start, drv_data->size, ret);
/* Attempt to give resource back to HLOS */
hyp_assign_phys(drv_data->res.start, resource_size(&drv_data->res),
dst_vmlist, 2,
src_vmlist, src_perms, 1);
qcom_scm_assign_mem(drv_data->res.start, resource_size(&drv_data->res),
&dstvmids, src_vmlist, ARRAY_SIZE(src_vmlist));
ret = -EPROBE_DEFER;
}