diff mbox series

[U-Boot] zynqmp: firmware: Add Xilinx ZynqMP firmware driver

Message ID 7c742868362746fb6a16236d272484db4e7ae0af.1568188043.git.michal.simek@xilinx.com
State New
Delegated to: Michal Simek
Headers show
Series [U-Boot] zynqmp: firmware: Add Xilinx ZynqMP firmware driver | expand

Commit Message

Michal Simek Sept. 11, 2019, 7:47 a.m. UTC
From: Rajan Vaja <rajan.vaja@xilinx.com>

Add simple ZynqMP firmware drive to populate child nodes under
zynqmp_firmware DT node.

Signed-off-by: Rajan Vaja <rajan.vaja@xilinx.com>
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
---

 drivers/clk/Kconfig                |  1 +
 drivers/firmware/Kconfig           | 10 ++++++++++
 drivers/firmware/Makefile          |  1 +
 drivers/firmware/firmware-zynqmp.c | 15 +++++++++++++++
 4 files changed, 27 insertions(+)
 create mode 100644 drivers/firmware/firmware-zynqmp.c

Comments

Lokesh Vutla Sept. 11, 2019, 8:54 a.m. UTC | #1
On 11/09/19 1:17 PM, Michal Simek wrote:
> From: Rajan Vaja <rajan.vaja@xilinx.com>
> 
> Add simple ZynqMP firmware drive to populate child nodes under
> zynqmp_firmware DT node.
> 
> Signed-off-by: Rajan Vaja <rajan.vaja@xilinx.com>
> Signed-off-by: Michal Simek <michal.simek@xilinx.com>

If this driver is only meant for populating child nodes, then simple-bus in
compatible can solve the problem.

Thanks and regards,
Loksh

> ---
> 
>  drivers/clk/Kconfig                |  1 +
>  drivers/firmware/Kconfig           | 10 ++++++++++
>  drivers/firmware/Makefile          |  1 +
>  drivers/firmware/firmware-zynqmp.c | 15 +++++++++++++++
>  4 files changed, 27 insertions(+)
>  create mode 100644 drivers/firmware/firmware-zynqmp.c
> 
> diff --git a/drivers/clk/Kconfig b/drivers/clk/Kconfig
> index 95fe0aea2ce8..305cbd96f165 100644
> --- a/drivers/clk/Kconfig
> +++ b/drivers/clk/Kconfig
> @@ -113,6 +113,7 @@ config CLK_ZYNQ
>  config CLK_ZYNQMP
>  	bool "Enable clock driver support for ZynqMP"
>  	depends on ARCH_ZYNQMP
> +	select ZYNQMP_FIRMWARE
>  	help
>  	  This clock driver adds support for clock realted settings for
>  	  ZynqMP platform.
> diff --git a/drivers/firmware/Kconfig b/drivers/firmware/Kconfig
> index 873bc8c79679..b70a2063551c 100644
> --- a/drivers/firmware/Kconfig
> +++ b/drivers/firmware/Kconfig
> @@ -26,3 +26,13 @@ config TI_SCI_PROTOCOL
>  
>  	  This protocol library is used by client drivers to use the features
>  	  provided by the system controller.
> +
> +config ZYNQMP_FIRMWARE
> +	bool "ZynqMP Firmware interface"
> +	select FIRMWARE
> +	help
> +	  Firmware interface driver is used by different
> +	  drivers to communicate with the firmware for
> +	  various platform management services.
> +	  Say yes to enable ZynqMP firmware interface driver.
> +	  If in doubt, say N.
> diff --git a/drivers/firmware/Makefile b/drivers/firmware/Makefile
> index 6c3e12968527..a0c250a473eb 100644
> --- a/drivers/firmware/Makefile
> +++ b/drivers/firmware/Makefile
> @@ -2,3 +2,4 @@ obj-$(CONFIG_FIRMWARE)		+= firmware-uclass.o
>  obj-$(CONFIG_$(SPL_)ARM_PSCI_FW)	+= psci.o
>  obj-$(CONFIG_TI_SCI_PROTOCOL)	+= ti_sci.o
>  obj-$(CONFIG_SANDBOX)		+= firmware-sandbox.o
> +obj-$(CONFIG_ZYNQMP_FIRMWARE)	+= firmware-zynqmp.o
> diff --git a/drivers/firmware/firmware-zynqmp.c b/drivers/firmware/firmware-zynqmp.c
> new file mode 100644
> index 000000000000..b36eda1b04be
> --- /dev/null
> +++ b/drivers/firmware/firmware-zynqmp.c
> @@ -0,0 +1,15 @@
> +// SPDX-License-Identifier: GPL-2.0
> +
> +#include <dm.h>
> +
> +static const struct udevice_id zynqmp_firmware_ids[] = {
> +	{ .compatible = "xlnx,zynqmp-firmware" },
> +	{ }
> +};
> +
> +U_BOOT_DRIVER(zynqmp_firmware) = {
> +	.id = UCLASS_FIRMWARE,
> +	.name = "zynqmp-firmware",
> +	.probe = dm_scan_fdt_dev,
> +	.of_match = zynqmp_firmware_ids,
> +};
>
Michal Simek Sept. 11, 2019, 9:07 a.m. UTC | #2
On 11. 09. 19 10:54, Lokesh Vutla wrote:
> 
> 
> On 11/09/19 1:17 PM, Michal Simek wrote:
>> From: Rajan Vaja <rajan.vaja@xilinx.com>
>>
>> Add simple ZynqMP firmware drive to populate child nodes under
>> zynqmp_firmware DT node.
>>
>> Signed-off-by: Rajan Vaja <rajan.vaja@xilinx.com>
>> Signed-off-by: Michal Simek <michal.simek@xilinx.com>
> 
> If this driver is only meant for populating child nodes, then simple-bus in
> compatible can solve the problem.

