Browse Source

Merge tag 'microblaze-v4.18-rc3' of git://git.monstr.eu/linux-2.6-microblaze

Pull microblaze fixes from Michal Simek:

 - fix architecture gpio heart beat code

 - add new syscalls

 - remove unused xlnx,compound handling

 - remove platform.c

* tag 'microblaze-v4.18-rc3' of git://git.monstr.eu/linux-2.6-microblaze:
  microblaze: consolidate GPIO reset handling
  microblaze: remove unecessary of_platform_bus_probe call
  microblaze: Add new syscalls io_pgetevents and rseq
  microblaze: Remove architecture heart beat code
  microblaze: heartbeat: fix missing prom.h include
Linus Torvalds 7 years ago
parent
commit
22c3b1521a

+ 0 - 7
arch/microblaze/Kconfig.debug

@@ -8,11 +8,4 @@ config TRACE_IRQFLAGS_SUPPORT
 
 
 source "lib/Kconfig.debug"
 source "lib/Kconfig.debug"
 
 
-config HEART_BEAT
-	bool "Heart beat function for kernel"
-	default n
-	help
-	  This option turns on/off heart beat kernel functionality.
-	  First GPIO node is taken.
-
 endmenu
 endmenu

+ 0 - 5
arch/microblaze/include/asm/setup.h

@@ -19,15 +19,10 @@ extern char cmd_line[COMMAND_LINE_SIZE];
 
 
 extern char *klimit;
 extern char *klimit;
 
 
-void microblaze_heartbeat(void);
-void microblaze_setup_heartbeat(void);
-
 #   ifdef CONFIG_MMU
 #   ifdef CONFIG_MMU
 extern void mmu_reset(void);
 extern void mmu_reset(void);
 #   endif /* CONFIG_MMU */
 #   endif /* CONFIG_MMU */
 
 
