Lines Matching refs:emif
79 static void do_emif_regdump_show(struct seq_file *s, struct emif_data *emif, in do_emif_regdump_show() argument
82 u32 type = emif->plat_data->device_info->type; in do_emif_regdump_show()
83 u32 ip_rev = emif->plat_data->ip_rev; in do_emif_regdump_show()
117 struct emif_data *emif = s->private; in emif_regdump_show() local
121 if (emif->duplicate) in emif_regdump_show()
124 regs_cache = emif->regs_cache; in emif_regdump_show()
127 do_emif_regdump_show(s, emif, regs_cache[i]); in emif_regdump_show()
138 struct emif_data *emif = s->private; in emif_mr4_show() local
140 seq_printf(s, "MR4=%d\n", emif->temperature_level); in emif_mr4_show()
146 static int __init_or_module emif_debugfs_init(struct emif_data *emif) in emif_debugfs_init() argument
148 emif->debugfs_root = debugfs_create_dir(dev_name(emif->dev), NULL); in emif_debugfs_init()
149 debugfs_create_file("regcache_dump", S_IRUGO, emif->debugfs_root, emif, in emif_debugfs_init()
151 debugfs_create_file("mr4", S_IRUGO, emif->debugfs_root, emif, in emif_debugfs_init()
156 static void __exit emif_debugfs_exit(struct emif_data *emif) in emif_debugfs_exit() argument
158 debugfs_remove_recursive(emif->debugfs_root); in emif_debugfs_exit()
159 emif->debugfs_root = NULL; in emif_debugfs_exit()
162 static inline int __init_or_module emif_debugfs_init(struct emif_data *emif) in emif_debugfs_init() argument
167 static inline void __exit emif_debugfs_exit(struct emif_data *emif) in emif_debugfs_exit() argument
187 static u32 get_emif_bus_width(struct emif_data *emif) in get_emif_bus_width() argument
190 void __iomem *base = emif->base; in get_emif_bus_width()
202 static u32 get_cl(struct emif_data *emif) in get_cl() argument
205 void __iomem *base = emif->base; in get_cl()
212 static void set_lpmode(struct emif_data *emif, u8 lpmode) in set_lpmode() argument
215 void __iomem *base = emif->base; in set_lpmode()
243 if ((emif->plat_data->ip_rev == EMIF_4D) && in set_lpmode()
259 struct emif_data *emif; in do_freq_update() local
284 list_for_each_entry(emif, &device_list, node) { in do_freq_update()
285 if (emif->lpmode == EMIF_LP_MODE_SELF_REFRESH) in do_freq_update()
286 set_lpmode(emif, EMIF_LP_MODE_DISABLE); in do_freq_update()
295 list_for_each_entry(emif, &device_list, node) { in do_freq_update()
296 if (emif->lpmode == EMIF_LP_MODE_SELF_REFRESH) in do_freq_update()
297 set_lpmode(emif, EMIF_LP_MODE_SELF_REFRESH); in do_freq_update()
335 static const struct lpddr2_timings *get_timings_table(struct emif_data *emif, in get_timings_table() argument
340 const struct lpddr2_timings *timings_arr = emif->plat_data->timings; in get_timings_table()
341 struct device *dev = emif->dev; in get_timings_table()
351 for (i = 0; i < emif->plat_data->timings_arr_size; i++) { in get_timings_table()
703 static u32 get_pwr_mgmt_ctrl(u32 freq, struct emif_data *emif, u32 ip_rev) in get_pwr_mgmt_ctrl() argument
713 struct emif_custom_configs *cust_cfgs = emif->plat_data->custom_configs; in get_pwr_mgmt_ctrl()
794 static void get_temperature_level(struct emif_data *emif) in get_temperature_level() argument
799 base = emif->base; in get_temperature_level()
807 if (emif->plat_data->device_info->cs1_used) { in get_temperature_level()
821 emif->temperature_level = temperature_level; in get_temperature_level()
828 static void setup_registers(struct emif_data *emif, struct emif_regs *regs) in setup_registers() argument
830 void __iomem *base = emif->base; in setup_registers()
838 if (emif->plat_data->ip_rev != EMIF_4D5) in setup_registers()
849 static void setup_volt_sensitive_regs(struct emif_data *emif, in setup_volt_sensitive_regs() argument
853 void __iomem *base = emif->base; in setup_volt_sensitive_regs()
877 static void setup_temperature_sensitive_regs(struct emif_data *emif, in setup_temperature_sensitive_regs() argument
881 void __iomem *base = emif->base; in setup_temperature_sensitive_regs()
884 type = emif->plat_data->device_info->type; in setup_temperature_sensitive_regs()
894 temperature = emif->temperature_level; in setup_temperature_sensitive_regs()
909 static irqreturn_t handle_temp_alert(void __iomem *base, struct emif_data *emif) in handle_temp_alert() argument
916 old_temp_level = emif->temperature_level; in handle_temp_alert()
917 get_temperature_level(emif); in handle_temp_alert()
919 if (unlikely(emif->temperature_level == old_temp_level)) { in handle_temp_alert()
921 } else if (!emif->curr_regs) { in handle_temp_alert()
922 dev_err(emif->dev, "temperature alert before registers are calculated, not de-rating timings\n"); in handle_temp_alert()
926 custom_configs = emif->plat_data->custom_configs; in handle_temp_alert()
934 if (emif->temperature_level >= SDRAM_TEMP_HIGH_DERATE_REFRESH) { in handle_temp_alert()
935 dev_err(emif->dev, in handle_temp_alert()
937 __func__, emif->temperature_level); in handle_temp_alert()
942 emif->temperature_level = SDRAM_TEMP_VERY_HIGH_SHUTDOWN; in handle_temp_alert()
948 if (emif->temperature_level < old_temp_level || in handle_temp_alert()
949 emif->temperature_level == SDRAM_TEMP_VERY_HIGH_SHUTDOWN) { in handle_temp_alert()
958 setup_temperature_sensitive_regs(emif, emif->curr_regs); in handle_temp_alert()
970 struct emif_data *emif = dev_id; in emif_interrupt_handler() local
971 void __iomem *base = emif->base; in emif_interrupt_handler()
972 struct device *dev = emif->dev; in emif_interrupt_handler()
985 ret = handle_temp_alert(base, emif); in emif_interrupt_handler()
990 if (emif->plat_data->hw_caps & EMIF_HW_CAPS_LL_INTERFACE) { in emif_interrupt_handler()
1005 struct emif_data *emif = dev_id; in emif_threaded_isr() local
1007 if (emif->temperature_level == SDRAM_TEMP_VERY_HIGH_SHUTDOWN) { in emif_threaded_isr()
1008 dev_emerg(emif->dev, "SDRAM temperature exceeds operating limit.. Needs shut down!!!\n"); in emif_threaded_isr()
1022 if (emif->curr_regs) { in emif_threaded_isr()
1023 setup_temperature_sensitive_regs(emif, emif->curr_regs); in emif_threaded_isr()
1026 dev_err(emif->dev, "temperature alert before registers are calculated, not de-rating timings\n"); in emif_threaded_isr()
1034 static void clear_all_interrupts(struct emif_data *emif) in clear_all_interrupts() argument
1036 void __iomem *base = emif->base; in clear_all_interrupts()
1040 if (emif->plat_data->hw_caps & EMIF_HW_CAPS_LL_INTERFACE) in clear_all_interrupts()
1045 static void disable_and_clear_all_interrupts(struct emif_data *emif) in disable_and_clear_all_interrupts() argument
1047 void __iomem *base = emif->base; in disable_and_clear_all_interrupts()
1052 if (emif->plat_data->hw_caps & EMIF_HW_CAPS_LL_INTERFACE) in disable_and_clear_all_interrupts()
1057 clear_all_interrupts(emif); in disable_and_clear_all_interrupts()
1060 static int __init_or_module setup_interrupts(struct emif_data *emif, u32 irq) in setup_interrupts() argument
1063 void __iomem *base = emif->base; in setup_interrupts()
1065 type = emif->plat_data->device_info->type; in setup_interrupts()
1067 clear_all_interrupts(emif); in setup_interrupts()
1076 if (emif->plat_data->hw_caps & EMIF_HW_CAPS_LL_INTERFACE) { in setup_interrupts()
1083 return devm_request_threaded_irq(emif->dev, irq, in setup_interrupts()
1086 0, dev_name(emif->dev), in setup_interrupts()
1087 emif); in setup_interrupts()
1091 static void __init_or_module emif_onetime_settings(struct emif_data *emif) in emif_onetime_settings() argument
1094 void __iomem *base = emif->base; in emif_onetime_settings()
1098 device_info = emif->plat_data->device_info; in emif_onetime_settings()
1106 pwr_mgmt_ctrl = get_pwr_mgmt_ctrl(1000000000, emif, in emif_onetime_settings()
1107 emif->plat_data->ip_rev); in emif_onetime_settings()
1108 emif->lpmode = (pwr_mgmt_ctrl & LP_MODE_MASK) >> LP_MODE_SHIFT; in emif_onetime_settings()
1117 get_temperature_level(emif); in emif_onetime_settings()
1118 if (emif->temperature_level == SDRAM_TEMP_VERY_HIGH_SHUTDOWN) in emif_onetime_settings()
1119 dev_emerg(emif->dev, "SDRAM temperature exceeds operating limit.. Needs shut down!!!\n"); in emif_onetime_settings()
1123 emif->plat_data->custom_configs, device_info->cs1_used, in emif_onetime_settings()
1124 device_info->io_width, get_emif_bus_width(emif)); in emif_onetime_settings()
1131 if (emif->plat_data->phy_type != EMIF_PHY_TYPE_INTELLIPHY) in emif_onetime_settings()
1156 static void get_default_timings(struct emif_data *emif) in get_default_timings() argument
1158 struct emif_platform_data *pd = emif->plat_data; in get_default_timings()
1163 dev_warn(emif->dev, "%s: using default timings\n", __func__); in get_default_timings()
1217 struct emif_data *emif) in of_get_custom_configs() argument
1227 cust_cfgs = devm_kzalloc(emif->dev, sizeof(*cust_cfgs), in of_get_custom_configs()
1257 if (!is_custom_config_valid(cust_cfgs, emif->dev)) { in of_get_custom_configs()
1258 devm_kfree(emif->dev, cust_cfgs); in of_get_custom_configs()
1262 emif->plat_data->custom_configs = cust_cfgs; in of_get_custom_configs()
1302 struct emif_data *emif = NULL; in of_get_memory_device_details() local
1311 emif = devm_kzalloc(dev, sizeof(struct emif_data), GFP_KERNEL); in of_get_memory_device_details()
1315 if (!emif || !pd || !dev_info) { in of_get_memory_device_details()
1321 emif->plat_data = pd; in of_get_memory_device_details()
1323 emif->dev = dev; in of_get_memory_device_details()
1324 emif->np_ddr = np_ddr; in of_get_memory_device_details()
1325 emif->temperature_level = SDRAM_TEMP_NOMINAL; in of_get_memory_device_details()
1328 emif->plat_data->ip_rev = EMIF_4D; in of_get_memory_device_details()
1330 emif->plat_data->ip_rev = EMIF_4D5; in of_get_memory_device_details()
1340 emif->dev)) { in of_get_memory_device_details()
1351 emif->duplicate = true; in of_get_memory_device_details()
1354 dev_warn(emif->dev, "%s: Non-symmetric DDR geometry\n", in of_get_memory_device_details()
1358 of_get_custom_configs(np_emif, emif); in of_get_memory_device_details()
1359 emif->plat_data->timings = of_get_ddr_timings(np_ddr, emif->dev, in of_get_memory_device_details()
1360 emif->plat_data->device_info->type, in of_get_memory_device_details()
1361 &emif->plat_data->timings_arr_size); in of_get_memory_device_details()
1363 emif->plat_data->min_tck = of_get_min_tck(np_ddr, emif->dev); in of_get_memory_device_details()
1369 return emif; in of_get_memory_device_details()
1385 struct emif_data *emif = NULL; in get_device_details() local
1402 emif = devm_kzalloc(dev, sizeof(*emif), GFP_KERNEL); in get_device_details()
1406 if (!emif || !temp || !dev_info) { in get_device_details()
1416 emif->plat_data = pd; in get_device_details()
1417 emif->dev = dev; in get_device_details()
1418 emif->temperature_level = SDRAM_TEMP_NOMINAL; in get_device_details()
1426 emif->duplicate = emif1 && (memcmp(dev_info, in get_device_details()
1430 if (emif->duplicate) { in get_device_details()
1435 dev_warn(emif->dev, "%s: Non-symmetric DDR geometry\n", in get_device_details()
1467 get_default_timings(emif); in get_device_details()
1470 get_default_timings(emif); in get_device_details()
1488 return emif; in get_device_details()
1496 struct emif_data *emif; in emif_probe() local
1501 emif = of_get_memory_device_details(pdev->dev.of_node, &pdev->dev); in emif_probe()
1503 emif = get_device_details(pdev); in emif_probe()
1505 if (!emif) { in emif_probe()
1510 list_add(&emif->node, &device_list); in emif_probe()
1511 emif->addressing = get_addressing_table(emif->plat_data->device_info); in emif_probe()
1514 emif->dev = &pdev->dev; in emif_probe()
1515 platform_set_drvdata(pdev, emif); in emif_probe()
1518 emif->base = devm_ioremap_resource(emif->dev, res); in emif_probe()
1519 if (IS_ERR(emif->base)) in emif_probe()
1526 emif_onetime_settings(emif); in emif_probe()
1527 emif_debugfs_init(emif); in emif_probe()
1528 disable_and_clear_all_interrupts(emif); in emif_probe()
1529 ret = setup_interrupts(emif, irq); in emif_probe()
1535 emif1 = emif; in emif_probe()
1546 __func__, emif->base, irq); in emif_probe()
1555 struct emif_data *emif = platform_get_drvdata(pdev); in emif_remove() local
1557 emif_debugfs_exit(emif); in emif_remove()
1564 struct emif_data *emif = platform_get_drvdata(pdev); in emif_shutdown() local
1566 disable_and_clear_all_interrupts(emif); in emif_shutdown()
1569 static int get_emif_reg_values(struct emif_data *emif, u32 freq, in get_emif_reg_values() argument
1581 dev = emif->dev; in get_emif_reg_values()
1586 emif_for_calc = emif->duplicate ? emif1 : emif; in get_emif_reg_values()
1612 cl = get_cl(emif); in get_emif_reg_values()
1677 static struct emif_regs *get_regs(struct emif_data *emif, u32 freq) in get_regs() argument
1684 dev = emif->dev; in get_regs()
1685 if (emif->curr_regs && emif->curr_regs->freq == freq) { in get_regs()
1687 return emif->curr_regs; in get_regs()
1690 if (emif->duplicate) in get_regs()
1693 regs_cache = emif->regs_cache; in get_regs()
1710 regs = devm_kzalloc(emif->dev, sizeof(*regs), GFP_ATOMIC); in get_regs()
1714 if (get_emif_reg_values(emif, freq, regs)) { in get_regs()
1715 devm_kfree(emif->dev, regs); in get_regs()
1731 devm_kfree(emif->dev, regs_cache[i]); in get_regs()
1739 static void do_volt_notify_handling(struct emif_data *emif, u32 volt_state) in do_volt_notify_handling() argument
1741 dev_dbg(emif->dev, "%s: voltage notification : %d", __func__, in do_volt_notify_handling()
1744 if (!emif->curr_regs) { in do_volt_notify_handling()
1745 dev_err(emif->dev, in do_volt_notify_handling()
1751 setup_volt_sensitive_regs(emif, emif->curr_regs, volt_state); in do_volt_notify_handling()
1762 struct emif_data *emif; in volt_notify_handling() local
1766 list_for_each_entry(emif, &device_list, node) in volt_notify_handling()
1767 do_volt_notify_handling(emif, volt_state); in volt_notify_handling()
1773 static void do_freq_pre_notify_handling(struct emif_data *emif, u32 new_freq) in do_freq_pre_notify_handling() argument
1777 regs = get_regs(emif, new_freq); in do_freq_pre_notify_handling()
1781 emif->curr_regs = regs; in do_freq_pre_notify_handling()
1789 dev_dbg(emif->dev, "%s: setting up shadow registers for %uHz", in do_freq_pre_notify_handling()
1791 setup_registers(emif, regs); in do_freq_pre_notify_handling()
1792 setup_temperature_sensitive_regs(emif, regs); in do_freq_pre_notify_handling()
1793 setup_volt_sensitive_regs(emif, regs, DDR_VOLTAGE_STABLE); in do_freq_pre_notify_handling()
1799 if (emif->lpmode == EMIF_LP_MODE_SELF_REFRESH) in do_freq_pre_notify_handling()
1800 set_lpmode(emif, EMIF_LP_MODE_DISABLE); in do_freq_pre_notify_handling()
1811 struct emif_data *emif; in freq_pre_notify_handling() local
1834 list_for_each_entry(emif, &device_list, node) in freq_pre_notify_handling()
1835 do_freq_pre_notify_handling(emif, new_freq); in freq_pre_notify_handling()
1838 static void do_freq_post_notify_handling(struct emif_data *emif) in do_freq_post_notify_handling() argument
1844 if (emif->lpmode == EMIF_LP_MODE_SELF_REFRESH) in do_freq_post_notify_handling()
1845 set_lpmode(emif, EMIF_LP_MODE_SELF_REFRESH); in do_freq_post_notify_handling()
1856 struct emif_data *emif; in freq_post_notify_handling() local
1858 list_for_each_entry(emif, &device_list, node) in freq_post_notify_handling()
1859 do_freq_post_notify_handling(emif); in freq_post_notify_handling()