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()
147 struct emif_data *emif = s->private; in emif_mr4_show() local
149 seq_printf(s, "MR4=%d\n", emif->temperature_level); in emif_mr4_show()
164 static int __init_or_module emif_debugfs_init(struct emif_data *emif) in emif_debugfs_init() argument
169 dentry = debugfs_create_dir(dev_name(emif->dev), NULL); in emif_debugfs_init()
174 emif->debugfs_root = dentry; in emif_debugfs_init()
177 emif->debugfs_root, emif, &emif_regdump_fops); in emif_debugfs_init()
184 emif->debugfs_root, emif, &emif_mr4_fops); in emif_debugfs_init()
192 debugfs_remove_recursive(emif->debugfs_root); in emif_debugfs_init()
197 static void __exit emif_debugfs_exit(struct emif_data *emif) in emif_debugfs_exit() argument
199 debugfs_remove_recursive(emif->debugfs_root); in emif_debugfs_exit()
200 emif->debugfs_root = NULL; in emif_debugfs_exit()
203 static inline int __init_or_module emif_debugfs_init(struct emif_data *emif) in emif_debugfs_init() argument
208 static inline void __exit emif_debugfs_exit(struct emif_data *emif) in emif_debugfs_exit() argument
228 static u32 get_emif_bus_width(struct emif_data *emif) in get_emif_bus_width() argument
231 void __iomem *base = emif->base; in get_emif_bus_width()
243 static u32 get_cl(struct emif_data *emif) in get_cl() argument
246 void __iomem *base = emif->base; in get_cl()
253 static void set_lpmode(struct emif_data *emif, u8 lpmode) in set_lpmode() argument
256 void __iomem *base = emif->base; in set_lpmode()
284 if ((emif->plat_data->ip_rev == EMIF_4D) && in set_lpmode()
301 struct emif_data *emif; in do_freq_update() local
326 list_for_each_entry(emif, &device_list, node) { in do_freq_update()
327 if (emif->lpmode == EMIF_LP_MODE_SELF_REFRESH) in do_freq_update()
328 set_lpmode(emif, EMIF_LP_MODE_DISABLE); in do_freq_update()
337 list_for_each_entry(emif, &device_list, node) { in do_freq_update()
338 if (emif->lpmode == EMIF_LP_MODE_SELF_REFRESH) in do_freq_update()
339 set_lpmode(emif, EMIF_LP_MODE_SELF_REFRESH); in do_freq_update()
377 static const struct lpddr2_timings *get_timings_table(struct emif_data *emif, in get_timings_table() argument
382 const struct lpddr2_timings *timings_arr = emif->plat_data->timings; in get_timings_table()
383 struct device *dev = emif->dev; in get_timings_table()
393 for (i = 0; i < emif->plat_data->timings_arr_size; i++) { in get_timings_table()
745 static u32 get_pwr_mgmt_ctrl(u32 freq, struct emif_data *emif, u32 ip_rev) in get_pwr_mgmt_ctrl() argument
755 struct emif_custom_configs *cust_cfgs = emif->plat_data->custom_configs; in get_pwr_mgmt_ctrl()
836 static void get_temperature_level(struct emif_data *emif) in get_temperature_level() argument
841 base = emif->base; in get_temperature_level()
849 if (emif->plat_data->device_info->cs1_used) { in get_temperature_level()
863 emif->temperature_level = temperature_level; in get_temperature_level()
870 static void setup_registers(struct emif_data *emif, struct emif_regs *regs) in setup_registers() argument
872 void __iomem *base = emif->base; in setup_registers()
880 if (emif->plat_data->ip_rev != EMIF_4D5) in setup_registers()
891 static void setup_volt_sensitive_regs(struct emif_data *emif, in setup_volt_sensitive_regs() argument
895 void __iomem *base = emif->base; in setup_volt_sensitive_regs()
919 static void setup_temperature_sensitive_regs(struct emif_data *emif, in setup_temperature_sensitive_regs() argument
923 void __iomem *base = emif->base; in setup_temperature_sensitive_regs()
926 type = emif->plat_data->device_info->type; in setup_temperature_sensitive_regs()
936 temperature = emif->temperature_level; in setup_temperature_sensitive_regs()
951 static irqreturn_t handle_temp_alert(void __iomem *base, struct emif_data *emif) in handle_temp_alert() argument
958 old_temp_level = emif->temperature_level; in handle_temp_alert()
959 get_temperature_level(emif); in handle_temp_alert()
961 if (unlikely(emif->temperature_level == old_temp_level)) { in handle_temp_alert()
963 } else if (!emif->curr_regs) { in handle_temp_alert()
964 dev_err(emif->dev, "temperature alert before registers are calculated, not de-rating timings\n"); in handle_temp_alert()
968 custom_configs = emif->plat_data->custom_configs; in handle_temp_alert()
976 if (emif->temperature_level >= SDRAM_TEMP_HIGH_DERATE_REFRESH) { in handle_temp_alert()
977 dev_err(emif->dev, in handle_temp_alert()
980 __func__, emif->temperature_level); in handle_temp_alert()
985 emif->temperature_level = SDRAM_TEMP_VERY_HIGH_SHUTDOWN; in handle_temp_alert()
991 if (emif->temperature_level < old_temp_level || in handle_temp_alert()
992 emif->temperature_level == SDRAM_TEMP_VERY_HIGH_SHUTDOWN) { in handle_temp_alert()
1001 setup_temperature_sensitive_regs(emif, emif->curr_regs); in handle_temp_alert()
1013 struct emif_data *emif = dev_id; in emif_interrupt_handler() local
1014 void __iomem *base = emif->base; in emif_interrupt_handler()
1015 struct device *dev = emif->dev; in emif_interrupt_handler()
1028 ret = handle_temp_alert(base, emif); in emif_interrupt_handler()
1033 if (emif->plat_data->hw_caps & EMIF_HW_CAPS_LL_INTERFACE) { in emif_interrupt_handler()
1048 struct emif_data *emif = dev_id; in emif_threaded_isr() local
1050 if (emif->temperature_level == SDRAM_TEMP_VERY_HIGH_SHUTDOWN) { in emif_threaded_isr()
1051 dev_emerg(emif->dev, "SDRAM temperature exceeds operating limit.. Needs shut down!!!\n"); in emif_threaded_isr()
1065 if (emif->curr_regs) { in emif_threaded_isr()
1066 setup_temperature_sensitive_regs(emif, emif->curr_regs); in emif_threaded_isr()
1069 dev_err(emif->dev, "temperature alert before registers are calculated, not de-rating timings\n"); in emif_threaded_isr()
1077 static void clear_all_interrupts(struct emif_data *emif) in clear_all_interrupts() argument
1079 void __iomem *base = emif->base; in clear_all_interrupts()
1083 if (emif->plat_data->hw_caps & EMIF_HW_CAPS_LL_INTERFACE) in clear_all_interrupts()
1088 static void disable_and_clear_all_interrupts(struct emif_data *emif) in disable_and_clear_all_interrupts() argument
1090 void __iomem *base = emif->base; in disable_and_clear_all_interrupts()
1095 if (emif->plat_data->hw_caps & EMIF_HW_CAPS_LL_INTERFACE) in disable_and_clear_all_interrupts()
1100 clear_all_interrupts(emif); in disable_and_clear_all_interrupts()
1103 static int __init_or_module setup_interrupts(struct emif_data *emif, u32 irq) in setup_interrupts() argument
1106 void __iomem *base = emif->base; in setup_interrupts()
1108 type = emif->plat_data->device_info->type; in setup_interrupts()
1110 clear_all_interrupts(emif); in setup_interrupts()
1119 if (emif->plat_data->hw_caps & EMIF_HW_CAPS_LL_INTERFACE) { in setup_interrupts()
1126 return devm_request_threaded_irq(emif->dev, irq, in setup_interrupts()
1129 0, dev_name(emif->dev), in setup_interrupts()
1130 emif); in setup_interrupts()
1134 static void __init_or_module emif_onetime_settings(struct emif_data *emif) in emif_onetime_settings() argument
1137 void __iomem *base = emif->base; in emif_onetime_settings()
1141 device_info = emif->plat_data->device_info; in emif_onetime_settings()
1149 pwr_mgmt_ctrl = get_pwr_mgmt_ctrl(1000000000, emif, in emif_onetime_settings()
1150 emif->plat_data->ip_rev); in emif_onetime_settings()
1151 emif->lpmode = (pwr_mgmt_ctrl & LP_MODE_MASK) >> LP_MODE_SHIFT; in emif_onetime_settings()
1160 get_temperature_level(emif); in emif_onetime_settings()
1161 if (emif->temperature_level == SDRAM_TEMP_VERY_HIGH_SHUTDOWN) in emif_onetime_settings()
1162 dev_emerg(emif->dev, "SDRAM temperature exceeds operating limit.. Needs shut down!!!\n"); in emif_onetime_settings()
1166 emif->plat_data->custom_configs, device_info->cs1_used, in emif_onetime_settings()
1167 device_info->io_width, get_emif_bus_width(emif)); in emif_onetime_settings()
1174 if (emif->plat_data->phy_type != EMIF_PHY_TYPE_INTELLIPHY) in emif_onetime_settings()
1199 static void get_default_timings(struct emif_data *emif) in get_default_timings() argument
1201 struct emif_platform_data *pd = emif->plat_data; in get_default_timings()
1206 dev_warn(emif->dev, "%s: using default timings\n", __func__); in get_default_timings()
1260 struct emif_data *emif) in of_get_custom_configs() argument
1270 cust_cfgs = devm_kzalloc(emif->dev, sizeof(*cust_cfgs), in of_get_custom_configs()
1300 if (!is_custom_config_valid(cust_cfgs, emif->dev)) { in of_get_custom_configs()
1301 devm_kfree(emif->dev, cust_cfgs); in of_get_custom_configs()
1305 emif->plat_data->custom_configs = cust_cfgs; in of_get_custom_configs()
1345 struct emif_data *emif = NULL; in of_get_memory_device_details() local
1354 emif = devm_kzalloc(dev, sizeof(struct emif_data), GFP_KERNEL); in of_get_memory_device_details()
1358 if (!emif || !pd || !dev_info) { in of_get_memory_device_details()
1364 emif->plat_data = pd; in of_get_memory_device_details()
1366 emif->dev = dev; in of_get_memory_device_details()
1367 emif->np_ddr = np_ddr; in of_get_memory_device_details()
1368 emif->temperature_level = SDRAM_TEMP_NOMINAL; in of_get_memory_device_details()
1371 emif->plat_data->ip_rev = EMIF_4D; in of_get_memory_device_details()
1373 emif->plat_data->ip_rev = EMIF_4D5; in of_get_memory_device_details()
1383 emif->dev)) { in of_get_memory_device_details()
1394 emif->duplicate = true; in of_get_memory_device_details()
1397 dev_warn(emif->dev, "%s: Non-symmetric DDR geometry\n", in of_get_memory_device_details()
1401 of_get_custom_configs(np_emif, emif); in of_get_memory_device_details()
1402 emif->plat_data->timings = of_get_ddr_timings(np_ddr, emif->dev, in of_get_memory_device_details()
1403 emif->plat_data->device_info->type, in of_get_memory_device_details()
1404 &emif->plat_data->timings_arr_size); in of_get_memory_device_details()
1406 emif->plat_data->min_tck = of_get_min_tck(np_ddr, emif->dev); in of_get_memory_device_details()
1412 return emif; in of_get_memory_device_details()
1428 struct emif_data *emif = NULL; in get_device_details() local
1445 emif = devm_kzalloc(dev, sizeof(*emif), GFP_KERNEL); in get_device_details()
1449 if (!emif || !pd || !dev_info) { in get_device_details()
1459 emif->plat_data = pd; in get_device_details()
1460 emif->dev = dev; in get_device_details()
1461 emif->temperature_level = SDRAM_TEMP_NOMINAL; in get_device_details()
1469 emif->duplicate = emif1 && (memcmp(dev_info, in get_device_details()
1473 if (emif->duplicate) { in get_device_details()
1478 dev_warn(emif->dev, "%s: Non-symmetric DDR geometry\n", in get_device_details()
1510 get_default_timings(emif); in get_device_details()
1513 get_default_timings(emif); in get_device_details()
1531 return emif; in get_device_details()
1539 struct emif_data *emif; in emif_probe() local
1544 emif = of_get_memory_device_details(pdev->dev.of_node, &pdev->dev); in emif_probe()
1546 emif = get_device_details(pdev); in emif_probe()
1548 if (!emif) { in emif_probe()
1553 list_add(&emif->node, &device_list); in emif_probe()
1554 emif->addressing = get_addressing_table(emif->plat_data->device_info); in emif_probe()
1557 emif->dev = &pdev->dev; in emif_probe()
1558 platform_set_drvdata(pdev, emif); in emif_probe()
1561 emif->base = devm_ioremap_resource(emif->dev, res); in emif_probe()
1562 if (IS_ERR(emif->base)) in emif_probe()
1567 dev_err(emif->dev, "%s: error getting IRQ resource - %d\n", in emif_probe()
1572 emif_onetime_settings(emif); in emif_probe()
1573 emif_debugfs_init(emif); in emif_probe()
1574 disable_and_clear_all_interrupts(emif); in emif_probe()
1575 setup_interrupts(emif, irq); in emif_probe()
1579 emif1 = emif; in emif_probe()
1590 __func__, emif->base, irq); in emif_probe()
1599 struct emif_data *emif = platform_get_drvdata(pdev); in emif_remove() local
1601 emif_debugfs_exit(emif); in emif_remove()
1608 struct emif_data *emif = platform_get_drvdata(pdev); in emif_shutdown() local
1610 disable_and_clear_all_interrupts(emif); in emif_shutdown()
1613 static int get_emif_reg_values(struct emif_data *emif, u32 freq, in get_emif_reg_values() argument
1626 dev = emif->dev; in get_emif_reg_values()
1631 emif_for_calc = emif->duplicate ? emif1 : emif; in get_emif_reg_values()
1659 cl = get_cl(emif); in get_emif_reg_values()
1724 static struct emif_regs *get_regs(struct emif_data *emif, u32 freq) in get_regs() argument
1731 dev = emif->dev; in get_regs()
1732 if (emif->curr_regs && emif->curr_regs->freq == freq) { in get_regs()
1734 return emif->curr_regs; in get_regs()
1737 if (emif->duplicate) in get_regs()
1740 regs_cache = emif->regs_cache; in get_regs()
1757 regs = devm_kzalloc(emif->dev, sizeof(*regs), GFP_ATOMIC); in get_regs()
1761 if (get_emif_reg_values(emif, freq, regs)) { in get_regs()
1762 devm_kfree(emif->dev, regs); in get_regs()
1778 devm_kfree(emif->dev, regs_cache[i]); in get_regs()
1786 static void do_volt_notify_handling(struct emif_data *emif, u32 volt_state) in do_volt_notify_handling() argument
1788 dev_dbg(emif->dev, "%s: voltage notification : %d", __func__, in do_volt_notify_handling()
1791 if (!emif->curr_regs) { in do_volt_notify_handling()
1792 dev_err(emif->dev, in do_volt_notify_handling()
1798 setup_volt_sensitive_regs(emif, emif->curr_regs, volt_state); in do_volt_notify_handling()
1809 struct emif_data *emif; in volt_notify_handling() local
1813 list_for_each_entry(emif, &device_list, node) in volt_notify_handling()
1814 do_volt_notify_handling(emif, volt_state); in volt_notify_handling()
1820 static void do_freq_pre_notify_handling(struct emif_data *emif, u32 new_freq) in do_freq_pre_notify_handling() argument
1824 regs = get_regs(emif, new_freq); in do_freq_pre_notify_handling()
1828 emif->curr_regs = regs; in do_freq_pre_notify_handling()
1836 dev_dbg(emif->dev, "%s: setting up shadow registers for %uHz", in do_freq_pre_notify_handling()
1838 setup_registers(emif, regs); in do_freq_pre_notify_handling()
1839 setup_temperature_sensitive_regs(emif, regs); in do_freq_pre_notify_handling()
1840 setup_volt_sensitive_regs(emif, regs, DDR_VOLTAGE_STABLE); in do_freq_pre_notify_handling()
1846 if (emif->lpmode == EMIF_LP_MODE_SELF_REFRESH) in do_freq_pre_notify_handling()
1847 set_lpmode(emif, EMIF_LP_MODE_DISABLE); in do_freq_pre_notify_handling()
1858 struct emif_data *emif; in freq_pre_notify_handling() local
1881 list_for_each_entry(emif, &device_list, node) in freq_pre_notify_handling()
1882 do_freq_pre_notify_handling(emif, new_freq); in freq_pre_notify_handling()
1885 static void do_freq_post_notify_handling(struct emif_data *emif) in do_freq_post_notify_handling() argument
1891 if (emif->lpmode == EMIF_LP_MODE_SELF_REFRESH) in do_freq_post_notify_handling()
1892 set_lpmode(emif, EMIF_LP_MODE_SELF_REFRESH); in do_freq_post_notify_handling()
1903 struct emif_data *emif; in freq_post_notify_handling() local
1905 list_for_each_entry(emif, &device_list, node) in freq_post_notify_handling()
1906 do_freq_post_notify_handling(emif); in freq_post_notify_handling()