-extern void of_platform_reset_gpio_probe(void);
-
 void time_init(void);
 void time_init(void);
 void init_IRQ(void);
 void init_IRQ(void);
 void machine_early_init(const char *cmdline, unsigned int ram,
 void machine_early_init(const char *cmdline, unsigned int ram,

+ 1 - 1
arch/microblaze/include/asm/unistd.h

@@ -38,6 +38,6 @@
 
 
 #endif /* __ASSEMBLY__ */
 #endif /* __ASSEMBLY__ */
 
 
-#define __NR_syscalls         399
+#define __NR_syscalls         401
 
 
 #endif /* _ASM_MICROBLAZE_UNISTD_H */
 #endif /* _ASM_MICROBLAZE_UNISTD_H */

+ 2 - 0
arch/microblaze/include/uapi/asm/unistd.h

@@ -415,5 +415,7 @@
 #define __NR_pkey_alloc		396
 #define __NR_pkey_alloc		396
 #define __NR_pkey_free		397
 #define __NR_pkey_free		397
 #define __NR_statx		398
 #define __NR_statx		398
+#define __NR_io_pgetevents	399
+#define __NR_rseq		400
 
 
 #endif /* _UAPI_ASM_MICROBLAZE_UNISTD_H */
 #endif /* _UAPI_ASM_MICROBLAZE_UNISTD_H */

+ 1 - 3
arch/microblaze/kernel/Makefile

@@ -8,7 +8,6 @@ ifdef CONFIG_FUNCTION_TRACER
 CFLAGS_REMOVE_timer.o = -pg
 CFLAGS_REMOVE_timer.o = -pg
 CFLAGS_REMOVE_intc.o = -pg
 CFLAGS_REMOVE_intc.o = -pg
 CFLAGS_REMOVE_early_printk.o = -pg
 CFLAGS_REMOVE_early_printk.o = -pg
-CFLAGS_REMOVE_heartbeat.o = -pg
 CFLAGS_REMOVE_ftrace.o = -pg
 CFLAGS_REMOVE_ftrace.o = -pg
 CFLAGS_REMOVE_process.o = -pg
 CFLAGS_REMOVE_process.o = -pg
 endif
 endif
@@ -17,12 +16,11 @@ extra-y := head.o vmlinux.lds
 
 
 obj-y += dma.o exceptions.o \
 obj-y += dma.o exceptions.o \
 	hw_exception_handler.o irq.o \
 	hw_exception_handler.o irq.o \
-	platform.o process.o prom.o ptrace.o \
+	process.o prom.o ptrace.o \
 	reset.o setup.o signal.o sys_microblaze.o timer.o traps.o unwind.o
 	reset.o setup.o signal.o sys_microblaze.o timer.o traps.o unwind.o
 
 
 obj-y += cpu/
 obj-y += cpu/
 
 
-obj-$(CONFIG_HEART_BEAT)	+= heartbeat.o
 obj-$(CONFIG_MODULES)		+= microblaze_ksyms.o module.o
 obj-$(CONFIG_MODULES)		+= microblaze_ksyms.o module.o
 obj-$(CONFIG_MMU)		+= misc.o
 obj-$(CONFIG_MMU)		+= misc.o
 obj-$(CONFIG_STACKTRACE)	+= stacktrace.o
 obj-$(CONFIG_STACKTRACE)	+= stacktrace.o

+ 0 - 72
arch/microblaze/kernel/heartbeat.c

@@ -1,72 +0,0 @@
-/*
- * Copyright (C) 2007-2009 Michal Simek <monstr@monstr.eu>
- * Copyright (C) 2007-2009 PetaLogix
- * Copyright (C) 2006 Atmark Techno, Inc.
- *
- * This file is subject to the terms and conditions of the GNU General Public
- * License. See the file "COPYING" in the main directory of this archive
- * for more details.
- */
-
-#include <linux/sched.h>
-#include <linux/sched/loadavg.h>
-#include <linux/io.h>
-
-#include <asm/setup.h>
-#include <asm/page.h>
-#include <asm/prom.h>
-
-static unsigned int base_addr;
-
-void microblaze_heartbeat(void)
-{
-	static unsigned int cnt, period, dist;
-
-	if (base_addr) {
-		if (cnt == 0 || cnt == dist)
-			out_be32(base_addr, 1);
-		else if (cnt == 7 || cnt == dist + 7)
-			out_be32(base_addr, 0);
-
-		if (++cnt > period) {
-			cnt = 0;
-			/*
-			 * The hyperbolic function below modifies the heartbeat
-			 * period length in dependency of the current (5min)
-			 * load. It goes through the points f(0)=126, f(1)=86,
-			 * f(5)=51, f(inf)->30.
-			 */
-			period = ((672 << FSHIFT) / (5 * avenrun[0] +
-						(7 << FSHIFT))) + 30;
-			dist = period / 4;
-		}
-	}
-}
-
-void microblaze_setup_heartbeat(void)
-{
-	struct device_node *gpio = NULL;
-	int *prop;
-	int j;
-	const char * const gpio_list[] = {
-		"xlnx,xps-gpio-1.00.a",
-		NULL
-	};
-
-	for (j = 0; gpio_list[j] != NULL; j++) {
-		gpio = of_find_compatible_node(NULL, NULL, gpio_list[j]);
-		if (gpio)
-			break;
-	}
-
-	if (gpio) {
-		base_addr = be32_to_cpup(of_get_property(gpio, "reg", NULL));
-		base_addr = (unsigned long) ioremap(base_addr, PAGE_SIZE);
-		pr_notice("Heartbeat GPIO at 0x%x\n", base_addr);
-
-		/* GPIO is configured as output */
-		prop = (int *) of_get_property(gpio, "xlnx,is-bidir", NULL);
-		if (prop)
-			out_be32(base_addr + 4, 0);
-	}
-}

+ 0 - 29
arch/microblaze/kernel/platform.c

@@ -1,29 +0,0 @@
-/*
- * Copyright 2008 Michal Simek <monstr@monstr.eu>
- *
- * based on virtex.c file
- *
- * Copyright 2007 Secret Lab Technologies Ltd.
- *
- * This file is licensed under the terms of the GNU General Public License
- * version 2. This program is licensed "as is" without any warranty of any
- * kind, whether express or implied.
- */
-
-#include <linux/init.h>
-#include <linux/of_platform.h>
-#include <asm/setup.h>
-
-static struct of_device_id xilinx_of_bus_ids[] __initdata = {
-	{ .compatible = "simple-bus", },
-	{ .compatible = "xlnx,compound", },
-	{}
-};
-
-static int __init microblaze_device_probe(void)
-{
-	of_platform_bus_probe(NULL, xilinx_of_bus_ids, NULL);
-	of_platform_reset_gpio_probe();
-	return 0;
-}
-device_initcall(microblaze_device_probe);

+ 6 - 5
arch/microblaze/kernel/reset.c

@@ -18,7 +18,7 @@
 static int handle; /* reset pin handle */
 static int handle; /* reset pin handle */
 static unsigned int reset_val;
 static unsigned int reset_val;
 
 
-void of_platform_reset_gpio_probe(void)
+static int of_platform_reset_gpio_probe(void)
 {
 {
 	int ret;
 	int ret;
 	handle = of_get_named_gpio(of_find_node_by_path("/"),
 	handle = of_get_named_gpio(of_find_node_by_path("/"),
@@ -27,13 +27,13 @@ void of_platform_reset_gpio_probe(void)
 	if (!gpio_is_valid(handle)) {
 	if (!gpio_is_valid(handle)) {
 		pr_info("Skipping unavailable RESET gpio %d (%s)\n",
 		pr_info("Skipping unavailable RESET gpio %d (%s)\n",
 				handle, "reset");
 				handle, "reset");
-		return;
+		return -ENODEV;
 	}
 	}
 
 
 	ret = gpio_request(handle, "reset");
 	ret = gpio_request(handle, "reset");
 	if (ret < 0) {
 	if (ret < 0) {
 		pr_info("GPIO pin is already allocated\n");
 		pr_info("GPIO pin is already allocated\n");
-		return;
+		return ret;
 	}
 	}
 
 
 	/* get current setup value */
 	/* get current setup value */
@@ -51,11 +51,12 @@ void of_platform_reset_gpio_probe(void)
 
 
 	pr_info("RESET: Registered gpio device: %d, current val: %d\n",
 	pr_info("RESET: Registered gpio device: %d, current val: %d\n",
 							handle, reset_val);
 							handle, reset_val);
-	return;
+	return 0;
 err:
 err:
 	gpio_free(handle);
 	gpio_free(handle);
-	return;
+	return ret;
 }
 }
+device_initcall(of_platform_reset_gpio_probe);
 
 
 
 
 static void gpio_system_reset(void)
 static void gpio_system_reset(void)

+ 2 - 0
arch/microblaze/kernel/syscall_table.S

@@ -400,3 +400,5 @@ ENTRY(sys_call_table)
 	.long sys_pkey_alloc
 	.long sys_pkey_alloc
 	.long sys_pkey_free
 	.long sys_pkey_free
 	.long sys_statx
 	.long sys_statx
+	.long sys_io_pgetevents
+	.long sys_rseq

+ 0 - 7
arch/microblaze/kernel/timer.c

@@ -156,9 +156,6 @@ static inline void timer_ack(void)
 static irqreturn_t timer_interrupt(int irq, void *dev_id)
 static irqreturn_t timer_interrupt(int irq, void *dev_id)
 {
 {
 	struct clock_event_device *evt = &clockevent_xilinx_timer;
 	struct clock_event_device *evt = &clockevent_xilinx_timer;
-#ifdef CONFIG_HEART_BEAT
-	microblaze_heartbeat();
-#endif
 	timer_ack();
 	timer_ack();
 	evt->event_handler(evt);
 	evt->event_handler(evt);
 	return IRQ_HANDLED;
 	return IRQ_HANDLED;
@@ -318,10 +315,6 @@ static int __init xilinx_timer_init(struct device_node *timer)
 		return ret;
 		return ret;
 	}
 	}
 
 
-#ifdef CONFIG_HEART_BEAT
-	microblaze_setup_heartbeat();
-#endif
-
 	ret = xilinx_clocksource_init();
 	ret = xilinx_clocksource_init();
 	if (ret)
 	if (ret)
 		return ret;
 		return ret;