#ifndef UNIPHIER_SG_REGS_H
#define UNIPHIER_SG_REGS_H
+#include <linux/bitops.h>
+
#ifndef __ASSEMBLY__
#include <linux/compiler.h>
#ifdef CONFIG_ARCH_UNIPHIER_V8_MULTI
/* Revision */
#define SG_REVISION 0x0000
+#define SG_REVISION_TYPE_MASK GENMASK(23, 16)
+#define SG_REVISION_MODEL_MASK GENMASK(10, 8)
+#define SG_REVISION_REV_MASK GENMASK(4, 0)
/* Memory Configuration */
#define SG_MEMCONF 0x0400
* Author: Masahiro Yamada <yamada.masahiro@socionext.com>
*/
+#include <linux/bitfield.h>
#include <linux/io.h>
#include <linux/types.h>
#include "sg-regs.h"
#include "soc-info.h"
-static unsigned int __uniphier_get_revision_field(unsigned int mask,
- unsigned int shift)
-{
- u32 revision = readl(sg_base + SG_REVISION);
-
- return (revision >> shift) & mask;
-}
-
unsigned int uniphier_get_soc_id(void)
{
- return __uniphier_get_revision_field(0xff, 16);
+ u32 rev = readl(sg_base + SG_REVISION);
+
+ return FIELD_GET(SG_REVISION_TYPE_MASK, rev);
}
unsigned int uniphier_get_soc_model(void)
{
- return __uniphier_get_revision_field(0x7, 8);
+ u32 rev = readl(sg_base + SG_REVISION);
+
+ return FIELD_GET(SG_REVISION_MODEL_MASK, rev);
}
unsigned int uniphier_get_soc_revision(void)
{
- return __uniphier_get_revision_field(0x1f, 0);
+ u32 rev = readl(sg_base + SG_REVISION);
+
+ return FIELD_GET(SG_REVISION_REV_MASK, rev);
}