* [PATCH] b43: Add simple firmware watchdog
@ 2008-06-20 15:44 Michael Buesch
0 siblings, 0 replies; only message in thread
From: Michael Buesch @ 2008-06-20 15:44 UTC (permalink / raw)
To: John Linville; +Cc: bcm43xx-dev, linux-wireless
This adds a simple firmware watchdog for the opensource firmware.
This will check every 15 seconds, if the firmware zeroed out the watchdog
register. The firmware will do this in its eventloop.
Signed-off-by: Michael Buesch <mb@bu3sch.de>
---
John, please queue for 2.6.27
Index: wireless-testing/drivers/net/wireless/b43/main.c
===================================================================
--- wireless-testing.orig/drivers/net/wireless/b43/main.c 2008-06-20 17:39:21.000000000 +0200
+++ wireless-testing/drivers/net/wireless/b43/main.c 2008-06-20 17:40:06.000000000 +0200
@@ -2805,12 +2805,27 @@ static void b43_periodic_every30sec(stru
b43_calculate_link_quality(dev);
}
static void b43_periodic_every15sec(struct b43_wldev *dev)
{
struct b43_phy *phy = &dev->phy;
+ u16 wdr;
+
+ if (dev->fw.opensource) {
+ /* Check if the firmware is still alive.
+ * It will reset the watchdog counter to 0 in its idle loop. */
+ wdr = b43_shm_read16(dev, B43_SHM_SCRATCH, B43_WATCHDOG_REG);
+ if (unlikely(wdr)) {
+ b43err(dev->wl, "Firmware watchdog: The firmware died!\n");
+ b43_controller_restart(dev, "Firmware watchdog");
+ return;
+ } else {
+ b43_shm_write16(dev, B43_SHM_SCRATCH,
+ B43_WATCHDOG_REG, 1);
+ }
+ }
if (phy->type == B43_PHYTYPE_G) {
//TODO: update_aci_moving_average
if (phy->aci_enable && phy->aci_wlan_automatic) {
b43_mac_suspend(dev);
if (!phy->aci_enable && 1 /*TODO: not scanning? */ ) {
Index: wireless-testing/drivers/net/wireless/b43/b43.h
===================================================================
--- wireless-testing.orig/drivers/net/wireless/b43/b43.h 2008-06-20 17:39:21.000000000 +0200
+++ wireless-testing/drivers/net/wireless/b43/b43.h 2008-06-20 17:40:06.000000000 +0200
@@ -438,12 +438,14 @@ enum {
/* The firmware register to fetch the panic reason from. */
#define B43_FWPANIC_REASON_REG 3
/* Firmware panic reason codes */
#define B43_FWPANIC_DIE 0 /* Firmware died. Don't auto-restart it. */
#define B43_FWPANIC_RESTART 1 /* Firmware died. Schedule a controller reset. */
+/* The firmware register that contains the watchdog counter. */
+#define B43_WATCHDOG_REG 1
/* Device specific rate values.
* The actual values defined here are (rate_in_mbps * 2).
* Some code depends on this. Don't change it. */
#define B43_CCK_RATE_1MB 0x02
#define B43_CCK_RATE_2MB 0x04
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2008-06-20 15:49 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-06-20 15:44 [PATCH] b43: Add simple firmware watchdog Michael Buesch
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.