11 Jun, 2009

1 commit


29 May, 2009

1 commit

  • If you setserial a port which has never been initialised we change the type
    but don't update the I/O method pointers. The same problem is true if you
    change the io type of a port - but nobody ever does that so nobody noticed!

    Remember the old type and when attaching if the type has changed reload the
    port accessor pointers. We can't do it blindly as some 8250 drivers load custom
    accessors and we must not stomp those.

    Tested-by: Victor Seryodkin
    Closes-bug: #13367
    Signed-off-by: Alan Cox
    Signed-off-by: Linus Torvalds

    Alan Cox
     

21 Feb, 2009

1 commit

  • Intel 8257x Ethernet boards have a feature called Serial Over Lan.

    This feature works by emulating a serial port, and it is detected by
    kernel as a normal 8250 port. However, this emulation is not perfect, as
    also noticed on changeset 7500b1f602aad75901774a67a687ee985d85893f.

    Before this patch, the kernel were trying to check if the serial TX is
    capable of work using IRQ's.

    This were done with a code similar this:

    serial_outp(up, UART_IER, UART_IER_THRI);
    lsr = serial_in(up, UART_LSR);
    iir = serial_in(up, UART_IIR);
    serial_outp(up, UART_IER, 0);

    if (lsr & UART_LSR_TEMT && iir & UART_IIR_NO_INT)
    up->bugs |= UART_BUG_TXEN;

    This works fine for other 8250 ports, but, on 8250-emulated SoL port, the
    chip is a little lazy to down UART_IIR_NO_INT at UART_IIR register.

    Due to that, UART_BUG_TXEN is sometimes enabled. However, as TX IRQ keeps
    working, and the TX polling is now enabled, the driver miss-interprets the
    IRQ received later, hanging up the machine until a key is pressed at the
    serial console.

    This is the 6 version of this patch. Previous versions were trying to
    introduce a large enough delay between serial_outp and serial_in(up,
    UART_IIR), but not taking forever. However, the needed delay couldn't be
    safely determined.

    At the experimental tests, a delay of 1us solves most of the cases, but
    still hangs sometimes. Increasing the delay to 5us was better, but still
    doesn't solve. A very high delay of 50 ms seemed to work every time.

    However, poking around with delays and pray for it to be enough doesn't
    seem to be a good approach, even for a quirk.

    So, instead of playing with random large arbitrary delays, let's just
    disable UART_BUG_TXEN for all SoL ports.

    [akpm@linux-foundation.org: fix warnings]
    Signed-off-by: Mauro Carvalho Chehab
    Cc: Alan Cox
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Mauro Carvalho Chehab
     

14 Jan, 2009

