On Mon, Jun 1, 2020 at 2:45 AM Sudeep Holla <sudeep.holla@xxxxxxx> wrote: > > Initial support for PSA FF-A interface providing APIs for non-secure VM > partitions. > ... > diff --git a/drivers/firmware/arm_psa_ffa/Kconfig b/drivers/firmware/arm_psa_ffa/Kconfig > new file mode 100644 > index 000000000000..ba699ec68ec4 > --- /dev/null > +++ b/drivers/firmware/arm_psa_ffa/Kconfig > @@ -0,0 +1,15 @@ > +# SPDX-License-Identifier: GPL-2.0-only > +config ARM_PSA_FFA_TRANSPORT > + tristate "Arm Platform Security Architecture Firmware Framework for Armv8-A" > + depends on ARM64 && HAVE_ARM_SMCCC_DISCOVERY Most of this driver should be usable on any platform, so it would be better to only depend on ARM64 in the component that has the arm64 specific implementation of your low level conduit. ... > diff --git a/drivers/firmware/arm_psa_ffa/driver.c b/drivers/firmware/arm_psa_ffa/driver.c > new file mode 100644 > index 000000000000..700bd5850746 > --- /dev/null > +++ b/drivers/firmware/arm_psa_ffa/driver.c ... > + > +typedef struct arm_smccc_res > +(arm_psa_ffa_fn)(unsigned long, unsigned long, unsigned long, unsigned long, > + unsigned long, unsigned long, unsigned long, unsigned long); > +static arm_psa_ffa_fn *invoke_arm_psa_ffa_fn; > + ... > +struct arm_smccc_res > +__arm_psa_ffa_fn_smc(unsigned long function_id,unsigned long arg0, ... > +struct arm_smccc_res > +__arm_psa_ffa_fn_hvc(unsigned long function_id,unsigned long arg0, Can these two functions move out of this file so this driver only depends on a function matching the arm_psa_ffa_fn type? ... > +static int psa_ffa_probe(struct platform_device *pdev) > +{ > + int ret; > + enum arm_smccc_conduit conduit; > + > + if (arm_smccc_get_version() < ARM_SMCCC_VERSION_1_2) > + return 0; > + > + conduit = arm_smccc_1_1_get_conduit(); If you make this device a child device of the conduit, then you don't need this here. Other conduits can be added to for instance support other architectures without adding entries to this enum and modifying this driver. -- Arve Hjønnevåg