Lines Matching refs:dev

86 	struct amd_pmf_dev *dev = seq->private;  in current_power_limits_show()  local
90 mode = amd_pmf_get_pprof_modes(dev); in current_power_limits_show()
95 amd_pmf_update_slider(dev, SLIDER_OP_GET, mode, &table); in current_power_limits_show()
108 static void amd_pmf_dbgfs_unregister(struct amd_pmf_dev *dev) in amd_pmf_dbgfs_unregister() argument
110 debugfs_remove_recursive(dev->dbgfs_dir); in amd_pmf_dbgfs_unregister()
113 static void amd_pmf_dbgfs_register(struct amd_pmf_dev *dev) in amd_pmf_dbgfs_register() argument
115 dev->dbgfs_dir = debugfs_create_dir("amd_pmf", NULL); in amd_pmf_dbgfs_register()
116 debugfs_create_file("current_power_limits", 0644, dev->dbgfs_dir, dev, in amd_pmf_dbgfs_register()
130 struct amd_pmf_dev *dev = container_of(work, struct amd_pmf_dev, work_buffer.work); in amd_pmf_get_metrics() local
134 mutex_lock(&dev->update_mutex); in amd_pmf_get_metrics()
136 memset(dev->buf, 0, sizeof(dev->m_table)); in amd_pmf_get_metrics()
137 amd_pmf_send_cmd(dev, SET_TRANSFER_TABLE, 0, 7, NULL); in amd_pmf_get_metrics()
138 memcpy(&dev->m_table, dev->buf, sizeof(dev->m_table)); in amd_pmf_get_metrics()
140 time_elapsed_ms = ktime_to_ms(ktime_get()) - dev->start_time; in amd_pmf_get_metrics()
142 socket_power = dev->m_table.apu_power + dev->m_table.dgpu_power; in amd_pmf_get_metrics()
144 if (dev->amt_enabled) { in amd_pmf_get_metrics()
146 amd_pmf_trans_automode(dev, socket_power, time_elapsed_ms); in amd_pmf_get_metrics()
149 if (dev->cnqf_enabled) { in amd_pmf_get_metrics()
151 amd_pmf_trans_cnqf(dev, socket_power, time_elapsed_ms); in amd_pmf_get_metrics()
154 dev->start_time = ktime_to_ms(ktime_get()); in amd_pmf_get_metrics()
155 schedule_delayed_work(&dev->work_buffer, msecs_to_jiffies(metrics_table_loop_ms)); in amd_pmf_get_metrics()
156 mutex_unlock(&dev->update_mutex); in amd_pmf_get_metrics()
159 static inline u32 amd_pmf_reg_read(struct amd_pmf_dev *dev, int reg_offset) in amd_pmf_reg_read() argument
161 return ioread32(dev->regbase + reg_offset); in amd_pmf_reg_read()
164 static inline void amd_pmf_reg_write(struct amd_pmf_dev *dev, int reg_offset, u32 val) in amd_pmf_reg_write() argument
166 iowrite32(val, dev->regbase + reg_offset); in amd_pmf_reg_write()
169 static void __maybe_unused amd_pmf_dump_registers(struct amd_pmf_dev *dev) in amd_pmf_dump_registers() argument
173 value = amd_pmf_reg_read(dev, AMD_PMF_REGISTER_RESPONSE); in amd_pmf_dump_registers()
174 dev_dbg(dev->dev, "AMD_PMF_REGISTER_RESPONSE:%x\n", value); in amd_pmf_dump_registers()
176 value = amd_pmf_reg_read(dev, AMD_PMF_REGISTER_ARGUMENT); in amd_pmf_dump_registers()
177 dev_dbg(dev->dev, "AMD_PMF_REGISTER_ARGUMENT:%d\n", value); in amd_pmf_dump_registers()
179 value = amd_pmf_reg_read(dev, AMD_PMF_REGISTER_MESSAGE); in amd_pmf_dump_registers()
180 dev_dbg(dev->dev, "AMD_PMF_REGISTER_MESSAGE:%x\n", value); in amd_pmf_dump_registers()
183 int amd_pmf_send_cmd(struct amd_pmf_dev *dev, u8 message, bool get, u32 arg, u32 *data) in amd_pmf_send_cmd() argument
188 mutex_lock(&dev->lock); in amd_pmf_send_cmd()
191 rc = readx_poll_timeout(ioread32, dev->regbase + AMD_PMF_REGISTER_RESPONSE, in amd_pmf_send_cmd()
195 dev_err(dev->dev, "failed to talk to SMU\n"); in amd_pmf_send_cmd()
200 amd_pmf_reg_write(dev, AMD_PMF_REGISTER_RESPONSE, 0); in amd_pmf_send_cmd()
203 amd_pmf_reg_write(dev, AMD_PMF_REGISTER_ARGUMENT, arg); in amd_pmf_send_cmd()
206 amd_pmf_reg_write(dev, AMD_PMF_REGISTER_MESSAGE, message); in amd_pmf_send_cmd()
209 rc = readx_poll_timeout(ioread32, dev->regbase + AMD_PMF_REGISTER_RESPONSE, in amd_pmf_send_cmd()
213 dev_err(dev->dev, "SMU response timed out\n"); in amd_pmf_send_cmd()
222 *data = amd_pmf_reg_read(dev, AMD_PMF_REGISTER_ARGUMENT); in amd_pmf_send_cmd()
226 dev_err(dev->dev, "SMU not ready. err: 0x%x\n", val); in amd_pmf_send_cmd()
230 dev_err(dev->dev, "SMU cmd unknown. err: 0x%x\n", val); in amd_pmf_send_cmd()
236 dev_err(dev->dev, "SMU cmd failed. err: 0x%x\n", val); in amd_pmf_send_cmd()
242 mutex_unlock(&dev->lock); in amd_pmf_send_cmd()
243 amd_pmf_dump_registers(dev); in amd_pmf_send_cmd()
254 static void amd_pmf_set_dram_addr(struct amd_pmf_dev *dev) in amd_pmf_set_dram_addr() argument
259 phys_addr = virt_to_phys(dev->buf); in amd_pmf_set_dram_addr()
263 amd_pmf_send_cmd(dev, SET_DRAM_ADDR_HIGH, 0, hi, NULL); in amd_pmf_set_dram_addr()
264 amd_pmf_send_cmd(dev, SET_DRAM_ADDR_LOW, 0, low, NULL); in amd_pmf_set_dram_addr()
267 int amd_pmf_init_metrics_table(struct amd_pmf_dev *dev) in amd_pmf_init_metrics_table() argument
270 dev->buf = kzalloc(sizeof(dev->m_table), GFP_KERNEL); in amd_pmf_init_metrics_table()
271 if (!dev->buf) in amd_pmf_init_metrics_table()
274 INIT_DELAYED_WORK(&dev->work_buffer, amd_pmf_get_metrics); in amd_pmf_init_metrics_table()
276 amd_pmf_set_dram_addr(dev); in amd_pmf_init_metrics_table()
282 schedule_delayed_work(&dev->work_buffer, msecs_to_jiffies(metrics_table_loop_ms * 3)); in amd_pmf_init_metrics_table()
287 static int amd_pmf_resume_handler(struct device *dev) in amd_pmf_resume_handler() argument
289 struct amd_pmf_dev *pdev = dev_get_drvdata(dev); in amd_pmf_resume_handler()
299 static void amd_pmf_init_features(struct amd_pmf_dev *dev) in amd_pmf_init_features() argument
304 if (is_apmf_func_supported(dev, APMF_FUNC_STATIC_SLIDER_GRANULAR) || in amd_pmf_init_features()
305 is_apmf_func_supported(dev, APMF_FUNC_OS_POWER_SLIDER_UPDATE)) { in amd_pmf_init_features()
306 amd_pmf_init_sps(dev); in amd_pmf_init_features()
307 dev->pwr_src_notifier.notifier_call = amd_pmf_pwr_src_notify_call; in amd_pmf_init_features()
308 power_supply_reg_notifier(&dev->pwr_src_notifier); in amd_pmf_init_features()
309 dev_dbg(dev->dev, "SPS enabled and Platform Profiles registered\n"); in amd_pmf_init_features()
313 if (is_apmf_func_supported(dev, APMF_FUNC_AUTO_MODE)) { in amd_pmf_init_features()
314 amd_pmf_init_auto_mode(dev); in amd_pmf_init_features()
315 dev_dbg(dev->dev, "Auto Mode Init done\n"); in amd_pmf_init_features()
316 } else if (is_apmf_func_supported(dev, APMF_FUNC_DYN_SLIDER_AC) || in amd_pmf_init_features()
317 is_apmf_func_supported(dev, APMF_FUNC_DYN_SLIDER_DC)) { in amd_pmf_init_features()
319 ret = amd_pmf_init_cnqf(dev); in amd_pmf_init_features()
321 dev_warn(dev->dev, "CnQF Init failed\n"); in amd_pmf_init_features()
325 static void amd_pmf_deinit_features(struct amd_pmf_dev *dev) in amd_pmf_deinit_features() argument
327 if (is_apmf_func_supported(dev, APMF_FUNC_STATIC_SLIDER_GRANULAR) || in amd_pmf_deinit_features()
328 is_apmf_func_supported(dev, APMF_FUNC_OS_POWER_SLIDER_UPDATE)) { in amd_pmf_deinit_features()
329 power_supply_unreg_notifier(&dev->pwr_src_notifier); in amd_pmf_deinit_features()
330 amd_pmf_deinit_sps(dev); in amd_pmf_deinit_features()
333 if (is_apmf_func_supported(dev, APMF_FUNC_AUTO_MODE)) { in amd_pmf_deinit_features()
334 amd_pmf_deinit_auto_mode(dev); in amd_pmf_deinit_features()
335 } else if (is_apmf_func_supported(dev, APMF_FUNC_DYN_SLIDER_AC) || in amd_pmf_deinit_features()
336 is_apmf_func_supported(dev, APMF_FUNC_DYN_SLIDER_DC)) { in amd_pmf_deinit_features()
337 amd_pmf_deinit_cnqf(dev); in amd_pmf_deinit_features()
352 struct amd_pmf_dev *dev; in amd_pmf_probe() local
360 id = acpi_match_device(amd_pmf_acpi_ids, &pdev->dev); in amd_pmf_probe()
367 dev = devm_kzalloc(&pdev->dev, sizeof(*dev), GFP_KERNEL); in amd_pmf_probe()
368 if (!dev) in amd_pmf_probe()
371 dev->dev = &pdev->dev; in amd_pmf_probe()
379 dev->cpu_id = rdev->device; in amd_pmf_probe()
383 dev_err(dev->dev, "error in reading from 0x%x\n", AMD_PMF_BASE_ADDR_LO); in amd_pmf_probe()
392 dev_err(dev->dev, "error in reading from 0x%x\n", AMD_PMF_BASE_ADDR_HI); in amd_pmf_probe()
401 dev->regbase = devm_ioremap(dev->dev, base_addr + AMD_PMF_BASE_ADDR_OFFSET, in amd_pmf_probe()
403 if (!dev->regbase) in amd_pmf_probe()
406 mutex_init(&dev->lock); in amd_pmf_probe()
407 mutex_init(&dev->update_mutex); in amd_pmf_probe()
409 apmf_acpi_init(dev); in amd_pmf_probe()
410 platform_set_drvdata(pdev, dev); in amd_pmf_probe()
411 amd_pmf_init_features(dev); in amd_pmf_probe()
412 apmf_install_handler(dev); in amd_pmf_probe()
413 amd_pmf_dbgfs_register(dev); in amd_pmf_probe()
415 dev_info(dev->dev, "registered PMF device successfully\n"); in amd_pmf_probe()
422 struct amd_pmf_dev *dev = platform_get_drvdata(pdev); in amd_pmf_remove() local
424 amd_pmf_deinit_features(dev); in amd_pmf_remove()
425 apmf_acpi_deinit(dev); in amd_pmf_remove()
426 amd_pmf_dbgfs_unregister(dev); in amd_pmf_remove()
427 mutex_destroy(&dev->lock); in amd_pmf_remove()
428 mutex_destroy(&dev->update_mutex); in amd_pmf_remove()
429 kfree(dev->buf); in amd_pmf_remove()