Revert "armv6 dcc tty driver"
authorAmit Pundir <amit.pundir@linaro.org>
Thu, 26 May 2016 07:28:21 +0000 (12:58 +0530)
committerAmit Pundir <amit.pundir@linaro.org>
Thu, 16 Jun 2016 08:14:10 +0000 (13:44 +0530)
This reverts commit 97312429c2bef1bf8055d01b35cf12028f60ef62.

Drop AOSP's "armv6 dcc tty driver" in favor of upstream DCC driver for
ARMv6/v7 16c63f8ea49c (drivers: char: hvc: add arm JTAG DCC console
support) and for ARMv8 4cad4c57e0b3 (ARM64: TTY: hvc_dcc: Add support
for ARM64 dcc).

Change-Id: I0ca651ef2d854fff03cee070524fe1e3971b6d8f
Signed-off-by: Amit Pundir <amit.pundir@linaro.org>
drivers/char/Kconfig
drivers/char/Makefile
drivers/char/dcc_tty.c [deleted file]

index 29dbe0fbdf8b6c97fcc090c39493a97ebb034cd7..a043107da2af775d567126174107c23ff89a5afb 100644 (file)
@@ -588,10 +588,6 @@ config DEVPORT
        depends on ISA || PCI
        default y
 
-config DCC_TTY
-       tristate "DCC tty driver"
-       depends on ARM
-
 source "drivers/s390/char/Kconfig"
 
 config TILE_SROM
index 7671551e31968d47553541d042982078b06ead32..d8a7579300d2df1112446c3a69a29713fd2af163 100644 (file)
@@ -53,7 +53,6 @@ obj-$(CONFIG_PCMCIA)          += pcmcia/
 obj-$(CONFIG_HANGCHECK_TIMER)  += hangcheck-timer.o
 obj-$(CONFIG_TCG_TPM)          += tpm/
 
-obj-$(CONFIG_DCC_TTY)          += dcc_tty.o
 obj-$(CONFIG_PS3_FLASH)                += ps3flash.o
 
 obj-$(CONFIG_JS_RTC)           += js-rtc.o
