serial: smh: Initialize serial only if semihosting is enabled

If semihosting is disabled, then the user has no debugger attached, and
will not see any messages. Don't create a serial device in this
instance, to (hopefully) fall back on another working serial device.

Signed-off-by: Sean Anderson <sean.anderson@seco.com>
This commit is contained in:
Sean Anderson 2022-03-22 16:59:32 -04:00 committed by Tom Rini
parent bbe310cdaf
commit 2332590c48

View File

@ -41,6 +41,13 @@ static const struct dm_serial_ops smh_serial_ops = {
.getc = smh_serial_getc, .getc = smh_serial_getc,
}; };
static int smh_serial_bind(struct udevice *dev)
{
if (semihosting_enabled())
return 0;
return -ENOENT;
}
static int smh_serial_probe(struct udevice *dev) static int smh_serial_probe(struct udevice *dev)
{ {
struct smh_serial_priv *priv = dev_get_priv(dev); struct smh_serial_priv *priv = dev_get_priv(dev);
@ -52,6 +59,7 @@ static int smh_serial_probe(struct udevice *dev)
U_BOOT_DRIVER(smh_serial) = { U_BOOT_DRIVER(smh_serial) = {
.name = "serial_semihosting", .name = "serial_semihosting",
.id = UCLASS_SERIAL, .id = UCLASS_SERIAL,
.bind = smh_serial_bind,
.probe = smh_serial_probe, .probe = smh_serial_probe,
.priv_auto = sizeof(struct smh_serial_priv), .priv_auto = sizeof(struct smh_serial_priv),
.ops = &smh_serial_ops, .ops = &smh_serial_ops,
@ -122,7 +130,8 @@ struct serial_device serial_smh_device = {
void smh_serial_initialize(void) void smh_serial_initialize(void)
{ {
serial_register(&serial_smh_device); if (semihosting_enabled())
serial_register(&serial_smh_device);
} }
__weak struct serial_device *default_serial_console(void) __weak struct serial_device *default_serial_console(void)