Commit graph

266 commits

Author SHA1 Message Date
Mathieu Poirier
f72b3bc46d coresight: add API to get sink from path
Add an API allowing external code to quickly get a handle on the
sink within a path.  The sink is always last, but adding an API allows
to keep the path's node structure private and remove redundant checks.

Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit b6404e21f023e4aa208a0ba03d55a9c8a57cb940)
2016-06-01 15:30:12 -06:00
Mathieu Poirier
fde79d4de7 coresight: associating path with session rather than tracer
When using the Coresight framework from the sysFS interface a
tracer is always handling a single session and as such, a path
can be associated with a tracer.  But when supporting multiple
session per tracer there is no guarantee that sessions will always
have the same path from source to sink.

This patch is removing the automatic association between path and
tracers.  The building of a path and enablement of the components
in the path are decoupled, allowing for the association of a path
with a session rather than a tracer.

To keep backward functionality with the current sysFS access methods
a per-cpu place holder is used to keep a handle on the path built when
tracers are enabled.  Lastly APIs to build paths and enable tracers are
made public so that other subsystem can interact with the Coresight
framework.

Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit b3e94405941e6916d5e365454d74560c2bea47ca)
2016-06-01 15:30:11 -06:00
Eric Long
e1e8321c38 coresight: etm4x: Check every parameter used by dma_xx_coherent.
The dma_alloc_coherent return an "void *" not an "void __iomen *".
It uses the wrong parameters when calls dma_free_coherent function.

The sparse tool output logs as the following:
coresight-tmc.c:199:23:    expected void *<noident>
coresight-tmc.c:199:23:    got void [noderef] <asn:2>*vaddr
coresight-tmc.c:336:30: warning: incorrect type in assignment
(different address spaces)
coresight-tmc.c:336:30:    expected char *buf
coresight-tmc.c:336:30:    got void [noderef] <asn:2>*
coresight-tmc.c:769:50: warning: incorrect type in argument 4
(different base types)
coresight-tmc.c:769:50:    expected unsigned long long
[unsigned] [usertype] dma_handle
coresight-tmc.c:769:50:    got restricted gfp_t

Signed-off-by: Eric Long <eric.long@linaro.org>
Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit 61390593f72377c3a8f41ef998462e2d3985adac)
2016-06-01 15:30:11 -06:00
Eric Long
fea6fe15e3 coresight: "DEVICE_ATTR_RO" should defined as static.
"DEVICE_ATTR_RO(name)" should be defined as static. And
there is an unnecessary space at the front of the code.

The sparse tool output logs as the following:
coresight-etm4x.c:2224:1: warning: symbol 'dev_attr_trcoslsr' was
not declared. Should it be static?
coresight-etm4x.c:2225:1: warning: symbol 'dev_attr_trcpdcr' was
not declared. Should it be static?
coresight-etm4x.c:2226:1: warning: symbol 'dev_attr_trcpdsr' was
not declared. Should it be static?
And the smatch tool output logs as the following:
of_coresight.c:89 of_coresight_alloc_memory() warn:
inconsistent indenting

Signed-off-by: Eric Long <eric.long@linaro.org>
Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit bf16e5b8cdeabc1fe6565af0be475bb2084dc388)
2016-06-01 15:30:10 -06:00
Mathieu Poirier
8a403a74c1 coresight: implementing 'cpu_id()' API
Other than plainly parsing the device tree there is no way to
know which CPU a tracer is affined to.  As such adding an
interface to lookup the CPU field enclosed in the etm_drvdata
structure that was initialised at boot time.

Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit 52210c8745e418f82f3f0aeeee01d7bc4858812a)
2016-06-01 15:30:09 -06:00
Mathieu Poirier
b24ef072a9 coresight: removing bind/unbind options from sysfs
The coresight drivers have absolutely no control over bind and unbind
operations triggered from sysfs. The operations simply can't be
cancelled or denied event when one or several tracing sessions are
under way.  Since the memory associated to individual device is
invariably freed, the end result is a kernel crash when the path from
source to sink is travelled again as demonstrated here[1].

One solution could be to keep track of all the path (i.e tracing
session) that get created and iterate through the elements of those path
looking for the coresight device that is being removed.  This proposition
doesn't scale well since there is no upper bound on the amount of
concurrent trace session that can be created.

With the above in mind, this patch prevent devices from being unbounded
from their driver by using the driver->suppress_bind_attr option.  That way
trace sessions can be managed without fearing to loose devices.

Since device can't be removed anymore the xyz_remove() functions found in
each driver is also removed.

