Module Name: src Committed By: rin Date: Thu Mar 25 05:33:59 UTC 2021
Modified Files: src/sys/dev/acpi: com_acpi.c src/sys/dev/ic: com.c comvar.h src/sys/dev/pci: com_puc.c Log Message: Introduce sc_poll_ticks and obsolete COM_HW_POLL bit in sc_hwflags. Polling is scheduled at every sc_poll_ticks ticks. This is useful to work around H/W bug, by which interrupts are lost *sometimes*; interrupt-based I/O mostly works and no need for polling every counter ticks. To generate a diff of this commit: cvs rdiff -u -r1.41 -r1.42 src/sys/dev/acpi/com_acpi.c cvs rdiff -u -r1.361 -r1.362 src/sys/dev/ic/com.c cvs rdiff -u -r1.92 -r1.93 src/sys/dev/ic/comvar.h cvs rdiff -u -r1.26 -r1.27 src/sys/dev/pci/com_puc.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/dev/acpi/com_acpi.c diff -u src/sys/dev/acpi/com_acpi.c:1.41 src/sys/dev/acpi/com_acpi.c:1.42 --- src/sys/dev/acpi/com_acpi.c:1.41 Fri Jan 29 15:24:00 2021 +++ src/sys/dev/acpi/com_acpi.c Thu Mar 25 05:33:59 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: com_acpi.c,v 1.41 2021/01/29 15:24:00 thorpej Exp $ */ +/* $NetBSD: com_acpi.c,v 1.42 2021/03/25 05:33:59 rin Exp $ */ /* * Copyright (c) 2002 Jared D. McNeill <jmcne...@invisible.ca> @@ -26,7 +26,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: com_acpi.c,v 1.41 2021/01/29 15:24:00 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: com_acpi.c,v 1.42 2021/03/25 05:33:59 rin Exp $"); #include <sys/param.h> #include <sys/device.h> @@ -168,7 +168,7 @@ com_acpi_attach(device_t parent, device_ sc->sc_type = dce->value; if (sc->sc_type == COM_TYPE_DW_APB) { - SET(sc->sc_hwflags, COM_HW_POLL); /* XXX */ + sc->sc_poll_ticks = 1; /* XXX */ } else { if (com_probe_subr(&sc->sc_regs) == 0) { aprint_error(": com probe failed\n"); @@ -185,7 +185,7 @@ com_acpi_attach(device_t parent, device_ com_attach_subr(sc); - if (!ISSET(sc->sc_hwflags, COM_HW_POLL)) + if (sc->sc_poll_ticks == 0) asc->sc_ih = acpi_intr_establish(self, (uint64_t)(uintptr_t)aa->aa_node->ad_handle, IPL_SERIAL, true, comintr, sc, device_xname(self)); Index: src/sys/dev/ic/com.c diff -u src/sys/dev/ic/com.c:1.361 src/sys/dev/ic/com.c:1.362 --- src/sys/dev/ic/com.c:1.361 Wed Sep 30 14:56:34 2020 +++ src/sys/dev/ic/com.c Thu Mar 25 05:33:59 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: com.c,v 1.361 2020/09/30 14:56:34 jmcneill Exp $ */ +/* $NetBSD: com.c,v 1.362 2021/03/25 05:33:59 rin Exp $ */ /*- * Copyright (c) 1998, 1999, 2004, 2008 The NetBSD Foundation, Inc. @@ -66,7 +66,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: com.c,v 1.361 2020/09/30 14:56:34 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: com.c,v 1.362 2021/03/25 05:33:59 rin Exp $"); #include "opt_com.h" #include "opt_ddb.h" @@ -420,7 +420,7 @@ com_intr_poll(void *arg) comintr(sc); - callout_schedule(&sc->sc_poll_callout, 1); + callout_schedule(&sc->sc_poll_callout, sc->sc_poll_ticks); } void @@ -739,8 +739,8 @@ fifodone: SET(sc->sc_hwflags, COM_HW_DEV_OK); - if (ISSET(sc->sc_hwflags, COM_HW_POLL)) - callout_schedule(&sc->sc_poll_callout, 1); + if (sc->sc_poll_ticks != 0) + callout_schedule(&sc->sc_poll_callout, sc->sc_poll_ticks); } void Index: src/sys/dev/ic/comvar.h diff -u src/sys/dev/ic/comvar.h:1.92 src/sys/dev/ic/comvar.h:1.93 --- src/sys/dev/ic/comvar.h:1.92 Fri Jan 11 23:10:41 2019 +++ src/sys/dev/ic/comvar.h Thu Mar 25 05:33:59 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: comvar.h,v 1.92 2019/01/11 23:10:41 thorpej Exp $ */ +/* $NetBSD: comvar.h,v 1.93 2021/03/25 05:33:59 rin Exp $ */ /* * Copyright (c) 1996 Christopher G. Demetriou. All rights reserved. @@ -69,7 +69,6 @@ int com_is_console(bus_space_tag_t, bus_ #define COM_HW_TXFIFO_DISABLE 0x100 #define COM_HW_NO_TXPRELOAD 0x200 #define COM_HW_AFE 0x400 -#define COM_HW_POLL 0x800 /* Buffer size for character buffer */ #ifndef COM_RING_SIZE @@ -191,6 +190,8 @@ struct com_softc { #define COM_TYPE_16750 10 #define COM_TYPE_DW_APB 11 /* DesignWare APB UART */ + int sc_poll_ticks; + /* power management hooks */ int (*enable)(struct com_softc *); void (*disable)(struct com_softc *); Index: src/sys/dev/pci/com_puc.c diff -u src/sys/dev/pci/com_puc.c:1.26 src/sys/dev/pci/com_puc.c:1.27 --- src/sys/dev/pci/com_puc.c:1.26 Sat Dec 8 17:46:14 2018 +++ src/sys/dev/pci/com_puc.c Thu Mar 25 05:33:59 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: com_puc.c,v 1.26 2018/12/08 17:46:14 thorpej Exp $ */ +/* $NetBSD: com_puc.c,v 1.27 2021/03/25 05:33:59 rin Exp $ */ /* * Copyright (c) 1998 Christopher G. Demetriou. All rights reserved. @@ -38,7 +38,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: com_puc.c,v 1.26 2018/12/08 17:46:14 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: com_puc.c,v 1.27 2021/03/25 05:33:59 rin Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -119,7 +119,7 @@ com_puc_attach(device_t parent, device_t return; } } else { - sc->sc_hwflags |= COM_HW_POLL; + sc->sc_poll_ticks = 1; } #if defined(amd64) || defined(i386)