Merge branch 'for-6.7/firmware' into for-6.7/memory
This commit is contained in:
commit
364b40c6dd
@ -313,6 +313,8 @@ static ssize_t tegra_bpmp_channel_write(struct tegra_bpmp_channel *channel,
|
||||
return __tegra_bpmp_channel_write(channel, mrq, flags, data, size);
|
||||
}
|
||||
|
||||
static int __maybe_unused tegra_bpmp_resume(struct device *dev);
|
||||
|
||||
int tegra_bpmp_transfer_atomic(struct tegra_bpmp *bpmp,
|
||||
struct tegra_bpmp_message *msg)
|
||||
{
|
||||
@ -325,6 +327,14 @@ int tegra_bpmp_transfer_atomic(struct tegra_bpmp *bpmp,
|
||||
if (!tegra_bpmp_message_valid(msg))
|
||||
return -EINVAL;
|
||||
|
||||
if (bpmp->suspended) {
|
||||
/* Reset BPMP IPC channels during resume based on flags passed */
|
||||
if (msg->flags & TEGRA_BPMP_MESSAGE_RESET)
|
||||
tegra_bpmp_resume(bpmp->dev);
|
||||
else
|
||||
return -EAGAIN;
|
||||
}
|
||||
|
||||
channel = bpmp->tx_channel;
|
||||
|
||||
spin_lock(&bpmp->atomic_tx_lock);
|
||||
@ -364,6 +374,14 @@ int tegra_bpmp_transfer(struct tegra_bpmp *bpmp,
|
||||
if (!tegra_bpmp_message_valid(msg))
|
||||
return -EINVAL;
|
||||
|
||||
if (bpmp->suspended) {
|
||||
/* Reset BPMP IPC channels during resume based on flags passed */
|
||||
if (msg->flags & TEGRA_BPMP_MESSAGE_RESET)
|
||||
tegra_bpmp_resume(bpmp->dev);
|
||||
else
|
||||
return -EAGAIN;
|
||||
}
|
||||
|
||||
channel = tegra_bpmp_write_threaded(bpmp, msg->mrq, msg->tx.data,
|
||||
msg->tx.size);
|
||||
if (IS_ERR(channel))
|
||||
@ -796,10 +814,21 @@ deinit:
|
||||
return err;
|
||||
}
|
||||
|
||||
static int __maybe_unused tegra_bpmp_suspend(struct device *dev)
|
||||
{
|
||||
struct tegra_bpmp *bpmp = dev_get_drvdata(dev);
|
||||
|
||||
bpmp->suspended = true;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int __maybe_unused tegra_bpmp_resume(struct device *dev)
|
||||
{
|
||||
struct tegra_bpmp *bpmp = dev_get_drvdata(dev);
|
||||
|
||||
bpmp->suspended = false;
|
||||
|
||||
if (bpmp->soc->ops->resume)
|
||||
return bpmp->soc->ops->resume(bpmp);
|
||||
else
|
||||
@ -807,6 +836,7 @@ static int __maybe_unused tegra_bpmp_resume(struct device *dev)
|
||||
}
|
||||
|
||||
static const struct dev_pm_ops tegra_bpmp_pm_ops = {
|
||||
.suspend_noirq = tegra_bpmp_suspend,
|
||||
.resume_noirq = tegra_bpmp_resume,
|
||||
};
|
||||
|
||||
|
@ -1194,7 +1194,7 @@ struct cmd_clk_is_enabled_request {
|
||||
*/
|
||||
struct cmd_clk_is_enabled_response {
|
||||
/**
|
||||
* @brief The state of the clock that has been succesfully
|
||||
* @brief The state of the clock that has been successfully
|
||||
* requested with CMD_CLK_ENABLE or CMD_CLK_DISABLE by the
|
||||
* master invoking the command earlier.
|
||||
*
|
||||
|
@ -102,8 +102,12 @@ struct tegra_bpmp {
|
||||
#ifdef CONFIG_DEBUG_FS
|
||||
struct dentry *debugfs_mirror;
|
||||
#endif
|
||||
|
||||
bool suspended;
|
||||
};
|
||||
|
||||
#define TEGRA_BPMP_MESSAGE_RESET BIT(0)
|
||||
|
||||
struct tegra_bpmp_message {
|
||||
unsigned int mrq;
|
||||
|
||||
@ -117,6 +121,8 @@ struct tegra_bpmp_message {
|
||||
size_t size;
|
||||
int ret;
|
||||
} rx;
|
||||
|
||||
unsigned long flags;
|
||||
};
|
||||
|
||||
#if IS_ENABLED(CONFIG_TEGRA_BPMP)
|
||||
|
Loading…
x
Reference in New Issue
Block a user