[1]. http://www.spinics.net/lists/arm-kernel/msg474952.html

Reported-by: Rabin Vincent <rabin@rab.in>
Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit b15f0fb657e040401d875d11ae13b269af8a16e0)
2016-06-01 15:30:08 -06:00
Mathieu Poirier
c7d05101bc coresight: remove csdev's link from topology
In function 'coresight_unregister()', all references to the csdev that
is being taken away need to be removed from the topology.  Otherwise
building the next coresight path from source to sink may use memory
that has been released.

Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit ad725aee070caf8fa93d84d6fb78321f9642db18)
2016-06-01 15:30:06 -06:00
Mathieu Poirier
f03467661c coresight: release reference taken by 'bus_find_device()'
The reference count taken by function bus_find_device() needs
to be released if a child device is found, something this patch
is adding.

Reported-by: Rabin Vincent <rabin@rab.in>
Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit f2dfab3568fc32afeac8b698481e80e7ab2dc658)
2016-06-01 15:30:04 -06:00
Mathieu Poirier
27aa9ceebe coresight: coresight_unregister() function cleanup
In its current form the code never frees csdev->refcnt allocated
in coresight_register().  There is also a problem with csdev->conns
that is freed before device_unregister() rather than in the device
release function.

This patch addresses both issues by moving kfree(csdev->conns) to
coresight_device_release() and freeing csdev->refcnt, also in
the same function.