For u-boot this should be ok but it is not the part of kernel DT binding.

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/devicetree/bindings/firmware/xilinx/xlnx,zynqmp-firmware.txt?h=v5.3-rc8

Also adding simple-bus in u-boot DTS file would cause issues ok kernel
side when DT from u-boot is used in Linux.

My expectation is that we should move all functionality which we have in
platform code to this driver.

Thanks,
Michal
Michal Simek Oct. 8, 2019, 7:32 a.m. UTC | #3
st 11. 9. 2019 v 9:47 odesílatel Michal Simek <michal.simek@xilinx.com> napsal:
>
> From: Rajan Vaja <rajan.vaja@xilinx.com>
>
> Add simple ZynqMP firmware drive to populate child nodes under
> zynqmp_firmware DT node.
>
> Signed-off-by: Rajan Vaja <rajan.vaja@xilinx.com>
> Signed-off-by: Michal Simek <michal.simek@xilinx.com>
> ---
>
>  drivers/clk/Kconfig                |  1 +
>  drivers/firmware/Kconfig           | 10 ++++++++++
>  drivers/firmware/Makefile          |  1 +
>  drivers/firmware/firmware-zynqmp.c | 15 +++++++++++++++
>  4 files changed, 27 insertions(+)
>  create mode 100644 drivers/firmware/firmware-zynqmp.c
>
> diff --git a/drivers/clk/Kconfig b/drivers/clk/Kconfig
> index 95fe0aea2ce8..305cbd96f165 100644
> --- a/drivers/clk/Kconfig
> +++ b/drivers/clk/Kconfig
> @@ -113,6 +113,7 @@ config CLK_ZYNQ
>  config CLK_ZYNQMP
>         bool "Enable clock driver support for ZynqMP"
>         depends on ARCH_ZYNQMP
> +       select ZYNQMP_FIRMWARE
>         help
>           This clock driver adds support for clock realted settings for
>           ZynqMP platform.
> diff --git a/drivers/firmware/Kconfig b/drivers/firmware/Kconfig
> index 873bc8c79679..b70a2063551c 100644
> --- a/drivers/firmware/Kconfig
> +++ b/drivers/firmware/Kconfig
> @@ -26,3 +26,13 @@ config TI_SCI_PROTOCOL
>
>           This protocol library is used by client drivers to use the features
>           provided by the system controller.
> +
> +config ZYNQMP_FIRMWARE
> +       bool "ZynqMP Firmware interface"
> +       select FIRMWARE
> +       help
> +         Firmware interface driver is used by different
> +         drivers to communicate with the firmware for
> +         various platform management services.
> +         Say yes to enable ZynqMP firmware interface driver.
> +         If in doubt, say N.
> diff --git a/drivers/firmware/Makefile b/drivers/firmware/Makefile
> index 6c3e12968527..a0c250a473eb 100644
> --- a/drivers/firmware/Makefile
> +++ b/drivers/firmware/Makefile
> @@ -2,3 +2,4 @@ obj-$(CONFIG_FIRMWARE)          += firmware-uclass.o
>  obj-$(CONFIG_$(SPL_)ARM_PSCI_FW)       += psci.o
>  obj-$(CONFIG_TI_SCI_PROTOCOL)  += ti_sci.o
>  obj-$(CONFIG_SANDBOX)          += firmware-sandbox.o
> +obj-$(CONFIG_ZYNQMP_FIRMWARE)  += firmware-zynqmp.o
> diff --git a/drivers/firmware/firmware-zynqmp.c b/drivers/firmware/firmware-zynqmp.c
> new file mode 100644
> index 000000000000..b36eda1b04be
> --- /dev/null
> +++ b/drivers/firmware/firmware-zynqmp.c
> @@ -0,0 +1,15 @@
> +// SPDX-License-Identifier: GPL-2.0
> +
> +#include <dm.h>
> +
> +static const struct udevice_id zynqmp_firmware_ids[] = {
> +       { .compatible = "xlnx,zynqmp-firmware" },
> +       { }
> +};
> +
> +U_BOOT_DRIVER(zynqmp_firmware) = {
> +       .id = UCLASS_FIRMWARE,
> +       .name = "zynqmp-firmware",
> +       .probe = dm_scan_fdt_dev,
> +       .of_match = zynqmp_firmware_ids,
> +};
> --
> 2.17.1
>

