From owner-freebsd-hackers@freebsd.org Fri Aug 21 00:11:57 2020 Return-Path: Delivered-To: freebsd-hackers@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id E5DB73AD84E for ; Fri, 21 Aug 2020 00:11:57 +0000 (UTC) (envelope-from shrikanth07@gmail.com) Received: from mail-wr1-x441.google.com (mail-wr1-x441.google.com [IPv6:2a00:1450:4864:20::441]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1O1" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4BXhlc4wbgz4DY2 for ; Fri, 21 Aug 2020 00:11:56 +0000 (UTC) (envelope-from shrikanth07@gmail.com) Received: by mail-wr1-x441.google.com with SMTP id f1so394174wro.2 for ; Thu, 20 Aug 2020 17:11:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to; bh=IBOlUGRdrH3RgyeyZYWfVLNtZusHZe+uL07pmEJkfnk=; b=vd4x1NISB+fH3BZd+BP0IYXdjJkWSVNml5ftT+JKQQZjm7kzbGg+XExvUpcql8Sqnc FGVQMm7uftlcfRZISfRrdnL3KSMf1us+rcoxTYU98UxbsbK/vNuS6hH5HLmqViokxC+K 8otmNYzpFMPwSzcgAUefgwRdx3J3XV+NlHyogtIl80DDSUfdxuP5dSWUyOoRHU3t4BwH GdevnLEt4w3ToK7HUtVrwrrhNjWYP5Up4++eH6P7IStYCCzEdmWMzWshwRnqdWKU8jn6 tLunM4dZvqv2xowvbpAPxOZ2g94YQT6VaG2KHAxrxIp9s9oGDo9s48eVHJj2GGpafjIp pu0Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=IBOlUGRdrH3RgyeyZYWfVLNtZusHZe+uL07pmEJkfnk=; b=Ua/XegquykV1JdXj75ERecmjv/3x+EPwZ74SU60lytZg9dRh6LHxds0WpYJHE2OXwk SXE2FOvcg1C6obLhWudUPFqUDDsDmNZhbi/PTlnDudAmoYKgDUdR/lrjTFQHupXhYGaN oj1RJf4GjlYvHuwlTfFOxoGLILkzD3yOg4Akky5uA/MHtrhqqN5hpgbwf6q35xabQ4py BcZA3HPNH9rGDm4PdRGq+TDiKvuiDZUerB0H2/eoF4kmS3kMUaiUD+HxLmGlZe68uLiI 6WEDu2Dgx8DQTSfhbOBcsLhX/LRcTXwckuaUW/ZV37RNTXmR78F22xJ2V92gf1XYqqyV rxUA== X-Gm-Message-State: AOAM533GGXRjnbhkPRzoswjbzCWHivqxHJNzkbxfpLuJoLg9nosw5tPd 2SKhfhwOIQrW55+ylFo7+QvYii/IbvQNxI0xU4JQVglZQbY= X-Google-Smtp-Source: ABdhPJz72gZ5yPQh92zfaZrTBr82D3vFA0YQhcFEwc/bmE2UJ1xQsNWc5jx3nsNAM071jmykr0VgMg8Ep+PXB11orVc= X-Received: by 2002:adf:82a5:: with SMTP id 34mr217682wrc.266.1597968714641; Thu, 20 Aug 2020 17:11:54 -0700 (PDT) MIME-Version: 1.0 From: Shrikanth Kamath Date: Thu, 20 Aug 2020 17:11:42 -0700 Message-ID: Subject: Implementing 'tcflush()' support for ns8250 UART driver To: freebsd-hackers@freebsd.org Content-Type: multipart/mixed; boundary="000000000000995abc05ad5815a1" X-Rspamd-Queue-Id: 4BXhlc4wbgz4DY2 X-Spamd-Bar: - Authentication-Results: mx1.freebsd.org; dkim=pass header.d=gmail.com header.s=20161025 header.b=vd4x1NIS; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (mx1.freebsd.org: domain of shrikanth07@gmail.com designates 2a00:1450:4864:20::441 as permitted sender) smtp.mailfrom=shrikanth07@gmail.com X-Spamd-Result: default: False [-1.43 / 15.00]; RCVD_TLS_ALL(0.00)[]; ARC_NA(0.00)[]; R_DKIM_ALLOW(-0.20)[gmail.com:s=20161025]; NEURAL_HAM_MEDIUM(-0.58)[-0.584]; FROM_HAS_DN(0.00)[]; FREEMAIL_FROM(0.00)[gmail.com]; TO_MATCH_ENVRCPT_ALL(0.00)[]; MIME_GOOD(-0.10)[multipart/mixed,multipart/alternative,text/plain]; HAS_ATTACHMENT(0.00)[]; PREVIOUSLY_DELIVERED(0.00)[freebsd-hackers@freebsd.org]; RCPT_COUNT_ONE(0.00)[1]; TO_DN_NONE(0.00)[]; R_SPF_ALLOW(-0.20)[+ip6:2a00:1450:4000::/36]; DKIM_TRACE(0.00)[gmail.com:+]; DMARC_POLICY_ALLOW(-0.50)[gmail.com,none]; RCVD_IN_DNSWL_NONE(0.00)[2a00:1450:4864:20::441:from]; NEURAL_SPAM_SHORT(0.16)[0.157]; FROM_EQ_ENVFROM(0.00)[]; MIME_TRACE(0.00)[0:+,1:+,2:+,3:~,4:~]; FREEMAIL_ENVFROM(0.00)[gmail.com]; ASN(0.00)[asn:15169, ipnet:2a00:1450::/32, country:US]; RCVD_COUNT_TWO(0.00)[2]; MAILMAN_DEST(0.00)[freebsd-hackers]; DWL_DNSWL_NONE(0.00)[gmail.com:dkim] X-Content-Filtered-By: Mailman/MimeDel 2.1.33 X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 21 Aug 2020 00:11:58 -0000 --000000000000995abc05ad5815a1 Content-Type: text/plain; charset="UTF-8" A user has a need to flush UART FIFO buffers to get out of a framing error reported by the register REG_LSR and attempted to do a tcflush assuming it would ioctl 'TIOCFLUSH' command to the UART but ns8250 does not seem to have the support or is there another alternative? Below was the submitted change from the user, wanted to clarify with the experts on this (image based on stable/11 and hardware is a Juniper MX x86/64 custom routing engine control board) diff --git a/sys/dev/uart/uart_bus.h b/sys/dev/uart/uart_bus.h index a4bcf3d..5697c66 100644 --- a/sys/dev/uart/uart_bus.h +++ b/sys/dev/uart/uart_bus.h @@ -57,6 +57,7 @@ #define UART_IOCTL_IFLOW 2 #define UART_IOCTL_OFLOW 3 #define UART_IOCTL_BAUD 4 +#define UART_IOCTL_FLUSH 5 /* * UART class & instance (=softc) diff --git a/sys/dev/uart/uart_dev_ns8250.c b/sys/dev/uart/uart_dev_ns8250.c index 7dd331e..492f902 100755 --- a/sys/dev/uart/uart_dev_ns8250.c +++ b/sys/dev/uart/uart_dev_ns8250.c @@ -36,6 +36,7 @@ #include #include #include +#include #include #ifdef FDT @@ -608,6 +609,7 @@ struct uart_bas *bas; int baudrate, divisor, error; uint8_t efr, lcr; + int which = 0; bas = &sc->sc_bas; error = 0; @@ -667,6 +669,14 @@ else error = ENXIO; break; + case UART_IOCTL_FLUSH: + if (data & FREAD) + which |= UART_FLUSH_RECEIVER; + if (data & FWRITE) + which |= UART_FLUSH_TRANSMITTER; + + ns8250_flush(bas, which); + break; default: error = EINVAL; break; diff --git a/sys/dev/uart/uart_tty.c b/sys/dev/uart/uart_tty.c index e9b2baf..452a34c 100644 --- a/sys/dev/uart/uart_tty.c +++ b/sys/dev/uart/uart_tty.c @@ -312,6 +312,8 @@ *(uint32_t*)data = sc->sc_clk_mode; mtx_unlock(&sc->sc_clk_mutex); return 0; + case TIOCFLUSH: + return UART_IOCTL(sc, UART_IOCTL_FLUSH, *(int *)data); default: return pps_ioctl(cmd, data, &sc->sc_pps); } -- Shrikanth R K --000000000000995abc05ad5815a1 Content-Type: application/octet-stream; name="012f4a2.diff" Content-Disposition: attachment; filename="012f4a2.diff" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ke3gki7d0 ZGlmZiAtLWdpdCBhL3N5cy9kZXYvdWFydC91YXJ0X2J1cy5oIGIvc3lzL2Rldi91YXJ0L3VhcnRf YnVzLmgKaW5kZXggYTRiY2YzZC4uNTY5N2M2NiAxMDA2NDQKLS0tIGEvc3lzL2Rldi91YXJ0L3Vh cnRfYnVzLmgKKysrIGIvc3lzL2Rldi91YXJ0L3VhcnRfYnVzLmgKQEAgLTU3LDYgKzU3LDcgQEAK ICNkZWZpbmUJVUFSVF9JT0NUTF9JRkxPVwkyCiAjZGVmaW5lCVVBUlRfSU9DVExfT0ZMT1cJMwog I2RlZmluZQlVQVJUX0lPQ1RMX0JBVUQJCTQKKyNkZWZpbmUJVUFSVF9JT0NUTF9GTFVTSAk1CiAK IC8qCiAgKiBVQVJUIGNsYXNzICYgaW5zdGFuY2UgKD1zb2Z0YykKZGlmZiAtLWdpdCBhL3N5cy9k ZXYvdWFydC91YXJ0X2Rldl9uczgyNTAuYyBiL3N5cy9kZXYvdWFydC91YXJ0X2Rldl9uczgyNTAu YwppbmRleCA3ZGQzMzFlLi40OTJmOTAyIDEwMDc1NQotLS0gYS9zeXMvZGV2L3VhcnQvdWFydF9k ZXZfbnM4MjUwLmMKKysrIGIvc3lzL2Rldi91YXJ0L3VhcnRfZGV2X25zODI1MC5jCkBAIC0zNiw2 ICszNiw3IEBACiAjaW5jbHVkZSA8c3lzL2NvbmYuaD4KICNpbmNsdWRlIDxzeXMva2VybmVsLmg+ CiAjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgorI2luY2x1ZGUgPHN5cy9mY250bC5oPgogI2luY2x1 ZGUgPG1hY2hpbmUvYnVzLmg+CiAKICNpZmRlZiBGRFQKQEAgLTYwOCw2ICs2MDksNyBAQAogCXN0 cnVjdCB1YXJ0X2JhcyAqYmFzOwogCWludCBiYXVkcmF0ZSwgZGl2aXNvciwgZXJyb3I7CiAJdWlu dDhfdCBlZnIsIGxjcjsKKwlpbnQgd2hpY2ggPSAwOwogCiAJYmFzID0gJnNjLT5zY19iYXM7CiAJ ZXJyb3IgPSAwOwpAQCAtNjY3LDYgKzY2OSwxNCBAQAogCQllbHNlCiAJCQllcnJvciA9IEVOWElP OwogCQlicmVhazsKKyAgICAgICAgY2FzZSBVQVJUX0lPQ1RMX0ZMVVNIOgorCQlpZiAoZGF0YSAm IEZSRUFEKQorCQkJd2hpY2ggfD0gVUFSVF9GTFVTSF9SRUNFSVZFUjsKKwkJaWYgKGRhdGEgJiBG V1JJVEUpCisJCQl3aGljaCB8PSBVQVJUX0ZMVVNIX1RSQU5TTUlUVEVSOworCisJCW5zODI1MF9m bHVzaChiYXMsIHdoaWNoKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJZXJyb3IgPSBFSU5WQUw7 CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvc3lzL2Rldi91YXJ0L3VhcnRfdHR5LmMgYi9zeXMvZGV2 L3VhcnQvdWFydF90dHkuYwppbmRleCBlOWIyYmFmLi40NTJhMzRjIDEwMDY0NAotLS0gYS9zeXMv ZGV2L3VhcnQvdWFydF90dHkuYworKysgYi9zeXMvZGV2L3VhcnQvdWFydF90dHkuYwpAQCAtMzEy LDYgKzMxMiw4IEBACiAJCSoodWludDMyX3QqKWRhdGEgPSBzYy0+c2NfY2xrX21vZGU7CiAJCW10 eF91bmxvY2soJnNjLT5zY19jbGtfbXV0ZXgpOwogCQlyZXR1cm4gMDsKKwljYXNlIFRJT0NGTFVT SDoKKwkJcmV0dXJuIFVBUlRfSU9DVEwoc2MsIFVBUlRfSU9DVExfRkxVU0gsICooaW50ICopZGF0 YSk7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIHBwc19pb2N0bChjbWQsIGRhdGEsICZzYy0+c2NfcHBz KTsKIAl9Cg== --000000000000995abc05ad5815a1--