From nobody Fri Jan 19 16:33:33 2024 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4TGlYB0rL5z56rPm; Fri, 19 Jan 2024 16:33:34 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TGlY974q9z45Ks; Fri, 19 Jan 2024 16:33:33 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1705682014; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=odhuUiZG/VxSwArg/bFS8Rn5wqxWsXauxDAIk4X31oQ=; b=AtSwXBa/8Mb50XOFTFLDSIq+elPrtLb+3GisL7DCPT8kAHb60x0dx7Hb1Pvmzxmb20Ph/e OG2KNKo2YygJlbvSiYsYne91k/XRREmn3EmXV6NlUwUvMnvGub/nxv6wT6zzE/V2Ig+eGF 5qwRqSp5w0AIFno7+noTCrN2hD8Y9ts+DMOMBXief1VyrcUsjHWDjI9gKCDtCTLM/w7LpH J/It2p2bVxzW2srtNlCZpUfhn/rpQo8MoQj6iEsu3c627UHpIBBA69d3qY2pIvl8LbjGfw MExPeJAF/Opsm/c3j8fB9s3DigX5iMxL9tpM17PfWtPJMkZcM10frRZJ2BCclw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1705682014; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=odhuUiZG/VxSwArg/bFS8Rn5wqxWsXauxDAIk4X31oQ=; b=jYefgQg/pCff80HMPme2edJ8Qcvh0nxkUtfm2peF+mx/KZTxUC/MVvUo+71LiaTF2AZfZJ z3c37sY/W6b1BJcQa4LqHul4YNSybcDsGsiNz/zMA/nWnPeqQmDDAfonAIdF9yyW767K5a p7lulMiKHFuGGeB/gpP3ULnVoYgZ4yNENo/pQGWAMII1z6j+peBgLhPE+VUbdp4GBkXayw 4wexBRXSPYRbarvNeVPsFvaA8aJz88pme3M15cB2Npzv7FlJlbPlphZqNGL4gdHsJSE6Yh qVYBFtk2JnMON9PM+h6zNW4XgqgTLhsDD8hy7RobnXxsRwvEGBcAy8kzXJICiw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1705682014; a=rsa-sha256; cv=none; b=TmRMnQUvHMeTVqyKkziPRMQSuBghFhvR+VEK8jB8TR/7NO641coK3jlRUMllpQhSYUrHvk x1oEiXHM7JlaNMDqsLx5TRbdvwb0BbNcHjtvepw+qHmOAaU+uhcw1GyWQwQask3Ji0SRjF bGu4Gvy2/YiVcZvEj6vx2A8wbC03buwN8wZB6omPUCo8+rB3AO+sYhO1U0Zsm8H82GMjvs NBt4OH8FKARCXA6wXDv6h0uJCG+CYirqnU1K2n9/Ut3YvYomkVcKYUD4fKzGNblq2Lnrzj 5H/4r94RZDgT8YgBHYvYsq1IOqN+XfbvmELAjFsZJ0r1tHLOJ6tHZNc4b8NZaQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4TGlY9685kzys9; Fri, 19 Jan 2024 16:33:33 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.17.1/8.17.1) with ESMTP id 40JGXXgk025892; Fri, 19 Jan 2024 16:33:33 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.17.1/8.17.1/Submit) id 40JGXXDl025889; Fri, 19 Jan 2024 16:33:33 GMT (envelope-from git) Date: Fri, 19 Jan 2024 16:33:33 GMT Message-Id: <202401191633.40JGXXDl025889@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Alexander Motin Subject: git: 512235a1d36d - stable/14 - ig4: Fix FIFO depths detection List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: mav X-Git-Repository: src X-Git-Refname: refs/heads/stable/14 X-Git-Reftype: branch X-Git-Commit: 512235a1d36dd0a855e8a4d3e876100b5f67b3af Auto-Submitted: auto-generated The branch stable/14 has been updated by mav: URL: https://cgit.FreeBSD.org/src/commit/?id=512235a1d36dd0a855e8a4d3e876100b5f67b3af commit 512235a1d36dd0a855e8a4d3e876100b5f67b3af Author: Alexander Motin AuthorDate: 2023-12-24 00:02:49 +0000 Commit: Alexander Motin CommitDate: 2024-01-19 16:33:10 +0000 ig4: Fix FIFO depths detection At least on my Tiger Lake-LP queue depth detection failed before the ig4iic_set_config() call, resulting in no FIFO use. Moving it after solves the problem, getting proper 64 bytes size. On my Dell XPS 13 9310 with iichid(4) touchscreen and touchpad this by few times reduces context switch rate in the driver, and probably also improves the I2C bus utilization. MFC after: 1 month (cherry picked from commit 9c9d7fdd9f0041783955c5f540ac55a900877c0c) --- sys/dev/ichiic/ig4_iic.c | 50 ++++++++++++++++++++++++++++++------------------ 1 file changed, 31 insertions(+), 19 deletions(-) diff --git a/sys/dev/ichiic/ig4_iic.c b/sys/dev/ichiic/ig4_iic.c index 195bca62928a..3a3271454738 100644 --- a/sys/dev/ichiic/ig4_iic.c +++ b/sys/dev/ichiic/ig4_iic.c @@ -847,23 +847,6 @@ ig4iic_get_config(ig4iic_softc_t *sc) sc->cfg.txfifo_depth = IG4_PARAM1_TXFIFO_DEPTH(v); if (IG4_PARAM1_RXFIFO_DEPTH(v) != 0) sc->cfg.rxfifo_depth = IG4_PARAM1_RXFIFO_DEPTH(v); - } else { - /* - * Hardware does not allow FIFO Threshold Levels value to be - * set larger than the depth of the buffer. If an attempt is - * made to do that, the actual value set will be the maximum - * depth of the buffer. - */ - v = reg_read(sc, IG4_REG_TX_TL); - reg_write(sc, IG4_REG_TX_TL, v | IG4_FIFO_MASK); - sc->cfg.txfifo_depth = - (reg_read(sc, IG4_REG_TX_TL) & IG4_FIFO_MASK) + 1; - reg_write(sc, IG4_REG_TX_TL, v); - v = reg_read(sc, IG4_REG_RX_TL); - reg_write(sc, IG4_REG_RX_TL, v | IG4_FIFO_MASK); - sc->cfg.rxfifo_depth = - (reg_read(sc, IG4_REG_RX_TL) & IG4_FIFO_MASK) + 1; - reg_write(sc, IG4_REG_RX_TL, v); } /* Override hardware config with IC_clock-based counter values */ @@ -915,8 +898,6 @@ ig4iic_get_config(ig4iic_softc_t *sc) printf(" Fast: 0x%04hx:0x%04hx:0x%04hx\n", sc->cfg.fs_scl_hcnt, sc->cfg.fs_scl_lcnt, sc->cfg.fs_sda_hold); - printf(" FIFO: RX:0x%04x: TX:0x%04x\n", - sc->cfg.rxfifo_depth, sc->cfg.txfifo_depth); } } @@ -1012,6 +993,36 @@ ig4iic_set_config(ig4iic_softc_t *sc, bool reset) return (0); } +static void +ig4iic_get_fifo(ig4iic_softc_t *sc) +{ + uint32_t v; + + /* + * Hardware does not allow FIFO Threshold Levels value to be set larger + * than the depth of the buffer. If an attempt is made to do that, the + * actual value set will be the maximum depth of the buffer. + */ + if (sc->cfg.txfifo_depth == 0) { + v = reg_read(sc, IG4_REG_TX_TL); + reg_write(sc, IG4_REG_TX_TL, v | IG4_FIFO_MASK); + sc->cfg.txfifo_depth = + (reg_read(sc, IG4_REG_TX_TL) & IG4_FIFO_MASK) + 1; + reg_write(sc, IG4_REG_TX_TL, v); + } + if (sc->cfg.rxfifo_depth == 0) { + v = reg_read(sc, IG4_REG_RX_TL); + reg_write(sc, IG4_REG_RX_TL, v | IG4_FIFO_MASK); + sc->cfg.rxfifo_depth = + (reg_read(sc, IG4_REG_RX_TL) & IG4_FIFO_MASK) + 1; + reg_write(sc, IG4_REG_RX_TL, v); + } + if (bootverbose) { + printf(" FIFO: RX:0x%04x: TX:0x%04x\n", + sc->cfg.rxfifo_depth, sc->cfg.txfifo_depth); + } +} + /* * Called from ig4iic_pci_attach/detach() */ @@ -1028,6 +1039,7 @@ ig4iic_attach(ig4iic_softc_t *sc) error = ig4iic_set_config(sc, IG4_HAS_ADDREGS(sc->version)); if (error) goto done; + ig4iic_get_fifo(sc); sc->iicbus = device_add_child(sc->dev, "iicbus", -1); if (sc->iicbus == NULL) {