summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTony Lindgren <tony@atomide.com>2020-02-24 12:58:03 -0800
committerTony Lindgren <tony@atomide.com>2020-02-26 10:03:35 -0800
commitab4d309d8708035bd323b2e2446eb68cda5e61e5 (patch)
tree81f1d67e4014887d608397717cc11fbaa6a5e21e
parente64c021fd92467e34b9d970a651bcaa8f326f3f2 (diff)
downloadlinux-stable-ab4d309d8708035bd323b2e2446eb68cda5e61e5.tar.gz
linux-stable-ab4d309d8708035bd323b2e2446eb68cda5e61e5.tar.bz2
linux-stable-ab4d309d8708035bd323b2e2446eb68cda5e61e5.zip
bus: ti-sysc: Improve reset to work with modules with no sysconfig
At least display susbsystem (DSS) has modules with no sysconfig registers and rely on custom function for module reset handling. Let's make reset work with that too. Signed-off-by: Tony Lindgren <tony@atomide.com>
-rw-r--r--drivers/bus/ti-sysc.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/drivers/bus/ti-sysc.c b/drivers/bus/ti-sysc.c
index 31dae22890d5..f32ba6ec2ba1 100644
--- a/drivers/bus/ti-sysc.c
+++ b/drivers/bus/ti-sysc.c
@@ -1571,7 +1571,7 @@ static int sysc_reset(struct sysc *ddata)
sysc_offset = ddata->offsets[SYSC_SYSCONFIG];
syss_offset = ddata->offsets[SYSC_SYSSTATUS];
- if (ddata->legacy_mode || sysc_offset < 0 ||
+ if (ddata->legacy_mode ||
ddata->cap->regbits->srst_shift < 0 ||
ddata->cfg.quirks & SYSC_QUIRK_NO_RESET_ON_INIT)
return 0;
@@ -1586,9 +1586,11 @@ static int sysc_reset(struct sysc *ddata)
if (ddata->pre_reset_quirk)
ddata->pre_reset_quirk(ddata);
- sysc_val = sysc_read_sysconfig(ddata);
- sysc_val |= sysc_mask;
- sysc_write(ddata, sysc_offset, sysc_val);
+ if (sysc_offset >= 0) {
+ sysc_val = sysc_read_sysconfig(ddata);
+ sysc_val |= sysc_mask;
+ sysc_write(ddata, sysc_offset, sysc_val);
+ }
if (ddata->cfg.srst_udelay)
usleep_range(ddata->cfg.srst_udelay,