* [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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).