static int _kvm_get_cpucfg(int id, u64 *v)
 {
-       int ret = 0;
-
-       if (id < 0 && id >= KVM_MAX_CPUCFG_REGS)
+       if (id < 0 || id >= KVM_MAX_CPUCFG_REGS)
                return -EINVAL;
 
        switch (id) {
                if (cpu_has_lasx)
                        *v |= CPUCFG2_LASX;
 
-               break;
+               return 0;
        default:
-               ret = -EINVAL;
-               break;
+               /*
+                * No restrictions on other valid CPUCFG IDs' values, but
+                * CPUCFG data is limited to 32 bits as the LoongArch ISA
+                * manual says (Volume 1, Section 2.2.10.5 "CPUCFG").
+                */
+               *v = U32_MAX;
+               return 0;
        }
-       return ret;
 }
 
 static int kvm_check_cpucfg(int id, u64 val)
 {
-       u64 mask;
-       int ret = 0;
-
-       if (id < 0 && id >= KVM_MAX_CPUCFG_REGS)
-               return -EINVAL;
+       int ret;
+       u64 mask = 0;
 
-       if (_kvm_get_cpucfg(id, &mask))
+       ret = _kvm_get_cpucfg(id, &mask);
+       if (ret)
                return ret;
 
+       if (val & ~mask)
+               /* Unsupported features and/or the higher 32 bits should not be set */
+               return -EINVAL;
+
        switch (id) {
        case 2:
                /* CPUCFG2 features checking */
-               if (val & ~mask)
-                       /* The unsupported features should not be set */
-                       ret = -EINVAL;
-               else if (!(val & CPUCFG2_LLFTP))
+               if (!(val & CPUCFG2_LLFTP))
                        /* The LLFTP must be set, as guest must has a constant timer */
                        ret = -EINVAL;
                else if ((val & CPUCFG2_FP) && (!(val & CPUCFG2_FPSP) || !(val & CPUCFG2_FPDP)))