[PATCH/RFC] serial: sh-sci: Add device tree support for r8a7779
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Thu Apr 24 16:33:29 PDT 2014
Hi Simon,
Thank you for the patch.
On Thursday 24 April 2014 15:54:44 Simon Horman wrote:
> According to the platform data for the legacy-C initialisation of sh-sci
> for the r8a7779 SoC and my own testing the SCIx_SH4_SCIF_REGTYPE bit of
> scscr needs to be set.
>
> Signed-off-by: Simon Horman <horms+renesas at verge.net.au>
>
> ---
>
> With the approach taken by this patch sh-sci may be initialised using the
> "renesas,scif-r8a7779" compat string but not the generic "renesas,scif"
> compat string. An alternate approach would be to add a binding to allow
> setting of this bit to be controlled directly from DT.
Handling the SCSCR bits properly with DT has been on my to-do list for some
time. Thank you for volunteering to implement that :-D
The CKE bits control both the behaviour of the SCK pin and the SCIF input
clock selection. The SCIF can use various internal and external clocks, with
up to two baud rate generators (programmable dividers) chained. Whether the
SoC is provided with an external clock for its serial ports is a board
property, not an SoC property. I would thus like to implement support for this
feature properly and avoid hardcoding the CKE bits like done below.
The Marzen board has an external clock generator connected to the SCIF_SCK pin
that can be used as a clock source, but I don't really see a reason why we
couldn't use the internal P clock instead. I don't want to delay integration
of SCIF DT support until we have a proper solution to handle clock
configuration, but couldn't we use the internal P clock on the Marzen board in
the meantime ?
> ---
> .../devicetree/bindings/serial/renesas,sci-serial.txt | 1 +
> drivers/tty/serial/sh-sci.c | 10 +++++++++-
> 2 files changed, 10 insertions(+), 1 deletion(-)
>
> diff --git a/Documentation/devicetree/bindings/serial/renesas,sci-serial.txt
> b/Documentation/devicetree/bindings/serial/renesas,sci-serial.txt index
> 53e6c17..bba86de 100644
> --- a/Documentation/devicetree/bindings/serial/renesas,sci-serial.txt
> +++ b/Documentation/devicetree/bindings/serial/renesas,sci-serial.txt
> @@ -12,6 +12,7 @@ Required properties:
> - "renesas,scifa-r8a7791" for R8A7791 (R-Car M2) SCIFA compatible UART.
> - "renesas,scifb-r8a7791" for R8A7791 (R-Car M2) SCIFB compatible UART. -
> "renesas,hscif-r8a7791" for R8A7791 (R-Car M2) HSCIF compatible UART. +
> - "renesas,scif-r8a7779" for R8A7779 (R-Car H1) SCIF compatible UART. -
> "renesas,scif" for generic SCIF compatible UART.
> - "renesas,scifa" for generic SCIFA compatible UART.
> - "renesas,scifb" for generic SCIFB compatible UART.
> diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c
> index 88236da..3b5d2f6 100644
> --- a/drivers/tty/serial/sh-sci.c
> +++ b/drivers/tty/serial/sh-sci.c
> @@ -2419,6 +2419,7 @@ static int sci_remove(struct platform_device *dev)
> struct sci_port_info {
> unsigned int type;
> unsigned int regtype;
> + unsigned int scscr_extra;
> };
>
> static const struct of_device_id of_sci_match[] = {
> @@ -2429,6 +2430,13 @@ static const struct of_device_id of_sci_match[] = {
> .regtype = SCIx_SH4_SCIF_REGTYPE,
> },
> }, {
> + .compatible = "renesas,scif-r8a7779",
> + .data = (void *)&(const struct sci_port_info) {
> + .type = PORT_SCIF,
> + .regtype = SCIx_SH4_SCIF_REGTYPE,
> + .scscr_extra = SCSCR_CKE1,
> + },
> + }, {
> .compatible = "renesas,scifa",
> .data = &(const struct sci_port_info) {
> .type = PORT_SCIFA,
> @@ -2488,7 +2496,7 @@ sci_parse_dt(struct platform_device *pdev, unsigned
> int *dev_id) p->flags = UPF_IOREMAP | UPF_BOOT_AUTOCONF;
> p->type = info->type;
> p->regtype = info->regtype;
> - p->scscr = SCSCR_RE | SCSCR_TE;
> + p->scscr = SCSCR_RE | SCSCR_TE | info->scscr_extra;
>
> return p;
> }
--
Regards,
Laurent Pinchart
More information about the linux-arm-kernel
mailing list