Ver Fonte

Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/vapier/blackfin

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/vapier/blackfin:
  Blackfin: bf54x: re-enable anomaly 05000353 for all revs
  Blackfin: enable atomic64_t support
  Blackfin: wire up new syncfs syscall
  Blackfin: SMP: flush CoreB cache when shutting down
Linus Torvalds há 14 anos atrás
pai
commit
05061bf678

+ 1 - 0
arch/blackfin/Kconfig

@@ -31,6 +31,7 @@ config BLACKFIN
 	select HAVE_OPROFILE
 	select ARCH_WANT_OPTIONAL_GPIOLIB
 	select HAVE_GENERIC_HARDIRQS
+	select GENERIC_ATOMIC64
 	select GENERIC_IRQ_PROBE
 	select IRQ_PER_CPU if SMP
 	select GENERIC_HARDIRQS_NO_DEPRECATED

+ 2 - 0
arch/blackfin/include/asm/atomic.h

@@ -121,4 +121,6 @@ static inline int atomic_test_mask(int mask, atomic_t *v)
 
 #endif
 
+#include <asm-generic/atomic64.h>
+
 #endif

+ 2 - 1
arch/blackfin/include/asm/unistd.h

@@ -396,8 +396,9 @@
 #define __NR_name_to_handle_at	375
 #define __NR_open_by_handle_at	376
 #define __NR_clock_adjtime	377
+#define __NR_syncfs		378
 
-#define __NR_syscall		378
+#define __NR_syscall		379
 #define NR_syscalls		__NR_syscall
 
 /* Old optional stuff no one actually uses */

+ 5 - 1
arch/blackfin/mach-bf548/include/mach/anomaly.h

@@ -81,7 +81,11 @@
 /* PLL Status Register Is Inaccurate */
 #define ANOMALY_05000351 (__SILICON_REVISION__ < 1)
 /* bfrom_SysControl() Firmware Function Performs Improper System Reset */
-#define ANOMALY_05000353 (__SILICON_REVISION__ < 2)
+/*
+ * Note: anomaly sheet says this is fixed with bf54x-0.2+, but testing
+ *       shows that the fix itself does not cover all cases.
+ */
+#define ANOMALY_05000353 (1)
 /* Regulator Programming Blocked when Hibernate Wakeup Source Remains Active */
 #define ANOMALY_05000355 (__SILICON_REVISION__ < 1)
 /* System Stalled During A Core Access To AMC While A Core Access To NFC FIFO Is Required */

+ 9 - 0
arch/blackfin/mach-bf561/hotplug.c

@@ -7,6 +7,7 @@
 
 #include <linux/smp.h>
 #include <asm/blackfin.h>
+#include <asm/cacheflush.h>
 #include <mach/pll.h>
 
 int hotplug_coreb;
@@ -14,8 +15,16 @@ int hotplug_coreb;
 void platform_cpu_die(void)
 {
 	unsigned long iwr;
+
 	hotplug_coreb = 1;
 
+	/*
+	 * When CoreB wakes up, the code in _coreb_trampoline_start cannot
+	 * turn off the data cache. This causes the CoreB failed to boot.
+	 * As a workaround, we invalidate all the data cache before sleep.
+	 */
+	blackfin_invalidate_entire_dcache();
+
 	/* disable core timer */
 	bfin_write_TCNTL(0);
 

+ 1 - 0
arch/blackfin/mach-common/entry.S

@@ -1752,6 +1752,7 @@ ENTRY(_sys_call_table)
 	.long _sys_name_to_handle_at	/* 375 */
 	.long _sys_open_by_handle_at
 	.long _sys_clock_adjtime
+	.long _sys_syncfs
 
 	.rept NR_syscalls-(.-_sys_call_table)/4
 	.long _sys_ni_syscall