diff --git a/cpu/cpu_linux.go b/cpu/cpu_linux.go
index 44bf1ce..a60e462 100644
--- a/cpu/cpu_linux.go
+++ b/cpu/cpu_linux.go
@@ -242,6 +242,17 @@ func InfoWithContext(ctx context.Context) ([]InfoStat, error) {
 			c.Family = value
 		case "model", "CPU part":
 			c.Model = value
+			// if CPU is arm based, model name is found via model number. refer to: arch/arm64/kernel/cpuinfo.c
+			if c.VendorID == "ARM" {
+				if v, err := strconv.ParseUint(c.Model, 0, 16); err == nil {
+					modelName, exist := armModelToModelName[v]
+					if exist {
+						c.ModelName = modelName
+					} else {
+						c.ModelName = "Undefined"
+					}
+				}
+			}
 		case "model name", "cpu":
 			c.ModelName = value
 			if strings.Contains(value, "POWER8") ||
@@ -285,16 +296,6 @@ func InfoWithContext(ctx context.Context) ([]InfoStat, error) {
 			c.Microcode = value
 		}
 	}
-	if c.VendorID == "ARM" && c.ModelName == "" {
-		if v, err := strconv.ParseUint(c.Model, 0, 16); err == nil {
-			modelName, exist := armModelToModelName[v]
-			if exist {
-				c.ModelName = modelName
-			} else {
-				c.ModelName = "Undefined"
-			}
-		}
-	}
 	if c.CPU >= 0 {
 		finishCPUInfo(&c)
 		ret = append(ret, c)