1 --- a/drivers/ssb/driver_chipcommon.c
2 +++ b/drivers/ssb/driver_chipcommon.c
3 @@ -288,6 +288,24 @@ static u32 ssb_chipco_alp_clock(struct s
7 +static u32 ssb_chipco_watchdog_get_max_timer(struct ssb_chipcommon *cc)
11 + if (cc->capabilities & SSB_CHIPCO_CAP_PMU) {
12 + if (cc->dev->id.revision < 26)
15 + nb = (cc->dev->id.revision >= 37) ? 32 : 24;
22 + return (1 << nb) - 1;
25 void ssb_chipcommon_init(struct ssb_chipcommon *cc)
28 @@ -405,8 +423,24 @@ void ssb_chipco_timing_init(struct ssb_c
29 /* Set chip watchdog reset timer to fire in 'ticks' backplane cycles */
30 void ssb_chipco_watchdog_timer_set(struct ssb_chipcommon *cc, u32 ticks)
33 - chipco_write32(cc, SSB_CHIPCO_WATCHDOG, ticks);
35 + enum ssb_clkmode clkmode;
37 + maxt = ssb_chipco_watchdog_get_max_timer(cc);
38 + if (cc->capabilities & SSB_CHIPCO_CAP_PMU) {
41 + else if (ticks > maxt)
43 + chipco_write32(cc, SSB_CHIPCO_PMU_WATCHDOG, ticks);
45 + clkmode = ticks ? SSB_CLKMODE_FAST : SSB_CLKMODE_DYNAMIC;
46 + ssb_chipco_set_clockmode(cc, clkmode);
50 + chipco_write32(cc, SSB_CHIPCO_WATCHDOG, ticks);
54 void ssb_chipco_irq_mask(struct ssb_chipcommon *cc, u32 mask, u32 value)