From 64a6d1388432704c9205fee04be8e6df45fc563b Mon Sep 17 00:00:00 2001
From: Johan Hovold <johan@hovoldconsulting.com>
Date: Thu, 3 Mar 2016 13:34:39 +0100
Subject: [PATCH] greybus: connection: add CSD connection flag

Add CSD connection flag that can be specified when allocating a
connection to enable Controlled Segment Dropping in favour of E2EFC
which is enabled by default.

Note that most connections are expected to have E2EFC enabled.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
---
 drivers/staging/greybus/connection.c | 2 +-
 drivers/staging/greybus/connection.h | 7 +++++++
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/drivers/staging/greybus/connection.c b/drivers/staging/greybus/connection.c
index 01d31f66b28e..96a8aa3285ff 100644
--- a/drivers/staging/greybus/connection.c
+++ b/drivers/staging/greybus/connection.c
@@ -339,7 +339,7 @@ gb_connection_svc_connection_create(struct gb_connection *connection)
 	cport_flags = GB_SVC_CPORT_FLAG_CSV_N;
 	if (intf->boot_over_unipro) {
 		cport_flags |= GB_SVC_CPORT_FLAG_CSD_N;
-	} else {
+	} else if (gb_connection_e2efc_enabled(connection)) {
 		cport_flags |= GB_SVC_CPORT_FLAG_CSD_N |
 				GB_SVC_CPORT_FLAG_E2EFC;
 	}
diff --git a/drivers/staging/greybus/connection.h b/drivers/staging/greybus/connection.h
index d5ac1459332a..6197d45cb16a 100644
--- a/drivers/staging/greybus/connection.h
+++ b/drivers/staging/greybus/connection.h
@@ -13,6 +13,8 @@
 #include <linux/list.h>
 #include <linux/kfifo.h>
 
+#define GB_CONNECTION_FLAG_CSD		BIT(0)
+
 enum gb_connection_state {
 	GB_CONNECTION_STATE_INVALID	= 0,
 	GB_CONNECTION_STATE_DISABLED	= 1,
@@ -81,4 +83,9 @@ void greybus_data_rcvd(struct gb_host_device *hd, u16 cport_id,
 void gb_connection_latency_tag_enable(struct gb_connection *connection);
 void gb_connection_latency_tag_disable(struct gb_connection *connection);
 
+static inline bool gb_connection_e2efc_enabled(struct gb_connection *connection)
+{
+	return !(connection->flags & GB_CONNECTION_FLAG_CSD);
+}
+
 #endif /* __CONNECTION_H */
-- 
2.30.9