stm class: Factor out default framing protocol
authorAlexander Shishkin <alexander.shishkin@linux.intel.com>
Fri, 5 Oct 2018 12:42:56 +0000 (15:42 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 11 Oct 2018 10:12:54 +0000 (12:12 +0200)
The STP framing pattern that the stm class implicitly applies to the
data payload is, in fact, a protocol. This patch moves the relevant code
out of the stm core into its own driver module.

Signed-off-by: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Tested-by: Mathieu Poirier <mathieu.poirier@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/hwtracing/stm/Kconfig
drivers/hwtracing/stm/Makefile
drivers/hwtracing/stm/p_basic.c [new file with mode: 0644]

index 723e2d9..262e789 100644 (file)
@@ -11,6 +11,21 @@ config STM
 
 if STM
 
+config STM_PROTO_BASIC
+       tristate "Basic STM framing protocol driver"
+       default CONFIG_STM
+       help
+         This is a simple framing protocol for sending data over STM
+         devices. This was the protocol that the STM framework used
+         exclusively until the MIPI SyS-T support was added. Use this
+         driver for compatibility with your existing STM setup.
+
+         The receiving side only needs to be able to decode the MIPI
+         STP protocol in order to extract the data.
+
+         If you want to be able to use the basic protocol or want the
+         backwards compatibility for your existing setup, say Y.
+
 config STM_DUMMY
        tristate "Dummy STM driver"
        help
index effc19e..1571de6 100644 (file)
@@ -3,6 +3,10 @@ obj-$(CONFIG_STM)      += stm_core.o
 
 stm_core-y             := core.o policy.o
 
+obj-$(CONFIG_STM_PROTO_BASIC) += stm_p_basic.o
+
+stm_p_basic-y          := p_basic.o
+
 obj-$(CONFIG_STM_DUMMY)        += dummy_stm.o
 
 obj-$(CONFIG_STM_SOURCE_CONSOLE)       += stm_console.o
diff --git a/drivers/hwtracing/stm/p_basic.c b/drivers/hwtracing/stm/p_basic.c
new file mode 100644 (file)
index 0000000..8980a6a
--- /dev/null
@@ -0,0 +1,48 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Basic framing protocol for STM devices.
+ * Copyright (c) 2018, Intel Corporation.
+ */
+
+#include <linux/module.h>
+#include <linux/device.h>
+#include <linux/stm.h>
+#include "stm.h"
+
+static ssize_t basic_write(struct stm_data *data, struct stm_output *output,
+                          unsigned int chan, const char *buf, size_t count)
+{
+       unsigned int c = output->channel + chan;
+       unsigned int m = output->master;
+       const unsigned char nil = 0;
+       ssize_t sz;
+
+       sz = stm_data_write(data, m, c, true, buf, count);
+       if (sz > 0)
+               data->packet(data, m, c, STP_PACKET_FLAG, 0, 0, &nil);
+
+       return sz;
+}
+
+static const struct stm_protocol_driver basic_pdrv = {
+       .owner  = THIS_MODULE,
+       .name   = "p_basic",
+       .write  = basic_write,
+};
+
+static int basic_stm_init(void)
+{
+       return stm_register_protocol(&basic_pdrv);
+}
+
+static void basic_stm_exit(void)
+{
+       stm_unregister_protocol(&basic_pdrv);
+}
+
+module_init(basic_stm_init);
+module_exit(basic_stm_exit);
+
+MODULE_LICENSE("GPL v2");
+MODULE_DESCRIPTION("Basic STM framing protocol driver");
+MODULE_AUTHOR("Alexander Shishkin <alexander.shishkin@linux.intel.com>");