30 Jan, 2016
1 commit
-
Currently, if the resource table is completely missing in the
firmware, powering up the remoteproc fails silently. Add a message
indicating that the resource table is missing in the firmware.Signed-off-by: Stefan Agner
Acked-by: Suman Anna
Signed-off-by: Ohad Ben-Cohen
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
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
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 -
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
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 argumentsSigned-off-by: Suman Anna
Signed-off-by: Ohad Ben-Cohen
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
01 Jul, 2013
2 commits
-
Use kmemdup instead of kmalloc + memcpy.
Signed-off-by: Thomas Meyer
Signed-off-by: Ohad Ben-Cohen -
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
30 Jun, 2013
1 commit
-
Set 'ret' to -EINVAL when needed, so a sensible return value
is returned on errors.Signed-off-by: Wei Yongjun
[fix additional instances of this bug as well, update commit log]
Signed-off-by: Ohad Ben-Cohen
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()
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
...
24 Apr, 2013
1 commit
-
Fix typo in printk and comments within various drivers.
Signed-off-by: Masanari Iida
Signed-off-by: Jiri Kosina
07 Apr, 2013
5 commits
-
If rproc_alloc isn't given a firmware name, look for a default
one using the "rproc-%s-fw" template.Signed-off-by: Robert Tivy
[add commit log, document change, use snprintf, minor style change]
Signed-off-by: Ohad Ben-Cohen -
Set the vring addresses in the resource table so that
the remote device can read the actual addresses used.Signed-off-by: Sjur Brændeland
Acked-by: Ido Yariv
[rebase]
Signed-off-by: Ohad Ben-Cohen -
Support virtio configuration space and device status. The virtio
device can now access the resource table in shared memory.Signed-off-by: Sjur Brændeland
Acked-by: Ido Yariv
[rebase and style changes]
Signed-off-by: Ohad Ben-Cohen -
Copy resource table from first to second firmware loading.
After firmware is loaded to memory, update the vdevs resource
pointer to the resource table kept in device memory.Signed-off-by: Sjur Brændeland
Acked-by: Ido Yariv
[rebase, terminology and style changes]
Signed-off-by: Ohad Ben-Cohen -
Simplify handling of max_notifyid by simply counting the
number of vrings.Signed-off-by: Sjur Brændeland
Acked-by: Ido Yariv
[small terminology changes]
Signed-off-by: Ohad Ben-Cohen
05 Apr, 2013
3 commits
-
Combine the almost identical functions rproc_handle_virtio_rsc
and rproc_handle_boot_rsc.Signed-off-by: Sjur Brændeland
Acked-by: Ido Yariv
[small terminology and style changes]
Signed-off-by: Ohad Ben-Cohen -
Remove the vdev entry from the list before freeing it,
otherwise rproc->vdevs will explode.Cc: stable@vger.kernel.org
Signed-off-by: Sjur Brændeland
Acked-by: Ido Yariv
[edit subject, minor commit log edit, cc stable]
Signed-off-by: Ohad Ben-Cohen -
The new idr_alloc interface returns the allocated id back
on success, so fix the error path to check for negative
values. This was missed out in the newer idr interface
adoption patch, 15fc611 "remoteproc: convert to idr_alloc()".Signed-off-by: Suman Anna
Acked-by: Tejun Heo
Signed-off-by: Ohad Ben-Cohen
28 Feb, 2013
2 commits
-
Convert to the much saner new idr interface.
Signed-off-by: Tejun Heo
Cc: Ohad Ben-Cohen
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds -
idr_destroy() can destroy idr by itself and idr_remove_all() is being
deprecated. Drop its usage.Signed-off-by: Tejun Heo
Cc: Ohad Ben-Cohen
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds
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 -
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
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
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/recoverySigned-off-by: Fernando Guzman Lugo
[ohad: some white space, commentary and commit log changes]
Signed-off-by: Ohad Ben-Cohen -
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 -
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
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 simplificationsFix 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
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 -
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.hNo 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 -
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 -
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
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 -
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 -
Publish carveout addresses on non-iommu setups too.
Reported-and-acked-by: Sjur Brændeland
Signed-off-by: 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 -
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 -
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