mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 19:56:18 +00:00
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: Michael Buesch <mb@bu3sch.de> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
58ff70d4fe
commit
42bfad4f71
7 changed files with 63 additions and 0 deletions
|
@ -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
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
# 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,
|
||||||
*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;
|
||||||
|
|
26
drivers/ssb/embedded.c
Normal file
26
drivers/ssb/embedded.c
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
/*
|
||||||
|
* 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 {
|
||||||
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,
|
||||||
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,
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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_ */
|
||||||
|
|
10
include/linux/ssb/ssb_embedded.h
Normal file
10
include/linux/ssb/ssb_embedded.h
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
#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_ */
|
Loading…
Reference in a new issue