Reported-by: Rabin Vincent <rabin@rab.in>
Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit fae54158792aec705620bdc3938d342879204f0c)
2016-06-01 15:30:03 -06:00
Mathieu Poirier
3e42ab0f61 coresight: fixing lockdep error
On some platform the following lockdep error occurs when doing simple
manipulations:

    [   23.197021]
    [   23.198608] ======================================================
    [   23.205078] [ INFO: possible circular locking dependency detected ]
    [   23.211639] 4.4.0-rc8-00025-gbbf360b #172 Not tainted
    [   23.216918] -------------------------------------------------------
    [   23.223480] sh/858 is trying to acquire lock:
    [   23.228057]  (coresight_mutex){+.+.+.}, at: [<c0415d40>] coresight_enable+0x1c/0x1b4
    [   23.236206]
    [   23.236206] but task is already holding lock:
    [   23.242309]  (s_active#52){++++.+}, at: [<c01d4b40>] kernfs_fop_write+0x5c/0x1c0
    [   23.250122]
    [   23.250122] which lock already depends on the new lock.
    [   23.250122]
    [   23.258697]
    [   23.258697] the existing dependency chain (in reverse order) is:
    [   23.266510]
    -> #1 (s_active#52){++++.+}:
    [   23.270843]        [<c01d30ec>] __kernfs_remove+0x294/0x35c
    [   23.276672]        [<c01d3e44>] kernfs_remove_by_name_ns+0x44/0x8c
    [   23.283172]        [<c01d6318>] remove_files+0x3c/0x84
    [   23.288543]        [<c01d66b4>] sysfs_remove_group+0x48/0x9c
    [   23.294494]        [<c01d6734>] sysfs_remove_groups+0x2c/0x3c
    [   23.300506]        [<c030b658>] device_remove_attrs+0x5c/0x74
    [   23.306549]        [<c030c290>] device_del+0x110/0x218
    [   23.311950]        [<c030c3c4>] device_unregister+0x2c/0x6c
    [   23.317779]        [<c04156d8>] coresight_unregister+0x30/0x40
    [   23.323883]        [<c041a290>] etm_probe+0x228/0x2e8
    [   23.329193]        [<c02bc760>] amba_probe+0xe4/0x160
    [   23.334503]        [<c0310540>] driver_probe_device+0x23c/0x480
    [   23.340728]        [<c0310820>] __driver_attach+0x9c/0xa0
    [   23.346374]        [<c030e400>] bus_for_each_dev+0x70/0xa4
    [   23.352142]        [<c030fcf4>] driver_attach+0x24/0x28
    [   23.357604]        [<c030f86c>] bus_add_driver+0x1e0/0x278
    [   23.363372]        [<c0310d48>] driver_register+0x80/0x100
    [   23.369110]        [<c02bc508>] amba_driver_register+0x58/0x5c
    [   23.375244]        [<c0749514>] etm_driver_init+0x18/0x1c
    [   23.380889]        [<c0009918>] do_one_initcall+0xc4/0x20c
    [   23.386657]        [<c0715e7c>] kernel_init_freeable+0x160/0x208
    [   23.392974]        [<c052d7fc>] kernel_init+0x18/0xf0
    [   23.398254]        [<c0010850>] ret_from_fork+0x14/0x24
    [   23.403747]
    -> #0 (coresight_mutex){+.+.+.}:
    [   23.408447]        [<c008ed60>] lock_acquire+0xe4/0x210
    [   23.413909]        [<c0530a30>] mutex_lock_nested+0x74/0x450
    [   23.419860]        [<c0415d40>] coresight_enable+0x1c/0x1b4
    [   23.425689]        [<c0416030>] enable_source_store+0x58/0x68
    [   23.431732]        [<c030b358>] dev_attr_store+0x20/0x2c
    [   23.437286]        [<c01d55e8>] sysfs_kf_write+0x50/0x54
    [   23.442871]        [<c01d4ba8>] kernfs_fop_write+0xc4/0x1c0
    [   23.448699]        [<c015b60c>] __vfs_write+0x34/0xe4
    [   23.454040]        [<c015bf38>] vfs_write+0x98/0x174
    [   23.459228]        [<c015c7a8>] SyS_write+0x4c/0xa8
    [   23.464355]        [<c00107c0>] ret_fast_syscall+0x0/0x1c
    [   23.470031]
    [   23.470031] other info that might help us debug this:
    [   23.470031]
    [   23.478393]  Possible unsafe locking scenario:
    [   23.478393]
    [   23.484619]        CPU0                    CPU1
    [   23.489349]        ----                    ----
    [   23.494079]   lock(s_active#52);
    [   23.497497]                                lock(coresight_mutex);
    [   23.503906]                                lock(s_active#52);
    [   23.509918]   lock(coresight_mutex);
    [   23.513702]
    [   23.513702]  *** DEADLOCK ***
    [   23.513702]
    [   23.519897] 3 locks held by sh/858:
    [   23.523529]  #0:  (sb_writers#7){.+.+.+}, at: [<c015ec38>] __sb_start_write+0xa8/0xd4
    [   23.531799]  #1:  (&of->mutex){+.+...}, at: [<c01d4b38>] kernfs_fop_write+0x54/0x1c0
    [   23.539916]  #2:  (s_active#52){++++.+}, at: [<c01d4b40>] kernfs_fop_write+0x5c/0x1c0
    [   23.548156]
    [   23.548156] stack backtrace:
    [   23.552734] CPU: 0 PID: 858 Comm: sh Not tainted 4.4.0-rc8-00025-gbbf360b #172
    [   23.560302] Hardware name: Generic OMAP4 (Flattened Device Tree)
    [   23.566589] Backtrace:
    [   23.569152] [<c00154d4>] (dump_backtrace) from [<c00156d0>] (show_stack+0x18/0x1c)
    [   23.577087]  r7:ed4b8570 r6:c0936400 r5:c07ae71c r4:00000000
    [   23.583038] [<c00156b8>] (show_stack) from [<c027e69c>] (dump_stack+0x98/0xc0)
    [   23.590606] [<c027e604>] (dump_stack) from [<c008a750>] (print_circular_bug+0x21c/0x33c)
    [   23.599090]  r5:c0939d60 r4:c0936400
    [   23.602874] [<c008a534>] (print_circular_bug) from [<c008e370>] (__lock_acquire+0x1c98/0x1d88)
    [   23.611877]  r10:00000003 r9:c0fd7a5c r8:ed4b8550 r7:ed4b8570 r6:ed4b8000 r5:c0ff69e4
    [   23.620117]  r4:c0936400 r3:ed4b8550
    [   23.623901] [<c008c6d8>] (__lock_acquire) from [<c008ed60>] (lock_acquire+0xe4/0x210)
    [   23.632080]  r10:00000000 r9:00000000 r8:60000013 r7:c07cb7b4 r6:00000001 r5:00000000
    [   23.640350]  r4:00000000
    [   23.643005] [<c008ec7c>] (lock_acquire) from [<c0530a30>] (mutex_lock_nested+0x74/0x450)
    [   23.651458]  r10:ecc0bf80 r9:edbe7dcc r8:ed4b8000 r7:c0fd7a5c r6:c0415d40 r5:00000000
    [   23.659729]  r4:c07cb780
    [   23.662384] [<c05309bc>] (mutex_lock_nested) from [<c0415d40>] (coresight_enable+0x1c/0x1b4)
    [   23.671234]  r10:ecc0bf80 r9:edbe7dcc r8:ed733c00 r7:00000000 r6:ed733c00 r5:00000002
    [   23.679473]  r4:ed762140
    [   23.682128] [<c0415d24>] (coresight_enable) from [<c0416030>] (enable_source_store+0x58/0x68)
    [   23.691070]  r7:00000000 r6:ed733c00 r5:00000002 r4:ed762160
    [   23.697052] [<c0415fd8>] (enable_source_store) from [<c030b358>] (dev_attr_store+0x20/0x2c)
    [   23.705780]  r5:edbe7dc0 r4:c0415fd8
    [   23.709533] [<c030b338>] (dev_attr_store) from [<c01d55e8>] (sysfs_kf_write+0x50/0x54)
    [   23.717834]  r5:edbe7dc0 r4:c030b338
    [   23.721618] [<c01d5598>] (sysfs_kf_write) from [<c01d4ba8>] (kernfs_fop_write+0xc4/0x1c0)
    [   23.730163]  r7:00000000 r6:00000000 r5:00000002 r4:edbe7dc0
    [   23.736145] [<c01d4ae4>] (kernfs_fop_write) from [<c015b60c>] (__vfs_write+0x34/0xe4)
    [   23.744323]  r10:00000000 r9:ecc0a000 r8:c0010964 r7:ecc0bf80 r6:00000002 r5:c01d4ae4
    [   23.752593]  r4:ee385a40
    [   23.755249] [<c015b5d8>] (__vfs_write) from [<c015bf38>] (vfs_write+0x98/0x174)
    [   23.762908]  r9:ecc0a000 r8:c0010964 r7:ecc0bf80 r6:000ab0d8 r5:00000002 r4:ee385a40
    [   23.771057] [<c015bea0>] (vfs_write) from [<c015c7a8>] (SyS_write+0x4c/0xa8)
    [   23.778442]  r8:c0010964 r7:00000002 r6:000ab0d8 r5:ee385a40 r4:ee385a40
    [   23.785522] [<c015c75c>] (SyS_write) from [<c00107c0>] (ret_fast_syscall+0x0/0x1c)
    [   23.793457]  r7:00000004 r6:00000001 r5:000ab0d8 r4:00000002
    [   23.799652] coresight-etb10 54162000.etb: ETB enabled
    [   23.805084] coresight-funnel 54164000.funnel: FUNNEL inport 0 enabled
    [   23.811859] coresight-replicator 44000000.ocp:replicator: REPLICATOR enabled
    [   23.819335] coresight-funnel 54158000.funnel: FUNNEL inport 0 enabled
    [   23.826110] coresight-etm3x 5414c000.ptm: ETM tracing enabled

The locking in coresight_unregister() is not required as the only customers of
the function are drivers themselves when an initialisation failure has been
encoutered.

Reported-by: Rabin Vincent <rabin@rab.in>
Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit a9ddc71f5840c2711e530f2e055b278f79948b29)
2016-06-01 15:30:01 -06:00
Mathieu Poirier
0d03bf0e9b coresight: fixing indentation problem
Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit ff8742279ff163e36ee50bb4e75090af1d7d6e3b)
2016-06-01 15:30:00 -06:00
Andrew F. Davis
4b5c6a09cd coresight: Fix a typo in Kconfig
Signed-off-by: Andrew F. Davis <afd@ti.com>
Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit b9884d3b79f60846cdf04be262d13bca8996f99a)
2016-06-01 15:29:58 -06:00
Mathieu Poirier
b746b9cf2f coresight: checking for NULL string in coresight_name_match()
Connection child names associated to ports can sometimes be NULL,
which is the case when booting a system on QEMU or when the Coresight
power domain isn't switched on.

