mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-26 04:20:54 +07:00
OMAP: hwmod: add an hardreset API for use by other core code
Expose an hardreset API from hwmod in order to assert / deassert all the individual reset lines that belong to an hwmod. This API is needed by some of the more complicated processor drivers, e.g., DSP/Bridge, Syslink, etc. Signed-off-by: Paul Walmsley <paul@pwsan.com> Cc: Benoît Cousson <b-cousson@ti.com>
This commit is contained in:
parent
76e5589e5b
commit
aee48e3c9c
@ -1828,6 +1828,84 @@ int omap_hwmod_disable_wakeup(struct omap_hwmod *oh)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* omap_hwmod_assert_hardreset - assert the HW reset line of submodules
|
||||||
|
* contained in the hwmod module.
|
||||||
|
* @oh: struct omap_hwmod *
|
||||||
|
* @name: name of the reset line to lookup and assert
|
||||||
|
*
|
||||||
|
* Some IP like dsp, ipu or iva contain processor that require
|
||||||
|
* an HW reset line to be assert / deassert in order to enable fully
|
||||||
|
* the IP. Returns -EINVAL if @oh is null or if the operation is not
|
||||||
|
* yet supported on this OMAP; otherwise, passes along the return value
|
||||||
|
* from _assert_hardreset().
|
||||||
|
*/
|
||||||
|
int omap_hwmod_assert_hardreset(struct omap_hwmod *oh, const char *name)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if (!oh)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
mutex_lock(&oh->_mutex);
|
||||||
|
ret = _assert_hardreset(oh, name);
|
||||||
|
mutex_unlock(&oh->_mutex);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* omap_hwmod_deassert_hardreset - deassert the HW reset line of submodules
|
||||||
|
* contained in the hwmod module.
|
||||||
|
* @oh: struct omap_hwmod *
|
||||||
|
* @name: name of the reset line to look up and deassert
|
||||||
|
*
|
||||||
|
* Some IP like dsp, ipu or iva contain processor that require
|
||||||
|
* an HW reset line to be assert / deassert in order to enable fully
|
||||||
|
* the IP. Returns -EINVAL if @oh is null or if the operation is not
|
||||||
|
* yet supported on this OMAP; otherwise, passes along the return value
|
||||||
|
* from _deassert_hardreset().
|
||||||
|
*/
|
||||||
|
int omap_hwmod_deassert_hardreset(struct omap_hwmod *oh, const char *name)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if (!oh)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
mutex_lock(&oh->_mutex);
|
||||||
|
ret = _deassert_hardreset(oh, name);
|
||||||
|
mutex_unlock(&oh->_mutex);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* omap_hwmod_read_hardreset - read the HW reset line state of submodules
|
||||||
|
* contained in the hwmod module
|
||||||
|
* @oh: struct omap_hwmod *
|
||||||
|
* @name: name of the reset line to look up and read
|
||||||
|
*
|
||||||
|
* Return the current state of the hwmod @oh's reset line named @name:
|
||||||
|
* returns -EINVAL upon parameter error or if this operation
|
||||||
|
* is unsupported on the current OMAP; otherwise, passes along the return
|
||||||
|
* value from _read_hardreset().
|
||||||
|
*/
|
||||||
|
int omap_hwmod_read_hardreset(struct omap_hwmod *oh, const char *name)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if (!oh)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
mutex_lock(&oh->_mutex);
|
||||||
|
ret = _read_hardreset(oh, name);
|
||||||
|
mutex_unlock(&oh->_mutex);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* omap_hwmod_for_each_by_class - call @fn for each hwmod of class @classname
|
* omap_hwmod_for_each_by_class - call @fn for each hwmod of class @classname
|
||||||
* @classname: struct omap_hwmod_class name to search for
|
* @classname: struct omap_hwmod_class name to search for
|
||||||
|
@ -512,6 +512,10 @@ int omap_hwmod_idle(struct omap_hwmod *oh);
|
|||||||
int _omap_hwmod_idle(struct omap_hwmod *oh);
|
int _omap_hwmod_idle(struct omap_hwmod *oh);
|
||||||
int omap_hwmod_shutdown(struct omap_hwmod *oh);
|
int omap_hwmod_shutdown(struct omap_hwmod *oh);
|
||||||
|
|
||||||
|
int omap_hwmod_assert_hardreset(struct omap_hwmod *oh, const char *name);
|
||||||
|
int omap_hwmod_deassert_hardreset(struct omap_hwmod *oh, const char *name);
|
||||||
|
int omap_hwmod_read_hardreset(struct omap_hwmod *oh, const char *name);
|
||||||
|
|
||||||
int omap_hwmod_enable_clocks(struct omap_hwmod *oh);
|
int omap_hwmod_enable_clocks(struct omap_hwmod *oh);
|
||||||
int omap_hwmod_disable_clocks(struct omap_hwmod *oh);
|
int omap_hwmod_disable_clocks(struct omap_hwmod *oh);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user