16 Nov, 2011

1 commit

  • Reading from the DCC grabs a character from the buffer and
    clears the status bit. Since this is a context-changing
    operation, instructions following the character read that rely on
    the status bit being accurate need to be synchronized with an
    ISB.

    In this case, the status bit check needs to execute after the
    character read otherwise we run the risk of reading the character
    and checking the status bit before the read can clear the status
    bit in the first place. When this happens, the user will see the
    same character they typed twice, instead of once.

    Add an ISB after the read and the write, so that the status check
    is synchronized with the read/write operations.

    Signed-off-by: Stephen Boyd
    Cc: stable
    Signed-off-by: Greg Kroah-Hartman

    Stephen Boyd
     

07 Nov, 2011

4 commits

  • This reverts commit 361162459f62dc0826b82c9690a741a940f457f0.

    It causes an infinite loop when booting Linux under Xen, as so:

    [ 2.382984] console [hvc0] enabled
    [ 2.382984] console [hvc0] enabled
    [ 2.382984] console [hvc0] enabled
    ...

    as reported by Konrad Rzeszutek Wilk. And Rusty reports the same for
    lguest. He goes on to say:

    "This is not a concurrency problem: the issue seems to be that
    calling register_console() twice on the same struct console is a bad
    idea."

    and Greg says he'll fix it up properly at some point later. Revert for now.

    Reported-by: Konrad Rzeszutek Wilk
    Reported-by: Rusty Russell
    Requested-by: Stephen Rothwell
    Cc: Miche Baker-Harvey
    Cc: Greg Kroah-Hartman
    Signed-off-by: Linus Torvalds

    Linus Torvalds
     
  • Fix building following build error:

    drivers/tty/hvc/hvc_opal.c:244:12: error: 'THIS_MODULE' undeclared here (not in a function)

    Signed-off-by: Michael Neuling
    [ New file from powerpc tree not following the new rules from the
    module.h split, both of which were merged today. - Linus ]
    Signed-off-by: Linus Torvalds

    Michael Neuling
     
  • * 'modsplit-Oct31_2011' of git://git.kernel.org/pub/scm/linux/kernel/git/paulg/linux: (230 commits)
    Revert "tracing: Include module.h in define_trace.h"
    irq: don't put module.h into irq.h for tracking irqgen modules.
    bluetooth: macroize two small inlines to avoid module.h
    ip_vs.h: fix implicit use of module_get/module_put from module.h
    nf_conntrack.h: fix up fallout from implicit moduleparam.h presence
    include: replace linux/module.h with "struct module" wherever possible
    include: convert various register fcns to macros to avoid include chaining
    crypto.h: remove unused crypto_tfm_alg_modname() inline
    uwb.h: fix implicit use of asm/page.h for PAGE_SIZE
    pm_runtime.h: explicitly requires notifier.h
    linux/dmaengine.h: fix implicit use of bitmap.h and asm/page.h
    miscdevice.h: fix up implicit use of lists and types
    stop_machine.h: fix implicit use of smp.h for smp_processor_id
    of: fix implicit use of errno.h in include/linux/of.h
    of_platform.h: delete needless include
    acpi: remove module.h include from platform/aclinux.h
    miscdevice.h: delete unnecessary inclusion of module.h
    device_cgroup.h: delete needless include
    net: sch_generic remove redundant use of
    net: inet_timewait_sock doesnt need
    ...

    Fix up trivial conflicts (other header files, and removal of the ab3550 mfd driver) in
    - drivers/media/dvb/frontends/dibx000_common.c
    - drivers/media/video/{mt9m111.c,ov6650.c}
    - drivers/mfd/ab3550-core.c
    - include/linux/dmaengine.h

    Linus Torvalds
     
  • * 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc: (106 commits)
    powerpc/p3060qds: Add support for P3060QDS board
    powerpc/83xx: Add shutdown request support to MCU handling on MPC8349 MITX
    powerpc/85xx: Make kexec to interate over online cpus
    powerpc/fsl_booke: Fix comment in head_fsl_booke.S
    powerpc/85xx: issue 15 EOI after core reset for FSL CoreNet devices
    powerpc/8xxx: Fix interrupt handling in MPC8xxx GPIO driver
    powerpc/85xx: Add 'fsl,pq3-gpio' compatiable for GPIO driver
    powerpc/86xx: Correct Gianfar support for GE boards
    powerpc/cpm: Clear muram before it is in use.
    drivers/virt: add ioctl for 32-bit compat on 64-bit to fsl-hv-manager
    powerpc/fsl_msi: add support for "msi-address-64" property
    powerpc/85xx: Setup secondary cores PIR with hard SMP id
    powerpc/fsl-booke: Fix settlbcam for 64-bit
    powerpc/85xx: Adding DCSR node to dtsi device trees
    powerpc/85xx: clean up FPGA device tree nodes for Freecsale QorIQ boards
    powerpc/85xx: fix PHYS_64BIT selection for P1022DS
    powerpc/fsl-booke: Fix setup_initial_memory_limit to not blindly map
    powerpc: respect mem= setting for early memory limit setup
    powerpc: Update corenet64_smp_defconfig
    powerpc: Update mpc85xx/corenet 32-bit defconfigs
    ...

    Fix up trivial conflicts in:
    - arch/powerpc/configs/40x/hcu4_defconfig
    removed stale file, edited elsewhere
    - arch/powerpc/include/asm/udbg.h, arch/powerpc/kernel/udbg.c:
    added opal and gelic drivers vs added ePAPR driver
    - drivers/tty/serial/8250.c
    moved UPIO_TSI to powerpc vs removed UPIO_DWAPB support

    Linus Torvalds
     

