* [PATCH 0/4] serial: sh-sci: Clean up previous RZ/A2 support
@ 2018-07-27 21:09 Chris Brandt
2018-07-27 21:09 ` [PATCH 1/4] serial: sh-sci: Improve interrupts description Chris Brandt
` (3 more replies)
0 siblings, 4 replies; 16+ messages in thread
From: Chris Brandt @ 2018-07-27 21:09 UTC (permalink / raw)
To: Greg Kroah-Hartman, Rob Herring, Mark Rutland, Geert Uytterhoeven
Cc: linux-serial, devicetree, linux-renesas-soc, Simon Horman, Chris Brandt
This patch series doesn't really provide much new functionality, but
rather provides a cleaner solution for adding RZ/A2 support.
Chris Brandt (4):
serial: sh-sci: Improve interrupts description
serial: sh-sci: Allow for compressed SCIF address
serial: sh-sci: Remove SCIx_RZ_SCIFA_REGTYPE
serial: sh-sci: Improve support for separate TEI and DRI interrupts
.../bindings/serial/renesas,sci-serial.txt | 16 ++-
drivers/tty/serial/sh-sci.c | 143 ++++++++-------------
include/linux/serial_sci.h | 1 -
3 files changed, 68 insertions(+), 92 deletions(-)
--
2.16.1
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH 1/4] serial: sh-sci: Improve interrupts description
2018-07-27 21:09 [PATCH 0/4] serial: sh-sci: Clean up previous RZ/A2 support Chris Brandt
@ 2018-07-27 21:09 ` Chris Brandt
2018-07-27 21:09 ` [PATCH 2/4] serial: sh-sci: Allow for compressed SCIF address Chris Brandt
` (2 subsequent siblings)
3 siblings, 0 replies; 16+ messages in thread
From: Chris Brandt @ 2018-07-27 21:09 UTC (permalink / raw)
To: Greg Kroah-Hartman, Rob Herring, Mark Rutland, Geert Uytterhoeven
Cc: linux-serial, devicetree, linux-renesas-soc, Simon Horman, Chris Brandt
Describe interrupts property in more detail, especially when there are
more than one interrupt.
Signed-off-by: Chris Brandt <chris.brandt@renesas.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
---
.../devicetree/bindings/serial/renesas,sci-serial.txt | 16 +++++++++++++++-
1 file changed, 15 insertions(+), 1 deletion(-)
diff --git a/Documentation/devicetree/bindings/serial/renesas,sci-serial.txt b/Documentation/devicetree/bindings/serial/renesas,sci-serial.txt
index a7cda6550100..eaca9da79d83 100644
--- a/Documentation/devicetree/bindings/serial/renesas,sci-serial.txt
+++ b/Documentation/devicetree/bindings/serial/renesas,sci-serial.txt
@@ -73,7 +73,21 @@ Required properties:
family-specific and/or generic versions.
- reg: Base address and length of the I/O registers used by the UART.
- - interrupts: Must contain an interrupt-specifier for the SCIx interrupt.
+ - interrupts: Must contain one or more interrupt-specifiers for the SCIx.
+ If a single interrupt is expressed, then all events are
+ multiplexed into this single interrupt.
+
+ If multiple interrupts are provided by the hardware, the order
+ in which the interrupts are listed must match order below. Note
+ that some HW interrupt events may be muxed together resulting
+ in duplicate entries.
+ The interrupt order is as follows:
+ 1. Error (ERI)
+ 2. Receive buffer full (RXI)
+ 3. Transmit buffer empty (TXI)
+ 4. Break (BRI)
+ 5. Data Ready (DRI)
+ 6. Transmit End (TEI)
- clocks: Must contain a phandle and clock-specifier pair for each entry
in clock-names.
--
2.16.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH 2/4] serial: sh-sci: Allow for compressed SCIF address
2018-07-27 21:09 [PATCH 0/4] serial: sh-sci: Clean up previous RZ/A2 support Chris Brandt
2018-07-27 21:09 ` [PATCH 1/4] serial: sh-sci: Improve interrupts description Chris Brandt
@ 2018-07-27 21:09 ` Chris Brandt
2018-07-29 11:11 ` Geert Uytterhoeven
2018-07-27 21:09 ` [PATCH 3/4] serial: sh-sci: Remove SCIx_RZ_SCIFA_REGTYPE Chris Brandt
2018-07-27 21:09 ` [PATCH 4/4] serial: sh-sci: Improve support for separate TEI and DRI interrupts Chris Brandt
3 siblings, 1 reply; 16+ messages in thread
From: Chris Brandt @ 2018-07-27 21:09 UTC (permalink / raw)
To: Greg Kroah-Hartman, Rob Herring, Mark Rutland, Geert Uytterhoeven
Cc: linux-serial, devicetree, linux-renesas-soc, Simon Horman, Chris Brandt
Some devices with SCIx_SH4_SCIF_REGTYPE have no space between registers.
Use the register area size to determine the spacing between register.
Signed-off-by: Chris Brandt <chris.brandt@renesas.com>
---
drivers/tty/serial/sh-sci.c | 22 +++++++++++++---------
1 file changed, 13 insertions(+), 9 deletions(-)
diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c
index 6ff6f2bf3b9b..138296ec9a7d 100644
--- a/drivers/tty/serial/sh-sci.c
+++ b/drivers/tty/serial/sh-sci.c
@@ -348,15 +348,15 @@ static const struct sci_port_params sci_port_params[SCIx_NR_REGTYPES] = {
[SCIx_SH4_SCIF_REGTYPE] = {
.regs = {
[SCSMR] = { 0x00, 16 },
- [SCBRR] = { 0x04, 8 },
- [SCSCR] = { 0x08, 16 },
- [SCxTDR] = { 0x0c, 8 },
- [SCxSR] = { 0x10, 16 },
- [SCxRDR] = { 0x14, 8 },
- [SCFCR] = { 0x18, 16 },
- [SCFDR] = { 0x1c, 16 },
- [SCSPTR] = { 0x20, 16 },
- [SCLSR] = { 0x24, 16 },
+ [SCBRR] = { 0x02, 8 },
+ [SCSCR] = { 0x04, 16 },
+ [SCxTDR] = { 0x06, 8 },
+ [SCxSR] = { 0x08, 16 },
+ [SCxRDR] = { 0x0a, 8 },
+ [SCFCR] = { 0x0c, 16 },
+ [SCFDR] = { 0x0e, 16 },
+ [SCSPTR] = { 0x10, 16 },
+ [SCLSR] = { 0x12, 16 },
},
.fifosize = 16,
.overrun_reg = SCLSR,
@@ -2939,6 +2939,10 @@ static int sci_init_single(struct platform_device *dev,
port->regshift = 1;
}
+ if (p->regtype == SCIx_SH4_SCIF_REGTYPE)
+ if (sci_port->reg_size >= 0x20)
+ port->regshift = 1;
+
/*
* The UART port needs an IRQ value, so we peg this to the RX IRQ
* for the multi-IRQ ports, which is where we are primarily
--
2.16.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH 3/4] serial: sh-sci: Remove SCIx_RZ_SCIFA_REGTYPE
2018-07-27 21:09 [PATCH 0/4] serial: sh-sci: Clean up previous RZ/A2 support Chris Brandt
2018-07-27 21:09 ` [PATCH 1/4] serial: sh-sci: Improve interrupts description Chris Brandt
2018-07-27 21:09 ` [PATCH 2/4] serial: sh-sci: Allow for compressed SCIF address Chris Brandt
@ 2018-07-27 21:09 ` Chris Brandt
2018-07-30 9:03 ` Geert Uytterhoeven
2018-07-27 21:09 ` [PATCH 4/4] serial: sh-sci: Improve support for separate TEI and DRI interrupts Chris Brandt
3 siblings, 1 reply; 16+ messages in thread
From: Chris Brandt @ 2018-07-27 21:09 UTC (permalink / raw)
To: Greg Kroah-Hartman, Rob Herring, Mark Rutland, Geert Uytterhoeven
Cc: linux-serial, devicetree, linux-renesas-soc, Simon Horman, Chris Brandt
There is no more need for SCIx_RZ_SCIFA_REGTYPE now that
SCIx_SH4_SCIF_REGTYPE can provide the same register/address definitions.
Also, R7S9210 no longer needs a special compatible since the standard
"renesas,scif" will work just fine.
Signed-off-by: Chris Brandt <chris.brandt@renesas.com>
---
drivers/tty/serial/sh-sci.c | 31 -------------------------------
include/linux/serial_sci.h | 1 -
2 files changed, 32 deletions(-)
diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c
index 138296ec9a7d..cb4f7d3e7192 100644
--- a/drivers/tty/serial/sh-sci.c
+++ b/drivers/tty/serial/sh-sci.c
@@ -293,33 +293,6 @@ static const struct sci_port_params sci_port_params[SCIx_NR_REGTYPES] = {
.error_clear = SCIF_ERROR_CLEAR,
},
- /*
- * The "SCIFA" that is in RZ/T and RZ/A2.
- * It looks like a normal SCIF with FIFO data, but with a
- * compressed address space. Also, the break out of interrupts
- * are different: ERI/BRI, RXI, TXI, TEI, DRI.
- */
- [SCIx_RZ_SCIFA_REGTYPE] = {
- .regs = {
- [SCSMR] = { 0x00, 16 },
- [SCBRR] = { 0x02, 8 },
- [SCSCR] = { 0x04, 16 },
- [SCxTDR] = { 0x06, 8 },
- [SCxSR] = { 0x08, 16 },
- [SCxRDR] = { 0x0A, 8 },
- [SCFCR] = { 0x0C, 16 },
- [SCFDR] = { 0x0E, 16 },
- [SCSPTR] = { 0x10, 16 },
- [SCLSR] = { 0x12, 16 },
- },
- .fifosize = 16,
- .overrun_reg = SCLSR,
- .overrun_mask = SCLSR_ORER,
- .sampling_rate_mask = SCI_SR(32),
- .error_mask = SCIF_DEFAULT_ERROR_MASK,
- .error_clear = SCIF_ERROR_CLEAR,
- },
-
/*
* Common SH-3 SCIF definitions.
*/
@@ -3147,10 +3120,6 @@ static const struct of_device_id of_sci_match[] = {
.compatible = "renesas,scif-r7s72100",
.data = SCI_OF_DATA(PORT_SCIF, SCIx_SH2_SCIF_FIFODATA_REGTYPE),
},
- {
- .compatible = "renesas,scif-r7s9210",
- .data = SCI_OF_DATA(PORT_SCIF, SCIx_RZ_SCIFA_REGTYPE),
- },
/* Family-specific types */
{
.compatible = "renesas,rcar-gen1-scif",
diff --git a/include/linux/serial_sci.h b/include/linux/serial_sci.h
index 1c89611e0e06..c0e795d95477 100644
--- a/include/linux/serial_sci.h
+++ b/include/linux/serial_sci.h
@@ -36,7 +36,6 @@ enum {
SCIx_SH4_SCIF_FIFODATA_REGTYPE,
SCIx_SH7705_SCIF_REGTYPE,
SCIx_HSCIF_REGTYPE,
- SCIx_RZ_SCIFA_REGTYPE,
SCIx_NR_REGTYPES,
};
--
2.16.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH 4/4] serial: sh-sci: Improve support for separate TEI and DRI interrupts
2018-07-27 21:09 [PATCH 0/4] serial: sh-sci: Clean up previous RZ/A2 support Chris Brandt
` (2 preceding siblings ...)
2018-07-27 21:09 ` [PATCH 3/4] serial: sh-sci: Remove SCIx_RZ_SCIFA_REGTYPE Chris Brandt
@ 2018-07-27 21:09 ` Chris Brandt
2018-07-30 9:08 ` Geert Uytterhoeven
3 siblings, 1 reply; 16+ messages in thread
From: Chris Brandt @ 2018-07-27 21:09 UTC (permalink / raw)
To: Greg Kroah-Hartman, Rob Herring, Mark Rutland, Geert Uytterhoeven
Cc: linux-serial, devicetree, linux-renesas-soc, Simon Horman, Chris Brandt
Some SCIF versions mux error and break interrupts together and then provide
a separate interrupt ID for just TEI/DRI.
Allow all 6 types of interrupts to be specified via platform data (or DT)
and for any signals that are muxed together (have the same interrupt
number) simply register one handler.
Signed-off-by: Chris Brandt <chris.brandt@renesas.com>
---
drivers/tty/serial/sh-sci.c | 90 ++++++++++++++++++++-------------------------
1 file changed, 40 insertions(+), 50 deletions(-)
diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c
index cb4f7d3e7192..a3519e8e4d13 100644
--- a/drivers/tty/serial/sh-sci.c
+++ b/drivers/tty/serial/sh-sci.c
@@ -65,7 +65,8 @@ enum {
SCIx_RXI_IRQ,
SCIx_TXI_IRQ,
SCIx_BRI_IRQ,
- SCIx_TEIDRI_IRQ,
+ SCIx_DRI_IRQ,
+ SCIx_TEI_IRQ,
SCIx_NR_IRQS,
SCIx_MUX_IRQ = SCIx_NR_IRQS, /* special case */
@@ -77,9 +78,6 @@ enum {
((port)->irqs[SCIx_ERI_IRQ] && \
((port)->irqs[SCIx_RXI_IRQ] < 0))
-#define SCIx_TEIDRI_IRQ_EXISTS(port) \
- ((port)->irqs[SCIx_TEIDRI_IRQ] > 0)
-
enum SCI_CLKS {
SCI_FCK, /* Functional Clock */
SCI_SCK, /* Optional External Clock */
@@ -1685,14 +1683,23 @@ static irqreturn_t sci_tx_interrupt(int irq, void *ptr)
return IRQ_HANDLED;
}
-static irqreturn_t sci_br_interrupt(int irq, void *ptr);
+static irqreturn_t sci_br_interrupt(int irq, void *ptr)
+{
+ struct uart_port *port = ptr;
+
+ /* Handle BREAKs */
+ sci_handle_breaks(port);
+ sci_clear_SCxSR(port, SCxSR_BREAK_CLEAR(port));
+
+ return IRQ_HANDLED;
+}
static irqreturn_t sci_er_interrupt(int irq, void *ptr)
{
struct uart_port *port = ptr;
struct sci_port *s = to_sci_port(port);
- if (SCIx_TEIDRI_IRQ_EXISTS(s)) {
+ if (s->irqs[SCIx_ERI_IRQ] == s->irqs[SCIx_BRI_IRQ]) {
/* Break and Error interrupts are muxed */
unsigned short ssr_status = serial_port_in(port, SCxSR);
@@ -1727,17 +1734,6 @@ static irqreturn_t sci_er_interrupt(int irq, void *ptr)
return IRQ_HANDLED;
}
-static irqreturn_t sci_br_interrupt(int irq, void *ptr)
-{
- struct uart_port *port = ptr;
-
- /* Handle BREAKs */
- sci_handle_breaks(port);
- sci_clear_SCxSR(port, SCxSR_BREAK_CLEAR(port));
-
- return IRQ_HANDLED;
-}
-
static irqreturn_t sci_mpxed_interrupt(int irq, void *ptr)
{
unsigned short ssr_status, scr_status, err_enabled, orer_status = 0;
@@ -1811,6 +1807,16 @@ static const struct sci_irq_desc {
.handler = sci_br_interrupt,
},
+ [SCIx_DRI_IRQ] = {
+ .desc = "rx ready",
+ .handler = sci_rx_interrupt,
+ },
+
+ [SCIx_TEI_IRQ] = {
+ .desc = "tx end",
+ .handler = sci_tx_interrupt,
+ },
+
/*
* Special muxed handler.
*/
@@ -1823,12 +1829,19 @@ static const struct sci_irq_desc {
static int sci_request_irq(struct sci_port *port)
{
struct uart_port *up = &port->port;
- int i, j, ret = 0;
+ int i, j, w, ret = 0;
for (i = j = 0; i < SCIx_NR_IRQS; i++, j++) {
const struct sci_irq_desc *desc;
int irq;
+ /* Check if already registered (muxed) */
+ for (w = 0; w < i; w++)
+ if (port->irqs[w] == port->irqs[i])
+ w = i + 1;
+ if (w > i)
+ continue;
+
if (SCIx_IRQ_IS_MUXED(port)) {
i = SCIx_MUX_IRQ;
irq = up->irq;
@@ -1845,31 +1858,8 @@ static int sci_request_irq(struct sci_port *port)
desc = sci_irq_desc + i;
port->irqstr[j] = NULL;
- if (SCIx_TEIDRI_IRQ_EXISTS(port)) {
- /*
- * ERI and BRI are muxed, just register ERI and
- * ignore BRI.
- * TEI and DRI are muxed, but only DRI
- * is enabled, so use RXI handler
- */
- if (i == SCIx_ERI_IRQ)
- port->irqstr[j] = kasprintf(GFP_KERNEL,
- "%s:err + break",
- dev_name(up->dev));
- if (i == SCIx_BRI_IRQ)
- continue;
- if (i == SCIx_TEIDRI_IRQ) {
- port->irqstr[j] = kasprintf(GFP_KERNEL,
- "%s:tx end + rx ready",
- dev_name(up->dev));
- desc = sci_irq_desc + SCIx_RXI_IRQ;
- }
- }
-
- if (!port->irqstr[j])
- port->irqstr[j] = kasprintf(GFP_KERNEL, "%s:%s",
- dev_name(up->dev),
- desc->desc);
+ port->irqstr[j] = kasprintf(GFP_KERNEL, "%s:%s",
+ dev_name(up->dev), desc->desc);
if (!port->irqstr[j]) {
ret = -ENOMEM;
goto out_nomem;
@@ -2842,17 +2832,17 @@ static int sci_init_single(struct platform_device *dev,
/* The SCI generates several interrupts. They can be muxed together or
* connected to different interrupt lines. In the muxed case only one
- * interrupt resource is specified. In the non-muxed case three or four
- * interrupt resources are specified, as the BRI interrupt is optional.
+ * interrupt resource is specified as there is only one interrupt ID.
+ * In the non-muxed case, up to 6 interrupt signals might be generated
+ * from the SCI, however those signals might have their own individual
+ * interrupt ID numbers, or muxed together with another interrupt.
*/
if (sci_port->irqs[0] < 0)
return -ENXIO;
- if (sci_port->irqs[1] < 0) {
- sci_port->irqs[1] = sci_port->irqs[0];
- sci_port->irqs[2] = sci_port->irqs[0];
- sci_port->irqs[3] = sci_port->irqs[0];
- }
+ if (sci_port->irqs[1] < 0)
+ for (i = 1; i < ARRAY_SIZE(sci_port->irqs) - 1; i++)
+ sci_port->irqs[i] = sci_port->irqs[0];
sci_port->params = sci_probe_regmap(p);
if (unlikely(sci_port->params == NULL))
--
2.16.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [PATCH 2/4] serial: sh-sci: Allow for compressed SCIF address
2018-07-27 21:09 ` [PATCH 2/4] serial: sh-sci: Allow for compressed SCIF address Chris Brandt
@ 2018-07-29 11:11 ` Geert Uytterhoeven
2018-07-30 8:05 ` Geert Uytterhoeven
0 siblings, 1 reply; 16+ messages in thread
From: Geert Uytterhoeven @ 2018-07-29 11:11 UTC (permalink / raw)
To: Chris Brandt
Cc: Greg KH, Rob Herring, Mark Rutland, Geert Uytterhoeven,
open list:SERIAL DRIVERS,
open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS,
Linux-Renesas, Simon Horman, Rob Landley
Hi Chris,
On Fri, Jul 27, 2018 at 11:09 PM Chris Brandt <chris.brandt@renesas.com> wrote:
> Some devices with SCIx_SH4_SCIF_REGTYPE have no space between registers.
> Use the register area size to determine the spacing between register.
>
> Signed-off-by: Chris Brandt <chris.brandt@renesas.com>
> ---
> drivers/tty/serial/sh-sci.c | 22 +++++++++++++---------
> 1 file changed, 13 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c
> index 6ff6f2bf3b9b..138296ec9a7d 100644
> --- a/drivers/tty/serial/sh-sci.c
> +++ b/drivers/tty/serial/sh-sci.c
> @@ -348,15 +348,15 @@ static const struct sci_port_params sci_port_params[SCIx_NR_REGTYPES] = {
> [SCIx_SH4_SCIF_REGTYPE] = {
> .regs = {
> [SCSMR] = { 0x00, 16 },
> - [SCBRR] = { 0x04, 8 },
> - [SCSCR] = { 0x08, 16 },
> - [SCxTDR] = { 0x0c, 8 },
> - [SCxSR] = { 0x10, 16 },
> - [SCxRDR] = { 0x14, 8 },
> - [SCFCR] = { 0x18, 16 },
> - [SCFDR] = { 0x1c, 16 },
> - [SCSPTR] = { 0x20, 16 },
> - [SCLSR] = { 0x24, 16 },
> + [SCBRR] = { 0x02, 8 },
> + [SCSCR] = { 0x04, 16 },
> + [SCxTDR] = { 0x06, 8 },
> + [SCxSR] = { 0x08, 16 },
> + [SCxRDR] = { 0x0a, 8 },
> + [SCFCR] = { 0x0c, 16 },
> + [SCFDR] = { 0x0e, 16 },
> + [SCSPTR] = { 0x10, 16 },
> + [SCLSR] = { 0x12, 16 },
> },
> .fifosize = 16,
> .overrun_reg = SCLSR,
> @@ -2939,6 +2939,10 @@ static int sci_init_single(struct platform_device *dev,
> port->regshift = 1;
> }
>
> + if (p->regtype == SCIx_SH4_SCIF_REGTYPE)
> + if (sci_port->reg_size >= 0x20)
> + port->regshift = 1;
I've accidentally discovered this breaks SCIF on SH7751R2D (QEMU), as the
board code doesn't fill in regtype, so it is 0 = SCIx_PROBE_REGTYPE.
The proper (default) regtype of SCIx_SH4_SCIF_REGTYPE is derived by
sci_probe_regmap(). However, that value is never fed back to sci_init_single(),
as plat_sci_port is const. So regshift ends up being wrong.
I made it work by changing the check to:
- if (p->regtype == SCIx_SH4_SCIF_REGTYPE)
+ if (p->regtype == SCIx_SH4_SCIF_REGTYPE ||
+ (p->regtype == SCIx_PROBE_REGTYPE && port->type == PORT_SCIF))
Perhaps there's a better way?
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 2/4] serial: sh-sci: Allow for compressed SCIF address
2018-07-29 11:11 ` Geert Uytterhoeven
@ 2018-07-30 8:05 ` Geert Uytterhoeven
2018-07-30 12:17 ` Chris Brandt
0 siblings, 1 reply; 16+ messages in thread
From: Geert Uytterhoeven @ 2018-07-30 8:05 UTC (permalink / raw)
To: Chris Brandt
Cc: Greg KH, Rob Herring, Mark Rutland, Geert Uytterhoeven,
open list:SERIAL DRIVERS,
open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS,
Linux-Renesas, Simon Horman, Rob Landley
Hi Chris,
On Sun, Jul 29, 2018 at 1:11 PM Geert Uytterhoeven <geert@linux-m68k.org> wrote:
> On Fri, Jul 27, 2018 at 11:09 PM Chris Brandt <chris.brandt@renesas.com> wrote:
> > Some devices with SCIx_SH4_SCIF_REGTYPE have no space between registers.
> > Use the register area size to determine the spacing between register.
> >
> > Signed-off-by: Chris Brandt <chris.brandt@renesas.com>
> > ---
> > drivers/tty/serial/sh-sci.c | 22 +++++++++++++---------
> > 1 file changed, 13 insertions(+), 9 deletions(-)
> >
> > diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c
> > index 6ff6f2bf3b9b..138296ec9a7d 100644
> > --- a/drivers/tty/serial/sh-sci.c
> > +++ b/drivers/tty/serial/sh-sci.c
> > @@ -348,15 +348,15 @@ static const struct sci_port_params sci_port_params[SCIx_NR_REGTYPES] = {
> > [SCIx_SH4_SCIF_REGTYPE] = {
> > .regs = {
> > [SCSMR] = { 0x00, 16 },
> > - [SCBRR] = { 0x04, 8 },
> > - [SCSCR] = { 0x08, 16 },
> > - [SCxTDR] = { 0x0c, 8 },
> > - [SCxSR] = { 0x10, 16 },
> > - [SCxRDR] = { 0x14, 8 },
> > - [SCFCR] = { 0x18, 16 },
> > - [SCFDR] = { 0x1c, 16 },
> > - [SCSPTR] = { 0x20, 16 },
> > - [SCLSR] = { 0x24, 16 },
> > + [SCBRR] = { 0x02, 8 },
> > + [SCSCR] = { 0x04, 16 },
> > + [SCxTDR] = { 0x06, 8 },
> > + [SCxSR] = { 0x08, 16 },
> > + [SCxRDR] = { 0x0a, 8 },
> > + [SCFCR] = { 0x0c, 16 },
> > + [SCFDR] = { 0x0e, 16 },
> > + [SCSPTR] = { 0x10, 16 },
> > + [SCLSR] = { 0x12, 16 },
> > },
> > .fifosize = 16,
> > .overrun_reg = SCLSR,
> > @@ -2939,6 +2939,10 @@ static int sci_init_single(struct platform_device *dev,
> > port->regshift = 1;
> > }
> >
> > + if (p->regtype == SCIx_SH4_SCIF_REGTYPE)
> > + if (sci_port->reg_size >= 0x20)
> > + port->regshift = 1;
>
> I've accidentally discovered this breaks SCIF on SH7751R2D (QEMU), as the
> board code doesn't fill in regtype, so it is 0 = SCIx_PROBE_REGTYPE.
> The proper (default) regtype of SCIx_SH4_SCIF_REGTYPE is derived by
> sci_probe_regmap(). However, that value is never fed back to sci_init_single(),
> as plat_sci_port is const. So regshift ends up being wrong.
>
> I made it work by changing the check to:
>
> - if (p->regtype == SCIx_SH4_SCIF_REGTYPE)
> + if (p->regtype == SCIx_SH4_SCIF_REGTYPE ||
> + (p->regtype == SCIx_PROBE_REGTYPE && port->type == PORT_SCIF))
>
> Perhaps there's a better way?
Like (whitespace-damaged-gmail):
--- a/drivers/tty/serial/sh-sci.c
+++ b/drivers/tty/serial/sh-sci.c
@@ -3340,7 +3340,7 @@ static int sci_init_single(struct platform_device *dev,
{
struct uart_port *port = &sci_port->port;
const struct resource *res;
- unsigned int i;
+ unsigned int i, regtype;
int ret;
sci_port->cfg = p;
@@ -3381,6 +3381,7 @@ static int sci_init_single(struct platform_device *dev,
if (unlikely(sci_port->params == NULL))
return -EINVAL;
+ regtype = sci_port->params - sci_port_params;
switch (p->type) {
case PORT_SCIFB:
sci_port->rx_trigger = 48;
@@ -3435,7 +3436,7 @@ static int sci_init_single(struct platform_device *dev,
port->regshift = 1;
}
- if (p->regtype == SCIx_SH4_SCIF_REGTYPE)
+ if (regtype == SCIx_SH4_SCIF_REGTYPE)
if (sci_port->reg_size >= 0x20)
port->regshift = 1;
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 3/4] serial: sh-sci: Remove SCIx_RZ_SCIFA_REGTYPE
2018-07-27 21:09 ` [PATCH 3/4] serial: sh-sci: Remove SCIx_RZ_SCIFA_REGTYPE Chris Brandt
@ 2018-07-30 9:03 ` Geert Uytterhoeven
0 siblings, 0 replies; 16+ messages in thread
From: Geert Uytterhoeven @ 2018-07-30 9:03 UTC (permalink / raw)
To: Chris Brandt
Cc: Greg KH, Rob Herring, Mark Rutland, Geert Uytterhoeven,
open list:SERIAL DRIVERS,
open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS,
Linux-Renesas, Simon Horman
On Fri, Jul 27, 2018 at 11:09 PM Chris Brandt <chris.brandt@renesas.com> wrote:
> There is no more need for SCIx_RZ_SCIFA_REGTYPE now that
> SCIx_SH4_SCIF_REGTYPE can provide the same register/address definitions.
>
> Also, R7S9210 no longer needs a special compatible since the standard
> "renesas,scif" will work just fine.
>
> Signed-off-by: Chris Brandt <chris.brandt@renesas.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 4/4] serial: sh-sci: Improve support for separate TEI and DRI interrupts
2018-07-27 21:09 ` [PATCH 4/4] serial: sh-sci: Improve support for separate TEI and DRI interrupts Chris Brandt
@ 2018-07-30 9:08 ` Geert Uytterhoeven
2018-07-30 12:33 ` Chris Brandt
0 siblings, 1 reply; 16+ messages in thread
From: Geert Uytterhoeven @ 2018-07-30 9:08 UTC (permalink / raw)
To: Chris Brandt
Cc: Greg KH, Rob Herring, Mark Rutland, Geert Uytterhoeven,
open list:SERIAL DRIVERS,
open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS,
Linux-Renesas, Simon Horman
Hi Chris,
On Fri, Jul 27, 2018 at 11:09 PM Chris Brandt <chris.brandt@renesas.com> wrote:
> Some SCIF versions mux error and break interrupts together and then provide
> a separate interrupt ID for just TEI/DRI.
>
> Allow all 6 types of interrupts to be specified via platform data (or DT)
> and for any signals that are muxed together (have the same interrupt
> number) simply register one handler.
>
> Signed-off-by: Chris Brandt <chris.brandt@renesas.com>
Thanks for your patch!
> --- a/drivers/tty/serial/sh-sci.c
> +++ b/drivers/tty/serial/sh-sci.c
> @@ -2842,17 +2832,17 @@ static int sci_init_single(struct platform_device *dev,
>
> /* The SCI generates several interrupts. They can be muxed together or
> * connected to different interrupt lines. In the muxed case only one
> - * interrupt resource is specified. In the non-muxed case three or four
> - * interrupt resources are specified, as the BRI interrupt is optional.
> + * interrupt resource is specified as there is only one interrupt ID.
> + * In the non-muxed case, up to 6 interrupt signals might be generated
> + * from the SCI, however those signals might have their own individual
> + * interrupt ID numbers, or muxed together with another interrupt.
> */
> if (sci_port->irqs[0] < 0)
> return -ENXIO;
>
> - if (sci_port->irqs[1] < 0) {
> - sci_port->irqs[1] = sci_port->irqs[0];
> - sci_port->irqs[2] = sci_port->irqs[0];
> - sci_port->irqs[3] = sci_port->irqs[0];
> - }
> + if (sci_port->irqs[1] < 0)
> + for (i = 1; i < ARRAY_SIZE(sci_port->irqs) - 1; i++)
Shouldn't the "- 1" be dropped?
> + sci_port->irqs[i] = sci_port->irqs[0];
>
> sci_port->params = sci_probe_regmap(p);
> if (unlikely(sci_port->params == NULL))
With the above fixed:
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
^ permalink raw reply [flat|nested] 16+ messages in thread
* RE: [PATCH 2/4] serial: sh-sci: Allow for compressed SCIF address
2018-07-30 8:05 ` Geert Uytterhoeven
@ 2018-07-30 12:17 ` Chris Brandt
0 siblings, 0 replies; 16+ messages in thread
From: Chris Brandt @ 2018-07-30 12:17 UTC (permalink / raw)
To: Geert Uytterhoeven
Cc: Greg KH, Rob Herring, Mark Rutland, Geert Uytterhoeven,
open list:SERIAL DRIVERS,
open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS
<devicetree@vger.kernel.org>,
Linux-Renesas, Simon Horman, Rob Landley
Hi Geert,
On Sunday, July 29, 2018, Geert Uytterhoeven wrote:
> I've accidentally discovered this breaks SCIF on SH7751R2D (QEMU), as the
> board code doesn't fill in regtype, so it is 0 = SCIx_PROBE_REGTYPE.
Oh that pesky SH7751!!
On Monday, July 30, 2018, Geert Uytterhoeven wrote:
> > I made it work by changing the check to:
> >
> > - if (p->regtype == SCIx_SH4_SCIF_REGTYPE)
> > + if (p->regtype == SCIx_SH4_SCIF_REGTYPE ||
> > + (p->regtype == SCIx_PROBE_REGTYPE && port->type ==
> PORT_SCIF))
> >
> > Perhaps there's a better way?
>
> Like (whitespace-damaged-gmail):
>
> --- a/drivers/tty/serial/sh-sci.c
> +++ b/drivers/tty/serial/sh-sci.c
> @@ -3340,7 +3340,7 @@ static int sci_init_single(struct platform_device
> *dev,
> {
> struct uart_port *port = &sci_port->port;
> const struct resource *res;
> - unsigned int i;
> + unsigned int i, regtype;
> int ret;
>
> sci_port->cfg = p;
> @@ -3381,6 +3381,7 @@ static int sci_init_single(struct platform_device
> *dev,
> if (unlikely(sci_port->params == NULL))
> return -EINVAL;
>
> + regtype = sci_port->params - sci_port_params;
> switch (p->type) {
> case PORT_SCIFB:
> sci_port->rx_trigger = 48;
> @@ -3435,7 +3436,7 @@ static int sci_init_single(struct platform_device
> *dev,
> port->regshift = 1;
> }
>
> - if (p->regtype == SCIx_SH4_SCIF_REGTYPE)
> + if (regtype == SCIx_SH4_SCIF_REGTYPE)
> if (sci_port->reg_size >= 0x20)
> port->regshift = 1;
That's clever.
If it worked for SH7751, I'll go test it on RZ/A2 as well and resubmit
the patch.
Chris
^ permalink raw reply [flat|nested] 16+ messages in thread
* RE: [PATCH 2/4] serial: sh-sci: Allow for compressed SCIF address
@ 2018-07-30 12:17 ` Chris Brandt
0 siblings, 0 replies; 16+ messages in thread
From: Chris Brandt @ 2018-07-30 12:17 UTC (permalink / raw)
To: Geert Uytterhoeven
Cc: Greg KH, Rob Herring, Mark Rutland, Geert Uytterhoeven,
open list:SERIAL DRIVERS,
open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS,
Linux-Renesas, Simon Horman, Rob Landley
Hi Geert,
On Sunday, July 29, 2018, Geert Uytterhoeven wrote:
> I've accidentally discovered this breaks SCIF on SH7751R2D (QEMU), as the
> board code doesn't fill in regtype, so it is 0 = SCIx_PROBE_REGTYPE.
Oh that pesky SH7751!!
On Monday, July 30, 2018, Geert Uytterhoeven wrote:
> > I made it work by changing the check to:
> >
> > - if (p->regtype == SCIx_SH4_SCIF_REGTYPE)
> > + if (p->regtype == SCIx_SH4_SCIF_REGTYPE ||
> > + (p->regtype == SCIx_PROBE_REGTYPE && port->type ==
> PORT_SCIF))
> >
> > Perhaps there's a better way?
>
> Like (whitespace-damaged-gmail):
>
> --- a/drivers/tty/serial/sh-sci.c
> +++ b/drivers/tty/serial/sh-sci.c
> @@ -3340,7 +3340,7 @@ static int sci_init_single(struct platform_device
> *dev,
> {
> struct uart_port *port = &sci_port->port;
> const struct resource *res;
> - unsigned int i;
> + unsigned int i, regtype;
> int ret;
>
> sci_port->cfg = p;
> @@ -3381,6 +3381,7 @@ static int sci_init_single(struct platform_device
> *dev,
> if (unlikely(sci_port->params == NULL))
> return -EINVAL;
>
> + regtype = sci_port->params - sci_port_params;
> switch (p->type) {
> case PORT_SCIFB:
> sci_port->rx_trigger = 48;
> @@ -3435,7 +3436,7 @@ static int sci_init_single(struct platform_device
> *dev,
> port->regshift = 1;
> }
>
> - if (p->regtype == SCIx_SH4_SCIF_REGTYPE)
> + if (regtype == SCIx_SH4_SCIF_REGTYPE)
> if (sci_port->reg_size >= 0x20)
> port->regshift = 1;
That's clever.
If it worked for SH7751, I'll go test it on RZ/A2 as well and resubmit
the patch.
Chris
^ permalink raw reply [flat|nested] 16+ messages in thread
* RE: [PATCH 4/4] serial: sh-sci: Improve support for separate TEI and DRI interrupts
2018-07-30 9:08 ` Geert Uytterhoeven
@ 2018-07-30 12:33 ` Chris Brandt
0 siblings, 0 replies; 16+ messages in thread
From: Chris Brandt @ 2018-07-30 12:33 UTC (permalink / raw)
To: Geert Uytterhoeven
Cc: Greg KH, Rob Herring, Mark Rutland, Geert Uytterhoeven,
open list:SERIAL DRIVERS,
open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS
<devicetree@vger.kernel.org>,
Linux-Renesas, Simon Horman
Hi Geert,
On Monday, July 30, 2018, Geert Uytterhoeven wrote:
> > if (sci_port->irqs[0] < 0)
> > return -ENXIO;
> >
> > - if (sci_port->irqs[1] < 0) {
> > - sci_port->irqs[1] = sci_port->irqs[0];
> > - sci_port->irqs[2] = sci_port->irqs[0];
> > - sci_port->irqs[3] = sci_port->irqs[0];
> > - }
> > + if (sci_port->irqs[1] < 0)
> > + for (i = 1; i < ARRAY_SIZE(sci_port->irqs) - 1; i++)
>
> Shouldn't the "- 1" be dropped?
In reality, the last entry of the array is 'SCIx_NR_IRQS', so it's not
really used anywhere.
The original array was:
enum {
SCIx_ERI_IRQ, (the only IRQ specified in DT)
SCIx_RXI_IRQ, << copy from irqs[0]
SCIx_TXI_IRQ, << copy from irqs[0]
SCIx_BRI_IRQ, << copy from irqs[0]
SCIx_NR_IRQS, (didn’t' touch)
SCIx_MUX_IRQ = SCIx_NR_IRQS, /* special case */
};
So the new for loop used "- "1 in order to create the same outcome.
But as far as I can tell irqs[SCIx_NR_IRQS] is never used anywhere, it
doesn't really matter.
> With the above fixed:
> Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
I have no problem taking the "- 1" out.
But...here's the funny part: It was you that suggested the "- 1" ;)
On Thursday, July 26, 2018, Geert Uytterhoeven wrote:
> > @@ -2809,6 +2845,8 @@ static int sci_init_single(struct platform_device
> *dev,
> > sci_port->irqs[1] = sci_port->irqs[0];
> > sci_port->irqs[2] = sci_port->irqs[0];
> > sci_port->irqs[3] = sci_port->irqs[0];
> > + sci_port->irqs[4] = sci_port->irqs[0];
> > + sci_port->irqs[5] = sci_port->irqs[0];
>
> You may want to start using a loop from 1 to ARRAY_SIZE(sci_port->irqs) - 1
> instead.
Cheers
Chris
^ permalink raw reply [flat|nested] 16+ messages in thread
* RE: [PATCH 4/4] serial: sh-sci: Improve support for separate TEI and DRI interrupts
@ 2018-07-30 12:33 ` Chris Brandt
0 siblings, 0 replies; 16+ messages in thread
From: Chris Brandt @ 2018-07-30 12:33 UTC (permalink / raw)
To: Geert Uytterhoeven
Cc: Greg KH, Rob Herring, Mark Rutland, Geert Uytterhoeven,
open list:SERIAL DRIVERS,
open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS,
Linux-Renesas, Simon Horman
Hi Geert,
On Monday, July 30, 2018, Geert Uytterhoeven wrote:
> > if (sci_port->irqs[0] < 0)
> > return -ENXIO;
> >
> > - if (sci_port->irqs[1] < 0) {
> > - sci_port->irqs[1] = sci_port->irqs[0];
> > - sci_port->irqs[2] = sci_port->irqs[0];
> > - sci_port->irqs[3] = sci_port->irqs[0];
> > - }
> > + if (sci_port->irqs[1] < 0)
> > + for (i = 1; i < ARRAY_SIZE(sci_port->irqs) - 1; i++)
>
> Shouldn't the "- 1" be dropped?
In reality, the last entry of the array is 'SCIx_NR_IRQS', so it's not
really used anywhere.
The original array was:
enum {
SCIx_ERI_IRQ, (the only IRQ specified in DT)
SCIx_RXI_IRQ, << copy from irqs[0]
SCIx_TXI_IRQ, << copy from irqs[0]
SCIx_BRI_IRQ, << copy from irqs[0]
SCIx_NR_IRQS, (didn’t' touch)
SCIx_MUX_IRQ = SCIx_NR_IRQS, /* special case */
};
So the new for loop used "- "1 in order to create the same outcome.
But as far as I can tell irqs[SCIx_NR_IRQS] is never used anywhere, it
doesn't really matter.
> With the above fixed:
> Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
I have no problem taking the "- 1" out.
But...here's the funny part: It was you that suggested the "- 1" ;)
On Thursday, July 26, 2018, Geert Uytterhoeven wrote:
> > @@ -2809,6 +2845,8 @@ static int sci_init_single(struct platform_device
> *dev,
> > sci_port->irqs[1] = sci_port->irqs[0];
> > sci_port->irqs[2] = sci_port->irqs[0];
> > sci_port->irqs[3] = sci_port->irqs[0];
> > + sci_port->irqs[4] = sci_port->irqs[0];
> > + sci_port->irqs[5] = sci_port->irqs[0];
>
> You may want to start using a loop from 1 to ARRAY_SIZE(sci_port->irqs) - 1
> instead.
Cheers
Chris
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 4/4] serial: sh-sci: Improve support for separate TEI and DRI interrupts
2018-07-30 12:33 ` Chris Brandt
(?)
@ 2018-07-30 12:47 ` Geert Uytterhoeven
2018-07-30 12:55 ` Chris Brandt
-1 siblings, 1 reply; 16+ messages in thread
From: Geert Uytterhoeven @ 2018-07-30 12:47 UTC (permalink / raw)
To: Chris Brandt
Cc: Greg KH, Rob Herring, Mark Rutland, Geert Uytterhoeven,
open list:SERIAL DRIVERS,
open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS,
Linux-Renesas, Simon Horman
Hi Chris,
On Mon, Jul 30, 2018 at 2:33 PM Chris Brandt <Chris.Brandt@renesas.com> wrote:
> On Monday, July 30, 2018, Geert Uytterhoeven wrote:
> > > if (sci_port->irqs[0] < 0)
> > > return -ENXIO;
> > >
> > > - if (sci_port->irqs[1] < 0) {
> > > - sci_port->irqs[1] = sci_port->irqs[0];
> > > - sci_port->irqs[2] = sci_port->irqs[0];
> > > - sci_port->irqs[3] = sci_port->irqs[0];
> > > - }
> > > + if (sci_port->irqs[1] < 0)
> > > + for (i = 1; i < ARRAY_SIZE(sci_port->irqs) - 1; i++)
> >
> > Shouldn't the "- 1" be dropped?
>
> In reality, the last entry of the array is 'SCIx_NR_IRQS', so it's not
> really used anywhere.
>
> The original array was:
> enum {
> SCIx_ERI_IRQ, (the only IRQ specified in DT)
=0
> SCIx_RXI_IRQ, << copy from irqs[0]
= 1
> SCIx_TXI_IRQ, << copy from irqs[0]
= 2
> SCIx_BRI_IRQ, << copy from irqs[0]
= 3
> SCIx_NR_IRQS, (didn’t' touch)
= 4
>
> SCIx_MUX_IRQ = SCIx_NR_IRQS, /* special case */
> };
That's not the array, but the enum.
The array is in struct sci_port:
int irqs[SCIx_NR_IRQS];
It has four entries, at indices 0..3.
> So the new for loop used "- "1 in order to create the same outcome.
>
> But as far as I can tell irqs[SCIx_NR_IRQS] is never used anywhere, it
> doesn't really matter.
irqs[SCIx_NR_IRQS] does not exist!
sci_irq_desc[SCIx_NR_IRQS] aka sci_irq_desc[SCIx_MUX_IRQ] does exit,
but that's a different array.
> > With the above fixed:
> > Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
>
> I have no problem taking the "- 1" out.
>
> But...here's the funny part: It was you that suggested the "- 1" ;)
>
> On Thursday, July 26, 2018, Geert Uytterhoeven wrote:
> > > @@ -2809,6 +2845,8 @@ static int sci_init_single(struct platform_device
> > *dev,
> > > sci_port->irqs[1] = sci_port->irqs[0];
> > > sci_port->irqs[2] = sci_port->irqs[0];
> > > sci_port->irqs[3] = sci_port->irqs[0];
> > > + sci_port->irqs[4] = sci_port->irqs[0];
> > > + sci_port->irqs[5] = sci_port->irqs[0];
> >
> > You may want to start using a loop from 1 to ARRAY_SIZE(sci_port->irqs) - 1
> > instead.
Your loop is:
for (i = 1; i < ARRAY_SIZE(sci_port->irqs) - 1; i++)
It loops over 1..ARRAY_SIZE(sci_port->irqs) - 2.
Note the "<" and the "- 1".
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
^ permalink raw reply [flat|nested] 16+ messages in thread
* RE: [PATCH 4/4] serial: sh-sci: Improve support for separate TEI and DRI interrupts
2018-07-30 12:47 ` Geert Uytterhoeven
@ 2018-07-30 12:55 ` Chris Brandt
0 siblings, 0 replies; 16+ messages in thread
From: Chris Brandt @ 2018-07-30 12:55 UTC (permalink / raw)
To: Geert Uytterhoeven
Cc: Greg KH, Rob Herring, Mark Rutland, Geert Uytterhoeven,
open list:SERIAL DRIVERS,
open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS
<devicetree@vger.kernel.org>,
Linux-Renesas, Simon Horman
Hi Geert,
On Monday, July 30, 2018, Geert Uytterhoeven wrote:
> That's not the array, but the enum.
>
> The array is in struct sci_port:
>
> int irqs[SCIx_NR_IRQS];
>
> It has four entries, at indices 0..3.
> irqs[SCIx_NR_IRQS] does not exist!
>
> sci_irq_desc[SCIx_NR_IRQS] aka sci_irq_desc[SCIx_MUX_IRQ] does exit,
> but that's a different array.
> Your loop is:
>
> for (i = 1; i < ARRAY_SIZE(sci_port->irqs) - 1; i++)
>
> It loops over 1..ARRAY_SIZE(sci_port->irqs) - 2.
> Note the "<" and the "- 1".
Ahhhh, you're right!
Sorry about that.
Thanks,
Chris
^ permalink raw reply [flat|nested] 16+ messages in thread
* RE: [PATCH 4/4] serial: sh-sci: Improve support for separate TEI and DRI interrupts
@ 2018-07-30 12:55 ` Chris Brandt
0 siblings, 0 replies; 16+ messages in thread
From: Chris Brandt @ 2018-07-30 12:55 UTC (permalink / raw)
To: Geert Uytterhoeven
Cc: Greg KH, Rob Herring, Mark Rutland, Geert Uytterhoeven,
open list:SERIAL DRIVERS,
open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS,
Linux-Renesas, Simon Horman
Hi Geert,
On Monday, July 30, 2018, Geert Uytterhoeven wrote:
> That's not the array, but the enum.
>
> The array is in struct sci_port:
>
> int irqs[SCIx_NR_IRQS];
>
> It has four entries, at indices 0..3.
> irqs[SCIx_NR_IRQS] does not exist!
>
> sci_irq_desc[SCIx_NR_IRQS] aka sci_irq_desc[SCIx_MUX_IRQ] does exit,
> but that's a different array.
> Your loop is:
>
> for (i = 1; i < ARRAY_SIZE(sci_port->irqs) - 1; i++)
>
> It loops over 1..ARRAY_SIZE(sci_port->irqs) - 2.
> Note the "<" and the "- 1".
Ahhhh, you're right!
Sorry about that.
Thanks,
Chris
^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2018-07-30 14:30 UTC | newest]
Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-07-27 21:09 [PATCH 0/4] serial: sh-sci: Clean up previous RZ/A2 support Chris Brandt
2018-07-27 21:09 ` [PATCH 1/4] serial: sh-sci: Improve interrupts description Chris Brandt
2018-07-27 21:09 ` [PATCH 2/4] serial: sh-sci: Allow for compressed SCIF address Chris Brandt
2018-07-29 11:11 ` Geert Uytterhoeven
2018-07-30 8:05 ` Geert Uytterhoeven
2018-07-30 12:17 ` Chris Brandt
2018-07-30 12:17 ` Chris Brandt
2018-07-27 21:09 ` [PATCH 3/4] serial: sh-sci: Remove SCIx_RZ_SCIFA_REGTYPE Chris Brandt
2018-07-30 9:03 ` Geert Uytterhoeven
2018-07-27 21:09 ` [PATCH 4/4] serial: sh-sci: Improve support for separate TEI and DRI interrupts Chris Brandt
2018-07-30 9:08 ` Geert Uytterhoeven
2018-07-30 12:33 ` Chris Brandt
2018-07-30 12:33 ` Chris Brandt
2018-07-30 12:47 ` Geert Uytterhoeven
2018-07-30 12:55 ` Chris Brandt
2018-07-30 12:55 ` Chris Brandt
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.