summaryrefslogtreecommitdiff
path: root/target/linux/brcm47xx/patches-2.6.23/610-ssb-watchdog-fix.patch
blob: de1c1a91a925a478269d56d38d96fa9fa72fd6f9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
Index: linux-2.6.23.17/drivers/ssb/Kconfig
===================================================================
--- linux-2.6.23.17.orig/drivers/ssb/Kconfig
+++ linux-2.6.23.17/drivers/ssb/Kconfig
@@ -105,6 +105,12 @@ config SSB_DRIVER_MIPS
 
 	  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
 	bool "SSB Broadcom EXTIF core driver (EXPERIMENTAL)"
 	depends on SSB_DRIVER_MIPS && EXPERIMENTAL
Index: linux-2.6.23.17/drivers/ssb/Makefile
===================================================================
--- linux-2.6.23.17.orig/drivers/ssb/Makefile
+++ linux-2.6.23.17/drivers/ssb/Makefile
@@ -1,5 +1,6 @@
 # core
 ssb-y					+= main.o scan.o
+ssb-$(CONFIG_SSB_EMBEDDED)		+= embedded.o
 
 # host support
 ssb-$(CONFIG_SSB_PCIHOST)		+= pci.o pcihost_wrapper.o
Index: linux-2.6.23.17/drivers/ssb/driver_extif.c
===================================================================
--- linux-2.6.23.17.orig/drivers/ssb/driver_extif.c
+++ linux-2.6.23.17/drivers/ssb/driver_extif.c
@@ -37,6 +37,12 @@ static inline u32 extif_write32_masked(s
 	return value;
 }
 
+void ssb_extif_watchdog_timer_set(struct ssb_extif *extif,
+				  u32 ticks)
+{
+	extif_write32(extif, SSB_EXTIF_WATCHDOG, ticks);
+}
+
 #ifdef CONFIG_SSB_SERIAL
 static bool serial_exists(u8 *regs)
 {
Index: linux-2.6.23.17/drivers/ssb/embedded.c
===================================================================
--- /dev/null
+++ linux-2.6.23.17/drivers/ssb/embedded.c
@@ -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;
+}
Index: linux-2.6.23.17/include/linux/ssb/ssb_driver_chipcommon.h
===================================================================
--- linux-2.6.23.17.orig/include/linux/ssb/ssb_driver_chipcommon.h
+++ linux-2.6.23.17/include/linux/ssb/ssb_driver_chipcommon.h
@@ -360,6 +360,11 @@ struct ssb_chipcommon {
 	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);
 
 #include <linux/pm.h>
Index: linux-2.6.23.17/include/linux/ssb/ssb_driver_extif.h
===================================================================
--- linux-2.6.23.17.orig/include/linux/ssb/ssb_driver_extif.h
+++ linux-2.6.23.17/include/linux/ssb/ssb_driver_extif.h
@@ -178,6 +178,9 @@ u32 ssb_extif_gpio_outen(struct ssb_exti
 u32 ssb_extif_gpio_polarity(struct ssb_extif *extif, u32 mask, u32 value);
 u32 ssb_extif_gpio_intmask(struct ssb_extif *extif, u32 mask, u32 value);
 
+extern void ssb_extif_watchdog_timer_set(struct ssb_extif *extif,
+					 u32 ticks);
+
 #ifdef CONFIG_SSB_SERIAL
 extern int ssb_extif_serial_init(struct ssb_extif *extif,
 				 struct ssb_serial_port *ports);
@@ -201,5 +204,11 @@ void ssb_extif_get_clockcontrol(struct s
 {
 }
 
+static inline
+void ssb_extif_watchdog_timer_set(struct ssb_extif *extif,
+				  u32 ticks)
+{
+}
+
 #endif /* CONFIG_SSB_DRIVER_EXTIF */
 #endif /* LINUX_SSB_EXTIFCORE_H_ */
Index: linux-2.6.23.17/include/linux/ssb/ssb_embedded.h
===================================================================
--- /dev/null
+++ linux-2.6.23.17/include/linux/ssb/ssb_embedded.h
@@ -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_ */