01 Nov, 2011

1 commit


19 Oct, 2011

1 commit

  • printk only works for "registered consoles." Currently, the hvc_console
    code calls register_console() from hvc_instantiate(), but that's only
    used in the early console case. In hvc_alloc(), register_console() was
    not called.

    Add a call to register_console() in hvc_alloc(), set up the index in
    the hvc_console, and set up the necessary vtermnos[] and cons_op[]
    entries so that printk functions work.

    Signed-off-by: Miche Baker-Harvey
    Signed-off-by: Greg Kroah-Hartman

    Miche Baker-Harvey
     

23 Sep, 2011

1 commit

  • Since commit [e58aa3d2: genirq: Run irq handlers with interrupts disabled],
    We run all interrupt handlers with interrupts disabled
    and we even check and yell when an interrupt handler
    returns with interrupts enabled (see commit [b738a50a:
    genirq: Warn when handler enables interrupts]).

    So now this flag is a NOOP and can be removed.

    Signed-off-by: Yong Zhang
    Acked-by: Tobias Klauser
    Signed-off-by: Greg Kroah-Hartman

    Yong Zhang
     

20 Sep, 2011

2 commits

  • This adds a udbg and an hvc console backend for supporting a console
    using the OPAL console interfaces.

    On OPAL v1 we have hvc0 mapped to whatever console the system was
    configured for (network or hvsi serial port) via the service
    processor.

    On OPAL v2 we have hvcN mapped to the Nth console provided by OPAL
    which generally corresponds to:

    hvc0 : network console (raw protocol)
    hvc1 : serial port S1 (hvsi)
    hvc2 : serial port S2 (hvsi)

    Note: At this point, early debug console only works with OPAL v1
    and shouldn't be enabled in a normal kernel.

    Signed-off-by: Benjamin Herrenschmidt

    Benjamin Herrenschmidt
     
  • The Power platform requires the partner info buffer to be page aligned
    otherwise it will fail the partner info hcall with H_PARAMETER. Switch
    from using kmalloc to allocate this buffer to __get_free_page to ensure
    page alignment.

    Signed-off-by: Brian King
    Signed-off-by: Benjamin Herrenschmidt

    Brian King
     

26 Aug, 2011

1 commit

  • Let's use the newly added helper to avoid stalls in drivers which are
    not yet ported to tty_port helpers.

    Those which are broken (call tty_wait_until_sent with irqs disabled)
    are left untouched. They are in a deeper trouble than we are trying to
    solve here. This includes amiserial, 68328serial, 68360serial and
    crisv10.

    Signed-off-by: Jiri Slaby
    Acked-by: Arnd Bergmann
    Signed-off-by: Greg Kroah-Hartman

    Jiri Slaby
     

20 Jul, 2011

1 commit


19 Jul, 2011

