u-boot.lists.denx.de archive mirror
 help / color / mirror / Atom feed
* [RESEND PATCH v2 0/3] net: fm: Add support for loading firmware from filesystem
@ 2022-04-22 17:30 Sean Anderson
  2022-04-22 17:30 ` [RESEND PATCH v2 1/3] misc: fs_loader: Add function to get the chosen loader Sean Anderson
                   ` (3 more replies)
  0 siblings, 4 replies; 12+ messages in thread
From: Sean Anderson @ 2022-04-22 17:30 UTC (permalink / raw)
  To: u-boot, Joe Hershberger, Ramon Fried
  Cc: Priyanka Jain, York Sun, Sean Anderson, Michal Simek,
	Patrick Delaunay, Simon Glass

This adds support for loading Fman firmware from a filesystem using the
firmware loader subsystem. It was originally part of [1], but has been
split off because it is conceptually separate.

[1] https://lore.kernel.org/u-boot/20220324182306.2037094-1-sean.anderson@seco.com/

Changes in v2:
- Split series into two

Sean Anderson (3):
  misc: fs_loader: Add function to get the chosen loader
  net: fm: Add firmware name parameter
  net: fm: Support loading firmware from a filesystem

 arch/arm/mach-k3/common.c         |  2 +-
 arch/arm/mach-omap2/boot-common.c |  2 +-
 drivers/fpga/socfpga_arria10.c    | 24 ++-----------------
 drivers/misc/fs_loader.c          | 27 +++++++++++++++++++++
 drivers/net/fm/fm.c               | 40 +++++++++++++++++++++++++++----
 drivers/net/fm/fm.h               |  2 +-
 drivers/net/fm/init.c             |  4 ++--
 drivers/qe/Kconfig                |  4 ++++
 include/fs_loader.h               | 12 ++++++++++
 9 files changed, 86 insertions(+), 31 deletions(-)

-- 
2.35.1.1320.gc452695387.dirty


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [RESEND PATCH v2 1/3] misc: fs_loader: Add function to get the chosen loader
  2022-04-22 17:30 [RESEND PATCH v2 0/3] net: fm: Add support for loading firmware from filesystem Sean Anderson
@ 2022-04-22 17:30 ` Sean Anderson
  2022-08-14 20:47   ` Ramon Fried
  2022-04-22 17:30 ` [RESEND PATCH v2 2/3] net: fm: Add firmware name parameter Sean Anderson
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 12+ messages in thread
From: Sean Anderson @ 2022-04-22 17:30 UTC (permalink / raw)
  To: u-boot, Joe Hershberger, Ramon Fried
  Cc: Priyanka Jain, York Sun, Sean Anderson, Simon Glass,
	Michal Simek, Patrick Delaunay

The fs_loader device is used to pull in settings via the chosen node.
However, there was no library function for this, so arria10 was doing it
explicitly. This function subsumes that, and uses ofnode_get_chosen_node
instead of navigating the device tree directly. Because fs_loader pulls
its config from the environment by default, it's fine to create a device
with nothing backing it at all. Doing this allows enabling
CONFIG_FS_LOADER without needing to modify the device tree.

Signed-off-by: Sean Anderson <sean.anderson@seco.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
---

(no changes since v1)

 arch/arm/mach-k3/common.c         |  2 +-
 arch/arm/mach-omap2/boot-common.c |  2 +-
 drivers/fpga/socfpga_arria10.c    | 24 ++----------------------
 drivers/misc/fs_loader.c          | 27 +++++++++++++++++++++++++++
 include/fs_loader.h               | 12 ++++++++++++
 5 files changed, 43 insertions(+), 24 deletions(-)

diff --git a/arch/arm/mach-k3/common.c b/arch/arm/mach-k3/common.c
index b4b75f4e6c..ec236d5a2e 100644
--- a/arch/arm/mach-k3/common.c
+++ b/arch/arm/mach-k3/common.c
@@ -181,7 +181,7 @@ int load_firmware(char *name_fw, char *name_loadaddr, u32 *loadaddr)
 	if (!*loadaddr)
 		return 0;
 
-	if (!uclass_get_device(UCLASS_FS_FIRMWARE_LOADER, 0, &fsdev)) {
+	if (!get_fs_loader(&fsdev)) {
 		size = request_firmware_into_buf(fsdev, name, (void *)*loadaddr,
 						 0, 0);
 	}
diff --git a/arch/arm/mach-omap2/boot-common.c b/arch/arm/mach-omap2/boot-common.c
index c463c96c74..88132b6572 100644
--- a/arch/arm/mach-omap2/boot-common.c
+++ b/arch/arm/mach-omap2/boot-common.c
@@ -212,7 +212,7 @@ int load_firmware(char *name_fw, u32 *loadaddr)
 	if (!*loadaddr)
 		return 0;
 
-	if (!uclass_get_device(UCLASS_FS_FIRMWARE_LOADER, 0, &fsdev)) {
+	if (!get_fs_loader(&fsdev)) {
 		size = request_firmware_into_buf(fsdev, name_fw,
 						 (void *)*loadaddr, 0, 0);
 	}
diff --git a/drivers/fpga/socfpga_arria10.c b/drivers/fpga/socfpga_arria10.c
index 798e3a3f90..65bebd8997 100644
--- a/drivers/fpga/socfpga_arria10.c
+++ b/drivers/fpga/socfpga_arria10.c
@@ -765,32 +765,12 @@ int socfpga_loadfs(fpga_fs_info *fpga_fsinfo, const void *buf, size_t bsize,
 	u32 phandle;
 
 	node = get_fpga_mgr_ofnode(ofnode_null());
-
-	if (ofnode_valid(node)) {
-		phandle_p = ofnode_get_property(node, "firmware-loader", &size);
-		if (!phandle_p) {
-			node = ofnode_path("/chosen");
-			if (!ofnode_valid(node)) {
-				debug("FPGA: /chosen node was not found.\n");
-				return -ENOENT;
-			}
-
-			phandle_p = ofnode_get_property(node, "firmware-loader",
-						       &size);
-			if (!phandle_p) {
-				debug("FPGA: firmware-loader property was not");
-				debug(" found.\n");
-				return -ENOENT;
-			}
-		}
-	} else {
+	if (!ofnode_valid(node)) {
 		debug("FPGA: FPGA manager node was not found.\n");
 		return -ENOENT;
 	}
 
-	phandle = fdt32_to_cpu(*phandle_p);
-	ret = uclass_get_device_by_phandle_id(UCLASS_FS_FIRMWARE_LOADER,
-					     phandle, &dev);
+	ret = get_fs_loader(&dev);
 	if (ret)
 		return ret;
 
diff --git a/drivers/misc/fs_loader.c b/drivers/misc/fs_loader.c
index 0139bd66ba..0018c930ec 100644
--- a/drivers/misc/fs_loader.c
+++ b/drivers/misc/fs_loader.c
@@ -15,6 +15,8 @@
 #include <fs_loader.h>
 #include <log.h>
 #include <asm/global_data.h>
+#include <dm/device-internal.h>
+#include <dm/root.h>
 #include <linux/string.h>
 #include <mapmem.h>
 #include <malloc.h>
@@ -293,6 +295,31 @@ U_BOOT_DRIVER(fs_loader) = {
 	.priv_auto	= sizeof(struct firmware),
 };
 
+static struct device_plat default_plat = { 0 };
+
+int get_fs_loader(struct udevice **dev)
+{
+	int ret;
+	ofnode node = ofnode_get_chosen_node("firmware-loader");
+
+	if (ofnode_valid(node))
+		return uclass_get_device_by_ofnode(UCLASS_FS_FIRMWARE_LOADER,
+						   node, dev);
+
+	/* Try the first device if none was chosen */
+	ret = uclass_first_device_err(UCLASS_FS_FIRMWARE_LOADER, dev);
+	if (ret != -ENODEV)
+		return ret;
+
+	/* Just create a new device */
+	ret = device_bind(dm_root(), DM_DRIVER_GET(fs_loader), "default-loader",
+			  &default_plat, ofnode_null(), dev);
+	if (ret)
+		return ret;
+
+	return device_probe(*dev);
+}
+
 UCLASS_DRIVER(fs_loader) = {
 	.id		= UCLASS_FS_FIRMWARE_LOADER,
 	.name		= "fs-loader",
diff --git a/include/fs_loader.h b/include/fs_loader.h
index 8de7cb18dc..5eb5b7ab4a 100644
--- a/include/fs_loader.h
+++ b/include/fs_loader.h
@@ -52,4 +52,16 @@ struct device_plat {
 int request_firmware_into_buf(struct udevice *dev,
 			      const char *name,
 			      void *buf, size_t size, u32 offset);
+
+/**
+ * get_fs_loader() - Get the chosen filesystem loader
+ * @dev: Where to store the device
+ *
+ * This gets a filesystem loader device based on the value of
+ * /chosen/firmware-loader. If no such property exists, it returns a
+ * firmware loader which is configured by environmental variables.
+ *
+ * Return: 0 on success, negative value on error
+ */
+int get_fs_loader(struct udevice **dev);
 #endif
-- 
2.35.1.1320.gc452695387.dirty


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [RESEND PATCH v2 2/3] net: fm: Add firmware name parameter
  2022-04-22 17:30 [RESEND PATCH v2 0/3] net: fm: Add support for loading firmware from filesystem Sean Anderson
  2022-04-22 17:30 ` [RESEND PATCH v2 1/3] misc: fs_loader: Add function to get the chosen loader Sean Anderson