This patch is adding a check to make sure a NULL string isn't fed
to strcmp(), something that avoid crashing the system.

Cc: <stable@vger.kernel.org> # v3.18+
Reported-by: Tyler Baker <tyler.baker@linaro.org>
Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit fadf3a44e974b030e7145218ad1ab25e3ef91738)
2016-06-01 15:29:58 -06:00
Alexander Shishkin
a2fc3f7248 stm class: dummy_stm: Add link callback for fault injection
STM device's link callback has the power to abort master/channel
assignment by returning a negative error code. Use this in dummy
stm device to optionally abort assigning certain channel IDs.
This is useful as fault injection into the stm class core, for
testing purposes.

Signed-off-by: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit adcde635f5d6b77e9f11087af09c6f62da2bf108)
2016-06-01 15:28:49 -06:00
Alexander Shishkin
d3b187f9c7 stm class: Plug stm device's unlink callback
STM device's unlink callback is never actually called from anywhere in
the stm class code.

This patch adds calls to stm driver's unlink method after the unlinking
has succeeded.

Signed-off-by: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit cc8424074e51355e0c6ba717d8edc50d408f2802)
2016-06-01 15:28:48 -06:00
Alexander Shishkin
fffb71e99d stm class: Fix a race in unlinking
There is a window in stm_source_link_drop(), during which the source's
link may change before locks are acquired. When this happens, it throws
a warning, since this is not an expected scenario.