3 commits

  • Add poll_get_char and poll_put_char for kdb. Enable kdb at boot with:

    kgdboc=hvc0

    or at runtime with:

    echo hvc0 > /sys/module/kgdboc/parameters/kgdboc

    Signed-off-by: Anton Blanchard
    Signed-off-by: Benjamin Herrenschmidt

    Anton Blanchard
     
  • commit 4d2bb3f50036 (powerpc/pseries: Re-implement HVSI as part of
    hvc_vio) changed udbg_getc to be based on hvterm_raw_get_chars.
    Unfortunately hvterm_raw_get_chars returns -EAGAIN if you ask
    for anything less than 16 characters. As a result xmon no longer
    accepts input and prints a stream of junk to the screen.

    The recent change highlights a problem that xmon on pseries VIO
    has had all along, that it can drop input characters. The issue
    is the hypervisor call does not take a count argument and can
    return up to 16 characters.

    This patch adds a per vterm buffer that we copy input data into
    and give it out as requested.

    Signed-off-by: Anton Blanchard
    Signed-off-by: Benjamin Herrenschmidt

    Anton Blanchard
     
  • Currently, the hvc_console_print() function drops console output if the
    hvc backend's put_chars() returns 0. This patch changes this behavior
    to allow a retry through returning -EAGAIN.

    This change also affects the hvc_push() function. Both functions are
    changed to handle -EAGAIN and to retry the put_chars() operation.

    If a hvc backend returns -EAGAIN, the retry handling differs:

    - hvc_console_print() spins to write the complete console output.
    - hvc_push() behaves the same way as for returning 0.

    Now hvc backends can indirectly control the way how console output is
    handled through the hvc console layer.

    Signed-off-by: Hendrik Brueckner
    Acked-by: Anton Blanchard
    Cc:
    Signed-off-by: Benjamin Herrenschmidt

    Hendrik Brueckner
     

01 Jul, 2011

1 commit


29 Jun, 2011

4 commits

  • This will allow a different backend to share it

    Signed-off-by: Benjamin Herrenschmidt

    Benjamin Herrenschmidt
     
  • On pseries machines, consoles are provided by the hypervisor using
    a low level get_chars/put_chars type interface. However, this is
    really just a transport to the service processor which implements
    them either as "raw" console (networked consoles, HMC, ...) or as
    "hvsi" serial ports.

    The later is a simple packet protocol on top of the raw character
    interface that is supposed to convey additional "serial port" style
    semantics. In practice however, all it does is provide a way to
    read the CD line and set/clear our DTR line, that's it.

    We currently implement the "raw" protocol as an hvc console backend
    (/dev/hvcN) and the "hvsi" protocol using a separate tty driver
    (/dev/hvsi0).

    However this is quite impractical. The arbitrary difference between
    the two type of devices has been a major source of user (and distro)
    confusion. Additionally, there's an additional mini -hvsi implementation
    in the pseries platform code for our low level debug console and early
    boot kernel messages, which means code duplication, though that low
    level variant is impractical as it's incapable of doing the initial
    protocol negociation to establish the link to the FSP.

    This essentially replaces the dedicated hvsi driver and the platform
    udbg code completely by extending the existing hvc_vio backend used
    in "raw" mode so that:

    - It now supports HVSI as well
    - We add support for hvc backend providing tiocm{get,set}
    - It also provides a udbg interface for early debug and boot console

    This is overall less code, though this will only be obvious once we
    remove the old "hvsi" driver, which is still available for now. When
    the old driver is enabled, the new code still kicks in for the low
    level udbg console, replacing the old mini implementation in the platform
    code, it just doesn't provide the higher level "hvc" interface.

    In addition to producing generally simler code, this has several benefits
    over our current situation:

    - The user/distro only has to deal with /dev/hvcN for the hypervisor
    console, avoiding all sort of confusion that has plagued us in the past

    - The tty, kernel and low level debug console all use the same code
    base which supports the full protocol establishment process, thus the
    console is now available much earlier than it used to be with the
    old HVSI driver. The kernel console works much earlier and udbg is
    available much earlier too. Hackers can enable a hard coded very-early
    debug console as well that works with HVSI (previously that was only
    supported for the "raw" mode).

    I've tried to keep the same semantics as hvsi relative to how I react
    to things like CD changes, with some subtle differences though:

    - I clear DTR on close if HUPCL is set

    - Current hvsi triggers a hangup if it detects a up->down transition
    on CD (you can still open a console with CD down). My new implementation
    triggers a hangup if the link to the FSP is severed, and severs it upon
    detecting a up->down transition on CD.

    Signed-off-by: Benjamin Herrenschmidt

    Benjamin Herrenschmidt
     
  • Embed the struct hvsi_header in the various packet definitions
    rather than open coding it multiple times. Will help provide
    stronger type checking.

    Signed-off-by: Benjamin Herrenschmidt

    Benjamin Herrenschmidt
     
  • This moves various HVSI protocol definitions from the hvsi.c
    driver to a header file that can be used later on by a udbg
    implementation

    Signed-off-by: Benjamin Herrenschmidt

    Benjamin Herrenschmidt
     