1 commit

  • Commit b430428a188e8a434325e251d0704af4b88b4711 ("8250: Don't clobber
    spinlocks.") introduced a regression on the parisc architecture, which
    broke the handover to the serial port at boottime.

    early_serial_setup() was changed to only copy a subset of the uart_port
    fields, and sadly the "type" and "line" fields were forgotten and thus
    the serial port was not initialized and could not be used for a
    handover. This patch fixes this by copying the missing fields.

    As this change to early_serial_setup() doesn't need an initialized
    spinlock in the uart_port struct any longer, we can drop the spinlock
    initialization in the superio driver.

    Cc: David Daney
    Cc: Tomaso Paoletti
    Cc: Andrew Morton
    Cc: Alan Cox
    Acked-by: Kyle McMartin
    Cc: linux-parisc@vger.kernel.org
    Signed-off-by: Helge Deller
    Signed-off-by: Linus Torvalds

    Helge Deller
     

06 Jan, 2009

1 commit


03 Jan, 2009

4 commits

  • Cavium UART implementation is not covered by existing uart_configS.
    Define a new uart_config (PORT_OCTEON) which is specified by OCTEON
    platform device registration code.

    Signed-off-by: Tomaso Paoletti
    Signed-off-by: David Daney
    Signed-off-by: Alan Cox
    Signed-off-by: Linus Torvalds

    David Daney
     
  • Add flag value UPF_FIXED_TYPE which specifies that the UART type is
    known and should not be probed. For this case the UARTs properties
    are just copied out of the uart_config entry.

    This allows us to keep SOC specific 8250 probe code out of 8250.c. In
    this case we know the serial hardware will not be changing as it is on
    the same silicon as the CPU, and we can specify it with certainty in
    the board/cpu setup code.

    The alternative is to load up 8250.c with a bunch of OCTEON specific
    special cases in the probing code.

    Signed-off-by: David Daney
    Signed-off-by: Andrew Morton
    Signed-off-by: Alan Cox
    Signed-off-by: Linus Torvalds

    David Daney
     
  • In order to use Cavium OCTEON specific serial i/o drivers, we first
    patch the 8250 driver to use replaceable I/O functions. Compatible
    I/O functions are added for existing iotypeS.

    An added benefit of this change is that it makes it easy to factor
    some of the existing special cases out to board/SOC specific support
    code.

    The alternative is to load up 8250.c with a bunch of OCTEON specific
    iotype code and bug work-arounds.

    Signed-off-by: David Daney
    Signed-off-by: Tomaso Paoletti
    Signed-off-by: Andrew Morton
    Signed-off-by: Alan Cox
    Signed-off-by: Linus Torvalds

    David Daney
     
  • In serial8250_isa_init_ports(), the port's lock is initialized. We
    should not overwrite it. In early_serial_setup(), only copy in the
    fields we need. Since the early console code only uses a subset of
    the fields, these are sufficient.

    Signed-off-by: David Daney
    Signed-off-by: Tomaso Paoletti
    Signed-off-by: Andrew Morton
    Signed-off-by: Alan Cox
    Signed-off-by: Linus Torvalds

    David Daney
     

21 Oct, 2008

1 commit

  • …/git/tip/linux-2.6-tip

    This merges branches irq/genirq, irq/sparseirq-v4, timers/hpet-percpu
    and x86/uv.

    The sparseirq branch is just preliminary groundwork: no sparse IRQs are
    actually implemented by this tree anymore - just the new APIs are added
    while keeping the old way intact as well (the new APIs map 1:1 to
    irq_desc[]). The 'real' sparse IRQ support will then be a relatively
    small patch ontop of this - with a v2.6.29 merge target.

    * 'genirq-v28-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: (178 commits)
    genirq: improve include files
    intr_remapping: fix typo
    io_apic: make irq_mis_count available on 64-bit too
    genirq: fix name space collisions of nr_irqs in arch/*
    genirq: fix name space collision of nr_irqs in autoprobe.c
    genirq: use iterators for irq_desc loops
    proc: fixup irq iterator
    genirq: add reverse iterator for irq_desc
    x86: move ack_bad_irq() to irq.c
    x86: unify show_interrupts() and proc helpers
    x86: cleanup show_interrupts
    genirq: cleanup the sparseirq modifications
    genirq: remove artifacts from sparseirq removal
    genirq: revert dynarray
    genirq: remove irq_to_desc_alloc
    genirq: remove sparse irq code
    genirq: use inline function for irq_to_desc
    genirq: consolidate nr_irqs and for_each_irq_desc()
    x86: remove sparse irq from Kconfig
    genirq: define nr_irqs for architectures with GENERIC_HARDIRQS=n
    ...

    Linus Torvalds
     

17 Oct, 2008

1 commit

  • * 'for-linus' of master.kernel.org:/home/rmk/linux-2.6-arm: (51 commits)
    [ARM] 5308/1: Fix Viper ISA IRQ handling
    [ARM] 5307/1: pxa: fix CM-X2XX PCMCIA build error
    [ARM] 5306/1: pxa: fix build error on CM-X270
    [ARM] 5302/1: ARM: OMAP: Revert omap3 WDT changes to avoid merge conflict
    [ARM] 5305/1: ARM: OMAP: Fix compile of McBSP by removing unnecessary check
    [ARM] 5301/1: ARM: OMAP: Add missing irq defines
    ARM: OMAP3: Add default kernel config for OMAP LDP
    ARM: OMAP3: Add basic board support for OMAP LDP
    ARM: OMAP3: Defconfig for the Gumstix Overo board (rev 3)
    ARM: OMAP3: Add support for the Gumstix Overo board (rev 3)
    ARM: OMAP3: Add Beagle defconfig
    ARM: OMAP3: Add minimal Beagle board support
    ARM: OMAP3: Add minimal omap3430 support
    ARM: OMAP2: Fix sparse, checkpatch warnings in OMAP2/3 IRQ code
    ARM: OMAP: Fixes to omap_mcbsp_request function
    ARM: OMAP: Add support for OMAP2430 in McBSP
    ARM: OMAP: Add support for McBSP devices 3 - 5 on 34xx
    ARM: OMAP: Allocate McBSP devices dynamically
    Fix sections for omap-mcbsp platform driver
    [ARM] S3C24XX: Additional include moves
    ...

    Linus Torvalds
     

16 Oct, 2008

3 commits


15 Oct, 2008

1 commit

  • Splitting the 8250 code back up to avoid a clash with the NR_IRQS removal
    patch introduced a last minute bug. Put back the additional needed lines
    for the old lock init

    Signed-off-by: Alan Cox
    [ Ingo also reports that this can cause a spontaneous reboot crash with
    certain configs, and sends in an identical patch ]
    Tested-by: Kamalesh Babulal
    Signed-off-by: Linus Torvalds

    Alan Cox
     

14 Oct, 2008

3 commits

  • The multiple drivers share the minor space occupied by a particular major
    number, the actual index within the device name's space is indicated by
    the tty_driver->name_base + uart_port->line

    Another usable formula is (uart_driver->minor - MINOR_BASE) + port->line

    Use those to print the device names properly in such situations in
    serial_core.c and 8250.c

    Signed-off-by: David S. Miller
    Signed-off-by: Andrew Morton
    Signed-off-by: Alan Cox
    Signed-off-by: Linus Torvalds

    David S. Miller
     
  • This requires three changes:

    1) Remove !SPARC restriction in Kconfig.

    2) Move Sparc specific serial drivers before 8250, so that serial
    console devices don't change names on us, even if 8250 finds
    devices.

    3) Since the Sparc specific serial drivers try to use the
    same major/minor device namespace as 8250, some coordination
    is necessary. Use the sunserial_*() layer routines to allocate
    minor number space within TTY_MAJOR when CONFIG_SPARC.

    This has no effect on other platforms.

    Thanks to Josip Rodin for bringing up this issue and testing
    plus debugging various revisions of this patch.

    Signed-off-by: David S. Miller
    Signed-off-by: Andrew Morton
    Signed-off-by: Alan Cox
    Signed-off-by: Linus Torvalds

    David Miller
     
  • Remove some inlines from various functions that are called once, are too
    big to inline, or are called only from slow path code. This saves around
    300 bytes of code for me.

    Signed-off-by: Will Newton
    Signed-off-by: Andrew Morton
    Signed-off-by: Alan Cox
    Signed-off-by: Linus Torvalds

    Will Newton
     

06 Sep, 2008

2 commits


03 Sep, 2008

1 commit

  • Recent changes to tighten the check for UARTs that don't correctly
    re-assert THRE (01c194d9278efc15d4785ff205643e9c0bdcef53: "serial 8250:
    tighten test for using backup timer") caused problems when such a UART was
    opened for the second time - the bug could only successfully be detected
    at first initialization. For users of this version of this particular
    UART IP it is fatal.

    This patch stores the information about the bug in the bugs field of the
    port structure when the port is first started up so subsequent opens can
    check this bit even if the test for the bug fails.

    David Brownell: "My own exposure to this is that the UART on DaVinci
    hardware, which TI allegedly derived from its original 16550 logic, has
    periodically gone from working to unusable with the mainline 8250.c ...
    and back and forth a bunch. Currently it's "unusable", a regression from
    some previous versions. With this patch from Will, it's usable."

    Signed-off-by: Will Newton
    Acked-by: Alex Williamson
    Cc: Alan Cox
    Cc: David Brownell
    Cc: [2.6.26.x]
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Will Newton
     

31 Jul, 2008

1 commit

  • serial8250_startup() doesn't disable interrupts while taking the &up->port.lock
    which might race against the interrupt handler serial8250_interrupt(), which
    when entered, will deadlock waiting for the lock to be released.

    Signed-off-by: Borislav Petkov
    Tested-by: Ingo Molnar
    Cc: Alan Cox
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Borislav Petkov
     

25 Jul, 2008

1 commit

  • Intel 82571 has a "Serial Over LAN" feature that doesn't properly
    implements the receiving of break characters. When a break is received,
    it doesn't set UART_LSR_DR and unless another character is received, the
    break won't be received by the application.

    Signed-off-by: Aristeu Rozanski
    Acked-by: Alan Cox
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Aristeu Rozanski
     

23 Jul, 2008

1 commit

  • With SMP kernels _irqsave spinlock disables only local interrupts, while
    the shared serial interrupt could be assigned to the CPU that is not
    currently starting up the serial port.

    This might cause issues because serial8250_startup() routine issues
    IRQ-triggering operations before registering the port in the IRQ chain
    (though, this is fine to do and done explicitly because we don't want to
    process any interrupts on the port startup).

    With RT kernels and preemptable hardirqs, _irqsave spinlock does not
    disable local hardirqs, and the bug could be reproduced much easily:

    $ cat /dev/ttyS0 &
    $ cat /dev/ttyS1
    irq 42: nobody cared (try booting with the "irqpoll" option)
    Call Trace:
    [C0475EB0] [C0008A98] show_stack+0x4c/0x1ac (unreliable)
    [C0475EF0] [C004BBD4] __report_bad_irq+0x34/0xb8
    [C0475F10] [C004BD38] note_interrupt+0xe0/0x308
    [C0475F50] [C004B09C] thread_simple_irq+0xdc/0x104
    [C0475F70] [C004B3FC] do_irqd+0x338/0x3c8
    [C0475FC0] [C00398E0] kthread+0xf8/0x100
    [C0475FF0] [C0011FE0] original_kernel_thread+0x44/0x60
    handlers:
    [] (serial8250_interrupt+0x0/0x138)
    Disabling IRQ #42

    After this, all serial ports on the given IRQ are non-functional.

    To fix the issue we should explicitly disable shared IRQ before
    issuing any IRQ-triggering operations.

    I also changed spin_lock_irqsave to the ordinary spin_lock, since it
    seems to be safe: chain does not contain new port (yet), thus nobody
    will interfere us from the ISRs.

    Signed-off-by: Anton Vorontsov
    Signed-off-by: Alan Cox
    Signed-off-by: Linus Torvalds

    Anton Vorontsov
     

21 Jul, 2008

2 commits

  • Switch the serial_core based drivers to use the new tty_port structure.
    We can't quite use all of it yet because of the dynamically allocated
    extras in the serial_core layer.

    Signed-off-by: Alan Cox
    Signed-off-by: Linus Torvalds

    Alan Cox
     
  • This patch removes CVS keywords that weren't updated for a long time in
    comments, printk's and MODULE_DESCRIPTION's (no printk's or
    MODULE_DESCRIPTION's are completely removed).

    While doing this I also found and fixed a missing \n in a printk
    in m32r_sio.c

    Signed-off-by: Adrian Bunk
    Signed-off-by: Alan Cox
    Signed-off-by: Linus Torvalds

    Adrian Bunk
     

13 Jul, 2008

1 commit

  • I had 8250.nr_uarts=16 in the boot line of a test kernel and I had a weird
    mysterious crash in sysfs. After taking an in-depth look I realized that
    CONFIG_SERIAL_8250_NR_UARTS was set to 4 and I was walking off the end of
    the serial8250_ports array.

    Ouch!!!

    Don't let this happen to someone else.

    Signed-off-by: Eric W. Biederman
    Acked-by: Alan Cox
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Eric W. Biederman
     

31 May, 2008

1 commit


17 May, 2008

1 commit


01 May, 2008

1 commit


28 Apr, 2008

2 commits

  • Thomas Koeller had reported an issue where a device that had been making use
    of the UART_BUG_TXEN code in the 8250 driver was mistakenly being caught by
    the backup timer test, causing the device to work improperly.

    To fix this, tighten the test requirements to enable the backup timer
    workaround.

    The backup timer is really meant to catch UARTs that don't re-assert the THRE
    interrupt. The expectation is that they do initially assert THRE. This patch
    clarifies the test.

    Signed-off-by: Alex Williamson
    Cc: Thomas Koeller
    Cc: Russell King
    Cc: Alan Cox
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Alex Williamson
     
  • We try and write the correct speed back but the serial midlayer already
    mangles the speed on us and that means if we request B0 we report back B9600
    when we should not. For now we'll hack around this in the drivers and serial
    code, pending a better long term solution.

    Signed-off-by: Alan Cox
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Alan Cox
     

18 Apr, 2008

1 commit

  • polled console handling support, to access a console in an irq-less
    way while in debug or irq context.

    absolutely zero impact as long as CONFIG_CONSOLE_POLL is disabled.
    (which is the default)

    [ jan.kiszka@siemens.com: lots of cleanups ]
    [ mingo@elte.hu: redesign, splitups, cleanups. ]

    Signed-off-by: Jason Wessel
    Signed-off-by: Ingo Molnar
    Signed-off-by: Jan Kiszka
    Reviewed-by: Thomas Gleixner

    Jason Wessel
     

09 Feb, 2008

2 commits


06 Feb, 2008

2 commits

  • Coding style tweaks and printk levels.

    Signed-off-by: Alan Cox

    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Alan Cox
     
  • Allow the private_data field to be specified in platform_data for the
    standard 8250/16550 UART. This field is used by DW APB type UARTs and
    without this patch it's only possible to set this field when registering
    the port by hand. If private_data is not set then the driver will
    potentially oops with a NULL pointer dereference.

    Signed-off-by: Will Newton
    Acked-by: Alan Cox
    Cc: Russell King
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Will Newton
     

23 Aug, 2007

1 commit

  • Reading the LSR clears the break, parity, frame error, and overrun bits in
    the 8250 chip, but these are not being saved in all places that read the
    LSR. Same goes for the MSR delta bits. Save the LSR bits off whenever the
    lsr is read so they can be handled later in the receive routine. Save the
    MSR bits to be handled in the modem status routine.

    Also, clear the stored bits and clear the interrupt registers before
    enabling interrupts, to avoid handling old values of the stored bits in the
    interrupt routines.

    [akpm@linux-foundation.org: clean up pre-existing code]
    Signed-off-by: Corey Minyard
    Cc: Russell King
    Cc: Yinghai Lu
    Cc: Bjorn Helgaas
    Acked-by: Alan Cox
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Corey Minyard
     

04 Aug, 2007

1 commit

  • the early setup function serial8250_console_early_setup() can be called
    from non __init code (eg. hotpluggable serial ports like serial_cs) so
    remove the __init from the call chain to avoid crashes.

    Signed-off-by: Daniel Ritz
    Cc: Yinghai Lu
    Signed-off-by: Linus Torvalds

    Daniel Ritz
     

25 Jul, 2007

1 commit

  • At present, various parts of the serial code use unsigned long to define
    resource addresses. This is a problem, because some 32-bit platforms have
    physical addresses larger than 32-bits, and have mmio serial uarts located
    above the 4GB point.

    This patch changes the type of mapbase in both struct uart_port and struct
    plat_serial8250_port to resource_size_t, which can be configured to be 64
    bits on such platforms. The mapbase in serial_struct can't safely be
    changed, because that structure is user visible.

    Signed-off-by: David Gibson
    Signed-off-by: Josh Boyer
    Cc: Russell King
    Cc: Paul Mackerras
    Cc: Jason Wessel
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Josh Boyer