Skip to content

Commit

Permalink
firmware: ti_sci: Introduce prepare system suspend call
Browse files Browse the repository at this point in the history
Introduce a ti_sci_prepare_system_suspend call to be used in the driver
suspend handler to allow the system to identify the low power mode being
entered and if necessary, send TI_SCI_MSG_BEGIN_SLEEP with information
about the mode is being entered and the address for DDR memory carveout.

Signed-off-by: Dave Gerlach <d-gerlach@ti.com>
Signed-off-by: Vibhore Vardhan <vibhore@ti.com>
  • Loading branch information
dgerlach authored and rogerq committed Nov 1, 2022
1 parent 7c41537 commit e7cf88a
Showing 1 changed file with 31 additions and 0 deletions.
31 changes: 31 additions & 0 deletions drivers/firmware/ti_sci.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
#include <linux/slab.h>
#include <linux/soc/ti/ti-msgmgr.h>
#include <linux/soc/ti/ti_sci_protocol.h>
#include <linux/suspend.h>
#include <linux/reboot.h>

#include "ti_sci.h"
Expand Down Expand Up @@ -3391,11 +3392,41 @@ static void ti_sci_set_is_suspending(struct ti_sci_info *info, bool is_suspendin
info->is_suspending = is_suspending;
}

static int ti_sci_prepare_system_suspend(struct ti_sci_info *info)
{
int ret = 0;
int mode;

switch (pm_suspend_target_state) {
case PM_SUSPEND_MEM:
mode = TISCI_MSG_VALUE_SLEEP_MODE_DEEP_SLEEP;
break;
default:
ret = -EINVAL;
}

/*
* Do not fail if we don't have action to take for a
* specific suspend mode.
*/
if (ret)
return 0;

ret = ti_sci_cmd_prepare_sleep(&info->handle, mode, info->mem_ctx_lo,
info->mem_ctx_hi, 0);

return ret;
}

static int ti_sci_suspend(struct device *dev)
{
struct ti_sci_info *info = dev_get_drvdata(dev);
int ret = 0;

ret = ti_sci_prepare_system_suspend(info);
if (ret)
return ret;

/*
* We must switch operation to polled mode now as drivers and the genpd
* layer may make late TI SCI calls to change clock and device states
Expand Down

0 comments on commit e7cf88a

Please sign in to comment.