16 Nov, 2015

7 commits

  • dma_addr_t may be defined as 32 or 64 bit depending on configuration,
    so it cannot be printed using the normal format strings, as
    gcc correctly warns:

    drivers/dma/at_hdmac.c: In function 'atc_prep_dma_interleaved':
    drivers/dma/at_hdmac.c:731:28: warning: format '%x' expects argument of type 'unsigned int', but argument 4 has type 'dma_addr_t {aka long long unsigned int}' [-Wformat=]

    This changes the format strings to use the special "%pad" format
    string that prints a dma_addr_t, and changes the arguments so we
    pass the address by reference as required.

    Signed-off-by: Arnd Bergmann
    Acked-by: Nicolas Ferre
    Signed-off-by: Vinod Koul

    Arnd Bergmann
     
  • dma_addr_t may be defined as 32 or 64 bit depending on configuration,
    so it cannot be printed using the normal format strings, as
    gcc correctly warns:

    drivers/dma/at_xdmac.c: In function 'at_xdmac_interleaved_queue_desc':
    drivers/dma/at_xdmac.c:922:51: warning: format '%x' expects argument of type 'unsigned int', but argument 5 has type 'dma_addr_t {aka long long unsigned int}' [-Wformat=]

    This changes the format strings to use the special "%pad" format
    string that prints a dma_addr_t, and changes the arguments so we
    pass the address by reference as required.

    Signed-off-by: Arnd Bergmann
    Signed-off-by: Vinod Koul

    Arnd Bergmann
     
  • The sdma_probe function will call sdma_event_remap, but sdma_event_remap
    marked with the __init annotation which make the kbuild complains as the
    following log:

    WARNING: drivers/dma/built-in.o(.text+0x56fc): Section mismatch in reference
    from the function sdma_probe() to the function .init.text:sdma_event_remap()
    The function sdma_probe() references
    the function __init sdma_event_remap().
    This is often because sdma_probe lacks a __init
    annotation or the annotation of sdma_event_remap is wrong.

    Remove the __init annotation on sdma_event_remap to kill this build warning

    Signed-off-by: Jason Liu
    Acked-by: Arnd Bergmann
    Signed-off-by: Vinod Koul

    Jason Liu
     
  • The current code uses bits 0-2 instead of 4-6 as the comment says.

    Fixes: 633e42b8c546 ('dmaengine: edma: Get qDMA channel information from HW also')
    Signed-off-by: Dan Carpenter
    Acked-by: Peter Ujfalusi
    Signed-off-by: Vinod Koul

    Dan Carpenter
     
  • During the edma rework, a build error was introduced for the
    case that CONFIG_OF is disabled:

    drivers/built-in.o: In function `edma_tc_set_pm_state':
    :(.text+0x43bf0): undefined reference to `of_find_device_by_node'

    As the edma_tc_set_pm_state() function does nothing in case
    we are running without OF, this adds an IS_ENABLED() check
    that turns the function into an empty stub then and avoids the
    link error.

    Signed-off-by: Arnd Bergmann
    Fixes: ca304fa9bb76 ("ARM/dmaengine: edma: Public API to use private struct pointer")
    Acked-by: Peter Ujfalusi
    Signed-off-by: Vinod Koul

    Arnd Bergmann
     
  • If the call to pm_runtime_get_sync() failed, Runtime PM was left
    enabled.

    Signed-off-by: Geert Uytterhoeven
    Signed-off-by: Vinod Koul

    Geert Uytterhoeven
     
  • If CONFIG_PREEMPT=y:

    Unable to handle kernel NULL pointer dereference at virtual address 00000014
    pgd = c0003000
    [00000014] *pgd=80000040004003, *pmd=00000000
    Internal error: Oops: 206 [#1] PREEMPT SMP ARM
    Modules linked in:
    CPU: 0 PID: 17 Comm: kworker/0:1 Tainted: G W 4.3.0-rc3-koelsch-022
    71-g705498fc5e6a5da8-dirty #1789
    Hardware name: Generic R8A7791 (Flattened Device Tree)
    Workqueue: pm pm_runtime_work
    task: ef578e40 ti: ef57a000 task.ti: ef57a000
    PC is at usb_dmac_chan_halt+0xc/0xc0
    LR is at usb_dmac_runtime_suspend+0x28/0x38
    pc : [] lr : [] psr: 80000113
    sp : ef57bdf8 ip : 00000008 fp : 00000003
    r10: 00000008 r9 : c06ab928 r8 : ef49e810
    r7 : 00000000 r6 : 000000ac r5 : ef770010 r4 : 00000000
    r3 : 00000000 r2 : 8ffc2b84 r1 : 00000000 r0 : ef770010
    Flags: Nzcv IRQs on FIQs on Mode SVC_32 ISA ARM Segment kernel
    Control: 30c5307d Table: 40003000 DAC: fffffffd
    Process kworker/0:1 (pid: 17, stack limit = 0xef57a210)
    Stack: (0xef57bdf8 to 0xef57c000)

    [...

    [] (usb_dmac_chan_halt) from [] (usb_dmac_runtime_suspend+0x28/0x38)
    [] (usb_dmac_runtime_suspend) from [] (pm_genpd_runtime_suspend+0x74/0x23c)

    This happens because usb_dmac_probe() calls pm_runtime_put() before
    usb_dmac_chan_probe(), leading to the device being suspended before the
    DMA channels are initialized, causing a NULL pointer dereference.

    Move the call to pm_runtime_put() to the end of usb_dmac_probe() to fix
    this.

    Add a check to usb_dmac_runtime_suspend() to prevent the crash from
    happening in the error path.

    Reported-by: Sergei Shtylyov
    Signed-off-by: Geert Uytterhoeven
    Tested-by: Yoshihiro Shimoda
    Signed-off-by: Vinod Koul

    Geert Uytterhoeven
     

11 Nov, 2015

1 commit

  • Pull dmaengine updates from Vinod Koul:
    "This time we have a very typical update which is mostly fixes and
    updates to drivers and no new drivers.

    - the biggest change is coming from Peter for edma cleanup which even
    caused some last minute regression, things seem settled now
    - idma64 and dw updates
    - iotdma updates
    - module autoload fixes for various drivers
    - scatter gather support for hdmac"

    * tag 'dmaengine-4.4-rc1' of git://git.infradead.org/users/vkoul/slave-dma: (77 commits)
    dmaengine: edma: Add dummy driver skeleton for edma3-tptc
    Revert "ARM: DTS: am33xx: Use the new DT bindings for the eDMA3"
    Revert "ARM: DTS: am437x: Use the new DT bindings for the eDMA3"
    dmaengine: dw: some Intel devices has no memcpy support
    dmaengine: dw: platform: provide platform data for Intel
    dmaengine: dw: don't override platform data with autocfg
    dmaengine: hdmac: Add scatter-gathered memset support
    dmaengine: hdmac: factorise memset descriptor allocation
    dmaengine: virt-dma: Fix kernel-doc annotations
    ARM: DTS: am437x: Use the new DT bindings for the eDMA3
    ARM: DTS: am33xx: Use the new DT bindings for the eDMA3
    dmaengine: edma: New device tree binding
    dmaengine: Kconfig: edma: Select TI_DMA_CROSSBAR in case of ARCH_OMAP
    dmaengine: ti-dma-crossbar: Add support for crossbar on AM33xx/AM43xx
    dmaengine: edma: Merge the of parsing functions
    dmaengine: edma: Do not allocate memory for edma_rsv_info in case of DT boot
    dmaengine: edma: Refactor the dma device and channel struct initialization
    dmaengine: edma: Get qDMA channel information from HW also
    dmaengine: edma: Merge map_dmach_to_queue into assign_channel_eventq
    dmaengine: edma: Correct PaRAM access function names (_parm_ to _param_)
    ...

    Linus Torvalds
     

05 Nov, 2015

3 commits

  • Pull char/misc driver updates from Greg KH:
    "Here is the big char/misc driver update for 4.4-rc1. Lots of
    different driver and subsystem updates, hwtracing being the largest
    with the addition of some new platforms that are now supported. Full
    details in the shortlog.

    All of these have been in linux-next for a long time with no reported
    issues"

    * tag 'char-misc-4.4-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc: (181 commits)
    fpga: socfpga: Fix check of return value of devm_request_irq
    lkdtm: fix ACCESS_USERSPACE test
    mcb: Destroy IDA on module unload
    mcb: Do not return zero on error path in mcb_pci_probe()
    mei: bus: set the device name before running fixup
    mei: bus: use correct lock ordering
    mei: Fix debugfs filename in error output
    char: ipmi: ipmi_ssif: Replace timeval with timespec64
    fpga: zynq-fpga: Fix issue with drvdata being overwritten.
    fpga manager: remove unnecessary null pointer checks
    fpga manager: ensure lifetime with of_fpga_mgr_get
    fpga: zynq-fpga: Change fw format to handle bin instead of bit.
    fpga: zynq-fpga: Fix unbalanced clock handling
    misc: sram: partition base address belongs to __iomem space
    coresight: etm3x: adding documentation for sysFS's cpu interface
    vme: 8-bit status/id takes 256 values, not 255
    fpga manager: Adding FPGA Manager support for Xilinx Zynq 7000
    ARM: zynq: dt: Updated devicetree for Zynq 7000 platform.
    ARM: dt: fpga: Added binding docs for Xilinx Zynq FPGA manager.
    ver_linux: proc/modules, limit text processing to 'sed'
    ...

    Linus Torvalds
     
  • Pull tty/serial driver updates from Greg KH:
    "Here is the big tty and serial driver update for 4.4-rc1.

    Lots of serial driver updates and a few small tty core changes. Full
    details in the shortlog.

    All of these have been in linux-next for a while"

    * tag 'tty-4.4-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty: (148 commits)
    tty: Use unbound workqueue for all input workers
    tty: Abstract tty buffer work
    tty: Prevent tty teardown during tty_write_message()
    tty: core: Use correct spinlock flavor in tiocspgrp()
    tty: Combine SIGTTOU/SIGTTIN handling
    serial: amba-pl011: fix incorrect integer size in pl011_fifo_to_tty()
    ttyFDC: Fix build problems due to use of module_{init,exit}
    tty: remove unneeded return statement
    serial: 8250_mid: add support for DMA engine handling from UART MMIO
    dmaengine: hsu: remove platform data
    dmaengine: hsu: introduce stubs for the exported functions
    dmaengine: hsu: make the UART driver in control of selecting this driver
    serial: fix mctrl helper functions
    serial: 8250_pci: Intel MID UART support to its own driver
    serial: fsl_lpuart: add earlycon support
    tty: disable unbind for old 74xx based serial/mpsc console port
    serial: pl011: Spelling s/clocks-names/clock-names/
    n_tty: Remove reader wakeups for TTY_BREAK/TTY_PARITY chars
    tty: synclink, fix indentation
    serial: at91, fix rs485 properties
    ...

    Linus Torvalds
     
  • The eDMA3 TPTC does not need any software configuration, but it is a
    separate IP block in the SoC. In order the omap hwmod core to be able to
    handle the TPTC resources correctly in regards of PM we need to have a
    driver loaded for it.
    This patch will add a dummy driver skeleton without probe or remove
    callbacks provided.

    Signed-off-by: Peter Ujfalusi
    Reported-by: Olof Johansson
    Tested-by: Felipe Balbi
    Signed-off-by: Vinod Koul

    Peter Ujfalusi
     

31 Oct, 2015

7 commits


29 Oct, 2015

3 commits


27 Oct, 2015

13 commits

  • In kernel-doc annotations parameters need to start with a @ for them to be
    properly recognized. Add those where missing for virt-dma.

    Signed-off-by: Lars-Peter Clausen
    Signed-off-by: Vinod Koul

    Lars-Peter Clausen
     
  • With the old binding and driver architecture we had many issues:
    No way to assign eDMA channels to event queues, thus not able to tune the
    system by moving specific DMA channels to low/high priority servicing. We
    moved the cyclic channels to high priority within the code, but that was
    just a workaround to this issue.
    Memcopy was fundamentally broken: even if the driver scanned the DT/devices
    in the booted system for direct DMA users (which is not effective when the
    events are going through a crossbar) and created a map of 'used' channels,
    this information was not really usable. Since via dmaengien API the eDMA
    driver will be called with _some_ channel number, we would try to request
    this channel when any channel is requested for memcpy. By luck we got
    channel which is not used by any device most of the time so things worked,
    but if a device would have been using the given channel, but not requested
    it, the memcpy channel would have been waiting for HW event.
    The old code had the am33xx/am43xx DMA event router handling embedded. This
    should have been done in a separate driver since it is not part of the
    actual eDMA IP.
    There were no way to 'lock' PaRAM slots to be used by the DSP for example
    when booting with DT.
    In DT boot the edma node used more than one hwmod which is not a good
    practice and the kernel prints warning because of this.

    With the new bindings and the changes in the driver we can:
    - No regression with Legacy binding and non DT boot
    - DMA channels can be assigned to any TC (to set priority)
    - PaRAM slots can be reserved for other cores to use
    - Dynamic power management for CC and TCs, if only TC0 is used all other TC
    can be powered down for example

    Signed-off-by: Peter Ujfalusi
    Signed-off-by: Vinod Koul

    Peter Ujfalusi
     
  • Since the crossbar is needed for eDMA when it is used on OMAP like
    platforms (am335x/am437x and later DRA7xx), select the crossbar to be built
    if ARCH_OMAP is set.

    Signed-off-by: Peter Ujfalusi
    Signed-off-by: Vinod Koul

    Peter Ujfalusi
     
  • The DMA event crossbar on AM33xx/AM43xx is different from the one found in
    DRA7x family.
    Instead of a single event crossbar it has 64 identical mux attached to each
    eDMA event line. When the 0 event mux is selected, the default mapped event
    is going to be routed to the corresponding eDMA event line. If different
    mux is selected, then the selected event is going to be routed to the given
    eDMA event.

    Signed-off-by: Peter Ujfalusi
    Signed-off-by: Vinod Koul

    Peter Ujfalusi
     
  • Instead of nesting functions just merge them since the resulting function
    is still small and readable.

    Signed-off-by: Peter Ujfalusi
    Signed-off-by: Vinod Koul

    Peter Ujfalusi
     
  • The channel/slot reservation is not supported when booted with DT so there
    is not need to allocate memory.

    Signed-off-by: Peter Ujfalusi
    Signed-off-by: Vinod Koul

    Peter Ujfalusi
     
  • Move all code under one function to do the dma device and eDMA channel
    related setup so they are not scattered around the driver.

    Signed-off-by: Peter Ujfalusi
    Signed-off-by: Vinod Koul

    Peter Ujfalusi
     
  • Query the number of qDMA channels from CCCFG register.

    Signed-off-by: Peter Ujfalusi
    Signed-off-by: Vinod Koul

    Peter Ujfalusi
     
  • edma_assign_channel_eventq() is a wrapper around edma_map_dmach_to_queue()
    We can merge the content of the later so we will have only one function
    to be used for mapping channels to given eventq

    Signed-off-by: Peter Ujfalusi
    Signed-off-by: Vinod Koul

    Peter Ujfalusi
     
  • These inline functions are designed to modify parts of the PaRAM in eDMA.
    Change the names accordingly.

    Signed-off-by: Peter Ujfalusi
    Signed-off-by: Vinod Koul

    Peter Ujfalusi
     
  • Instead of passing a pointer to struct edma_cc and the channel number,
    pass only the pointer to the edma_chan structure for the given channel.
    This struct contains all the information needed by the functions and the
    use of this makes it obvious that most of the sanity checks can be removed
    from the driver.

    Signed-off-by: Peter Ujfalusi
    Signed-off-by: Vinod Koul

    Peter Ujfalusi
     
  • If the transfer is shorted then 64K we can complete it with one ACNT burst
    by configuring ACNT to the length of the copy, this require one paRAM slot.
    Otherwise we use two paRAM slots for the copy:
    slot1: will copy (length / 32767) number of 32767 byte long blocks
    slot2: will be configured to copy the remaining data.

    According to tests this patch increases the throughput of memcpy from
    ~3MB/s to 15MB/s

    Signed-off-by: Peter Ujfalusi
    Signed-off-by: Vinod Koul

    Peter Ujfalusi
     
  • Despite the claim by the original commit adding the memcpy
    support, eDMA does not have constraint on the alignment of src, dst
    or length in increment mode.

    Signed-off-by: Peter Ujfalusi
    Signed-off-by: Vinod Koul

    Peter Ujfalusi
     

26 Oct, 2015

1 commit

  • * device-properties:
    ACPI / property: Fix subnode lookup scope for data-only subnodes
    acpi-dma: Add support for "dma-names" device property
    device property: Add fwnode_property_match_string()
    ACPI / property: Extend device_get_next_child_node() to data-only nodes
    ACPI / gpio: Split acpi_get_gpiod_by_index()
    ACPI / property: Extend fwnode_property_* to data-only subnodes
    ACPI / property: Expose data-only subnodes via sysfs
    ACPI / property: Add support for data-only subnodes
    ACPI / property: Add routine for extraction of _DSD properties

    Rafael J. Wysocki
     

25 Oct, 2015

1 commit


18 Oct, 2015

2 commits

  • There are no platforms where it's not possible to calculate
    the number of channels based on IO space length, and since
    that is the only purpose for struct hsu_dma_platform_data,
    removing it.

    Suggested-by: Andy Shevchenko
    Signed-off-by: Heikki Krogerus
    Acked-by: Vinod Koul
    Acked-by: Andy Shevchenko
    Signed-off-by: Greg Kroah-Hartman

    Heikki Krogerus
     
  • HSU (High Speed UART) DMA engine, like the name suggests, is
    an integrated DMA engine for UART and UART alone. Therefore,
    making the UART drivers responsible of selecting it and
    removing the user selectable option for it. The UARTs with
    this DMA engine can always select HSU_DMA when
    SERIAL_8250_DMA option is enabled.

    Suggested-by: Andy Shevchenko
    Signed-off-by: Heikki Krogerus
    Acked-by: Vinod Koul
    Acked-by: Andy Shevchenko
    Signed-off-by: Greg Kroah-Hartman

    Heikki Krogerus
     

14 Oct, 2015

2 commits