diff options
Diffstat (limited to 'arch/arm/cpu/armv7/am33xx/sys_info.c')
| -rw-r--r-- | arch/arm/cpu/armv7/am33xx/sys_info.c | 130 | 
1 files changed, 130 insertions, 0 deletions
| diff --git a/arch/arm/cpu/armv7/am33xx/sys_info.c b/arch/arm/cpu/armv7/am33xx/sys_info.c new file mode 100644 index 000000000..507b6180e --- /dev/null +++ b/arch/arm/cpu/armv7/am33xx/sys_info.c @@ -0,0 +1,130 @@ +/* + * sys_info.c + * + * System information functions + * + * Copyright (C) 2011, Texas Instruments, Incorporated - http://www.ti.com/ + * + * Derived from Beagle Board and 3430 SDP code by + *      Richard Woodruff <r-woodruff2@ti.com> + *      Syed Mohammed Khasim <khasim@ti.com> + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR /PURPOSE.  See the + * GNU General Public License for more details. + */ + +#include <common.h> +#include <asm/io.h> +#include <asm/arch/sys_proto.h> +#include <asm/arch/cpu.h> +#include <asm/arch/clock.h> + +struct ctrl_stat *cstat = (struct ctrl_stat *)CTRL_BASE; + +/** + * get_cpu_rev(void) - extract rev info + */ +u32 get_cpu_rev(void) +{ +	u32 id; +	u32 rev; + +	id = readl(DEVICE_ID); +	rev = (id >> 28) & 0xff; + +	return rev; +} + +/** + * get_cpu_type(void) - extract cpu info + */ +u32 get_cpu_type(void) +{ +	u32 id = 0; +	u32 partnum; + +	id = readl(DEVICE_ID); +	partnum = (id >> 12) & 0xffff; + +	return partnum; +} + +/** + * get_board_rev() - setup to pass kernel board revision information + * returns:(bit[0-3] sub version, higher bit[7-4] is higher version) + */ +u32 get_board_rev(void) +{ +	return BOARD_REV_ID; +} + +/** + * get_device_type(): tell if GP/HS/EMU/TST + */ +u32 get_device_type(void) +{ +	int mode; +	mode = readl(&cstat->statusreg) & (DEVICE_MASK); +	return mode >>= 8; +} + +/** + * get_sysboot_value(void) - return SYS_BOOT[4:0] + */ +u32 get_sysboot_value(void) +{ +	int mode; +	mode = readl(&cstat->statusreg) & (SYSBOOT_MASK); +	return mode; +} + +#ifdef CONFIG_DISPLAY_CPUINFO +/** + * Print CPU information + */ +int print_cpuinfo(void) +{ +	char *cpu_s, *sec_s; +	int arm_freq, ddr_freq; + +	switch (get_cpu_type()) { +	case AM335X: +		cpu_s = "AM335X"; +		break; +	default: +		cpu_s = "Unknown cpu type"; +		break; +	} + +	switch (get_device_type()) { +	case TST_DEVICE: +		sec_s = "TST"; +		break; +	case EMU_DEVICE: +		sec_s = "EMU"; +		break; +	case HS_DEVICE: +		sec_s = "HS"; +		break; +	case GP_DEVICE: +		sec_s = "GP"; +		break; +	default: +		sec_s = "?"; +	} + +	printf("AM%s-%s rev %d\n", +			cpu_s, sec_s, get_cpu_rev()); + +	/* TODO: Print ARM and DDR frequencies  */ + +	return 0; +} +#endif	/* CONFIG_DISPLAY_CPUINFO */ |