diff mbox series

[v2,1/1] dm: fpga: Introduce new uclass

Message ID 20220930120430.42307-2-post@lespocky.de
State Accepted
Delegated to: Michal Simek
Headers show
Series dm: fpga: Introduce new uclass | expand

Commit Message

Alexander Dahl Sept. 30, 2022, 12:04 p.m. UTC
For future DM based FPGA drivers and for now to have a meaningful
logging class for old FPGA drivers.

Suggested-by: Michal Simek <michal.simek@amd.com>
Suggested-by: Simon Glass <sjg@chromium.org>
Signed-off-by: Alexander Dahl <post@lespocky.de>
---

Notes:
    RFC -> v2:
      - Added/Improved Kconfig help texts
      - Use `uclass_first_device_err()` in test
      - Add compatibles match list to sandbox driver
      - Add 'test/dm/fpga.c' to MAINTAINERS

 MAINTAINERS                |  1 +
 arch/sandbox/dts/test.dts  |  4 ++++
 drivers/fpga/Kconfig       | 19 +++++++++++++++++++
 drivers/fpga/Makefile      |  3 +++
 drivers/fpga/fpga-uclass.c | 11 +++++++++++
 drivers/fpga/sandbox.c     | 17 +++++++++++++++++
 include/dm/uclass-id.h     |  1 +
 test/dm/Makefile           |  1 +
 test/dm/fpga.c             | 20 ++++++++++++++++++++
 9 files changed, 77 insertions(+)
 create mode 100644 drivers/fpga/fpga-uclass.c
 create mode 100644 drivers/fpga/sandbox.c
 create mode 100644 test/dm/fpga.c

Comments

Simon Glass Sept. 30, 2022, 11:49 p.m. UTC | #1
On Fri, 30 Sept 2022 at 06:05, Alexander Dahl <post@lespocky.de> wrote:
>
> For future DM based FPGA drivers and for now to have a meaningful
> logging class for old FPGA drivers.
>
> Suggested-by: Michal Simek <michal.simek@amd.com>
> Suggested-by: Simon Glass <sjg@chromium.org>
> Signed-off-by: Alexander Dahl <post@lespocky.de>
> ---
>
> Notes:
>     RFC -> v2:
>       - Added/Improved Kconfig help texts
>       - Use `uclass_first_device_err()` in test
>       - Add compatibles match list to sandbox driver
>       - Add 'test/dm/fpga.c' to MAINTAINERS
>
>  MAINTAINERS                |  1 +
>  arch/sandbox/dts/test.dts  |  4 ++++
>  drivers/fpga/Kconfig       | 19 +++++++++++++++++++
>  drivers/fpga/Makefile      |  3 +++
>  drivers/fpga/fpga-uclass.c | 11 +++++++++++
>  drivers/fpga/sandbox.c     | 17 +++++++++++++++++
>  include/dm/uclass-id.h     |  1 +
>  test/dm/Makefile           |  1 +
>  test/dm/fpga.c             | 20 ++++++++++++++++++++
>  9 files changed, 77 insertions(+)
>  create mode 100644 drivers/fpga/fpga-uclass.c
>  create mode 100644 drivers/fpga/sandbox.c
>  create mode 100644 test/dm/fpga.c

Reviewed-by: Simon Glass <sjg@chromium.org>

The only thing needed now is a header file, but we can add that once
we have some operations.
Michal Simek Oct. 3, 2022, 6:34 a.m. UTC | #2
Hi Simon,

On 10/1/22 01:49, Simon Glass wrote:
> On Fri, 30 Sept 2022 at 06:05, Alexander Dahl <post@lespocky.de> wrote:
>>
>> For future DM based FPGA drivers and for now to have a meaningful
>> logging class for old FPGA drivers.
>>
>> Suggested-by: Michal Simek <michal.simek@amd.com>
>> Suggested-by: Simon Glass <sjg@chromium.org>
>> Signed-off-by: Alexander Dahl <post@lespocky.de>
>> ---
>>
>> Notes:
>>      RFC -> v2:
>>        - Added/Improved Kconfig help texts
>>        - Use `uclass_first_device_err()` in test
>>        - Add compatibles match list to sandbox driver
>>        - Add 'test/dm/fpga.c' to MAINTAINERS
>>
>>   MAINTAINERS                |  1 +
>>   arch/sandbox/dts/test.dts  |  4 ++++
>>   drivers/fpga/Kconfig       | 19 +++++++++++++++++++
>>   drivers/fpga/Makefile      |  3 +++
>>   drivers/fpga/fpga-uclass.c | 11 +++++++++++
>>   drivers/fpga/sandbox.c     | 17 +++++++++++++++++
>>   include/dm/uclass-id.h     |  1 +
>>   test/dm/Makefile           |  1 +
>>   test/dm/fpga.c             | 20 ++++++++++++++++++++
>>   9 files changed, 77 insertions(+)
>>   create mode 100644 drivers/fpga/fpga-uclass.c
>>   create mode 100644 drivers/fpga/sandbox.c
>>   create mode 100644 test/dm/fpga.c
> 
> Reviewed-by: Simon Glass <sjg@chromium.org>
> 
> The only thing needed now is a header file, but we can add that once
> we have some operations.

