Lines Matching refs:debug_info
68 struct cros_ec_debugfs *debug_info = in cros_ec_console_log_work() local
72 struct cros_ec_dev *ec = debug_info->ec; in cros_ec_console_log_work()
73 struct circ_buf *cb = &debug_info->log_buffer; in cros_ec_console_log_work()
79 (struct ec_params_console_read_v1 *)debug_info->read_msg->data; in cros_ec_console_log_work()
80 uint8_t *ec_buffer = (uint8_t *)debug_info->read_msg->data; in cros_ec_console_log_work()
96 mutex_lock(&debug_info->log_mutex); in cros_ec_console_log_work()
108 ret = cros_ec_cmd_xfer(ec->ec_dev, debug_info->read_msg); in cros_ec_console_log_work()
113 if (debug_info->read_msg->result != EC_RES_SUCCESS) { in cros_ec_console_log_work()
131 wake_up(&debug_info->log_wq); in cros_ec_console_log_work()
134 mutex_unlock(&debug_info->log_mutex); in cros_ec_console_log_work()
137 schedule_delayed_work(&debug_info->log_poll_work, in cros_ec_console_log_work()
151 struct cros_ec_debugfs *debug_info = file->private_data; in cros_ec_console_log_read() local
152 struct circ_buf *cb = &debug_info->log_buffer; in cros_ec_console_log_read()
155 mutex_lock(&debug_info->log_mutex); in cros_ec_console_log_read()
163 mutex_unlock(&debug_info->log_mutex); in cros_ec_console_log_read()
165 ret = wait_event_interruptible(debug_info->log_wq, in cros_ec_console_log_read()
170 mutex_lock(&debug_info->log_mutex); in cros_ec_console_log_read()
187 mutex_unlock(&debug_info->log_mutex); in cros_ec_console_log_read()
194 struct cros_ec_debugfs *debug_info = file->private_data; in cros_ec_console_log_poll() local
197 poll_wait(file, &debug_info->log_wq, wait); in cros_ec_console_log_poll()
199 mutex_lock(&debug_info->log_mutex); in cros_ec_console_log_poll()
200 if (CIRC_CNT(debug_info->log_buffer.head, in cros_ec_console_log_poll()
201 debug_info->log_buffer.tail, in cros_ec_console_log_poll()
204 mutex_unlock(&debug_info->log_mutex); in cros_ec_console_log_poll()
220 struct cros_ec_debugfs *debug_info = file->private_data; in cros_ec_pdinfo_read() local
221 struct cros_ec_device *ec_dev = debug_info->ec->ec_dev; in cros_ec_pdinfo_read()
312 static int cros_ec_create_console_log(struct cros_ec_debugfs *debug_info) in cros_ec_create_console_log() argument
314 struct cros_ec_dev *ec = debug_info->ec; in cros_ec_create_console_log()
331 debug_info->read_msg = devm_kzalloc(ec->dev, in cros_ec_create_console_log()
332 sizeof(*debug_info->read_msg) + in cros_ec_create_console_log()
334 if (!debug_info->read_msg) in cros_ec_create_console_log()
337 debug_info->read_msg->version = 1; in cros_ec_create_console_log()
338 debug_info->read_msg->command = EC_CMD_CONSOLE_READ + ec->cmd_offset; in cros_ec_create_console_log()
339 debug_info->read_msg->outsize = read_params_size; in cros_ec_create_console_log()
340 debug_info->read_msg->insize = read_response_size; in cros_ec_create_console_log()
342 debug_info->log_buffer.buf = buf; in cros_ec_create_console_log()
343 debug_info->log_buffer.head = 0; in cros_ec_create_console_log()
344 debug_info->log_buffer.tail = 0; in cros_ec_create_console_log()
346 mutex_init(&debug_info->log_mutex); in cros_ec_create_console_log()
347 init_waitqueue_head(&debug_info->log_wq); in cros_ec_create_console_log()
351 debug_info->dir, in cros_ec_create_console_log()
352 debug_info, in cros_ec_create_console_log()
356 INIT_DELAYED_WORK(&debug_info->log_poll_work, in cros_ec_create_console_log()
358 schedule_delayed_work(&debug_info->log_poll_work, 0); in cros_ec_create_console_log()
363 static void cros_ec_cleanup_console_log(struct cros_ec_debugfs *debug_info) in cros_ec_cleanup_console_log() argument
365 if (debug_info->log_buffer.buf) { in cros_ec_cleanup_console_log()
366 cancel_delayed_work_sync(&debug_info->log_poll_work); in cros_ec_cleanup_console_log()
367 mutex_destroy(&debug_info->log_mutex); in cros_ec_cleanup_console_log()
371 static int cros_ec_create_panicinfo(struct cros_ec_debugfs *debug_info) in cros_ec_create_panicinfo() argument
373 struct cros_ec_device *ec_dev = debug_info->ec->ec_dev; in cros_ec_create_panicinfo()
380 msg = devm_kzalloc(debug_info->ec->dev, in cros_ec_create_panicinfo()
390 dev_warn(debug_info->ec->dev, "Cannot read panicinfo.\n"); in cros_ec_create_panicinfo()
399 debug_info->panicinfo_blob.data = msg->data; in cros_ec_create_panicinfo()
400 debug_info->panicinfo_blob.size = ret; in cros_ec_create_panicinfo()
404 debug_info->dir, in cros_ec_create_panicinfo()
405 &debug_info->panicinfo_blob)) { in cros_ec_create_panicinfo()
413 devm_kfree(debug_info->ec->dev, msg); in cros_ec_create_panicinfo()
417 static int cros_ec_create_pdinfo(struct cros_ec_debugfs *debug_info) in cros_ec_create_pdinfo() argument
419 if (!debugfs_create_file("pdinfo", 0444, debug_info->dir, debug_info, in cros_ec_create_pdinfo()
430 struct cros_ec_debugfs *debug_info; in cros_ec_debugfs_init() local
433 debug_info = devm_kzalloc(ec->dev, sizeof(*debug_info), GFP_KERNEL); in cros_ec_debugfs_init()
434 if (!debug_info) in cros_ec_debugfs_init()
437 debug_info->ec = ec; in cros_ec_debugfs_init()
438 debug_info->dir = debugfs_create_dir(name, NULL); in cros_ec_debugfs_init()
439 if (!debug_info->dir) in cros_ec_debugfs_init()
442 ret = cros_ec_create_panicinfo(debug_info); in cros_ec_debugfs_init()
446 ret = cros_ec_create_console_log(debug_info); in cros_ec_debugfs_init()
450 ret = cros_ec_create_pdinfo(debug_info); in cros_ec_debugfs_init()
454 ec->debug_info = debug_info; in cros_ec_debugfs_init()
459 debugfs_remove_recursive(debug_info->dir); in cros_ec_debugfs_init()
466 if (!ec->debug_info) in cros_ec_debugfs_remove()
469 debugfs_remove_recursive(ec->debug_info->dir); in cros_ec_debugfs_remove()
470 cros_ec_cleanup_console_log(ec->debug_info); in cros_ec_debugfs_remove()
482 if (ec->debug_info && ec->debug_info->log_buffer.buf) in cros_ec_debugfs_suspend()
483 cancel_delayed_work_sync(&ec->debug_info->log_poll_work); in cros_ec_debugfs_suspend()
489 if (ec->debug_info && ec->debug_info->log_buffer.buf) in cros_ec_debugfs_resume()
490 schedule_delayed_work(&ec->debug_info->log_poll_work, 0); in cros_ec_debugfs_resume()