xref: /openbmc/linux/drivers/tty/serial/kgdboc.c (revision c8ed9fc9)
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Based on the same principle as kgdboe using the NETPOLL api, this
4  * driver uses a console polling api to implement a gdb serial inteface
5  * which is multiplexed on a console port.
6  *
7  * Maintainer: Jason Wessel <jason.wessel@windriver.com>
8  *
9  * 2007-2008 (c) Jason Wessel - Wind River Systems, Inc.
10  */
11 
12 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
13 
14 #include <linux/kernel.h>
15 #include <linux/ctype.h>
16 #include <linux/kgdb.h>
17 #include <linux/kdb.h>
18 #include <linux/tty.h>
19 #include <linux/console.h>
20 #include <linux/vt_kern.h>
21 #include <linux/input.h>
22 #include <linux/module.h>
23 #include <linux/platform_device.h>
24 #include <linux/serial_core.h>
25 
26 #define MAX_CONFIG_LEN		40
27 
28 static struct kgdb_io		kgdboc_io_ops;
29 
30 /* -1 = init not run yet, 0 = unconfigured, 1 = configured. */
31 static int configured		= -1;
32 static DEFINE_MUTEX(config_mutex);
33 
34 static char config[MAX_CONFIG_LEN];
35 static struct kparam_string kps = {
36 	.string			= config,
37 	.maxlen			= MAX_CONFIG_LEN,
38 };
39 
40 static int kgdboc_use_kms;  /* 1 if we use kernel mode switching */
41 static struct tty_driver	*kgdb_tty_driver;
42 static int			kgdb_tty_line;
43 
44 static struct platform_device *kgdboc_pdev;
45 
46 #if IS_BUILTIN(CONFIG_KGDB_SERIAL_CONSOLE)
47 static struct kgdb_io		kgdboc_earlycon_io_ops;
48 static struct console		*earlycon;
49 static int                      (*earlycon_orig_exit)(struct console *con);
50 #endif /* IS_BUILTIN(CONFIG_KGDB_SERIAL_CONSOLE) */
51 
52 #ifdef CONFIG_KDB_KEYBOARD
53 static int kgdboc_reset_connect(struct input_handler *handler,
54 				struct input_dev *dev,
55 				const struct input_device_id *id)
56 {
57 	input_reset_device(dev);
58 
59 	/* Return an error - we do not want to bind, just to reset */
60 	return -ENODEV;
61 }
62 
63 static void kgdboc_reset_disconnect(struct input_handle *handle)
64 {
65 	/* We do not expect anyone to actually bind to us */
66 	BUG();
67 }
68 
69 static const struct input_device_id kgdboc_reset_ids[] = {
70 	{
71 		.flags = INPUT_DEVICE_ID_MATCH_EVBIT,
72 		.evbit = { BIT_MASK(EV_KEY) },
73 	},
74 	{ }
75 };
76 
77 static struct input_handler kgdboc_reset_handler = {
78 	.connect	= kgdboc_reset_connect,
79 	.disconnect	= kgdboc_reset_disconnect,
80 	.name		= "kgdboc_reset",
81 	.id_table	= kgdboc_reset_ids,
82 };
83 
84 static DEFINE_MUTEX(kgdboc_reset_mutex);
85 
86 static void kgdboc_restore_input_helper(struct work_struct *dummy)
87 {
88 	/*
89 	 * We need to take a mutex to prevent several instances of
90 	 * this work running on different CPUs so they don't try
91 	 * to register again already registered handler.
92 	 */
93 	mutex_lock(&kgdboc_reset_mutex);
94 
95 	if (input_register_handler(&kgdboc_reset_handler) == 0)
96 		input_unregister_handler(&kgdboc_reset_handler);
97 
98 	mutex_unlock(&kgdboc_reset_mutex);
99 }
100 
101 static DECLARE_WORK(kgdboc_restore_input_work, kgdboc_restore_input_helper);
102 
103 static void kgdboc_restore_input(void)
104 {
105 	if (likely(system_state == SYSTEM_RUNNING))
106 		schedule_work(&kgdboc_restore_input_work);
107 }
108 
109 static int kgdboc_register_kbd(char **cptr)
110 {
111 	if (strncmp(*cptr, "kbd", 3) == 0 ||
112 		strncmp(*cptr, "kdb", 3) == 0) {
113 		if (kdb_poll_idx < KDB_POLL_FUNC_MAX) {
114 			kdb_poll_funcs[kdb_poll_idx] = kdb_get_kbd_char;
115 			kdb_poll_idx++;
116 			if (cptr[0][3] == ',')
117 				*cptr += 4;
118 			else
119 				return 1;
120 		}
121 	}
122 	return 0;
123 }
124 
125 static void kgdboc_unregister_kbd(void)
126 {
127 	int i;
128 
129 	for (i = 0; i < kdb_poll_idx; i++) {
130 		if (kdb_poll_funcs[i] == kdb_get_kbd_char) {
131 			kdb_poll_idx--;
132 			kdb_poll_funcs[i] = kdb_poll_funcs[kdb_poll_idx];
133 			kdb_poll_funcs[kdb_poll_idx] = NULL;
134 			i--;
135 		}
136 	}
137 	flush_work(&kgdboc_restore_input_work);
138 }
139 #else /* ! CONFIG_KDB_KEYBOARD */
140 #define kgdboc_register_kbd(x) 0
141 #define kgdboc_unregister_kbd()
142 #define kgdboc_restore_input()
143 #endif /* ! CONFIG_KDB_KEYBOARD */
144 
145 #if IS_BUILTIN(CONFIG_KGDB_SERIAL_CONSOLE)
146 static void cleanup_earlycon(void)
147 {
148 	if (earlycon)
149 		kgdb_unregister_io_module(&kgdboc_earlycon_io_ops);
150 }
151 #else /* !IS_BUILTIN(CONFIG_KGDB_SERIAL_CONSOLE) */
152 static inline void cleanup_earlycon(void) { }
153 #endif /* !IS_BUILTIN(CONFIG_KGDB_SERIAL_CONSOLE) */
154 
155 static void cleanup_kgdboc(void)
156 {
157 	cleanup_earlycon();
158 
159 	if (configured != 1)
160 		return;
161 
162 	if (kgdb_unregister_nmi_console())
163 		return;
164 	kgdboc_unregister_kbd();
165 	kgdb_unregister_io_module(&kgdboc_io_ops);
166 }
167 
168 static int configure_kgdboc(void)
169 {
170 	struct tty_driver *p;
171 	int tty_line = 0;
172 	int err = -ENODEV;
173 	char *cptr = config;
174 	struct console *cons;
175 
176 	if (!strlen(config) || isspace(config[0])) {
177 		err = 0;
178 		goto noconfig;
179 	}
180 
181 	kgdboc_io_ops.is_console = 0;
182 	kgdb_tty_driver = NULL;
183 
184 	kgdboc_use_kms = 0;
185 	if (strncmp(cptr, "kms,", 4) == 0) {
186 		cptr += 4;
187 		kgdboc_use_kms = 1;
188 	}
189 
190 	if (kgdboc_register_kbd(&cptr))
191 		goto do_register;
192 
193 	p = tty_find_polling_driver(cptr, &tty_line);
194 	if (!p)
195 		goto noconfig;
196 
197 	for_each_console(cons) {
198 		int idx;
199 		if (cons->device && cons->device(cons, &idx) == p &&
200 		    idx == tty_line) {
201 			kgdboc_io_ops.is_console = 1;
202 			break;
203 		}
204 	}
205 
206 	kgdb_tty_driver = p;
207 	kgdb_tty_line = tty_line;
208 
209 do_register:
210 	err = kgdb_register_io_module(&kgdboc_io_ops);
211 	if (err)
212 		goto noconfig;
213 
214 	err = kgdb_register_nmi_console();
215 	if (err)
216 		goto nmi_con_failed;
217 
218 	configured = 1;
219 
220 	return 0;
221 
222 nmi_con_failed:
223 	kgdb_unregister_io_module(&kgdboc_io_ops);
224 noconfig:
225 	kgdboc_unregister_kbd();
226 	configured = 0;
227 
228 	return err;
229 }
230 
231 static int kgdboc_probe(struct platform_device *pdev)
232 {
233 	int ret = 0;
234 
235 	mutex_lock(&config_mutex);
236 	if (configured != 1) {
237 		ret = configure_kgdboc();
238 
239 		/* Convert "no device" to "defer" so we'll keep trying */
240 		if (ret == -ENODEV)
241 			ret = -EPROBE_DEFER;
242 	}
243 	mutex_unlock(&config_mutex);
244 
245 	return ret;
246 }
247 
248 static struct platform_driver kgdboc_platform_driver = {
249 	.probe = kgdboc_probe,
250 	.driver = {
251 		.name = "kgdboc",
252 		.suppress_bind_attrs = true,
253 	},
254 };
255 
256 static int __init init_kgdboc(void)
257 {
258 	int ret;
259 
260 	/*
261 	 * kgdboc is a little bit of an odd "platform_driver".  It can be
262 	 * up and running long before the platform_driver object is
263 	 * created and thus doesn't actually store anything in it.  There's
264 	 * only one instance of kgdb so anything is stored as global state.
265 	 * The platform_driver is only created so that we can leverage the
266 	 * kernel's mechanisms (like -EPROBE_DEFER) to call us when our
267 	 * underlying tty is ready.  Here we init our platform driver and
268 	 * then create the single kgdboc instance.
269 	 */
270 	ret = platform_driver_register(&kgdboc_platform_driver);
271 	if (ret)
272 		return ret;
273 
274 	kgdboc_pdev = platform_device_alloc("kgdboc", PLATFORM_DEVID_NONE);
275 	if (!kgdboc_pdev) {
276 		ret = -ENOMEM;
277 		goto err_did_register;
278 	}
279 
280 	ret = platform_device_add(kgdboc_pdev);
281 	if (!ret)
282 		return 0;
283 
284 	platform_device_put(kgdboc_pdev);
285 
286 err_did_register:
287 	platform_driver_unregister(&kgdboc_platform_driver);
288 	return ret;
289 }
290 
291 static void exit_kgdboc(void)
292 {
293 	mutex_lock(&config_mutex);
294 	cleanup_kgdboc();
295 	mutex_unlock(&config_mutex);
296 
297 	platform_device_unregister(kgdboc_pdev);
298 	platform_driver_unregister(&kgdboc_platform_driver);
299 }
300 
301 static int kgdboc_get_char(void)
302 {
303 	if (!kgdb_tty_driver)
304 		return -1;
305 	return kgdb_tty_driver->ops->poll_get_char(kgdb_tty_driver,
306 						kgdb_tty_line);
307 }
308 
309 static void kgdboc_put_char(u8 chr)
310 {
311 	if (!kgdb_tty_driver)
312 		return;
313 	kgdb_tty_driver->ops->poll_put_char(kgdb_tty_driver,
314 					kgdb_tty_line, chr);
315 }
316 
317 static int param_set_kgdboc_var(const char *kmessage,
318 				const struct kernel_param *kp)
319 {
320 	size_t len = strlen(kmessage);
321 	int ret = 0;
322 
323 	if (len >= MAX_CONFIG_LEN) {
324 		pr_err("config string too long\n");
325 		return -ENOSPC;
326 	}
327 
328 	if (kgdb_connected) {
329 		pr_err("Cannot reconfigure while KGDB is connected.\n");
330 		return -EBUSY;
331 	}
332 
333 	mutex_lock(&config_mutex);
334 
335 	strcpy(config, kmessage);
336 	/* Chop out \n char as a result of echo */
337 	if (len && config[len - 1] == '\n')
338 		config[len - 1] = '\0';
339 
340 	if (configured == 1)
341 		cleanup_kgdboc();
342 
343 	/*
344 	 * Configure with the new params as long as init already ran.
345 	 * Note that we can get called before init if someone loads us
346 	 * with "modprobe kgdboc kgdboc=..." or if they happen to use the
347 	 * the odd syntax of "kgdboc.kgdboc=..." on the kernel command.
348 	 */
349 	if (configured >= 0)
350 		ret = configure_kgdboc();
351 
352 	/*
353 	 * If we couldn't configure then clear out the config.  Note that
354 	 * specifying an invalid config on the kernel command line vs.
355 	 * through sysfs have slightly different behaviors.  If we fail
356 	 * to configure what was specified on the kernel command line
357 	 * we'll leave it in the 'config' and return -EPROBE_DEFER from
358 	 * our probe.  When specified through sysfs userspace is
359 	 * responsible for loading the tty driver before setting up.
360 	 */
361 	if (ret)
362 		config[0] = '\0';
363 
364 	mutex_unlock(&config_mutex);
365 
366 	return ret;
367 }
368 
369 static int dbg_restore_graphics;
370 
371 static void kgdboc_pre_exp_handler(void)
372 {
373 	if (!dbg_restore_graphics && kgdboc_use_kms) {
374 		dbg_restore_graphics = 1;
375 		con_debug_enter(vc_cons[fg_console].d);
376 	}
377 	/* Increment the module count when the debugger is active */
378 	if (!kgdb_connected)
379 		try_module_get(THIS_MODULE);
380 }
381 
382 static void kgdboc_post_exp_handler(void)
383 {
384 	/* decrement the module count when the debugger detaches */
385 	if (!kgdb_connected)
386 		module_put(THIS_MODULE);
387 	if (kgdboc_use_kms && dbg_restore_graphics) {
388 		dbg_restore_graphics = 0;
389 		con_debug_leave();
390 	}
391 	kgdboc_restore_input();
392 }
393 
394 static struct kgdb_io kgdboc_io_ops = {
395 	.name			= "kgdboc",
396 	.read_char		= kgdboc_get_char,
397 	.write_char		= kgdboc_put_char,
398 	.pre_exception		= kgdboc_pre_exp_handler,
399 	.post_exception		= kgdboc_post_exp_handler,
400 };
401 
402 #if IS_BUILTIN(CONFIG_KGDB_SERIAL_CONSOLE)
403 static int kgdboc_option_setup(char *opt)
404 {
405 	if (!opt) {
406 		pr_err("config string not provided\n");
407 		return -EINVAL;
408 	}
409 
410 	if (strlen(opt) >= MAX_CONFIG_LEN) {
411 		pr_err("config string too long\n");
412 		return -ENOSPC;
413 	}
414 	strcpy(config, opt);
415 
416 	return 0;
417 }
418 
419 __setup("kgdboc=", kgdboc_option_setup);
420 
421 
422 /* This is only available if kgdboc is a built in for early debugging */
423 static int __init kgdboc_early_init(char *opt)
424 {
425 	kgdboc_option_setup(opt);
426 	configure_kgdboc();
427 	return 0;
428 }
429 
430 early_param("ekgdboc", kgdboc_early_init);
431 
432 static int kgdboc_earlycon_get_char(void)
433 {
434 	char c;
435 
436 	if (!earlycon->read(earlycon, &c, 1))
437 		return NO_POLL_CHAR;
438 
439 	return c;
440 }
441 
442 static void kgdboc_earlycon_put_char(u8 chr)
443 {
444 	earlycon->write(earlycon, &chr, 1);
445 }
446 
447 static void kgdboc_earlycon_pre_exp_handler(void)
448 {
449 	struct console *con;
450 	static bool already_warned;
451 
452 	if (already_warned)
453 		return;
454 
455 	/*
456 	 * When the first normal console comes up the kernel will take all
457 	 * the boot consoles out of the list.  Really, we should stop using
458 	 * the boot console when it does that but until a TTY is registered
459 	 * we have no other choice so we keep using it.  Since not all
460 	 * serial drivers might be OK with this, print a warning once per
461 	 * boot if we detect this case.
462 	 */
463 	for_each_console(con)
464 		if (con == earlycon)
465 			return;
466 
467 	already_warned = true;
468 	pr_warn("kgdboc_earlycon is still using bootconsole\n");
469 }
470 
471 static int kgdboc_earlycon_deferred_exit(struct console *con)
472 {
473 	/*
474 	 * If we get here it means the boot console is going away but we
475 	 * don't yet have a suitable replacement.  Don't pass through to
476 	 * the original exit routine.  We'll call it later in our deinit()
477 	 * function.  For now, restore the original exit() function pointer
478 	 * as a sentinal that we've hit this point.
479 	 */
480 	con->exit = earlycon_orig_exit;
481 
482 	return 0;
483 }
484 
485 static void kgdboc_earlycon_deinit(void)
486 {
487 	if (!earlycon)
488 		return;
489 
490 	if (earlycon->exit == kgdboc_earlycon_deferred_exit)
491 		/*
492 		 * kgdboc_earlycon is exiting but original boot console exit
493 		 * was never called (AKA kgdboc_earlycon_deferred_exit()
494 		 * didn't ever run).  Undo our trap.
495 		 */
496 		earlycon->exit = earlycon_orig_exit;
497 	else if (earlycon->exit)
498 		/*
499 		 * We skipped calling the exit() routine so we could try to
500 		 * keep using the boot console even after it went away.  We're
501 		 * finally done so call the function now.
502 		 */
503 		earlycon->exit(earlycon);
504 
505 	earlycon = NULL;
506 }
507 
508 static struct kgdb_io kgdboc_earlycon_io_ops = {
509 	.name			= "kgdboc_earlycon",
510 	.read_char		= kgdboc_earlycon_get_char,
511 	.write_char		= kgdboc_earlycon_put_char,
512 	.pre_exception		= kgdboc_earlycon_pre_exp_handler,
513 	.deinit			= kgdboc_earlycon_deinit,
514 	.is_console		= true,
515 };
516 
517 #define MAX_CONSOLE_NAME_LEN (sizeof((struct console *) 0)->name)
518 static char kgdboc_earlycon_param[MAX_CONSOLE_NAME_LEN] __initdata;
519 static bool kgdboc_earlycon_late_enable __initdata;
520 
521 static int __init kgdboc_earlycon_init(char *opt)
522 {
523 	struct console *con;
524 
525 	kdb_init(KDB_INIT_EARLY);
526 
527 	/*
528 	 * Look for a matching console, or if the name was left blank just
529 	 * pick the first one we find.
530 	 */
531 	console_lock();
532 	for_each_console(con) {
533 		if (con->write && con->read &&
534 		    (con->flags & (CON_BOOT | CON_ENABLED)) &&
535 		    (!opt || !opt[0] || strcmp(con->name, opt) == 0))
536 			break;
537 	}
538 
539 	if (!con) {
540 		/*
541 		 * Both earlycon and kgdboc_earlycon are initialized during			 * early parameter parsing. We cannot guarantee earlycon gets
542 		 * in first and, in any case, on ACPI systems earlycon may
543 		 * defer its own initialization (usually to somewhere within
544 		 * setup_arch() ). To cope with either of these situations
545 		 * we can defer our own initialization to a little later in
546 		 * the boot.
547 		 */
548 		if (!kgdboc_earlycon_late_enable) {
549 			pr_info("No suitable earlycon yet, will try later\n");
550 			if (opt)
551 				strscpy(kgdboc_earlycon_param, opt,
552 					sizeof(kgdboc_earlycon_param));
553 			kgdboc_earlycon_late_enable = true;
554 		} else {
555 			pr_info("Couldn't find kgdb earlycon\n");
556 		}
557 		goto unlock;
558 	}
559 
560 	earlycon = con;
561 	pr_info("Going to register kgdb with earlycon '%s'\n", con->name);
562 	if (kgdb_register_io_module(&kgdboc_earlycon_io_ops) != 0) {
563 		earlycon = NULL;
564 		pr_info("Failed to register kgdb with earlycon\n");
565 	} else {
566 		/* Trap exit so we can keep earlycon longer if needed. */
567 		earlycon_orig_exit = con->exit;
568 		con->exit = kgdboc_earlycon_deferred_exit;
569 	}
570 
571 unlock:
572 	console_unlock();
573 
574 	/* Non-zero means malformed option so we always return zero */
575 	return 0;
576 }
577 
578 early_param("kgdboc_earlycon", kgdboc_earlycon_init);
579 
580 /*
581  * This is only intended for the late adoption of an early console.
582  *
583  * It is not a reliable way to adopt regular consoles because we can not
584  * control what order console initcalls are made and, in any case, many
585  * regular consoles are registered much later in the boot process than
586  * the console initcalls!
587  */
588 static int __init kgdboc_earlycon_late_init(void)
589 {
590 	if (kgdboc_earlycon_late_enable)
591 		kgdboc_earlycon_init(kgdboc_earlycon_param);
592 	return 0;
593 }
594 console_initcall(kgdboc_earlycon_late_init);
595 
596 #endif /* IS_BUILTIN(CONFIG_KGDB_SERIAL_CONSOLE) */
597 
598 module_init(init_kgdboc);
599 module_exit(exit_kgdboc);
600 module_param_call(kgdboc, param_set_kgdboc_var, param_get_string, &kps, 0644);
601 MODULE_PARM_DESC(kgdboc, "<serial_device>[,baud]");
602 MODULE_DESCRIPTION("KGDB Console TTY Driver");
603 MODULE_LICENSE("GPL");
604