Do you want me to take it via my tree or you want to take it via your DM tree?
Both ways works for me.

Thanks,
Michal
Simon Glass Oct. 3, 2022, 2:57 p.m. UTC | #3
Hi Michal,

On Mon, 3 Oct 2022 at 00:34, Michal Simek <michal.simek@amd.com> wrote:
>
> Hi Simon,
>
> On 10/1/22 01:49, Simon Glass wrote:
> > On Fri, 30 Sept 2022 at 06:05, Alexander Dahl <post@lespocky.de> wrote:
> >>
> >> For future DM based FPGA drivers and for now to have a meaningful
> >> logging class for old FPGA drivers.
> >>
> >> Suggested-by: Michal Simek <michal.simek@amd.com>
> >> Suggested-by: Simon Glass <sjg@chromium.org>
> >> Signed-off-by: Alexander Dahl <post@lespocky.de>
> >> ---
> >>
> >> Notes:
> >>      RFC -> v2:
> >>        - Added/Improved Kconfig help texts
> >>        - Use `uclass_first_device_err()` in test
> >>        - Add compatibles match list to sandbox driver
> >>        - Add 'test/dm/fpga.c' to MAINTAINERS
> >>
> >>   MAINTAINERS                |  1 +
> >>   arch/sandbox/dts/test.dts  |  4 ++++
> >>   drivers/fpga/Kconfig       | 19 +++++++++++++++++++
> >>   drivers/fpga/Makefile      |  3 +++
> >>   drivers/fpga/fpga-uclass.c | 11 +++++++++++
> >>   drivers/fpga/sandbox.c     | 17 +++++++++++++++++
> >>   include/dm/uclass-id.h     |  1 +
> >>   test/dm/Makefile           |  1 +
> >>   test/dm/fpga.c             | 20 ++++++++++++++++++++
> >>   9 files changed, 77 insertions(+)
> >>   create mode 100644 drivers/fpga/fpga-uclass.c
> >>   create mode 100644 drivers/fpga/sandbox.c
> >>   create mode 100644 test/dm/fpga.c
> >
> > Reviewed-by: Simon Glass <sjg@chromium.org>
> >
> > The only thing needed now is a header file, but we can add that once
> > we have some operations.
>
> Do you want me to take it via my tree or you want to take it via your DM tree?
> Both ways works for me.

If you are doing it soon, go ahead!

Regards,
Simon
diff mbox series

Patch

diff --git a/MAINTAINERS b/MAINTAINERS
index 83346183ee..12a7c62a23 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -918,6 +918,7 @@  T:	git https://source.denx.de/u-boot/custodians/u-boot-microblaze.git
 F:	drivers/fpga/
 F:	cmd/fpga.c
 F:	include/fpga.h
+F:	test/dm/fpga.c
 
 FLATTENED DEVICE TREE
 M:	Simon Glass <sjg@chromium.org>
diff --git a/arch/sandbox/dts/test.dts b/arch/sandbox/dts/test.dts
index 2761588f0d..3b9cc8cd7c 100644
--- a/arch/sandbox/dts/test.dts
+++ b/arch/sandbox/dts/test.dts
@@ -650,6 +650,10 @@ 
 		};
 	};
 
