* [PATCH V2 0/2] serial: sprd: Modification of UNISOC Platform UART Driver
@ 2025-01-13 3:19 Wenhua Lin
2025-01-13 3:19 ` [PATCH V2 1/2] dt-bindings: serial: Add a new compatible string for UMS9632 Wenhua Lin
` (2 more replies)
0 siblings, 3 replies; 9+ messages in thread
From: Wenhua Lin @ 2025-01-13 3:19 UTC (permalink / raw)
To: Greg Kroah-Hartman, Jiri Slaby, Bartosz Golaszewski, Rob Herring,
Krzysztof Kozlowski, Conor Dooley
Cc: Orson Zhai, Baolin Wang, Chunyan Zhang, Cixi Geng, linux-kernel,
linux-serial, devicetree, wenhua lin, Wenhua Lin, Xiongpeng Wu,
Zhaochen Su, Zhirong Qiu
In order to be compatible with UNISOC's new UART IP, the UART driver uses
private data for adaptation. Patch1 adds UART timeout interrupt BIT17, and
the old project uses BIT13. In order to be compatible with all projects,
private data is used for adaptation. Patch2 adds a new compatible string.
Change in V2:
-Change commit message in PATCH 2/2.
-Add a new items supports sc9832 compatible string in PATCH 2/2.
Wenhua Lin (2):
dt-bindings: serial: Add a new compatible string for UMS9632
serial: sprd: Add support for sc9632
.../devicetree/bindings/serial/sprd-uart.yaml | 5 +++
drivers/tty/serial/sprd_serial.c | 41 ++++++++++++++++---
2 files changed, 41 insertions(+), 5 deletions(-)
--
2.34.1
^ permalink raw reply [flat|nested] 9+ messages in thread* [PATCH V2 1/2] dt-bindings: serial: Add a new compatible string for UMS9632 2025-01-13 3:19 [PATCH V2 0/2] serial: sprd: Modification of UNISOC Platform UART Driver Wenhua Lin @ 2025-01-13 3:19 ` Wenhua Lin 2025-01-13 7:53 ` Krzysztof Kozlowski 2025-01-13 3:19 ` [PATCH V2 2/2] serial: sprd: Add support for sc9632 Wenhua Lin 2025-01-13 6:05 ` [PATCH V2 0/2] serial: sprd: Modification of UNISOC Platform UART Driver Baolin Wang 2 siblings, 1 reply; 9+ messages in thread From: Wenhua Lin @ 2025-01-13 3:19 UTC (permalink / raw) To: Greg Kroah-Hartman, Jiri Slaby, Bartosz Golaszewski, Rob Herring, Krzysztof Kozlowski, Conor Dooley Cc: Orson Zhai, Baolin Wang, Chunyan Zhang, Cixi Geng, linux-kernel, linux-serial, devicetree, wenhua lin, Wenhua Lin, Xiongpeng Wu, Zhaochen Su, Zhirong Qiu The UMS9632 uses the SC9632 serial device. Signed-off-by: Wenhua Lin <Wenhua.Lin@unisoc.com> --- Documentation/devicetree/bindings/serial/sprd-uart.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Documentation/devicetree/bindings/serial/sprd-uart.yaml b/Documentation/devicetree/bindings/serial/sprd-uart.yaml index f4dbb6dc2b6e..83582aa6c750 100644 --- a/Documentation/devicetree/bindings/serial/sprd-uart.yaml +++ b/Documentation/devicetree/bindings/serial/sprd-uart.yaml @@ -23,6 +23,11 @@ properties: - sprd,ums9620-uart - const: sprd,sc9836-uart - const: sprd,sc9836-uart + - items: + - enum: + - sprd,ums9632-uart + - const: sprd,sc9632-uart + - const: sprd,sc9632-uart reg: maxItems: 1 -- 2.34.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH V2 1/2] dt-bindings: serial: Add a new compatible string for UMS9632 2025-01-13 3:19 ` [PATCH V2 1/2] dt-bindings: serial: Add a new compatible string for UMS9632 Wenhua Lin @ 2025-01-13 7:53 ` Krzysztof Kozlowski 0 siblings, 0 replies; 9+ messages in thread From: Krzysztof Kozlowski @ 2025-01-13 7:53 UTC (permalink / raw) To: Wenhua Lin, Greg Kroah-Hartman, Jiri Slaby, Bartosz Golaszewski, Rob Herring, Krzysztof Kozlowski, Conor Dooley Cc: Orson Zhai, Baolin Wang, Chunyan Zhang, Cixi Geng, linux-kernel, linux-serial, devicetree, wenhua lin, Xiongpeng Wu, Zhaochen Su, Zhirong Qiu On 13/01/2025 04:19, Wenhua Lin wrote: > The UMS9632 uses the SC9632 serial device. Why are you sending accepted patches? > > Signed-off-by: Wenhua Lin <Wenhua.Lin@unisoc.com> > --- > Documentation/devicetree/bindings/serial/sprd-uart.yaml | 5 +++++ > 1 file changed, 5 insertions(+) > > diff --git a/Documentation/devicetree/bindings/serial/sprd-uart.yaml b/Documentation/devicetree/bindings/serial/sprd-uart.yaml > index f4dbb6dc2b6e..83582aa6c750 100644 > --- a/Documentation/devicetree/bindings/serial/sprd-uart.yaml > +++ b/Documentation/devicetree/bindings/serial/sprd-uart.yaml > @@ -23,6 +23,11 @@ properties: > - sprd,ums9620-uart > - const: sprd,sc9836-uart > - const: sprd,sc9836-uart > + - items: > + - enum: > + - sprd,ums9632-uart > + - const: sprd,sc9632-uart > + - const: sprd,sc9632-uart NAK, you are duplicating entries. Best regards, Krzysztof ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH V2 2/2] serial: sprd: Add support for sc9632 2025-01-13 3:19 [PATCH V2 0/2] serial: sprd: Modification of UNISOC Platform UART Driver Wenhua Lin 2025-01-13 3:19 ` [PATCH V2 1/2] dt-bindings: serial: Add a new compatible string for UMS9632 Wenhua Lin @ 2025-01-13 3:19 ` Wenhua Lin 2025-01-13 6:07 ` Baolin Wang 2025-01-13 7:12 ` Chunyan Zhang 2025-01-13 6:05 ` [PATCH V2 0/2] serial: sprd: Modification of UNISOC Platform UART Driver Baolin Wang 2 siblings, 2 replies; 9+ messages in thread From: Wenhua Lin @ 2025-01-13 3:19 UTC (permalink / raw) To: Greg Kroah-Hartman, Jiri Slaby, Bartosz Golaszewski, Rob Herring, Krzysztof Kozlowski, Conor Dooley Cc: Orson Zhai, Baolin Wang, Chunyan Zhang, Cixi Geng, linux-kernel, linux-serial, devicetree, wenhua lin, Wenhua Lin, Xiongpeng Wu, Zhaochen Su, Zhirong Qiu Due to the platform's new project uart ip upgrade, the new project's timeout interrupt needs to use bit17 while other projects' timeout interrupt needs to use bit13, using private data to adapt and be compatible with all projects. Signed-off-by: Wenhua Lin <Wenhua.Lin@unisoc.com> --- drivers/tty/serial/sprd_serial.c | 41 ++++++++++++++++++++++++++++---- 1 file changed, 36 insertions(+), 5 deletions(-) diff --git a/drivers/tty/serial/sprd_serial.c b/drivers/tty/serial/sprd_serial.c index 3fc54cc02a1f..882580c3cf37 100644 --- a/drivers/tty/serial/sprd_serial.c +++ b/drivers/tty/serial/sprd_serial.c @@ -53,10 +53,12 @@ #define SPRD_IEN_TX_EMPTY BIT(1) #define SPRD_IEN_BREAK_DETECT BIT(7) #define SPRD_IEN_TIMEOUT BIT(13) +#define SPRD_IEN_DATA_TIMEOUT BIT(17) /* interrupt clear register */ #define SPRD_ICLR 0x0014 #define SPRD_ICLR_TIMEOUT BIT(13) +#define SPRD_ICLR_DATA_TIMEOUT BIT(17) /* line control register */ #define SPRD_LCR 0x0018 @@ -102,6 +104,7 @@ #define SPRD_IMSR_TX_FIFO_EMPTY BIT(1) #define SPRD_IMSR_BREAK_DETECT BIT(7) #define SPRD_IMSR_TIMEOUT BIT(13) +#define SPRD_IMSR_DATA_TIMEOUT BIT(17) #define SPRD_DEFAULT_SOURCE_CLK 26000000 #define SPRD_RX_DMA_STEP 1 @@ -118,6 +121,12 @@ struct sprd_uart_dma { bool enable; }; +struct sprd_uart_data { + unsigned int timeout_ien; + unsigned int timeout_iclr; + unsigned int timeout_imsr; +}; + struct sprd_uart_port { struct uart_port port; char name[16]; @@ -126,6 +135,7 @@ struct sprd_uart_port { struct sprd_uart_dma rx_dma; dma_addr_t pos; unsigned char *rx_buf_tail; + const struct sprd_uart_data *pdata; }; static struct sprd_uart_port *sprd_port[UART_NR_MAX]; @@ -134,6 +144,18 @@ static int sprd_ports_num; static int sprd_start_dma_rx(struct uart_port *port); static int sprd_tx_dma_config(struct uart_port *port); +static const struct sprd_uart_data sc9836_data = { + .timeout_ien = SPRD_IEN_TIMEOUT, + .timeout_iclr = SPRD_ICLR_TIMEOUT, + .timeout_imsr = SPRD_IMSR_TIMEOUT, +}; + +static const struct sprd_uart_data sc9632_data = { + .timeout_ien = SPRD_IEN_DATA_TIMEOUT, + .timeout_iclr = SPRD_ICLR_DATA_TIMEOUT, + .timeout_imsr = SPRD_IMSR_DATA_TIMEOUT, +}; + static inline unsigned int serial_in(struct uart_port *port, unsigned int offset) { @@ -637,6 +659,8 @@ static irqreturn_t sprd_handle_irq(int irq, void *dev_id) { struct uart_port *port = dev_id; unsigned int ims; + struct sprd_uart_port *sp = + container_of(port, struct sprd_uart_port, port); uart_port_lock(port); @@ -647,14 +671,14 @@ static irqreturn_t sprd_handle_irq(int irq, void *dev_id) return IRQ_NONE; } - if (ims & SPRD_IMSR_TIMEOUT) - serial_out(port, SPRD_ICLR, SPRD_ICLR_TIMEOUT); + if (ims & sp->pdata->timeout_imsr) + serial_out(port, SPRD_ICLR, sp->pdata->timeout_iclr); if (ims & SPRD_IMSR_BREAK_DETECT) serial_out(port, SPRD_ICLR, SPRD_IMSR_BREAK_DETECT); if (ims & (SPRD_IMSR_RX_FIFO_FULL | SPRD_IMSR_BREAK_DETECT | - SPRD_IMSR_TIMEOUT)) + sp->pdata->timeout_imsr)) sprd_rx(port); if (ims & SPRD_IMSR_TX_FIFO_EMPTY) @@ -729,7 +753,7 @@ static int sprd_startup(struct uart_port *port) /* enable interrupt */ uart_port_lock_irqsave(port, &flags); ien = serial_in(port, SPRD_IEN); - ien |= SPRD_IEN_BREAK_DETECT | SPRD_IEN_TIMEOUT; + ien |= SPRD_IEN_BREAK_DETECT | sp->pdata->timeout_ien; if (!sp->rx_dma.enable) ien |= SPRD_IEN_RX_FULL; serial_out(port, SPRD_IEN, ien); @@ -1184,6 +1208,12 @@ static int sprd_probe(struct platform_device *pdev) up->mapbase = res->start; + sport->pdata = of_device_get_match_data(&pdev->dev); + if (!sport->pdata) { + dev_err(&pdev->dev, "get match data failed!\n"); + return -EINVAL; + } + irq = platform_get_irq(pdev, 0); if (irq < 0) return irq; @@ -1248,7 +1278,8 @@ static int sprd_resume(struct device *dev) static SIMPLE_DEV_PM_OPS(sprd_pm_ops, sprd_suspend, sprd_resume); static const struct of_device_id serial_ids[] = { - {.compatible = "sprd,sc9836-uart",}, + {.compatible = "sprd,sc9836-uart", .data = &sc9836_data}, + {.compatible = "sprd,sc9632-uart", .data = &sc9632_data}, {} }; MODULE_DEVICE_TABLE(of, serial_ids); -- 2.34.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH V2 2/2] serial: sprd: Add support for sc9632 2025-01-13 3:19 ` [PATCH V2 2/2] serial: sprd: Add support for sc9632 Wenhua Lin @ 2025-01-13 6:07 ` Baolin Wang 2025-01-14 2:03 ` wenhua lin 2025-01-13 7:12 ` Chunyan Zhang 1 sibling, 1 reply; 9+ messages in thread From: Baolin Wang @ 2025-01-13 6:07 UTC (permalink / raw) To: Wenhua Lin, Greg Kroah-Hartman, Jiri Slaby, Bartosz Golaszewski, Rob Herring, Krzysztof Kozlowski, Conor Dooley Cc: Orson Zhai, Chunyan Zhang, Cixi Geng, linux-kernel, linux-serial, devicetree, wenhua lin, Xiongpeng Wu, Zhaochen Su, Zhirong Qiu On 2025/1/13 11:19, Wenhua Lin wrote: > Due to the platform's new project uart ip upgrade, > the new project's timeout interrupt needs to use bit17 > while other projects' timeout interrupt needs to use > bit13, using private data to adapt and be compatible > with all projects. > > Signed-off-by: Wenhua Lin <Wenhua.Lin@unisoc.com> People have already given you reviewed or acked tags[1], if you did not change the code, please keep them in the next version. [1] https://lore.kernel.org/lkml/20241113110516.2166328-2-Wenhua.Lin@unisoc.com/ ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH V2 2/2] serial: sprd: Add support for sc9632 2025-01-13 6:07 ` Baolin Wang @ 2025-01-14 2:03 ` wenhua lin 0 siblings, 0 replies; 9+ messages in thread From: wenhua lin @ 2025-01-14 2:03 UTC (permalink / raw) To: Baolin Wang Cc: Wenhua Lin, Greg Kroah-Hartman, Jiri Slaby, Bartosz Golaszewski, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Orson Zhai, Chunyan Zhang, Cixi Geng, linux-kernel, linux-serial, devicetree, Xiongpeng Wu, Zhaochen Su, Zhirong Qiu On Mon, Jan 13, 2025 at 2:08 PM Baolin Wang <baolin.wang@linux.alibaba.com> wrote: > > > > On 2025/1/13 11:19, Wenhua Lin wrote: > > Due to the platform's new project uart ip upgrade, > > the new project's timeout interrupt needs to use bit17 > > while other projects' timeout interrupt needs to use > > bit13, using private data to adapt and be compatible > > with all projects. > > > > Signed-off-by: Wenhua Lin <Wenhua.Lin@unisoc.com> > > People have already given you reviewed or acked tags[1], if you did not > change the code, please keep them in the next version. > > [1] > https://lore.kernel.org/lkml/20241113110516.2166328-2-Wenhua.Lin@unisoc.com/ Hi Baolin: OK, the issue with tags[1] will be resolved through a new submission. Thank you for your reminder. Thanks ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH V2 2/2] serial: sprd: Add support for sc9632 2025-01-13 3:19 ` [PATCH V2 2/2] serial: sprd: Add support for sc9632 Wenhua Lin 2025-01-13 6:07 ` Baolin Wang @ 2025-01-13 7:12 ` Chunyan Zhang 2025-01-14 2:25 ` wenhua lin 1 sibling, 1 reply; 9+ messages in thread From: Chunyan Zhang @ 2025-01-13 7:12 UTC (permalink / raw) To: Wenhua Lin Cc: Greg Kroah-Hartman, Jiri Slaby, Bartosz Golaszewski, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Orson Zhai, Baolin Wang, Cixi Geng, linux-kernel, linux-serial, devicetree, wenhua lin, Xiongpeng Wu, Zhaochen Su, Zhirong Qiu On Mon, 13 Jan 2025 at 11:20, Wenhua Lin <Wenhua.Lin@unisoc.com> wrote: > > Due to the platform's new project uart ip upgrade, > the new project's timeout interrupt needs to use bit17 > while other projects' timeout interrupt needs to use > bit13, using private data to adapt and be compatible > with all projects. > It seems that this patch has got merged into the last release, why do you resend this? > Signed-off-by: Wenhua Lin <Wenhua.Lin@unisoc.com> > --- > drivers/tty/serial/sprd_serial.c | 41 ++++++++++++++++++++++++++++---- > 1 file changed, 36 insertions(+), 5 deletions(-) > > diff --git a/drivers/tty/serial/sprd_serial.c b/drivers/tty/serial/sprd_serial.c > index 3fc54cc02a1f..882580c3cf37 100644 > --- a/drivers/tty/serial/sprd_serial.c > +++ b/drivers/tty/serial/sprd_serial.c > @@ -53,10 +53,12 @@ > #define SPRD_IEN_TX_EMPTY BIT(1) > #define SPRD_IEN_BREAK_DETECT BIT(7) > #define SPRD_IEN_TIMEOUT BIT(13) > +#define SPRD_IEN_DATA_TIMEOUT BIT(17) > > /* interrupt clear register */ > #define SPRD_ICLR 0x0014 > #define SPRD_ICLR_TIMEOUT BIT(13) > +#define SPRD_ICLR_DATA_TIMEOUT BIT(17) > > /* line control register */ > #define SPRD_LCR 0x0018 > @@ -102,6 +104,7 @@ > #define SPRD_IMSR_TX_FIFO_EMPTY BIT(1) > #define SPRD_IMSR_BREAK_DETECT BIT(7) > #define SPRD_IMSR_TIMEOUT BIT(13) > +#define SPRD_IMSR_DATA_TIMEOUT BIT(17) > #define SPRD_DEFAULT_SOURCE_CLK 26000000 > > #define SPRD_RX_DMA_STEP 1 > @@ -118,6 +121,12 @@ struct sprd_uart_dma { > bool enable; > }; > > +struct sprd_uart_data { > + unsigned int timeout_ien; > + unsigned int timeout_iclr; > + unsigned int timeout_imsr; > +}; > + > struct sprd_uart_port { > struct uart_port port; > char name[16]; > @@ -126,6 +135,7 @@ struct sprd_uart_port { > struct sprd_uart_dma rx_dma; > dma_addr_t pos; > unsigned char *rx_buf_tail; > + const struct sprd_uart_data *pdata; > }; > > static struct sprd_uart_port *sprd_port[UART_NR_MAX]; > @@ -134,6 +144,18 @@ static int sprd_ports_num; > static int sprd_start_dma_rx(struct uart_port *port); > static int sprd_tx_dma_config(struct uart_port *port); > > +static const struct sprd_uart_data sc9836_data = { > + .timeout_ien = SPRD_IEN_TIMEOUT, > + .timeout_iclr = SPRD_ICLR_TIMEOUT, > + .timeout_imsr = SPRD_IMSR_TIMEOUT, > +}; > + > +static const struct sprd_uart_data sc9632_data = { > + .timeout_ien = SPRD_IEN_DATA_TIMEOUT, > + .timeout_iclr = SPRD_ICLR_DATA_TIMEOUT, > + .timeout_imsr = SPRD_IMSR_DATA_TIMEOUT, > +}; > + > static inline unsigned int serial_in(struct uart_port *port, > unsigned int offset) > { > @@ -637,6 +659,8 @@ static irqreturn_t sprd_handle_irq(int irq, void *dev_id) > { > struct uart_port *port = dev_id; > unsigned int ims; > + struct sprd_uart_port *sp = > + container_of(port, struct sprd_uart_port, port); > > uart_port_lock(port); > > @@ -647,14 +671,14 @@ static irqreturn_t sprd_handle_irq(int irq, void *dev_id) > return IRQ_NONE; > } > > - if (ims & SPRD_IMSR_TIMEOUT) > - serial_out(port, SPRD_ICLR, SPRD_ICLR_TIMEOUT); > + if (ims & sp->pdata->timeout_imsr) > + serial_out(port, SPRD_ICLR, sp->pdata->timeout_iclr); > > if (ims & SPRD_IMSR_BREAK_DETECT) > serial_out(port, SPRD_ICLR, SPRD_IMSR_BREAK_DETECT); > > if (ims & (SPRD_IMSR_RX_FIFO_FULL | SPRD_IMSR_BREAK_DETECT | > - SPRD_IMSR_TIMEOUT)) > + sp->pdata->timeout_imsr)) > sprd_rx(port); > > if (ims & SPRD_IMSR_TX_FIFO_EMPTY) > @@ -729,7 +753,7 @@ static int sprd_startup(struct uart_port *port) > /* enable interrupt */ > uart_port_lock_irqsave(port, &flags); > ien = serial_in(port, SPRD_IEN); > - ien |= SPRD_IEN_BREAK_DETECT | SPRD_IEN_TIMEOUT; > + ien |= SPRD_IEN_BREAK_DETECT | sp->pdata->timeout_ien; > if (!sp->rx_dma.enable) > ien |= SPRD_IEN_RX_FULL; > serial_out(port, SPRD_IEN, ien); > @@ -1184,6 +1208,12 @@ static int sprd_probe(struct platform_device *pdev) > > up->mapbase = res->start; > > + sport->pdata = of_device_get_match_data(&pdev->dev); > + if (!sport->pdata) { > + dev_err(&pdev->dev, "get match data failed!\n"); > + return -EINVAL; > + } > + > irq = platform_get_irq(pdev, 0); > if (irq < 0) > return irq; > @@ -1248,7 +1278,8 @@ static int sprd_resume(struct device *dev) > static SIMPLE_DEV_PM_OPS(sprd_pm_ops, sprd_suspend, sprd_resume); > > static const struct of_device_id serial_ids[] = { > - {.compatible = "sprd,sc9836-uart",}, > + {.compatible = "sprd,sc9836-uart", .data = &sc9836_data}, > + {.compatible = "sprd,sc9632-uart", .data = &sc9632_data}, > {} > }; > MODULE_DEVICE_TABLE(of, serial_ids); > -- > 2.34.1 > ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH V2 2/2] serial: sprd: Add support for sc9632 2025-01-13 7:12 ` Chunyan Zhang @ 2025-01-14 2:25 ` wenhua lin 0 siblings, 0 replies; 9+ messages in thread From: wenhua lin @ 2025-01-14 2:25 UTC (permalink / raw) To: Chunyan Zhang Cc: Wenhua Lin, Greg Kroah-Hartman, Jiri Slaby, Bartosz Golaszewski, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Orson Zhai, Baolin Wang, Cixi Geng, linux-kernel, linux-serial, devicetree, Xiongpeng Wu, Zhaochen Su, Zhirong Qiu On Mon, Jan 13, 2025 at 3:13 PM Chunyan Zhang <zhang.lyra@gmail.com> wrote: > > On Mon, 13 Jan 2025 at 11:20, Wenhua Lin <Wenhua.Lin@unisoc.com> wrote: > > > > Due to the platform's new project uart ip upgrade, > > the new project's timeout interrupt needs to use bit17 > > while other projects' timeout interrupt needs to use > > bit13, using private data to adapt and be compatible > > with all projects. > > > > It seems that this patch has got merged into the last release, why do > you resend this? Hi Chunyan: I'm sorry, I didn't realize that this commit had already been merged. I resubmitted PATCH V2 to fix the issue with tags[1]. I made a mistake. Thank you for reminding me. Thanks > > > Signed-off-by: Wenhua Lin <Wenhua.Lin@unisoc.com> > > --- > > drivers/tty/serial/sprd_serial.c | 41 ++++++++++++++++++++++++++++---- > > 1 file changed, 36 insertions(+), 5 deletions(-) > > > > diff --git a/drivers/tty/serial/sprd_serial.c b/drivers/tty/serial/sprd_serial.c > > index 3fc54cc02a1f..882580c3cf37 100644 > > --- a/drivers/tty/serial/sprd_serial.c > > +++ b/drivers/tty/serial/sprd_serial.c > > @@ -53,10 +53,12 @@ > > #define SPRD_IEN_TX_EMPTY BIT(1) > > #define SPRD_IEN_BREAK_DETECT BIT(7) > > #define SPRD_IEN_TIMEOUT BIT(13) > > +#define SPRD_IEN_DATA_TIMEOUT BIT(17) > > > > /* interrupt clear register */ > > #define SPRD_ICLR 0x0014 > > #define SPRD_ICLR_TIMEOUT BIT(13) > > +#define SPRD_ICLR_DATA_TIMEOUT BIT(17) > > > > /* line control register */ > > #define SPRD_LCR 0x0018 > > @@ -102,6 +104,7 @@ > > #define SPRD_IMSR_TX_FIFO_EMPTY BIT(1) > > #define SPRD_IMSR_BREAK_DETECT BIT(7) > > #define SPRD_IMSR_TIMEOUT BIT(13) > > +#define SPRD_IMSR_DATA_TIMEOUT BIT(17) > > #define SPRD_DEFAULT_SOURCE_CLK 26000000 > > > > #define SPRD_RX_DMA_STEP 1 > > @@ -118,6 +121,12 @@ struct sprd_uart_dma { > > bool enable; > > }; > > > > +struct sprd_uart_data { > > + unsigned int timeout_ien; > > + unsigned int timeout_iclr; > > + unsigned int timeout_imsr; > > +}; > > + > > struct sprd_uart_port { > > struct uart_port port; > > char name[16]; > > @@ -126,6 +135,7 @@ struct sprd_uart_port { > > struct sprd_uart_dma rx_dma; > > dma_addr_t pos; > > unsigned char *rx_buf_tail; > > + const struct sprd_uart_data *pdata; > > }; > > > > static struct sprd_uart_port *sprd_port[UART_NR_MAX]; > > @@ -134,6 +144,18 @@ static int sprd_ports_num; > > static int sprd_start_dma_rx(struct uart_port *port); > > static int sprd_tx_dma_config(struct uart_port *port); > > > > +static const struct sprd_uart_data sc9836_data = { > > + .timeout_ien = SPRD_IEN_TIMEOUT, > > + .timeout_iclr = SPRD_ICLR_TIMEOUT, > > + .timeout_imsr = SPRD_IMSR_TIMEOUT, > > +}; > > + > > +static const struct sprd_uart_data sc9632_data = { > > + .timeout_ien = SPRD_IEN_DATA_TIMEOUT, > > + .timeout_iclr = SPRD_ICLR_DATA_TIMEOUT, > > + .timeout_imsr = SPRD_IMSR_DATA_TIMEOUT, > > +}; > > + > > static inline unsigned int serial_in(struct uart_port *port, > > unsigned int offset) > > { > > @@ -637,6 +659,8 @@ static irqreturn_t sprd_handle_irq(int irq, void *dev_id) > > { > > struct uart_port *port = dev_id; > > unsigned int ims; > > + struct sprd_uart_port *sp = > > + container_of(port, struct sprd_uart_port, port); > > > > uart_port_lock(port); > > > > @@ -647,14 +671,14 @@ static irqreturn_t sprd_handle_irq(int irq, void *dev_id) > > return IRQ_NONE; > > } > > > > - if (ims & SPRD_IMSR_TIMEOUT) > > - serial_out(port, SPRD_ICLR, SPRD_ICLR_TIMEOUT); > > + if (ims & sp->pdata->timeout_imsr) > > + serial_out(port, SPRD_ICLR, sp->pdata->timeout_iclr); > > > > if (ims & SPRD_IMSR_BREAK_DETECT) > > serial_out(port, SPRD_ICLR, SPRD_IMSR_BREAK_DETECT); > > > > if (ims & (SPRD_IMSR_RX_FIFO_FULL | SPRD_IMSR_BREAK_DETECT | > > - SPRD_IMSR_TIMEOUT)) > > + sp->pdata->timeout_imsr)) > > sprd_rx(port); > > > > if (ims & SPRD_IMSR_TX_FIFO_EMPTY) > > @@ -729,7 +753,7 @@ static int sprd_startup(struct uart_port *port) > > /* enable interrupt */ > > uart_port_lock_irqsave(port, &flags); > > ien = serial_in(port, SPRD_IEN); > > - ien |= SPRD_IEN_BREAK_DETECT | SPRD_IEN_TIMEOUT; > > + ien |= SPRD_IEN_BREAK_DETECT | sp->pdata->timeout_ien; > > if (!sp->rx_dma.enable) > > ien |= SPRD_IEN_RX_FULL; > > serial_out(port, SPRD_IEN, ien); > > @@ -1184,6 +1208,12 @@ static int sprd_probe(struct platform_device *pdev) > > > > up->mapbase = res->start; > > > > + sport->pdata = of_device_get_match_data(&pdev->dev); > > + if (!sport->pdata) { > > + dev_err(&pdev->dev, "get match data failed!\n"); > > + return -EINVAL; > > + } > > + > > irq = platform_get_irq(pdev, 0); > > if (irq < 0) > > return irq; > > @@ -1248,7 +1278,8 @@ static int sprd_resume(struct device *dev) > > static SIMPLE_DEV_PM_OPS(sprd_pm_ops, sprd_suspend, sprd_resume); > > > > static const struct of_device_id serial_ids[] = { > > - {.compatible = "sprd,sc9836-uart",}, > > + {.compatible = "sprd,sc9836-uart", .data = &sc9836_data}, > > + {.compatible = "sprd,sc9632-uart", .data = &sc9632_data}, > > {} > > }; > > MODULE_DEVICE_TABLE(of, serial_ids); > > -- > > 2.34.1 > > ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH V2 0/2] serial: sprd: Modification of UNISOC Platform UART Driver 2025-01-13 3:19 [PATCH V2 0/2] serial: sprd: Modification of UNISOC Platform UART Driver Wenhua Lin 2025-01-13 3:19 ` [PATCH V2 1/2] dt-bindings: serial: Add a new compatible string for UMS9632 Wenhua Lin 2025-01-13 3:19 ` [PATCH V2 2/2] serial: sprd: Add support for sc9632 Wenhua Lin @ 2025-01-13 6:05 ` Baolin Wang 2 siblings, 0 replies; 9+ messages in thread From: Baolin Wang @ 2025-01-13 6:05 UTC (permalink / raw) To: Wenhua Lin, Greg Kroah-Hartman, Jiri Slaby, Bartosz Golaszewski, Rob Herring, Krzysztof Kozlowski, Conor Dooley Cc: Orson Zhai, Chunyan Zhang, Cixi Geng, linux-kernel, linux-serial, devicetree, wenhua lin, Xiongpeng Wu, Zhaochen Su, Zhirong Qiu On 2025/1/13 11:19, Wenhua Lin wrote: > In order to be compatible with UNISOC's new UART IP, the UART driver uses > private data for adaptation. Patch1 adds UART timeout interrupt BIT17, and > the old project uses BIT13. In order to be compatible with all projects, > private data is used for adaptation. Patch2 adds a new compatible string. > > Change in V2: > -Change commit message in PATCH 2/2. You did NOT change any commit messages compared to V1[1]! Please write correct commit messages. [1] https://lore.kernel.org/lkml/20241113110516.2166328-2-Wenhua.Lin@unisoc.com/ > -Add a new items supports sc9832 compatible string in PATCH 2/2. > > Wenhua Lin (2): > dt-bindings: serial: Add a new compatible string for UMS9632 > serial: sprd: Add support for sc9632 > > .../devicetree/bindings/serial/sprd-uart.yaml | 5 +++ > drivers/tty/serial/sprd_serial.c | 41 ++++++++++++++++--- > 2 files changed, 41 insertions(+), 5 deletions(-) > ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2025-01-14 2:25 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-01-13 3:19 [PATCH V2 0/2] serial: sprd: Modification of UNISOC Platform UART Driver Wenhua Lin 2025-01-13 3:19 ` [PATCH V2 1/2] dt-bindings: serial: Add a new compatible string for UMS9632 Wenhua Lin 2025-01-13 7:53 ` Krzysztof Kozlowski 2025-01-13 3:19 ` [PATCH V2 2/2] serial: sprd: Add support for sc9632 Wenhua Lin 2025-01-13 6:07 ` Baolin Wang 2025-01-14 2:03 ` wenhua lin 2025-01-13 7:12 ` Chunyan Zhang 2025-01-14 2:25 ` wenhua lin 2025-01-13 6:05 ` [PATCH V2 0/2] serial: sprd: Modification of UNISOC Platform UART Driver Baolin Wang
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).