This patch handles the race in such a way that if the link appears to
have changed by the time we took the locks, it will release them and
repeat the whole unlinking procedure from the beginning, unless the
other contender beat us to it.

Signed-off-by: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit b4ca34aaf78ed0cdfc15956d377064104257a437)
2016-06-01 15:28:48 -06:00
Alexander Shishkin
984a45ed12 stm class: Fix unbalanced module/device refcounting
STM code takes references to the stm device and its module for the
duration of the character device's existence or the stm_source link.
Dropping these references is not well balanced everywhere, which may
lead to leaks.

This patch balances the acquisition and releasing of these two
references and annotates each site so that it's easier to verify
correctness by reading the code.

Signed-off-by: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit f7c81c7176c72c7899390754b4b038a64b296e4d)
2016-06-01 15:28:47 -06:00
Alexander Shishkin
dd5219ad9e stm class: Guard output assignment against concurrency
It is possible to concurrently assign the same output (a character
device writer or an stm_source device) to different stm devices,
which sets off a strategically placed warning in stm_output_assign().

To avoid this, use a spinlock to serialize (un)assignments between
outputs and stm devices.

Signed-off-by: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit cde4ad8368840e414ecf67db258fe1dabaa5fd2e)
2016-06-01 15:28:46 -06:00
Alexander Shishkin
1f6037f522 stm class: Fix unlocking braino in the error path
If an illegal attempt is made to unlink stm source device from an
stm device, the stm device's link spinlock mistakenly remains locked.
While this really shouldn't happen (there's a warning in place), the
locking should remain in order so that we can still recover from this
situation if it indeed does happen.

This patch unifies the unlocking in the exit path of
__stm_source_link_drop() to fix this.

Reported-by: Laurent Fert <laurent.fert@intel.com>
Signed-off-by: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit 1810f2c44817c74ca3d05d1e3981e3a2e2ceb6f5)
2016-06-01 15:28:45 -06:00
Alexander Shishkin
8ffc98078a stm class: Add heartbeat stm source device
Heartbeat stm source may have multiple instances (for connecting to
different stm devices). Each instance will send a periodic test message
over its stm device when it is linked. This can be used for testing stm
class framework, stm device drivers or as a heartbeat over the stm link.

Signed-off-by: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit 1192918530381b5cfc0e5da51233fa94f783b221)
2016-06-01 15:28:45 -06:00
Alexander Shishkin
bff93fcc5f stm class: dummy_stm: Create multiple devices
STM framework should be able to handle multiple STM devices at a time,
each one with its own master allocation policy.

This patch changes dummy_stm driver to create multiple STM sinks to
help testing the framework.

Signed-off-by: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit bcfdf8afdebe63a2217fa632ae94f8aeecf9126f)
2016-06-01 15:28:44 -06:00
Alexander Shishkin
548e3d4001 stm class: Support devices with multiple instances
By convention, the name of the stm policy directory in configfs consists of
the device name to which it applies and the actual policy name, separated
by a dot. Now, some devices already have dots in their names that separate
name of the actual device from its instance identifier. Such devices will
result in two (or more, who can tell) dots in the policy directory name.

Existing policy code, however, will treat the first dot as the one that
separates device name from policy name, therefore failing the above case.

This patch makes the last dot in the directory name be the separator, thus
prohibiting dots from being used in policy names.

Suggested-by: Chunyan Zhang <zhang.chunyan@linaro.org>
Signed-off-by: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit 59be422e4ce10e3d49d4c9407a80fab8a9b7bc84)
2016-06-01 15:28:43 -06:00
Alexander Shishkin
a22a7d13aa stm class: Use driver's packet callback return value
STM drivers provide a callback to generate/send individual STP packets;
it also tells the stm core how many bytes of payload it has consumed.
However, we would also need to use the negative space of this return
value to communicate errors that occur during the packet generation,
in which case the stm core will have to take appropriate action.

For now, we need to account for the possibility that the stm driver may
not support certain combinations of packet type/flags, in which case
it is expected to signal an error.

