mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-16 00:51:51 -04:00
Merge tag 'tegra-for-7.1-firmware' of git://git.kernel.org/pub/scm/linux/kernel/git/tegra/linux into soc/drivers
firmware: tegra: Changes for v7.1-rc1 This introduces a new API for the BPMP to be pass along a specifier from DT when getting a reference from a phandle. This is used to reference specific instances of the PCI controller on Tegra264. The ABI header for BPMP is updated to the latest version and BPMP APIs now use the more intuitive ENODEV instead of the non SUSV4 ENOTSUPP error code for stub implementations. * tag 'tegra-for-7.1-firmware' of git://git.kernel.org/pub/scm/linux/kernel/git/tegra/linux: soc/tegra: bpmp: Use ENODEV instead of ENOTSUPP firmware: tegra: bpmp: Add tegra_bpmp_get_with_id() function soc/tegra: Update BPMP ABI header firmware: tegra: bpmp: Rename Tegra239 to Tegra238 Signed-off-by: Arnd Bergmann <arnd@arndb.de>
This commit is contained in:
@@ -32,6 +32,40 @@ channel_to_ops(struct tegra_bpmp_channel *channel)
|
||||
return bpmp->soc->ops;
|
||||
}
|
||||
|
||||
struct tegra_bpmp *tegra_bpmp_get_with_id(struct device *dev, unsigned int *id)
|
||||
{
|
||||
struct platform_device *pdev;
|
||||
struct of_phandle_args args;
|
||||
struct tegra_bpmp *bpmp;
|
||||
int err;
|
||||
|
||||
err = __of_parse_phandle_with_args(dev->of_node, "nvidia,bpmp", NULL,
|
||||
1, 0, &args);
|
||||
if (err < 0)
|
||||
return ERR_PTR(err);
|
||||
|
||||
pdev = of_find_device_by_node(args.np);
|
||||
if (!pdev) {
|
||||
bpmp = ERR_PTR(-ENODEV);
|
||||
goto put;
|
||||
}
|
||||
|
||||
bpmp = platform_get_drvdata(pdev);
|
||||
if (!bpmp) {
|
||||
bpmp = ERR_PTR(-EPROBE_DEFER);
|
||||
put_device(&pdev->dev);
|
||||
goto put;
|
||||
}
|
||||
|
||||
if (id)
|
||||
*id = args.args[0];
|
||||
|
||||
put:
|
||||
of_node_put(args.np);
|
||||
return bpmp;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(tegra_bpmp_get_with_id);
|
||||
|
||||
struct tegra_bpmp *tegra_bpmp_get(struct device *dev)
|
||||
{
|
||||
struct platform_device *pdev;
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -127,6 +127,7 @@ struct tegra_bpmp_message {
|
||||
|
||||
#if IS_ENABLED(CONFIG_TEGRA_BPMP)
|
||||
struct tegra_bpmp *tegra_bpmp_get(struct device *dev);
|
||||
struct tegra_bpmp *tegra_bpmp_get_with_id(struct device *dev, unsigned int *id);
|
||||
void tegra_bpmp_put(struct tegra_bpmp *bpmp);
|
||||
int tegra_bpmp_transfer_atomic(struct tegra_bpmp *bpmp,
|
||||
struct tegra_bpmp_message *msg);
|
||||
@@ -143,21 +144,31 @@ bool tegra_bpmp_mrq_is_supported(struct tegra_bpmp *bpmp, unsigned int mrq);
|
||||
#else
|
||||
static inline struct tegra_bpmp *tegra_bpmp_get(struct device *dev)
|
||||
{
|
||||
return ERR_PTR(-ENOTSUPP);
|
||||
return ERR_PTR(-ENODEV);
|
||||
}
|
||||
|
||||
static inline struct tegra_bpmp *tegra_bpmp_get_with_id(struct device *dev,
|
||||
unsigned int *id)
|
||||
{
|
||||
return ERR_PTR(-ENODEV);
|
||||
}
|
||||
|
||||
static inline void tegra_bpmp_put(struct tegra_bpmp *bpmp)
|
||||
{
|
||||
}
|
||||
|
||||
static inline int tegra_bpmp_transfer_atomic(struct tegra_bpmp *bpmp,
|
||||
struct tegra_bpmp_message *msg)
|
||||
{
|
||||
return -ENOTSUPP;
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
static inline int tegra_bpmp_transfer(struct tegra_bpmp *bpmp,
|
||||
struct tegra_bpmp_message *msg)
|
||||
{
|
||||
return -ENOTSUPP;
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
static inline void tegra_bpmp_mrq_return(struct tegra_bpmp_channel *channel,
|
||||
int code, const void *data,
|
||||
size_t size)
|
||||
@@ -169,8 +180,9 @@ static inline int tegra_bpmp_request_mrq(struct tegra_bpmp *bpmp,
|
||||
tegra_bpmp_mrq_handler_t handler,
|
||||
void *data)
|
||||
{
|
||||
return -ENOTSUPP;
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
static inline void tegra_bpmp_free_mrq(struct tegra_bpmp *bpmp,
|
||||
unsigned int mrq, void *data)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user