summaryrefslogtreecommitdiff
path: root/target/linux/ar7-2.6/files
diff options
context:
space:
mode:
authorflorian <florian@3c298f89-4303-0410-b956-a3cf2f4a3e73>2007-07-24 11:05:23 +0000
committerflorian <florian@3c298f89-4303-0410-b956-a3cf2f4a3e73>2007-07-24 11:05:23 +0000
commitcf070486ddf5ae6a56e4952f5a3e504f32cc0052 (patch)
tree00f368c31196fa8be06918b0a428197cb49a1769 /target/linux/ar7-2.6/files
parentfcb99d5385ed537c4cc9c0e87de128e4c1b7ef6d (diff)
Add more ar7 fixes by DerAgo. Fix vlnyq initialistion on fritzbox, add prom_printf required for kgdb, make kgbd finally work, thanks !
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@8141 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux/ar7-2.6/files')
-rw-r--r--target/linux/ar7-2.6/files/arch/mips/ar7/prom.c32
-rw-r--r--target/linux/ar7-2.6/files/arch/mips/ar7/vlynq.c28
-rw-r--r--target/linux/ar7-2.6/files/include/asm-mips/ar7/prom.h29
3 files changed, 76 insertions, 13 deletions
diff --git a/target/linux/ar7-2.6/files/arch/mips/ar7/prom.c b/target/linux/ar7-2.6/files/arch/mips/ar7/prom.c
index 38037dd337..08904dee71 100644
--- a/target/linux/ar7-2.6/files/arch/mips/ar7/prom.c
+++ b/target/linux/ar7-2.6/files/arch/mips/ar7/prom.c
@@ -26,6 +26,7 @@
#include <linux/serial_reg.h>
#include <linux/spinlock.h>
#include <linux/module.h>
+#include <linux/string.h>
#include <asm/io.h>
#include <asm/bootinfo.h>
#include <asm/mips-boards/prom.h>
@@ -245,9 +246,12 @@ static void __init console_config(void)
return;
#ifdef CONFIG_KGDB
- strcat(prom_getcmdline(), " console=kgdb");
- kgdb_enabled = 1;
- return;
+ if (!strstr(prom_getcmdline(), "nokgdb"))
+ {
+ strcat(prom_getcmdline(), " console=kgdb");
+ kgdb_enabled = 1;
+ return;
+ }
#endif
if ((s = prom_getenv("modetty0"))) {
@@ -307,6 +311,28 @@ int prom_putchar(char c)
return 1;
}
+// from adm5120/prom.c
+void prom_printf(char *fmt, ...)
+{
+ va_list args;
+ int l;
+ char *p, *buf_end;
+ char buf[1024];
+
+ va_start(args, fmt);
+ l = vsprintf(buf, fmt, args); /* hopefully i < sizeof(buf) */
+ va_end(args);
+
+ buf_end = buf + l;
+
+ for (p = buf; p < buf_end; p++) {
+ /* Crude cr/nl handling is better than none */
+ if (*p == '\n')
+ prom_putchar('\r');
+ prom_putchar(*p);
+ }
+}
+
#ifdef CONFIG_KGDB
int putDebugChar(char c)
{
diff --git a/target/linux/ar7-2.6/files/arch/mips/ar7/vlynq.c b/target/linux/ar7-2.6/files/arch/mips/ar7/vlynq.c
index 06097556d2..e085c5b199 100644
--- a/target/linux/ar7-2.6/files/arch/mips/ar7/vlynq.c
+++ b/target/linux/ar7-2.6/files/arch/mips/ar7/vlynq.c
@@ -32,6 +32,7 @@
#include <linux/device.h>
#include <asm/addrspace.h>
#include <asm/io.h>
+#include <asm/ar7/ar7.h>
#include <asm/ar7/vlynq.h>
#define PER_DEVICE_IRQS 32
@@ -288,7 +289,7 @@ EXPORT_SYMBOL(vlynq_unregister_driver);
int vlynq_device_enable(struct vlynq_device *dev)
{
- u32 val;
+ u32 div;
int result;
struct plat_vlynq_ops *ops = dev->dev.platform_data;
@@ -299,17 +300,24 @@ int vlynq_device_enable(struct vlynq_device *dev)
dev->local->control = 0;
dev->remote->control = 0;
- if (vlynq_linked(dev))
+ div = ar7_dsp_freq() / 62500000;
+ if(ar7_dsp_freq() / div != 62500000)
+ {
+ printk(KERN_WARNING
+ "VLYNQ: Adjusted requested frequency %d to %d\n",
+ 62500000, ar7_dsp_freq() / div);
+ }
+
+ printk("VLYNQ: Setting clock to %d (clock divider %u)\n", ar7_dsp_freq() / div, div);
+ dev->local->control = VLYNQ_CTRL_CLOCK_DIV((div - 1)) |
+ VLYNQ_CTRL_CLOCK_INT;
+
+// dev->local->control = VLYNQ_CTRL_CLOCK_INT;
+
+ if (vlynq_linked(dev))
return vlynq_setup_irq(dev);
- for (val = 0; val < 8; val++) {
- dev->local->control = VLYNQ_CTRL_CLOCK_DIV(val) |
- VLYNQ_CTRL_CLOCK_INT;
- if (vlynq_linked(dev))
- return vlynq_setup_irq(dev);
- }
-
- return -ENODEV;
+ return -ENODEV;
}
void vlynq_device_disable(struct vlynq_device *dev)
diff --git a/target/linux/ar7-2.6/files/include/asm-mips/ar7/prom.h b/target/linux/ar7-2.6/files/include/asm-mips/ar7/prom.h
new file mode 100644
index 0000000000..f500093e2c
--- /dev/null
+++ b/target/linux/ar7-2.6/files/include/asm-mips/ar7/prom.h
@@ -0,0 +1,29 @@
+/*
+ * $Id$
+ *
+ * Copyright (C) 2006, 2007 OpenWrt.org
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifndef __PROM_H__
+#define __PROM_H__
+
+extern void prom_init(void);
+extern char *prom_getenv(char *name);
+extern void prom_printf(char *fmt, ...);
+
+#endif // __PROM_H__
+