Lines Matching refs:emif

74 static void do_emif_regdump_show(struct seq_file *s, struct emif_data *emif,  in do_emif_regdump_show()  argument
77 u32 type = emif->plat_data->device_info->type; in do_emif_regdump_show()
78 u32 ip_rev = emif->plat_data->ip_rev; in do_emif_regdump_show()
112 struct emif_data *emif = s->private; in emif_regdump_show() local
116 if (emif->duplicate) in emif_regdump_show()
119 regs_cache = emif->regs_cache; in emif_regdump_show()
122 do_emif_regdump_show(s, emif, regs_cache[i]); in emif_regdump_show()
133 struct emif_data *emif = s->private; in emif_mr4_show() local
135 seq_printf(s, "MR4=%d\n", emif->temperature_level); in emif_mr4_show()
141 static void emif_debugfs_init(struct emif_data *emif) in emif_debugfs_init() argument
144 emif->debugfs_root = debugfs_create_dir(dev_name(emif->dev), NULL); in emif_debugfs_init()
145 debugfs_create_file("regcache_dump", S_IRUGO, emif->debugfs_root, emif, in emif_debugfs_init()
147 debugfs_create_file("mr4", S_IRUGO, emif->debugfs_root, emif, in emif_debugfs_init()
152 static void 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()
166 static u32 get_emif_bus_width(struct emif_data *emif) in get_emif_bus_width() argument
169 void __iomem *base = emif->base; in get_emif_bus_width()
178 static void set_lpmode(struct emif_data *emif, u8 lpmode) in set_lpmode() argument
181 void __iomem *base = emif->base; in set_lpmode()
209 if ((emif->plat_data->ip_rev == EMIF_4D) && in set_lpmode()
225 struct emif_data *emif; in do_freq_update() local
250 list_for_each_entry(emif, &device_list, node) { in do_freq_update()
251 if (emif->lpmode == EMIF_LP_MODE_SELF_REFRESH) in do_freq_update()
252 set_lpmode(emif, EMIF_LP_MODE_DISABLE); in do_freq_update()
261 list_for_each_entry(emif, &device_list, node) { in do_freq_update()
262 if (emif->lpmode == EMIF_LP_MODE_SELF_REFRESH) in do_freq_update()
263 set_lpmode(emif, EMIF_LP_MODE_SELF_REFRESH); in do_freq_update()
361 static u32 get_pwr_mgmt_ctrl(u32 freq, struct emif_data *emif, u32 ip_rev) in get_pwr_mgmt_ctrl() argument
371 struct emif_custom_configs *cust_cfgs = emif->plat_data->custom_configs; in get_pwr_mgmt_ctrl()
452 static void get_temperature_level(struct emif_data *emif) in get_temperature_level() argument
457 base = emif->base; in get_temperature_level()
465 if (emif->plat_data->device_info->cs1_used) { in get_temperature_level()
479 emif->temperature_level = temperature_level; in get_temperature_level()
490 static void setup_temperature_sensitive_regs(struct emif_data *emif, in setup_temperature_sensitive_regs() argument
494 void __iomem *base = emif->base; in setup_temperature_sensitive_regs()
497 type = emif->plat_data->device_info->type; in setup_temperature_sensitive_regs()
507 temperature = emif->temperature_level; in setup_temperature_sensitive_regs()
522 static irqreturn_t handle_temp_alert(void __iomem *base, struct emif_data *emif) in handle_temp_alert() argument
529 old_temp_level = emif->temperature_level; in handle_temp_alert()
530 get_temperature_level(emif); in handle_temp_alert()
532 if (unlikely(emif->temperature_level == old_temp_level)) { in handle_temp_alert()
534 } else if (!emif->curr_regs) { in handle_temp_alert()
535 dev_err(emif->dev, "temperature alert before registers are calculated, not de-rating timings\n"); in handle_temp_alert()
539 custom_configs = emif->plat_data->custom_configs; in handle_temp_alert()
547 if (emif->temperature_level >= SDRAM_TEMP_HIGH_DERATE_REFRESH) { in handle_temp_alert()
548 dev_err(emif->dev, in handle_temp_alert()
550 __func__, emif->temperature_level); in handle_temp_alert()
555 emif->temperature_level = SDRAM_TEMP_VERY_HIGH_SHUTDOWN; in handle_temp_alert()
560 if (emif->temperature_level < old_temp_level || in handle_temp_alert()
561 emif->temperature_level == SDRAM_TEMP_VERY_HIGH_SHUTDOWN) { in handle_temp_alert()
570 setup_temperature_sensitive_regs(emif, emif->curr_regs); in handle_temp_alert()
581 struct emif_data *emif = dev_id; in emif_interrupt_handler() local
582 void __iomem *base = emif->base; in emif_interrupt_handler()
583 struct device *dev = emif->dev; in emif_interrupt_handler()
596 ret = handle_temp_alert(base, emif); in emif_interrupt_handler()
601 if (emif->plat_data->hw_caps & EMIF_HW_CAPS_LL_INTERFACE) { in emif_interrupt_handler()
616 struct emif_data *emif = dev_id; in emif_threaded_isr() local
619 if (emif->temperature_level == SDRAM_TEMP_VERY_HIGH_SHUTDOWN) { in emif_threaded_isr()
620 dev_emerg(emif->dev, "SDRAM temperature exceeds operating limit.. Needs shut down!!!\n"); in emif_threaded_isr()
634 if (emif->curr_regs) { in emif_threaded_isr()
635 setup_temperature_sensitive_regs(emif, emif->curr_regs); in emif_threaded_isr()
638 dev_err(emif->dev, "temperature alert before registers are calculated, not de-rating timings\n"); in emif_threaded_isr()
646 static void clear_all_interrupts(struct emif_data *emif) in clear_all_interrupts() argument
648 void __iomem *base = emif->base; in clear_all_interrupts()
652 if (emif->plat_data->hw_caps & EMIF_HW_CAPS_LL_INTERFACE) in clear_all_interrupts()
657 static void disable_and_clear_all_interrupts(struct emif_data *emif) in disable_and_clear_all_interrupts() argument
659 void __iomem *base = emif->base; in disable_and_clear_all_interrupts()
664 if (emif->plat_data->hw_caps & EMIF_HW_CAPS_LL_INTERFACE) in disable_and_clear_all_interrupts()
669 clear_all_interrupts(emif); in disable_and_clear_all_interrupts()
672 static int setup_interrupts(struct emif_data *emif, u32 irq) in setup_interrupts() argument
675 void __iomem *base = emif->base; in setup_interrupts()
677 type = emif->plat_data->device_info->type; in setup_interrupts()
679 clear_all_interrupts(emif); in setup_interrupts()
688 if (emif->plat_data->hw_caps & EMIF_HW_CAPS_LL_INTERFACE) { in setup_interrupts()
695 return devm_request_threaded_irq(emif->dev, irq, in setup_interrupts()
698 0, dev_name(emif->dev), in setup_interrupts()
699 emif); in setup_interrupts()
703 static void emif_onetime_settings(struct emif_data *emif) in emif_onetime_settings() argument
706 void __iomem *base = emif->base; in emif_onetime_settings()
710 device_info = emif->plat_data->device_info; in emif_onetime_settings()
718 pwr_mgmt_ctrl = get_pwr_mgmt_ctrl(1000000000, emif, in emif_onetime_settings()
719 emif->plat_data->ip_rev); in emif_onetime_settings()
720 emif->lpmode = (pwr_mgmt_ctrl & LP_MODE_MASK) >> LP_MODE_SHIFT; in emif_onetime_settings()
729 get_temperature_level(emif); in emif_onetime_settings()
730 if (emif->temperature_level == SDRAM_TEMP_VERY_HIGH_SHUTDOWN) in emif_onetime_settings()
731 dev_emerg(emif->dev, "SDRAM temperature exceeds operating limit.. Needs shut down!!!\n"); in emif_onetime_settings()
735 emif->plat_data->custom_configs, device_info->cs1_used, in emif_onetime_settings()
736 device_info->io_width, get_emif_bus_width(emif)); in emif_onetime_settings()
743 if (emif->plat_data->phy_type != EMIF_PHY_TYPE_INTELLIPHY) in emif_onetime_settings()
768 static void get_default_timings(struct emif_data *emif) in get_default_timings() argument
770 struct emif_platform_data *pd = emif->plat_data; in get_default_timings()
775 dev_warn(emif->dev, "%s: using default timings\n", __func__); in get_default_timings()
828 struct emif_data *emif) in of_get_custom_configs() argument
838 cust_cfgs = devm_kzalloc(emif->dev, sizeof(*cust_cfgs), in of_get_custom_configs()
868 if (!is_custom_config_valid(cust_cfgs, emif->dev)) { in of_get_custom_configs()
869 devm_kfree(emif->dev, cust_cfgs); in of_get_custom_configs()
873 emif->plat_data->custom_configs = cust_cfgs; in of_get_custom_configs()
909 struct emif_data *emif = NULL; in of_get_memory_device_details() local
917 emif = devm_kzalloc(dev, sizeof(struct emif_data), GFP_KERNEL); in of_get_memory_device_details()
921 if (!emif || !pd || !dev_info) { in of_get_memory_device_details()
927 emif->plat_data = pd; in of_get_memory_device_details()
929 emif->dev = dev; in of_get_memory_device_details()
930 emif->np_ddr = np_ddr; in of_get_memory_device_details()
931 emif->temperature_level = SDRAM_TEMP_NOMINAL; in of_get_memory_device_details()
934 emif->plat_data->ip_rev = EMIF_4D; in of_get_memory_device_details()
936 emif->plat_data->ip_rev = EMIF_4D5; in of_get_memory_device_details()
946 emif->dev)) { in of_get_memory_device_details()
957 emif->duplicate = true; in of_get_memory_device_details()
960 dev_warn(emif->dev, "%s: Non-symmetric DDR geometry\n", in of_get_memory_device_details()
964 of_get_custom_configs(np_emif, emif); in of_get_memory_device_details()
965 emif->plat_data->timings = of_get_ddr_timings(np_ddr, emif->dev, in of_get_memory_device_details()
966 emif->plat_data->device_info->type, in of_get_memory_device_details()
967 &emif->plat_data->timings_arr_size); in of_get_memory_device_details()
969 emif->plat_data->min_tck = of_get_min_tck(np_ddr, emif->dev); in of_get_memory_device_details()
975 return emif; in of_get_memory_device_details()
982 struct emif_data *emif = NULL; in get_device_details() local
999 emif = devm_kzalloc(dev, sizeof(*emif), GFP_KERNEL); in get_device_details()
1003 if (!emif || !temp || !dev_info) in get_device_details()
1011 emif->plat_data = pd; in get_device_details()
1012 emif->dev = dev; in get_device_details()
1013 emif->temperature_level = SDRAM_TEMP_NOMINAL; in get_device_details()
1021 emif->duplicate = emif1 && (memcmp(dev_info, in get_device_details()
1025 if (emif->duplicate) { in get_device_details()
1030 dev_warn(emif->dev, "%s: Non-symmetric DDR geometry\n", in get_device_details()
1057 get_default_timings(emif); in get_device_details()
1060 get_default_timings(emif); in get_device_details()
1076 return emif; in get_device_details()
1084 struct emif_data *emif; in emif_probe() local
1088 emif = of_get_memory_device_details(pdev->dev.of_node, &pdev->dev); in emif_probe()
1090 emif = get_device_details(pdev); in emif_probe()
1092 if (!emif) { in emif_probe()
1097 list_add(&emif->node, &device_list); in emif_probe()
1100 emif->dev = &pdev->dev; in emif_probe()
1101 platform_set_drvdata(pdev, emif); in emif_probe()
1103 emif->base = devm_platform_ioremap_resource(pdev, 0); in emif_probe()
1104 if (IS_ERR(emif->base)) in emif_probe()
1111 emif_onetime_settings(emif); in emif_probe()
1112 emif_debugfs_init(emif); in emif_probe()
1113 disable_and_clear_all_interrupts(emif); in emif_probe()
1114 ret = setup_interrupts(emif, irq); in emif_probe()
1120 emif1 = emif; in emif_probe()
1130 __func__, emif->base, irq); in emif_probe()
1139 struct emif_data *emif = platform_get_drvdata(pdev); in emif_remove() local
1141 emif_debugfs_exit(emif); in emif_remove()
1146 struct emif_data *emif = platform_get_drvdata(pdev); in emif_shutdown() local
1148 disable_and_clear_all_interrupts(emif); in emif_shutdown()