Applied with also record in MAINTAINERS file.
M
diff mbox series

Patch

diff --git a/drivers/clk/Kconfig b/drivers/clk/Kconfig
index 95fe0aea2ce8..305cbd96f165 100644
--- a/drivers/clk/Kconfig
+++ b/drivers/clk/Kconfig
@@ -113,6 +113,7 @@  config CLK_ZYNQ
 config CLK_ZYNQMP
 	bool "Enable clock driver support for ZynqMP"
 	depends on ARCH_ZYNQMP
+	select ZYNQMP_FIRMWARE
 	help
 	  This clock driver adds support for clock realted settings for
 	  ZynqMP platform.
diff --git a/drivers/firmware/Kconfig b/drivers/firmware/Kconfig
index 873bc8c79679..b70a2063551c 100644
--- a/drivers/firmware/Kconfig
+++ b/drivers/firmware/Kconfig
@@ -26,3 +26,13 @@  config TI_SCI_PROTOCOL
 
 	  This protocol library is used by client drivers to use the features
 	  provided by the system controller.
+
+config ZYNQMP_FIRMWARE
+	bool "ZynqMP Firmware interface"
+	select FIRMWARE
+	help
+	  Firmware interface driver is used by different
+	  drivers to communicate with the firmware for
+	  various platform management services.
+	  Say yes to enable ZynqMP firmware interface driver.
+	  If in doubt, say N.
diff --git a/drivers/firmware/Makefile b/drivers/firmware/Makefile
index 6c3e12968527..a0c250a473eb 100644
--- a/drivers/firmware/Makefile
+++ b/drivers/firmware/Makefile
@@ -2,3 +2,4 @@  obj-$(CONFIG_FIRMWARE)		+= firmware-uclass.o
 obj-$(CONFIG_$(SPL_)ARM_PSCI_FW)	+= psci.o
 obj-$(CONFIG_TI_SCI_PROTOCOL)	+= ti_sci.o
 obj-$(CONFIG_SANDBOX)		+= firmware-sandbox.o
+obj-$(CONFIG_ZYNQMP_FIRMWARE)	+= firmware-zynqmp.o
diff --git a/drivers/firmware/firmware-zynqmp.c b/drivers/firmware/firmware-zynqmp.c
new file mode 100644
index 000000000000..b36eda1b04be
--- /dev/null
+++ b/drivers/firmware/firmware-zynqmp.c
@@ -0,0 +1,15 @@ 
+// SPDX-License-Identifier: GPL-2.0
+
+#include <dm.h>
+
+static const struct udevice_id zynqmp_firmware_ids[] = {
+	{ .compatible = "xlnx,zynqmp-firmware" },
+	{ }
+};
+
+U_BOOT_DRIVER(zynqmp_firmware) = {
+	.id = UCLASS_FIRMWARE,
+	.name = "zynqmp-firmware",
+	.probe = dm_scan_fdt_dev,
+	.of_match = zynqmp_firmware_ids,
+};