Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5bc97786 authored by Olaf Hering's avatar Olaf Hering Committed by Paul Mackerras
Browse files

[POWERPC] Autodetect serial console on pegasos2



Signed-off-by: default avatarOlaf Hering <olaf@aepfle.de>
Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
parent 092ca5bd
Loading
Loading
Loading
Loading
+52 −0
Original line number Diff line number Diff line
@@ -256,6 +256,57 @@ static void briq_restart(char *cmd)
	for(;;);
}

/*
 * Per default, input/output-device points to the keyboard/screen
 * If no card is installed, the built-in serial port is used as a fallback.
 * But unfortunately, the firmware does not connect /chosen/{stdin,stdout}
 * the the built-in serial node. Instead, a /failsafe node is created.
 */
static void chrp_init_early(void)
{
	struct device_node *node;
	const char *property;

	if (strstr(cmd_line, "console="))
		return;
	/* find the boot console from /chosen/stdout */
	if (!of_chosen)
		return;
	node = of_find_node_by_path("/");
	if (!node)
		return;
	property = of_get_property(node, "model", NULL);
	if (!property)
		goto out_put;
	if (strcmp(property, "Pegasos2"))
		goto out_put;
	/* this is a Pegasos2 */
	property = of_get_property(of_chosen, "linux,stdout-path", NULL);
	if (!property)
		goto out_put;
	of_node_put(node);
	node = of_find_node_by_path(property);
	if (!node)
		return;
	property = of_get_property(node, "device_type", NULL);
	if (!property)
		goto out_put;
	if (strcmp(property, "serial"))
		goto out_put;
	/*
	 * The 9pin connector is either /failsafe
	 * or /pci@80000000/isa@C/serial@i2F8
	 * The optional graphics card has also type 'serial' in VGA mode.
	 */
	property = of_get_property(node, "name", NULL);
	if (!property)
		goto out_put;
	if (!strcmp(property, "failsafe") || !strcmp(property, "serial"))
		add_preferred_console("ttyS", 0, NULL);
out_put:
	of_node_put(node);
}

void __init chrp_setup_arch(void)
{
	struct device_node *root = of_find_node_by_path("/");
@@ -599,6 +650,7 @@ define_machine(chrp) {
	.probe			= chrp_probe,
	.setup_arch		= chrp_setup_arch,
	.init			= chrp_init2,
	.init_early		= chrp_init_early,
	.show_cpuinfo		= chrp_show_cpuinfo,
	.init_IRQ		= chrp_init_IRQ,
	.restart		= rtas_restart,