tty/8250: Deactivate the HSUART DMA for the DNV CPU

micas-opensource posted 1 patch 3 months, 2 weeks ago
drivers/tty/serial/8250/8250_mid.c | 18 +++++++++++-------
1 file changed, 11 insertions(+), 7 deletions(-)
tty/8250: Deactivate the HSUART DMA for the DNV CPU
Posted by micas-opensource 3 months, 2 weeks ago
From: Philo Shao <philo@micasnetworks.com>

Intel DNV CPU reports an error, indicating that there is a possibility of abnormal serial port functionality and the CPU may hang. 
The HSUART DMA will be deactivated for the DNV CPU.

Signed-off-by: Philo Shao<philo@micasnetworks.com>
---
 drivers/tty/serial/8250/8250_mid.c | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/drivers/tty/serial/8250/8250_mid.c b/drivers/tty/serial/8250/8250_mid.c
index 2cc78a4bf..e4a5d6358 100644
--- a/drivers/tty/serial/8250/8250_mid.c
+++ b/drivers/tty/serial/8250/8250_mid.c
@@ -321,13 +321,17 @@ static int mid8250_probe(struct pci_dev *pdev, const struct pci_device_id *id)
 	if (!uart.port.membase)
 		return -ENOMEM;
 
-	ret = mid->board->setup(mid, &uart.port);
-	if (ret)
-		return ret;
-
-	ret = mid8250_dma_setup(mid, &uart);
-	if (ret)
-		goto err;
+	if (id->device != PCI_DEVICE_ID_INTEL_DNV_UART) {
+		ret = mid->board->setup(mid, &uart.port);
+		if (ret)
+			return ret;
+
+		ret = mid8250_dma_setup(mid, &uart);
+		if (ret)
+			goto err;
+	} else {
+		uart.port.handle_irq = dnv_handle_irq;
+	}
 
 	ret = serial8250_register_8250_port(&uart);
 	if (ret < 0)
-- 
2.25.1
Re: tty/8250: Deactivate the HSUART DMA for the DNV CPU
Posted by Andy Shevchenko 3 months, 2 weeks ago
On Wed, Jun 25, 2025 at 6:14 AM micas-opensource <zjianan156@gmail.com> wrote:
>
> From: Philo Shao <philo@micasnetworks.com>
>
> Intel DNV CPU reports an error, indicating that there is a possibility of abnormal serial port functionality and the CPU may hang.
> The HSUART DMA will be deactivated for the DNV CPU.

Please, wrap lines around ~72 characters.

Nevertheless, we want to know a bit more, i.e. what kind of CPU
errors, how the symptoms look like. Also have you checked if there is
an official errata for this case? If so, please, mention the document
number, errata title and proposed / recommended solution.

...

> -       ret = mid->board->setup(mid, &uart.port);
> -       if (ret)
> -               return ret;
> -
> -       ret = mid8250_dma_setup(mid, &uart);
> -       if (ret)
> -               goto err;
> +       if (id->device != PCI_DEVICE_ID_INTEL_DNV_UART) {

Wouldn't it be just enough to skip DMA setup in the
mid8250_dma_setup() for this ID?

> +               ret = mid->board->setup(mid, &uart.port);
> +               if (ret)
> +                       return ret;
> +
> +               ret = mid8250_dma_setup(mid, &uart);
> +               if (ret)
> +                       goto err;
> +       } else {
> +               uart.port.handle_irq = dnv_handle_irq;
> +       }


-- 
With Best Regards,
Andy Shevchenko