nios2: convert altera sysid to driver model
authorThomas Chou <thomas@wytron.com.tw>
Wed, 14 Oct 2015 00:43:31 +0000 (08:43 +0800)
committerThomas Chou <thomas@wytron.com.tw>
Thu, 22 Oct 2015 23:37:03 +0000 (07:37 +0800)
Convert altera sysid to driver model with misc uclass.

Signed-off-by: Thomas Chou <thomas@wytron.com.tw>
Acked-by: Chin Liang See <clsee@altera.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
12 files changed:
arch/nios2/cpu/Makefile
arch/nios2/cpu/cpu.c
arch/nios2/cpu/sysid.c [deleted file]
arch/nios2/dts/3c120_devboard.dts
arch/nios2/include/asm/system.h
board/altera/nios2-generic/nios2-generic.c
configs/nios2-generic_defconfig
doc/device-tree-bindings/misc/altera_sysid.txt [new file with mode: 0644]
drivers/misc/Kconfig
drivers/misc/Makefile
drivers/misc/altera_sysid.c [new file with mode: 0644]
include/configs/nios2-generic.h

index 3fe7847..185ca3c 100644 (file)
@@ -7,5 +7,5 @@
 
 extra-y        = start.o
 obj-y  = exceptions.o
 
 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
 obj-y  += fdt.o
index 34eb7bd..d7ff290 100644 (file)
 
 DECLARE_GLOBAL_DATA_PTR;
 
 
 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)
 {
 #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 */
 
 }
 #endif /* CONFIG_DISPLAY_CPUINFO */
 
diff --git a/arch/nios2/cpu/sysid.c b/arch/nios2/cpu/sysid.c
deleted file mode 100644 (file)
index 50819b2..0000000
+++ /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 */
index 4a34ce5..a3cfacb 100644 (file)
@@ -71,6 +71,7 @@
                                <0x00004cc0 0x08004cc0 0x00000010>,
                                <0x00004ce0 0x08004ce0 0x00000010>,
                                <0x00004d00 0x08004d00 0x00000010>,
                                <0x00004cc0 0x08004cc0 0x00000010>,
                                <0x00004ce0 0x08004ce0 0x00000010>,
                                <0x00004d00 0x08004d00 0x00000010>,
+                               <0x00004d40 0x08004d40 0x00000008>,
                                <0x00004d50 0x08004d50 0x00000008>,
                                <0x00008000 0x08008000 0x00000020>,
                                <0x00400000 0x08400000 0x00000020>;
                                <0x00004d50 0x08004d50 0x00000008>,
                                <0x00008000 0x08008000 0x00000020>,
                                <0x00400000 0x08400000 0x00000020>;
                                clock-frequency = < 125000000 >;
                        };
 
                                clock-frequency = < 125000000 >;
                        };
 
+                       sysid: sysid@0x4d40 {
+                               compatible = "altr,sysid-1.0";
+                               reg = <0x00004d40 0x00000008>;
+                       };
+
                        jtag_uart: serial@0x4d50 {
                                compatible = "altr,juart-1.0";
                                reg = <0x00004d50 0x00000008>;
                        jtag_uart: serial@0x4d50 {
                                compatible = "altr,juart-1.0";
                                reg = <0x00004d50 0x00000008>;
index 6213a16..b158535 100644 (file)
@@ -45,4 +45,6 @@
        "callr  %0"                                     \
        : : "r" (addr))
 
        "callr  %0"                                     \
        : : "r" (addr))
 
+void display_sysid(void);
+
 #endif /* __ASM_NIOS2_SYSTEM_H */
 #endif /* __ASM_NIOS2_SYSTEM_H */
index cb98a08..1f10821 100644 (file)
@@ -37,7 +37,10 @@ int board_early_init_f(void)
 
 int checkboard(void)
 {
 
 int checkboard(void)
 {
-       printf("BOARD : %s\n", CONFIG_BOARD_NAME);
+#ifdef CONFIG_ALTERA_SYSID
+       display_sysid();
+#endif
+       printf("BOARD: %s\n", CONFIG_BOARD_NAME);
        return 0;
 }
 
        return 0;
 }
 
