static void __exit iommu_exit(void) { int i; /* Common ctx_devs */ for (i = 0; i < ARRAY_SIZE(msm_iommu_common_ctx_devs); i++) platform_device_unregister(msm_iommu_common_ctx_devs[i]); /* Common devs. */ for (i = 0; i < ARRAY_SIZE(msm_iommu_common_devs); ++i) platform_device_unregister(msm_iommu_common_devs[i]); if (cpu_is_msm8x60() || cpu_is_msm8960()) { for (i = 0; i < ARRAY_SIZE(msm_iommu_gfx2d_ctx_devs); i++) platform_device_unregister(msm_iommu_gfx2d_ctx_devs[i]); for (i = 0; i < ARRAY_SIZE(msm_iommu_jpegd_ctx_devs); i++) platform_device_unregister(msm_iommu_jpegd_ctx_devs[i]); for (i = 0; i < ARRAY_SIZE(msm_iommu_gfx2d_devs); i++) platform_device_unregister(msm_iommu_gfx2d_devs[i]); for (i = 0; i < ARRAY_SIZE(msm_iommu_jpegd_devs); i++) platform_device_unregister(msm_iommu_jpegd_devs[i]); } if (soc_class_is_apq8064()) { for (i = 0; i < ARRAY_SIZE(msm_iommu_vcap_ctx_devs); i++) platform_device_unregister(msm_iommu_vcap_ctx_devs[i]); } if (soc_class_is_apq8064() || cpu_is_msm8960ab()) { for (i = 0; i < ARRAY_SIZE(msm_iommu_adreno3xx_ctx_devs); i++) platform_device_unregister( msm_iommu_adreno3xx_ctx_devs[i]); for (i = 0; i < ARRAY_SIZE(msm_iommu_jpegd_ctx_devs); i++) platform_device_unregister( msm_iommu_jpegd_ctx_devs[i]); if (soc_class_is_apq8064()) { for (i = 0; i < ARRAY_SIZE(msm_iommu_vcap_devs); i++) platform_device_unregister( msm_iommu_vcap_devs[i]); } for (i = 0; i < ARRAY_SIZE(msm_iommu_adreno3xx_gfx_devs); i++) platform_device_unregister( msm_iommu_adreno3xx_gfx_devs[i]); for (i = 0; i < ARRAY_SIZE(msm_iommu_jpegd_devs); i++) platform_device_unregister(msm_iommu_jpegd_devs[i]); } }
static int __init iommu_init(void) { int ret; if (!msm_soc_version_supports_iommu_v1()) { pr_err("IOMMU v1 is not supported on this SoC version.\n"); return -ENODEV; } /* Initialize common devs */ platform_add_devices(msm_iommu_common_devs, ARRAY_SIZE(msm_iommu_common_devs)); /* Initialize soc-specific devs */ if (cpu_is_msm8x60() || cpu_is_msm8960()) { platform_add_devices(msm_iommu_jpegd_devs, ARRAY_SIZE(msm_iommu_jpegd_devs)); platform_add_devices(msm_iommu_gfx2d_devs, ARRAY_SIZE(msm_iommu_gfx2d_devs)); } if (soc_class_is_apq8064() || cpu_is_msm8960ab()) { platform_add_devices(msm_iommu_jpegd_devs, ARRAY_SIZE(msm_iommu_jpegd_devs)); platform_add_devices(msm_iommu_adreno3xx_gfx_devs, ARRAY_SIZE(msm_iommu_adreno3xx_gfx_devs)); } if (soc_class_is_apq8064()) platform_add_devices(msm_iommu_vcap_devs, ARRAY_SIZE(msm_iommu_vcap_devs)); /* Initialize common ctx_devs */ ret = platform_add_devices(msm_iommu_common_ctx_devs, ARRAY_SIZE(msm_iommu_common_ctx_devs)); /* Initialize soc-specific ctx_devs */ if (cpu_is_msm8x60() || cpu_is_msm8960()) { platform_add_devices(msm_iommu_jpegd_ctx_devs, ARRAY_SIZE(msm_iommu_jpegd_ctx_devs)); platform_add_devices(msm_iommu_gfx2d_ctx_devs, ARRAY_SIZE(msm_iommu_gfx2d_ctx_devs)); } if (soc_class_is_apq8064() || cpu_is_msm8960ab()) { platform_add_devices(msm_iommu_jpegd_ctx_devs, ARRAY_SIZE(msm_iommu_jpegd_ctx_devs)); platform_add_devices(msm_iommu_adreno3xx_ctx_devs, ARRAY_SIZE(msm_iommu_adreno3xx_ctx_devs)); } if (soc_class_is_apq8064()) platform_add_devices(msm_iommu_vcap_ctx_devs, ARRAY_SIZE(msm_iommu_vcap_ctx_devs)); return 0; }
int msm_spm_turn_on_cpu_rail(unsigned int cpu) { uint32_t val = 0; uint32_t timeout = 0; void *reg = NULL; void *saw_bases[] = { 0, MSM_SAW1_BASE, MSM_SAW2_BASE, MSM_SAW3_BASE }; if (cpu == 0 || cpu >= num_possible_cpus()) return -EINVAL; reg = saw_bases[cpu]; if (soc_class_is_msm8960() || soc_class_is_apq8064() || cpu_is_ipq806x()) { val = 0xA4; reg += 0x14; timeout = 512; } else { return -ENOSYS; } writel_relaxed(val, reg); mb(); udelay(timeout); return 0; }
/* * This will return TRUE for targets which support apps as master. * Thus, SW DLOAD and Mode Reset are supported on apps processor. * This applies to 8960 and newer targets. */ int chk_apps_master(void) { if (driver->use_device_tree) return 1; else if (soc_class_is_msm8960() || soc_class_is_msm8930() || soc_class_is_apq8064() || cpu_is_msm9615()) return 1; else return 0; }
static int release_secondary(unsigned int cpu) { BUG_ON(cpu >= get_core_count()); if (cpu_is_msm8x60()) return scorpion_release_secondary(); if (machine_is_msm8974_sim()) return krait_release_secondary_sim(0xf9088000, cpu); if (soc_class_is_msm8960() || soc_class_is_msm8930() || soc_class_is_apq8064()) return krait_release_secondary(0x02088000, cpu); if (cpu_is_msm8974()) return krait_release_secondary_p3(0xf9088000, cpu); WARN(1, "unknown CPU case in release_secondary\n"); return -EINVAL; }
static int __init gss_8064_init(void) { int ret; if (!(soc_class_is_apq8064())) return -ENODEV; ret = smsm_state_cb_register(SMSM_MODEM_STATE, SMSM_RESET, smsm_state_cb, 0); if (ret < 0) pr_err("%s: Unable to register SMSM callback! (%d)\n", __func__, ret); ret = request_irq(GSS_A5_WDOG_EXPIRED, gss_wdog_bite_irq, IRQF_TRIGGER_RISING, "gss_a5_wdog", NULL); if (ret < 0) { pr_err("%s: Unable to request gss watchdog IRQ. (%d)\n", __func__, ret); disable_irq_nosync(GSS_A5_WDOG_EXPIRED); goto out; } ret = gss_subsystem_restart_init(); if (ret < 0) { pr_err("%s: Unable to reg with subsystem restart. (%d)\n", __func__, ret); goto out; } gss_data.gss_dev.minor = MISC_DYNAMIC_MINOR; gss_data.gss_dev.name = "gss"; gss_data.gss_dev.fops = &gss_file_ops; ret = misc_register(&gss_data.gss_dev); if (ret) { pr_err("%s: misc_registers failed for %s (%d)", __func__, gss_data.gss_dev.name, ret); goto out; } gss_data.gss_ramdump_dev = create_ramdump_device("gss"); if (!gss_data.gss_ramdump_dev) { pr_err("%s: Unable to create gss ramdump device. (%d)\n", __func__, -ENOMEM); ret = -ENOMEM; goto out; } gss_data.smem_ramdump_dev = create_ramdump_device("smem-gss"); if (!gss_data.smem_ramdump_dev) { pr_err("%s: Unable to create smem ramdump device. (%d)\n", __func__, -ENOMEM); ret = -ENOMEM; goto out; } pr_info("%s: gss fatal driver init'ed.\n", __func__); out: return ret; }
static int __init modem_8960_init(void) { int ret; if (soc_class_is_apq8064()) return -ENODEV; ret = smsm_state_cb_register(SMSM_MODEM_STATE, SMSM_RESET, smsm_state_cb, 0); if (ret < 0) pr_err("%s: Unable to register SMSM callback! (%d)\n", __func__, ret); ret = request_irq(Q6FW_WDOG_EXPIRED_IRQ, modem_wdog_bite_irq, IRQF_TRIGGER_RISING, "modem_wdog_fw", NULL); if (ret < 0) { pr_err("%s: Unable to request q6fw watchdog IRQ. (%d)\n", __func__, ret); goto out; } ret = request_irq(Q6SW_WDOG_EXPIRED_IRQ, modem_wdog_bite_irq, IRQF_TRIGGER_RISING, "modem_wdog_sw", NULL); if (ret < 0) { pr_err("%s: Unable to request q6sw watchdog IRQ. (%d)\n", __func__, ret); disable_irq_nosync(Q6FW_WDOG_EXPIRED_IRQ); goto out; } ret = modem_subsystem_restart_init(); if (ret < 0) { pr_err("%s: Unable to reg with subsystem restart. (%d)\n", __func__, ret); goto out; } modemfw_ramdump_dev = create_ramdump_device("modem_fw"); if (!modemfw_ramdump_dev) { pr_err("%s: Unable to create modem fw ramdump device. (%d)\n", __func__, -ENOMEM); ret = -ENOMEM; goto out; } modemsw_ramdump_dev = create_ramdump_device("modem_sw"); if (!modemsw_ramdump_dev) { pr_err("%s: Unable to create modem sw ramdump device. (%d)\n", __func__, -ENOMEM); ret = -ENOMEM; goto out; } smem_ramdump_dev = create_ramdump_device("smem-modem"); if (!smem_ramdump_dev) { pr_err("%s: Unable to create smem ramdump device. (%d)\n", __func__, -ENOMEM); ret = -ENOMEM; goto out; } ret = modem_debugfs_init(); pr_info("%s: modem fatal driver init'ed.\n", __func__); out: return ret; }