30 Jan, 2016

1 commit


26 Nov, 2015

1 commit

  • The remoteproc core uses a static ida named rproc_dev_index for
    assigning an automatic index number to a registered remoteproc.
    The ida core may allocate some internal idr cache layers and ida
    bitmap upon any ida allocation, and all these layers are truely
    freed only upon the ida destruction. The rproc_dev_index ida is
    not destroyed at present, leading to a memory leak when using the
    remoteproc core as a module and atleast one rproc device is
    registered and unregistered.

    Fix this by invoking ida_destroy() in the remoteproc core module
    exit.

    Signed-off-by: Suman Anna
    Signed-off-by: Ohad Ben-Cohen

    Suman Anna
     

18 Jun, 2015

1 commit

  • Fix this:

    drivers/remoteproc/remoteproc_core.c: In function 'rproc_get_by_phandle':
    >> drivers/remoteproc/remoteproc_core.c:1167:2: error: implicit declaration of function 'of_find_node_by_phandle' [-Werror=implicit-function-declaration]
    np = of_find_node_by_phandle(phandle);

    Reported-by: kbuild test robot
    Cc: Dave Gerlach
    Cc: Suman Anna
    Signed-off-by: Ohad Ben-Cohen

    Ohad Ben-Cohen
     

17 Jun, 2015

