mbox series

[v7,0/4] source filtering for multi-port output

Message ID 20241213100731.25914-1-quic_taozha@quicinc.com (mailing list archive)
Headers show
Series source filtering for multi-port output | expand

Message

Tao Zhang Dec. 13, 2024, 10:07 a.m. UTC
In our hardware design, by combining a funnel and a replicator, it
implement a hardware device with one-to-one correspondence between
output ports and input ports. The programming usage on this device
is the same as funnel. The software uses a funnel and a static
replicator to implement the driver of this device. Since original
funnels only support a single output connection and original
replicator only support a single input connection, the code needs
to be modified to support this new feature. The following is a
typical topology diagram of multi-port output mechanism.
|----------|     |---------|     |----------|   |---------|
|  TPDM 0  |     | Source0 |     | Source 1 |   | TPDM 1  |
|----------|     |---------|     |----------|   |---------|
      |                |                |             |
      |                |                |             |
      |      --------- |                |             |
      |      |                          |             |
      |      |                          |             |
      |      |                          |             |
   \-------------/ ----------------------             |
    \  Funnel 0 /  |                                  |
     -----------   |     ------------------------------
          |        |     |
          |        |     |
        \------------------/
         \    Funnel 1    /     ----|
          \--------------/          |
                  |                 |----> Combine a funnel and a
                  |                 |      static replicator
          /-----------------\       |
         /    replicator 0   \  ----|
        /---------------------\
             |     |      |
             |     |      |-----------|
             |     |---------|        |
             |               |TPDM0   |TPDM1
             |            \-----------------/
             |             \   TPDA 0      /
             |              \-------------/
             |                    |
             |                    |
             |Source0/1           |
          \-------------------------------/
           \           Funnel 2          /
            \---------------------------/

Changes in V7:
1. Correct the use of incorrect characters.
-- Suzuki K Poulose
2. Rebase the series on v6.13-rc1
-- Suzuki K Poulose

Changes in V6:
1. Optimize the prompt content of the warning log
when the filter handle is not a trace source.
-- Suzuki K Poulose
2. Reset the filter device and fwnode if it is not
a trace source.
-- Suzuki K Poulose

Changes in V5:
1. Replace "filter-src" with "filter-source" in the
dt-binding document.
-- Suzuki K Poulose
2. Optimize the comments of the patch "coresight:
Add support for trace filtering by source" due to bad
example.
-- Suzuki K Poulose
3. Correct spelling errors in the patch "coresight:
Add support for trace filtering by source".
-- Suzuki K Poulose
4. Optimize the function "coresight_blocks_source".
-- Suzuki K Poulose
5. Add { } in the function "of_coresight_parse_endpoint".
-- Suzuki K Poulose
6. Adjust the order of the patches.
-- Suzuki K Poulose
7. Adjust the alignment in "coresight-platform.c".
-- Suzuki K Poulose

Changes in V4:
1. Use "coresight_get_source(path)" in the function
"coresight_disable_path_from" instead of explicitly
passing the source.
-- Suzuki K Poulose
2. Optimize the order of the input parameters for
"_coresight_build_path".
-- Suzuki K Poulose
3. Reuse the method "coresight_block_source" in
"_coresight_build_path".
-- Suzuki K Poulose
4. Remove the unnecessary () in "coresight_build_path".
-- Suzuki K Poulose
5. Add a helper to check if a device is SOURCE.
-- Suzuki K Poulose
6. Adjust the posistion of setting "still_orphan" in
"coresight_build_path".
-- Suzuki K Poulose

Changes in V3:
1. Rename the function "coresight_source_filter" to
"coresight_block_source". And refine this function.
-- Suzuki K Poulose
2. Rename the parameters of the function
"coresight_find_out_connection" to avoid confusion.
-- Suzuki K Poulose
3. Get the source of path in "coresight_enable_path" and
"coresight_disable_path".
-- Suzuki K Poulose
4. Fix filter source device before skip the port in
"coresight_orphan_match".
-- Suzuki K Poulose
5. Make sure the device still orphan if whter is a filter
source firmware node but the filter source device is null.
-- Suzuki K Poulose
6. Walk through the entire coresight bus and fixup the
"filter_src_dev" if the source is being removed.
-- Suzuki K Poulose
7. Refine the commit description of patch#2.
-- Suzuki K Poulose
8. Fix the warning reported by kernel test robot.
-- kernel test robot.
9. Use the source device directly if the port has a
hardcoded filter in "tpda_get_element_size".
-- Suzuki K Poulose

Changes in V2:
1. Change the reference for endpoint property in dt-binding.
-- Krzysztof Kozlowski
2. Change the property name "filter_src" to "filter-src".
-- Krzysztof Kozlowski
3. Fix the errors in running 'make dt_binding_check'.
-- Rob Herring
4. Pass in the source parameter instead of path.
-- Suzuki K Poulose
5. Reset the "filter_src_dev" if the "src" csdev is being removed.
-- Suzuki K Poulose
6. Add a warning if the "filter_src_dev" is of not the
type DEV_TYPE_SOURCE.
-- Suzuki K Poulose
7. Optimize the procedure for handling all possible cases.
-- Suzuki K Poulose

Changes in V1:
1. Add a static replicator connect to a funnel to implement the
correspondence between the output ports and the input ports on
funnels.
-- Suzuki K Poulose
2. Add filter_src_dev and filter_src_dev phandle to
"coresight_connection" struct, and populate them if there is one.
-- Suzuki K Poulose
3. To look at the phandle and then fixup/remove the filter_src
device in fixup/remove connections.
-- Suzuki K Poulose
4. When TPDA reads DSB/CMB element size, it is implemented by
looking up filter src device in the connections.
-- Suzuki K Poulose

Tao Zhang (4):
  dt-bindings: arm: qcom,coresight-static-replicator: Add property for
    source filtering
  coresight: Add a helper to check if a device is source
  coresight: Add support for trace filtering by source
  coresight-tpda: Optimize the function of reading element size

 .../arm/arm,coresight-static-replicator.yaml  |  19 ++-
 drivers/hwtracing/coresight/coresight-core.c  | 113 +++++++++++++++---
 .../hwtracing/coresight/coresight-platform.c  |  21 ++++
 drivers/hwtracing/coresight/coresight-tpda.c  |  13 +-
 include/linux/coresight.h                     |  12 +-
 5 files changed, 155 insertions(+), 23 deletions(-)

Comments

Suzuki K Poulose Dec. 17, 2024, 2:36 p.m. UTC | #1
On Fri, 13 Dec 2024 18:07:27 +0800, Tao Zhang wrote:
> In our hardware design, by combining a funnel and a replicator, it
> implement a hardware device with one-to-one correspondence between
> output ports and input ports. The programming usage on this device
> is the same as funnel. The software uses a funnel and a static
> replicator to implement the driver of this device. Since original
> funnels only support a single output connection and original
> replicator only support a single input connection, the code needs
> to be modified to support this new feature. The following is a
> typical topology diagram of multi-port output mechanism.
> |----------|     |---------|     |----------|   |---------|
> |  TPDM 0  |     | Source0 |     | Source 1 |   | TPDM 1  |
> |----------|     |---------|     |----------|   |---------|
>       |                |                |             |
>       |                |                |             |
>       |      --------- |                |             |
>       |      |                          |             |
>       |      |                          |             |
>       |      |                          |             |
>    \-------------/ ----------------------             |
>     \  Funnel 0 /  |                                  |
>      -----------   |     ------------------------------
>           |        |     |
>           |        |     |
>         \------------------/
>          \    Funnel 1    /     ----|
>           \--------------/          |
>                   |                 |----> Combine a funnel and a
>                   |                 |      static replicator
>           /-----------------\       |
>          /    replicator 0   \  ----|
>         /---------------------\
>              |     |      |
>              |     |      |-----------|
>              |     |---------|        |
>              |               |TPDM0   |TPDM1
>              |            \-----------------/
>              |             \   TPDA 0      /
>              |              \-------------/
>              |                    |
>              |                    |
>              |Source0/1           |
>           \-------------------------------/
>            \           Funnel 2          /
>             \---------------------------/
> 
> [...]

Applied, thanks!

[1/4] dt-bindings: arm: qcom,coresight-static-replicator: Add property for source filtering
      https://git.kernel.org/coresight/c/2a0bc219272b
[2/4] coresight: Add a helper to check if a device is source
      https://git.kernel.org/coresight/c/62374ce1876b
[3/4] coresight: Add support for trace filtering by source
      https://git.kernel.org/coresight/c/ec9903d6cc34
[4/4] coresight-tpda: Optimize the function of reading element size
      https://git.kernel.org/coresight/c/56e14a21cee4

Best regards,