1. 17 Feb, 2011 8 commits
    • Russ Gorby's avatar
      serial: ifx6x60: changed internal bpw from boolean to int · f089140e
      Russ Gorby authored
      driver should support 32bit SPI transfers. The boolean variable
      only allowed 8/16.
      
      Changed to support 8/16/32 for future enabling
      of 32 bpw.
      Signed-off-by: default avatarRuss Gorby <russ.gorby@intel.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      f089140e
    • Russ Gorby's avatar
      serial: ifx6x60: dma_alloc_coherent must use parent dev · 5fc32495
      Russ Gorby authored
      This driver is a SPI protocol driver and has no DMA ops
      associated with the device so the call will fail. Furthermore,
      the DMA allocation made here will be used by the SPI
      controller driver (parent dev) so it makes sense to
      pass that device instead.
      Signed-off-by: default avatarRuss Gorby <russ.gorby@intel.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      5fc32495
    • Russ Gorby's avatar
      serial: ifx6x60: fixed call to tty_port_init · b68f23b2
      Russ Gorby authored
      The port ops must be set AFTER calling port init as that function
      zeroes the structure
      Signed-off-by: default avatarRuss Gorby <russ.gorby@intel.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      b68f23b2
    • Jiri Olsa's avatar
      tty,vcs removing con_buf/conf_buf_mtx · fcdba07e
      Jiri Olsa authored
      seems there's no longer need for using con_buf/conf_buf_mtx
      as vcs_read/vcs_write buffer for user's data.
      
      The do_con_write function, that was the other user of this,
      is currently using its own kmalloc-ed buffer.
      
      Not sure when this got changed, as I was able to find this code
      in 2.6.9, but it's already gone as far as current git history
      goes - 2.6.12-rc2.
      
      AFAICS there's a behaviour change with the current change.
      The lseek is not completely mutually exclusive with the
      vcs_read/vcs_write - the file->f_pos might get updated
      via lseek callback during the vcs_read/vcs_write processing.
      
      I tried to find out if the prefered behaviour is to keep
      this in sync within read/write/lseek functions, but I did
      not find any pattern on different places.
      
      I guess if user end up calling write/lseek from different
      threads she should know what she's doing. If needed we
      could use dedicated fd mutex/buffer.
      Signed-off-by: default avatarJiri Olsa <jolsa@redhat.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      fcdba07e
    • Jiri Olsa's avatar
      tty,vcs: lseek/VC-release race fix · dc1892c4
      Jiri Olsa authored
      there's a race between vcs's lseek handler and VC release.
      
      The lseek handler does not hold console_lock and touches
      VC's size info. If during this the VC got released, there's
      an access violation.
      
      Following program triggers the issue for me:
      
      [SNIP]
      #define _BSD_SOURCE
      #include <stdio.h>
      #include <sys/types.h>
      #include <sys/stat.h>
      #include <fcntl.h>
      #include <sys/ioctl.h>
      #include <linux/vt.h>
      #include <unistd.h>
      #include <errno.h>
      
      static int run_seek(void)
      {
              while(1) {
                      int fd;
                      fd = open("./vcs30", O_RDWR);
                      while(lseek(fd, 0, 0) != -1);
                      close(fd);
              }
      }
      
      static int open_ioctl_tty(void)
      {
              return open("/dev/tty1", O_RDWR);
      }
      
      static int do_ioctl(int fd, int req, int i)
      {
              return ioctl(fd, req, i);
      }
      
      #define INIT(i) do_ioctl(ioctl_fd, VT_ACTIVATE, i)
      #define SHUT(i) do_ioctl(ioctl_fd, VT_DISALLOCATE, i)
      
      int main(int argc, char **argv)
      {
              int ioctl_fd = open_ioctl_tty();
      
              if (ioctl < 0) {
                      perror("open tty1 failed\n");
                      return -1;
              }
      
              if ((-1 == mknod("vcs30", S_IFCHR|0666, makedev(7, 30))) &&
                  (errno != EEXIST)) {
                      printf("errno %d\n", errno);
                      perror("failed to create vcs30");
                      return -1;
              }
      
              do_ioctl(ioctl_fd, VT_LOCKSWITCH, 0);
      
              if (!fork())
                      run_seek();
      
              while(1) {
                      INIT(30);
                      SHUT(30);
              }
      
              return 0;
      }
      [SNIP]
      Signed-off-by: default avatarJiri Olsa <jolsa@redhat.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      dc1892c4
    • Mandeep Singh Baines's avatar
      TTY: use appropriate printk priority level · 1ffdda95
      Mandeep Singh Baines authored
      printk()s without a priority level default to KERN_WARNING. To reduce
      noise at KERN_WARNING, this patch set the priority level appriopriately
      for unleveled printks()s. This should be useful to folks that look at
      dmesg warnings closely.
      Signed-off-by: default avatarMandeep Singh Baines <msb@chromium.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      1ffdda95
    • Mike Frysinger's avatar
      hvc: add Blackfin JTAG console support · 5427bcf5
      Mike Frysinger authored
      This converts the existing bfin_jtag_comm TTY driver to the HVC layer so
      that the common HVC code can worry about all of the TTY/polling crap and
      leave the Blackfin code to worry about the Blackfin bits.
      Signed-off-by: default avatarMike Frysinger <vapier@gentoo.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      5427bcf5
    • Arthur Taylor's avatar
      vt: Add virtual console keyboard mode OFF · 9fc3de9c
      Arthur Taylor authored
      virtual console: add keyboard mode OFF
      
      Add a new mode for the virtual console keyboard OFF in which all input
      other than shift keys is ignored. Prevents vt input buffers from
      overflowing when a program opens but doesn't read from a tty, like X11
      using evdev for input.
      Signed-off-by: default avatarArthur Taylor <art@ified.ca>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      9fc3de9c
  2. 04 Feb, 2011 3 commits
    • Stephen Boyd's avatar
      hvc_dcc: Simplify assembly for v6 and v7 ARM · 8e6d3fe1
      Stephen Boyd authored
      The inline assembly differences for v6 vs. v7 in the hvc_dcc
      driver are purely optimizations. On a v7 processor, an mrc with
      the pc sets the condition codes to the 28-31 bits of the register
      being read. It just so happens that the TX/RX full bits the DCC
      driver is testing for are high enough in the register to be put
      into the condition codes. On a v6 processor, this "feature" isn't
      implemented and thus we have to do the usual read, mask, test
      operations to check for TX/RX full.
      
      Since we already test the RX/TX full bits before calling
      __dcc_getchar() and __dcc_putchar() we don't actually need to do
      anything special for v7 over v6. The only difference is in
      hvc_dcc_get_chars(). We would test RX full, poll RX full, and
      then read a character from the buffer, whereas now we will test
      RX full, read a character from the buffer, and then test RX full
      again for the second iteration of the loop. It doesn't seem
      possible for the buffer to go from full to empty between testing
      the RX full and reading a character. Therefore, replace the v7
      versions with the v6 versions and everything works the same.
      Acked-by: default avatarTony Lindgren <tony@atomide.com>
      Cc: Arnd Bergmann <arnd@arndb.de>
      Acked-by: default avatarNicolas Pitre <nicolas.pitre@linaro.org>
      Cc: Daniel Walker <dwalker@codeaurora.org>
      Signed-off-by: default avatarStephen Boyd <sboyd@codeaurora.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      8e6d3fe1
    • Stephen Boyd's avatar
      hvc_dcc: Simplify put_chars()/get_chars() loops · bf73bd35
      Stephen Boyd authored
      Casting and anding with 0xff is unnecessary in
      hvc_dcc_put_chars() since buf is already a char[].
      __dcc_get_char() can't return an int less than 0 since it only
      returns a char. Simplify the if statement in hvc_dcc_get_chars()
      to take this into account.
      
      Cc: Daniel Walker <dwalker@codeaurora.org>
      Signed-off-by: default avatarStephen Boyd <sboyd@codeaurora.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      bf73bd35
    • Stephen Boyd's avatar
      hvc_dcc: Fix bad code generation by marking assembly volatile · a9963201
      Stephen Boyd authored
      Without marking the asm __dcc_getstatus() volatile my compiler
      decides it can cache the value of __ret in a register and then
      check the value of it continually in hvc_dcc_put_chars() (I had
      to replace get_wait/put_wait with 1 and fixup the branch
      otherwise my disassembler barfed on __dcc_(get|put)char).
      
      00000000 <hvc_dcc_put_chars>:
         0:   ee103e11        mrc     14, 0, r3, cr0, cr1, {0}
         4:   e3a0c000        mov     ip, #0  ; 0x0
         8:   e2033202        and     r3, r3, #536870912      ; 0x20000000
         c:   ea000006        b       2c <hvc_dcc_put_chars+0x2c>
        10:   e3530000        cmp     r3, #0  ; 0x0
        14:   1afffffd        bne     10 <hvc_dcc_put_chars+0x10>
        18:   e7d1000c        ldrb    r0, [r1, ip]
        1c:   ee10fe11        mrc     14, 0, pc, cr0, cr1, {0}
        20:   2afffffd        bcs     1c <hvc_dcc_put_chars+0x1c>
        24:   ee000e15        mcr     14, 0, r0, cr0, cr5, {0}
        28:   e28cc001        add     ip, ip, #1      ; 0x1
        2c:   e15c0002        cmp     ip, r2
        30:   bafffff6        blt     10 <hvc_dcc_put_chars+0x10>
        34:   e1a00002        mov     r0, r2
        38:   e12fff1e        bx      lr
      
      As you can see, the value of the mrc is checked against
      DCC_STATUS_TX (bit 29) and then stored in r3 for later use.
      Marking the asm volatile produces the following:
      
      00000000 <hvc_dcc_put_chars>:
         0:   e3a03000        mov     r3, #0  ; 0x0
         4:   ea000007        b       28 <hvc_dcc_put_chars+0x28>
         8:   ee100e11        mrc     14, 0, r0, cr0, cr1, {0}
         c:   e3100202        tst     r0, #536870912  ; 0x20000000
        10:   1afffffc        bne     8 <hvc_dcc_put_chars+0x8>
        14:   e7d10003        ldrb    r0, [r1, r3]
        18:   ee10fe11        mrc     14, 0, pc, cr0, cr1, {0}
        1c:   2afffffd        bcs     18 <hvc_dcc_put_chars+0x18>
        20:   ee000e15        mcr     14, 0, r0, cr0, cr5, {0}
        24:   e2833001        add     r3, r3, #1      ; 0x1
        28:   e1530002        cmp     r3, r2
        2c:   bafffff5        blt     8 <hvc_dcc_put_chars+0x8>
        30:   e1a00002        mov     r0, r2
        34:   e12fff1e        bx      lr
      
      which looks better and actually works. Mark all the inline
      assembly in this file as volatile since we don't want the
      compiler to optimize away these statements or move them around
      in any way.
      Acked-by: default avatarTony Lindgren <tony@atomide.com>
      Cc: Arnd Bergmann <arnd@arndb.de>
      Acked-by: default avatarNicolas Pitre <nicolas.pitre@linaro.org>
      Cc: Daniel Walker <dwalker@codeaurora.org>
      Signed-off-by: default avatarStephen Boyd <sboyd@codeaurora.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      a9963201
  3. 03 Feb, 2011 11 commits
  4. 01 Feb, 2011 1 commit
  5. 31 Jan, 2011 17 commits