nios2: convert altera sysid to driver model
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>
This commit is contained in:
		
							parent
							
								
									4395e06eb9
								
							
						
					
					
						commit
						ca844dd8c5
					
				|  | @ -7,5 +7,5 @@ | ||||||
| 
 | 
 | ||||||
| extra-y	= start.o | extra-y	= start.o | ||||||
| obj-y	= exceptions.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 | ||||||
|  |  | ||||||
|  | @ -13,20 +13,11 @@ | ||||||
| 
 | 
 | ||||||
| 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 | #ifdef CONFIG_DISPLAY_CPUINFO | ||||||
| int print_cpuinfo(void) | int print_cpuinfo(void) | ||||||
| { | { | ||||||
| 	printf ("CPU   : Nios-II\n"); | 	printf("CPU:   Nios-II\n"); | ||||||
| #if !defined(CONFIG_SYS_NIOS_SYSID_BASE) | 	return 0; | ||||||
| 	printf ("SYSID : <unknown>\n"); |  | ||||||
| #else |  | ||||||
| 	display_sysid (); |  | ||||||
| #endif |  | ||||||
| 	return (0); |  | ||||||
| } | } | ||||||
| #endif /* CONFIG_DISPLAY_CPUINFO */ | #endif /* CONFIG_DISPLAY_CPUINFO */ | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -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 */ |  | ||||||
|  | @ -71,6 +71,7 @@ | ||||||
| 				<0x00004cc0 0x08004cc0 0x00000010>, | 				<0x00004cc0 0x08004cc0 0x00000010>, | ||||||
| 				<0x00004ce0 0x08004ce0 0x00000010>, | 				<0x00004ce0 0x08004ce0 0x00000010>, | ||||||
| 				<0x00004d00 0x08004d00 0x00000010>, | 				<0x00004d00 0x08004d00 0x00000010>, | ||||||
|  | 				<0x00004d40 0x08004d40 0x00000008>, | ||||||
| 				<0x00004d50 0x08004d50 0x00000008>, | 				<0x00004d50 0x08004d50 0x00000008>, | ||||||
| 				<0x00008000 0x08008000 0x00000020>, | 				<0x00008000 0x08008000 0x00000020>, | ||||||
| 				<0x00400000 0x08400000 0x00000020>; | 				<0x00400000 0x08400000 0x00000020>; | ||||||
|  | @ -91,6 +92,11 @@ | ||||||
| 				clock-frequency = < 125000000 >; | 				clock-frequency = < 125000000 >; | ||||||
| 			}; | 			}; | ||||||
| 
 | 
 | ||||||
|  | 			sysid: sysid@0x4d40 { | ||||||
|  | 				compatible = "altr,sysid-1.0"; | ||||||
|  | 				reg = <0x00004d40 0x00000008>; | ||||||
|  | 			}; | ||||||
|  | 
 | ||||||
| 			jtag_uart: serial@0x4d50 { | 			jtag_uart: serial@0x4d50 { | ||||||
| 				compatible = "altr,juart-1.0"; | 				compatible = "altr,juart-1.0"; | ||||||
| 				reg = <0x00004d50 0x00000008>; | 				reg = <0x00004d50 0x00000008>; | ||||||
|  |  | ||||||
|  | @ -45,4 +45,6 @@ | ||||||
| 	"callr	%0"					\ | 	"callr	%0"					\ | ||||||
| 	: : "r" (addr)) | 	: : "r" (addr)) | ||||||
| 
 | 
 | ||||||
|  | void display_sysid(void); | ||||||
|  | 
 | ||||||
| #endif /* __ASM_NIOS2_SYSTEM_H */ | #endif /* __ASM_NIOS2_SYSTEM_H */ | ||||||
|  |  | ||||||
|  | @ -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; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -16,6 +16,8 @@ CONFIG_CMD_DHCP=y | ||||||
| CONFIG_CMD_PING=y | CONFIG_CMD_PING=y | ||||||
| CONFIG_NET_RANDOM_ETHADDR=y | CONFIG_NET_RANDOM_ETHADDR=y | ||||||
| CONFIG_ALTERA_PIO=y | CONFIG_ALTERA_PIO=y | ||||||
|  | CONFIG_MISC=y | ||||||
|  | CONFIG_ALTERA_SYSID=y | ||||||
| CONFIG_ALTERA_JTAG_UART=y | CONFIG_ALTERA_JTAG_UART=y | ||||||
| CONFIG_ALTERA_JTAG_UART_BYPASS=y | CONFIG_ALTERA_JTAG_UART_BYPASS=y | ||||||
| CONFIG_TIMER=y | CONFIG_TIMER=y | ||||||
|  |  | ||||||
|  | @ -0,0 +1,4 @@ | ||||||
|  | Altera sysid | ||||||
|  | 
 | ||||||
|  | Required properties: | ||||||
|  | - compatible : should be "altr,sysid-1.0" | ||||||
|  | @ -13,6 +13,13 @@ config MISC | ||||||
| 	  set of generic read, write and ioctl methods may be used to | 	  set of generic read, write and ioctl methods may be used to | ||||||
| 	  access the device. | 	  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 | config CMD_CROS_EC | ||||||
| 	bool "Enable crosec command" | 	bool "Enable crosec command" | ||||||
| 	depends on CROS_EC | 	depends on CROS_EC | ||||||
|  |  | ||||||
|  | @ -7,6 +7,7 @@ | ||||||
| 
 | 
 | ||||||
| obj-$(CONFIG_MISC) += misc-uclass.o | obj-$(CONFIG_MISC) += misc-uclass.o | ||||||
| obj-$(CONFIG_ALI152X) += ali512x.o | obj-$(CONFIG_ALI152X) += ali512x.o | ||||||
|  | obj-$(CONFIG_ALTERA_SYSID) += altera_sysid.o | ||||||
| obj-$(CONFIG_DS4510)  += ds4510.o | obj-$(CONFIG_DS4510)  += ds4510.o | ||||||
| obj-$(CONFIG_CBMEM_CONSOLE) += cbmem_console.o | obj-$(CONFIG_CBMEM_CONSOLE) += cbmem_console.o | ||||||
| obj-$(CONFIG_CROS_EC) += cros_ec.o | obj-$(CONFIG_CROS_EC) += cros_ec.o | ||||||
|  |  | ||||||
|  | @ -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(®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, | ||||||
|  | }; | ||||||
|  | @ -16,7 +16,7 @@ | ||||||
| #define CONFIG_BOARD_NAME "nios2-generic" /* custom board name */ | #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_F	/* enable early board-spec. init */ | ||||||
| #define CONFIG_DISPLAY_CPUINFO | #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 | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue