xref: /OK3568_Linux_fs/u-boot/arch/arm/mach-uniphier/soc-info.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * Copyright (C) 2017 Socionext Inc.
3*4882a593Smuzhiyun  *   Author: Masahiro Yamada <yamada.masahiro@socionext.com>
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * SPDX-License-Identifier:	GPL-2.0+
6*4882a593Smuzhiyun  */
7*4882a593Smuzhiyun 
8*4882a593Smuzhiyun #include <linux/io.h>
9*4882a593Smuzhiyun #include <linux/types.h>
10*4882a593Smuzhiyun 
11*4882a593Smuzhiyun #include "sg-regs.h"
12*4882a593Smuzhiyun #include "soc-info.h"
13*4882a593Smuzhiyun 
__uniphier_get_revision_field(unsigned int mask,unsigned int shift)14*4882a593Smuzhiyun static unsigned int __uniphier_get_revision_field(unsigned int mask,
15*4882a593Smuzhiyun 						  unsigned int shift)
16*4882a593Smuzhiyun {
17*4882a593Smuzhiyun 	u32 revision = readl(SG_REVISION);
18*4882a593Smuzhiyun 
19*4882a593Smuzhiyun 	return (revision >> shift) & mask;
20*4882a593Smuzhiyun }
21*4882a593Smuzhiyun 
uniphier_get_soc_id(void)22*4882a593Smuzhiyun unsigned int uniphier_get_soc_id(void)
23*4882a593Smuzhiyun {
24*4882a593Smuzhiyun 	return __uniphier_get_revision_field(0xff, 16);
25*4882a593Smuzhiyun }
26*4882a593Smuzhiyun 
uniphier_get_soc_model(void)27*4882a593Smuzhiyun unsigned int uniphier_get_soc_model(void)
28*4882a593Smuzhiyun {
29*4882a593Smuzhiyun 	return __uniphier_get_revision_field(0x7, 8);
30*4882a593Smuzhiyun }
31*4882a593Smuzhiyun 
uniphier_get_soc_revision(void)32*4882a593Smuzhiyun unsigned int uniphier_get_soc_revision(void)
33*4882a593Smuzhiyun {
34*4882a593Smuzhiyun 	return __uniphier_get_revision_field(0x1f, 0);
35*4882a593Smuzhiyun }
36