dm: serial: Allow the UART driver to be dropped from the image

In very very space-constrained devices even the full UART driver is too
large. In this case the debug UART can still be used in some cases.

Add options to enable the UART driver in SPL and U-Boot proper. Enable both
options by default.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Thomas Chou <thomas@wytron.com.tw>
This commit is contained in:
Simon Glass 2015-12-13 21:36:58 -07:00
parent d4f847ecd7
commit 92c55b682c
2 changed files with 23 additions and 1 deletions

View file

@ -15,6 +15,26 @@ config REQUIRE_SERIAL_CONSOLE
during serial port initialization (default y). Set this to n on during serial port initialization (default y). Set this to n on
boards which have no debug serial port whatsoever. boards which have no debug serial port whatsoever.
config SERIAL_PRESENT
bool "Provide a serial driver"
depends on DM_SERIAL
default y
help
In very space-constrained devices even the full UART driver is too
large. In this case the debug UART can still be used in some cases.
This option enables the full UART in U-Boot, so if is it disabled,
the full UART driver will be omitted, thus saving space.
config SPL_SERIAL_PRESENT
bool "Provide a serial driver in SPL"
depends on DM_SERIAL
default y
help
In very space-constrained devices even the full UART driver is too
large. In this case the debug UART can still be used in some cases.
This option enables the full UART in SPL, so if is it disabled,
the full UART driver will be omitted, thus saving space.
config DM_SERIAL config DM_SERIAL
bool "Enable Driver Model for serial drivers" bool "Enable Driver Model for serial drivers"
depends on DM depends on DM

View file

@ -204,7 +204,7 @@ void serial_stdio_init(void)
{ {
} }
#ifdef CONFIG_DM_STDIO #if defined(CONFIG_DM_STDIO) && CONFIG_IS_ENABLED(SERIAL_PRESENT)
static void serial_stub_putc(struct stdio_dev *sdev, const char ch) static void serial_stub_putc(struct stdio_dev *sdev, const char ch)
{ {
_serial_putc(sdev->priv, ch); _serial_putc(sdev->priv, ch);
@ -287,6 +287,7 @@ static int on_baudrate(const char *name, const char *value, enum env_op op,
} }
U_BOOT_ENV_CALLBACK(baudrate, on_baudrate); U_BOOT_ENV_CALLBACK(baudrate, on_baudrate);
#if CONFIG_IS_ENABLED(SERIAL_PRESENT)
static int serial_post_probe(struct udevice *dev) static int serial_post_probe(struct udevice *dev)
{ {
struct dm_serial_ops *ops = serial_get_ops(dev); struct dm_serial_ops *ops = serial_get_ops(dev);
@ -356,3 +357,4 @@ UCLASS_DRIVER(serial) = {
.pre_remove = serial_pre_remove, .pre_remove = serial_pre_remove,
.per_device_auto_alloc_size = sizeof(struct serial_dev_priv), .per_device_auto_alloc_size = sizeof(struct serial_dev_priv),
}; };
#endif