Lines Matching refs:emif
81 static void do_emif_regdump_show(struct seq_file *s, struct emif_data *emif, in do_emif_regdump_show() argument
84 u32 type = emif->plat_data->device_info->type; in do_emif_regdump_show()
85 u32 ip_rev = emif->plat_data->ip_rev; in do_emif_regdump_show()
119 struct emif_data *emif = s->private; in emif_regdump_show() local
123 if (emif->duplicate) in emif_regdump_show()
126 regs_cache = emif->regs_cache; in emif_regdump_show()
129 do_emif_regdump_show(s, emif, regs_cache[i]); in emif_regdump_show()
149 struct emif_data *emif = s->private; in emif_mr4_show() local
151 seq_printf(s, "MR4=%d\n", emif->temperature_level); in emif_mr4_show()
166 static int __init_or_module emif_debugfs_init(struct emif_data *emif) in emif_debugfs_init() argument
171 dentry = debugfs_create_dir(dev_name(emif->dev), NULL); in emif_debugfs_init()
176 emif->debugfs_root = dentry; in emif_debugfs_init()
179 emif->debugfs_root, emif, &emif_regdump_fops); in emif_debugfs_init()
186 emif->debugfs_root, emif, &emif_mr4_fops); in emif_debugfs_init()
194 debugfs_remove_recursive(emif->debugfs_root); in emif_debugfs_init()
199 static void __exit emif_debugfs_exit(struct emif_data *emif) in emif_debugfs_exit() argument
201 debugfs_remove_recursive(emif->debugfs_root); in emif_debugfs_exit()
202 emif->debugfs_root = NULL; in emif_debugfs_exit()
205 static inline int __init_or_module emif_debugfs_init(struct emif_data *emif) in emif_debugfs_init() argument
210 static inline void __exit emif_debugfs_exit(struct emif_data *emif) in emif_debugfs_exit() argument
230 static u32 get_emif_bus_width(struct emif_data *emif) in get_emif_bus_width() argument
233 void __iomem *base = emif->base; in get_emif_bus_width()
245 static u32 get_cl(struct emif_data *emif) in get_cl() argument
248 void __iomem *base = emif->base; in get_cl()
255 static void set_lpmode(struct emif_data *emif, u8 lpmode) in set_lpmode() argument
258 void __iomem *base = emif->base; in set_lpmode()
286 if ((emif->plat_data->ip_rev == EMIF_4D) && in set_lpmode()
303 struct emif_data *emif; in do_freq_update() local
328 list_for_each_entry(emif, &device_list, node) { in do_freq_update()
329 if (emif->lpmode == EMIF_LP_MODE_SELF_REFRESH) in do_freq_update()
330 set_lpmode(emif, EMIF_LP_MODE_DISABLE); in do_freq_update()
339 list_for_each_entry(emif, &device_list, node) { in do_freq_update()
340 if (emif->lpmode == EMIF_LP_MODE_SELF_REFRESH) in do_freq_update()
341 set_lpmode(emif, EMIF_LP_MODE_SELF_REFRESH); in do_freq_update()
379 static const struct lpddr2_timings *get_timings_table(struct emif_data *emif, in get_timings_table() argument
384 const struct lpddr2_timings *timings_arr = emif->plat_data->timings; in get_timings_table()
385 struct device *dev = emif->dev; in get_timings_table()
395 for (i = 0; i < emif->plat_data->timings_arr_size; i++) { in get_timings_table()
747 static u32 get_pwr_mgmt_ctrl(u32 freq, struct emif_data *emif, u32 ip_rev) in get_pwr_mgmt_ctrl() argument
757 struct emif_custom_configs *cust_cfgs = emif->plat_data->custom_configs; in get_pwr_mgmt_ctrl()
838 static void get_temperature_level(struct emif_data *emif) in get_temperature_level() argument
843 base = emif->base; in get_temperature_level()
851 if (emif->plat_data->device_info->cs1_used) { in get_temperature_level()
865 emif->temperature_level = temperature_level; in get_temperature_level()
872 static void setup_registers(struct emif_data *emif, struct emif_regs *regs) in setup_registers() argument
874 void __iomem *base = emif->base; in setup_registers()
882 if (emif->plat_data->ip_rev != EMIF_4D5) in setup_registers()
893 static void setup_volt_sensitive_regs(struct emif_data *emif, in setup_volt_sensitive_regs() argument
897 void __iomem *base = emif->base; in setup_volt_sensitive_regs()
921 static void setup_temperature_sensitive_regs(struct emif_data *emif, in setup_temperature_sensitive_regs() argument
925 void __iomem *base = emif->base; in setup_temperature_sensitive_regs()
928 type = emif->plat_data->device_info->type; in setup_temperature_sensitive_regs()
938 temperature = emif->temperature_level; in setup_temperature_sensitive_regs()
953 static irqreturn_t handle_temp_alert(void __iomem *base, struct emif_data *emif) in handle_temp_alert() argument
960 old_temp_level = emif->temperature_level; in handle_temp_alert()
961 get_temperature_level(emif); in handle_temp_alert()
963 if (unlikely(emif->temperature_level == old_temp_level)) { in handle_temp_alert()
965 } else if (!emif->curr_regs) { in handle_temp_alert()
966 dev_err(emif->dev, "temperature alert before registers are calculated, not de-rating timings\n"); in handle_temp_alert()
970 custom_configs = emif->plat_data->custom_configs; in handle_temp_alert()
978 if (emif->temperature_level >= SDRAM_TEMP_HIGH_DERATE_REFRESH) { in handle_temp_alert()
979 dev_err(emif->dev, in handle_temp_alert()
982 __func__, emif->temperature_level); in handle_temp_alert()
987 emif->temperature_level = SDRAM_TEMP_VERY_HIGH_SHUTDOWN; in handle_temp_alert()
993 if (emif->temperature_level < old_temp_level || in handle_temp_alert()
994 emif->temperature_level == SDRAM_TEMP_VERY_HIGH_SHUTDOWN) { in handle_temp_alert()
1003 setup_temperature_sensitive_regs(emif, emif->curr_regs); in handle_temp_alert()
1015 struct emif_data *emif = dev_id; in emif_interrupt_handler() local
1016 void __iomem *base = emif->base; in emif_interrupt_handler()
1017 struct device *dev = emif->dev; in emif_interrupt_handler()
1030 ret = handle_temp_alert(base, emif); in emif_interrupt_handler()
1035 if (emif->plat_data->hw_caps & EMIF_HW_CAPS_LL_INTERFACE) { in emif_interrupt_handler()
1050 struct emif_data *emif = dev_id; in emif_threaded_isr() local
1052 if (emif->temperature_level == SDRAM_TEMP_VERY_HIGH_SHUTDOWN) { in emif_threaded_isr()
1053 dev_emerg(emif->dev, "SDRAM temperature exceeds operating limit.. Needs shut down!!!\n"); in emif_threaded_isr()
1067 if (emif->curr_regs) { in emif_threaded_isr()
1068 setup_temperature_sensitive_regs(emif, emif->curr_regs); in emif_threaded_isr()
1071 dev_err(emif->dev, "temperature alert before registers are calculated, not de-rating timings\n"); in emif_threaded_isr()
1079 static void clear_all_interrupts(struct emif_data *emif) in clear_all_interrupts() argument
1081 void __iomem *base = emif->base; in clear_all_interrupts()
1085 if (emif->plat_data->hw_caps & EMIF_HW_CAPS_LL_INTERFACE) in clear_all_interrupts()
1090 static void disable_and_clear_all_interrupts(struct emif_data *emif) in disable_and_clear_all_interrupts() argument
1092 void __iomem *base = emif->base; in disable_and_clear_all_interrupts()
1097 if (emif->plat_data->hw_caps & EMIF_HW_CAPS_LL_INTERFACE) in disable_and_clear_all_interrupts()
1102 clear_all_interrupts(emif); in disable_and_clear_all_interrupts()
1105 static int __init_or_module setup_interrupts(struct emif_data *emif, u32 irq) in setup_interrupts() argument
1108 void __iomem *base = emif->base; in setup_interrupts()
1110 type = emif->plat_data->device_info->type; in setup_interrupts()
1112 clear_all_interrupts(emif); in setup_interrupts()
1121 if (emif->plat_data->hw_caps & EMIF_HW_CAPS_LL_INTERFACE) { in setup_interrupts()
1128 return devm_request_threaded_irq(emif->dev, irq, in setup_interrupts()
1131 0, dev_name(emif->dev), in setup_interrupts()
1132 emif); in setup_interrupts()
1136 static void __init_or_module emif_onetime_settings(struct emif_data *emif) in emif_onetime_settings() argument
1139 void __iomem *base = emif->base; in emif_onetime_settings()
1143 device_info = emif->plat_data->device_info; in emif_onetime_settings()
1151 pwr_mgmt_ctrl = get_pwr_mgmt_ctrl(1000000000, emif, in emif_onetime_settings()
1152 emif->plat_data->ip_rev); in emif_onetime_settings()
1153 emif->lpmode = (pwr_mgmt_ctrl & LP_MODE_MASK) >> LP_MODE_SHIFT; in emif_onetime_settings()
1162 get_temperature_level(emif); in emif_onetime_settings()
1163 if (emif->temperature_level == SDRAM_TEMP_VERY_HIGH_SHUTDOWN) in emif_onetime_settings()
1164 dev_emerg(emif->dev, "SDRAM temperature exceeds operating limit.. Needs shut down!!!\n"); in emif_onetime_settings()
1168 emif->plat_data->custom_configs, device_info->cs1_used, in emif_onetime_settings()
1169 device_info->io_width, get_emif_bus_width(emif)); in emif_onetime_settings()
1176 if (emif->plat_data->phy_type != EMIF_PHY_TYPE_INTELLIPHY) in emif_onetime_settings()
1201 static void get_default_timings(struct emif_data *emif) in get_default_timings() argument
1203 struct emif_platform_data *pd = emif->plat_data; in get_default_timings()
1208 dev_warn(emif->dev, "%s: using default timings\n", __func__); in get_default_timings()
1262 struct emif_data *emif) in of_get_custom_configs() argument
1272 cust_cfgs = devm_kzalloc(emif->dev, sizeof(*cust_cfgs), in of_get_custom_configs()
1302 if (!is_custom_config_valid(cust_cfgs, emif->dev)) { in of_get_custom_configs()
1303 devm_kfree(emif->dev, cust_cfgs); in of_get_custom_configs()
1307 emif->plat_data->custom_configs = cust_cfgs; in of_get_custom_configs()
1347 struct emif_data *emif = NULL; in of_get_memory_device_details() local
1356 emif = devm_kzalloc(dev, sizeof(struct emif_data), GFP_KERNEL); in of_get_memory_device_details()
1360 if (!emif || !pd || !dev_info) { in of_get_memory_device_details()
1366 emif->plat_data = pd; in of_get_memory_device_details()
1368 emif->dev = dev; in of_get_memory_device_details()
1369 emif->np_ddr = np_ddr; in of_get_memory_device_details()
1370 emif->temperature_level = SDRAM_TEMP_NOMINAL; in of_get_memory_device_details()
1373 emif->plat_data->ip_rev = EMIF_4D; in of_get_memory_device_details()
1375 emif->plat_data->ip_rev = EMIF_4D5; in of_get_memory_device_details()
1385 emif->dev)) { in of_get_memory_device_details()
1396 emif->duplicate = true; in of_get_memory_device_details()
1399 dev_warn(emif->dev, "%s: Non-symmetric DDR geometry\n", in of_get_memory_device_details()
1403 of_get_custom_configs(np_emif, emif); in of_get_memory_device_details()
1404 emif->plat_data->timings = of_get_ddr_timings(np_ddr, emif->dev, in of_get_memory_device_details()
1405 emif->plat_data->device_info->type, in of_get_memory_device_details()
1406 &emif->plat_data->timings_arr_size); in of_get_memory_device_details()
1408 emif->plat_data->min_tck = of_get_min_tck(np_ddr, emif->dev); in of_get_memory_device_details()
1414 return emif; in of_get_memory_device_details()
1430 struct emif_data *emif = NULL; in get_device_details() local
1447 emif = devm_kzalloc(dev, sizeof(*emif), GFP_KERNEL); in get_device_details()
1451 if (!emif || !pd || !dev_info) { in get_device_details()
1461 emif->plat_data = pd; in get_device_details()
1462 emif->dev = dev; in get_device_details()
1463 emif->temperature_level = SDRAM_TEMP_NOMINAL; in get_device_details()
1471 emif->duplicate = emif1 && (memcmp(dev_info, in get_device_details()
1475 if (emif->duplicate) { in get_device_details()
1480 dev_warn(emif->dev, "%s: Non-symmetric DDR geometry\n", in get_device_details()
1512 get_default_timings(emif); in get_device_details()
1515 get_default_timings(emif); in get_device_details()
1533 return emif; in get_device_details()
1541 struct emif_data *emif; in emif_probe() local
1546 emif = of_get_memory_device_details(pdev->dev.of_node, &pdev->dev); in emif_probe()
1548 emif = get_device_details(pdev); in emif_probe()
1550 if (!emif) { in emif_probe()
1555 list_add(&emif->node, &device_list); in emif_probe()
1556 emif->addressing = get_addressing_table(emif->plat_data->device_info); in emif_probe()
1559 emif->dev = &pdev->dev; in emif_probe()
1560 platform_set_drvdata(pdev, emif); in emif_probe()
1563 emif->base = devm_ioremap_resource(emif->dev, res); in emif_probe()
1564 if (IS_ERR(emif->base)) in emif_probe()
1569 dev_err(emif->dev, "%s: error getting IRQ resource - %d\n", in emif_probe()
1574 emif_onetime_settings(emif); in emif_probe()
1575 emif_debugfs_init(emif); in emif_probe()
1576 disable_and_clear_all_interrupts(emif); in emif_probe()
1577 setup_interrupts(emif, irq); in emif_probe()
1581 emif1 = emif; in emif_probe()
1592 __func__, emif->base, irq); in emif_probe()
1601 struct emif_data *emif = platform_get_drvdata(pdev); in emif_remove() local
1603 emif_debugfs_exit(emif); in emif_remove()
1610 struct emif_data *emif = platform_get_drvdata(pdev); in emif_shutdown() local
1612 disable_and_clear_all_interrupts(emif); in emif_shutdown()
1615 static int get_emif_reg_values(struct emif_data *emif, u32 freq, in get_emif_reg_values() argument
1628 dev = emif->dev; in get_emif_reg_values()
1633 emif_for_calc = emif->duplicate ? emif1 : emif; in get_emif_reg_values()
1661 cl = get_cl(emif); in get_emif_reg_values()
1726 static struct emif_regs *get_regs(struct emif_data *emif, u32 freq) in get_regs() argument
1733 dev = emif->dev; in get_regs()
1734 if (emif->curr_regs && emif->curr_regs->freq == freq) { in get_regs()
1736 return emif->curr_regs; in get_regs()
1739 if (emif->duplicate) in get_regs()
1742 regs_cache = emif->regs_cache; in get_regs()
1759 regs = devm_kzalloc(emif->dev, sizeof(*regs), GFP_ATOMIC); in get_regs()
1763 if (get_emif_reg_values(emif, freq, regs)) { in get_regs()
1764 devm_kfree(emif->dev, regs); in get_regs()
1780 devm_kfree(emif->dev, regs_cache[i]); in get_regs()
1788 static void do_volt_notify_handling(struct emif_data *emif, u32 volt_state) in do_volt_notify_handling() argument
1790 dev_dbg(emif->dev, "%s: voltage notification : %d", __func__, in do_volt_notify_handling()
1793 if (!emif->curr_regs) { in do_volt_notify_handling()
1794 dev_err(emif->dev, in do_volt_notify_handling()
1800 setup_volt_sensitive_regs(emif, emif->curr_regs, volt_state); in do_volt_notify_handling()
1811 struct emif_data *emif; in volt_notify_handling() local
1815 list_for_each_entry(emif, &device_list, node) in volt_notify_handling()
1816 do_volt_notify_handling(emif, volt_state); in volt_notify_handling()
1822 static void do_freq_pre_notify_handling(struct emif_data *emif, u32 new_freq) in do_freq_pre_notify_handling() argument
1826 regs = get_regs(emif, new_freq); in do_freq_pre_notify_handling()
1830 emif->curr_regs = regs; in do_freq_pre_notify_handling()
1838 dev_dbg(emif->dev, "%s: setting up shadow registers for %uHz", in do_freq_pre_notify_handling()
1840 setup_registers(emif, regs); in do_freq_pre_notify_handling()
1841 setup_temperature_sensitive_regs(emif, regs); in do_freq_pre_notify_handling()
1842 setup_volt_sensitive_regs(emif, regs, DDR_VOLTAGE_STABLE); in do_freq_pre_notify_handling()
1848 if (emif->lpmode == EMIF_LP_MODE_SELF_REFRESH) in do_freq_pre_notify_handling()
1849 set_lpmode(emif, EMIF_LP_MODE_DISABLE); in do_freq_pre_notify_handling()
1860 struct emif_data *emif; in freq_pre_notify_handling() local
1883 list_for_each_entry(emif, &device_list, node) in freq_pre_notify_handling()
1884 do_freq_pre_notify_handling(emif, new_freq); in freq_pre_notify_handling()
1887 static void do_freq_post_notify_handling(struct emif_data *emif) in do_freq_post_notify_handling() argument
1893 if (emif->lpmode == EMIF_LP_MODE_SELF_REFRESH) in do_freq_post_notify_handling()
1894 set_lpmode(emif, EMIF_LP_MODE_SELF_REFRESH); in do_freq_post_notify_handling()
1905 struct emif_data *emif; in freq_post_notify_handling() local
1907 list_for_each_entry(emif, &device_list, node) in freq_post_notify_handling()
1908 do_freq_post_notify_handling(emif); in freq_post_notify_handling()