* [PATCH v9 1/3] serial: samsung: Replace rd_regb/wr_regb with rd_reg/wr_reg [not found] <CGME20200506070015epcas2p2f2ce5d07918dbea764e2830d9024fc5f@epcas2p2.samsung.com> @ 2020-05-06 7:00 ` Hyunki Koo [not found] ` <CGME20200506070024epcas2p2868e11349d2fee83d340df7fa181f704@epcas2p2.samsung.com> [not found] ` <CGME20200506070029epcas2p4d4e86fad193180f71b70ea76e134d679@epcas2p4.samsung.com> 0 siblings, 2 replies; 5+ messages in thread From: Hyunki Koo @ 2020-05-06 7:00 UTC (permalink / raw) To: Kukjin Kim, Krzysztof Kozlowski, Greg Kroah-Hartman, Jiri Slaby, linux-arm-kernel, linux-samsung-soc, linux-serial, linux-kernel Cc: Hyunki Koo This patch change the name of macro for general usage. Signed-off-by: Hyunki Koo <hyunki00.koo@samsung.com> --- drivers/tty/serial/samsung_tty.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/drivers/tty/serial/samsung_tty.c b/drivers/tty/serial/samsung_tty.c index 73f951d65b93..326b0164609c 100644 --- a/drivers/tty/serial/samsung_tty.c +++ b/drivers/tty/serial/samsung_tty.c @@ -154,10 +154,10 @@ struct s3c24xx_uart_port { #define portaddrl(port, reg) \ ((unsigned long *)(unsigned long)((port)->membase + (reg))) -#define rd_regb(port, reg) (readb_relaxed(portaddr(port, reg))) +#define rd_reg(port, reg) (readb_relaxed(portaddr(port, reg))) #define rd_regl(port, reg) (readl_relaxed(portaddr(port, reg))) -#define wr_regb(port, reg, val) writeb_relaxed(val, portaddr(port, reg)) +#define wr_reg(port, reg, val) writeb_relaxed(val, portaddr(port, reg)) #define wr_regl(port, reg, val) writel_relaxed(val, portaddr(port, reg)) /* Byte-order aware bit setting/clearing functions. */ @@ -714,7 +714,7 @@ static void s3c24xx_serial_rx_drain_fifo(struct s3c24xx_uart_port *ourport) fifocnt--; uerstat = rd_regl(port, S3C2410_UERSTAT); - ch = rd_regb(port, S3C2410_URXH); + ch = rd_reg(port, S3C2410_URXH); if (port->flags & UPF_CONS_FLOW) { int txe = s3c24xx_serial_txempty_nofifo(port); @@ -826,7 +826,7 @@ static irqreturn_t s3c24xx_serial_tx_chars(int irq, void *id) } if (port->x_char) { - wr_regb(port, S3C2410_UTXH, port->x_char); + wr_reg(port, S3C2410_UTXH, port->x_char); port->icount.tx++; port->x_char = 0; goto out; @@ -852,7 +852,7 @@ static irqreturn_t s3c24xx_serial_tx_chars(int irq, void *id) if (rd_regl(port, S3C2410_UFSTAT) & ourport->info->tx_fifofull) break; - wr_regb(port, S3C2410_UTXH, xmit->buf[xmit->tail]); + wr_reg(port, S3C2410_UTXH, xmit->buf[xmit->tail]); xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1); port->icount.tx++; count--; @@ -916,7 +916,7 @@ static unsigned int s3c24xx_serial_tx_empty(struct uart_port *port) /* no modem control lines */ static unsigned int s3c24xx_serial_get_mctrl(struct uart_port *port) { - unsigned int umstat = rd_regb(port, S3C2410_UMSTAT); + unsigned int umstat = rd_reg(port, S3C2410_UMSTAT); if (umstat & S3C2410_UMSTAT_CTS) return TIOCM_CAR | TIOCM_DSR | TIOCM_CTS; @@ -2185,7 +2185,7 @@ static int s3c24xx_serial_get_poll_char(struct uart_port *port) if (s3c24xx_serial_rx_fifocnt(ourport, ufstat) == 0) return NO_POLL_CHAR; - return rd_regb(port, S3C2410_URXH); + return rd_reg(port, S3C2410_URXH); } static void s3c24xx_serial_put_poll_char(struct uart_port *port, @@ -2200,7 +2200,7 @@ static void s3c24xx_serial_put_poll_char(struct uart_port *port, while (!s3c24xx_serial_console_txrdy(port, ufcon)) cpu_relax(); - wr_regb(port, S3C2410_UTXH, c); + wr_reg(port, S3C2410_UTXH, c); } #endif /* CONFIG_CONSOLE_POLL */ @@ -2212,7 +2212,7 @@ s3c24xx_serial_console_putchar(struct uart_port *port, int ch) while (!s3c24xx_serial_console_txrdy(port, ufcon)) cpu_relax(); - wr_regb(port, S3C2410_UTXH, ch); + wr_reg(port, S3C2410_UTXH, ch); } static void -- 2.15.0.rc1 ^ permalink raw reply related [flat|nested] 5+ messages in thread
[parent not found: <CGME20200506070024epcas2p2868e11349d2fee83d340df7fa181f704@epcas2p2.samsung.com>]
* [PATCH v9 2/3] dt-bindings: serial: Add reg-io-width compatible [not found] ` <CGME20200506070024epcas2p2868e11349d2fee83d340df7fa181f704@epcas2p2.samsung.com> @ 2020-05-06 7:00 ` Hyunki Koo 2020-05-06 7:32 ` Greg Kroah-Hartman 0 siblings, 1 reply; 5+ messages in thread From: Hyunki Koo @ 2020-05-06 7:00 UTC (permalink / raw) To: Greg Kroah-Hartman, Rob Herring, linux-serial, devicetree, linux-kernel Cc: Hyunki Koo Add a description for reg-io-width options for the samsung serial UART peripheral. Signed-off-by: Hyunki Koo <hyunki00.koo@samsung.com> --- Documentation/devicetree/bindings/serial/samsung_uart.yaml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Documentation/devicetree/bindings/serial/samsung_uart.yaml b/Documentation/devicetree/bindings/serial/samsung_uart.yaml index 9d2ce347875b..a57b1233c691 100644 --- a/Documentation/devicetree/bindings/serial/samsung_uart.yaml +++ b/Documentation/devicetree/bindings/serial/samsung_uart.yaml @@ -29,6 +29,14 @@ properties: reg: maxItems: 1 + reg-io-width: + description: | + The size (in bytes) of the IO accesses that should be performed + on the device. + allOf: + - $ref: /schemas/types.yaml#/definitions/uint32 + - enum: [ 1, 4 ] + clocks: minItems: 2 maxItems: 5 -- 2.15.0.rc1 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v9 2/3] dt-bindings: serial: Add reg-io-width compatible 2020-05-06 7:00 ` [PATCH v9 2/3] dt-bindings: serial: Add reg-io-width compatible Hyunki Koo @ 2020-05-06 7:32 ` Greg Kroah-Hartman 2020-05-06 8:07 ` Hyunki Koo 0 siblings, 1 reply; 5+ messages in thread From: Greg Kroah-Hartman @ 2020-05-06 7:32 UTC (permalink / raw) To: Hyunki Koo; +Cc: Rob Herring, linux-serial, devicetree, linux-kernel On Wed, May 06, 2020 at 04:00:06PM +0900, Hyunki Koo wrote: > Add a description for reg-io-width options for the samsung serial > UART peripheral. > > Signed-off-by: Hyunki Koo <hyunki00.koo@samsung.com> > --- > Documentation/devicetree/bindings/serial/samsung_uart.yaml | 8 ++++++++ > 1 file changed, 8 insertions(+) You dropped the reviewed-by tag that Rob gave on the previous version of this patch. Please put that back and resend. thanks, greg k-h ^ permalink raw reply [flat|nested] 5+ messages in thread
* RE: [PATCH v9 2/3] dt-bindings: serial: Add reg-io-width compatible 2020-05-06 7:32 ` Greg Kroah-Hartman @ 2020-05-06 8:07 ` Hyunki Koo 0 siblings, 0 replies; 5+ messages in thread From: Hyunki Koo @ 2020-05-06 8:07 UTC (permalink / raw) To: 'Greg Kroah-Hartman' Cc: 'Rob Herring', linux-serial, devicetree, linux-kernel On Tuesday, May 5, 2020 at 2020 4:33:00 PM +0900, Greg Kroah-Hartman > On Wed, May 06, 2020 at 04:00:06PM +0900, Hyunki Koo wrote: > > Add a description for reg-io-width options for the samsung serial UART > > peripheral. > > > > Signed-off-by: Hyunki Koo <hyunki00.koo@samsung.com> > > --- > > Documentation/devicetree/bindings/serial/samsung_uart.yaml | 8 > > ++++++++ > > 1 file changed, 8 insertions(+) > > You dropped the reviewed-by tag that Rob gave on the previous version > of this patch. > > Please put that back and resend. > > thanks, > > greg k-h Thank you for your comment I add review tag by Krzysztof Kozlowski in all other patches not only patch2/3 Reviewed-by: Krzysztof Kozlowski <krzk@kernel.org> Tested on Odroid HC1 (Exynos5422): Tested-by: Krzysztof Kozlowski <krzk@kernel.org> ^ permalink raw reply [flat|nested] 5+ messages in thread
[parent not found: <CGME20200506070029epcas2p4d4e86fad193180f71b70ea76e134d679@epcas2p4.samsung.com>]
* [PATCH v9 3/3] tty: samsung_tty: 32-bit access for TX/RX hold registers [not found] ` <CGME20200506070029epcas2p4d4e86fad193180f71b70ea76e134d679@epcas2p4.samsung.com> @ 2020-05-06 7:00 ` Hyunki Koo 0 siblings, 0 replies; 5+ messages in thread From: Hyunki Koo @ 2020-05-06 7:00 UTC (permalink / raw) To: Kukjin Kim, Krzysztof Kozlowski, Greg Kroah-Hartman, Jiri Slaby, linux-arm-kernel, linux-samsung-soc, linux-serial, linux-kernel Cc: Hyunki Koo Support 32-bit access for the TX/RX hold registers UTXH and URXH. This is required for some newer SoCs. Signed-off-by: Hyunki Koo <hyunki00.koo@samsung.com> --- drivers/tty/serial/samsung_tty.c | 62 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 57 insertions(+), 5 deletions(-) diff --git a/drivers/tty/serial/samsung_tty.c b/drivers/tty/serial/samsung_tty.c index 326b0164609c..6ef614d8648c 100644 --- a/drivers/tty/serial/samsung_tty.c +++ b/drivers/tty/serial/samsung_tty.c @@ -154,10 +154,33 @@ struct s3c24xx_uart_port { #define portaddrl(port, reg) \ ((unsigned long *)(unsigned long)((port)->membase + (reg))) -#define rd_reg(port, reg) (readb_relaxed(portaddr(port, reg))) +static u32 rd_reg(struct uart_port *port, u32 reg) +{ + switch (port->iotype) { + case UPIO_MEM: + return readb_relaxed(portaddr(port, reg)); + case UPIO_MEM32: + return readl_relaxed(portaddr(port, reg)); + default: + return 0; + } + return 0; +} + #define rd_regl(port, reg) (readl_relaxed(portaddr(port, reg))) -#define wr_reg(port, reg, val) writeb_relaxed(val, portaddr(port, reg)) +static void wr_reg(struct uart_port *port, u32 reg, u32 val) +{ + switch (port->iotype) { + case UPIO_MEM: + writeb_relaxed(val, portaddr(port, reg)); + break; + case UPIO_MEM32: + writel_relaxed(val, portaddr(port, reg)); + break; + } +} + #define wr_regl(port, reg, val) writel_relaxed(val, portaddr(port, reg)) /* Byte-order aware bit setting/clearing functions. */ @@ -1974,7 +1997,7 @@ static int s3c24xx_serial_probe(struct platform_device *pdev) struct device_node *np = pdev->dev.of_node; struct s3c24xx_uart_port *ourport; int index = probe_index; - int ret; + int ret, prop = 0; if (np) { ret = of_alias_get_id(np, "serial"); @@ -2000,10 +2023,27 @@ static int s3c24xx_serial_probe(struct platform_device *pdev) dev_get_platdata(&pdev->dev) : ourport->drv_data->def_cfg; - if (np) + if (np) { of_property_read_u32(np, "samsung,uart-fifosize", &ourport->port.fifosize); + if (of_property_read_u32(np, "reg-io-width", &prop) == 0) { + switch (prop) { + case 1: + ourport->port.iotype = UPIO_MEM; + break; + case 4: + ourport->port.iotype = UPIO_MEM32; + break; + default: + dev_warn(&pdev->dev, "unsupported reg-io-width (%d)\n", + prop); + ret = -EINVAL; + break; + } + } + } + if (ourport->drv_data->fifosize[index]) ourport->port.fifosize = ourport->drv_data->fifosize[index]; else if (ourport->info->fifosize) @@ -2587,6 +2627,18 @@ module_platform_driver(samsung_serial_driver); * Early console. */ +static void wr_reg_barrier(struct uart_port *port, u32 reg, u32 val) +{ + switch (port->iotype) { + case UPIO_MEM: + writeb(val, portaddr(port, reg)); + break; + case UPIO_MEM32: + writel(val, portaddr(port, reg)); + break; + } +} + struct samsung_early_console_data { u32 txfull_mask; }; @@ -2612,7 +2664,7 @@ static void samsung_early_putc(struct uart_port *port, int c) else samsung_early_busyuart(port); - writeb(c, port->membase + S3C2410_UTXH); + wr_reg_barrier(port, S3C2410_UTXH, c); } static void samsung_early_write(struct console *con, const char *s, -- 2.15.0.rc1 ^ permalink raw reply related [flat|nested] 5+ messages in thread
end of thread, other threads:[~2020-05-06 8:08 UTC | newest] Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- [not found] <CGME20200506070015epcas2p2f2ce5d07918dbea764e2830d9024fc5f@epcas2p2.samsung.com> 2020-05-06 7:00 ` [PATCH v9 1/3] serial: samsung: Replace rd_regb/wr_regb with rd_reg/wr_reg Hyunki Koo [not found] ` <CGME20200506070024epcas2p2868e11349d2fee83d340df7fa181f704@epcas2p2.samsung.com> 2020-05-06 7:00 ` [PATCH v9 2/3] dt-bindings: serial: Add reg-io-width compatible Hyunki Koo 2020-05-06 7:32 ` Greg Kroah-Hartman 2020-05-06 8:07 ` Hyunki Koo [not found] ` <CGME20200506070029epcas2p4d4e86fad193180f71b70ea76e134d679@epcas2p4.samsung.com> 2020-05-06 7:00 ` [PATCH v9 3/3] tty: samsung_tty: 32-bit access for TX/RX hold registers Hyunki Koo
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).