index 505a2cf..3d404b2 100644 (file)
@@ -16,6 +16,8 @@ CONFIG_CMD_DHCP=y
 CONFIG_CMD_PING=y
 CONFIG_NET_RANDOM_ETHADDR=y
 CONFIG_ALTERA_PIO=y
 CONFIG_CMD_PING=y
 CONFIG_NET_RANDOM_ETHADDR=y
 CONFIG_ALTERA_PIO=y
+CONFIG_MISC=y
+CONFIG_ALTERA_SYSID=y
 CONFIG_ALTERA_JTAG_UART=y
 CONFIG_ALTERA_JTAG_UART_BYPASS=y
 CONFIG_TIMER=y
 CONFIG_ALTERA_JTAG_UART=y
 CONFIG_ALTERA_JTAG_UART_BYPASS=y
 CONFIG_TIMER=y
diff --git a/doc/device-tree-bindings/misc/altera_sysid.txt b/doc/device-tree-bindings/misc/altera_sysid.txt
new file mode 100644 (file)
index 0000000..54462eb
--- /dev/null
@@ -0,0 +1,4 @@
+Altera sysid
+
+Required properties:
+- compatible : should be "altr,sysid-1.0"
index 031b4d8..101a619 100644 (file)
@@ -13,6 +13,13 @@ config MISC
          set of generic read, write and ioctl methods may be used to
          access the device.
 
          set of generic read, write and ioctl methods may be used to
          access the device.
 
+config ALTERA_SYSID
+       bool "Altera Sysid support"
+       depends on 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
 config CMD_CROS_EC
        bool "Enable crosec command"
        depends on CROS_EC
index 7e76b12..aa137f5 100644 (file)
@@ -7,6 +7,7 @@
 
 obj-$(CONFIG_MISC) += misc-uclass.o
 obj-$(CONFIG_ALI152X) += ali512x.o
 
 obj-$(CONFIG_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
 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 (file)
index 0000000..249b273
--- /dev/null
@@ -0,0 +1,101 @@
+/*
+ * (C) Copyright 2004, Psyent Corporation <www.psyent.com>
+ * Scott McNutt <smcnutt@psyent.com>
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#include <common.h>
+#include <command.h>
+#include <dm.h>
+#include <errno.h>
+#include <misc.h>
+#include <linux/time.h>
+#include <asm/io.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;
+       u32 sysid[2];
+       struct tm t;
+       char asc[32];
+       time_t stamp;
+       int ret;
+
+       /* the first misc device will be used */
+       ret = uclass_first_device(UCLASS_MISC, &dev);
+       if (ret)
+               return;
+       if (!dev)
+               return;
+       ret = misc_read(dev, 0, &sysid, sizeof(sysid));
+       if (ret)
+               return;
+
+       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 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,
+};
index c65b3b3..e4b5abb 100644 (file)
@@ -16,7 +16,7 @@
 #define CONFIG_BOARD_NAME "nios2-generic" /* custom board name */
 #define CONFIG_BOARD_EARLY_INIT_F      /* enable early board-spec. init */
 #define CONFIG_DISPLAY_CPUINFO
 #define CONFIG_BOARD_NAME "nios2-generic" /* custom board name */
 #define CONFIG_BOARD_EARLY_INIT_F      /* enable early board-spec. init */
 #define CONFIG_DISPLAY_CPUINFO
-#define CONFIG_DISPLAY_BOARDINFO
+#define CONFIG_DISPLAY_BOARDINFO_LATE
 #define CONFIG_SYS_NIOS_SYSID_BASE     CONFIG_SYS_SYSID_BASE
 
 /*
 #define CONFIG_SYS_NIOS_SYSID_BASE     CONFIG_SYS_SYSID_BASE
 
 /*