[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v5] xen/char: implement suspend/resume calls for SCIF driver


  • To: Mykola Kvach <xakep.amatop@xxxxxxxxx>, <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: "Orzel, Michal" <michal.orzel@xxxxxxx>
  • Date: Thu, 30 Oct 2025 09:41:44 +0100
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=gmail.com smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0)
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=/y0o0RcELoKu8pbsP+8R9y5P9bLFXwib2yu9DI228oI=; b=Jx3uuL/ji6r4MTsUAl6n5ivB0f7OwDhfN810RopYIAW5uIwcg/04WWqchfmxyz9KpdkXGks+8kcwA4hC+XT0Erxxl3V1rcOfT+WWIFkYEIar1AbTKYYZIk5/2kuSfNeLWq32HxDjscYWwAav5TJ6zqapuMm1+4VCeJb/TSm+XlcusaEvka/uMOPKa3Ht/YubmVOJI4hD+eQMPuiPzXLDe4wj4f4MAvuF5Pzq8irDwtu83rff98s8yIh2vIXV4dM9tsYb9zakFZvfAuGdxsL4bzpqRnd8wNwrtS9Pdw91kjNQphwBnrB4JRehIMK/sg/aSABX0cpAV47aRyZ8GmTwQg==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=IOLXesMlH2MijGp3PSLpMTrkNOK30kv2Kf2b79ZWuX7RCSl5UNlFckYFgELpjY0C6lNlAGaFHwb9wmZCUnzah6WSTCRRfX5/LnwyzJj+gTsUKUYHIjpFem5qDdDoBl4Qp2v0vSbULlUVqEn0G5dY4R+qSHbHzryRP3Q7F+dYFJ98HsmnWmpYCfTuQBrgOUk9dXOjgCCNLzah1Jsc5lvBK9fUrH2oNLakXKLJtFXGusOgjNB7siTtACYKeZZbqvVR0V1wBhpaq4koLrvTPeczr1hT7PYYN2XxVwCNdHO4nYT9Hw2e1ft1nwjJ3IxES3JIk6i5pbueSGBduETTCemQ1g==
  • Cc: Volodymyr Babchuk <volodymyr_babchuk@xxxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>, Julien Grall <julien@xxxxxxx>, Bertrand Marquis <bertrand.marquis@xxxxxxx>, Oleksandr Andrushchenko <oleksandr_andrushchenko@xxxxxxxx>, Mykola Kvach <mykola_kvach@xxxxxxxx>
  • Delivery-date: Thu, 30 Oct 2025 08:42:13 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>


On 30/10/2025 08:59, Mykola Kvach wrote:
> @Stefano Stabellini @Michal Orzel @Julien Grall @Bertrand Marquis ping
> 
> On Thu, Aug 7, 2025 at 8:16 AM Mykola Kvach <xakep.amatop@xxxxxxxxx> wrote:
>>
>> From: Volodymyr Babchuk <volodymyr_babchuk@xxxxxxxx>
>>
>> Implement suspend and resume callbacks for the SCIF UART driver,
>> enabled when CONFIG_SYSTEM_SUSPEND is set. This allows proper
>> handling of UART state across system suspend/resume cycles.
>>
>> Tested on Renesas R-Car H3 Starter Kit.
>>
>> Signed-off-by: Volodymyr Babchuk <volodymyr_babchuk@xxxxxxxx>
>> Signed-off-by: Oleksandr Andrushchenko <oleksandr_andrushchenko@xxxxxxxx>
>> Signed-off-by: Mykola Kvach <mykola_kvach@xxxxxxxx>
>> ---
>> In patch v5, there are no changes at all;
>> it was done just to trigger a review.
>>
>> In patch v4, enhance commit message, no functional changes
>>
>> In patch v2, I just added a CONFIG_SYSTEM_SUSPEND check around
>> the suspend/resume functions in the SCIF driver.
>> ---
>>  xen/drivers/char/scif-uart.c | 40 ++++++++++++++++++++++++++++++++++--
>>  1 file changed, 38 insertions(+), 2 deletions(-)
>>
>> diff --git a/xen/drivers/char/scif-uart.c b/xen/drivers/char/scif-uart.c
>> index 757793ca45..888821a3b8 100644
>> --- a/xen/drivers/char/scif-uart.c
>> +++ b/xen/drivers/char/scif-uart.c
>> @@ -139,9 +139,8 @@ static void scif_uart_interrupt(int irq, void *data)
>>      }
>>  }
>>
>> -static void __init scif_uart_init_preirq(struct serial_port *port)
>> +static void scif_uart_disable(struct scif_uart *uart)
>>  {
>> -    struct scif_uart *uart = port->uart;
>>      const struct port_params *params = uart->params;
>>
>>      /*
>> @@ -155,6 +154,14 @@ static void __init scif_uart_init_preirq(struct 
>> serial_port *port)
>>
>>      /* Reset TX/RX FIFOs */
>>      scif_writew(uart, SCIF_SCFCR, SCFCR_RFRST | SCFCR_TFRST);
>> +}
>> +
>> +static void scif_uart_init_preirq(struct serial_port *port)
>> +{
>> +    struct scif_uart *uart = port->uart;
>> +    const struct port_params *params = uart->params;
>> +
>> +    scif_uart_disable(uart);
>>
>>      /* Clear all errors and flags */
>>      scif_readw(uart, params->status_reg);
>> @@ -271,6 +278,31 @@ static void scif_uart_stop_tx(struct serial_port *port)
>>      scif_writew(uart, SCIF_SCSCR, scif_readw(uart, SCIF_SCSCR) & 
>> ~SCSCR_TIE);
>>  }
>>
>> +#ifdef CONFIG_SYSTEM_SUSPEND
>> +
>> +static void scif_uart_suspend(struct serial_port *port)
>> +{
>> +    struct scif_uart *uart = port->uart;
>> +
>> +    scif_uart_stop_tx(port);
>> +    scif_uart_disable(uart);
>> +}
>> +
>> +static void scif_uart_resume(struct serial_port *port)
>> +{
>> +    struct scif_uart *uart = port->uart;
>> +    const struct port_params *params = uart->params;
>> +    uint16_t ctrl;
>> +
>> +    scif_uart_init_preirq(port);
This will also call scif_uart_disable() that was already invoked during suspend.
Why do we need to re-disable it when resuming?

Other than that:
Acked-by: Michal Orzel <michal.orzel@xxxxxxx>

~Michal




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.