mirror of
https://github.com/torvalds/linux.git
synced 2026-05-27 00:22:00 +02:00
firmware: tegra: Changes for v6.7-rc1
Contains a typofix and a new mechanism to help fix an issue that can seemingly hang the system during early resume. -----BEGIN PGP SIGNATURE----- iQJHBAABCAAxFiEEiOrDCAFJzPfAjcif3SOs138+s6EFAmUpXfwTHHRyZWRpbmdA bnZpZGlhLmNvbQAKCRDdI6zXfz6zoWNFD/9+VDQK/PYAwD1DIdClul7lLftD/To3 5zCi5tt7BD8HVhOci4IF89j0qOG09SNUg9rIOY6zg/9L3XopuWMZIHMPsJK0T9PR j7VgvD181OC/o6W3GZiTYgNXndkz7G+vf9cSJrc5V1sypa74dkqS2Wkjrdq03u8j AybYdga2BwJXPyCFuV74ORsRPy1BQjK/uPlh+vNwY9FF2hZ9WWATG1D8dF1guOXa W8z7aubvmAUHhWKY54dSYHkH3mgW1+B8AdK2KIm/ijw2Mfol/iA67mb7qvKjL2RU h+y2IMoQGvYOiDKUdjSKe//Ve8elhAOCJ+VriZENCOTTs6EJl5otXC/6lzPpnX9A Z3Sz41su+riIPfLvXTryxbCDOFWvMqp6z7ANBMFXawzqMOPct0ZwD1F9EnLzuuSC KpyzPSnjo5afUk3u/pJaShKtPUhVbZ1yzrhbC+bMQpb1iKm/88439eQvARtC0f9Z tS7fOeJEOQ+AoNGFzn4clHskfqsF+OluWV2uH+zGGiejtcRU5Q3t0+7ILNjrPeFg j4OeKvR+8npk3VP+ItOry6ACZA7S5ieUXN7msWCGIbPRq7TJQCdsov78NLJy5MkF pjWPDQ3f8dD0DW0WPBYUbdgrwCREjNHf60dZlfJWvTtKX73XLrxcXvAz57vcIB2v VybNWRmtcXBI8w== =IXob -----END PGP SIGNATURE----- gpgsig -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEiK/NIGsWEZVxh/FrYKtH/8kJUicFAmUto+0ACgkQYKtH/8kJ UicJ7RAAs97iG93u8Mmx3nS9u5VB1KKm+Z7BiDkEMrULIRcZ3PqlCydBCa7klAWG x0gsE4KR5t9q2Iwy0TPponGCw3OD0WiiERz8BGDyJLw/y4Th1ZWDClq2OIbDT4Dr NiExqGWNvpE7myrYjY4NHBoqsnMvyMvzNWRDcI4hL51YLHM1CZbqYrK+NROo1Zg2 o+hzi+Qwx0fKUGUgfcqwJkwn3FabbOBelnOxSkd97dznf49fCdQwJcSKRndtE6RM LrosR6aNAwios/0PYXzhcIwjfJyLeW/FoY5AfGbFR91xwukmZPhGhhHY5XPHYJAq lUlVl1IYDTH+vVAcq7GlltIvXBbzUPuAnh1iWffDv5OLA4ghjNiToI8N3lP1AmrL dkAy67VkIMKBYBxqxgujYI/2TRmzlGa9IEL5nTKs7pFcDGfEoUHPS9FZO8G+NH4w L+kNGAD8GEwytaXSVPVx9Cmoy8u859USpWGs9198GXlZwrFrjSJ20IB30qrDIEyK uAp9Yzkeh/FgkOPwepRK99XIkgQOcnqQldP/Q+8ItLldugWIgowQEZCcBRMxJa/8 q61s+w5LcXHJB2lux6TaztLXfhnetoNmUUrbJjj0gOnxOn43rrDhGnv6yFHwFFec L4o48PWAva/dOqCmIK4Vuvy3FSsgUyHkY4BXz4IE2LFSApBGYeY= =r80j -----END PGP SIGNATURE----- Merge tag 'tegra-for-6.7-firmware' of git://git.kernel.org/pub/scm/linux/kernel/git/tegra/linux into soc/drivers firmware: tegra: Changes for v6.7-rc1 Contains a typofix and a new mechanism to help fix an issue that can seemingly hang the system during early resume. * tag 'tegra-for-6.7-firmware' of git://git.kernel.org/pub/scm/linux/kernel/git/tegra/linux: firmware: tegra: Add suspend hook and reset BPMP IPC early on resume firmware: tegra: Fix a typo Link: https://lore.kernel.org/r/20231013153723.1729109-2-thierry.reding@gmail.com Signed-off-by: Arnd Bergmann <arnd@arndb.de>
This commit is contained in:
commit
9e6e423a36
|
|
@ -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 @@ static int tegra_bpmp_probe(struct platform_device *pdev)
|
|||
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…
Reference in New Issue
Block a user