diff --git a/drivers/char/dcc_tty.c b/drivers/char/dcc_tty.c
deleted file mode 100644 (file)
index a787acc..0000000
+++ /dev/null
@@ -1,326 +0,0 @@
-/* drivers/char/dcc_tty.c
- *
- * Copyright (C) 2007 Google, Inc.
- *
- * This software is licensed under the terms of the GNU General Public
- * License version 2, as published by the Free Software Foundation, and
- * may be copied, distributed, and modified under those terms.
- *
- * 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.
- *
- */
-
-#include <linux/module.h>
-#include <linux/platform_device.h>
-#include <linux/delay.h>
-#include <linux/console.h>
-#include <linux/hrtimer.h>
-#include <linux/tty.h>
-#include <linux/tty_driver.h>
-#include <linux/tty_flip.h>
-
-MODULE_DESCRIPTION("DCC TTY Driver");
-MODULE_LICENSE("GPL");
-MODULE_VERSION("1.0");
-
-static spinlock_t g_dcc_tty_lock = SPIN_LOCK_UNLOCKED;
-static struct hrtimer g_dcc_timer;
-static char g_dcc_buffer[16];
-static int g_dcc_buffer_head;
-static int g_dcc_buffer_count;
-static unsigned g_dcc_write_delay_usecs = 1;
-static struct tty_driver *g_dcc_tty_driver;
-static struct tty_struct *g_dcc_tty;
-static int g_dcc_tty_open_count;
-
-static void dcc_poll_locked(void)
-{
-       char ch;
-       int rch;
-       int written;
-
-       while (g_dcc_buffer_count) {
-               ch = g_dcc_buffer[g_dcc_buffer_head];
-               asm(
-                       "mrc 14, 0, r15, c0, c1, 0\n"
-                       "mcrcc 14, 0, %1, c0, c5, 0\n"
-                       "movcc %0, #1\n"
-                       "movcs %0, #0\n"
-                       : "=r" (written)
-                       : "r" (ch)
-               );
-               if (written) {
-                       if (ch == '\n')
-                               g_dcc_buffer[g_dcc_buffer_head] = '\r';
-                       else {
-                               g_dcc_buffer_head = (g_dcc_buffer_head + 1) % ARRAY_SIZE(g_dcc_buffer);
-                               g_dcc_buffer_count--;
-                               if (g_dcc_tty)
-                                       tty_wakeup(g_dcc_tty);
-                       }
-                       g_dcc_write_delay_usecs = 1;
-               } else {
-                       if (g_dcc_write_delay_usecs > 0x100)
-                               break;
-                       g_dcc_write_delay_usecs <<= 1;
-                       udelay(g_dcc_write_delay_usecs);
-               }
-       }
-
-       if (g_dcc_tty && !test_bit(TTY_THROTTLED, &g_dcc_tty->flags)) {
-               asm(
-                       "mrc 14, 0, %0, c0, c1, 0\n"
-                       "tst %0, #(1 << 30)\n"
-                       "moveq %0, #-1\n"
-                       "mrcne 14, 0, %0, c0, c5, 0\n"
-                       : "=r" (rch)
-               );
-               if (rch >= 0) {
-                       ch = rch;
-                       tty_insert_flip_string(g_dcc_tty, &ch, 1);
-                       tty_flip_buffer_push(g_dcc_tty);
-               }
-       }
-
-
-       if (g_dcc_buffer_count)
-               hrtimer_start(&g_dcc_timer, ktime_set(0, g_dcc_write_delay_usecs * NSEC_PER_USEC), HRTIMER_MODE_REL);
-       else
-               hrtimer_start(&g_dcc_timer, ktime_set(0, 20 * NSEC_PER_MSEC), HRTIMER_MODE_REL);
-}
-
-static int dcc_tty_open(struct tty_struct * tty, struct file * filp)
-{
-       int ret;
-       unsigned long irq_flags;
-
-       spin_lock_irqsave(&g_dcc_tty_lock, irq_flags);
-       if (g_dcc_tty == NULL || g_dcc_tty == tty) {
-               g_dcc_tty = tty;
-               g_dcc_tty_open_count++;
-               ret = 0;
-       } else
-               ret = -EBUSY;
-       spin_unlock_irqrestore(&g_dcc_tty_lock, irq_flags);
-
-       printk("dcc_tty_open, tty %p, f_flags %x, returned %d\n", tty, filp->f_flags, ret);
-
-       return ret;
-}
-
-static void dcc_tty_close(struct tty_struct * tty, struct file * filp)
-{
-       printk("dcc_tty_close, tty %p, f_flags %x\n", tty, filp->f_flags);
-       if (g_dcc_tty == tty) {
-               if (--g_dcc_tty_open_count == 0)
-                       g_dcc_tty = NULL;
-       }
-}
-
-static int dcc_write(const unsigned char *buf_start, int count)
-{
-       const unsigned char *buf = buf_start;
-       unsigned long irq_flags;
-       int copy_len;
-       int space_left;
-       int tail;
-
-       if (count < 1)
-               return 0;
-
-       spin_lock_irqsave(&g_dcc_tty_lock, irq_flags);
-       do {
-               tail = (g_dcc_buffer_head + g_dcc_buffer_count) % ARRAY_SIZE(g_dcc_buffer);
-               copy_len = ARRAY_SIZE(g_dcc_buffer) - tail;
-               space_left = ARRAY_SIZE(g_dcc_buffer) - g_dcc_buffer_count;
-               if (copy_len > space_left)
-                       copy_len = space_left;
-               if (copy_len > count)
-                       copy_len = count;
-               memcpy(&g_dcc_buffer[tail], buf, copy_len);
-               g_dcc_buffer_count += copy_len;
-               buf += copy_len;
-               count -= copy_len;
-               if (copy_len < count && copy_len < space_left) {
-                       space_left -= copy_len;
-                       copy_len = count;
-                       if (copy_len > space_left) {
-                               copy_len = space_left;
-                       }
-                       memcpy(g_dcc_buffer, buf, copy_len);
-                       buf += copy_len;
-                       count -= copy_len;
-                       g_dcc_buffer_count += copy_len;
-               }
-               dcc_poll_locked();
-               space_left = ARRAY_SIZE(g_dcc_buffer) - g_dcc_buffer_count;
-       } while(count && space_left);
-       spin_unlock_irqrestore(&g_dcc_tty_lock, irq_flags);
-       return buf - buf_start;
-}
-
-static int dcc_tty_write(struct tty_struct * tty, const unsigned char *buf, int count)
-{
-       int ret;
-       /* printk("dcc_tty_write %p, %d\n", buf, count); */
-       ret = dcc_write(buf, count);
-       if (ret != count)
-               printk("dcc_tty_write %p, %d, returned %d\n", buf, count, ret);
-       return ret;
-}
-
-static int dcc_tty_write_room(struct tty_struct *tty)
-{
-       int space_left;
-       unsigned long irq_flags;
-
-       spin_lock_irqsave(&g_dcc_tty_lock, irq_flags);
-       space_left = ARRAY_SIZE(g_dcc_buffer) - g_dcc_buffer_count;
-       spin_unlock_irqrestore(&g_dcc_tty_lock, irq_flags);
-       return space_left;
-}
-
-static int dcc_tty_chars_in_buffer(struct tty_struct *tty)
-{
-       int ret;
-       asm(
-               "mrc 14, 0, %0, c0, c1, 0\n"
-               "mov %0, %0, LSR #30\n"
-               "and %0, %0, #1\n"
-               : "=r" (ret)
-       );
-       return ret;
-}
-
-static void dcc_tty_unthrottle(struct tty_struct * tty)
-{
-       unsigned long irq_flags;
-
-       spin_lock_irqsave(&g_dcc_tty_lock, irq_flags);
-       dcc_poll_locked();
-       spin_unlock_irqrestore(&g_dcc_tty_lock, irq_flags);
-}
-
-static enum hrtimer_restart dcc_tty_timer_func(struct hrtimer *timer)
-{
-       unsigned long irq_flags;
-
-       spin_lock_irqsave(&g_dcc_tty_lock, irq_flags);
-       dcc_poll_locked();
-       spin_unlock_irqrestore(&g_dcc_tty_lock, irq_flags);
-       return HRTIMER_NORESTART;
-}
-
-void dcc_console_write(struct console *co, const char *b, unsigned count)
-{
-#if 1
-       dcc_write(b, count);
-#else
-       /* blocking printk */
-       while (count > 0) {
-               int written;
-               written = dcc_write(b, count);
-               if (written) {
-                       b += written;
-                       count -= written;
-               }
-       }
-#endif
-}
-
-static struct tty_driver *dcc_console_device(struct console *c, int *index)
-{
-       *index = 0;
-       return g_dcc_tty_driver;
-}
-
-static int __init dcc_console_setup(struct console *co, char *options)
-{
-       if (co->index != 0)
-               return -ENODEV;
-       return 0;
-}
-
-
-static struct console dcc_console =
-{
-       .name           = "ttyDCC",
-       .write          = dcc_console_write,
-       .device         = dcc_console_device,
-       .setup          = dcc_console_setup,
-       .flags          = CON_PRINTBUFFER,
-       .index          = -1,
-};
-
-static struct tty_operations dcc_tty_ops = {
-       .open = dcc_tty_open,
-       .close = dcc_tty_close,
-       .write = dcc_tty_write,
-       .write_room = dcc_tty_write_room,
-       .chars_in_buffer = dcc_tty_chars_in_buffer,
-       .unthrottle = dcc_tty_unthrottle,
-};
-
-static int __init dcc_tty_init(void)
-{
-       int ret;
-
-       hrtimer_init(&g_dcc_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
-       g_dcc_timer.function = dcc_tty_timer_func;
-
-       g_dcc_tty_driver = alloc_tty_driver(1);
-       if (!g_dcc_tty_driver) {
-               printk(KERN_ERR "dcc_tty_probe: alloc_tty_driver failed\n");
-               ret = -ENOMEM;
-               goto err_alloc_tty_driver_failed;
-       }
-       g_dcc_tty_driver->owner = THIS_MODULE;
-       g_dcc_tty_driver->driver_name = "dcc";
-       g_dcc_tty_driver->name = "ttyDCC";
-       g_dcc_tty_driver->major = 0; // auto assign
-       g_dcc_tty_driver->minor_start = 0;
-       g_dcc_tty_driver->type = TTY_DRIVER_TYPE_SERIAL;
-       g_dcc_tty_driver->subtype = SERIAL_TYPE_NORMAL;
-       g_dcc_tty_driver->init_termios = tty_std_termios;
-       g_dcc_tty_driver->flags = TTY_DRIVER_RESET_TERMIOS | TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV;
-       tty_set_operations(g_dcc_tty_driver, &dcc_tty_ops);
-       ret = tty_register_driver(g_dcc_tty_driver);
-       if (ret) {
-               printk(KERN_ERR "dcc_tty_probe: tty_register_driver failed, %d\n", ret);
-               goto err_tty_register_driver_failed;
-       }
-       tty_register_device(g_dcc_tty_driver, 0, NULL);
-
-       register_console(&dcc_console);
-       hrtimer_start(&g_dcc_timer, ktime_set(0, 0), HRTIMER_MODE_REL);
-
-       return 0;
-
-err_tty_register_driver_failed:
-       put_tty_driver(g_dcc_tty_driver);
-       g_dcc_tty_driver = NULL;
-err_alloc_tty_driver_failed:
-       return ret;
-}
-
-static void  __exit dcc_tty_exit(void)
-{
-       int ret;
-
-       tty_unregister_device(g_dcc_tty_driver, 0);
-       ret = tty_unregister_driver(g_dcc_tty_driver);
-       if (ret < 0) {
-               printk(KERN_ERR "dcc_tty_remove: tty_unregister_driver failed, %d\n", ret);
-       } else {
-               put_tty_driver(g_dcc_tty_driver);
-       }
-       g_dcc_tty_driver = NULL;
-}
-
-module_init(dcc_tty_init);
-module_exit(dcc_tty_exit);
-
-