Lines Matching refs:emif

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