2 commits

  • The rproc_da_to_va API is currently used to perform any device to
    kernel address translations to meet the different needs of the remoteproc
    core/drivers (eg: loading). The functionality is achieved within the
    remoteproc core, and is limited only for carveouts allocated within the
    core.

    A new rproc ops, da_to_va, is added to provide flexibility to platform
    implementations to perform the address translation themselves when the
    above conditions cannot be met by the implementations. The rproc_da_to_va()
    API is extended to invoke this ops if present, and fallback to regular
    processing if the platform implementation cannot provide the translation.
    This will allow any remoteproc implementations to translate addresses for
    dedicated memories like internal memories.

    While at this, also update the rproc_da_to_va() documentation since it
    is an exported function.

    Signed-off-by: Suman Anna
    Signed-off-by: Dave Gerlach
    Signed-off-by: Ohad Ben-Cohen

    Suman Anna
     
  • Allow users of remoteproc the ability to get a handle to an rproc by
    passing a phandle supplied in the user's device tree node. This is
    useful in situations that require manual booting of the rproc.

    This patch uses the code removed by commit 40e575b1d0b3 ("remoteproc:
    remove the get_by_name/put API") for the ref counting but is modified
    to use a simple list and locking mechanism and has rproc_get_by_name
    replaced with an rproc_get_by_phandle API.

    Signed-off-by: Dave Gerlach
    Signed-off-by: Suman Anna
    [fix order of Signed-off-by tags]
    Signed-off-by: Ohad Ben-Cohen

    Dave Gerlach
     

02 May, 2015

1 commit

  • Fix all the checkpatch warnings in the core remoteproc
    code. The fixes cover the following warnings:
    1. WARNING: void function return statements are not generally useful
    2. WARNING: Possible unnecessary 'out of memory' message
    3. WARNING: line over 80 characters
    4. WARNING: braces {} are not necessary for single statement blocks
    5. WARNING: Unnecessary space before function pointer arguments

    Signed-off-by: Suman Anna
    Signed-off-by: Ohad Ben-Cohen

    Suman Anna
     

12 Mar, 2015

1 commit

  • The remoteproc framework currently relies on iommu_present() on
    the bus the device is on, to perform MMU management. However, this
    logic doesn't scale for multi-arch, especially for processors that
    do not have an IOMMU. Replace this logic instead by using a h/w
    capability flag for the presence of IOMMU in the rproc structure.

    This issue is seen on OMAP platforms when trying to add a remoteproc
    driver for a small Cortex M3 called the WkupM3 used for suspend /
    resume management on TI AM335/AM437x SoCs. This processor does not
    have an MMU. Same is the case with another processor subsystem
    PRU-ICSS on AM335/AM437x. All these are platform devices, and the
    current iommu_present check will not scale for the same kernel image
    to support OMAP4/OMAP5 and AM335/AM437x.

    The existing platform implementation drivers - OMAP remoteproc, STE
    Modem remoteproc and DA8xx remoteproc, are updated as well to properly
    configure the newly added rproc field.

    Cc: Robert Tivy
    Cc: Linus Walleij
    Signed-off-by: Suman Anna
    [small change in the commit title and in a single comment]
    Signed-off-by: Ohad Ben-Cohen

    Suman Anna
     

01 Jul, 2013

2 commits

  • Use kmemdup instead of kmalloc + memcpy.

    Signed-off-by: Thomas Meyer
    Signed-off-by: Ohad Ben-Cohen

    Thomas Meyer
     
  • It is not preferable to have the allocated pages for carveout
    memories freed before they are unmapped. The code that deals
    with the cleanup of carveout memories is therefore moved after
    the corresponding mapping entries were cleaned up.

    This is mostly a no-op since the remote processors are already
    stopped when the cleanup function is called, but this will make
    the cleanup code follow the exact reverse path of allocation.

    Signed-off-by: Suman Anna
    Signed-off-by: Ohad Ben-Cohen

    Suman Anna
     

30 Jun, 2013

1 commit


08 May, 2013

1 commit

  • Pull remoteproc update from Ohad Ben-Cohen:

    - Some refactoring, cleanups and small improvements from Sjur
    Brændeland. The improvements are mainly about better supporting
    varios virtio properties (such as virtio's config space, status and
    features). I now see that I messed up while commiting one of Sjur's
    patches and erroneously put myself as the author, as well as letting
    a nasty typo sneak in. I will not fix this in order to avoid
    rebasing the patches. Sjur - sorry!

    - A new remoteproc driver for OMAP-L13x (technically a DaVinci
    platform) from Robert Tivy.

    - Extend OMAP support to OMAP5 as well, from Vincent Stehlé.

    - Fix Kconfig VIRTUALIZATION dependency, from Suman Anna (a
    non-critical fix which arrived late during the rc cycle).

    * tag 'remoteproc-3.10' of git://git.kernel.org/pub/scm/linux/kernel/git/ohad/remoteproc:
    remoteproc: fix kconfig dependencies for VIRTIO
    remoteproc/davinci: add a remoteproc driver for OMAP-L13x DSP
    remoteproc: support default firmware name in rproc_alloc()
    remoteproc/omap: support OMAP5 too
    remoteproc: set vring addresses in resource table
    remoteproc: support virtio config space.
    remoteproc: perserve resource table data
    remoteproc: calculate max_notifyid by counting vrings
    remoteproc: code cleanup of resource parsing
    remoteproc: parse STE-firmware and find resource table address
    remoteproc: add find_loaded_rsc_table firmware ops
    remoteproc: refactor rproc_elf_find_rsc_table()

    Linus Torvalds
     

01 May, 2013

1 commit

  • Pull trivial tree updates from Jiri Kosina:
    "Usual stuff, mostly comment fixes, typo fixes, printk fixes and small
    code cleanups"

    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial: (45 commits)
    mm: Convert print_symbol to %pSR
    gfs2: Convert print_symbol to %pSR
    m32r: Convert print_symbol to %pSR
    iostats.txt: add easy-to-find description for field 6
    x86 cmpxchg.h: fix wrong comment
    treewide: Fix typo in printk and comments
    doc: devicetree: Fix various typos
    docbook: fix 8250 naming in device-drivers
    pata_pdc2027x: Fix compiler warning
    treewide: Fix typo in printks
    mei: Fix comments in drivers/misc/mei
    treewide: Fix typos in kernel messages
    pm44xx: Fix comment for "CONFIG_CPU_IDLE"
    doc: Fix typo "CONFIG_CGROUP_CGROUP_MEMCG_SWAP"
    mmzone: correct "pags" to "pages" in comment.
    kernel-parameters: remove outdated 'noresidual' parameter
    Remove spurious _H suffixes from ifdef comments
    sound: Remove stray pluses from Kconfig file
    radio-shark: Fix printk "CONFIG_LED_CLASS"
    doc: put proper reference to CONFIG_MODULE_SIG_ENFORCE
    ...

    Linus Torvalds
     

24 Apr, 2013

1 commit


07 Apr, 2013

5 commits


05 Apr, 2013

3 commits


28 Feb, 2013

2 commits


02 Oct, 2012

2 commits

  • The dma_addr_t type can be either u32 or u64 depending on
    the configuration. We should use a format specifyer for the
    larger type and explicitly cast to it.

    Sparse warnings:
    drivers/remoteproc/remoteproc_core.c:234:2: warning:
    format ‘%x’ expects argument of type ‘unsigned int’,
    but argument 6 has type ‘dma_addr_t’ [-Wformat]

    drivers/remoteproc/remoteproc_core.c:596:2: warning:
    format ‘%x’ expects argument of type ‘unsigned int’,
    but argument 5 has type ‘dma_addr_t’ [-Wformat]

    drivers/remoteproc/remoteproc_core.c:634:3:
    warning: format ‘%x’ expects argument of type ‘unsigned int’,
    but argument 5 has type ‘dma_addr_t’ [-Wformat]

    Signed-off-by: Emil Goode
    [fix commit log typos]
    Signed-off-by: Ohad Ben-Cohen

    Emil Goode
     
  • We only need to allocate mapping if there is an IOMMU domain.

    Otherwise, when the mappings are released, the assumption that
    an IOMMU domain is there will crash and burn.

    CC: stable@vger.kernel.org
    Signed-off-by: Dan Carpenter
    [ohad: revise commit log]
    Signed-off-by: Ohad Ben-Cohen

    Dan Carpenter
     

19 Sep, 2012

1 commit

  • Some of the rproc drivers (STE modem specifically) needs to know
    the range of the notification IDs used for notifying the device.

    Maintain a variable in struct rproc holding the largest allocated
    notification id, so low-level rproc drivers could access it.

    Signed-off-by: Sjur Brændeland
    [ohad: rebase, slightly edit commit log]
    Signed-off-by: Ohad Ben-Cohen

    Sjur Brændeland
     

18 Sep, 2012

3 commits

  • Add a 'recovery' debugfs entry to dynamically disable/enable recovery
    at runtime. This is useful when one is trying to debug an rproc crash;
    without it, a recovery will immediately take place, making it harder
    to debug the crash.

    Contributions from Subramaniam Chanderashekarapuram.

    Examples:

    - disabling recovery:
    $ echo disabled > /remoteproc/remoteproc0/recovery

    - in case you want to recover a crash, but keep recovery disabled
    (useful in debugging sessions when you expect additional crashes
    you want to debug):
    $ echo recover > /remoteproc/remoteproc0/recovery

    - enabling recovery:
    $ echo enabled > /remoteproc/remoteproc0/recovery

    Signed-off-by: Fernando Guzman Lugo
    [ohad: some white space, commentary and commit log changes]
    Signed-off-by: Ohad Ben-Cohen

    Fernando Guzman Lugo
     
  • Add rproc_trigger_recovery() which takes care of the recovery itself,
    by removing, and re-adding, all of the remoteproc's virtio devices.

    This resets all virtio users of the remote processor, during which
    the remote processor is powered off and on again.

    Signed-off-by: Fernando Guzman Lugo
    [ohad: introduce rproc_add_virtio_devices to avoid 1.copying code 2.anomaly]
    [ohad: some white space, naming and commit log changes]
    Signed-off-by: Ohad Ben-Cohen

    Fernando Guzman Lugo
     
  • Allow low-level remoteproc drivers to report rproc crashes by exporting
    a new rproc_report_crash() function (invoking this from non-rproc drivers
    is probably wrong, and should be carefully scrutinized if ever needed).

    rproc_report_crash() can be called from any context; it offloads the
    tasks of handling the crash to a separate thread.

    Handling the crash from a separate thread is helpful because:
    - Ability to call invoke rproc_report_crash() from atomic context, due to
    the fact that many crashes trigger an interrupt, so this function can be
    called directly from ISR context.
    - Avoiding deadlocks which could happen if rproc_report_crash() is called
    from a function which indirectly holds the rproc lock.

    Handling the crash might involve:
    - Remoteproc register dump
    - Remoteproc stack dump
    - Remoteproc core dump
    - Saving Remoteproc traces so they can be read after the crash
    - Reseting the remoteproc in order to make it functional again (hard recovery)

    Right now, we only print the crash type which was detected, and only the
    mmufault type is supported. Remoteproc low-level drivers can add more types
    when needed.

    Signed-off-by: Fernando Guzman Lugo
    [ohad: some commentary, white space and commit log changes]
    Signed-off-by: Ohad Ben-Cohen

    Fernando Guzman Lugo
     

27 Jul, 2012

1 commit

  • Pull remoteproc update from Ohad Ben-Cohen:
    - custom binary format support from Sjur Brændeland
    - groundwork for recovery and runtime pm support
    - some cleanups and API simplifications

    Fix up conflicts in drivers/remoteproc/remoteproc_core.c due to clashes
    with earlier cleanups by Sjur Brændeland (with part of the cleanups
    moved into the new remoteproc_elf_loader.c file).

    * tag 'remoteproc-for-3.6' of git://git.kernel.org/pub/scm/linux/kernel/git/ohad/remoteproc:
    MAINTAINERS: add remoteproc's git
    remoteproc: Support custom firmware handlers
    remoteproc: Move Elf related functions to separate file
    remoteproc: Add function rproc_get_boot_addr
    remoteproc: Pass struct fw to load_segments and find_rsc_table.
    remoteproc: adopt the driver core's alloc/add/del/put naming
    remoteproc: remove the get_by_name/put API
    remoteproc: support non-iommu carveout assignment
    remoteproc: simplify unregister/free interfaces
    remoteproc: remove the now-redundant kref
    remoteproc: maintain a generic child device for each rproc
    remoteproc: allocate vrings on demand, free when not needed

    Linus Torvalds
     

15 Jul, 2012

4 commits

  • Firmware handling is made customizable.
    This is done by creating a separate ops structure for the
    firmware functions that depends on a particular firmware
    format (such as ELF). The ELF functions are default used
    unless the HW driver explicitly injects another firmware
    handler by updating rproc->fw_ops.
    The function rproc_da_to_va() is exported, as custom
    firmware handlers may need to use this function.

    Signed-off-by: Sjur Brændeland
    [ohad: namespace fixes, whitespace fixes, style fixes]
    Signed-off-by: Ohad Ben-Cohen

    Sjur Brændeland
     
  • Prepare for introduction of custom firmware loaders by
    moving all ELF related handling into a separate file.

    The functions: rproc_find_rsc_table(), rproc_fw_sanity_check(),
    rproc_find_rsc_table() and rproc_get_boot_addr() are moved
    to the new file remoteproc_elf_loader.c. The function
    rproc_da_to_va() is made non-static and is declared in
    remoteproc_internal.h

    No functional changes are introduced in this patch.

    Signed-off-by: Sjur Brændeland
    [ohad: rebase, fix kerneldoc, put prototypes in remoteproc_internal.h]
    Signed-off-by: Ohad Ben-Cohen

    Sjur Brændeland
     
  • Prepare for introduction of custom firmware loaders by
    moving the function operating on ELF data-structures into
    separate functions. Move lookup of the boot_addr in the
    ELF binary to the function rproc_get_boot_addr().

    Signed-off-by: Sjur Brændeland
    [rproc_get_boot_addr's kerneldoc: add missing @rproc line]
    [rproc_get_boot_addr's kerneldoc: minor style changes]
    Signed-off-by: Ohad Ben-Cohen

    Sjur Brændeland
     
  • Prepare for introduction of custom firmware loaders by changing
    the functions rproc_find_rcs_table() and rproc_load_segments()
    to use struct firmware as parameter.

    When the custom loader framework is introduced all calls into
    the firmware specific function must use struct firmware as
    parameter.

    Signed-off-by: Sjur Brændeland
    Signed-off-by: Ohad Ben-Cohen

    Sjur Brændeland
     

06 Jul, 2012

6 commits

  • To make remoteproc's API more intuitive for developers, we adopt
    the driver core's naming, i.e. alloc -> add -> del -> put. We'll also
    add register/unregister when their first user shows up.

    Otherwise - there's no functional change here.

    Suggested by Russell King .

    Cc: Russell King
    Cc: Fernando Guzman Lugo
    Cc: Sjur Brændeland
    Reviewed-by: Linus Walleij
    Acked-by: Stephen Boyd
    Signed-off-by: Ohad Ben-Cohen

    Ohad Ben-Cohen
     
  • Remove rproc_get_by_name() and rproc_put(), and the associated
    remoteproc infrastructure that supports it (i.e. klist and friends),
    because:

    1. No one uses them
    2. Using them is highly discouraged, and any potential user
    will be deeply scrutinized and encouraged to move.

    If a user, that absolutely can't live with the direct boot/shutdown
    model, does show up one day, then bringing this functionality back
    is going to be trivial.

    At this point though, keeping this functionality around is way too
    much of a maintenance burden.

    Cc: Sjur Brændeland
    Cc: Loic Pallardy
    Cc: Ludovic BARRE
    Cc: Michal Simek
    Cc: Fernando Guzman Lugo
    Cc: Suman Anna
    Cc: Mark Grosen
    Acked-by: Stephen Boyd
    Signed-off-by: Ohad Ben-Cohen

    Ohad Ben-Cohen
     
  • Publish carveout addresses on non-iommu setups too.

    Reported-and-acked-by: Sjur Brændeland
    Signed-off-by: Ohad Ben-Cohen

    Ohad Ben-Cohen
     
  • Simplify the unregister/free interfaces, and make them easier
    to understand and use, by moving to a symmetric and consistent
    alloc() -> register() -> unregister() -> free() flow.

    To create and register an rproc instance, one needed to invoke
    rproc_alloc() followed by rproc_register().

    To unregister and free an rproc instance, one now needs to invoke
    rproc_unregister() followed by rproc_free().

    Cc: Stephen Boyd
    Signed-off-by: Ohad Ben-Cohen

    Ohad Ben-Cohen
     
  • Now that every rproc instance contains a device, we don't need a
    kref anymore to maintain the refcount of the rproc instances:
    that's what device are good with!

    This patch removes the now-redundant kref, and switches to
    {get, put}_device instead of kref_{get, put}.

    We also don't need the kref's release function anymore, and instead,
    we just utilize the class's release handler (which is now responsible
    for all memory de-allocations).

    Cc: Stephen Boyd
    Cc: Fernando Guzman Lugo
    Signed-off-by: Ohad Ben-Cohen

    Ohad Ben-Cohen
     
  • For each registered rproc, maintain a generic remoteproc device whose
    parent is the low level platform-specific device (commonly a pdev, but
    it may certainly be any other type of device too).

    With this in hand, the resulting device hierarchy might then look like:

    omap-rproc.0
    |
    - remoteproc0 for suggesting and
    discussing these ideas in one of the remoteproc review threads and
    to Fernando Guzman Lugo for trying them out
    with the (upcoming) runtime PM support for remoteproc.

    Cc: Fernando Guzman Lugo
    Reviewed-by: Stephen Boyd
    Signed-off-by: Ohad Ben-Cohen

    Ohad Ben-Cohen