ARM: OMAP2+: AM33XX: Update the hardreset API
WKUP-M3 has a reset status bit (RM_WKUP_STST.WKUP_M3_LRST) Update the hardreset API to ensure that the reset line properly deasserted. Signed-off-by: Vaibhav Bedia <vaibhav.bedia@ti.com> Acked-by: Santosh Shilimkar <santosh.shilimkar@ti.com> Acked-by: Peter Korsgaard <jacmet@sunsite.dk> Signed-off-by: Paul Walmsley <paul@pwsan.com>
This commit is contained in:
parent
3077fe69d7
commit
3c06f1b8c3
|
@ -3041,11 +3041,8 @@ static int _am33xx_assert_hardreset(struct omap_hwmod *oh,
|
||||||
static int _am33xx_deassert_hardreset(struct omap_hwmod *oh,
|
static int _am33xx_deassert_hardreset(struct omap_hwmod *oh,
|
||||||
struct omap_hwmod_rst_info *ohri)
|
struct omap_hwmod_rst_info *ohri)
|
||||||
{
|
{
|
||||||
if (ohri->st_shift)
|
|
||||||
pr_err("omap_hwmod: %s: %s: hwmod data error: OMAP4 does not support st_shift\n",
|
|
||||||
oh->name, ohri->name);
|
|
||||||
|
|
||||||
return am33xx_prm_deassert_hardreset(ohri->rst_shift,
|
return am33xx_prm_deassert_hardreset(ohri->rst_shift,
|
||||||
|
ohri->st_shift,
|
||||||
oh->clkdm->pwrdm.ptr->prcm_offs,
|
oh->clkdm->pwrdm.ptr->prcm_offs,
|
||||||
oh->prcm.omap4.rstctrl_offs,
|
oh->prcm.omap4.rstctrl_offs,
|
||||||
oh->prcm.omap4.rstst_offs);
|
oh->prcm.omap4.rstst_offs);
|
||||||
|
|
|
@ -110,11 +110,11 @@ int am33xx_prm_assert_hardreset(u8 shift, s16 inst, u16 rstctrl_offs)
|
||||||
* -EINVAL upon an argument error, -EEXIST if the submodule was already out
|
* -EINVAL upon an argument error, -EEXIST if the submodule was already out
|
||||||
* of reset, or -EBUSY if the submodule did not exit reset promptly.
|
* of reset, or -EBUSY if the submodule did not exit reset promptly.
|
||||||
*/
|
*/
|
||||||
int am33xx_prm_deassert_hardreset(u8 shift, s16 inst,
|
int am33xx_prm_deassert_hardreset(u8 shift, u8 st_shift, s16 inst,
|
||||||
u16 rstctrl_offs, u16 rstst_offs)
|
u16 rstctrl_offs, u16 rstst_offs)
|
||||||
{
|
{
|
||||||
int c;
|
int c;
|
||||||
u32 mask = 1 << shift;
|
u32 mask = 1 << st_shift;
|
||||||
|
|
||||||
/* Check the current status to avoid de-asserting the line twice */
|
/* Check the current status to avoid de-asserting the line twice */
|
||||||
if (am33xx_prm_is_hardreset_asserted(shift, inst, rstctrl_offs) == 0)
|
if (am33xx_prm_is_hardreset_asserted(shift, inst, rstctrl_offs) == 0)
|
||||||
|
@ -122,11 +122,14 @@ int am33xx_prm_deassert_hardreset(u8 shift, s16 inst,
|
||||||
|
|
||||||
/* Clear the reset status by writing 1 to the status bit */
|
/* Clear the reset status by writing 1 to the status bit */
|
||||||
am33xx_prm_rmw_reg_bits(0xffffffff, mask, inst, rstst_offs);
|
am33xx_prm_rmw_reg_bits(0xffffffff, mask, inst, rstst_offs);
|
||||||
/* de-assert the reset control line */
|
|
||||||
am33xx_prm_rmw_reg_bits(mask, 0, inst, rstctrl_offs);
|
|
||||||
/* wait the status to be set */
|
|
||||||
|
|
||||||
omap_test_timeout(am33xx_prm_is_hardreset_asserted(shift, inst,
|
/* de-assert the reset control line */
|
||||||
|
mask = 1 << shift;
|
||||||
|
|
||||||
|
am33xx_prm_rmw_reg_bits(mask, 0, inst, rstctrl_offs);
|
||||||
|
|
||||||
|
/* wait the status to be set */
|
||||||
|
omap_test_timeout(am33xx_prm_is_hardreset_asserted(st_shift, inst,
|
||||||
rstst_offs),
|
rstst_offs),
|
||||||
MAX_MODULE_HARDRESET_WAIT, c);
|
MAX_MODULE_HARDRESET_WAIT, c);
|
||||||
|
|
||||||
|
|
|
@ -125,7 +125,7 @@ extern void am33xx_prm_global_warm_sw_reset(void);
|
||||||
extern int am33xx_prm_is_hardreset_asserted(u8 shift, s16 inst,
|
extern int am33xx_prm_is_hardreset_asserted(u8 shift, s16 inst,
|
||||||
u16 rstctrl_offs);
|
u16 rstctrl_offs);
|
||||||
extern int am33xx_prm_assert_hardreset(u8 shift, s16 inst, u16 rstctrl_offs);
|
extern int am33xx_prm_assert_hardreset(u8 shift, s16 inst, u16 rstctrl_offs);
|
||||||
extern int am33xx_prm_deassert_hardreset(u8 shift, s16 inst,
|
extern int am33xx_prm_deassert_hardreset(u8 shift, u8 st_shift, s16 inst,
|
||||||
u16 rstctrl_offs, u16 rstst_offs);
|
u16 rstctrl_offs, u16 rstst_offs);
|
||||||
#endif /* ASSEMBLER */
|
#endif /* ASSEMBLER */
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue