|
|
@@ -652,6 +652,7 @@ fail:
|
|
|
|
|
|
/**
|
|
|
* ti_sci_cmd_get_device() - command to request for device managed by TISCI
|
|
|
+ * that can be shared with other hosts.
|
|
|
* @handle: Pointer to TISCI handle as retrieved by *ti_sci_get_handle
|
|
|
* @id: Device Identifier
|
|
|
*
|
|
|
@@ -659,11 +660,29 @@ fail:
|
|
|
* usage count by balancing get_device with put_device. No refcounting is
|
|
|
* managed by driver for that purpose.
|
|
|
*
|
|
|
- * NOTE: The request is for exclusive access for the processor.
|
|
|
- *
|
|
|
* Return: 0 if all went fine, else return appropriate error.
|
|
|
*/
|
|
|
static int ti_sci_cmd_get_device(const struct ti_sci_handle *handle, u32 id)
|
|
|
+{
|
|
|
+ return ti_sci_set_device_state(handle, id, 0,
|
|
|
+ MSG_DEVICE_SW_STATE_ON);
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * ti_sci_cmd_get_device_exclusive() - command to request for device managed by
|
|
|
+ * TISCI that is exclusively owned by the
|
|
|
+ * requesting host.
|
|
|
+ * @handle: Pointer to TISCI handle as retrieved by *ti_sci_get_handle
|
|
|
+ * @id: Device Identifier
|
|
|
+ *
|
|
|
+ * Request for the device - NOTE: the client MUST maintain integrity of
|
|
|
+ * usage count by balancing get_device with put_device. No refcounting is
|
|
|
+ * managed by driver for that purpose.
|
|
|
+ *
|
|
|
+ * Return: 0 if all went fine, else return appropriate error.
|
|
|
+ */
|
|
|
+static int ti_sci_cmd_get_device_exclusive(const struct ti_sci_handle *handle,
|
|
|
+ u32 id)
|
|
|
{
|
|
|
return ti_sci_set_device_state(handle, id,
|
|
|
MSG_FLAG_DEVICE_EXCLUSIVE,
|
|
|
@@ -682,6 +701,26 @@ static int ti_sci_cmd_get_device(const struct ti_sci_handle *handle, u32 id)
|
|
|
* Return: 0 if all went fine, else return appropriate error.
|
|
|
*/
|
|
|
static int ti_sci_cmd_idle_device(const struct ti_sci_handle *handle, u32 id)
|
|
|
+{
|
|
|
+ return ti_sci_set_device_state(handle, id, 0,
|
|
|
+ MSG_DEVICE_SW_STATE_RETENTION);
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * ti_sci_cmd_idle_device_exclusive() - Command to idle a device managed by
|
|
|
+ * TISCI that is exclusively owned by
|
|
|
+ * requesting host.
|
|
|
+ * @handle: Pointer to TISCI handle as retrieved by *ti_sci_get_handle
|
|
|
+ * @id: Device Identifier
|
|
|
+ *
|
|
|
+ * Request for the device - NOTE: the client MUST maintain integrity of
|
|
|
+ * usage count by balancing get_device with put_device. No refcounting is
|
|
|
+ * managed by driver for that purpose.
|
|
|
+ *
|
|
|
+ * Return: 0 if all went fine, else return appropriate error.
|
|
|
+ */
|
|
|
+static int ti_sci_cmd_idle_device_exclusive(const struct ti_sci_handle *handle,
|
|
|
+ u32 id)
|
|
|
{
|
|
|
return ti_sci_set_device_state(handle, id,
|
|
|
MSG_FLAG_DEVICE_EXCLUSIVE,
|
|
|
@@ -3002,7 +3041,9 @@ static void ti_sci_setup_ops(struct ti_sci_info *info)
|
|
|
core_ops->reboot_device = ti_sci_cmd_core_reboot;
|
|
|
|
|
|
dops->get_device = ti_sci_cmd_get_device;
|
|
|
+ dops->get_device_exclusive = ti_sci_cmd_get_device_exclusive;
|
|
|
dops->idle_device = ti_sci_cmd_idle_device;
|
|
|
+ dops->idle_device_exclusive = ti_sci_cmd_idle_device_exclusive;
|
|
|
dops->put_device = ti_sci_cmd_put_device;
|
|
|
|
|
|
dops->is_valid = ti_sci_cmd_dev_is_valid;
|