+	fpga {
+		compatible = "sandbox,fpga";
+	};
+
 	pinctrl-gpio {
 		compatible = "sandbox,pinctrl-gpio";
 
diff --git a/drivers/fpga/Kconfig b/drivers/fpga/Kconfig
index e07a9cf80e..e2fd16e6d2 100644
--- a/drivers/fpga/Kconfig
+++ b/drivers/fpga/Kconfig
@@ -118,4 +118,23 @@  config SPL_FPGA_LOAD_SECURE
 	  Enables the fpga loads() functions that are used to load secure
 	  (authenticated or encrypted or both) bitstreams on to FPGA.
 
+config DM_FPGA
+	bool "Enable Driver Model for FPGA drivers"
+	depends on DM
+	select FPGA
+	help
+	  Enable driver model for Field-Programmable Gate Array (FPGA) devices.
+	  The devices cover a wide range of applications and are configured at
+	  runtime by loading a bitstream into the FPGA device.
+	  Loading a bitstream from any kind of storage is the main task of the
+	  FPGA drivers.
+	  For now this uclass has no methods yet.
+
+config SANDBOX_FPGA
+	bool "Enable sandbox FPGA driver"
+	depends on SANDBOX && DM_FPGA
+	help
+	  This is a driver model based FPGA driver for sandbox.
+	  Currently it is a stub only, as there are no usable uclass methods yet.
+
 endmenu
diff --git a/drivers/fpga/Makefile b/drivers/fpga/Makefile
index 83243fb107..610c168fc3 100644
--- a/drivers/fpga/Makefile
+++ b/drivers/fpga/Makefile
@@ -4,6 +4,9 @@ 
 # Wolfgang Denk, DENX Software Engineering, wd@denx.de.
 
 obj-y += fpga.o
+obj-$(CONFIG_DM_FPGA) += fpga-uclass.o
+obj-$(CONFIG_SANDBOX_FPGA) += sandbox.o
+
 obj-$(CONFIG_FPGA_SPARTAN2) += spartan2.o
 obj-$(CONFIG_FPGA_SPARTAN3) += spartan3.o
 obj-$(CONFIG_FPGA_VERSALPL) += versalpl.o
diff --git a/drivers/fpga/fpga-uclass.c b/drivers/fpga/fpga-uclass.c
new file mode 100644
index 0000000000..4278ec28e5
--- /dev/null
+++ b/drivers/fpga/fpga-uclass.c
@@ -0,0 +1,11 @@ 
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright 2022 Alexander Dahl <post@lespocky.de>
+ */
+
+#include <dm.h>
+
+UCLASS_DRIVER(fpga) = {
+	.name	= "fpga",
+	.id	= UCLASS_FPGA,
+};
diff --git a/drivers/fpga/sandbox.c b/drivers/fpga/sandbox.c
new file mode 100644
index 0000000000..f17a822179
--- /dev/null
+++ b/drivers/fpga/sandbox.c
@@ -0,0 +1,17 @@ 
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright 2022 Alexander Dahl <post@lespocky.de>
+ */
+
+#include <dm.h>
+
+static const struct udevice_id sandbox_fpga_match[] = {
+	{ .compatible = "sandbox,fpga" },
+	{ /* sentinel */ }
+};
+
+U_BOOT_DRIVER(sandbox_fpga) = {
+	.name	= "sandbox_fpga",
+	.id	= UCLASS_FPGA,
+	.of_match = sandbox_fpga_match,
+};
diff --git a/include/dm/uclass-id.h b/include/dm/uclass-id.h
index a432e43871..c2b15881ba 100644
--- a/include/dm/uclass-id.h
+++ b/include/dm/uclass-id.h
@@ -56,6 +56,7 @@  enum uclass_id {
 	UCLASS_ETH,		/* Ethernet device */
 	UCLASS_ETH_PHY,		/* Ethernet PHY device */
 	UCLASS_FIRMWARE,	/* Firmware */
+	UCLASS_FPGA,		/* FPGA device */
 	UCLASS_FUZZING_ENGINE,	/* Fuzzing engine */
 	UCLASS_FS_FIRMWARE_LOADER,		/* Generic loader */
 	UCLASS_GPIO,		/* Bank of general-purpose I/O pins */
diff --git a/test/dm/Makefile b/test/dm/Makefile
index 7543df8823..666c85f10a 100644
--- a/test/dm/Makefile
+++ b/test/dm/Makefile
@@ -47,6 +47,7 @@  ifneq ($(CONFIG_EFI_PARTITION),)
 obj-$(CONFIG_FASTBOOT_FLASH_MMC) += fastboot.o
 endif
 obj-$(CONFIG_FIRMWARE) += firmware.o
+obj-$(CONFIG_DM_FPGA) += fpga.o
 obj-$(CONFIG_DM_HWSPINLOCK) += hwspinlock.o
 obj-$(CONFIG_DM_I2C) += i2c.o
 obj-$(CONFIG_SOUND) += i2s.o
diff --git a/test/dm/fpga.c b/test/dm/fpga.c
new file mode 100644
index 0000000000..8bb3535853
--- /dev/null
+++ b/test/dm/fpga.c
@@ -0,0 +1,20 @@ 
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright 2022 Alexander Dahl <post@lespocky.de>
+ */
+
+#include <dm.h>
+#include <dm/test.h>
+#include <test/test.h>
+#include <test/ut.h>
+
+static int dm_test_fpga(struct unit_test_state *uts)
+{
+	struct udevice *dev;
+
+	ut_assertok(uclass_first_device_err(UCLASS_FPGA, &dev));
+
+	return 0;
+}
+
+DM_TEST(dm_test_fpga, UT_TESTF_SCAN_FDT);