diff mbox

[U-Boot,v2,2/2] nios2: convert altera sysid to driver model

Message ID 1443517474-9838-2-git-send-email-thomas@wytron.com.tw
State Superseded
Delegated to: Thomas Chou
Headers show

Commit Message

Thomas Chou Sept. 29, 2015, 9:04 a.m. UTC
Convert altera sysid to driver model with misc uclass.

Signed-off-by: Thomas Chou <thomas@wytron.com.tw>
---
v2
  remove trailing whitespace in altera_sysid.c.

 arch/nios2/cpu/Makefile                    |  2 +-
 arch/nios2/cpu/cpu.c                       | 15 +----
 arch/nios2/cpu/sysid.c                     | 46 --------------
 arch/nios2/dts/3c120_devboard.dts          |  8 +++
 board/altera/nios2-generic/nios2-generic.c |  6 +-
 configs/nios2-generic_defconfig            |  2 +
 drivers/misc/Kconfig                       |  7 +++
 drivers/misc/Makefile                      |  1 +
 drivers/misc/altera_sysid.c                | 99 ++++++++++++++++++++++++++++++
 include/configs/nios2-generic.h            |  3 +-
 10 files changed, 126 insertions(+), 63 deletions(-)
 delete mode 100644 arch/nios2/cpu/sysid.c
 create mode 100644 drivers/misc/altera_sysid.c

Comments

Stefan Roese Sept. 29, 2015, 9:30 a.m. UTC | #1
Hi Thomas,

