* [U-Boot] [PATCH 0/4] serial: pxa: kconfig and optional driver model integration
@ 2016-10-28 20:50 Marcel Ziswiler
2016-10-28 20:50 ` [U-Boot] [PATCH 1/4] serial: pxa: use kconfig for serial configuration Marcel Ziswiler
` (3 more replies)
0 siblings, 4 replies; 7+ messages in thread
From: Marcel Ziswiler @ 2016-10-28 20:50 UTC (permalink / raw)
To: u-boot
This series integrates both Kconfig as well as optional driver model
support for the PXA serial driver. As I do not have any of the other
hardware available for testing for now I only transitioned the
Colibri PXA270 to actually make use of DM_SERIAL. As space on this
mostly NOR based hardware is rather constrained I decided against
also integrating device tree support for now but rather use olde
platform data. Your input on this is more than welcome.
Marcel Ziswiler (4):
serial: pxa: use kconfig for serial configuration
serial: pxa: integrate optional driver model handling
colibri_pxa270: drop lzma support for space reason
colibri_pxa270: transition to driver model for serial
board/toradex/colibri_pxa270/colibri_pxa270.c | 18 ++-
configs/colibri_pxa270_defconfig | 3 +
configs/h2200_defconfig | 1 +
configs/zipitz2_defconfig | 1 +
drivers/serial/Kconfig | 6 +
drivers/serial/serial_pxa.c | 181 +++++++++++++++++---------
include/configs/colibri_pxa270.h | 4 -
include/configs/h2200.h | 2 -
include/configs/zipitz2.h | 1 -
include/dm/platform_data/serial_pxa.h | 56 ++++++++
scripts/config_whitelist.txt | 1 -
11 files changed, 201 insertions(+), 73 deletions(-)
create mode 100644 include/dm/platform_data/serial_pxa.h
--
2.5.5
^ permalink raw reply [flat|nested] 7+ messages in thread
* [U-Boot] [PATCH 1/4] serial: pxa: use kconfig for serial configuration
2016-10-28 20:50 [U-Boot] [PATCH 0/4] serial: pxa: kconfig and optional driver model integration Marcel Ziswiler
@ 2016-10-28 20:50 ` Marcel Ziswiler
2016-10-28 20:50 ` [U-Boot] [PATCH 2/4] serial: pxa: integrate optional driver model handling Marcel Ziswiler
` (2 subsequent siblings)
3 siblings, 0 replies; 7+ messages in thread
From: Marcel Ziswiler @ 2016-10-28 20:50 UTC (permalink / raw)
To: u-boot
Migrate the PXA serial driver to be configured via Kconfig.
Signed-off-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
---
configs/colibri_pxa270_defconfig | 1 +
configs/h2200_defconfig | 1 +
configs/zipitz2_defconfig | 1 +
drivers/serial/Kconfig | 6 ++++++
include/configs/colibri_pxa270.h | 1 -
include/configs/h2200.h | 2 --
include/configs/zipitz2.h | 1 -
scripts/config_whitelist.txt | 1 -
8 files changed, 9 insertions(+), 5 deletions(-)
diff --git a/configs/colibri_pxa270_defconfig b/configs/colibri_pxa270_defconfig
index 9a57041..85740c2 100644
--- a/configs/colibri_pxa270_defconfig
+++ b/configs/colibri_pxa270_defconfig
@@ -13,6 +13,7 @@ CONFIG_CMD_DHCP=y
CONFIG_CMD_PING=y
CONFIG_CMD_EXT2=y
CONFIG_CMD_FAT=y
+CONFIG_PXA_SERIAL=y
CONFIG_USB=y
CONFIG_USB_STORAGE=y
CONFIG_OF_LIBFDT=y
diff --git a/configs/h2200_defconfig b/configs/h2200_defconfig
index c1b359e..a47159a 100644
--- a/configs/h2200_defconfig
+++ b/configs/h2200_defconfig
@@ -24,3 +24,4 @@ CONFIG_SYS_PROMPT="> "
# CONFIG_CMD_NFS is not set
CONFIG_CMD_PING=y
# CONFIG_CMD_MISC is not set
+CONFIG_PXA_SERIAL=y
diff --git a/configs/zipitz2_defconfig b/configs/zipitz2_defconfig
index 8eb9be4..5846579 100644
--- a/configs/zipitz2_defconfig
+++ b/configs/zipitz2_defconfig
@@ -14,6 +14,7 @@ CONFIG_CMD_USB=y
CONFIG_CMD_CACHE=y
CONFIG_CMD_EXT2=y
CONFIG_CMD_FAT=y
+CONFIG_PXA_SERIAL=y
CONFIG_USB=y
CONFIG_USB_STORAGE=y
CONFIG_LCD=y
diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig
index 541cf2e..cb6a2a2 100644
--- a/drivers/serial/Kconfig
+++ b/drivers/serial/Kconfig
@@ -386,4 +386,10 @@ config MSM_SERIAL
for example APQ8016 and MSM8916.
Single baudrate is supported in current implementation (115200).
+config PXA_SERIAL
+ bool "PXA serial port support"
+ help
+ If you have a machine based on a Marvell XScale PXA2xx CPU you
+ can enable its onboard serial ports by enabling this option.
+
endmenu
diff --git a/include/configs/colibri_pxa270.h b/include/configs/colibri_pxa270.h
index 429f571..5245609 100644
--- a/include/configs/colibri_pxa270.h
+++ b/include/configs/colibri_pxa270.h
@@ -44,7 +44,6 @@
/*
* Serial Console Configuration
*/
-#define CONFIG_PXA_SERIAL
#define CONFIG_FFUART 1
#define CONFIG_CONS_INDEX 3
#define CONFIG_BAUDRATE 115200
diff --git a/include/configs/h2200.h b/include/configs/h2200.h
index 8e77982..18b5488 100644
--- a/include/configs/h2200.h
+++ b/include/configs/h2200.h
@@ -107,8 +107,6 @@
/*
* Serial port
*/
-
-#define CONFIG_PXA_SERIAL
#define CONFIG_FFUART
#define CONFIG_CONS_INDEX 3
diff --git a/include/configs/zipitz2.h b/include/configs/zipitz2.h
index ed2c9ac..97dfc0e 100644
--- a/include/configs/zipitz2.h
+++ b/include/configs/zipitz2.h
@@ -49,7 +49,6 @@
* Serial Console Configuration
* STUART - the lower serial port on Colibri board
*/
-#define CONFIG_PXA_SERIAL
#define CONFIG_STUART 1
#define CONFIG_CONS_INDEX 2
#define CONFIG_BAUDRATE 115200
diff --git a/scripts/config_whitelist.txt b/scripts/config_whitelist.txt
index 11b5a22..1aef1bc 100644
--- a/scripts/config_whitelist.txt
+++ b/scripts/config_whitelist.txt
@@ -3740,7 +3740,6 @@ CONFIG_PWM_IMX
CONFIG_PXA_LCD
CONFIG_PXA_MMC_GENERIC
CONFIG_PXA_PWR_I2C
-CONFIG_PXA_SERIAL
CONFIG_PXA_STD_I2C
CONFIG_PXA_VGA
CONFIG_PXA_VIDEO
--
2.5.5
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [U-Boot] [PATCH 2/4] serial: pxa: integrate optional driver model handling
2016-10-28 20:50 [U-Boot] [PATCH 0/4] serial: pxa: kconfig and optional driver model integration Marcel Ziswiler
2016-10-28 20:50 ` [U-Boot] [PATCH 1/4] serial: pxa: use kconfig for serial configuration Marcel Ziswiler
@ 2016-10-28 20:50 ` Marcel Ziswiler
2016-10-28 20:58 ` Marek Vasut
2016-10-28 20:50 ` [U-Boot] [PATCH 3/4] colibri_pxa270: drop lzma support for space reason Marcel Ziswiler
2016-10-28 20:50 ` [U-Boot] [PATCH 4/4] colibri_pxa270: transition to driver model for serial Marcel Ziswiler
3 siblings, 1 reply; 7+ messages in thread
From: Marcel Ziswiler @ 2016-10-28 20:50 UTC (permalink / raw)
To: u-boot
Optional driver model handling integration.
Signed-off-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
---
drivers/serial/serial_pxa.c | 181 ++++++++++++++++++++++------------
include/dm/platform_data/serial_pxa.h | 56 +++++++++++
2 files changed, 174 insertions(+), 63 deletions(-)
create mode 100644 include/dm/platform_data/serial_pxa.h
diff --git a/drivers/serial/serial_pxa.c b/drivers/serial/serial_pxa.c
index 1eb19ec..b927a3e 100644
--- a/drivers/serial/serial_pxa.c
+++ b/drivers/serial/serial_pxa.c
@@ -14,6 +14,9 @@
*
* Copyright (C) 1999 2000 2001 Erik Mouw (J.A.K.Mouw at its.tudelft.nl)
*
+ * Modified to add driver model (DM) support
+ * (C) Copyright 2016 Marcel Ziswiler <marcel.ziswiler@toradex.com>
+ *
* SPDX-License-Identifier: GPL-2.0+
*/
@@ -21,75 +24,32 @@
#include <asm/arch/pxa-regs.h>
#include <asm/arch/regs-uart.h>
#include <asm/io.h>
+#include <dm.h>
+#include <dm/platform_data/serial_pxa.h>
#include <linux/compiler.h>
#include <serial.h>
#include <watchdog.h>
DECLARE_GLOBAL_DATA_PTR;
-/*
- * The numbering scheme differs here for PXA25x, PXA27x and PXA3xx so we can
- * easily handle enabling of clock.
- */
-#ifdef CONFIG_CPU_MONAHANS
-#define UART_CLK_BASE CKENA_21_BTUART
-#define UART_CLK_REG CKENA
-#define BTUART_INDEX 0
-#define FFUART_INDEX 1
-#define STUART_INDEX 2
-#elif CONFIG_CPU_PXA25X
-#define UART_CLK_BASE (1 << 4) /* HWUART */
-#define UART_CLK_REG CKEN
-#define HWUART_INDEX 0
-#define STUART_INDEX 1
-#define FFUART_INDEX 2
-#define BTUART_INDEX 3
-#else /* PXA27x */
-#define UART_CLK_BASE CKEN5_STUART
-#define UART_CLK_REG CKEN
-#define STUART_INDEX 0
-#define FFUART_INDEX 1
-#define BTUART_INDEX 2
-#endif
-
-/*
- * Only PXA250 has HWUART, to avoid poluting the code with more macros,
- * artificially introduce this.
- */
-#ifndef CONFIG_CPU_PXA25X
-#define HWUART_INDEX 0xff
-#endif
-
-static uint32_t pxa_uart_get_baud_divider(void)
+static uint32_t pxa_uart_get_baud_divider(int baudrate)
{
- if (gd->baudrate == 1200)
+ if (baudrate == 1200)
return 768;
- else if (gd->baudrate == 9600)
+ else if (baudrate == 9600)
return 96;
- else if (gd->baudrate == 19200)
+ else if (baudrate == 19200)
return 48;
- else if (gd->baudrate == 38400)
+ else if (baudrate == 38400)
return 24;
- else if (gd->baudrate == 57600)
+ else if (baudrate == 57600)
return 16;
- else if (gd->baudrate == 115200)
+ else if (baudrate == 115200)
return 8;
else /* Unsupported baudrate */
return 0;
}
-static struct pxa_uart_regs *pxa_uart_index_to_regs(uint32_t uart_index)
-{
- switch (uart_index) {
- case FFUART_INDEX: return (struct pxa_uart_regs *)FFUART_BASE;
- case BTUART_INDEX: return (struct pxa_uart_regs *)BTUART_BASE;
- case STUART_INDEX: return (struct pxa_uart_regs *)STUART_BASE;
- case HWUART_INDEX: return (struct pxa_uart_regs *)HWUART_BASE;
- default:
- return NULL;
- }
-}
-
static void pxa_uart_toggle_clock(uint32_t uart_index, int enable)
{
uint32_t clk_reg, clk_offset, reg;
@@ -110,20 +70,13 @@ static void pxa_uart_toggle_clock(uint32_t uart_index, int enable)
/*
* Enable clock and set baud rate, parity etc.
*/
-void pxa_setbrg_dev(uint32_t uart_index)
+void pxa_setbrg_common(struct pxa_uart_regs *uart_regs, int port, int baudrate)
{
- uint32_t divider = 0;
- struct pxa_uart_regs *uart_regs;
-
- divider = pxa_uart_get_baud_divider();
+ uint32_t divider = pxa_uart_get_baud_divider(baudrate);
if (!divider)
hang();
- uart_regs = pxa_uart_index_to_regs(uart_index);
- if (!uart_regs)
- hang();
-
- pxa_uart_toggle_clock(uart_index, 1);
+ pxa_uart_toggle_clock(port, 1);
/* Disable interrupts and FIFOs */
writel(0, &uart_regs->ier);
@@ -139,13 +92,38 @@ void pxa_setbrg_dev(uint32_t uart_index)
writel(IER_UUE, &uart_regs->ier);
}
+#ifndef CONFIG_DM_SERIAL
+static struct pxa_uart_regs *pxa_uart_index_to_regs(uint32_t uart_index)
+{
+ switch (uart_index) {
+ case FFUART_INDEX: return (struct pxa_uart_regs *)FFUART_BASE;
+ case BTUART_INDEX: return (struct pxa_uart_regs *)BTUART_BASE;
+ case STUART_INDEX: return (struct pxa_uart_regs *)STUART_BASE;
+ case HWUART_INDEX: return (struct pxa_uart_regs *)HWUART_BASE;
+ default:
+ return NULL;
+ }
+}
+
+/*
+ * Enable clock and set baud rate, parity etc.
+ */
+void pxa_setbrg_dev(uint32_t uart_index)
+{
+ struct pxa_uart_regs *uart_regs = pxa_uart_index_to_regs(uart_index);
+ if (!uart_regs)
+ hang();
+
+ pxa_setbrg_common(uart_regs, uart_index, gd->baudrate);
+}
+
/*
* Initialise the serial port with the given baudrate. The settings
* are always 8 data bits, no parity, 1 stop bit, no start bits.
*/
int pxa_init_dev(unsigned int uart_index)
{
- pxa_setbrg_dev (uart_index);
+ pxa_setbrg_dev(uart_index);
return 0;
}
@@ -297,3 +275,80 @@ void pxa_serial_initialize(void)
serial_register(&serial_stuart_device);
#endif
}
+#endif /* CONFIG_DM_SERIAL */
+
+#ifdef CONFIG_DM_SERIAL
+static int pxa_serial_probe(struct udevice *dev)
+{
+ struct pxa_serial_platdata *plat = dev->platdata;
+
+ pxa_setbrg_common((struct pxa_uart_regs *)(plat->base), plat->port,
+ plat->baudrate);
+ return 0;
+}
+
+static int pxa_serial_putc(struct udevice *dev, const char ch)
+{
+ struct pxa_serial_platdata *plat = dev->platdata;
+ struct pxa_uart_regs *uart_regs = (struct pxa_uart_regs *)(plat->base);
+
+ /* Wait for last character to go. */
+ if (!(readl(&uart_regs->lsr) & LSR_TEMT))
+ return -EAGAIN;
+
+ writel(ch, &uart_regs->thr);
+
+ return 0;
+}
+
+static int pxa_serial_getc(struct udevice *dev)
+{
+ struct pxa_serial_platdata *plat = dev->platdata;
+ struct pxa_uart_regs *uart_regs = (struct pxa_uart_regs *)(plat->base);
+
+ /* Wait for a character to arrive. */
+ if (!(readl(&uart_regs->lsr) & LSR_DR))
+ return -EAGAIN;
+
+ return readl(&uart_regs->rbr) & 0xff;
+}
+
+int pxa_serial_setbrg(struct udevice *dev, int baudrate)
+{
+ struct pxa_serial_platdata *plat = dev->platdata;
+ struct pxa_uart_regs *uart_regs = (struct pxa_uart_regs *)(plat->base);
+ int port = plat->port;
+
+ pxa_setbrg_common(uart_regs, port, baudrate);
+
+ return 0;
+}
+
+static int pxa_serial_pending(struct udevice *dev, bool input)
+{
+ struct pxa_serial_platdata *plat = dev->platdata;
+ struct pxa_uart_regs *uart_regs = (struct pxa_uart_regs *)(plat->base);
+
+ if (input)
+ return readl(&uart_regs->lsr) & LSR_DR ? 1 : 0;
+ else
+ return readl(&uart_regs->lsr) & LSR_TEMT ? 0 : 1;
+
+ return 0;
+}
+
+static const struct dm_serial_ops pxa_serial_ops = {
+ .putc = pxa_serial_putc,
+ .pending = pxa_serial_pending,
+ .getc = pxa_serial_getc,
+ .setbrg = pxa_serial_setbrg,
+};
+
+U_BOOT_DRIVER(serial_pxa) = {
+ .name = "serial_pxa",
+ .id = UCLASS_SERIAL,
+ .probe = pxa_serial_probe,
+ .ops = &pxa_serial_ops,
+ .flags = DM_FLAG_PRE_RELOC,
+};
+#endif /* CONFIG_DM_SERIAL */
diff --git a/include/dm/platform_data/serial_pxa.h b/include/dm/platform_data/serial_pxa.h
new file mode 100644
index 0000000..f08fc13
--- /dev/null
+++ b/include/dm/platform_data/serial_pxa.h
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2016 Marcel Ziswiler <marcel.ziswiler@toradex.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#ifndef __serial_pxa_h
+#define __serial_pxa_h
+
+/*
+ * The numbering scheme differs here for PXA25x, PXA27x and PXA3xx so we can
+ * easily handle enabling of clock.
+ */
+#ifdef CONFIG_CPU_MONAHANS
+#define UART_CLK_BASE CKENA_21_BTUART
+#define UART_CLK_REG CKENA
+#define BTUART_INDEX 0
+#define FFUART_INDEX 1
+#define STUART_INDEX 2
+#elif CONFIG_CPU_PXA25X
+#define UART_CLK_BASE (1 << 4) /* HWUART */
+#define UART_CLK_REG CKEN
+#define HWUART_INDEX 0
+#define STUART_INDEX 1
+#define FFUART_INDEX 2
+#define BTUART_INDEX 3
+#else /* PXA27x */
+#define UART_CLK_BASE CKEN5_STUART
+#define UART_CLK_REG CKEN
+#define STUART_INDEX 0
+#define FFUART_INDEX 1
+#define BTUART_INDEX 2
+#endif
+
+/*
+ * Only PXA250 has HWUART, to avoid poluting the code with more macros,
+ * artificially introduce this.
+ */
+#ifndef CONFIG_CPU_PXA25X
+#define HWUART_INDEX 0xff
+#endif
+
+/*
+ * struct pxa_serial_platdata - information about a PXA port
+ *
+ * @base: Uart port base register address
+ * @port: Uart port index, for cpu with pinmux for uart / gpio
+ * baudrtatre: Uart port baudrate
+ */
+struct pxa_serial_platdata {
+ struct pxa_uart_regs *base;
+ int port;
+ int baudrate;
+};
+
+#endif /* __serial_pxa_h */
--
2.5.5
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [U-Boot] [PATCH 3/4] colibri_pxa270: drop lzma support for space reason
2016-10-28 20:50 [U-Boot] [PATCH 0/4] serial: pxa: kconfig and optional driver model integration Marcel Ziswiler
2016-10-28 20:50 ` [U-Boot] [PATCH 1/4] serial: pxa: use kconfig for serial configuration Marcel Ziswiler
2016-10-28 20:50 ` [U-Boot] [PATCH 2/4] serial: pxa: integrate optional driver model handling Marcel Ziswiler
@ 2016-10-28 20:50 ` Marcel Ziswiler
2016-11-07 1:13 ` [U-Boot] [U-Boot, " Tom Rini
2016-10-28 20:50 ` [U-Boot] [PATCH 4/4] colibri_pxa270: transition to driver model for serial Marcel Ziswiler
3 siblings, 1 reply; 7+ messages in thread
From: Marcel Ziswiler @ 2016-10-28 20:50 UTC (permalink / raw)
To: u-boot
As the upcoming driver model integration takes up some more precious flash
space first make sure to drop expensive LZMA support.
Signed-off-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
---
include/configs/colibri_pxa270.h | 1 -
1 file changed, 1 deletion(-)
diff --git a/include/configs/colibri_pxa270.h b/include/configs/colibri_pxa270.h
index 5245609..b16abdc 100644
--- a/include/configs/colibri_pxa270.h
+++ b/include/configs/colibri_pxa270.h
@@ -39,7 +39,6 @@
#define CONFIG_TIMESTAMP
#define CONFIG_CMDLINE_TAG
#define CONFIG_SETUP_MEMORY_TAGS
-#define CONFIG_LZMA /* LZMA compression support */
/*
* Serial Console Configuration
--
2.5.5
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [U-Boot] [PATCH 4/4] colibri_pxa270: transition to driver model for serial
2016-10-28 20:50 [U-Boot] [PATCH 0/4] serial: pxa: kconfig and optional driver model integration Marcel Ziswiler
` (2 preceding siblings ...)
2016-10-28 20:50 ` [U-Boot] [PATCH 3/4] colibri_pxa270: drop lzma support for space reason Marcel Ziswiler
@ 2016-10-28 20:50 ` Marcel Ziswiler
3 siblings, 0 replies; 7+ messages in thread
From: Marcel Ziswiler @ 2016-10-28 20:50 UTC (permalink / raw)
To: u-boot
Add serial platform data to board file.
Enable driver model for PXA serial driver.
Signed-off-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
---
board/toradex/colibri_pxa270/colibri_pxa270.c | 18 ++++++++++++++++--
configs/colibri_pxa270_defconfig | 2 ++
include/configs/colibri_pxa270.h | 2 --
3 files changed, 18 insertions(+), 4 deletions(-)
diff --git a/board/toradex/colibri_pxa270/colibri_pxa270.c b/board/toradex/colibri_pxa270/colibri_pxa270.c
index 3def0a6..2e3e03a 100644
--- a/board/toradex/colibri_pxa270/colibri_pxa270.c
+++ b/board/toradex/colibri_pxa270/colibri_pxa270.c
@@ -8,10 +8,13 @@
#include <common.h>
#include <asm/arch/hardware.h>
-#include <asm/arch/regs-mmc.h>
#include <asm/arch/pxa.h>
-#include <netdev.h>
+#include <asm/arch/regs-mmc.h>
+#include <asm/arch/regs-uart.h>
#include <asm/io.h>
+#include <dm/platdata.h>
+#include <dm/platform_data/serial_pxa.h>
+#include <netdev.h>
#include <serial.h>
#include <usb.h>
@@ -105,3 +108,14 @@ int board_mmc_init(bd_t *bis)
return 0;
}
#endif
+
+static const struct pxa_serial_platdata serial_platdata = {
+ .base = (struct pxa_uart_regs *)FFUART_BASE,
+ .port = FFUART_INDEX,
+ .baudrate = CONFIG_BAUDRATE,
+};
+
+U_BOOT_DEVICE(pxa_serials) = {
+ .name = "serial_pxa",
+ .platdata = &serial_platdata,
+};
diff --git a/configs/colibri_pxa270_defconfig b/configs/colibri_pxa270_defconfig
index 85740c2..46b3137 100644
--- a/configs/colibri_pxa270_defconfig
+++ b/configs/colibri_pxa270_defconfig
@@ -13,6 +13,8 @@ CONFIG_CMD_DHCP=y
CONFIG_CMD_PING=y
CONFIG_CMD_EXT2=y
CONFIG_CMD_FAT=y
+CONFIG_DM=y
+CONFIG_DM_SERIAL=y
CONFIG_PXA_SERIAL=y
CONFIG_USB=y
CONFIG_USB_STORAGE=y
diff --git a/include/configs/colibri_pxa270.h b/include/configs/colibri_pxa270.h
index b16abdc..66dba74 100644
--- a/include/configs/colibri_pxa270.h
+++ b/include/configs/colibri_pxa270.h
@@ -43,8 +43,6 @@
/*
* Serial Console Configuration
*/
-#define CONFIG_FFUART 1
-#define CONFIG_CONS_INDEX 3
#define CONFIG_BAUDRATE 115200
/*
--
2.5.5
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [U-Boot] [PATCH 2/4] serial: pxa: integrate optional driver model handling
2016-10-28 20:50 ` [U-Boot] [PATCH 2/4] serial: pxa: integrate optional driver model handling Marcel Ziswiler
@ 2016-10-28 20:58 ` Marek Vasut
0 siblings, 0 replies; 7+ messages in thread
From: Marek Vasut @ 2016-10-28 20:58 UTC (permalink / raw)
To: u-boot
On 10/28/2016 10:50 PM, Marcel Ziswiler wrote:
> Optional driver model handling integration.
>
> Signed-off-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
> ---
>
> drivers/serial/serial_pxa.c | 181 ++++++++++++++++++++++------------
> include/dm/platform_data/serial_pxa.h | 56 +++++++++++
> 2 files changed, 174 insertions(+), 63 deletions(-)
> create mode 100644 include/dm/platform_data/serial_pxa.h
>
> diff --git a/drivers/serial/serial_pxa.c b/drivers/serial/serial_pxa.c
> index 1eb19ec..b927a3e 100644
> --- a/drivers/serial/serial_pxa.c
> +++ b/drivers/serial/serial_pxa.c
> @@ -14,6 +14,9 @@
> *
> * Copyright (C) 1999 2000 2001 Erik Mouw (J.A.K.Mouw at its.tudelft.nl)
> *
> + * Modified to add driver model (DM) support
> + * (C) Copyright 2016 Marcel Ziswiler <marcel.ziswiler@toradex.com>
> + *
> * SPDX-License-Identifier: GPL-2.0+
> */
>
> @@ -21,75 +24,32 @@
> #include <asm/arch/pxa-regs.h>
> #include <asm/arch/regs-uart.h>
> #include <asm/io.h>
> +#include <dm.h>
> +#include <dm/platform_data/serial_pxa.h>
> #include <linux/compiler.h>
> #include <serial.h>
> #include <watchdog.h>
>
> DECLARE_GLOBAL_DATA_PTR;
>
> -/*
> - * The numbering scheme differs here for PXA25x, PXA27x and PXA3xx so we can
> - * easily handle enabling of clock.
> - */
> -#ifdef CONFIG_CPU_MONAHANS
> -#define UART_CLK_BASE CKENA_21_BTUART
> -#define UART_CLK_REG CKENA
> -#define BTUART_INDEX 0
> -#define FFUART_INDEX 1
> -#define STUART_INDEX 2
> -#elif CONFIG_CPU_PXA25X
> -#define UART_CLK_BASE (1 << 4) /* HWUART */
> -#define UART_CLK_REG CKEN
> -#define HWUART_INDEX 0
> -#define STUART_INDEX 1
> -#define FFUART_INDEX 2
> -#define BTUART_INDEX 3
> -#else /* PXA27x */
> -#define UART_CLK_BASE CKEN5_STUART
> -#define UART_CLK_REG CKEN
> -#define STUART_INDEX 0
> -#define FFUART_INDEX 1
> -#define BTUART_INDEX 2
> -#endif
> -
> -/*
> - * Only PXA250 has HWUART, to avoid poluting the code with more macros,
> - * artificially introduce this.
> - */
> -#ifndef CONFIG_CPU_PXA25X
> -#define HWUART_INDEX 0xff
> -#endif
> -
> -static uint32_t pxa_uart_get_baud_divider(void)
> +static uint32_t pxa_uart_get_baud_divider(int baudrate)
> {
While at it:
/* Do we even need this check ? */
if (baudrate != 1200 || baudrate != 9600 || baudrate != 19200 ||
baudrate != 38400 || baudrate != 57600 || baudrate != 115200)
return 0;
return 921600 / baudrate;
> - if (gd->baudrate == 1200)
> + if (baudrate == 1200)
> return 768;
> - else if (gd->baudrate == 9600)
> + else if (baudrate == 9600)
> return 96;
> - else if (gd->baudrate == 19200)
> + else if (baudrate == 19200)
> return 48;
> - else if (gd->baudrate == 38400)
> + else if (baudrate == 38400)
> return 24;
> - else if (gd->baudrate == 57600)
> + else if (baudrate == 57600)
> return 16;
> - else if (gd->baudrate == 115200)
> + else if (baudrate == 115200)
> return 8;
> else /* Unsupported baudrate */
> return 0;
> }
>
> -static struct pxa_uart_regs *pxa_uart_index_to_regs(uint32_t uart_index)
> -{
> - switch (uart_index) {
> - case FFUART_INDEX: return (struct pxa_uart_regs *)FFUART_BASE;
> - case BTUART_INDEX: return (struct pxa_uart_regs *)BTUART_BASE;
> - case STUART_INDEX: return (struct pxa_uart_regs *)STUART_BASE;
> - case HWUART_INDEX: return (struct pxa_uart_regs *)HWUART_BASE;
> - default:
> - return NULL;
> - }
> -}
> -
> static void pxa_uart_toggle_clock(uint32_t uart_index, int enable)
> {
> uint32_t clk_reg, clk_offset, reg;
> @@ -110,20 +70,13 @@ static void pxa_uart_toggle_clock(uint32_t uart_index, int enable)
> /*
> * Enable clock and set baud rate, parity etc.
> */
> -void pxa_setbrg_dev(uint32_t uart_index)
> +void pxa_setbrg_common(struct pxa_uart_regs *uart_regs, int port, int baudrate)
> {
> - uint32_t divider = 0;
> - struct pxa_uart_regs *uart_regs;
> -
> - divider = pxa_uart_get_baud_divider();
> + uint32_t divider = pxa_uart_get_baud_divider(baudrate);
> if (!divider)
> hang();
>
> - uart_regs = pxa_uart_index_to_regs(uart_index);
> - if (!uart_regs)
> - hang();
> -
> - pxa_uart_toggle_clock(uart_index, 1);
> + pxa_uart_toggle_clock(port, 1);
>
> /* Disable interrupts and FIFOs */
> writel(0, &uart_regs->ier);
> @@ -139,13 +92,38 @@ void pxa_setbrg_dev(uint32_t uart_index)
> writel(IER_UUE, &uart_regs->ier);
> }
>
> +#ifndef CONFIG_DM_SERIAL
> +static struct pxa_uart_regs *pxa_uart_index_to_regs(uint32_t uart_index)
> +{
> + switch (uart_index) {
> + case FFUART_INDEX: return (struct pxa_uart_regs *)FFUART_BASE;
> + case BTUART_INDEX: return (struct pxa_uart_regs *)BTUART_BASE;
> + case STUART_INDEX: return (struct pxa_uart_regs *)STUART_BASE;
> + case HWUART_INDEX: return (struct pxa_uart_regs *)HWUART_BASE;
> + default:
> + return NULL;
> + }
> +}
> +
> +/*
> + * Enable clock and set baud rate, parity etc.
> + */
> +void pxa_setbrg_dev(uint32_t uart_index)
> +{
> + struct pxa_uart_regs *uart_regs = pxa_uart_index_to_regs(uart_index);
> + if (!uart_regs)
> + hang();
Can we handle the failure gracefully ?
> + pxa_setbrg_common(uart_regs, uart_index, gd->baudrate);
> +}
> +
> /*
> * Initialise the serial port with the given baudrate. The settings
> * are always 8 data bits, no parity, 1 stop bit, no start bits.
> */
> int pxa_init_dev(unsigned int uart_index)
> {
> - pxa_setbrg_dev (uart_index);
> + pxa_setbrg_dev(uart_index);
> return 0;
> }
>
> @@ -297,3 +275,80 @@ void pxa_serial_initialize(void)
> serial_register(&serial_stuart_device);
> #endif
> }
> +#endif /* CONFIG_DM_SERIAL */
> +
> +#ifdef CONFIG_DM_SERIAL
> +static int pxa_serial_probe(struct udevice *dev)
> +{
> + struct pxa_serial_platdata *plat = dev->platdata;
> +
> + pxa_setbrg_common((struct pxa_uart_regs *)(plat->base), plat->port,
The parenthesis around plat->base is superfluous .
> + plat->baudrate);
> + return 0;
> +}
[...]
> diff --git a/include/dm/platform_data/serial_pxa.h b/include/dm/platform_data/serial_pxa.h
> new file mode 100644
> index 0000000..f08fc13
> --- /dev/null
> +++ b/include/dm/platform_data/serial_pxa.h
> @@ -0,0 +1,56 @@
> +/*
> + * Copyright (c) 2016 Marcel Ziswiler <marcel.ziswiler@toradex.com>
> + *
> + * SPDX-License-Identifier: GPL-2.0+
> + */
> +
> +#ifndef __serial_pxa_h
> +#define __serial_pxa_h
This should be in caps.
> +/*
> + * The numbering scheme differs here for PXA25x, PXA27x and PXA3xx so we can
> + * easily handle enabling of clock.
> + */
> +#ifdef CONFIG_CPU_MONAHANS
Please drop the #define[tab]FOO and replace it with #define[space]FOO
> +#define UART_CLK_BASE CKENA_21_BTUART
> +#define UART_CLK_REG CKENA
> +#define BTUART_INDEX 0
> +#define FFUART_INDEX 1
> +#define STUART_INDEX 2
> +#elif CONFIG_CPU_PXA25X
> +#define UART_CLK_BASE (1 << 4) /* HWUART */
> +#define UART_CLK_REG CKEN
> +#define HWUART_INDEX 0
> +#define STUART_INDEX 1
> +#define FFUART_INDEX 2
> +#define BTUART_INDEX 3
> +#else /* PXA27x */
> +#define UART_CLK_BASE CKEN5_STUART
> +#define UART_CLK_REG CKEN
> +#define STUART_INDEX 0
> +#define FFUART_INDEX 1
> +#define BTUART_INDEX 2
> +#endif
Thanks!
--
Best regards,
Marek Vasut
^ permalink raw reply [flat|nested] 7+ messages in thread
* [U-Boot] [U-Boot, 3/4] colibri_pxa270: drop lzma support for space reason
2016-10-28 20:50 ` [U-Boot] [PATCH 3/4] colibri_pxa270: drop lzma support for space reason Marcel Ziswiler
@ 2016-11-07 1:13 ` Tom Rini
0 siblings, 0 replies; 7+ messages in thread
From: Tom Rini @ 2016-11-07 1:13 UTC (permalink / raw)
To: u-boot
On Fri, Oct 28, 2016 at 10:50:23PM +0200, Marcel Ziswiler wrote:
> As the upcoming driver model integration takes up some more precious flash
> space first make sure to drop expensive LZMA support.
>
> Signed-off-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
Applied to u-boot/master, thanks!
--
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20161106/946f8b05/attachment.sig>
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2016-11-07 1:13 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-10-28 20:50 [U-Boot] [PATCH 0/4] serial: pxa: kconfig and optional driver model integration Marcel Ziswiler
2016-10-28 20:50 ` [U-Boot] [PATCH 1/4] serial: pxa: use kconfig for serial configuration Marcel Ziswiler
2016-10-28 20:50 ` [U-Boot] [PATCH 2/4] serial: pxa: integrate optional driver model handling Marcel Ziswiler
2016-10-28 20:58 ` Marek Vasut
2016-10-28 20:50 ` [U-Boot] [PATCH 3/4] colibri_pxa270: drop lzma support for space reason Marcel Ziswiler
2016-11-07 1:13 ` [U-Boot] [U-Boot, " Tom Rini
2016-10-28 20:50 ` [U-Boot] [PATCH 4/4] colibri_pxa270: transition to driver model for serial Marcel Ziswiler
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.