Merge "spi: spi-msm-geni: Protect from register access in suspend state"

This commit is contained in:
qctecmdr 2021-05-20 02:55:36 -07:00 • committed by Gerrit - the friendly Code Review server
commit f38f2ccb6b

View file

@ -1045,6 +1045,25 @@ static int spi_geni_prepare_message(struct spi_master *spi,
}
}
if (pm_runtime_status_suspended(mas->dev) && !mas->is_le_vm) {
if (!pm_runtime_enabled(mas->dev)) {
GENI_SE_ERR(mas->ipc, false, NULL,
"%s: System suspended\n", __func__);
return -EACCES;
}
ret = pm_runtime_get_sync(mas->dev);
if (ret < 0) {
dev_err(mas->dev,
"%s:pm_runtime_get_sync failed %d\n", __func__, ret);
WARN_ON_ONCE(1);
pm_runtime_put_noidle(mas->dev);
/* Set device in suspended since resume failed */
pm_runtime_set_suspended(mas->dev);
return ret;
}
}
mas->cur_xfer_mode = select_xfer_mode(spi, spi_msg);
if (mas->cur_xfer_mode < 0) {
@ -2281,27 +2300,17 @@ static int spi_geni_resume(struct device *dev)
static int spi_geni_suspend(struct device *dev)
{
int ret = 0;
struct spi_master *spi = get_spi_master(dev);
struct spi_geni_master *geni_mas = spi_master_get_devdata(spi);
if (!pm_runtime_status_suspended(dev)) {
struct spi_master *spi = get_spi_master(dev);
struct spi_geni_master *geni_mas = spi_master_get_devdata(spi);
if (list_empty(&spi->queue) && !spi->cur_msg) {
GENI_SE_ERR(geni_mas->ipc, true, dev,
"%s: Force suspend", __func__);
ret = spi_geni_runtime_suspend(dev);
if (ret) {
GENI_SE_ERR(geni_mas->ipc, true, dev,
"Force suspend Failed:%d", ret);
} else {
pm_runtime_disable(dev);
pm_runtime_set_suspended(dev);
pm_runtime_enable(dev);
}
} else {
ret = -EBUSY;
}
GENI_SE_ERR(geni_mas->ipc, true, dev,
":%s: runtime PM is active\n", __func__);
ret = -EBUSY;
return ret;
}
GENI_SE_ERR(geni_mas->ipc, true, dev, ":%s: End\n", __func__);
return ret;
}
#else