firmware: qcom_scm: Dynamically support SMCCC and legacy conventions
authorElliot Berman <eberman@codeaurora.org>
Tue, 7 Jan 2020 21:04:26 +0000 (13:04 -0800)
committerBjorn Andersson <bjorn.andersson@linaro.org>
Wed, 8 Jan 2020 06:14:43 +0000 (22:14 -0800)
commit9a434cee773ae15309ac225f27551b5492618e4a
tree26d7deff138efa039629a0611ada779626d552e5
parent57d3b816718c1cf832e2929a754da3564c6127cc
firmware: qcom_scm: Dynamically support SMCCC and legacy conventions

Dynamically support SMCCCC and legacy conventions by detecting which
convention to use at runtime. qcom_scm_call_atomic and qcom_scm_call can
then be moved in qcom_scm.c and use underlying convention backend as
appropriate. Thus, rename qcom_scm-64,-32 to reflect that they are
backends for -smc and -legacy, respectively.

Also add support for making SCM calls earlier than when SCM driver
probes to support use cases such as qcom_scm_set_cold_boot_addr. Support
is added by lazily initializing the convention and guarding the query
with a spin lock.  The limitation of these early SCM calls is that they
cannot use DMA, as in the case of >4 arguments for SMC convention and
any non-atomic call for legacy convention.

Tested-by: Brian Masney <masneyb@onstation.org> # arm32
Tested-by: Stephan Gerhold <stephan@gerhold.net>
Signed-off-by: Elliot Berman <eberman@codeaurora.org>
Link: https://lore.kernel.org/r/1578431066-19600-18-git-send-email-eberman@codeaurora.org
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
drivers/firmware/Kconfig
drivers/firmware/Makefile
drivers/firmware/qcom_scm-32.c [deleted file]
drivers/firmware/qcom_scm-64.c [deleted file]
drivers/firmware/qcom_scm-legacy.c [new file with mode: 0644]
drivers/firmware/qcom_scm-smc.c [new file with mode: 0644]
drivers/firmware/qcom_scm.c
drivers/firmware/qcom_scm.h