Lines Matching refs:emif

76 static void do_emif_regdump_show(struct seq_file *s, struct emif_data *emif,  in do_emif_regdump_show()  argument
79 u32 type = emif->plat_data->device_info->type; in do_emif_regdump_show()
80 u32 ip_rev = emif->plat_data->ip_rev; in do_emif_regdump_show()
114 struct emif_data *emif = s->private; in emif_regdump_show() local
118 if (emif->duplicate) in emif_regdump_show()
121 regs_cache = emif->regs_cache; in emif_regdump_show()
124 do_emif_regdump_show(s, emif, regs_cache[i]); in emif_regdump_show()
135 struct emif_data *emif = s->private; in emif_mr4_show() local
137 seq_printf(s, "MR4=%d\n", emif->temperature_level); in emif_mr4_show()
143 static int __init_or_module emif_debugfs_init(struct emif_data *emif) in emif_debugfs_init() argument
145 emif->debugfs_root = debugfs_create_dir(dev_name(emif->dev), NULL); in emif_debugfs_init()
146 debugfs_create_file("regcache_dump", S_IRUGO, emif->debugfs_root, emif, in emif_debugfs_init()
148 debugfs_create_file("mr4", S_IRUGO, emif->debugfs_root, emif, in emif_debugfs_init()
153 static void __exit emif_debugfs_exit(struct emif_data *emif) in emif_debugfs_exit() argument
155 debugfs_remove_recursive(emif->debugfs_root); in emif_debugfs_exit()
156 emif->debugfs_root = NULL; in emif_debugfs_exit()
159 static inline int __init_or_module emif_debugfs_init(struct emif_data *emif) in emif_debugfs_init() argument
164 static inline void __exit emif_debugfs_exit(struct emif_data *emif) in emif_debugfs_exit() argument
175 static u32 get_emif_bus_width(struct emif_data *emif) in get_emif_bus_width() argument
178 void __iomem *base = emif->base; in get_emif_bus_width()
187 static void set_lpmode(struct emif_data *emif, u8 lpmode) in set_lpmode() argument
190 void __iomem *base = emif->base; in set_lpmode()
218 if ((emif->plat_data->ip_rev == EMIF_4D) && in set_lpmode()
234 struct emif_data *emif; in do_freq_update() local
259 list_for_each_entry(emif, &device_list, node) { in do_freq_update()
260 if (emif->lpmode == EMIF_LP_MODE_SELF_REFRESH) in do_freq_update()
261 set_lpmode(emif, EMIF_LP_MODE_DISABLE); in do_freq_update()
270 list_for_each_entry(emif, &device_list, node) { in do_freq_update()
271 if (emif->lpmode == EMIF_LP_MODE_SELF_REFRESH) in do_freq_update()
272 set_lpmode(emif, EMIF_LP_MODE_SELF_REFRESH); in do_freq_update()
370 static u32 get_pwr_mgmt_ctrl(u32 freq, struct emif_data *emif, u32 ip_rev) in get_pwr_mgmt_ctrl() argument
380 struct emif_custom_configs *cust_cfgs = emif->plat_data->custom_configs; in get_pwr_mgmt_ctrl()
461 static void get_temperature_level(struct emif_data *emif) in get_temperature_level() argument
466 base = emif->base; in get_temperature_level()
474 if (emif->plat_data->device_info->cs1_used) { in get_temperature_level()
488 emif->temperature_level = temperature_level; in get_temperature_level()
499 static void setup_temperature_sensitive_regs(struct emif_data *emif, in setup_temperature_sensitive_regs() argument
503 void __iomem *base = emif->base; in setup_temperature_sensitive_regs()
506 type = emif->plat_data->device_info->type; in setup_temperature_sensitive_regs()
516 temperature = emif->temperature_level; in setup_temperature_sensitive_regs()
531 static irqreturn_t handle_temp_alert(void __iomem *base, struct emif_data *emif) in handle_temp_alert() argument
538 old_temp_level = emif->temperature_level; in handle_temp_alert()
539 get_temperature_level(emif); in handle_temp_alert()
541 if (unlikely(emif->temperature_level == old_temp_level)) { in handle_temp_alert()
543 } else if (!emif->curr_regs) { in handle_temp_alert()
544 dev_err(emif->dev, "temperature alert before registers are calculated, not de-rating timings\n"); in handle_temp_alert()
548 custom_configs = emif->plat_data->custom_configs; in handle_temp_alert()
556 if (emif->temperature_level >= SDRAM_TEMP_HIGH_DERATE_REFRESH) { in handle_temp_alert()
557 dev_err(emif->dev, in handle_temp_alert()
559 __func__, emif->temperature_level); in handle_temp_alert()
564 emif->temperature_level = SDRAM_TEMP_VERY_HIGH_SHUTDOWN; in handle_temp_alert()
570 if (emif->temperature_level < old_temp_level || in handle_temp_alert()
571 emif->temperature_level == SDRAM_TEMP_VERY_HIGH_SHUTDOWN) { in handle_temp_alert()
580 setup_temperature_sensitive_regs(emif, emif->curr_regs); in handle_temp_alert()
592 struct emif_data *emif = dev_id; in emif_interrupt_handler() local
593 void __iomem *base = emif->base; in emif_interrupt_handler()
594 struct device *dev = emif->dev; in emif_interrupt_handler()
607 ret = handle_temp_alert(base, emif); in emif_interrupt_handler()
612 if (emif->plat_data->hw_caps & EMIF_HW_CAPS_LL_INTERFACE) { in emif_interrupt_handler()
627 struct emif_data *emif = dev_id; in emif_threaded_isr() local
629 if (emif->temperature_level == SDRAM_TEMP_VERY_HIGH_SHUTDOWN) { in emif_threaded_isr()
630 dev_emerg(emif->dev, "SDRAM temperature exceeds operating limit.. Needs shut down!!!\n"); in emif_threaded_isr()
644 if (emif->curr_regs) { in emif_threaded_isr()
645 setup_temperature_sensitive_regs(emif, emif->curr_regs); in emif_threaded_isr()
648 dev_err(emif->dev, "temperature alert before registers are calculated, not de-rating timings\n"); in emif_threaded_isr()
656 static void clear_all_interrupts(struct emif_data *emif) in clear_all_interrupts() argument
658 void __iomem *base = emif->base; in clear_all_interrupts()
662 if (emif->plat_data->hw_caps & EMIF_HW_CAPS_LL_INTERFACE) in clear_all_interrupts()
667 static void disable_and_clear_all_interrupts(struct emif_data *emif) in disable_and_clear_all_interrupts() argument
669 void __iomem *base = emif->base; in disable_and_clear_all_interrupts()
674 if (emif->plat_data->hw_caps & EMIF_HW_CAPS_LL_INTERFACE) in disable_and_clear_all_interrupts()
679 clear_all_interrupts(emif); in disable_and_clear_all_interrupts()
682 static int __init_or_module setup_interrupts(struct emif_data *emif, u32 irq) in setup_interrupts() argument
685 void __iomem *base = emif->base; in setup_interrupts()
687 type = emif->plat_data->device_info->type; in setup_interrupts()
689 clear_all_interrupts(emif); in setup_interrupts()
698 if (emif->plat_data->hw_caps & EMIF_HW_CAPS_LL_INTERFACE) { in setup_interrupts()
705 return devm_request_threaded_irq(emif->dev, irq, in setup_interrupts()
708 0, dev_name(emif->dev), in setup_interrupts()
709 emif); in setup_interrupts()
713 static void __init_or_module emif_onetime_settings(struct emif_data *emif) in emif_onetime_settings() argument
716 void __iomem *base = emif->base; in emif_onetime_settings()
720 device_info = emif->plat_data->device_info; in emif_onetime_settings()
728 pwr_mgmt_ctrl = get_pwr_mgmt_ctrl(1000000000, emif, in emif_onetime_settings()
729 emif->plat_data->ip_rev); in emif_onetime_settings()
730 emif->lpmode = (pwr_mgmt_ctrl & LP_MODE_MASK) >> LP_MODE_SHIFT; in emif_onetime_settings()
739 get_temperature_level(emif); in emif_onetime_settings()
740 if (emif->temperature_level == SDRAM_TEMP_VERY_HIGH_SHUTDOWN) in emif_onetime_settings()
741 dev_emerg(emif->dev, "SDRAM temperature exceeds operating limit.. Needs shut down!!!\n"); in emif_onetime_settings()
745 emif->plat_data->custom_configs, device_info->cs1_used, in emif_onetime_settings()
746 device_info->io_width, get_emif_bus_width(emif)); in emif_onetime_settings()
753 if (emif->plat_data->phy_type != EMIF_PHY_TYPE_INTELLIPHY) in emif_onetime_settings()
778 static void get_default_timings(struct emif_data *emif) in get_default_timings() argument
780 struct emif_platform_data *pd = emif->plat_data; in get_default_timings()
785 dev_warn(emif->dev, "%s: using default timings\n", __func__); in get_default_timings()
839 struct emif_data *emif) in of_get_custom_configs() argument
849 cust_cfgs = devm_kzalloc(emif->dev, sizeof(*cust_cfgs), in of_get_custom_configs()
879 if (!is_custom_config_valid(cust_cfgs, emif->dev)) { in of_get_custom_configs()
880 devm_kfree(emif->dev, cust_cfgs); in of_get_custom_configs()
884 emif->plat_data->custom_configs = cust_cfgs; in of_get_custom_configs()
924 struct emif_data *emif = NULL; in of_get_memory_device_details() local
933 emif = devm_kzalloc(dev, sizeof(struct emif_data), GFP_KERNEL); in of_get_memory_device_details()
937 if (!emif || !pd || !dev_info) { in of_get_memory_device_details()
943 emif->plat_data = pd; in of_get_memory_device_details()
945 emif->dev = dev; in of_get_memory_device_details()
946 emif->np_ddr = np_ddr; in of_get_memory_device_details()
947 emif->temperature_level = SDRAM_TEMP_NOMINAL; in of_get_memory_device_details()
950 emif->plat_data->ip_rev = EMIF_4D; in of_get_memory_device_details()
952 emif->plat_data->ip_rev = EMIF_4D5; in of_get_memory_device_details()
962 emif->dev)) { in of_get_memory_device_details()
973 emif->duplicate = true; in of_get_memory_device_details()
976 dev_warn(emif->dev, "%s: Non-symmetric DDR geometry\n", in of_get_memory_device_details()
980 of_get_custom_configs(np_emif, emif); in of_get_memory_device_details()
981 emif->plat_data->timings = of_get_ddr_timings(np_ddr, emif->dev, in of_get_memory_device_details()
982 emif->plat_data->device_info->type, in of_get_memory_device_details()
983 &emif->plat_data->timings_arr_size); in of_get_memory_device_details()
985 emif->plat_data->min_tck = of_get_min_tck(np_ddr, emif->dev); in of_get_memory_device_details()
991 return emif; in of_get_memory_device_details()
1007 struct emif_data *emif = NULL; in get_device_details() local
1024 emif = devm_kzalloc(dev, sizeof(*emif), GFP_KERNEL); in get_device_details()
1028 if (!emif || !temp || !dev_info) in get_device_details()
1036 emif->plat_data = pd; in get_device_details()
1037 emif->dev = dev; in get_device_details()
1038 emif->temperature_level = SDRAM_TEMP_NOMINAL; in get_device_details()
1046 emif->duplicate = emif1 && (memcmp(dev_info, in get_device_details()
1050 if (emif->duplicate) { in get_device_details()
1055 dev_warn(emif->dev, "%s: Non-symmetric DDR geometry\n", in get_device_details()
1082 get_default_timings(emif); in get_device_details()
1085 get_default_timings(emif); in get_device_details()
1101 return emif; in get_device_details()
1109 struct emif_data *emif; in emif_probe() local
1113 emif = of_get_memory_device_details(pdev->dev.of_node, &pdev->dev); in emif_probe()
1115 emif = get_device_details(pdev); in emif_probe()
1117 if (!emif) { in emif_probe()
1122 list_add(&emif->node, &device_list); in emif_probe()
1125 emif->dev = &pdev->dev; in emif_probe()
1126 platform_set_drvdata(pdev, emif); in emif_probe()
1128 emif->base = devm_platform_ioremap_resource(pdev, 0); in emif_probe()
1129 if (IS_ERR(emif->base)) in emif_probe()
1136 emif_onetime_settings(emif); in emif_probe()
1137 emif_debugfs_init(emif); in emif_probe()
1138 disable_and_clear_all_interrupts(emif); in emif_probe()
1139 ret = setup_interrupts(emif, irq); in emif_probe()
1145 emif1 = emif; in emif_probe()
1155 __func__, emif->base, irq); in emif_probe()
1164 struct emif_data *emif = platform_get_drvdata(pdev); in emif_remove() local
1166 emif_debugfs_exit(emif); in emif_remove()
1173 struct emif_data *emif = platform_get_drvdata(pdev); in emif_shutdown() local
1175 disable_and_clear_all_interrupts(emif); in emif_shutdown()