diff options
author | florian <florian@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2007-07-24 11:05:23 +0000 |
---|---|---|
committer | florian <florian@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2007-07-24 11:05:23 +0000 |
commit | cf070486ddf5ae6a56e4952f5a3e504f32cc0052 (patch) | |
tree | 00f368c31196fa8be06918b0a428197cb49a1769 /target/linux/ar7-2.6/files | |
parent | fcb99d5385ed537c4cc9c0e87de128e4c1b7ef6d (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.c | 32 | ||||
-rw-r--r-- | target/linux/ar7-2.6/files/arch/mips/ar7/vlynq.c | 28 | ||||
-rw-r--r-- | target/linux/ar7-2.6/files/include/asm-mips/ar7/prom.h | 29 |
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 38037dd33..08904dee7 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 06097556d..e085c5b19 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 000000000..f500093e2 --- /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__ + |