* Author: Shyam Sundar S K <Shyam-sundar.S-k@amd.com>
  */
 
+#include <linux/debugfs.h>
 #include <linux/iopoll.h>
 #include <linux/module.h>
 #include <linux/pci.h>
 #define DELAY_MIN_US   2000
 #define DELAY_MAX_US   3000
 
+static int current_power_limits_show(struct seq_file *seq, void *unused)
+{
+       struct amd_pmf_dev *dev = seq->private;
+       struct amd_pmf_static_slider_granular table;
+       int mode, src = 0;
+
+       mode = amd_pmf_get_pprof_modes(dev);
+       src = amd_pmf_get_power_source();
+       amd_pmf_update_slider(dev, SLIDER_OP_GET, mode, &table);
+       seq_printf(seq, "spl:%u fppt:%u sppt:%u sppt_apu_only:%u stt_min:%u stt[APU]:%u stt[HS2]: %u\n",
+                  table.prop[src][mode].spl,
+                  table.prop[src][mode].fppt,
+                  table.prop[src][mode].sppt,
+                  table.prop[src][mode].sppt_apu_only,
+                  table.prop[src][mode].stt_min,
+                  table.prop[src][mode].stt_skin_temp[STT_TEMP_APU],
+                  table.prop[src][mode].stt_skin_temp[STT_TEMP_HS2]);
+       return 0;
+}
+DEFINE_SHOW_ATTRIBUTE(current_power_limits);
+
+static void amd_pmf_dbgfs_unregister(struct amd_pmf_dev *dev)
+{
+       debugfs_remove_recursive(dev->dbgfs_dir);
+}
+
+static void amd_pmf_dbgfs_register(struct amd_pmf_dev *dev)
+{
+       dev->dbgfs_dir = debugfs_create_dir("amd_pmf", NULL);
+       debugfs_create_file("current_power_limits", 0644, dev->dbgfs_dir, dev,
+                           ¤t_power_limits_fops);
+}
+
 int amd_pmf_get_power_source(void)
 {
        if (power_supply_is_system_supplied() > 0)
        apmf_acpi_init(dev);
        platform_set_drvdata(pdev, dev);
        amd_pmf_init_features(dev);
+       amd_pmf_dbgfs_register(dev);
 
        mutex_init(&dev->lock);
        dev_info(dev->dev, "registered PMF device successfully\n");
 
        mutex_destroy(&dev->lock);
        amd_pmf_deinit_features(dev);
+       amd_pmf_dbgfs_unregister(dev);
        kfree(dev->buf);
        return 0;
 }