Loading drivers/soc/qcom/spss_utils.c +43 −3 Original line number Diff line number Diff line Loading @@ -66,6 +66,8 @@ static void *iar_notif_handle; static struct notifier_block *iar_nb; static bool is_iar_active; static bool is_ssr_disabled; /* To differentiate legacy and new generation of hardware supported features*/ static bool is_cmac_and_iar_feature_supported = true; #define CMAC_SIZE_IN_BYTES (128/8) /* 128 bit = 16 bytes */ #define CMAC_SIZE_IN_DWORDS (CMAC_SIZE_IN_BYTES/sizeof(u32)) /* 4 dwords */ Loading Loading @@ -291,7 +293,11 @@ static int spss_create_sysfs(struct device *dev) goto remove_test_fuse_state; } if (!is_cmac_and_iar_feature_supported) goto out; ret = device_create_file(dev, &dev_attr_calc_fw_cmac); if (ret < 0) { pr_err("failed to create sysfs file for calc_fw_cmac.\n"); goto remove_spss_debug_reg; Loading @@ -303,7 +309,7 @@ static int spss_create_sysfs(struct device *dev) goto remove_calc_fw_cmac; } out: return 0; remove_calc_fw_cmac: Loading @@ -320,8 +326,10 @@ static int spss_create_sysfs(struct device *dev) static void spss_destroy_sysfs(struct device *dev) { if (is_cmac_and_iar_feature_supported) { device_remove_file(dev, &dev_attr_calc_apps_cmac); device_remove_file(dev, &dev_attr_calc_fw_cmac); } device_remove_file(dev, &dev_attr_spss_debug_reg); device_remove_file(dev, &dev_attr_test_fuse_state); device_remove_file(dev, &dev_attr_firmware_name); Loading Loading @@ -521,6 +529,11 @@ static long spss_utils_ioctl(struct file *file, case SPSS_IOC_SET_FW_AND_APPS_CMAC: pr_debug("ioctl [SPSS_IOC_SET_FW_AND_APPS_CMAC]\n"); if (!is_cmac_and_iar_feature_supported) { pr_err("legacy SPSS not support cmac,iar feature.\n"); return -EINVAL; } /* spdaemon uses this ioctl only when IAR is active */ is_iar_active = true; Loading Loading @@ -861,6 +874,10 @@ static int spss_parse_dt(struct device_node *node) } iounmap(spss_emul_type_reg); if (!is_cmac_and_iar_feature_supported) { pr_info("legacy SPSS not support cmac & iar feature.\n"); goto out; } /* PIL-SPSS area */ np = of_parse_phandle(node, "pil-mem", 0); if (!np) { Loading Loading @@ -898,6 +915,7 @@ static int spss_parse_dt(struct device_node *node) memset(saved_fw_cmac, 0xA5, sizeof(saved_fw_cmac)); memset(saved_apps_cmac, 0xA5, sizeof(saved_apps_cmac)); out: return 0; } Loading Loading @@ -1071,6 +1089,11 @@ static int spss_utils_pil_callback(struct notifier_block *nb, break; case SUBSYS_BEFORE_POWERUP: pr_info("[SUBSYS_BEFORE_POWERUP] event.\n"); if (!is_cmac_and_iar_feature_supported) { pr_info("legacy SPSS not support cmac,iar feature.\n"); break; } if (is_iar_active && is_ssr_disabled) { pr_err("SPSS SSR disabled, requesting reboot\n"); kernel_restart("SPSS SSR disabled, requesting reboot"); Loading @@ -1088,6 +1111,10 @@ static int spss_utils_pil_callback(struct notifier_block *nb, spss_events_signaled[event_id] = false; mutex_unlock(&event_lock); if (!is_cmac_and_iar_feature_supported) { pr_info("legacy SPSS not support cmac,iar feature.\n"); break; } /* * For IAR-DB-Recovery, read cmac regadless of is_iar_active. * please notice that HYP unmap this area, it is a race. Loading @@ -1114,6 +1141,11 @@ static int spss_utils_pil_callback(struct notifier_block *nb, break; case SUBSYS_BEFORE_AUTH_AND_RESET: pr_debug("[SUBSYS_BEFORE_AUTH_AND_RESET] event.\n"); if (!is_cmac_and_iar_feature_supported) { pr_info("legacy SPSS not support cmac,iar feature.\n"); break; } /* do nothing if IAR is not active */ if (!is_iar_active) return NOTIFY_OK; Loading Loading @@ -1144,6 +1176,14 @@ static int spss_probe(struct platform_device *pdev) spss_dev = dev; platform_set_drvdata(pdev, dev); /* Based on flag will differentiate legacy spss * supported features */ if (of_property_read_bool(pdev->dev.of_node, "qcom,no-cmac-and-iar-feature-support")) { pr_info("legacy SPSS not support cmac & iar feature.\n"); is_cmac_and_iar_feature_supported = false; } ret = spss_parse_dt(np); if (ret < 0) Loading Loading
drivers/soc/qcom/spss_utils.c +43 −3 Original line number Diff line number Diff line Loading @@ -66,6 +66,8 @@ static void *iar_notif_handle; static struct notifier_block *iar_nb; static bool is_iar_active; static bool is_ssr_disabled; /* To differentiate legacy and new generation of hardware supported features*/ static bool is_cmac_and_iar_feature_supported = true; #define CMAC_SIZE_IN_BYTES (128/8) /* 128 bit = 16 bytes */ #define CMAC_SIZE_IN_DWORDS (CMAC_SIZE_IN_BYTES/sizeof(u32)) /* 4 dwords */ Loading Loading @@ -291,7 +293,11 @@ static int spss_create_sysfs(struct device *dev) goto remove_test_fuse_state; } if (!is_cmac_and_iar_feature_supported) goto out; ret = device_create_file(dev, &dev_attr_calc_fw_cmac); if (ret < 0) { pr_err("failed to create sysfs file for calc_fw_cmac.\n"); goto remove_spss_debug_reg; Loading @@ -303,7 +309,7 @@ static int spss_create_sysfs(struct device *dev) goto remove_calc_fw_cmac; } out: return 0; remove_calc_fw_cmac: Loading @@ -320,8 +326,10 @@ static int spss_create_sysfs(struct device *dev) static void spss_destroy_sysfs(struct device *dev) { if (is_cmac_and_iar_feature_supported) { device_remove_file(dev, &dev_attr_calc_apps_cmac); device_remove_file(dev, &dev_attr_calc_fw_cmac); } device_remove_file(dev, &dev_attr_spss_debug_reg); device_remove_file(dev, &dev_attr_test_fuse_state); device_remove_file(dev, &dev_attr_firmware_name); Loading Loading @@ -521,6 +529,11 @@ static long spss_utils_ioctl(struct file *file, case SPSS_IOC_SET_FW_AND_APPS_CMAC: pr_debug("ioctl [SPSS_IOC_SET_FW_AND_APPS_CMAC]\n"); if (!is_cmac_and_iar_feature_supported) { pr_err("legacy SPSS not support cmac,iar feature.\n"); return -EINVAL; } /* spdaemon uses this ioctl only when IAR is active */ is_iar_active = true; Loading Loading @@ -861,6 +874,10 @@ static int spss_parse_dt(struct device_node *node) } iounmap(spss_emul_type_reg); if (!is_cmac_and_iar_feature_supported) { pr_info("legacy SPSS not support cmac & iar feature.\n"); goto out; } /* PIL-SPSS area */ np = of_parse_phandle(node, "pil-mem", 0); if (!np) { Loading Loading @@ -898,6 +915,7 @@ static int spss_parse_dt(struct device_node *node) memset(saved_fw_cmac, 0xA5, sizeof(saved_fw_cmac)); memset(saved_apps_cmac, 0xA5, sizeof(saved_apps_cmac)); out: return 0; } Loading Loading @@ -1071,6 +1089,11 @@ static int spss_utils_pil_callback(struct notifier_block *nb, break; case SUBSYS_BEFORE_POWERUP: pr_info("[SUBSYS_BEFORE_POWERUP] event.\n"); if (!is_cmac_and_iar_feature_supported) { pr_info("legacy SPSS not support cmac,iar feature.\n"); break; } if (is_iar_active && is_ssr_disabled) { pr_err("SPSS SSR disabled, requesting reboot\n"); kernel_restart("SPSS SSR disabled, requesting reboot"); Loading @@ -1088,6 +1111,10 @@ static int spss_utils_pil_callback(struct notifier_block *nb, spss_events_signaled[event_id] = false; mutex_unlock(&event_lock); if (!is_cmac_and_iar_feature_supported) { pr_info("legacy SPSS not support cmac,iar feature.\n"); break; } /* * For IAR-DB-Recovery, read cmac regadless of is_iar_active. * please notice that HYP unmap this area, it is a race. Loading @@ -1114,6 +1141,11 @@ static int spss_utils_pil_callback(struct notifier_block *nb, break; case SUBSYS_BEFORE_AUTH_AND_RESET: pr_debug("[SUBSYS_BEFORE_AUTH_AND_RESET] event.\n"); if (!is_cmac_and_iar_feature_supported) { pr_info("legacy SPSS not support cmac,iar feature.\n"); break; } /* do nothing if IAR is not active */ if (!is_iar_active) return NOTIFY_OK; Loading Loading @@ -1144,6 +1176,14 @@ static int spss_probe(struct platform_device *pdev) spss_dev = dev; platform_set_drvdata(pdev, dev); /* Based on flag will differentiate legacy spss * supported features */ if (of_property_read_bool(pdev->dev.of_node, "qcom,no-cmac-and-iar-feature-support")) { pr_info("legacy SPSS not support cmac & iar feature.\n"); is_cmac_and_iar_feature_supported = false; } ret = spss_parse_dt(np); if (ret < 0) Loading