Skip to content
Snippets Groups Projects
Commit ca844dd8 authored by Thomas Chou's avatar Thomas Chou
Browse files

nios2: convert altera sysid to driver model


Convert altera sysid to driver model with misc uclass.

Signed-off-by: default avatarThomas Chou <thomas@wytron.com.tw>
Acked-by: default avatarChin Liang See <clsee@altera.com>
Reviewed-by: default avatarSimon Glass <sjg@chromium.org>
parent 4395e06e
No related branches found
No related tags found
No related merge requests found
...@@ -7,5 +7,5 @@ ...@@ -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 @@ ...@@ -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 */
......
/*
* (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 @@ ...@@ -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 @@ ...@@ -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 @@ ...@@ -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) ...@@ -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 ...@@ -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
......
Altera sysid
Required properties:
- compatible : should be "altr,sysid-1.0"
...@@ -13,6 +13,13 @@ config MISC ...@@ -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 @@ ...@@ -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
......
/*
* (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,
};
...@@ -16,7 +16,7 @@ ...@@ -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
/* /*
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment