mirror of
git://git.openwrt.org/openwrt/openwrt.git
synced 2025-01-30 11:23:15 +00:00
fix .21 for sibyte.. because we can..
SVN-Revision: 7332
This commit is contained in:
parent
53496b7cc9
commit
41e092a905
@ -88,9 +88,18 @@ CONFIG_DMA_COHERENT=y
|
|||||||
CONFIG_FW_LOADER=m
|
CONFIG_FW_LOADER=m
|
||||||
# CONFIG_GEN_RTC is not set
|
# CONFIG_GEN_RTC is not set
|
||||||
# CONFIG_HERMES is not set
|
# CONFIG_HERMES is not set
|
||||||
|
# CONFIG_HID is not set
|
||||||
# CONFIG_HOSTAP_PCI is not set
|
# CONFIG_HOSTAP_PCI is not set
|
||||||
# CONFIG_HOSTAP_PLX is not set
|
# CONFIG_HOSTAP_PLX is not set
|
||||||
CONFIG_HW_HAS_PCI=y
|
CONFIG_HW_HAS_PCI=y
|
||||||
|
CONFIG_HW_RANDOM=m
|
||||||
|
CONFIG_HZ=250
|
||||||
|
# CONFIG_HZ_100 is not set
|
||||||
|
# CONFIG_HZ_128 is not set
|
||||||
|
# CONFIG_HZ_1024 is not set
|
||||||
|
CONFIG_HZ_250=y
|
||||||
|
# CONFIG_HZ_256 is not set
|
||||||
|
# CONFIG_HZ_48 is not set
|
||||||
# CONFIG_I2C is not set
|
# CONFIG_I2C is not set
|
||||||
# CONFIG_IDE is not set
|
# CONFIG_IDE is not set
|
||||||
# CONFIG_IKCONFIG is not set
|
# CONFIG_IKCONFIG is not set
|
||||||
@ -173,6 +182,7 @@ CONFIG_MIPS_L1_CACHE_SHIFT=5
|
|||||||
# CONFIG_MOMENCO_OCELOT_G is not set
|
# CONFIG_MOMENCO_OCELOT_G is not set
|
||||||
# CONFIG_MOXA_INTELLIO is not set
|
# CONFIG_MOXA_INTELLIO is not set
|
||||||
# CONFIG_MOXA_SMARTIO is not set
|
# CONFIG_MOXA_SMARTIO is not set
|
||||||
|
# CONFIG_MOXA_SMARTIO_NEW is not set
|
||||||
CONFIG_MTD=y
|
CONFIG_MTD=y
|
||||||
# CONFIG_MTD_ABSENT is not set
|
# CONFIG_MTD_ABSENT is not set
|
||||||
# CONFIG_MTD_BLKMTD is not set
|
# CONFIG_MTD_BLKMTD is not set
|
||||||
@ -251,13 +261,14 @@ CONFIG_PAGE_SIZE_4KB=y
|
|||||||
# CONFIG_PCI_LEGACY_PROC is not set
|
# CONFIG_PCI_LEGACY_PROC is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
# CONFIG_PNX8550_JBS is not set
|
# CONFIG_PNX8550_JBS is not set
|
||||||
# CONFIG_PNX8550_V2PCI is not set
|
# CONFIG_PNX8550_STB810 is not set
|
||||||
# CONFIG_PPP_MULTILINK is not set
|
# CONFIG_PPP_MULTILINK is not set
|
||||||
# CONFIG_PPP_SYNC_TTY is not set
|
# CONFIG_PPP_SYNC_TTY is not set
|
||||||
# CONFIG_PREEMPT_BKL is not set
|
# CONFIG_PREEMPT_BKL is not set
|
||||||
# CONFIG_PRISM54 is not set
|
# CONFIG_PRISM54 is not set
|
||||||
# CONFIG_PROC_KCORE is not set
|
# CONFIG_PROC_KCORE is not set
|
||||||
# CONFIG_RELAYFS_FS is not set
|
# CONFIG_RELAYFS_FS is not set
|
||||||
|
# CONFIG_RIO is not set
|
||||||
# CONFIG_ROCKETPORT is not set
|
# CONFIG_ROCKETPORT is not set
|
||||||
# CONFIG_ROMFS_FS is not set
|
# CONFIG_ROMFS_FS is not set
|
||||||
# CONFIG_RTC is not set
|
# CONFIG_RTC is not set
|
||||||
@ -312,5 +323,6 @@ CONFIG_SYS_SUPPORTS_LITTLE_ENDIAN=y
|
|||||||
# CONFIG_TOSHIBA_JMR3927 is not set
|
# CONFIG_TOSHIBA_JMR3927 is not set
|
||||||
# CONFIG_TOSHIBA_RBTX4927 is not set
|
# CONFIG_TOSHIBA_RBTX4927 is not set
|
||||||
# CONFIG_TOSHIBA_RBTX4938 is not set
|
# CONFIG_TOSHIBA_RBTX4938 is not set
|
||||||
|
# CONFIG_UNUSED_SYMBOLS is not set
|
||||||
# CONFIG_USB is not set
|
# CONFIG_USB is not set
|
||||||
# CONFIG_WATCHDOG is not set
|
# CONFIG_WATCHDOG is not set
|
||||||
|
37
target/linux/sibyte-2.6/image/Makefile
Normal file
37
target/linux/sibyte-2.6/image/Makefile
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
#
|
||||||
|
# Copyright (C) 2007 OpenWrt.org
|
||||||
|
#
|
||||||
|
# This is free software, licensed under the GNU General Public License v2.
|
||||||
|
# See /LICENSE for more information.
|
||||||
|
#
|
||||||
|
include $(TOPDIR)/rules.mk
|
||||||
|
include $(INCLUDE_DIR)/image.mk
|
||||||
|
|
||||||
|
#define Image/Prepare
|
||||||
|
# cp $(LINUX_DIR)/arch/arm/boot/zImage $(KDIR)/zImage
|
||||||
|
#endef
|
||||||
|
|
||||||
|
define Image/BuildKernel
|
||||||
|
cp $(KDIR)/vmlinux $(BIN_DIR)/openwrt-$(BOARD)-$(KERNEL)-vmlinux
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Image/Build
|
||||||
|
$(call Image/Build/$(1),$(1))
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Image/Build/jffs2-64k
|
||||||
|
dd if=$(KDIR)/root.$(1) of=$(BIN_DIR)/openwrt-$(BOARD)-$(KERNEL)-$(1).img bs=65536 conv=sync
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Image/Build/jffs2-128k
|
||||||
|
dd if=$(KDIR)/root.$(1) of=$(BIN_DIR)/openwrt-$(BOARD)-$(KERNEL)-$(1).img bs=131072 conv=sync
|
||||||
|
$(call Image/Build/slug,$(1))
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Image/Build/squashfs
|
||||||
|
$(call prepare_generic_squashfs,$(KDIR)/root.squashfs)
|
||||||
|
dd if=$(KDIR)/root.$(1) of=$(BIN_DIR)/openwrt-$(BOARD)-$(KERNEL)-$(1).img bs=131072 conv=sync
|
||||||
|
$(call Image/Build/slug,$(1))
|
||||||
|
endef
|
||||||
|
|
||||||
|
$(eval $(call BuildImage))
|
@ -1,9 +1,9 @@
|
|||||||
diff -Nur linux-2.6.17/drivers/char/Kconfig linux-2.6.17-owrt/drivers/char/Kconfig
|
diff -Nur linux-2.6.21.1/drivers/char/Kconfig linux-2.6.21.1-owrt/drivers/char/Kconfig
|
||||||
--- linux-2.6.17/drivers/char/Kconfig 2006-06-18 03:49:35.000000000 +0200
|
--- linux-2.6.21.1/drivers/char/Kconfig 2007-04-27 23:49:26.000000000 +0200
|
||||||
+++ linux-2.6.17-owrt/drivers/char/Kconfig 2006-06-18 12:41:36.000000000 +0200
|
+++ linux-2.6.21.1-owrt/drivers/char/Kconfig 2007-05-24 22:28:54.000000000 +0200
|
||||||
@@ -340,6 +340,14 @@
|
@@ -386,6 +386,14 @@
|
||||||
To compile this driver as a module, choose M here: the
|
If you have an Alchemy AU1000 processor (MIPS based) and you want
|
||||||
module will be called istallion.
|
to use a console on a serial port, say Y. Otherwise, say N.
|
||||||
|
|
||||||
+config SIBYTE_SB1250_DUART
|
+config SIBYTE_SB1250_DUART
|
||||||
+ bool "Support for BCM1xxx onchip DUART"
|
+ bool "Support for BCM1xxx onchip DUART"
|
||||||
@ -13,24 +13,24 @@ diff -Nur linux-2.6.17/drivers/char/Kconfig linux-2.6.17-owrt/drivers/char/Kconf
|
|||||||
+ bool "Console on BCM1xxx DUART"
|
+ bool "Console on BCM1xxx DUART"
|
||||||
+ depends on SIBYTE_SB1250_DUART
|
+ depends on SIBYTE_SB1250_DUART
|
||||||
+
|
+
|
||||||
config AU1000_UART
|
config SERIAL_DEC
|
||||||
bool "Enable Au1000 UART Support"
|
bool "DECstation serial support"
|
||||||
depends on SERIAL_NONSTANDARD && MIPS
|
depends on MACH_DECSTATION
|
||||||
diff -Nur linux-2.6.17/drivers/char/Makefile linux-2.6.17-owrt/drivers/char/Makefile
|
diff -Nur linux-2.6.21.1/drivers/char/Makefile linux-2.6.21.1-owrt/drivers/char/Makefile
|
||||||
--- linux-2.6.17/drivers/char/Makefile 2006-06-18 03:49:35.000000000 +0200
|
--- linux-2.6.21.1/drivers/char/Makefile 2007-04-27 23:49:26.000000000 +0200
|
||||||
+++ linux-2.6.17-owrt/drivers/char/Makefile 2006-06-18 12:42:57.000000000 +0200
|
+++ linux-2.6.21.1-owrt/drivers/char/Makefile 2007-05-24 22:32:31.000000000 +0200
|
||||||
@@ -31,6 +31,7 @@
|
@@ -32,6 +32,7 @@
|
||||||
obj-$(CONFIG_A2232) += ser_a2232.o generic_serial.o
|
|
||||||
obj-$(CONFIG_ATARI_DSP56K) += dsp56k.o
|
obj-$(CONFIG_ATARI_DSP56K) += dsp56k.o
|
||||||
obj-$(CONFIG_MOXA_SMARTIO) += mxser.o
|
obj-$(CONFIG_MOXA_SMARTIO) += mxser.o
|
||||||
|
obj-$(CONFIG_MOXA_SMARTIO_NEW) += mxser_new.o
|
||||||
+obj-$(CONFIG_SIBYTE_SB1250_DUART) += sb1250_duart.o
|
+obj-$(CONFIG_SIBYTE_SB1250_DUART) += sb1250_duart.o
|
||||||
obj-$(CONFIG_COMPUTONE) += ip2/
|
obj-$(CONFIG_COMPUTONE) += ip2/
|
||||||
obj-$(CONFIG_RISCOM8) += riscom8.o
|
obj-$(CONFIG_RISCOM8) += riscom8.o
|
||||||
obj-$(CONFIG_ISI) += isicom.o
|
obj-$(CONFIG_ISI) += isicom.o
|
||||||
diff -Nur linux-2.6.17/drivers/char/sb1250_duart.c linux-2.6.17-owrt/drivers/char/sb1250_duart.c
|
diff -Nur linux-2.6.21.1/drivers/char/sb1250_duart.c linux-2.6.21.1-owrt/drivers/char/sb1250_duart.c
|
||||||
--- linux-2.6.17/drivers/char/sb1250_duart.c 1970-01-01 01:00:00.000000000 +0100
|
--- linux-2.6.21.1/drivers/char/sb1250_duart.c 1970-01-01 01:00:00.000000000 +0100
|
||||||
+++ linux-2.6.17-owrt/drivers/char/sb1250_duart.c 2006-06-18 12:41:36.000000000 +0200
|
+++ linux-2.6.21.1-owrt/drivers/char/sb1250_duart.c 2007-05-24 22:10:12.000000000 +0200
|
||||||
@@ -0,0 +1,911 @@
|
@@ -0,0 +1,979 @@
|
||||||
+/*
|
+/*
|
||||||
+ * Copyright (C) 2000,2001,2002,2003,2004 Broadcom Corporation
|
+ * Copyright (C) 2000,2001,2002,2003,2004 Broadcom Corporation
|
||||||
+ *
|
+ *
|
||||||
@ -54,7 +54,6 @@ diff -Nur linux-2.6.17/drivers/char/sb1250_duart.c linux-2.6.17-owrt/drivers/cha
|
|||||||
+ * running in asynchronous mode. Also, support for doing a serial console
|
+ * running in asynchronous mode. Also, support for doing a serial console
|
||||||
+ * on one of those ports
|
+ * on one of those ports
|
||||||
+ */
|
+ */
|
||||||
+#include <linux/autoconf.h>
|
|
||||||
+#include <linux/types.h>
|
+#include <linux/types.h>
|
||||||
+#include <linux/kernel.h>
|
+#include <linux/kernel.h>
|
||||||
+#include <linux/serial.h>
|
+#include <linux/serial.h>
|
||||||
@ -115,6 +114,20 @@ diff -Nur linux-2.6.17/drivers/char/sb1250_duart.c linux-2.6.17-owrt/drivers/cha
|
|||||||
+EXPORT_SYMBOL(sb1250_duart_present);
|
+EXPORT_SYMBOL(sb1250_duart_present);
|
||||||
+
|
+
|
||||||
+/*
|
+/*
|
||||||
|
+ * In bug 1956, we get glitches that can mess up uart registers. This
|
||||||
|
+ * "read-mode-reg after any register access" is an accepted workaround.
|
||||||
|
+ */
|
||||||
|
+#if SIBYTE_1956_WAR
|
||||||
|
+# define SB1_SER1956_WAR { \
|
||||||
|
+ u32 ignore; \
|
||||||
|
+ ignore = csr_in32(uart_states[line].mode_1); \
|
||||||
|
+ ignore = csr_in32(uart_states[line].mode_2); \
|
||||||
|
+ }
|
||||||
|
+#else
|
||||||
|
+# define SB1_SER1956_WAR
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
+/*
|
||||||
+ * Still not sure what the termios structures set up here are for,
|
+ * Still not sure what the termios structures set up here are for,
|
||||||
+ * but we have to supply pointers to them to register the tty driver
|
+ * but we have to supply pointers to them to register the tty driver
|
||||||
+ */
|
+ */
|
||||||
@ -137,15 +150,16 @@ diff -Nur linux-2.6.17/drivers/char/sb1250_duart.c linux-2.6.17-owrt/drivers/cha
|
|||||||
+ unsigned int last_cflags;
|
+ unsigned int last_cflags;
|
||||||
+ unsigned long flags;
|
+ unsigned long flags;
|
||||||
+ struct tty_struct *tty;
|
+ struct tty_struct *tty;
|
||||||
|
+
|
||||||
+ /* CSR addresses */
|
+ /* CSR addresses */
|
||||||
+ volatile u32 *status;
|
+ unsigned int *status;
|
||||||
+ volatile u32 *imr;
|
+ unsigned int *imr;
|
||||||
+ volatile u32 *tx_hold;
|
+ unsigned int *tx_hold;
|
||||||
+ volatile u32 *rx_hold;
|
+ unsigned int *rx_hold;
|
||||||
+ volatile u32 *mode_1;
|
+ unsigned int *mode_1;
|
||||||
+ volatile u32 *mode_2;
|
+ unsigned int *mode_2;
|
||||||
+ volatile u32 *clk_sel;
|
+ unsigned int *clk_sel;
|
||||||
+ volatile u32 *cmd;
|
+ unsigned int *cmd;
|
||||||
+} uart_state_t;
|
+} uart_state_t;
|
||||||
+
|
+
|
||||||
+static uart_state_t uart_states[DUART_MAX_LINE];
|
+static uart_state_t uart_states[DUART_MAX_LINE];
|
||||||
@ -154,30 +168,17 @@ diff -Nur linux-2.6.17/drivers/char/sb1250_duart.c linux-2.6.17-owrt/drivers/cha
|
|||||||
+ * Inline functions local to this module
|
+ * Inline functions local to this module
|
||||||
+ */
|
+ */
|
||||||
+
|
+
|
||||||
+/*
|
|
||||||
+ * In bug 1956, we get glitches that can mess up uart registers. This
|
|
||||||
+ * "write-mode-1 after any register access" is the accepted
|
|
||||||
+ * workaround.
|
|
||||||
+ */
|
|
||||||
+#if SIBYTE_1956_WAR
|
|
||||||
+static unsigned int last_mode1[DUART_MAX_LINE];
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+static inline u32 READ_SERCSR(volatile u32 *addr, int line)
|
+static inline u32 READ_SERCSR(volatile u32 *addr, int line)
|
||||||
+{
|
+{
|
||||||
+ u32 val = csr_in32(addr);
|
+ u32 val = csr_in32(addr);
|
||||||
+#if SIBYTE_1956_WAR
|
+ SB1_SER1956_WAR;
|
||||||
+ csr_out32(last_mode1[line], uart_states[line].mode_1);
|
|
||||||
+#endif
|
|
||||||
+ return val;
|
+ return val;
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
+static inline void WRITE_SERCSR(u32 val, volatile u32 *addr, int line)
|
+static inline void WRITE_SERCSR(u32 val, volatile u32 *addr, int line)
|
||||||
+{
|
+{
|
||||||
+ csr_out32(val, addr);
|
+ csr_out32(val, addr);
|
||||||
+#if SIBYTE_1956_WAR
|
+ SB1_SER1956_WAR;
|
||||||
+ csr_out32(last_mode1[line], uart_states[line].mode_1);
|
|
||||||
+#endif
|
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
+static void init_duart_port(uart_state_t *port, int line)
|
+static void init_duart_port(uart_state_t *port, int line)
|
||||||
@ -192,6 +193,8 @@ diff -Nur linux-2.6.17/drivers/char/sb1250_duart.c linux-2.6.17-owrt/drivers/cha
|
|||||||
+ port->mode_2 = IOADDR(UNIT_CHANREG(line, R_DUART_MODE_REG_2));
|
+ port->mode_2 = IOADDR(UNIT_CHANREG(line, R_DUART_MODE_REG_2));
|
||||||
+ port->clk_sel = IOADDR(UNIT_CHANREG(line, R_DUART_CLK_SEL));
|
+ port->clk_sel = IOADDR(UNIT_CHANREG(line, R_DUART_CLK_SEL));
|
||||||
+ port->cmd = IOADDR(UNIT_CHANREG(line, R_DUART_CMD));
|
+ port->cmd = IOADDR(UNIT_CHANREG(line, R_DUART_CMD));
|
||||||
|
+ port->last_cflags = DEFAULT_CFLAGS;
|
||||||
|
+ spin_lock_init(&port->outp_lock);
|
||||||
+ port->flags |= DUART_INITIALIZED;
|
+ port->flags |= DUART_INITIALIZED;
|
||||||
+ }
|
+ }
|
||||||
+}
|
+}
|
||||||
@ -350,7 +353,8 @@ diff -Nur linux-2.6.17/drivers/char/sb1250_duart.c linux-2.6.17-owrt/drivers/cha
|
|||||||
+ us = tty->driver_data;
|
+ us = tty->driver_data;
|
||||||
+ if (!us) return 0;
|
+ if (!us) return 0;
|
||||||
+
|
+
|
||||||
+ pr_debug("duart_write called for %i chars by %i (%s)\n", count, current->pid, current->comm);
|
+ pr_debug("duart_write called for %i chars by %i (%s)\n", count,
|
||||||
|
+ current->pid, current->comm);
|
||||||
+
|
+
|
||||||
+ spin_lock_irqsave(&us->outp_lock, flags);
|
+ spin_lock_irqsave(&us->outp_lock, flags);
|
||||||
+
|
+
|
||||||
@ -413,11 +417,13 @@ diff -Nur linux-2.6.17/drivers/char/sb1250_duart.c linux-2.6.17-owrt/drivers/cha
|
|||||||
+{
|
+{
|
||||||
+ uart_state_t *port;
|
+ uart_state_t *port;
|
||||||
+
|
+
|
||||||
+ if (!tty) return;
|
+ if (!tty)
|
||||||
|
+ return;
|
||||||
+
|
+
|
||||||
+ port = tty->driver_data;
|
+ port = tty->driver_data;
|
||||||
+
|
+
|
||||||
+ if (!port) return;
|
+ if (!port)
|
||||||
|
+ return;
|
||||||
+
|
+
|
||||||
+ if (port->outp_count <= 0 || tty->stopped || tty->hw_stopped) {
|
+ if (port->outp_count <= 0 || tty->stopped || tty->hw_stopped) {
|
||||||
+ return;
|
+ return;
|
||||||
@ -472,8 +478,8 @@ diff -Nur linux-2.6.17/drivers/char/sb1250_duart.c linux-2.6.17-owrt/drivers/cha
|
|||||||
+ mode_reg1 |= V_DUART_BITS_PER_CHAR_7;
|
+ mode_reg1 |= V_DUART_BITS_PER_CHAR_7;
|
||||||
+
|
+
|
||||||
+ default:
|
+ default:
|
||||||
+ /* We don't handle CS5 or CS6...is there a way we're supposed to flag this?
|
+ /* We don't handle CS5 or CS6...is there a way we're supposed to
|
||||||
+ right now we just force them to CS8 */
|
+ * flag this? right now we just force them to CS8 */
|
||||||
+ mode_reg1 |= 0x0;
|
+ mode_reg1 |= 0x0;
|
||||||
+ break;
|
+ break;
|
||||||
+ }
|
+ }
|
||||||
@ -497,10 +503,10 @@ diff -Nur linux-2.6.17/drivers/char/sb1250_duart.c linux-2.6.17-owrt/drivers/cha
|
|||||||
+ case B1800: clk_divisor = 2776; break;
|
+ case B1800: clk_divisor = 2776; break;
|
||||||
+ case B2400: clk_divisor = 2082; break;
|
+ case B2400: clk_divisor = 2082; break;
|
||||||
+ case B4800: clk_divisor = 1040; break;
|
+ case B4800: clk_divisor = 1040; break;
|
||||||
+ default:
|
|
||||||
+ case B9600: clk_divisor = 519; break;
|
+ case B9600: clk_divisor = 519; break;
|
||||||
+ case B19200: clk_divisor = 259; break;
|
+ case B19200: clk_divisor = 259; break;
|
||||||
+ case B38400: clk_divisor = 129; break;
|
+ case B38400: clk_divisor = 129; break;
|
||||||
|
+ default:
|
||||||
+ case B57600: clk_divisor = 85; break;
|
+ case B57600: clk_divisor = 85; break;
|
||||||
+ case B115200: clk_divisor = 42; break;
|
+ case B115200: clk_divisor = 42; break;
|
||||||
+ }
|
+ }
|
||||||
@ -516,25 +522,26 @@ diff -Nur linux-2.6.17/drivers/char/sb1250_duart.c linux-2.6.17-owrt/drivers/cha
|
|||||||
+{
|
+{
|
||||||
+ uart_state_t *us = (uart_state_t *) tty->driver_data;
|
+ uart_state_t *us = (uart_state_t *) tty->driver_data;
|
||||||
+
|
+
|
||||||
+ pr_debug("duart_set_termios called by %i (%s)\n", current->pid, current->comm);
|
+ pr_debug("duart_set_termios called by %i (%s)\n", current->pid,
|
||||||
|
+ current->comm);
|
||||||
+ if (old && tty->termios->c_cflag == old->c_cflag)
|
+ if (old && tty->termios->c_cflag == old->c_cflag)
|
||||||
+ return;
|
+ return;
|
||||||
+ duart_set_cflag(us->line, tty->termios->c_cflag);
|
+ duart_set_cflag(us->line, tty->termios->c_cflag);
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
+static int get_serial_info(uart_state_t *us, struct serial_struct * retinfo) {
|
+static int get_serial_info(uart_state_t *us, struct serial_struct * retinfo)
|
||||||
+
|
+{
|
||||||
+ struct serial_struct tmp;
|
+ struct serial_struct tmp;
|
||||||
+
|
+
|
||||||
+ memset(&tmp, 0, sizeof(tmp));
|
+ memset(&tmp, 0, sizeof(tmp));
|
||||||
+
|
+
|
||||||
+ tmp.type=PORT_SB1250;
|
+ tmp.type = PORT_SB1250;
|
||||||
+ tmp.line=us->line;
|
+ tmp.line = us->line;
|
||||||
+ tmp.port=UNIT_CHANREG(tmp.line,0);
|
+ tmp.port = UNIT_CHANREG(tmp.line,0);
|
||||||
+ tmp.irq=UNIT_INT(tmp.line);
|
+ tmp.irq = UNIT_INT(tmp.line);
|
||||||
+ tmp.xmit_fifo_size=16; /* fixed by hw */
|
+ tmp.xmit_fifo_size = 16; /* fixed by hw */
|
||||||
+ tmp.baud_base=5000000;
|
+ tmp.baud_base = 5000000;
|
||||||
+ tmp.io_type=SERIAL_IO_MEM;
|
+ tmp.io_type = SERIAL_IO_MEM;
|
||||||
+
|
+
|
||||||
+ if (copy_to_user(retinfo,&tmp,sizeof(*retinfo)))
|
+ if (copy_to_user(retinfo,&tmp,sizeof(*retinfo)))
|
||||||
+ return -EFAULT;
|
+ return -EFAULT;
|
||||||
@ -622,10 +629,10 @@ diff -Nur linux-2.6.17/drivers/char/sb1250_duart.c linux-2.6.17-owrt/drivers/cha
|
|||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
+/* Not sure on the semantics of this; are we supposed to wait until the stuff
|
+/* Not sure on the semantics of this; are we supposed to wait until the stuff
|
||||||
+ already in the hardware FIFO drains, or are we supposed to wait until
|
+ * already in the hardware FIFO drains, or are we supposed to wait until
|
||||||
+ we've drained the output buffer, too? I'm assuming the former, 'cause thats
|
+ * we've drained the output buffer, too? I'm assuming the former, 'cause thats
|
||||||
+ what the other drivers seem to assume
|
+ * what the other drivers seem to assume
|
||||||
+*/
|
+ */
|
||||||
+
|
+
|
||||||
+static void duart_wait_until_sent(struct tty_struct *tty, int timeout)
|
+static void duart_wait_until_sent(struct tty_struct *tty, int timeout)
|
||||||
+{
|
+{
|
||||||
@ -672,8 +679,8 @@ diff -Nur linux-2.6.17/drivers/char/sb1250_duart.c linux-2.6.17-owrt/drivers/cha
|
|||||||
+ return -ENODEV;
|
+ return -ENODEV;
|
||||||
+
|
+
|
||||||
+ pr_debug("duart_open called by %i (%s), tty is %p, rw is %p, ww is %p\n",
|
+ pr_debug("duart_open called by %i (%s), tty is %p, rw is %p, ww is %p\n",
|
||||||
+ current->pid, current->comm, tty, tty->read_wait,
|
+ current->pid, current->comm, tty, (void *)&tty->read_wait,
|
||||||
+ tty->write_wait);
|
+ (void *)&tty->write_wait);
|
||||||
+
|
+
|
||||||
+ us = uart_states + line;
|
+ us = uart_states + line;
|
||||||
+ tty->driver_data = us;
|
+ tty->driver_data = us;
|
||||||
@ -796,7 +803,6 @@ diff -Nur linux-2.6.17/drivers/char/sb1250_duart.c linux-2.6.17-owrt/drivers/cha
|
|||||||
+
|
+
|
||||||
+ sb1250_duart_driver->owner = THIS_MODULE;
|
+ sb1250_duart_driver->owner = THIS_MODULE;
|
||||||
+ sb1250_duart_driver->name = "duart";
|
+ sb1250_duart_driver->name = "duart";
|
||||||
+ sb1250_duart_driver->devfs_name = "duart/";
|
|
||||||
+ sb1250_duart_driver->major = TTY_MAJOR;
|
+ sb1250_duart_driver->major = TTY_MAJOR;
|
||||||
+ sb1250_duart_driver->minor_start = SB1250_DUART_MINOR_BASE;
|
+ sb1250_duart_driver->minor_start = SB1250_DUART_MINOR_BASE;
|
||||||
+ sb1250_duart_driver->type = TTY_DRIVER_TYPE_SERIAL;
|
+ sb1250_duart_driver->type = TTY_DRIVER_TYPE_SERIAL;
|
||||||
@ -805,21 +811,29 @@ diff -Nur linux-2.6.17/drivers/char/sb1250_duart.c linux-2.6.17-owrt/drivers/cha
|
|||||||
+ sb1250_duart_driver->flags = TTY_DRIVER_REAL_RAW;
|
+ sb1250_duart_driver->flags = TTY_DRIVER_REAL_RAW;
|
||||||
+ tty_set_operations(sb1250_duart_driver, &duart_ops);
|
+ tty_set_operations(sb1250_duart_driver, &duart_ops);
|
||||||
+
|
+
|
||||||
+ for (i=0; i<DUART_MAX_LINE; i++) {
|
+ for (i = 0; i < DUART_MAX_LINE; i++) {
|
||||||
+ uart_state_t *port = uart_states + i;
|
+ uart_state_t *port = uart_states + i;
|
||||||
+
|
+
|
||||||
+ if (!sb1250_duart_present[i])
|
+ if (!sb1250_duart_present[i])
|
||||||
+ continue;
|
+ continue;
|
||||||
+
|
+
|
||||||
+ init_duart_port(port, i);
|
+ init_duart_port(port, i);
|
||||||
+ spin_lock_init(&port->outp_lock);
|
|
||||||
+ duart_mask_ints(i, M_DUART_IMR_ALL);
|
+ duart_mask_ints(i, M_DUART_IMR_ALL);
|
||||||
+ if (request_irq(UNIT_INT(i), duart_int, 0, "uart", port)) {
|
+ if (request_irq(UNIT_INT(i), duart_int, 0, "uart", port)) {
|
||||||
+ panic("Couldn't get uart0 interrupt line");
|
+ panic("Couldn't get uart0 interrupt line");
|
||||||
+ }
|
+ }
|
||||||
+ __raw_writeq(M_DUART_RX_EN|M_DUART_TX_EN,
|
+ /*
|
||||||
+ IOADDR(UNIT_CHANREG(i, R_DUART_CMD)));
|
+ * this generic write to a register does not implement the 1956
|
||||||
+ duart_set_cflag(i, DEFAULT_CFLAGS);
|
+ * WAR and sometimes output gets corrupted afterwards,
|
||||||
|
+ * especially if the port was in use as a console.
|
||||||
|
+ */
|
||||||
|
+ __raw_writel(M_DUART_RX_EN|M_DUART_TX_EN, port->cmd);
|
||||||
|
+
|
||||||
|
+ /*
|
||||||
|
+ * we should really check to see if it's registered as a console
|
||||||
|
+ * before trashing those settings
|
||||||
|
+ */
|
||||||
|
+ duart_set_cflag(i, port->last_cflags);
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ /* Interrupts are now active, our ISR can be called. */
|
+ /* Interrupts are now active, our ISR can be called. */
|
||||||
@ -842,7 +856,7 @@ diff -Nur linux-2.6.17/drivers/char/sb1250_duart.c linux-2.6.17-owrt/drivers/cha
|
|||||||
+ tty_unregister_driver(sb1250_duart_driver);
|
+ tty_unregister_driver(sb1250_duart_driver);
|
||||||
+ put_tty_driver(sb1250_duart_driver);
|
+ put_tty_driver(sb1250_duart_driver);
|
||||||
+
|
+
|
||||||
+ for (i=0; i<DUART_MAX_LINE; i++) {
|
+ for (i = 0; i < DUART_MAX_LINE; i++) {
|
||||||
+ if (!sb1250_duart_present[i])
|
+ if (!sb1250_duart_present[i])
|
||||||
+ continue;
|
+ continue;
|
||||||
+ free_irq(UNIT_INT(i), &uart_states[i]);
|
+ free_irq(UNIT_INT(i), &uart_states[i]);
|
||||||
@ -902,25 +916,78 @@ diff -Nur linux-2.6.17/drivers/char/sb1250_duart.c linux-2.6.17-owrt/drivers/cha
|
|||||||
+
|
+
|
||||||
+ sb1250_duart_init_present_lines();
|
+ sb1250_duart_init_present_lines();
|
||||||
+
|
+
|
||||||
+ for (i=0; i<DUART_MAX_LINE; i++) {
|
+ for (i = 0; i < DUART_MAX_LINE; i++) {
|
||||||
+ uart_state_t *port = uart_states + i;
|
+ uart_state_t *port = uart_states + i;
|
||||||
|
+ u32 cflags = DEFAULT_CFLAGS;
|
||||||
+
|
+
|
||||||
+ if (!sb1250_duart_present[i])
|
+ if (!sb1250_duart_present[i])
|
||||||
+ continue;
|
+ continue;
|
||||||
+
|
+
|
||||||
+ init_duart_port(port, i);
|
+ init_duart_port(port, i);
|
||||||
+#if SIBYTE_1956_WAR
|
+ if (str) {
|
||||||
+ last_mode1[i] = V_DUART_PARITY_MODE_NONE|V_DUART_BITS_PER_CHAR_8;
|
+ int speed;
|
||||||
+#endif
|
+ char par = 'n';
|
||||||
+ WRITE_SERCSR(V_DUART_PARITY_MODE_NONE|V_DUART_BITS_PER_CHAR_8,
|
+ int cbits = 8;
|
||||||
+ port->mode_1, i);
|
+
|
||||||
+ WRITE_SERCSR(M_DUART_STOP_BIT_LEN_1,
|
+ cflags = 0;
|
||||||
+ port->mode_2, i);
|
+
|
||||||
+ WRITE_SERCSR(V_DUART_BAUD_RATE(115200),
|
+ /*
|
||||||
+ port->clk_sel, i);
|
+ * format is in Documentation/serial_console.txt
|
||||||
+ WRITE_SERCSR(M_DUART_RX_EN|M_DUART_TX_EN,
|
+ */
|
||||||
+ port->cmd, i);
|
+ sscanf(str, "%d%c%d", &speed, &par, &cbits);
|
||||||
|
+
|
||||||
|
+ switch (speed) {
|
||||||
|
+ case 200:
|
||||||
|
+ case 300:
|
||||||
|
+ case 1200:
|
||||||
|
+ cflags |= B1200;
|
||||||
|
+ break;
|
||||||
|
+ case 1800:
|
||||||
|
+ cflags |= B1800;
|
||||||
|
+ break;
|
||||||
|
+ case 2400:
|
||||||
|
+ cflags |= B2400;
|
||||||
|
+ break;
|
||||||
|
+ case 4800:
|
||||||
|
+ cflags |= B4800;
|
||||||
|
+ break;
|
||||||
|
+ default:
|
||||||
|
+ case 9600:
|
||||||
|
+ cflags |= B9600;
|
||||||
|
+ break;
|
||||||
|
+ case 19200:
|
||||||
|
+ cflags |= B19200;
|
||||||
|
+ break;
|
||||||
|
+ case 38400:
|
||||||
|
+ cflags |= B38400;
|
||||||
|
+ break;
|
||||||
|
+ case 57600:
|
||||||
|
+ cflags |= B57600;
|
||||||
|
+ break;
|
||||||
|
+ case 115200:
|
||||||
|
+ cflags |= B115200;
|
||||||
|
+ break;
|
||||||
+ }
|
+ }
|
||||||
|
+ switch (par) {
|
||||||
|
+ case 'o':
|
||||||
|
+ cflags |= PARODD;
|
||||||
|
+ case 'e':
|
||||||
|
+ cflags |= PARENB;
|
||||||
|
+ }
|
||||||
|
+ switch (cbits) {
|
||||||
|
+ default: // we only do 7 or 8
|
||||||
|
+ case 8:
|
||||||
|
+ cflags |= CS8;
|
||||||
|
+ break;
|
||||||
|
+ case 7:
|
||||||
|
+ cflags |= CS7;
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ duart_set_cflag(i, cflags);
|
||||||
|
+ WRITE_SERCSR(M_DUART_RX_EN | M_DUART_TX_EN, port->cmd, i);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
+ return 0;
|
+ return 0;
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
@ -935,6 +1002,7 @@ diff -Nur linux-2.6.17/drivers/char/sb1250_duart.c linux-2.6.17-owrt/drivers/cha
|
|||||||
+
|
+
|
||||||
+static int __init sb1250_serial_console_init(void)
|
+static int __init sb1250_serial_console_init(void)
|
||||||
+{
|
+{
|
||||||
|
+ //add_preferred_console("duart", 0, "57600n8");
|
||||||
+ register_console(&sb1250_ser_cons);
|
+ register_console(&sb1250_ser_cons);
|
||||||
+ return 0;
|
+ return 0;
|
||||||
+}
|
+}
|
||||||
@ -942,9 +1010,9 @@ diff -Nur linux-2.6.17/drivers/char/sb1250_duart.c linux-2.6.17-owrt/drivers/cha
|
|||||||
+console_initcall(sb1250_serial_console_init);
|
+console_initcall(sb1250_serial_console_init);
|
||||||
+
|
+
|
||||||
+#endif /* CONFIG_SIBYTE_SB1250_DUART_CONSOLE */
|
+#endif /* CONFIG_SIBYTE_SB1250_DUART_CONSOLE */
|
||||||
diff -Nur linux-2.6.17/include/linux/serial.h linux-2.6.17-owrt/include/linux/serial.h
|
diff -Nur linux-2.6.21.1/include/linux/serial.h linux-2.6.21.1-owrt/include/linux/serial.h
|
||||||
--- linux-2.6.17/include/linux/serial.h 2006-06-18 03:49:35.000000000 +0200
|
--- linux-2.6.21.1/include/linux/serial.h 2007-04-27 23:49:26.000000000 +0200
|
||||||
+++ linux-2.6.17-owrt/include/linux/serial.h 2006-06-18 12:41:36.000000000 +0200
|
+++ linux-2.6.21.1-owrt/include/linux/serial.h 2007-05-24 22:10:29.000000000 +0200
|
||||||
@@ -76,7 +76,8 @@
|
@@ -76,7 +76,8 @@
|
||||||
#define PORT_16654 11
|
#define PORT_16654 11
|
||||||
#define PORT_16850 12
|
#define PORT_16850 12
|
||||||
|
@ -1,17 +0,0 @@
|
|||||||
--- linux-2.6.16.4/arch/mips/sibyte/sb1250/setup.c 2006-04-21 16:16:18.000000000 -0700
|
|
||||||
+++ linux-2.6.16.4/arch/mips/sibyte/sb1250/setup.c 2006-04-21 16:15:22.000000000 -0700
|
|
||||||
@@ -140,6 +140,14 @@
|
|
||||||
periph_rev = 3;
|
|
||||||
pass_str = "A2";
|
|
||||||
break;
|
|
||||||
+ case K_SYS_REVISION_BCM112x_A3:
|
|
||||||
+ periph_rev = 3;
|
|
||||||
+ pass_str = "A3";
|
|
||||||
+ break;
|
|
||||||
+ case K_SYS_REVISION_BCM112x_A4:
|
|
||||||
+ periph_rev = 3;
|
|
||||||
+ pass_str = "A4";
|
|
||||||
+ break;
|
|
||||||
default:
|
|
||||||
prom_printf("Unknown %s rev %x\n", soc_str, soc_pass);
|
|
||||||
ret = 1;
|
|
Loading…
Reference in New Issue
Block a user