Commit f2381f65 authored by Timo Alho's avatar Timo Alho Committed by Thierry Reding

firmware: tegra: Add BPMP debugfs support

Tegra power management firmware running on the co-processor (BPMP)
implements a simple pseudo file system akin to debugfs. The file
system can be used for debugging purposes to examine and change the
status of selected resources controlled by the firmware (such as
clocks, resets, voltages, powergates, ...).

Add support to "mirror" the firmware's file system to debugfs. At
boot, query firmware for a list of all possible files and create
corresponding debugfs entries. Read/write of individual files is
implemented by sending a Message ReQuest (MRQ) that passes the full
file path name and data to firmware via DRAM.
Signed-off-by: default avatarTimo Alho <talho@nvidia.com>
Reviewed-by: default avatarJon Hunter <jonathanh@nvidia.com>
Signed-off-by: default avatarThierry Reding <treding@nvidia.com>
parent 80d47a91
obj-$(CONFIG_TEGRA_BPMP) += bpmp.o tegra-bpmp-y = bpmp.o
tegra-bpmp-$(CONFIG_DEBUG_FS) += bpmp-debugfs.o
obj-$(CONFIG_TEGRA_BPMP) += tegra-bpmp.o
obj-$(CONFIG_TEGRA_IVC) += ivc.o obj-$(CONFIG_TEGRA_IVC) += ivc.o
This diff is collapsed.
...@@ -835,6 +835,10 @@ static int tegra_bpmp_probe(struct platform_device *pdev) ...@@ -835,6 +835,10 @@ static int tegra_bpmp_probe(struct platform_device *pdev)
if (err < 0) if (err < 0)
goto free_mrq; goto free_mrq;
err = tegra_bpmp_init_debugfs(bpmp);
if (err < 0)
dev_err(&pdev->dev, "debugfs initialization failed: %d\n", err);
return 0; return 0;
free_mrq: free_mrq:
......
...@@ -94,6 +94,10 @@ struct tegra_bpmp { ...@@ -94,6 +94,10 @@ struct tegra_bpmp {
struct reset_controller_dev rstc; struct reset_controller_dev rstc;
struct genpd_onecell_data genpd; struct genpd_onecell_data genpd;
#ifdef CONFIG_DEBUG_FS
struct dentry *debugfs_mirror;
#endif
}; };
struct tegra_bpmp_message { struct tegra_bpmp_message {
...@@ -189,4 +193,14 @@ static inline int tegra_bpmp_init_powergates(struct tegra_bpmp *bpmp) ...@@ -189,4 +193,14 @@ static inline int tegra_bpmp_init_powergates(struct tegra_bpmp *bpmp)
} }
#endif #endif
#if IS_ENABLED(CONFIG_DEBUG_FS)
int tegra_bpmp_init_debugfs(struct tegra_bpmp *bpmp);
#else
static inline int tegra_bpmp_init_debugfs(struct tegra_bpmp *bpmp)
{
return 0;
}
#endif
#endif /* __SOC_TEGRA_BPMP_H */ #endif /* __SOC_TEGRA_BPMP_H */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment