28 Apr, 2008

1 commit

  • After commit 39d4c922b596633da86878b1a5cc881785b8e5fa (atmel_serial: fix
    uart/console concurrent access) the UART_GET_TCR macro got redefined. This
    patch removes the duplicated definition.

    Signed-off-by: michael trimarchi
    Acked-by: Haavard Skinnemoen
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Michael Trimarchi
     

16 Apr, 2008

1 commit

  • Since 43cc71eed1250755986da4c0f9898f9a635cb3bf, the platform modalias is
    prefixed with "platform:". Add MODULE_ALIAS() to the hotpluggable serial
    platform drivers, to re-enable auto loading.

    NOTE that Kconfig for some of these drivers doesn't allow modular builds, and
    thus doesn't match the driver source's unload support. Presumably their
    unload code is buggy and/or weakly tested...

    [dbrownell@users.sourceforge.net: more drivers, registration fixes]
    Signed-off-by: Kay Sievers
    Signed-off-by: David Brownell
    Acked-by: Peter Korsgaard
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Kay Sievers
     

03 Apr, 2008

2 commits

  • Strange chars appear on the serial port when a printk and a printf
    happens at the same time. This is caused by the pdc sending chars while
    atmel_console_write (called from printk) is executing

    Concurent access of uart and console to the same port leads to corrupted
    data to be transmitted, so disable tx dma (PDC) while writing to the
    console.

    Signed-off-by: Marc Pignat
    Signed-off-by: Haavard Skinnemoen
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Marc Pignat
     
  • I found a problem related to losing data during pdc transmission in
    atmel_serial: connect ttyS1 with ttyS2 using a loopback cable, send 30
    byte of packet from one to the other and waiting for 30 byte. On the
    other side just read and echo the data received.

    We always call atmel_tx_dma() from the tasklet regardless of what interrupt
    triggered it.

    Signed-off-by: michael
    Acked-by: Haavard Skinnemoen
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Michael Trimarchi
     

24 Feb, 2008

1 commit

  • We should only return IRQ_HANDLED when we actually found something to
    handle. This is important since the USART interrupt handler may be
    shared with the timer interrupt on some chips.

    Pointed-out-by: michael
    Signed-off-by: Haavard Skinnemoen
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Haavard Skinnemoen
     

09 Feb, 2008

9 commits

  • When possible, pass the tty name to request_irq() so that the user can easily
    distinguish the different serial ports in /proc/interrupts.

    Signed-off-by: Haavard Skinnemoen
    Cc: Andrew Victor
    Tested-by: Marc Pignat
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Haavard Skinnemoen
     
  • As pointed out by David Brownell, we really ought to be using container_of
    when converting from "struct uart_port *" to "struct atmel_uart_port *".

    Signed-off-by: Haavard Skinnemoen
    Cc: Andrew Victor
    Tested-by: Marc Pignat
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Haavard Skinnemoen
     
  • Introduced by atmel_serial-split-the-interrupt-handler.patch.

    Thanks to michael for spotting it.

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

    Haavard Skinnemoen
     
  • This patch is based on the DMA-patch by Chip Coldwell for the AT91/AT32 serial
    USARTS, with some tweaks to make it apply neatly on top of the other patches
    in this series.

    The RX and TX code has been moved to a tasklet and reworked a bit. Instead of
    depending on the ENDRX and TIMEOUT bits in CSR, we simply grab as much data as
    we can from the DMA buffers. I think this closes a race where the ENDRX bit
    is set after we read CSR but before we read RPR, although I haven't confirmed
    this.

    Similarly, the two TX handlers (ENDTX and TXBUFE) have been combined into one.
    Since the current code only uses a single TX buffer, there's no point in
    handling those interrupts separately.

    This also fixes a DMA sync bug in the original patch.

    [linux@bohmer.net: rebased onto irq-splitup patch]
    [hskinnemoen@atmel.com: moved to tasklet, fixed dma bug, misc cleanups]
    [hskinnemoen@atmel.com: atmel_serial dma: Misc fixes and cleanups]
    Signed-off-by: Remy Bohmer
    Signed-off-by: Haavard Skinnemoen
    Cc: Andrew Victor
    Tested-by: Marc Pignat
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Chip Coldwell
     
  • Split up the interrupt handler of the serial port into a interrupt top-half
    and a tasklet.

    The goal is to get the interrupt top-half as short as possible to minimize
    latencies on interrupts. But the old code also does some calls in the
    interrupt handler that are not allowed on preempt-RT in IRQF_NODELAY context.
    This handler is executed in this context because of the interrupt sharing with
    the timer interrupt. The timer interrupt on Preempt-RT runs in IRQF_NODELAY
    context.

    The tasklet takes care of handling control status changes, pushing incoming
    characters to the tty layer, handling break and other errors. It also handles
    pushing TX data into the data register.

    Reading the complete receive queue is still done in the top-half because we
    never want to miss any incoming character.

    [hskinnemoen@atmel.com: misc cleanups and simplifications]
    Signed-off-by: Remy Bohmer
    Signed-off-by: Haavard Skinnemoen
    Cc: Andrew Victor
    Tested-by: Marc Pignat
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Remy Bohmer
     
  • When an error happens in probe(), the clocks should be disabled, but
    only if the port isn't already used as a console.

    In remove(), the port struct shouldn't be freed because it's defined
    statically.

    Signed-off-by: Haavard Skinnemoen
    Cc: Andrew Victor
    Tested-by: Marc Pignat
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Haavard Skinnemoen
     
  • If BRGR is zero, the baud rate generator isn't running, so the boot loader
    can't have initialized the port.

    Signed-off-by: Haavard Skinnemoen
    Acked-by: Andrew Victor
    Tested-by: Marc Pignat
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Haavard Skinnemoen
     
  • Replace two instances of barrier() with cpu_relax() since that's the right
    thing to do when busy-waiting. This does not actually change anything since
    cpu_relax() is defined as barrier() on both ARM and AVR32.

    Signed-off-by: Haavard Skinnemoen
    Acked-by: Andrew Victor
    Tested-by: Marc Pignat
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Haavard Skinnemoen
     
  • Clean up the atmel_serial driver to conform the coding rules. It contains no
    functional change.

    Signed-off-by: Remy Bohmer
    Signed-off-by: Haavard Skinnemoen
    Acked-by: Andrew Victor
    Tested-by: Marc Pignat
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Remy Bohmer
     

04 Feb, 2008

1 commit

  • Currently early kernel messages, i.e., those from uncompression, go to the
    debugging UART. And if it is enabled in the platform configuration, but
    not initialized by the bootloader, the machine hangs, waiting for UART
    status change. Besides, having those messages on another UART - typically
    the console UART - may be preferrable. This patch allows selecting the
    UART in kernel configuration.

    Signed-off-by: Guennadi Liakhovetski
    Acked-by: Andrew Victor
    Signed-off-by: Russell King

    Guennadi Liakhovetski
     

15 Nov, 2007

1 commit

  • Remove annoying build warnings about unused variables in atmel_serial,
    which afflict both AT91 and AVR32 builds.

    Signed-off-by: David Brownell
    Acked-by: Haavard Skinnemoen
    Cc: Andrew Victor
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Brownell
     

17 Jul, 2007

1 commit

  • The RXBRK field in the AT91/AT32 USART status register has the
    following definition according to e.g. the AT32AP7000 data sheet:

    RXBRK: Break Received/End of Break
    0: No Break received or End of Break detected since the last RSTSTA.
    1: Break Received or End of Break detected since the last RSTSTA.

    Thus, for each break, the USART sets the RXBRK bit twice. This patch
    modifies the driver to report the break event to the serial core only
    once by keeping track of whether a break condition is currently
    active. The break_active flag is reset as soon as a character is
    received, so even if we miss the start-of-break interrupt this should
    do the right thing.

    Signed-off-by: Haavard Skinnemoen
    Cc: Andrew Victor
    Cc: Russell King
    Cc: Ivan Kuten
    Cc: Nicolas Ferre
    Cc: Patrice Vilchez
    Cc: Andrew Morton
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Haavard Skinnemoen
     

03 May, 2007

1 commit


20 Feb, 2007

1 commit

  • * 'for-linus' of master.kernel.org:/home/rmk/linux-2.6-arm: (117 commits)
    [ARM] 4058/2: iop32x: set ->broken_parity_status on n2100 onboard r8169 ports
    [ARM] 4140/1: AACI stability add ac97 timeout and retries
    [ARM] 4139/1: AACI record support
    [ARM] 4138/1: AACI: multiple channel support for IRQ handling
    [ARM] 4211/1: Provide a defconfig for ns9xxx
    [ARM] 4210/1: base for new machine type "NetSilicon NS9360"
    [ARM] 4222/1: S3C2443: Remove reference to missing S3C2443_PM
    [ARM] 4221/1: S3C2443: DMA support
    [ARM] 4220/1: S3C24XX: DMA system initialised from sysdev
    [ARM] 4219/1: S3C2443: DMA source definitions
    [ARM] 4218/1: S3C2412: fix CONFIG_CPU_S3C2412_ONLY wrt to S3C2443
    [ARM] 4217/1: S3C24XX: remove the dma channel show at startup
    [ARM] 4090/2: avoid clash between PXA and SA1111 defines
    [ARM] 4216/1: add .gitignore entries for ARM specific files
    [ARM] 4214/2: S3C2410: Add Armzone QT2410
    [ARM] 4215/1: s3c2410 usb device: per-platform vbus_draw
    [ARM] 4213/1: S3C2410 - Update definition of ADCTSC_XY_PST
    [ARM] 4098/1: ARM: rtc_lock only used with rtc_cmos
    [ARM] 4137/1: Add kexec support
    [ARM] 4201/1: SMP barriers pair needed for the secondary boot process
    ...

    Fix up conflict due to typedef removal in sound/arm/aaci.h

    Linus Torvalds
     

13 Feb, 2007

1 commit

  • Access to chip-internal registers should always be native-endian. This is
    especially important for AVR32 since it's a big-endian architecture and the
    non-raw readl() and writel() macros are defined to do little-endian
    accesses.

    Signed-off-by: Haavard Skinnemoen
    Acked-by: Andrew Victor
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Haavard Skinnemoen
     

08 Feb, 2007

1 commit

  • The Atmel AT91 and AVR32 processor architectures share many of the same
    peripherals. The PDC (Peripheral Data Controller) registers are also
    implemented within in a number of the on-chip peripherals (eg, USART,
    MMC, SPI, SSC, etc).

    In a attempt not to duplicate the register definitions in each
    peripheral, or in each architecture, the at91_pdc.h header in
    asm-arm/arch-at91 and asm-avr32/arch-at32ap has been replaced with
    linux/atmel_pdc.h.

    The definitions have also been renamed from AT91_PDC_* to ATMEL_PDC_*,
    and the drivers updated accordingly.

    Original patch from Nicolas Ferre.

    Signed-off-by: Andrew Victor
    Acked-by: Haavard Skinnemoen
    Signed-off-by: Russell King

    Andrew Victor
     

24 Jan, 2007

2 commits


09 Dec, 2006

1 commit

  • This is the grungy swap all the occurrences in the right places patch that
    goes with the updates. At this point we have the same functionality as
    before (except that sgttyb() returns speeds not zero) and are ready to
    begin turning new stuff on providing nobody reports lots of bugs

    If you are a tty driver author converting an out of tree driver the only
    impact should be termios->ktermios name changes for the speed/property
    setting functions from your upper layers.

    If you are implementing your own TCGETS function before then your driver
    was broken already and its about to get a whole lot more painful for you so
    please fix it 8)

    Also fill in c_ispeed/ospeed on init for most devices, although the current
    code will do this for you anyway but I'd like eventually to lose that extra
    paranoia

    [akpm@osdl.org: bluetooth fix]
    [mp3@de.ibm.com: sclp fix]
    [mp3@de.ibm.com: warning fix for tty3270]
    [hugh@veritas.com: fix tty_ioctl powerpc build]
    [jdike@addtoit.com: uml: fix ->set_termios declaration]
    Signed-off-by: Alan Cox
    Signed-off-by: Martin Peschke
    Acked-by: Peter Oberparleiter
    Cc: Cornelia Huck
    Signed-off-by: Hugh Dickins
    Signed-off-by: Jeff Dike
    Cc: Paolo 'Blaisorblade' Giarrusso
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Alan Cox
     

04 Dec, 2006

1 commit

  • 1. The CPU identification has moved from to .

    2. AT91RM9200_BASE_US0 is only defined if we are compiling in support
    for the AT91RM9200. Therefore we need to replace the CONFIG_ARM ifdef
    with CONFIG_ARCH_AT91RM9200

    Signed-off-by: Andrew Victor
    Signed-off-by: Russell King

    Andrew Victor
     

01 Dec, 2006

2 commits

  • This patch updates the drivers (and other files) which include the
    hardware headers. This fixes the breakage introduced in patches 3950/1
    and 3951/1 (those patches were getting big).

    The AVR32 architecture uses the same serial driver and had its own copy
    of at91rm9200_pdc.h. Renamed it to at91_pdc.h

    Signed-off-by: Andrew Victor
    Signed-off-by: Russell King

    Andrew Victor
     
  • This patch replaces the arch_identify() in system.h with a set of
    cpu_is_XXX() macro's. This allows for compile-time checking of the
    target AT91 processor.

    Original patch from David Brownell.

    Signed-off-by: Andrew Victor
    Signed-off-by: Russell King

    Andrew Victor
     

05 Oct, 2006

11 commits

  • Maintain a per-CPU global "struct pt_regs *" variable which can be used instead
    of passing regs around manually through all ~1800 interrupt handlers in the
    Linux kernel.

    The regs pointer is used in few places, but it potentially costs both stack
    space and code to pass it around. On the FRV arch, removing the regs parameter
    from all the genirq function results in a 20% speed up of the IRQ exit path
    (ie: from leaving timer_interrupt() to leaving do_IRQ()).

    Where appropriate, an arch may override the generic storage facility and do
    something different with the variable. On FRV, for instance, the address is
    maintained in GR28 at all times inside the kernel as part of general exception
    handling.

    Having looked over the code, it appears that the parameter may be handed down
    through up to twenty or so layers of functions. Consider a USB character
    device attached to a USB hub, attached to a USB controller that posts its
    interrupts through a cascaded auxiliary interrupt controller. A character
    device driver may want to pass regs to the sysrq handler through the input
    layer which adds another few layers of parameter passing.

    I've build this code with allyesconfig for x86_64 and i386. I've runtested the
    main part of the code on FRV and i386, though I can't test most of the drivers.
    I've also done partial conversion for powerpc and MIPS - these at least compile
    with minimal configurations.

    This will affect all archs. Mostly the changes should be relatively easy.
    Take do_IRQ(), store the regs pointer at the beginning, saving the old one:

    struct pt_regs *old_regs = set_irq_regs(regs);

    And put the old one back at the end:

    set_irq_regs(old_regs);

    Don't pass regs through to generic_handle_irq() or __do_IRQ().

    In timer_interrupt(), this sort of change will be necessary:

    - update_process_times(user_mode(regs));
    - profile_tick(CPU_PROFILING, regs);
    + update_process_times(user_mode(get_irq_regs()));
    + profile_tick(CPU_PROFILING);

    I'd like to move update_process_times()'s use of get_irq_regs() into itself,
    except that i386, alone of the archs, uses something other than user_mode().

    Some notes on the interrupt handling in the drivers:

    (*) input_dev() is now gone entirely. The regs pointer is no longer stored in
    the input_dev struct.

    (*) finish_unlinks() in drivers/usb/host/ohci-q.c needs checking. It does
    something different depending on whether it's been supplied with a regs
    pointer or not.

    (*) Various IRQ handler function pointers have been moved to type
    irq_handler_t.

    Signed-Off-By: David Howells
    (cherry picked from 1b16e7ac850969f38b375e511e3fa2f474a33867 commit)

    David Howells
     
  • The atmel_console_get_options() function initializes the baud,
    parity and bits settings from the actual hardware setup, in
    case it has been initialized by a e.g. boot loader.

    The baud rate, however, is not necessarily exactly equal to one of
    the standard baud rates (115200, etc.) This means that the baud rate
    calculated by this function may be slightly higher or slightly lower
    than one of the standard baud rates.

    If the baud rate is slightly lower than the target, this causes
    problems when uart_set_option() tries to match the detected baud rate
    against the standard baud rate, as it will always select a baud rate
    that is lower or equal to the target rate. For example if the
    detected baud rate is slightly lower than 115200, usart_set_options()
    will select 57600.

    This patch fixes the problem by subtracting 1 from the value in BRGR
    when calculating the baud rate. The detected baud rate will thus
    always be higher than the nearest standard baud rate, and
    uart_set_options() will end up doing the right thing.

    Tested on ATSTK1000 and AT91RM9200-EK boards. Both are broken without
    this patch.

    Signed-off-by: Haavard Skinnemoen
    Acked-by: Andrew Victor
    Signed-off-by: Linus Torvalds

    Haavard Skinnemoen
     
  • Make CONFIG_SERIAL_ATMEL selectable on AVR32 and #ifdef out some ARM-
    specific code in the driver.

    Signed-off-by: Haavard Skinnemoen
    Acked-by: Andrew Victor
    Signed-off-by: Linus Torvalds

    Haavard Skinnemoen
     
  • In order to initialize the serial console early, the atmel_serial
    driver had to do a hack where it compared the physical address of the
    port with an address known to be permanently mapped, and used it as a
    virtual address. This got around the limitation that ioremap() isn't
    always available when the console is being initalized.

    This patch removes that hack and replaces it with a new "regs" field
    in struct atmel_uart_data that the board-specific code can initialize
    to a fixed virtual mapping for platform devices where this is possible.
    It also initializes the DBGU's regs field with the address the driver
    used to check against.

    On AVR32, the "regs" field is initialized from the physical base
    address when this it can be accessed through a permanently 1:1 mapped
    segment, i.e. the P4 segment.

    If regs is NULL, the console initialization is delayed until the "real"
    driver is up and running and ioremap() can be used.

    Signed-off-by: Haavard Skinnemoen
    Acked-by: Andrew Victor
    Signed-off-by: Linus Torvalds

    Haavard Skinnemoen
     
  • Rename at91_register_uart_fns and associated structs and variables
    to make it consistent with the atmel_ prefix used by the rest of
    the driver.

    Signed-off-by: Haavard Skinnemoen
    Acked-by: Andrew Victor
    Signed-off-by: Linus Torvalds

    Haavard Skinnemoen
     
  • The at91_serial driver can be used with both AT32 and AT91 devices
    from Atmel and has therefore been renamed atmel_serial. The only
    thing left is to rename PORT_AT91 PORT_ATMEL.

    Signed-off-by: Haavard Skinnemoen
    Acked-by: Andrew Victor
    Signed-off-by: Linus Torvalds

    Haavard Skinnemoen
     
  • Prefix all internal functions and variables with atmel_ instead of
    at91_.

    The at91_register_uart_fns() stuff is left as is since I can't find
    any actual users of it.

    Signed-off-by: Haavard Skinnemoen
    Acked-by: Andrew Victor
    Signed-off-by: Linus Torvalds

    Haavard Skinnemoen
     
  • Rename the following public definitions:
    * AT91_NR_UART -> ATMEL_MAX_UART
    * struct at91_uart_data -> struct atmel_uart_data
    * at91_default_console_device -> atmel_default_console_device

    Signed-off-by: Haavard Skinnemoen
    Acked-by: Andrew Victor
    Signed-off-by: Linus Torvalds

    Haavard Skinnemoen
     
  • Rename the "at91_usart" platform driver "atmel_usart" and update
    platform devices accordingly.

    Signed-off-by: Haavard Skinnemoen
    Acked-by: Andrew Victor
    Signed-off-by: Linus Torvalds

    Haavard Skinnemoen
     
  • Rename the following Kconfig symbols:
    * CONFIG_SERIAL_AT91 -> CONFIG_SERIAL_ATMEL
    * CONFIG_SERIAL_AT91_CONSOLE -> CONFIG_SERIAL_ATMEL_CONSOLE
    * CONFIG_SERIAL_AT91_TTYAT -> CONFIG_SERIAL_ATMEL_TTYAT

    Signed-off-by: Haavard Skinnemoen
    Acked-by: Andrew Victor
    Signed-off-by: Linus Torvalds

    Haavard Skinnemoen
     
  • Rename at91_serial.c atmel_serial.c

    Signed-off-by: Haavard Skinnemoen
    Acked-by: Andrew Victor
    Signed-off-by: Linus Torvalds

    Haavard Skinnemoen