Signed-off-by: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit f8560a9bc76b2cd5c06fa412cb7b5481d70fcf34)
2016-06-01 15:28:43 -06:00
Alexander Shishkin
1caf1d3016 stm class: Prevent user-controllable allocations
Currently, the character device write method allocates a temporary buffer
for user's data, but the user's data size is not sanitized and can cause
arbitrarily large allocations via kzalloc() or an integer overflow that
will then result in overwriting kernel memory.

This patch trims the input buffer size to avoid these issues.

Reported-by: Sasha Levin <sasha.levin@oracle.com>
Signed-off-by: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit f08b18266c7116e2ec6885dd53a928f580060a71)
2016-06-01 15:28:42 -06:00
Alexander Shishkin
0f049c5ab8 stm class: Fix link list locking
Currently, the list of stm_sources linked to an stm device is protected by
a spinlock, which also means that sources' .unlink() method is called under
this spinlock. However, this method may (and does) sleep, which means
trouble.

This patch slightly reworks locking around stm::link_list so that bits that
might_sleep() are called with a mutex held instead. Modification of this
list requires both mutex and spinlock to be held, while looking at the list
can be done under either mutex or spinlock.

Signed-off-by: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit c74f7e8281add80bdfa0ad2998b8df287b13df73)
2016-06-01 15:28:40 -06:00
Alexander Shishkin
df313b9ca8 stm class: Fix locking in unbinding policy path
Right now, if stm device removal has to unbind from a policy (that is,
an stm device that has STP policy, gets removed), it will trigger a
nested lock on the stm device's policy mutex.

This patch fixes the problem by moving the locking from the policy
unbinding to policy removal (configfs path), where it's actually needed;
the other caller of the policy unbinding function already takes the
mutex around the call.

Signed-off-by: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit 4c127fd16e6b33ecb7badc091480c84ea9aebeb6)
2016-06-01 15:28:39 -06:00
Arnd Bergmann
51d81f3232 stm class: Select CONFIG_SRCU
The newly added STM code uses SRCU, but does not ensure that
this code is part of the kernel:

drivers/built-in.o: In function `stm_source_link_show':
include/linux/srcu.h:221: undefined reference to `__srcu_read_lock'
include/linux/srcu.h:238: undefined reference to `__srcu_read_unlock'
drivers/built-in.o: In function `stm_source_link_drop':
include/linux/srcu.h:221: undefined reference to `__srcu_read_lock'
include/linux/srcu.h:238: undefined reference to `__srcu_read_unlock'

This adds a Kconfig 'select' statement like all the other SRCU using
drivers have.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Fixes: 7bd1d4093c ("stm class: Introduce an abstraction for System Trace Module devices")
Signed-off-by: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit 042d4460b5b4379a12f375045ff9065cf6758735)
2016-06-01 15:28:37 -06:00
Geert Uytterhoeven
33bb0224c0 stm class: Hide STM-specific options if STM is disabled
If STM=n, it doesn't make sense to ask about STM_DUMMY and
STM_SOURCE_CONSOLE support, which are not even built when enabled
anyway. Hence hide these options if STM=n.

Reported-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
Signed-off-by: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit 4a2e2b19f96acfc037a9773c7729d133ce1e7e3b)
2016-06-01 15:28:36 -06:00
Shashank Mittal
888f1317a9 coresight-dummy: add dummy source driver support
Add dummy Coresight source driver. This driver can be used for devices
that are controlled by other subsystems but rely on Linux drivers to
configure rest of the trace path.

Change-Id: I7b68202fc6d7958fcf7ff933d7eed7e19c958ab0
Signed-off-by: Shashank Mittal <mittals@codeaurora.org>
2016-05-27 14:54:32 -07:00
Arnd Bergmann
f4b1d0a9a3 stm class: Select CONFIG_SRCU
commit 042d4460b5b4379a12f375045ff9065cf6758735 upstream.

The newly added STM code uses SRCU, but does not ensure that
this code is part of the kernel:

drivers/built-in.o: In function `stm_source_link_show':
include/linux/srcu.h:221: undefined reference to `__srcu_read_lock'
include/linux/srcu.h:238: undefined reference to `__srcu_read_unlock'
drivers/built-in.o: In function `stm_source_link_drop':
include/linux/srcu.h:221: undefined reference to `__srcu_read_lock'
include/linux/srcu.h:238: undefined reference to `__srcu_read_unlock'

