Commit 42bfad4f authored by Michael Buesch's avatar Michael Buesch Committed by John W. Linville

ssb: Fix watchdog access for devices without a chipcommon

This fixes the SSB watchdog access for devices without a chipcommon.
These devices have the watchdog on the extif.
Signed-off-by: default avatarMichael Buesch <mb@bu3sch.de>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 58ff70d4
...@@ -105,6 +105,12 @@ config SSB_DRIVER_MIPS ...@@ -105,6 +105,12 @@ config SSB_DRIVER_MIPS
If unsure, say N If unsure, say N
# Assumption: We are on embedded, if we compile the MIPS core.
config SSB_EMBEDDED
bool
depends on SSB_DRIVER_MIPS
default y
config SSB_DRIVER_EXTIF config SSB_DRIVER_EXTIF
bool "SSB Broadcom EXTIF core driver (EXPERIMENTAL)" bool "SSB Broadcom EXTIF core driver (EXPERIMENTAL)"
depends on SSB_DRIVER_MIPS && EXPERIMENTAL depends on SSB_DRIVER_MIPS && EXPERIMENTAL
......
# core # core
ssb-y += main.o scan.o ssb-y += main.o scan.o
ssb-$(CONFIG_SSB_EMBEDDED) += embedded.o
# host support # host support
ssb-$(CONFIG_SSB_PCIHOST) += pci.o pcihost_wrapper.o ssb-$(CONFIG_SSB_PCIHOST) += pci.o pcihost_wrapper.o
......
...@@ -110,6 +110,12 @@ void ssb_extif_get_clockcontrol(struct ssb_extif *extif, ...@@ -110,6 +110,12 @@ void ssb_extif_get_clockcontrol(struct ssb_extif *extif,
*m = extif_read32(extif, SSB_EXTIF_CLOCK_SB); *m = extif_read32(extif, SSB_EXTIF_CLOCK_SB);
} }
void ssb_extif_watchdog_timer_set(struct ssb_extif *extif,
u32 ticks)
{
extif_write32(extif, SSB_EXTIF_WATCHDOG, ticks);
}
u32 ssb_extif_gpio_in(struct ssb_extif *extif, u32 mask) u32 ssb_extif_gpio_in(struct ssb_extif *extif, u32 mask)
{ {
return extif_read32(extif, SSB_EXTIF_GPIO_IN) & mask; return extif_read32(extif, SSB_EXTIF_GPIO_IN) & mask;
......
/*
* Sonics Silicon Backplane
* Embedded systems support code
*
* Copyright 2005-2008, Broadcom Corporation
* Copyright 2006-2008, Michael Buesch <mb@bu3sch.de>
*
* Licensed under the GNU/GPL. See COPYING for details.
*/
#include <linux/ssb/ssb.h>
#include <linux/ssb/ssb_embedded.h>
int ssb_watchdog_timer_set(struct ssb_bus *bus, u32 ticks)
{
if (ssb_chipco_available(&bus->chipco)) {
ssb_chipco_watchdog_timer_set(&bus->chipco, ticks);
return 0;
}
if (ssb_extif_available(&bus->extif)) {
ssb_extif_watchdog_timer_set(&bus->extif, ticks);
return 0;
}
return -ENODEV;
}
...@@ -360,6 +360,11 @@ struct ssb_chipcommon { ...@@ -360,6 +360,11 @@ struct ssb_chipcommon {
u16 fast_pwrup_delay; u16 fast_pwrup_delay;
}; };
static inline bool ssb_chipco_available(struct ssb_chipcommon *cc)
{
return (cc->dev != NULL);
}
extern void ssb_chipcommon_init(struct ssb_chipcommon *cc); extern void ssb_chipcommon_init(struct ssb_chipcommon *cc);
#include <linux/pm.h> #include <linux/pm.h>
......
...@@ -171,6 +171,9 @@ extern void ssb_extif_get_clockcontrol(struct ssb_extif *extif, ...@@ -171,6 +171,9 @@ extern void ssb_extif_get_clockcontrol(struct ssb_extif *extif,
extern void ssb_extif_timing_init(struct ssb_extif *extif, extern void ssb_extif_timing_init(struct ssb_extif *extif,
unsigned long ns); unsigned long ns);
extern void ssb_extif_watchdog_timer_set(struct ssb_extif *extif,
u32 ticks);
u32 ssb_extif_gpio_in(struct ssb_extif *extif, u32 mask); u32 ssb_extif_gpio_in(struct ssb_extif *extif, u32 mask);
void ssb_extif_gpio_out(struct ssb_extif *extif, u32 mask, u32 value); void ssb_extif_gpio_out(struct ssb_extif *extif, u32 mask, u32 value);
...@@ -200,5 +203,11 @@ void ssb_extif_get_clockcontrol(struct ssb_extif *extif, ...@@ -200,5 +203,11 @@ void ssb_extif_get_clockcontrol(struct ssb_extif *extif,
{ {
} }
static inline
void ssb_extif_watchdog_timer_set(struct ssb_extif *extif,
u32 ticks)
{
}
#endif /* CONFIG_SSB_DRIVER_EXTIF */ #endif /* CONFIG_SSB_DRIVER_EXTIF */
#endif /* LINUX_SSB_EXTIFCORE_H_ */ #endif /* LINUX_SSB_EXTIFCORE_H_ */
#ifndef LINUX_SSB_EMBEDDED_H_
#define LINUX_SSB_EMBEDDED_H_
#include <linux/types.h>
#include <linux/ssb/ssb.h>
extern int ssb_watchdog_timer_set(struct ssb_bus *bus, u32 ticks);
#endif /* LINUX_SSB_EMBEDDED_H_ */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment