]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commitdiff
coresight: stm: Support marked packet
authorTingwei Zhang <tingwei@codeaurora.org>
Wed, 16 Sep 2020 19:17:23 +0000 (13:17 -0600)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 17 Sep 2020 16:46:04 +0000 (18:46 +0200)
STP_PACKET_MARKED is not supported by STM currently.
Add STM_FLAG_MARKED to support marked packet in STM.

Signed-off-by: Tingwei Zhang <tingwei@codeaurora.org>
Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
Link: https://lore.kernel.org/r/20200916191737.4001561-3-mathieu.poirier@linaro.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/hwtracing/coresight/coresight-stm.c
include/uapi/linux/coresight-stm.h

index 673d2f56ed1e7d0ff091082c28a70acafdd49767..2ba819a47cf610b0fc38b1511ba15a7881e75a17 100644 (file)
@@ -412,6 +412,7 @@ static ssize_t notrace stm_generic_packet(struct stm_data *stm_data,
        void __iomem *ch_addr;
        struct stm_drvdata *drvdata = container_of(stm_data,
                                                   struct stm_drvdata, stm);
+       unsigned int stm_flags;
 
        if (!(drvdata && local_read(&drvdata->mode)))
                return -EACCES;
@@ -421,8 +422,9 @@ static ssize_t notrace stm_generic_packet(struct stm_data *stm_data,
 
        ch_addr = stm_channel_addr(drvdata, channel);
 
-       flags = (flags == STP_PACKET_TIMESTAMPED) ? STM_FLAG_TIMESTAMPED : 0;
-       flags |= test_bit(channel, drvdata->chs.guaranteed) ?
+       stm_flags = (flags & STP_PACKET_TIMESTAMPED) ?
+                       STM_FLAG_TIMESTAMPED : 0;
+       stm_flags |= test_bit(channel, drvdata->chs.guaranteed) ?
                           STM_FLAG_GUARANTEED : 0;
 
        if (size > drvdata->write_bytes)
@@ -432,7 +434,7 @@ static ssize_t notrace stm_generic_packet(struct stm_data *stm_data,
 
        switch (packet) {
        case STP_PACKET_FLAG:
-               ch_addr += stm_channel_off(STM_PKT_TYPE_FLAG, flags);
+               ch_addr += stm_channel_off(STM_PKT_TYPE_FLAG, stm_flags);
 
                /*
                 * The generic STM core sets a size of '0' on flag packets.
@@ -444,7 +446,8 @@ static ssize_t notrace stm_generic_packet(struct stm_data *stm_data,
                break;
 
        case STP_PACKET_DATA:
-               ch_addr += stm_channel_off(STM_PKT_TYPE_DATA, flags);
+               stm_flags |= (flags & STP_PACKET_MARKED) ? STM_FLAG_MARKED : 0;
+               ch_addr += stm_channel_off(STM_PKT_TYPE_DATA, stm_flags);
                stm_send(ch_addr, payload, size,
                                drvdata->write_bytes);
                break;
index 8847dbf241515493478a9707685be55c5a71b134..7ff3709c01b854e9250b4d6f837c744b2f7f4443 100644 (file)
@@ -5,6 +5,7 @@
 #include <linux/const.h>
 
 #define STM_FLAG_TIMESTAMPED   _BITUL(3)
+#define STM_FLAG_MARKED        _BITUL(4)
 #define STM_FLAG_GUARANTEED    _BITUL(7)
 
 /*