This adds a Kconfig 'select' statement like all the other SRCU using
drivers have.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Fixes: 7bd1d4093c ("stm class: Introduce an abstraction for System Trace Module devices")
Signed-off-by: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2016-05-04 14:48:54 -07:00
Shashank Mittal
82496f5cb3 coresight-qpdi: add support to skip LDO configuration
On few devices QPDI's LDOs are configured by some other component.
This change adds support to skip LDO configuration on such devices.

Change-Id: I84c8b4a5a0d6155a39e43e0503961f76e2d8a615
Signed-off-by: Shashank Mittal <mittals@codeaurora.org>
2016-04-22 14:58:36 -07:00
Shashank Mittal
9e6e3bba5a coresight: add HW event driver support in upstream implementation
Add HW event driver in upstream implementation of Coresight driver.
This change copies coresight-hwevent.c file from drivers/coresight
(commit f9b3004b242c ("msm: pcie: enable/disable PCIe AER from
debugfs"))
to driver/hwtracing/coresight directory.

Change-Id: I2d75108bae975107ee5c13fa5dfb5846185fbd3d
Signed-off-by: Shashank Mittal <mittals@codeaurora.org>
2016-04-22 14:58:25 -07:00
Shashank Mittal
46c271e86b coresight: add qpdi driver support in upstream implementation
Add qpdi driver in upstream implementation of Coresight driver.
This change copies coresight-qpdi.c file from drivers/coresight
(commit f9b3004b242c ("msm: pcie: enable/disable PCIe AER from
debugfs"))
to driver/hwtracing/coresight directory.

Change-Id: I8f29f386a31aec1a10a1398e0753a3b4355b3449
Signed-off-by: Shashank Mittal <mittals@codeaurora.org>
2016-04-22 14:58:16 -07:00
Shashank Mittal
8185b206af coresight-tmc: add support to set default sink
Add support to set default sink at probe time.

Change-Id: I62abe39a5cb5e7f8b1bb1198cecd3b529b124de8
Signed-off-by: Shashank Mittal <mittals@codeaurora.org>
2016-04-22 14:58:05 -07:00
Shashank Mittal
534fd1b6c4 coresight-tmc: add support to switch sinks
Add support to switch to a different Coresight sink when one or
more Coresight tracing sources are enabled.

Change-Id: I79f769f0913124710ae56fddea7d205359e09b43
Signed-off-by: Shashank Mittal <mittals@codeaurora.org>
2016-04-22 14:57:55 -07:00
Shashank Mittal
93e852721d coresight: add remote etm driver support in upstream implementation
Add remote etm driver in upstream implementation of Coresight
driver.
This change copies coresight-remote-etm.c file from drivers/coresight
(commit c1fe9ac38d93 ("input: touchscreen: correct function and variable
names in ITE tech driver"))
to driver/hwtracing/coresight directory.

Change-Id: I77a1aaf10aaf3f3010ab19d5878bb53dcc504c29
Signed-off-by: Shashank Mittal <mittals@codeaurora.org>
2016-04-22 14:57:42 -07:00
Shashank Mittal
6c73cbbdbe coresight: fix kstrtoul usage
Unlike sscanf kstrtoul function returns 0 on success and non-zero value
in case of an error.

Fix Coresight code to check error condition correctly.

Change-Id: Id1bd544a9928ed6b13c278f12a47070d1ca353a7
Signed-off-by: Shashank Mittal <mittals@codeaurora.org>
2016-04-22 14:57:21 -07:00
Shashank Mittal
41c473f37f coresight-cti: use for_each_cpu instead of for_each_cpu_mask
for_each_cpu_mask is deprecated, so replace that with for_each_cpu.

Change-Id: I21a937053ce8a7f3a81a09f78e873b7c71421b72
Signed-off-by: Shashank Mittal <mittals@codeaurora.org>
2016-04-22 14:57:10 -07:00
Shashank Mittal
a9af086a5a coresight: fix compilation issue due to missing of_coresight.h file
In upstream implementation there is no of_coresight.h file. That causes
compilation issue with some of the Coresight components.

Change-Id: I81bf45e1e322e1d90ac70c6e73738b7348cf85e1
Signed-off-by: Shashank Mittal <mittals@codeaurora.org>
2016-04-22 14:56:58 -07:00
Shashank Mittal
bb91c2f611 coresight: tmc: add usb bam support for etr device
Add support to use etr device in usb bam mode.

In usb bam mode traces can be streamed over usb.

Change-Id: I5509c01aeb704a7b3ec8406130886145f7fddc10
Signed-off-by: Shashank Mittal <mittals@codeaurora.org>
2016-04-22 14:56:55 -07:00
Shashank Mittal
00eb45fc95 coresight: replace bitmap_scnprintf with scnprintf
bitmap_scnprintf has been deprecated, so replace it with
scnprintf.

Change-Id: I8563fafc56515fde764046f882814c1c6e4c4299
Signed-off-by: Shashank Mittal <mittals@codeaurora.org>
2016-04-13 11:12:00 -07:00
Shashank Mittal
1f99478c12 coresight-etm4x: use trace ids starting 0x1 for ETMs devices
ETM parser expects ETM trace ids starting from 0x1.

This change fixes the start of ETM trace id to make it compatible with
ETM parser.

Change-Id: Icc5c6de317468b845448dae22a447e8b9a82ea54
Signed-off-by: Shashank Mittal <mittals@codeaurora.org>
2016-03-25 16:04:15 -07:00
Shashank Mittal
22867419a7 coresight-etm4x: fix hot plug path for ETM initialization
Add code to support ETM initialization when CPU comes online for
the first time.

Change-Id: I4a7c02cb71c3bd0ffa01586bed28950067e1f604
Signed-off-by: Shashank Mittal <mittals@codeaurora.org>
2016-03-25 16:04:14 -07:00
Shashank Mittal
26b5785d31 coresight-tpdm: add fix for MSR erratum
Some TPDMs require to program MSR registers after enabling the DSB
subunit.
This change adds support for such TPDMs.

Change-Id: Iff5c1d73f752c8f9ff483e37cf65f9fe8e2901ca
Signed-off-by: Shashank Mittal <mittals@codeaurora.org>
2016-03-25 16:04:14 -07:00
Shashank Mittal
8c962a959b coresight-tpdm: add mux select register support
Add support to configure mux select registers for all subunits.

These registers can be used to select different trace events supported
by a subunit.

Change-Id: I5d5236e4c0cb94e401dfe82eeb91e8fe7e3c566b
Signed-off-by: Shashank Mittal <mittals@codeaurora.org>
2016-03-25 16:04:13 -07:00
Shashank Mittal
4d2ed0a9f9 coresight: add TPDM and TPDA driver support in upstream implementation
Add TPDM and TPDA drivers in upstream implementation of Coresight driver.

This change copies coresight-tpdm.c and coresight-tpda.c files from
drivers/coresight (commit : a8371783eed42f9e1ce9cecc1e3d5fba94f05014)
to driver/hwtracing/coresight directory.

Change-Id: I8a518de3f0ab0e4b0880c5ca00d90a012234a91c
Signed-off-by: Shashank Mittal <mittals@codeaurora.org>
2016-03-25 16:04:12 -07:00
Shashank Mittal
3a727d709c coresight: add CTI driver support in upstream implementation
Add CTI driver in upstream implementation of Coresight driver.

This change copies drivers/coresight/coresight-cti.c (commit :
c155168578a793cafa0c41132554ac5af94926f1) to driver/hwtracing/coresight
directory.

Change-Id: I4b4b23755c36254d94bd6698b46f15da19c30712
Signed-off-by: Shashank Mittal <mittals@codeaurora.org>
2016-03-25 16:02:37 -07:00
Shashank Mittal
7d151e606e coresight: set invalid default cpu id
Current code sets default CPU id as of CPU0. This causes a failure in
case where device tree declares a CoreSight node that is associated with
a CPU that's not available on that target. This causes complete failure of
the system.

Set default CPU id to -1 to avoid this problem.

Change-Id: I77e5f734666a5f806013d685e89902ce5983cf49
Signed-off-by: Shashank Mittal <mittals@codeaurora.org>
2016-03-25 16:02:37 -07:00
Shashank Mittal
a3cf6c6269 Coresight: add support for device names
Add support to read device names from device tree entries.
This allows using same names for CoreSight devices across different
targets.

Change-Id: Ide3da74533051db38e9a6c5904a7cab42b3be6c1
Signed-off-by: Shashank Mittal <mittals@codeaurora.org>
2016-03-22 11:15:44 -07:00
Shashank Mittal
1537a1c748 Coresight: change attribute names for sources and sinks
Use 'enable' instead of 'enable_source' and 'curr_sink' instead of
'enable_sink attributes to align it with MSM implementation.

This change ensures same device node interface for host tools
between MSM and upstream Coresight driver implementation.

Change-Id: I5267d2ad92e76607e0ac1bd0e9ef63c0a89cfe7f
Signed-off-by: Shashank Mittal <mittals@codeaurora.org>
2016-03-22 11:15:43 -07:00