31 Mar, 2011

1 commit


29 Mar, 2011

1 commit


19 Mar, 2011

1 commit

  • * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial: (47 commits)
    doc: CONFIG_UNEVICTABLE_LRU doesn't exist anymore
    Update cpuset info & webiste for cgroups
    dcdbas: force SMI to happen when expected
    arch/arm/Kconfig: remove one to many l's in the word.
    asm-generic/user.h: Fix spelling in comment
    drm: fix printk typo 'sracth'
    Remove one to many n's in a word
    Documentation/filesystems/romfs.txt: fixing link to genromfs
    drivers:scsi Change printk typo initate -> initiate
    serial, pch uart: Remove duplicate inclusion of linux/pci.h header
    fs/eventpoll.c: fix spelling
    mm: Fix out-of-date comments which refers non-existent functions
    drm: Fix printk typo 'failled'
    coh901318.c: Change initate to initiate.
    mbox-db5500.c Change initate to initiate.
    edac: correct i82975x error-info reported
    edac: correct i82975x mci initialisation
    edac: correct commented info
    fs: update comments to point correct document
    target: remove duplicate include of target/target_core_device.h from drivers/target/target_core_hba.c
    ...

    Trivial conflict in fs/eventpoll.c (spelling vs addition)

    Linus Torvalds
     

18 Mar, 2011

2 commits

  • * 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc: (62 commits)
    powerpc/85xx: Fix signedness bug in cache-sram
    powerpc/fsl: 85xx: document cache sram bindings
    powerpc/fsl: define binding for fsl mpic interrupt controllers
    powerpc/fsl_msi: Handle msi-available-ranges better
    drivers/serial/ucc_uart.c: Add of_node_put to avoid memory leak
    powerpc/85xx: Fix SPE float to integer conversion failure
    powerpc/85xx: Update sata controller compatible for p1022ds board
    ATA: Add FSL sata v2 controller support
    powerpc/mpc8xxx_gpio: simplify searching for 'fsl, qoriq-gpio' compatiable
    powerpc/8xx: remove obsolete mgsuvd board
    powerpc/82xx: rename and update mgcoge board support
    powerpc/83xx: rename and update kmeter1
    powerpc/85xx: Workaroudn e500 CPU erratum A005
    powerpc/fsl_pci: Add support for FSL PCIe controllers v2.x
    powerpc/85xx: Fix writing to spin table 'cpu-release-addr' on ppc64e
    powerpc/pseries: Disable MSI using new interface if possible
    powerpc: Enable GENERIC_HARDIRQS_NO_DEPRECATED.
    powerpc: core irq_data conversion.
    powerpc: sysdev/xilinx_intc irq_data conversion.
    powerpc: sysdev/uic irq_data conversion.
    ...

    Fix up conflicts in arch/powerpc/sysdev/fsl_msi.c (due to getting rid of
    of_platform_driver in arch/powerpc)

    Linus Torvalds
     
  • …f git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen

    * 'stable/hvc-console' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen:
    xen/hvc: Disable probe_irq_on/off from poking the hvc-console IRQ line.

    * 'stable/gntalloc.v6' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen:
    xen: gntdev: fix build warning
    xen/p2m/m2p/gnttab: do not add failed grant maps to m2p override
    xen-gntdev: Add cast to pointer
    xen-gntdev: Fix incorrect use of zero handle
    xen: change xen/[gntdev/gntalloc] to default m
    xen-gntdev: prevent using UNMAP_NOTIFY_CLEAR_BYTE on read-only mappings
    xen-gntdev: Avoid double-mapping memory
    xen-gntdev: Avoid unmapping ranges twice
    xen-gntdev: Use map->vma for checking map validity
    xen-gntdev: Fix unmap notify on PV domains
    xen-gntdev: Fix memory leak when mmap fails
    xen/gntalloc,gntdev: Add unmap notify ioctl
    xen-gntalloc: Userspace grant allocation driver
    xen-gntdev: Support mapping in HVM domains
    xen-gntdev: Add reference counting to maps
    xen-gntdev: Use find_vma rather than iterating our vma list manually
    xen-gntdev: Change page limit to be global instead of per-open

    * 'stable/balloon' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen: (24 commits)
    xen-gntdev: Use ballooned pages for grant mappings
    xen-balloon: Add interface to retrieve ballooned pages
    xen-balloon: Move core balloon functionality out of module
    xen/balloon: Remove pr_info's and don't alter retry_count
    xen/balloon: Protect against CPU exhaust by event/x process
    xen/balloon: Migration from mod_timer() to schedule_delayed_work()
    xen/balloon: Removal of driver_pages

    Linus Torvalds
     

10 Mar, 2011

1 commit

  • This fixes a particular nasty racing problem found when using
    Xen hypervisor with the console (hvc) output being routed to the
    serial port and the serial port receiving data when
    probe_irq_off(probe_irq_on) is running.

    Specifically the bug manifests itself with:

    [ 4.470693] BUG: unable to handle kernel NULL pointer dereference at 0000000000000008
    [ 4.470693] IP: [] handle_IRQ_event+0xe/0xc9
    ..snip..
    [ 4.470693] Call Trace:
    [ 4.470693]
    [ 4.470693] [] handle_percpu_irq+0x3c/0x69
    [ 4.470693] [] __xen_evtchn_do_upcall+0xfd/0x195
    [ 4.470693] [] ? xen_restore_fl_direct_end+0x0/0x1
    [ 4.470693] [] xen_evtchn_do_upcall+0x32/0x47
    [ 4.470693] [] xen_do_hypervisor_callback+0x1e/0x30
    [ 4.470693]
    [ 4.470693] [] ? hypercall_page+0x22a/0x1000
    [ 4.470693] [] ? hypercall_page+0x22a/0x1000
    [ 4.470693] [] ? xen_force_evtchn_callback+0xd/0xf
    [ 4.470693] [] ? check_events+0x12/0x20
    [ 4.470693] [] ? xen_irq_enable_direct_end+0x0/0x7
    [ 4.470693] [] ? probe_irq_on+0x8f/0x1d7
    [ 4.470693] [] ? serial8250_config_port+0x7b7/0x9e6
    [ 4.470693] [] ? uart_add_one_port+0x11b/0x305

    The bug is trigged by three actors working together:
    A). serial_8250_config_port calling
    probe_irq_off(probe_irq_on())
    wherein all of the IRQ handlers are being started and shut off.
    The functions utilize the sleep functions so the minimum time
    they are run is 120 msec.
    B). Xen hypervisor receiving on the serial line any character and
    setting the bits in the event channel - during this 120 msec timeframe.
    C). The hvc API makes a call to 'request_irq' (and hence setting desc->action
    to a valid value), much much later - when user space opens
    /dev/console (hvc_open). To make the console usable during bootup,
    the Xen HVC implementation sets the IRQ chip (and correspondingly
    the event channel) much earlier. The IRQ chip handler that is used
    is the handle_percpu_irq (aaca49642b92c8a57d3ca5029a5a94019c7af69f)

    Back to the issue. When A) is being called it ends up calling the
    xen_percpu_chip's chip->startup twice and chip->shutdown once. Those
    are set to the default_startup and mask_irq (events.c) respectivly.
    If (and this seems to depend on what serial concentrator you use), B)
    gets data from the serial port it sets in the event channel a pending bit.
    When A) calls chip->startup(), the masking of the pending bit, and
    unmasking of the event channel mask, and also setting of the upcall_pending
    flag is done (since there is data present on the event channel).
    If before the 120 msec has elapsed, any IRQ handler (Xen IRQ has one
    IRQ handler, which checks the event channels bitmap to figure which one
    to call) is called we end up calling the handle_percpu_irq. The
    handle_percpu_irq calls desc->action (which is NULL) and we blow up.

    Caveats: I could only reproduce this on 2.6.32 pvops. I am not sure
    why this is not showing up on 2.6.38 kernel.

    The probe_irq_on/off has code to disable poking specific IRQ lines. This is
    done by using the set_irq_noprobe() and then we do not have to
    worry about the handle_percpu_irq being called before the IRQ action
    handler has been installed.

    Signed-off-by: Konrad Rzeszutek Wilk

    Konrad Rzeszutek Wilk
     

02 Mar, 2011