On 29.09.2015 11:04, Thomas Chou wrote:
> Convert altera sysid to driver model with misc uclass.
> 
> Signed-off-by: Thomas Chou <thomas@wytron.com.tw>
> ---
> v2
>    remove trailing whitespace in altera_sysid.c.
> 
>   arch/nios2/cpu/Makefile                    |  2 +-
>   arch/nios2/cpu/cpu.c                       | 15 +----
>   arch/nios2/cpu/sysid.c                     | 46 --------------
>   arch/nios2/dts/3c120_devboard.dts          |  8 +++
>   board/altera/nios2-generic/nios2-generic.c |  6 +-
>   configs/nios2-generic_defconfig            |  2 +
>   drivers/misc/Kconfig                       |  7 +++
>   drivers/misc/Makefile                      |  1 +
>   drivers/misc/altera_sysid.c                | 99 ++++++++++++++++++++++++++++++
>   include/configs/nios2-generic.h            |  3 +-
>   10 files changed, 126 insertions(+), 63 deletions(-)
>   delete mode 100644 arch/nios2/cpu/sysid.c
>   create mode 100644 drivers/misc/altera_sysid.c
> 
> diff --git a/arch/nios2/cpu/Makefile b/arch/nios2/cpu/Makefile
> index 3fe7847..185ca3c 100644
> --- a/arch/nios2/cpu/Makefile
> +++ b/arch/nios2/cpu/Makefile
> @@ -7,5 +7,5 @@
>   
>   extra-y	= start.o
>   obj-y	= exceptions.o
> -obj-y	+= cpu.o interrupts.o sysid.o traps.o
> +obj-y	+= cpu.o interrupts.o traps.o
>   obj-y	+= fdt.o
> diff --git a/arch/nios2/cpu/cpu.c b/arch/nios2/cpu/cpu.c
> index 88984e2..7b1717c 100644
> --- a/arch/nios2/cpu/cpu.c
> +++ b/arch/nios2/cpu/cpu.c
> @@ -13,22 +13,11 @@
>   
>   DECLARE_GLOBAL_DATA_PTR;
>   
> -#if defined (CONFIG_SYS_NIOS_SYSID_BASE)
> -extern void display_sysid (void);
> -#endif /* CONFIG_SYS_NIOS_SYSID_BASE */
> -
> -#ifdef CONFIG_DISPLAY_CPUINFO
>   int print_cpuinfo(void)
>   {
> -	printf ("CPU   : Nios-II\n");
> -#if !defined(CONFIG_SYS_NIOS_SYSID_BASE)
> -	printf ("SYSID : <unknown>\n");
> -#else
> -	display_sysid ();
> -#endif
> -	return (0);
> +	printf("CPU:   Nios-II\n");
> +	return 0;
>   }
> -#endif /* CONFIG_DISPLAY_CPUINFO */
>   
>   int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
>   {
> diff --git a/arch/nios2/cpu/sysid.c b/arch/nios2/cpu/sysid.c
> deleted file mode 100644
> index 50819b2..0000000
> --- a/arch/nios2/cpu/sysid.c
> +++ /dev/null
> @@ -1,46 +0,0 @@
> -/*
> - * (C) Copyright 2004, Psyent Corporation <www.psyent.com>
> - * Scott McNutt <smcnutt@psyent.com>
> - *
> - * SPDX-License-Identifier:	GPL-2.0+
> - */
> -
> -#include <common.h>
> -
> -#if defined (CONFIG_SYS_NIOS_SYSID_BASE)
> -
> -#include <command.h>
> -#include <asm/io.h>
> -#include <linux/time.h>
> -
> -typedef volatile struct {
> -	unsigned	id;			/* The system build id */
> -	unsigned	timestamp;		/* Timestamp */
> -} nios_sysid_t;
> -
> -void display_sysid (void)
> -{
> -	nios_sysid_t *sysid = (nios_sysid_t *)CONFIG_SYS_NIOS_SYSID_BASE;
> -	struct tm t;
> -	char asc[32];
> -	time_t stamp;
> -
> -	stamp = readl (&sysid->timestamp);
> -	localtime_r (&stamp, &t);
> -	asctime_r (&t, asc);
> -	printf ("SYSID : %08lx, %s", readl (&sysid->id), asc);
> -
> -}
> -
> -int do_sysid (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
> -{
> -	display_sysid ();
> -	return (0);
> -}
> -
> -U_BOOT_CMD(
> -	sysid,	1,	1,	do_sysid,
> -	"display Nios-II system id",
> -	""
> -);
> -#endif /* CONFIG_SYS_NIOS_SYSID_BASE */
> diff --git a/arch/nios2/dts/3c120_devboard.dts b/arch/nios2/dts/3c120_devboard.dts
> index 2e2956f..2eb339c 100644
> --- a/arch/nios2/dts/3c120_devboard.dts
> +++ b/arch/nios2/dts/3c120_devboard.dts
> @@ -72,6 +72,7 @@
>   				<0x00004cc0 0x08004cc0 0x00000010>,
>   				<0x00004ce0 0x08004ce0 0x00000010>,
>   				<0x00004d00 0x08004d00 0x00000010>,
> +				<0x00004d40 0x08004d40 0x00000008>,
>   				<0x00004d50 0x08004d50 0x00000008>,
>   				<0x00008000 0x08008000 0x00000020>,
>   				<0x00400000 0x08400000 0x00000020>;
> @@ -92,6 +93,13 @@
>   				clock-frequency = < 125000000 >;
>   			};
>   
> +			sysid: sysid@0x4d40 {
> +				compatible = "altr,sysid-1.0";
> +				reg = <0x00004d40 0x00000008>;
> +				id = <0>;
> +				timestamp = <1440939556>;
> +			};
> +
>   			jtag_uart: serial@0x4d50 {
>   				compatible = "altr,juart-1.0";
>   				reg = <0x00004d50 0x00000008>;
> diff --git a/board/altera/nios2-generic/nios2-generic.c b/board/altera/nios2-generic/nios2-generic.c
> index 61d32c7..e08b8f7 100644
> --- a/board/altera/nios2-generic/nios2-generic.c
> +++ b/board/altera/nios2-generic/nios2-generic.c
> @@ -42,7 +42,11 @@ int board_early_init_r(void)
>   
>   int checkboard(void)
>   {
> -	printf("BOARD : %s\n", CONFIG_BOARD_NAME);
> +#ifdef CONFIG_ALTERA_SYSID
> +	extern void display_sysid(void);
> +	display_sysid();
> +#endif
> +	printf("BOARD: %s\n", CONFIG_BOARD_NAME);
>   	return 0;
>   }
>   
> diff --git a/configs/nios2-generic_defconfig b/configs/nios2-generic_defconfig
> index 1aa2d9e..d8d26e5 100644
> --- a/configs/nios2-generic_defconfig
> +++ b/configs/nios2-generic_defconfig
> @@ -15,6 +15,8 @@ CONFIG_CMD_DHCP=y
>   CONFIG_CMD_PING=y
>   CONFIG_NET_RANDOM_ETHADDR=y
>   CONFIG_ALTERA_PIO=y
> +CONFIG_DM_MISC=y
> +CONFIG_ALTERA_SYSID=y
>   CONFIG_ALTERA_JTAG_UART=y
>   CONFIG_ALTERA_JTAG_UART_BYPASS=y
>   CONFIG_DM_TIMER=y
> diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig
> index 51c2a08..06a10d4 100644
> --- a/drivers/misc/Kconfig
> +++ b/drivers/misc/Kconfig
> @@ -10,6 +10,13 @@ config DM_MISC
>   	help
>   	  Enable driver model for miscellaneous devices.
>   
> +config ALTERA_SYSID
> +	bool "Altera Sysid support"
> +	depends on DM_MISC
> +	help
> +	  Select this to enable a sysid for Altera devices. Please find
> +	  details on the "Embedded Peripherals IP User Guide" of Altera.
> +
>   config CMD_CROS_EC
>   	bool "Enable crosec command"
>   	depends on CROS_EC
> diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile
> index b285946..449425e 100644
> --- a/drivers/misc/Makefile
> +++ b/drivers/misc/Makefile
> @@ -7,6 +7,7 @@
>   
>   obj-$(CONFIG_DM_MISC) += misc-uclass.o
>   obj-$(CONFIG_ALI152X) += ali512x.o
> +obj-$(CONFIG_ALTERA_SYSID) += altera_sysid.o
>   obj-$(CONFIG_DS4510)  += ds4510.o
>   obj-$(CONFIG_CBMEM_CONSOLE) += cbmem_console.o
>   obj-$(CONFIG_CROS_EC) += cros_ec.o
> diff --git a/drivers/misc/altera_sysid.c b/drivers/misc/altera_sysid.c
> new file mode 100644
> index 0000000..e200bf7
> --- /dev/null
> +++ b/drivers/misc/altera_sysid.c
> @@ -0,0 +1,99 @@
> +/*
> + * (C) Copyright 2004, Psyent Corporation <www.psyent.com>
> + * Scott McNutt <smcnutt@psyent.com>
> + *
> + * SPDX-License-Identifier:	GPL-2.0+
> + */
> +
> +#include <common.h>
> +#include <dm.h>
> +#include <misc.h>
> +#include <errno.h>
> +#include <command.h>
> +#include <asm/io.h>
> +#include <linux/time.h>
> +
> +struct altera_sysid_regs {
> +	u32	id;		/* The system build id */
> +	u32	timestamp;	/* Timestamp */
> +};
> +
> +struct altera_sysid_platdata {
> +	struct altera_sysid_regs *regs;
> +};
> +
> +void display_sysid (void)
> +{

Even though you have copied this code, please fix the coding style
above (space before "("). For all occurrences in this patch, so
that it is checkpatch clean.

Thank,
Stefan
Thomas Chou Sept. 29, 2015, 11:55 a.m. UTC | #2
Hi Stefan,

On 09/29/2015 05:30 PM, Stefan Roese wrote:
>> +void display_sysid (void)
>> +{
>
> Even though you have copied this code, please fix the coding style
> above (space before "("). For all occurrences in this patch, so
> that it is checkpatch clean.

Thanks a lot for reminding.

Best regards,
Thomas Chou
diff mbox

Patch

diff --git a/arch/nios2/cpu/Makefile b/arch/nios2/cpu/Makefile
index 3fe7847..185ca3c 100644
--- a/arch/nios2/cpu/Makefile
+++ b/arch/nios2/cpu/Makefile
@@ -7,5 +7,5 @@ 
 
 extra-y	= start.o
 obj-y	= exceptions.o
-obj-y	+= cpu.o interrupts.o sysid.o traps.o
+obj-y	+= cpu.o interrupts.o traps.o
 obj-y	+= fdt.o
diff --git a/arch/nios2/cpu/cpu.c b/arch/nios2/cpu/cpu.c
index 88984e2..7b1717c 100644
--- a/arch/nios2/cpu/cpu.c
+++ b/arch/nios2/cpu/cpu.c
@@ -13,22 +13,11 @@ 
 
 DECLARE_GLOBAL_DATA_PTR;
 
-#if defined (CONFIG_SYS_NIOS_SYSID_BASE)
-extern void display_sysid (void);
-#endif /* CONFIG_SYS_NIOS_SYSID_BASE */
-
-#ifdef CONFIG_DISPLAY_CPUINFO
 int print_cpuinfo(void)
 {
-	printf ("CPU   : Nios-II\n");
-#if !defined(CONFIG_SYS_NIOS_SYSID_BASE)
-	printf ("SYSID : <unknown>\n");
-#else
-	display_sysid ();
-#endif
-	return (0);
+	printf("CPU:   Nios-II\n");
+	return 0;
 }
-#endif /* CONFIG_DISPLAY_CPUINFO */
 
 int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
diff --git a/arch/nios2/cpu/sysid.c b/arch/nios2/cpu/sysid.c
deleted file mode 100644
index 50819b2..0000000
--- a/arch/nios2/cpu/sysid.c
+++ /dev/null
@@ -1,46 +0,0 @@ 
-/*
- * (C) Copyright 2004, Psyent Corporation <www.psyent.com>
- * Scott McNutt <smcnutt@psyent.com>
- *
- * SPDX-License-Identifier:	GPL-2.0+
- */
-
-#include <common.h>
-
-#if defined (CONFIG_SYS_NIOS_SYSID_BASE)
-
-#include <command.h>
-#include <asm/io.h>
-#include <linux/time.h>
-
-typedef volatile struct {
-	unsigned	id;			/* The system build id */
-	unsigned	timestamp;		/* Timestamp */
-} nios_sysid_t;
-
-void display_sysid (void)
-{
-	nios_sysid_t *sysid = (nios_sysid_t *)CONFIG_SYS_NIOS_SYSID_BASE;
-	struct tm t;
-	char asc[32];
-	time_t stamp;
-
-	stamp = readl (&sysid->timestamp);
-	localtime_r (&stamp, &t);
-	asctime_r (&t, asc);
-	printf ("SYSID : %08lx, %s", readl (&sysid->id), asc);
-
-}
-
-int do_sysid (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
-	display_sysid ();
-	return (0);
-}
-
-U_BOOT_CMD(
-	sysid,	1,	1,	do_sysid,
-	"display Nios-II system id",
-	""
-);
-#endif /* CONFIG_SYS_NIOS_SYSID_BASE */
diff --git a/arch/nios2/dts/3c120_devboard.dts b/arch/nios2/dts/3c120_devboard.dts
index 2e2956f..2eb339c 100644
--- a/arch/nios2/dts/3c120_devboard.dts
+++ b/arch/nios2/dts/3c120_devboard.dts
@@ -72,6 +72,7 @@ 
 				<0x00004cc0 0x08004cc0 0x00000010>,
 				<0x00004ce0 0x08004ce0 0x00000010>,
 				<0x00004d00 0x08004d00 0x00000010>,
+				<0x00004d40 0x08004d40 0x00000008>,
 				<0x00004d50 0x08004d50 0x00000008>,
 				<0x00008000 0x08008000 0x00000020>,
 				<0x00400000 0x08400000 0x00000020>;
@@ -92,6 +93,13 @@ 
 				clock-frequency = < 125000000 >;
 			};
 
+			sysid: sysid@0x4d40 {
+				compatible = "altr,sysid-1.0";
+				reg = <0x00004d40 0x00000008>;
+				id = <0>;
+				timestamp = <1440939556>;
+			};
+
 			jtag_uart: serial@0x4d50 {
 				compatible = "altr,juart-1.0";
 				reg = <0x00004d50 0x00000008>;
diff --git a/board/altera/nios2-generic/nios2-generic.c b/board/altera/nios2-generic/nios2-generic.c
index 61d32c7..e08b8f7 100644
--- a/board/altera/nios2-generic/nios2-generic.c
+++ b/board/altera/nios2-generic/nios2-generic.c
@@ -42,7 +42,11 @@  int board_early_init_r(void)
 
 int checkboard(void)
 {
-	printf("BOARD : %s\n", CONFIG_BOARD_NAME);
+#ifdef CONFIG_ALTERA_SYSID
+	extern void display_sysid(void);
+	display_sysid();
+#endif
+	printf("BOARD: %s\n", CONFIG_BOARD_NAME);
 	return 0;
 }
 
diff --git a/configs/nios2-generic_defconfig b/configs/nios2-generic_defconfig
index 1aa2d9e..d8d26e5 100644
--- a/configs/nios2-generic_defconfig
+++ b/configs/nios2-generic_defconfig
@@ -15,6 +15,8 @@  CONFIG_CMD_DHCP=y
 CONFIG_CMD_PING=y
 CONFIG_NET_RANDOM_ETHADDR=y
 CONFIG_ALTERA_PIO=y
+CONFIG_DM_MISC=y
+CONFIG_ALTERA_SYSID=y
 CONFIG_ALTERA_JTAG_UART=y
 CONFIG_ALTERA_JTAG_UART_BYPASS=y
 CONFIG_DM_TIMER=y
diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig
index 51c2a08..06a10d4 100644
--- a/drivers/misc/Kconfig
+++ b/drivers/misc/Kconfig
@@ -10,6 +10,13 @@  config DM_MISC
 	help
 	  Enable driver model for miscellaneous devices.
 
+config ALTERA_SYSID
+	bool "Altera Sysid support"
+	depends on DM_MISC
+	help
+	  Select this to enable a sysid for Altera devices. Please find
+	  details on the "Embedded Peripherals IP User Guide" of Altera.
+
 config CMD_CROS_EC
 	bool "Enable crosec command"
 	depends on CROS_EC
diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile
index b285946..449425e 100644
--- a/drivers/misc/Makefile
+++ b/drivers/misc/Makefile
@@ -7,6 +7,7 @@ 
 
 obj-$(CONFIG_DM_MISC) += misc-uclass.o
 obj-$(CONFIG_ALI152X) += ali512x.o
+obj-$(CONFIG_ALTERA_SYSID) += altera_sysid.o
 obj-$(CONFIG_DS4510)  += ds4510.o
 obj-$(CONFIG_CBMEM_CONSOLE) += cbmem_console.o
 obj-$(CONFIG_CROS_EC) += cros_ec.o
diff --git a/drivers/misc/altera_sysid.c b/drivers/misc/altera_sysid.c
new file mode 100644
index 0000000..e200bf7
--- /dev/null
+++ b/drivers/misc/altera_sysid.c
@@ -0,0 +1,99 @@ 
+/*
+ * (C) Copyright 2004, Psyent Corporation <www.psyent.com>
+ * Scott McNutt <smcnutt@psyent.com>
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
+
+#include <common.h>
+#include <dm.h>
+#include <misc.h>
+#include <errno.h>
+#include <command.h>
+#include <asm/io.h>
+#include <linux/time.h>
+
+struct altera_sysid_regs {
+	u32	id;		/* The system build id */
+	u32	timestamp;	/* Timestamp */
+};
+
+struct altera_sysid_platdata {
+	struct altera_sysid_regs *regs;
+};
+
+void display_sysid (void)
+{
+	struct udevice *dev;
+	const struct dm_misc_ops *ops;
+	u32 sysid[2];
+	struct tm t;
+	char asc[32];
+	time_t stamp;
+
+	uclass_first_device(UCLASS_MISC, &dev);
+	if (!dev)
+		return;
+	ops = device_get_ops(dev);
+	if (!ops->read)
+		return;
+	ops->read(dev, 0, &sysid, sizeof(sysid));
+
+	stamp = sysid[1];
+	localtime_r(&stamp, &t);
+	asctime_r(&t, asc);
+	printf("SYSID: %08x, %s", sysid[0], asc);
+}
+
+int do_sysid (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+	display_sysid();
+	return 0;
+}
+
+U_BOOT_CMD(
+	sysid,	1,	1,	do_sysid,
+	"display Nios-II system id",
+	""
+);
+
+static int altera_sysid_read(struct udevice *dev,
+			     int offset, void *buf, int size)
+{
+	struct altera_sysid_platdata *plat = dev->platdata;
+	struct altera_sysid_regs *const regs = plat->regs;
+	u32 *sysid = buf;
+
+	sysid[0] = readl(&regs->id);
+	sysid[1] = readl(&regs->timestamp);
+
+	return 0;
+}
+
+static int altera_sysid_ofdata_to_platdata(struct udevice *dev)
+{
+	struct altera_sysid_platdata *plat = dev_get_platdata(dev);
+
+	plat->regs = ioremap(dev_get_addr(dev),
+		sizeof(struct altera_sysid_regs));
+
+	return 0;
+}
+
+static const struct dm_misc_ops altera_sysid_ops = {
+	.read = altera_sysid_read,
+};
+
+static const struct udevice_id altera_sysid_ids[] = {
+	{ .compatible = "altr,sysid-1.0", },
+	{ }
+};
+
+U_BOOT_DRIVER(altera_sysid) = {
+	.name	= "altera_sysid",
+	.id	= UCLASS_MISC,
+	.of_match = altera_sysid_ids,
+	.ofdata_to_platdata = altera_sysid_ofdata_to_platdata,
+	.platdata_auto_alloc_size = sizeof(struct altera_sysid_platdata),
+	.ops	= &altera_sysid_ops,
+};
diff --git a/include/configs/nios2-generic.h b/include/configs/nios2-generic.h
index ae19676..bd219e3 100644
--- a/include/configs/nios2-generic.h
+++ b/include/configs/nios2-generic.h
@@ -16,8 +16,7 @@ 
 #define CONFIG_BOARD_NAME "nios2-generic" /* custom board name */
 #define CONFIG_BOARD_EARLY_INIT_F	/* enable early board-spec. init */
 #define CONFIG_BOARD_EARLY_INIT_R
-#define CONFIG_DISPLAY_CPUINFO
-#define CONFIG_DISPLAY_BOARDINFO
+#define CONFIG_DISPLAY_BOARDINFO_LATE
 #define CONFIG_SYS_NIOS_SYSID_BASE	CONFIG_SYS_SYSID_BASE
 
 /*