};
 
 #define RISCV_PMU_RAW_EVENT_MASK GENMASK_ULL(47, 0)
+#define RISCV_PMU_PLAT_FW_EVENT_MASK GENMASK_ULL(61, 0)
 #define RISCV_PMU_RAW_EVENT_IDX 0x20000
 #define RISCV_PLAT_FW_EVENT    0xFFFF
 
 
 {
        u32 type = event->attr.type;
        u64 config = event->attr.config;
-       u64 raw_config_val;
        int ret;
 
        /*
        case PERF_TYPE_RAW:
                /*
                 * As per SBI specification, the upper 16 bits must be unused
-                * for a raw event.
+                * for a hardware raw event.
                 * Bits 63:62 are used to distinguish between raw events
                 * 00 - Hardware raw event
                 * 10 - SBI firmware events
                 * 11 - Risc-V platform specific firmware event
                 */
-               raw_config_val = config & RISCV_PMU_RAW_EVENT_MASK;
+
                switch (config >> 62) {
                case 0:
                        ret = RISCV_PMU_RAW_EVENT_IDX;
-                       *econfig = raw_config_val;
+                       *econfig = config & RISCV_PMU_RAW_EVENT_MASK;
                        break;
                case 2:
-                       ret = (raw_config_val & 0xFFFF) |
-                               (SBI_PMU_EVENT_TYPE_FW << 16);
+                       ret = (config & 0xFFFF) | (SBI_PMU_EVENT_TYPE_FW << 16);
                        break;
                case 3:
                        /*
                         * Event data - raw event encoding
                         */
                        ret = SBI_PMU_EVENT_TYPE_FW << 16 | RISCV_PLAT_FW_EVENT;
-                       *econfig = raw_config_val;
+                       *econfig = config & RISCV_PMU_PLAT_FW_EVENT_MASK;
                        break;
                }
                break;