1 commit

  • The HVCS driver, for those who don't know, is a driver for the "server" side
    of the IBM virtual terminal mechanism allowing Linux partitions to act as
    terminal servers under IBM PowerVM hypervisor. It's almost never used on
    the field at the moment.

    However, it's part of our configs, and in its current incarnation, will
    allocate the tty driver & major (with 64 minors) and create a kernel thread
    whether it's used or not, ie, whether the hypervisor did put a virtual
    terminal server device node in the partition or not (or whether running on
    a pseries machine or not even).

    This in turns causes modern distro's udev's to start trying to open all
    those 64 minors at boot, which, since they aren't linked to anything,
    causes the driver to spew errors in the kernel log for each of them.

    Not nice.

    This moves all that initialization to a function which is now only called
    the first time a terminal server virtual IO device is actually probed
    (that is almost never).

    There's still a _LOT_ of cleanup that can be done in this driver, some
    simple (almost all printk's statements in there shall either just be
    removed or in some case turned into better written & more informative
    messages, including using the dev_* variants etc...). This is left as
    an exercise for whoever actually cares about that driver.

    One could also try to be smart and dispose of all the tty related
    resources when the last instance of the VIO server device
    is removed (Hotplug anybody ?).

    Signed-off-by: Benjamin Herrenschmidt

    Benjamin Herrenschmidt
     

25 Feb, 2011

1 commit


23 Feb, 2011

1 commit


18 Feb, 2011

3 commits

  • Doing tiocmget was such fun we should do tiocmset as well for the same
    reasons

    Signed-off-by: Alan Cox
    Signed-off-by: Greg Kroah-Hartman

    Alan Cox
     
  • We don't actually need this and it causes problems for internal use of
    this functionality. Currently there is a single use of the FILE * pointer.
    That is the serial core which uses it to check tty_hung_up_p. However if
    that is true then IO_ERROR is also already set so the check may be removed.

    Signed-off-by: Alan Cox
    Signed-off-by: Greg Kroah-Hartman

    Alan Cox
     
  • 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: Mike Frysinger
    Signed-off-by: Greg Kroah-Hartman

    Mike Frysinger
     

15 Feb, 2011

1 commit


04 Feb, 2011

4 commits

  • 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: Tony Lindgren
    Cc: Arnd Bergmann
    Acked-by: Nicolas Pitre
    Cc: Daniel Walker
    Signed-off-by: Stephen Boyd
    Signed-off-by: Greg Kroah-Hartman

    Stephen Boyd
     
  • 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
    Signed-off-by: Stephen Boyd
    Signed-off-by: Greg Kroah-Hartman

    Stephen Boyd
     
  • 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 :
    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
    10: e3530000 cmp r3, #0 ; 0x0
    14: 1afffffd bne 10
    18: e7d1000c ldrb r0, [r1, ip]
    1c: ee10fe11 mrc 14, 0, pc, cr0, cr1, {0}
    20: 2afffffd bcs 1c
    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
    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 :
    0: e3a03000 mov r3, #0 ; 0x0
    4: ea000007 b 28
    8: ee100e11 mrc 14, 0, r0, cr0, cr1, {0}
    c: e3100202 tst r0, #536870912 ; 0x20000000
    10: 1afffffc bne 8
    14: e7d10003 ldrb r0, [r1, r3]
    18: ee10fe11 mrc 14, 0, pc, cr0, cr1, {0}
    1c: 2afffffd bcs 18
    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
    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: Tony Lindgren
    Cc: Arnd Bergmann
    Acked-by: Nicolas Pitre
    Cc: Daniel Walker
    Signed-off-by: Stephen Boyd
    Signed-off-by: Greg Kroah-Hartman

    Stephen Boyd
     
  • Commit 728674a7e466628df2aeec6d11a2ae1ef968fb67 moved virtio_console.c
    to drivers/tty/hvc/ under the perception of this being an hvc driver.
    It was such once, but these days it has generic communication
    capabilities as well, so move it to drivers/char/.

    In the future, the hvc part from this file can be split off and moved
    under drivers/tty/hvc/.

    Signed-off-by: Amit Shah
    CC: Rusty Russell
    Acked-by: Arnd Bergmann
    Signed-off-by: Greg Kroah-Hartman

    Amit Shah
     

14 Jan, 2011

1 commit

  • As requested by Arnd Bergmann, the hvc drivers are now
    moved to the drivers/tty/hvc/ directory. The virtio_console.c driver
    was also moved, as it required the hvc_console.h file to be able to be
    built, and it really is a hvc driver.

    Cc: Arnd Bergmann
    Signed-off-by: Greg Kroah-Hartman

    Greg Kroah-Hartman