@ 2022-04-22 17:30 ` Sean Anderson
  2022-08-14 20:46   ` Ramon Fried
  2022-04-22 17:30 ` [RESEND PATCH v2 3/3] net: fm: Support loading firmware from a filesystem Sean Anderson
  2022-08-13  6:15 ` [RESEND PATCH v2 0/3] net: fm: Add support for loading firmware from filesystem Sean Anderson
  3 siblings, 1 reply; 12+ messages in thread
From: Sean Anderson @ 2022-04-22 17:30 UTC (permalink / raw)
  To: u-boot, Joe Hershberger, Ramon Fried
  Cc: Priyanka Jain, York Sun, Sean Anderson

In order to read the firmware from the filesystem, we need a file name.
Read the firmware name from the device tree, using the firmware-name
property. This property is commonly used in Linux to determine the
correct name to use (and can be seen in several device trees in U-Boot).

Signed-off-by: Sean Anderson <sean.anderson@seco.com>
---

(no changes since v1)

 drivers/net/fm/fm.c   | 15 ++++++++++++---
 drivers/net/fm/fm.h   |  2 +-
 drivers/net/fm/init.c |  4 ++--
 3 files changed, 15 insertions(+), 6 deletions(-)

diff --git a/drivers/net/fm/fm.c b/drivers/net/fm/fm.c
index f825612640..aa0cc69232 100644
--- a/drivers/net/fm/fm.c
+++ b/drivers/net/fm/fm.c
@@ -7,6 +7,7 @@
 #include <env.h>
 #include <malloc.h>
 #include <asm/io.h>
+#include <dm/device_compat.h>
 #include <linux/errno.h>
 #include <u-boot/crc.h>
 #ifdef CONFIG_DM_ETH
@@ -354,7 +355,7 @@ static void fm_init_qmi(struct fm_qmi_common *qmi)
 
 /* Init common part of FM, index is fm num# like fm as above */
 #ifdef CONFIG_TFABOOT
-int fm_init_common(int index, struct ccsr_fman *reg)
+int fm_init_common(int index, struct ccsr_fman *reg, const char *firmware_name)
 {
 	int rc;
 	void *addr = NULL;
@@ -449,7 +450,7 @@ int fm_init_common(int index, struct ccsr_fman *reg)
 	return fm_init_bmi(index, &reg->fm_bmi_common);
 }
 #else
-int fm_init_common(int index, struct ccsr_fman *reg)
+int fm_init_common(int index, struct ccsr_fman *reg, const char *firmware_name)
 {
 	int rc;
 #if defined(CONFIG_SYS_QE_FMAN_FW_IN_NOR)
@@ -546,6 +547,8 @@ static const struct udevice_id fman_ids[] = {
 
 static int fman_probe(struct udevice *dev)
 {
+	const char *firmware_name = NULL;
+	int ret;
 	struct fman_priv *priv = dev_get_priv(dev);
 
 	priv->reg = (struct ccsr_fman *)(uintptr_t)dev_read_addr(dev);
@@ -555,7 +558,13 @@ static int fman_probe(struct udevice *dev)
 		return -EINVAL;
 	}
 
-	return fm_init_common(priv->fman_id, priv->reg);
+	ret = dev_read_string_index(dev, "firmware-name", 0, &firmware_name);
+	if (ret && ret != -EINVAL) {
+		dev_dbg(dev, "Could not read firmware-name\n");
+		return ret;
+	}
+
+	return fm_init_common(priv->fman_id, priv->reg, firmware_name);
 }
 
 static int fman_remove(struct udevice *dev)
diff --git a/drivers/net/fm/fm.h b/drivers/net/fm/fm.h
index 2379b3a11c..32de5cf2b6 100644
--- a/drivers/net/fm/fm.h
+++ b/drivers/net/fm/fm.h
@@ -108,7 +108,7 @@ struct fm_port_global_pram {
 
 void *fm_muram_alloc(int fm_idx, size_t size, ulong align);
 void *fm_muram_base(int fm_idx);
-int fm_init_common(int index, struct ccsr_fman *reg);
+int fm_init_common(int index, struct ccsr_fman *reg, const char *firmware_name);
 int fm_eth_initialize(struct ccsr_fman *reg, struct fm_eth_info *info);
 phy_interface_t fman_port_enet_if(enum fm_port port);
 void fman_disable_port(enum fm_port port);
diff --git a/drivers/net/fm/init.c b/drivers/net/fm/init.c
index 2fed64205c..a9a20931a1 100644
--- a/drivers/net/fm/init.c
+++ b/drivers/net/fm/init.c
@@ -93,7 +93,7 @@ int fm_standard_init(struct bd_info *bis)
 	struct ccsr_fman *reg;
 
 	reg = (void *)CONFIG_SYS_FSL_FM1_ADDR;
-	if (fm_init_common(0, reg))
+	if (fm_init_common(0, reg, NULL))
 		return 0;
 
 	for (i = 0; i < ARRAY_SIZE(fm_info); i++) {
@@ -103,7 +103,7 @@ int fm_standard_init(struct bd_info *bis)
 
 #if (CONFIG_SYS_NUM_FMAN == 2)
 	reg = (void *)CONFIG_SYS_FSL_FM2_ADDR;
-	if (fm_init_common(1, reg))
+	if (fm_init_common(1, reg, NULL))
 		return 0;
 
 	for (i = 0; i < ARRAY_SIZE(fm_info); i++) {
-- 
2.35.1.1320.gc452695387.dirty


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [RESEND PATCH v2 3/3] net: fm: Support loading firmware from a filesystem
  2022-04-22 17:30 [RESEND PATCH v2 0/3] net: fm: Add support for loading firmware from filesystem Sean Anderson
  2022-04-22 17:30 ` [RESEND PATCH v2 1/3] misc: fs_loader: Add function to get the chosen loader Sean Anderson
  2022-04-22 17:30 ` [RESEND PATCH v2 2/3] net: fm: Add firmware name parameter Sean Anderson
@ 2022-04-22 17:30 ` Sean Anderson
  2022-08-14 20:46   ` Ramon Fried
  2022-08-13  6:15 ` [RESEND PATCH v2 0/3] net: fm: Add support for loading firmware from filesystem Sean Anderson
  3 siblings, 1 reply; 12+ messages in thread
From: Sean Anderson @ 2022-04-22 17:30 UTC (permalink / raw)
  To: u-boot, Joe Hershberger, Ramon Fried
  Cc: Priyanka Jain, York Sun, Sean Anderson

This adds a new method to load Fman firmware from a filesystem. This
allows users to use regular files instead of hard-coded offsets for the
firmware.

Signed-off-by: Sean Anderson <sean.anderson@seco.com>
---

(no changes since v1)

 drivers/net/fm/fm.c | 25 ++++++++++++++++++++++++-
 drivers/qe/Kconfig  |  4 ++++
 2 files changed, 28 insertions(+), 1 deletion(-)

diff --git a/drivers/net/fm/fm.c b/drivers/net/fm/fm.c
index aa0cc69232..39b939cb97 100644
--- a/drivers/net/fm/fm.c
+++ b/drivers/net/fm/fm.c
@@ -5,6 +5,7 @@
  */
 #include <common.h>
 #include <env.h>
+#include <fs_loader.h>
 #include <malloc.h>
 #include <asm/io.h>
 #include <dm/device_compat.h>
@@ -453,7 +454,29 @@ int fm_init_common(int index, struct ccsr_fman *reg, const char *firmware_name)
 int fm_init_common(int index, struct ccsr_fman *reg, const char *firmware_name)
 {
 	int rc;
-#if defined(CONFIG_SYS_QE_FMAN_FW_IN_NOR)
+#if defined(CONFIG_SYS_QE_FMAN_FW_IN_FS)
+	struct udevice *fs_loader;
+	void *addr = malloc(CONFIG_SYS_QE_FMAN_FW_LENGTH);
+
+	if (!addr)
+		return -ENOMEM;
+
+	rc = get_fs_loader(&fs_loader);
+	if (rc) {
+		debug("could not get fs loader: %d\n", rc);
+		return rc;
+	}
+
+	if (!firmware_name)
+		firmware_name = "fman.itb";
+
+	rc = request_firmware_into_buf(fs_loader, firmware_name, addr,
+				       CONFIG_SYS_QE_FMAN_FW_LENGTH, 0);
+	if (rc < 0) {
+		debug("could not request %s: %d\n", firmware_name, rc);
+		return rc;
+	}
+#elif defined(CONFIG_SYS_QE_FMAN_FW_IN_NOR)
 	void *addr = (void *)CONFIG_SYS_FMAN_FW_ADDR;
 #elif defined(CONFIG_SYS_QE_FMAN_FW_IN_NAND)
 	size_t fw_length = CONFIG_SYS_QE_FMAN_FW_LENGTH;
diff --git a/drivers/qe/Kconfig b/drivers/qe/Kconfig
index c44a81f69a..89a75c175b 100644
--- a/drivers/qe/Kconfig
+++ b/drivers/qe/Kconfig
@@ -27,6 +27,10 @@ choice
 	depends on FMAN_ENET || QE
 	default SYS_QE_FMAN_FW_IN_ROM
 
+config SYS_QE_FMAN_FW_IN_FS
+	depends on FS_LOADER && FMAN_ENET
+	bool "Filesystem"
+
 config SYS_QE_FMAN_FW_IN_NOR
 	bool "NOR flash"
 
-- 
2.35.1.1320.gc452695387.dirty


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [RESEND PATCH v2 0/3] net: fm: Add support for loading firmware from filesystem
  2022-04-22 17:30 [RESEND PATCH v2 0/3] net: fm: Add support for loading firmware from filesystem Sean Anderson
                   ` (2 preceding siblings ...)
  2022-04-22 17:30 ` [RESEND PATCH v2 3/3] net: fm: Support loading firmware from a filesystem Sean Anderson
@ 2022-08-13  6:15 ` Sean Anderson
  2022-08-14 20:48   ` Ramon Fried
  3 siblings, 1 reply; 12+ messages in thread
From: Sean Anderson @ 2022-08-13  6:15 UTC (permalink / raw)
  To: u-boot, Joe Hershberger, Ramon Fried
  Cc: Priyanka Jain, York Sun, Michal Simek, Patrick Delaunay, Simon Glass

On 4/22/22 1:30 PM, Sean Anderson wrote:
> This adds support for loading Fman firmware from a filesystem using the
> firmware loader subsystem. It was originally part of [1], but has been
> split off because it is conceptually separate.
> 
> [1] https://lore.kernel.org/u-boot/20220324182306.2037094-1-sean.anderson@seco.com/
> 
> Changes in v2:
> - Split series into two
> 
> Sean Anderson (3):
>    misc: fs_loader: Add function to get the chosen loader
>    net: fm: Add firmware name parameter
>    net: fm: Support loading firmware from a filesystem
> 
>   arch/arm/mach-k3/common.c         |  2 +-
>   arch/arm/mach-omap2/boot-common.c |  2 +-
>   drivers/fpga/socfpga_arria10.c    | 24 ++-----------------
>   drivers/misc/fs_loader.c          | 27 +++++++++++++++++++++
>   drivers/net/fm/fm.c               | 40 +++++++++++++++++++++++++++----
>   drivers/net/fm/fm.h               |  2 +-
>   drivers/net/fm/init.c             |  4 ++--
>   drivers/qe/Kconfig                |  4 ++++
>   include/fs_loader.h               | 12 ++++++++++
>   9 files changed, 86 insertions(+), 31 deletions(-)
> 

ping

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [RESEND PATCH v2 2/3] net: fm: Add firmware name parameter
  2022-04-22 17:30 ` [RESEND PATCH v2 2/3] net: fm: Add firmware name parameter Sean Anderson
@ 2022-08-14 20:46   ` Ramon Fried
  0 siblings, 0 replies; 12+ messages in thread
From: Ramon Fried @ 2022-08-14 20:46 UTC (permalink / raw)
  To: Sean Anderson
  Cc: U-Boot Mailing List, Joe Hershberger, Priyanka Jain, York Sun

On Fri, Apr 22, 2022 at 8:30 PM Sean Anderson <sean.anderson@seco.com> wrote:
>
> In order to read the firmware from the filesystem, we need a file name.
> Read the firmware name from the device tree, using the firmware-name
> property. This property is commonly used in Linux to determine the
> correct name to use (and can be seen in several device trees in U-Boot).
>
> Signed-off-by: Sean Anderson <sean.anderson@seco.com>
> ---
>
> (no changes since v1)
>
>  drivers/net/fm/fm.c   | 15 ++++++++++++---
>  drivers/net/fm/fm.h   |  2 +-
>  drivers/net/fm/init.c |  4 ++--
>  3 files changed, 15 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/net/fm/fm.c b/drivers/net/fm/fm.c
> index f825612640..aa0cc69232 100644
> --- a/drivers/net/fm/fm.c
> +++ b/drivers/net/fm/fm.c
> @@ -7,6 +7,7 @@
>  #include <env.h>
>  #include <malloc.h>
>  #include <asm/io.h>
> +#include <dm/device_compat.h>
>  #include <linux/errno.h>
>  #include <u-boot/crc.h>
>  #ifdef CONFIG_DM_ETH
> @@ -354,7 +355,7 @@ static void fm_init_qmi(struct fm_qmi_common *qmi)
>
>  /* Init common part of FM, index is fm num# like fm as above */
>  #ifdef CONFIG_TFABOOT
> -int fm_init_common(int index, struct ccsr_fman *reg)
> +int fm_init_common(int index, struct ccsr_fman *reg, const char *firmware_name)
>  {
>         int rc;
>         void *addr = NULL;
> @@ -449,7 +450,7 @@ int fm_init_common(int index, struct ccsr_fman *reg)
>         return fm_init_bmi(index, &reg->fm_bmi_common);
>  }
>  #else
> -int fm_init_common(int index, struct ccsr_fman *reg)
> +int fm_init_common(int index, struct ccsr_fman *reg, const char *firmware_name)
>  {
>         int rc;
>  #if defined(CONFIG_SYS_QE_FMAN_FW_IN_NOR)
> @@ -546,6 +547,8 @@ static const struct udevice_id fman_ids[] = {
>
>  static int fman_probe(struct udevice *dev)
>  {
> +       const char *firmware_name = NULL;
> +       int ret;
>         struct fman_priv *priv = dev_get_priv(dev);
>
>         priv->reg = (struct ccsr_fman *)(uintptr_t)dev_read_addr(dev);
> @@ -555,7 +558,13 @@ static int fman_probe(struct udevice *dev)
>                 return -EINVAL;
>         }
>
> -       return fm_init_common(priv->fman_id, priv->reg);
> +       ret = dev_read_string_index(dev, "firmware-name", 0, &firmware_name);
> +       if (ret && ret != -EINVAL) {
> +               dev_dbg(dev, "Could not read firmware-name\n");
> +               return ret;
> +       }
> +
> +       return fm_init_common(priv->fman_id, priv->reg, firmware_name);
>  }
>
>  static int fman_remove(struct udevice *dev)
> diff --git a/drivers/net/fm/fm.h b/drivers/net/fm/fm.h
> index 2379b3a11c..32de5cf2b6 100644
> --- a/drivers/net/fm/fm.h
> +++ b/drivers/net/fm/fm.h
> @@ -108,7 +108,7 @@ struct fm_port_global_pram {
>
>  void *fm_muram_alloc(int fm_idx, size_t size, ulong align);
>  void *fm_muram_base(int fm_idx);
> -int fm_init_common(int index, struct ccsr_fman *reg);
> +int fm_init_common(int index, struct ccsr_fman *reg, const char *firmware_name);
>  int fm_eth_initialize(struct ccsr_fman *reg, struct fm_eth_info *info);
>  phy_interface_t fman_port_enet_if(enum fm_port port);
>  void fman_disable_port(enum fm_port port);
> diff --git a/drivers/net/fm/init.c b/drivers/net/fm/init.c
> index 2fed64205c..a9a20931a1 100644
> --- a/drivers/net/fm/init.c
> +++ b/drivers/net/fm/init.c
> @@ -93,7 +93,7 @@ int fm_standard_init(struct bd_info *bis)
>         struct ccsr_fman *reg;
>
>         reg = (void *)CONFIG_SYS_FSL_FM1_ADDR;
> -       if (fm_init_common(0, reg))
> +       if (fm_init_common(0, reg, NULL))
>                 return 0;
>
>         for (i = 0; i < ARRAY_SIZE(fm_info); i++) {
> @@ -103,7 +103,7 @@ int fm_standard_init(struct bd_info *bis)
>
>  #if (CONFIG_SYS_NUM_FMAN == 2)
>         reg = (void *)CONFIG_SYS_FSL_FM2_ADDR;
> -       if (fm_init_common(1, reg))
> +       if (fm_init_common(1, reg, NULL))
>                 return 0;
>
>         for (i = 0; i < ARRAY_SIZE(fm_info); i++) {
> --
> 2.35.1.1320.gc452695387.dirty
>
Reviewed-by: Ramon Fried <rfried.dev@gmail.com>

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [RESEND PATCH v2 3/3] net: fm: Support loading firmware from a filesystem
  2022-04-22 17:30 ` [RESEND PATCH v2 3/3] net: fm: Support loading firmware from a filesystem Sean Anderson
@ 2022-08-14 20:46   ` Ramon Fried
  0 siblings, 0 replies; 12+ messages in thread
From: Ramon Fried @ 2022-08-14 20:46 UTC (permalink / raw)
  To: Sean Anderson
  Cc: U-Boot Mailing List, Joe Hershberger, Priyanka Jain, York Sun

On Fri, Apr 22, 2022 at 8:30 PM Sean Anderson <sean.anderson@seco.com> wrote:
>
> This adds a new method to load Fman firmware from a filesystem. This
> allows users to use regular files instead of hard-coded offsets for the
> firmware.
>
> Signed-off-by: Sean Anderson <sean.anderson@seco.com>
> ---
>
> (no changes since v1)
>
>  drivers/net/fm/fm.c | 25 ++++++++++++++++++++++++-
>  drivers/qe/Kconfig  |  4 ++++
>  2 files changed, 28 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/net/fm/fm.c b/drivers/net/fm/fm.c
> index aa0cc69232..39b939cb97 100644
> --- a/drivers/net/fm/fm.c
> +++ b/drivers/net/fm/fm.c
> @@ -5,6 +5,7 @@
>   */
>  #include <common.h>
>  #include <env.h>
> +#include <fs_loader.h>
>  #include <malloc.h>
>  #include <asm/io.h>
>  #include <dm/device_compat.h>
> @@ -453,7 +454,29 @@ int fm_init_common(int index, struct ccsr_fman *reg, const char *firmware_name)
>  int fm_init_common(int index, struct ccsr_fman *reg, const char *firmware_name)
>  {
>         int rc;
> -#if defined(CONFIG_SYS_QE_FMAN_FW_IN_NOR)
> +#if defined(CONFIG_SYS_QE_FMAN_FW_IN_FS)
> +       struct udevice *fs_loader;
> +       void *addr = malloc(CONFIG_SYS_QE_FMAN_FW_LENGTH);
> +
> +       if (!addr)
> +               return -ENOMEM;
> +
> +       rc = get_fs_loader(&fs_loader);
> +       if (rc) {
> +               debug("could not get fs loader: %d\n", rc);
> +               return rc;
> +       }
> +
> +       if (!firmware_name)
> +               firmware_name = "fman.itb";
> +
> +       rc = request_firmware_into_buf(fs_loader, firmware_name, addr,
> +                                      CONFIG_SYS_QE_FMAN_FW_LENGTH, 0);
> +       if (rc < 0) {
> +               debug("could not request %s: %d\n", firmware_name, rc);
> +               return rc;
> +       }
> +#elif defined(CONFIG_SYS_QE_FMAN_FW_IN_NOR)
>         void *addr = (void *)CONFIG_SYS_FMAN_FW_ADDR;
>  #elif defined(CONFIG_SYS_QE_FMAN_FW_IN_NAND)
>         size_t fw_length = CONFIG_SYS_QE_FMAN_FW_LENGTH;
> diff --git a/drivers/qe/Kconfig b/drivers/qe/Kconfig
> index c44a81f69a..89a75c175b 100644
> --- a/drivers/qe/Kconfig
> +++ b/drivers/qe/Kconfig
> @@ -27,6 +27,10 @@ choice
>         depends on FMAN_ENET || QE
>         default SYS_QE_FMAN_FW_IN_ROM
>
> +config SYS_QE_FMAN_FW_IN_FS
> +       depends on FS_LOADER && FMAN_ENET
> +       bool "Filesystem"
> +
>  config SYS_QE_FMAN_FW_IN_NOR
>         bool "NOR flash"
>
> --
> 2.35.1.1320.gc452695387.dirty
>
Reviewed-by: Ramon Fried <rfried.dev@gmail.com>

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [RESEND PATCH v2 1/3] misc: fs_loader: Add function to get the chosen loader
  2022-04-22 17:30 ` [RESEND PATCH v2 1/3] misc: fs_loader: Add function to get the chosen loader Sean Anderson
@ 2022-08-14 20:47   ` Ramon Fried
  0 siblings, 0 replies; 12+ messages in thread
From: Ramon Fried @ 2022-08-14 20:47 UTC (permalink / raw)
  To: Sean Anderson
  Cc: U-Boot Mailing List, Joe Hershberger, Priyanka Jain, York Sun,
	Simon Glass, Michal Simek, Patrick Delaunay

On Fri, Apr 22, 2022 at 8:30 PM Sean Anderson <sean.anderson@seco.com> wrote:
>
> The fs_loader device is used to pull in settings via the chosen node.
> However, there was no library function for this, so arria10 was doing it
> explicitly. This function subsumes that, and uses ofnode_get_chosen_node
> instead of navigating the device tree directly. Because fs_loader pulls
> its config from the environment by default, it's fine to create a device
> with nothing backing it at all. Doing this allows enabling
> CONFIG_FS_LOADER without needing to modify the device tree.
>
> Signed-off-by: Sean Anderson <sean.anderson@seco.com>
> Reviewed-by: Simon Glass <sjg@chromium.org>
> ---
>
> (no changes since v1)
>
>  arch/arm/mach-k3/common.c         |  2 +-
>  arch/arm/mach-omap2/boot-common.c |  2 +-
>  drivers/fpga/socfpga_arria10.c    | 24 ++----------------------
>  drivers/misc/fs_loader.c          | 27 +++++++++++++++++++++++++++
>  include/fs_loader.h               | 12 ++++++++++++
>  5 files changed, 43 insertions(+), 24 deletions(-)
>
> diff --git a/arch/arm/mach-k3/common.c b/arch/arm/mach-k3/common.c
> index b4b75f4e6c..ec236d5a2e 100644
> --- a/arch/arm/mach-k3/common.c
> +++ b/arch/arm/mach-k3/common.c
> @@ -181,7 +181,7 @@ int load_firmware(char *name_fw, char *name_loadaddr, u32 *loadaddr)
>         if (!*loadaddr)
>                 return 0;
>
> -       if (!uclass_get_device(UCLASS_FS_FIRMWARE_LOADER, 0, &fsdev)) {
> +       if (!get_fs_loader(&fsdev)) {
>                 size = request_firmware_into_buf(fsdev, name, (void *)*loadaddr,
>                                                  0, 0);
>         }
> diff --git a/arch/arm/mach-omap2/boot-common.c b/arch/arm/mach-omap2/boot-common.c
> index c463c96c74..88132b6572 100644
> --- a/arch/arm/mach-omap2/boot-common.c
> +++ b/arch/arm/mach-omap2/boot-common.c
> @@ -212,7 +212,7 @@ int load_firmware(char *name_fw, u32 *loadaddr)
>         if (!*loadaddr)
>                 return 0;
>
> -       if (!uclass_get_device(UCLASS_FS_FIRMWARE_LOADER, 0, &fsdev)) {
> +       if (!get_fs_loader(&fsdev)) {
>                 size = request_firmware_into_buf(fsdev, name_fw,
>                                                  (void *)*loadaddr, 0, 0);
>         }
> diff --git a/drivers/fpga/socfpga_arria10.c b/drivers/fpga/socfpga_arria10.c
> index 798e3a3f90..65bebd8997 100644
> --- a/drivers/fpga/socfpga_arria10.c
> +++ b/drivers/fpga/socfpga_arria10.c
> @@ -765,32 +765,12 @@ int socfpga_loadfs(fpga_fs_info *fpga_fsinfo, const void *buf, size_t bsize,
>         u32 phandle;
>
>         node = get_fpga_mgr_ofnode(ofnode_null());
> -
> -       if (ofnode_valid(node)) {
> -               phandle_p = ofnode_get_property(node, "firmware-loader", &size);
> -               if (!phandle_p) {
> -                       node = ofnode_path("/chosen");
> -                       if (!ofnode_valid(node)) {
> -                               debug("FPGA: /chosen node was not found.\n");
> -                               return -ENOENT;
> -                       }
> -
> -                       phandle_p = ofnode_get_property(node, "firmware-loader",
> -                                                      &size);
> -                       if (!phandle_p) {
> -                               debug("FPGA: firmware-loader property was not");
> -                               debug(" found.\n");
> -                               return -ENOENT;
> -                       }
> -               }
> -       } else {
> +       if (!ofnode_valid(node)) {
>                 debug("FPGA: FPGA manager node was not found.\n");
>                 return -ENOENT;
>         }
>
> -       phandle = fdt32_to_cpu(*phandle_p);
> -       ret = uclass_get_device_by_phandle_id(UCLASS_FS_FIRMWARE_LOADER,
> -                                            phandle, &dev);
> +       ret = get_fs_loader(&dev);
>         if (ret)
>                 return ret;
>
> diff --git a/drivers/misc/fs_loader.c b/drivers/misc/fs_loader.c
> index 0139bd66ba..0018c930ec 100644
> --- a/drivers/misc/fs_loader.c
> +++ b/drivers/misc/fs_loader.c
> @@ -15,6 +15,8 @@
>  #include <fs_loader.h>
>  #include <log.h>
>  #include <asm/global_data.h>
> +#include <dm/device-internal.h>
> +#include <dm/root.h>
>  #include <linux/string.h>
>  #include <mapmem.h>
>  #include <malloc.h>
> @@ -293,6 +295,31 @@ U_BOOT_DRIVER(fs_loader) = {
>         .priv_auto      = sizeof(struct firmware),
>  };
>
> +static struct device_plat default_plat = { 0 };
> +
> +int get_fs_loader(struct udevice **dev)
> +{
> +       int ret;
> +       ofnode node = ofnode_get_chosen_node("firmware-loader");
> +
> +       if (ofnode_valid(node))
> +               return uclass_get_device_by_ofnode(UCLASS_FS_FIRMWARE_LOADER,
> +                                                  node, dev);
> +
> +       /* Try the first device if none was chosen */
> +       ret = uclass_first_device_err(UCLASS_FS_FIRMWARE_LOADER, dev);
> +       if (ret != -ENODEV)
> +               return ret;
> +
> +       /* Just create a new device */
> +       ret = device_bind(dm_root(), DM_DRIVER_GET(fs_loader), "default-loader",
> +                         &default_plat, ofnode_null(), dev);
> +       if (ret)
> +               return ret;
> +
> +       return device_probe(*dev);
> +}
> +
>  UCLASS_DRIVER(fs_loader) = {
>         .id             = UCLASS_FS_FIRMWARE_LOADER,
>         .name           = "fs-loader",
> diff --git a/include/fs_loader.h b/include/fs_loader.h
> index 8de7cb18dc..5eb5b7ab4a 100644
> --- a/include/fs_loader.h
> +++ b/include/fs_loader.h
> @@ -52,4 +52,16 @@ struct device_plat {
>  int request_firmware_into_buf(struct udevice *dev,
>                               const char *name,
>                               void *buf, size_t size, u32 offset);
> +
> +/**
> + * get_fs_loader() - Get the chosen filesystem loader
> + * @dev: Where to store the device
> + *
> + * This gets a filesystem loader device based on the value of
> + * /chosen/firmware-loader. If no such property exists, it returns a
> + * firmware loader which is configured by environmental variables.
> + *
> + * Return: 0 on success, negative value on error
> + */
> +int get_fs_loader(struct udevice **dev);
>  #endif
> --
> 2.35.1.1320.gc452695387.dirty
>
Reviewed-by: Ramon Fried <rfried.dev@gmail.com>

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [RESEND PATCH v2 0/3] net: fm: Add support for loading firmware from filesystem
  2022-08-13  6:15 ` [RESEND PATCH v2 0/3] net: fm: Add support for loading firmware from filesystem Sean Anderson
@ 2022-08-14 20:48   ` Ramon Fried
  2022-11-17 21:29     ` Sean Anderson
  0 siblings, 1 reply; 12+ messages in thread
From: Ramon Fried @ 2022-08-14 20:48 UTC (permalink / raw)
  To: Sean Anderson
  Cc: U-Boot Mailing List, Joe Hershberger, Priyanka Jain, York Sun,
	Michal Simek, Patrick Delaunay, Simon Glass

On Sat, Aug 13, 2022 at 9:15 AM Sean Anderson <sean.anderson@seco.com> wrote:
>
> On 4/22/22 1:30 PM, Sean Anderson wrote:
> > This adds support for loading Fman firmware from a filesystem using the
> > firmware loader subsystem. It was originally part of [1], but has been
> > split off because it is conceptually separate.
> >
> > [1] https://lore.kernel.org/u-boot/20220324182306.2037094-1-sean.anderson@seco.com/
> >
> > Changes in v2:
> > - Split series into two
> >
> > Sean Anderson (3):
> >    misc: fs_loader: Add function to get the chosen loader
> >    net: fm: Add firmware name parameter
> >    net: fm: Support loading firmware from a filesystem
> >
> >   arch/arm/mach-k3/common.c         |  2 +-
> >   arch/arm/mach-omap2/boot-common.c |  2 +-
> >   drivers/fpga/socfpga_arria10.c    | 24 ++-----------------
> >   drivers/misc/fs_loader.c          | 27 +++++++++++++++++++++
> >   drivers/net/fm/fm.c               | 40 +++++++++++++++++++++++++++----
> >   drivers/net/fm/fm.h               |  2 +-
> >   drivers/net/fm/init.c             |  4 ++--
> >   drivers/qe/Kconfig                |  4 ++++
> >   include/fs_loader.h               | 12 ++++++++++
> >   9 files changed, 86 insertions(+), 31 deletions(-)
> >
>
> ping
Pong, sorry, was lost in the mailbox.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [RESEND PATCH v2 0/3] net: fm: Add support for loading firmware from filesystem
  2022-08-14 20:48   ` Ramon Fried
@ 2022-11-17 21:29     ` Sean Anderson
  2022-11-26 22:47       ` Ramon Fried
  0 siblings, 1 reply; 12+ messages in thread
From: Sean Anderson @ 2022-11-17 21:29 UTC (permalink / raw)
  To: Ramon Fried
  Cc: U-Boot Mailing List, Joe Hershberger, Priyanka Jain, York Sun,
	Michal Simek, Patrick Delaunay, Simon Glass

On 8/14/22 16:48, Ramon Fried wrote:
> On Sat, Aug 13, 2022 at 9:15 AM Sean Anderson <sean.anderson@seco.com> wrote:
>>
>> On 4/22/22 1:30 PM, Sean Anderson wrote:
>> > This adds support for loading Fman firmware from a filesystem using the
>> > firmware loader subsystem. It was originally part of [1], but has been
>> > split off because it is conceptually separate.
>> >
>> > [1] https://lore.kernel.org/u-boot/20220324182306.2037094-1-sean.anderson@seco.com/
>> >
>> > Changes in v2:
>> > - Split series into two
>> >
>> > Sean Anderson (3):
>> >    misc: fs_loader: Add function to get the chosen loader
>> >    net: fm: Add firmware name parameter
>> >    net: fm: Support loading firmware from a filesystem
>> >
>> >   arch/arm/mach-k3/common.c         |  2 +-
>> >   arch/arm/mach-omap2/boot-common.c |  2 +-
>> >   drivers/fpga/socfpga_arria10.c    | 24 ++-----------------
>> >   drivers/misc/fs_loader.c          | 27 +++++++++++++++++++++
>> >   drivers/net/fm/fm.c               | 40 +++++++++++++++++++++++++++----
>> >   drivers/net/fm/fm.h               |  2 +-
>> >   drivers/net/fm/init.c             |  4 ++--
>> >   drivers/qe/Kconfig                |  4 ++++
>> >   include/fs_loader.h               | 12 ++++++++++
>> >   9 files changed, 86 insertions(+), 31 deletions(-)
>> >
>>
>> ping
> Pong, sorry, was lost in the mailbox.

ping again

Looks like this got reviewed but never applied. Does it still apply
cleanly? If not I can rebase and resend.

--Sean

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [RESEND PATCH v2 0/3] net: fm: Add support for loading firmware from filesystem
  2022-11-17 21:29     ` Sean Anderson
@ 2022-11-26 22:47       ` Ramon Fried
  2022-11-28 15:03         ` Tom Rini
  0 siblings, 1 reply; 12+ messages in thread
From: Ramon Fried @ 2022-11-26 22:47 UTC (permalink / raw)
  To: Sean Anderson, Tom Rini
  Cc: U-Boot Mailing List, Joe Hershberger, Priyanka Jain, York Sun,
	Michal Simek, Patrick Delaunay, Simon Glass

On Thu, Nov 17, 2022 at 11:29 PM Sean Anderson <sean.anderson@seco.com> wrote:
>
> On 8/14/22 16:48, Ramon Fried wrote:
> > On Sat, Aug 13, 2022 at 9:15 AM Sean Anderson <sean.anderson@seco.com> wrote:
> >>
> >> On 4/22/22 1:30 PM, Sean Anderson wrote:
> >> > This adds support for loading Fman firmware from a filesystem using the
> >> > firmware loader subsystem. It was originally part of [1], but has been
> >> > split off because it is conceptually separate.
> >> >
> >> > [1] https://lore.kernel.org/u-boot/20220324182306.2037094-1-sean.anderson@seco.com/
> >> >
> >> > Changes in v2:
> >> > - Split series into two
> >> >
> >> > Sean Anderson (3):
> >> >    misc: fs_loader: Add function to get the chosen loader
> >> >    net: fm: Add firmware name parameter
> >> >    net: fm: Support loading firmware from a filesystem
> >> >
> >> >   arch/arm/mach-k3/common.c         |  2 +-
> >> >   arch/arm/mach-omap2/boot-common.c |  2 +-
> >> >   drivers/fpga/socfpga_arria10.c    | 24 ++-----------------
> >> >   drivers/misc/fs_loader.c          | 27 +++++++++++++++++++++
> >> >   drivers/net/fm/fm.c               | 40 +++++++++++++++++++++++++++----
> >> >   drivers/net/fm/fm.h               |  2 +-
> >> >   drivers/net/fm/init.c             |  4 ++--
> >> >   drivers/qe/Kconfig                |  4 ++++
> >> >   include/fs_loader.h               | 12 ++++++++++
> >> >   9 files changed, 86 insertions(+), 31 deletions(-)
> >> >
> >>
> >> ping
> > Pong, sorry, was lost in the mailbox.
>
> ping again
>
> Looks like this got reviewed but never applied. Does it still apply
> cleanly? If not I can rebase and resend.
Tom ?
>
> --Sean

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [RESEND PATCH v2 0/3] net: fm: Add support for loading firmware from filesystem
  2022-11-26 22:47       ` Ramon Fried
@ 2022-11-28 15:03         ` Tom Rini
  0 siblings, 0 replies; 12+ messages in thread
From: Tom Rini @ 2022-11-28 15:03 UTC (permalink / raw)
  To: Ramon Fried, Marek Vasut
  Cc: Sean Anderson, U-Boot Mailing List, Joe Hershberger,
	Priyanka Jain, York Sun, Michal Simek, Patrick Delaunay,
	Simon Glass

[-- Attachment #1: Type: text/plain, Size: 2000 bytes --]

On Sun, Nov 27, 2022 at 12:47:37AM +0200, Ramon Fried wrote:
> On Thu, Nov 17, 2022 at 11:29 PM Sean Anderson <sean.anderson@seco.com> wrote:
> >
> > On 8/14/22 16:48, Ramon Fried wrote:
> > > On Sat, Aug 13, 2022 at 9:15 AM Sean Anderson <sean.anderson@seco.com> wrote:
> > >>
> > >> On 4/22/22 1:30 PM, Sean Anderson wrote:
> > >> > This adds support for loading Fman firmware from a filesystem using the
> > >> > firmware loader subsystem. It was originally part of [1], but has been
> > >> > split off because it is conceptually separate.
> > >> >
> > >> > [1] https://lore.kernel.org/u-boot/20220324182306.2037094-1-sean.anderson@seco.com/
> > >> >
> > >> > Changes in v2:
> > >> > - Split series into two
> > >> >
> > >> > Sean Anderson (3):
> > >> >    misc: fs_loader: Add function to get the chosen loader
> > >> >    net: fm: Add firmware name parameter
> > >> >    net: fm: Support loading firmware from a filesystem
> > >> >
> > >> >   arch/arm/mach-k3/common.c         |  2 +-
> > >> >   arch/arm/mach-omap2/boot-common.c |  2 +-
> > >> >   drivers/fpga/socfpga_arria10.c    | 24 ++-----------------
> > >> >   drivers/misc/fs_loader.c          | 27 +++++++++++++++++++++
> > >> >   drivers/net/fm/fm.c               | 40 +++++++++++++++++++++++++++----
> > >> >   drivers/net/fm/fm.h               |  2 +-
> > >> >   drivers/net/fm/init.c             |  4 ++--
> > >> >   drivers/qe/Kconfig                |  4 ++++
> > >> >   include/fs_loader.h               | 12 ++++++++++
> > >> >   9 files changed, 86 insertions(+), 31 deletions(-)
> > >> >
> > >>
> > >> ping
> > > Pong, sorry, was lost in the mailbox.
> >
> > ping again
> >
> > Looks like this got reviewed but never applied. Does it still apply
> > cleanly? If not I can rebase and resend.
> Tom ?

I don't see a problem with this. I see in patchwork it's assigned to
Marek and "Under Review", which I don't recall doing, so, are you
looking at these currently Marek?

-- 
Tom

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 659 bytes --]

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2022-11-28 15:03 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-04-22 17:30 [RESEND PATCH v2 0/3] net: fm: Add support for loading firmware from filesystem Sean Anderson
2022-04-22 17:30 ` [RESEND PATCH v2 1/3] misc: fs_loader: Add function to get the chosen loader Sean Anderson
2022-08-14 20:47   ` Ramon Fried
2022-04-22 17:30 ` [RESEND PATCH v2 2/3] net: fm: Add firmware name parameter Sean Anderson
2022-08-14 20:46   ` Ramon Fried
2022-04-22 17:30 ` [RESEND PATCH v2 3/3] net: fm: Support loading firmware from a filesystem Sean Anderson
2022-08-14 20:46   ` Ramon Fried
2022-08-13  6:15 ` [RESEND PATCH v2 0/3] net: fm: Add support for loading firmware from filesystem Sean Anderson
2022-08-14 20:48   ` Ramon Fried
2022-11-17 21:29     ` Sean Anderson
2022-11-26 22:47       ` Ramon Fried
2022-11-28 15:03         ` Tom Rini

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).