From ca844dd8c55f3b7bbba8144b0dcbf1297fcaece0 Mon Sep 17 00:00:00 2001 From: Thomas Chou Date: Wed, 14 Oct 2015 08:43:31 +0800 Subject: nios2: convert altera sysid to driver model Convert altera sysid to driver model with misc uclass. Signed-off-by: Thomas Chou Acked-by: Chin Liang See Reviewed-by: Simon Glass 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 34eb7bd..d7ff290 100644 --- a/arch/nios2/cpu/cpu.c +++ b/arch/nios2/cpu/cpu.c @@ -13,20 +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 : \n"); -#else - display_sysid (); -#endif - return (0); + printf("CPU: Nios-II\n"); + return 0; } #endif /* CONFIG_DISPLAY_CPUINFO */ 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 - * Scott McNutt - * - * SPDX-License-Identifier: GPL-2.0+ - */ - -#include - -#if defined (CONFIG_SYS_NIOS_SYSID_BASE) - -#include -#include -#include - -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 4a34ce5..a3cfacb 100644 --- a/arch/nios2/dts/3c120_devboard.dts +++ b/arch/nios2/dts/3c120_devboard.dts @@ -71,6 +71,7 @@ <0x00004cc0 0x08004cc0 0x00000010>, <0x00004ce0 0x08004ce0 0x00000010>, <0x00004d00 0x08004d00 0x00000010>, + <0x00004d40 0x08004d40 0x00000008>, <0x00004d50 0x08004d50 0x00000008>, <0x00008000 0x08008000 0x00000020>, <0x00400000 0x08400000 0x00000020>; @@ -91,6 +92,11 @@ 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>; diff --git a/arch/nios2/include/asm/system.h b/arch/nios2/include/asm/system.h index 6213a16..b158535 100644 --- a/arch/nios2/include/asm/system.h +++ b/arch/nios2/include/asm/system.h @@ -45,4 +45,6 @@ "callr %0" \ : : "r" (addr)) +void display_sysid(void); + #endif /* __ASM_NIOS2_SYSTEM_H */ diff --git a/board/altera/nios2-generic/nios2-generic.c b/board/altera/nios2-generic/nios2-generic.c index cb98a08..1f10821 100644 --- a/board/altera/nios2-generic/nios2-generic.c +++ b/board/altera/nios2-generic/nios2-generic.c @@ -37,7 +37,10 @@ int board_early_init_f(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; } diff --git a/configs/nios2-generic_defconfig b/configs/nios2-generic_defconfig index 505a2cf..3d404b2 100644 --- a/configs/nios2-generic_defconfig +++ b/configs/nios2-generic_defconfig @@ -16,6 +16,8 @@ CONFIG_CMD_DHCP=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 diff --git a/doc/device-tree-bindings/misc/altera_sysid.txt b/doc/device-tree-bindings/misc/altera_sysid.txt new file mode 100644 index 0000000..54462eb --- /dev/null +++ b/doc/device-tree-bindings/misc/altera_sysid.txt @@ -0,0 +1,4 @@ +Altera sysid + +Required properties: +- compatible : should be "altr,sysid-1.0" diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig index 031b4d8..101a619 100644 --- a/drivers/misc/Kconfig +++ b/drivers/misc/Kconfig @@ -13,6 +13,13 @@ config MISC 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 diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile index 7e76b12..aa137f5 100644 --- a/drivers/misc/Makefile +++ b/drivers/misc/Makefile @@ -7,6 +7,7 @@ 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 diff --git a/drivers/misc/altera_sysid.c b/drivers/misc/altera_sysid.c new file mode 100644 index 0000000..249b273 --- /dev/null +++ b/drivers/misc/altera_sysid.c @@ -0,0 +1,101 @@ +/* + * (C) Copyright 2004, Psyent Corporation + * Scott McNutt + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include +#include +#include +#include +#include +#include +#include + +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(®s->id); + sysid[1] = readl(®s->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, +}; diff --git a/include/configs/nios2-generic.h b/include/configs/nios2-generic.h index c65b3b3..e4b5abb 100644 --- a/include/configs/nios2-generic.h +++ b/include/configs/nios2-generic.h @@ -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_DISPLAY_BOARDINFO +#define CONFIG_DISPLAY_BOARDINFO_LATE #define CONFIG_SYS_NIOS_SYSID_BASE CONFIG_SYS_SYSID_BASE /* -- cgit v0.10.2