|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH 07/16] xen/char: implement suspend/resume calls for SCIF driver
Hi,
On Wed, Mar 19, 2025 at 7:21 PM Grygorii Strashko
<grygorii_strashko@xxxxxxxx> wrote:
>
>
>
> On 05.03.25 11:11, Mykola Kvach wrote:
> > From: Mykola Kvach <mykola_kvach@xxxxxxxx>
> >
> > The changes have been tested only on the Renesas R-Car-H3 Starter Kit board.
> >
> > Signed-off-by: Volodymyr Babchuk <volodymyr_babchuk@xxxxxxxx>
> > Signed-off-by: Oleksandr Andrushchenko <oleksandr_andrushchenko@xxxxxxxx>
> > Signed-off-by: Mykola Kvach <mykola_kvach@xxxxxxxx>
> > ---
> > xen/drivers/char/scif-uart.c | 31 ++++++++++++++++++++++++++++++-
> > 1 file changed, 30 insertions(+), 1 deletion(-)
> >
> > diff --git a/xen/drivers/char/scif-uart.c b/xen/drivers/char/scif-uart.c
> > index 757793ca45..e166fb0f36 100644
> > --- a/xen/drivers/char/scif-uart.c
> > +++ b/xen/drivers/char/scif-uart.c
> > @@ -139,7 +139,7 @@ static void scif_uart_interrupt(int irq, void *data)
> > }
> > }
> >
> > -static void __init scif_uart_init_preirq(struct serial_port *port)
> > +static void scif_uart_init_preirq(struct serial_port *port)
> > {
> > struct scif_uart *uart = port->uart;
> > const struct port_params *params = uart->params;
> > @@ -271,6 +271,33 @@ static void scif_uart_stop_tx(struct serial_port *port)
> > scif_writew(uart, SCIF_SCSCR, scif_readw(uart, SCIF_SCSCR) &
> > ~SCSCR_TIE);
> > }
> >
>
> I assume you want ifdef CONFIG_SYSTEM_SUSPEND here also
I was thinking about it and decided that since we have the
suspend/resume fields uncovered for uart_driver,
I'll leave the functions uncovered as well.
I'll add coverage in the next patch series.
It’s probably needed to cover the suspend/resume fields too, but that
will require additional changes for other UART drivers.
Thank you for pointing that out.
>
>
> > +static void scif_uart_suspend(struct serial_port *port)
> > +{
> > + struct scif_uart *uart = port->uart;
> > +
> > + scif_uart_stop_tx(port);
> > +
> > + /* Wait until last bit has been transmitted. */
> > + while ( !(scif_readw(uart, SCIF_SCFSR) & SCFSR_TEND) );
> > +
> > + /* Disable TX/RX parts and all interrupts */
> > + scif_writew(uart, SCIF_SCSCR, 0);
> > +
> > + /* Reset TX/RX FIFOs */
> > + scif_writew(uart, SCIF_SCFCR, SCFCR_RFRST | SCFCR_TFRST);
> > +}
> > +
> > +static void scif_uart_resume(struct serial_port *port)
> > +{
> > + struct scif_uart *uart = port->uart;
> > +
> > + scif_uart_init_preirq(port);
> > +
> > + /* Enable TX/RX and Error Interrupts */
> > + scif_writew(uart, SCIF_SCSCR, scif_readw(uart, SCIF_SCSCR) |
> > + SCSCR_TIE | SCSCR_RIE | SCSCR_REIE);
> > +}
> > +
> > static struct uart_driver __read_mostly scif_uart_driver = {
> > .init_preirq = scif_uart_init_preirq,
> > .init_postirq = scif_uart_init_postirq,
> > @@ -281,6 +308,8 @@ static struct uart_driver __read_mostly
> > scif_uart_driver = {
> > .start_tx = scif_uart_start_tx,
> > .stop_tx = scif_uart_stop_tx,
> > .vuart_info = scif_vuart_info,
> > + .suspend = scif_uart_suspend,
> > + .resume = scif_uart_resume,
> > };
> >
> > static const struct dt_device_match scif_uart_dt_match[] __initconst =
>
> --
> Best regards,
> -grygorii
Best regards,
Mykola
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |