Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

misc: fastrpc: support complete DMA pool access to the DSP

To support FastRPC Context Banks which aren't mapped via the SMMU,
make the whole reserved memory region available to the DSP to allow
access to coherent buffers.

This is performed by assigning the memory to the DSP via a hypervisor
call to set the correct permissions for the Virtual Machines on the DSP.
This is only necessary when a memory region is provided for SLPI DSPs
so guard this with a domain ID check.

Signed-off-by: Dylan Van Assche <me@dylanvanassche.be>
Reviewed-by: Caleb Connolly <caleb.connolly@linaro.org>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Reviewed-by: Ekansh Gupta <quic_ekangupt@quicinc.com>
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Link: https://lore.kernel.org/r/20240705075900.424100-5-srinivas.kandagatla@linaro.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

authored by

Dylan Van Assche and committed by
Greg Kroah-Hartman
c3c0363b 65cf378a

+19
+19
drivers/misc/fastrpc.c
··· 2250 2250 int i, err, domain_id = -1, vmcount; 2251 2251 const char *domain; 2252 2252 bool secure_dsp; 2253 + struct device_node *rmem_node; 2254 + struct reserved_mem *rmem; 2253 2255 unsigned int vmids[FASTRPC_MAX_VMIDS]; 2254 2256 2255 2257 err = of_property_read_string(rdev->of_node, "label", &domain); ··· 2292 2290 data->vmperms[i].vmid = vmids[i]; 2293 2291 data->vmperms[i].perm = QCOM_SCM_PERM_RWX; 2294 2292 } 2293 + } 2294 + 2295 + rmem_node = of_parse_phandle(rdev->of_node, "memory-region", 0); 2296 + if (domain_id == SDSP_DOMAIN_ID && rmem_node) { 2297 + u64 src_perms; 2298 + 2299 + rmem = of_reserved_mem_lookup(rmem_node); 2300 + if (!rmem) { 2301 + err = -EINVAL; 2302 + goto fdev_error; 2303 + } 2304 + 2305 + src_perms = BIT(QCOM_SCM_VMID_HLOS); 2306 + 2307 + qcom_scm_assign_mem(rmem->base, rmem->size, &src_perms, 2308 + data->vmperms, data->vmcount); 2309 + 2295 2310 } 2296 2311 2297 2312 secure_dsp = !(of_property_read_bool(rdev->of_node, "qcom,non-secure-domain"));