lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <20251223183142.31897-3-damien.riegel@silabs.com>
Date: Tue, 23 Dec 2025 13:31:36 -0500
From: Damien Riégel <damien.riegel@...abs.com>
To: greybus-dev@...ts.linaro.org
Cc: linux-kernel@...r.kernel.org, Johan Hovold <johan@...nel.org>,
        Alex Elder <elder@...nel.org>,
        Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
        linux-devel@...abs.com,
        Damien Riégel <damien.riegel@...abs.com>
Subject: [PATCH 2/8] greybus: let gb_interface_create take additional p2p argument

Update the function that creates an interface to take an additional
boolean argument to indicate if the interface is point to point or not.

If this argument is true, interface's type and ID are immediately set,
and a different group of attributes is set on the interface device, as
there is no way to fetch greybus attributes (vendor ID, product ID,
serial number) or Unipro attributes (ddbl1 manufacturer and product ID)
when SVC is absent, and so it doesn't make sense to expose them.

Signed-off-by: Damien Riégel <damien.riegel@...abs.com>
---
 drivers/greybus/interface.c       | 20 ++++++++++++++++----
 drivers/greybus/module.c          |  2 +-
 include/linux/greybus/interface.h |  3 ++-
 3 files changed, 19 insertions(+), 6 deletions(-)

diff --git a/drivers/greybus/interface.c b/drivers/greybus/interface.c
index e96b58b211b..aa2bd841977 100644
--- a/drivers/greybus/interface.c
+++ b/drivers/greybus/interface.c
@@ -687,6 +687,12 @@ static const struct attribute_group *interface_groups[] = {
 	NULL
 };
 
+static const struct attribute_group *interface_groups_p2p[] = {
+	&interface_greybus_group,
+	&interface_common_group,
+	NULL
+};
+
 static void gb_interface_release(struct device *dev)
 {
 	struct gb_interface *intf = to_gb_interface(dev);
@@ -790,7 +796,8 @@ const struct device_type greybus_interface_type = {
  * failure occurs due to memory exhaustion.
  */
 struct gb_interface *gb_interface_create(struct gb_module *module,
-					 u8 interface_id)
+					 u8 interface_id,
+					 bool p2p)
 {
 	struct gb_host_device *hd = module->hd;
 	struct gb_interface *intf;
@@ -808,13 +815,18 @@ struct gb_interface *gb_interface_create(struct gb_module *module,
 	INIT_WORK(&intf->mode_switch_work, gb_interface_mode_switch_work);
 	init_completion(&intf->mode_switch_completion);
 
-	/* Invalid device id to start with */
-	intf->device_id = GB_INTERFACE_DEVICE_ID_BAD;
+	if (p2p) {
+		intf->device_id = GB_SVC_DEVICE_ID_MIN;
+		intf->type = GB_INTERFACE_TYPE_P2P;
+	} else {
+		/* Invalid device id to start with */
+		intf->device_id = GB_INTERFACE_DEVICE_ID_BAD;
+	}
 
 	intf->dev.parent = &module->dev;
 	intf->dev.bus = &greybus_bus_type;
 	intf->dev.type = &greybus_interface_type;
-	intf->dev.groups = interface_groups;
+	intf->dev.groups = p2p ? interface_groups_p2p : interface_groups;
 	intf->dev.dma_mask = module->dev.dma_mask;
 	device_initialize(&intf->dev);
 	dev_set_name(&intf->dev, "%s.%u", dev_name(&module->dev),
diff --git a/drivers/greybus/module.c b/drivers/greybus/module.c
index 7f7153a1dd6..4ed68550d32 100644
--- a/drivers/greybus/module.c
+++ b/drivers/greybus/module.c
@@ -113,7 +113,7 @@ struct gb_module *gb_module_create(struct gb_host_device *hd, u8 module_id,
 	trace_gb_module_create(module);
 
 	for (i = 0; i < num_interfaces; ++i) {
-		intf = gb_interface_create(module, module_id + i);
+		intf = gb_interface_create(module, module_id + i, false);
 		if (!intf) {
 			dev_err(&module->dev, "failed to create interface %u\n",
 				module_id + i);
diff --git a/include/linux/greybus/interface.h b/include/linux/greybus/interface.h
index fed6356eb13..dee42859ebe 100644
--- a/include/linux/greybus/interface.h
+++ b/include/linux/greybus/interface.h
@@ -70,7 +70,8 @@ struct gb_interface {
 #define to_gb_interface(d) container_of(d, struct gb_interface, dev)
 
 struct gb_interface *gb_interface_create(struct gb_module *module,
-					 u8 interface_id);
+					 u8 interface_id,
+					 bool p2p);
 int gb_interface_activate(struct gb_interface *intf);
 void gb_interface_deactivate(struct gb_interface *intf);
 int gb_interface_enable(struct gb_interface *intf);
-- 
2.49.0


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