lkml.org 
[lkml]   [2023]   [Feb]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[Patch v2 1/9] firmware: tegra: add function to get BPMP data
    Date
    Add new function 'of_tegra_bpmp_get()' which can be
    used by other drivers like MC to get BPMP data without
    adding any property in respective drivers DT node.

    Signed-off-by: Sumit Gupta <sumitg@nvidia.com>
    ---
    drivers/firmware/tegra/bpmp.c | 38 +++++++++++++++++++++++++++++++++++
    include/soc/tegra/bpmp.h | 5 +++++
    2 files changed, 43 insertions(+)

    diff --git a/drivers/firmware/tegra/bpmp.c b/drivers/firmware/tegra/bpmp.c
    index 042c2043929d..d825067a223a 100644
    --- a/drivers/firmware/tegra/bpmp.c
    +++ b/drivers/firmware/tegra/bpmp.c
    @@ -39,6 +39,44 @@ channel_to_ops(struct tegra_bpmp_channel *channel)
    return bpmp->soc->ops;
    }

    +struct tegra_bpmp *of_tegra_bpmp_get(void)
    +{
    + struct platform_device *pdev;
    + struct device_node *bpmp_dev;
    + struct tegra_bpmp *bpmp;
    +
    + /* Check for bpmp device status in DT */
    + bpmp_dev = of_find_compatible_node(NULL, NULL, "nvidia,tegra186-bpmp");
    + if (!bpmp_dev) {
    + bpmp = ERR_PTR(-ENODEV);
    + goto err_out;
    + }
    + if (!of_device_is_available(bpmp_dev)) {
    + bpmp = ERR_PTR(-ENODEV);
    + goto err_put;
    + }
    +
    + pdev = of_find_device_by_node(bpmp_dev);
    + if (!pdev) {
    + bpmp = ERR_PTR(-ENODEV);
    + goto err_put;
    + }
    +
    + bpmp = platform_get_drvdata(pdev);
    + if (!bpmp) {
    + bpmp = ERR_PTR(-EPROBE_DEFER);
    + put_device(&pdev->dev);
    + goto err_put;
    + }
    +
    + return bpmp;
    +err_put:
    + of_node_put(bpmp_dev);
    +err_out:
    + return bpmp;
    +}
    +EXPORT_SYMBOL_GPL(of_tegra_bpmp_get);
    +
    struct tegra_bpmp *tegra_bpmp_get(struct device *dev)
    {
    struct platform_device *pdev;
    diff --git a/include/soc/tegra/bpmp.h b/include/soc/tegra/bpmp.h
    index 5842e38bb288..9fd3aa9e69bb 100644
    --- a/include/soc/tegra/bpmp.h
    +++ b/include/soc/tegra/bpmp.h
    @@ -120,6 +120,7 @@ struct tegra_bpmp_message {
    };

    #if IS_ENABLED(CONFIG_TEGRA_BPMP)
    +struct tegra_bpmp *of_tegra_bpmp_get(void);
    struct tegra_bpmp *tegra_bpmp_get(struct device *dev);
    void tegra_bpmp_put(struct tegra_bpmp *bpmp);
    int tegra_bpmp_transfer_atomic(struct tegra_bpmp *bpmp,
    @@ -135,6 +136,10 @@ void tegra_bpmp_free_mrq(struct tegra_bpmp *bpmp, unsigned int mrq,
    void *data);
    bool tegra_bpmp_mrq_is_supported(struct tegra_bpmp *bpmp, unsigned int mrq);
    #else
    +static inline struct tegra_bpmp *of_tegra_bpmp_get(void)
    +{
    + return ERR_PTR(-EOPNOTSUPP);
    +}
    static inline struct tegra_bpmp *tegra_bpmp_get(struct device *dev)
    {
    return ERR_PTR(-ENOTSUPP);
    --
    2.17.1
    \
     
     \ /
      Last update: 2023-03-27 00:28    [W:2.983 / U:0.368 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site