From nobody Mon Jun 9 15:45:58 2025 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 4bGGVG6lcCz5y4dm; Mon, 09 Jun 2025 15:45:58 +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 "R11" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4bGGVG3KWrz45Py; Mon, 09 Jun 2025 15:45:58 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1749483958; 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=xUGDPT53Bp7b+HEm1ih7/nB0FjPJ6uePgyczQkPTc4o=; b=SGlI4KCT9oIyWCqNmIzptzyo6fblWUop1xIeXKNFzmM49RX2OY+m5YVkDHyxKloOnQ6frl fjInEhMsQbFttNqCxyqpugMiCgpcPrThnmz79xdgXP6ff8XaTmbdty5w5WJta/AsfNnvDY ygpxEVqq0IF3wANCn4eBzwqK/rl456/dP/Cl3QU/9O4Rpf6Ar23h/qWdnUcp9xI/p5D+8x H+2A0vL/n/aQkinQXTPP9ab1QmXqcKf4BZ8a+UJzV+V5Ke1Zs3RSXFigf39LrLUa5SaOq/ 28QFkBdTnkDnKajYObVNZ4Yhyv14kK/m7HFh0hkAtdQe2aQgUK3fwdVNn9rNpQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1749483958; 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=xUGDPT53Bp7b+HEm1ih7/nB0FjPJ6uePgyczQkPTc4o=; b=LPLzYy5Jb/qNlm8DBGNv8ADYI2FIqqBdP40OpC8sFzUDKY39mKi7V1r2WfkAaQQOtflVTR D676b4XT5SReFMnzdo8M/wzTtp9KVYG2cBBo7qbXnBYuCDMnwvzp6xooImo7x4IaVxNKzc OfWTv7KhUcTX1FgBERHmybO+C3BTuxwhdgJeO/Y8zEs1Dyl2l0aOzwUNIOd8NAsGsS0pNr /I+WVMVdaBHFc8L3xaYtxdMOaTnFNfGwAMXflyfZRUdxEsVFVtUEBhdQmkfLvbDxPfZjSV L0B3NvqAYBX78Ud5me3r+HUTdSEWedhHHJ90s62z/nljn7Qs9TA7WA4YRcfo3w== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1749483958; a=rsa-sha256; cv=none; b=KH50knFYC6VH3OrU8tOTn3INOj34jw2juxvBZEF+ohlNXWQJJGWmHJSM/OhcEy4yxr9N9z /PqwZOzuYuyjjYwem6sR91dWdPjTDMdGbVk4JQu9h23zYRx6b9S3lwgptoi443X+URi/k7 jnDuwCi6CzI4DteGSUi9AFxcTQYtJA0b9BAP7vtL41kSFjVyYRuy0jhwRCY/Ds4cWkMmUc ENGqeMDu/gILnAgb5P/WJM+xIObB0Jt6KOfHBK86mBt6VpotYMcHPTpnpLWCsZxa0c42Tb C1y4r6q4w9I5v7nDIyc6ZdsHqNH0Cqt3th34+LF4kiHjp9pe0k42FAiu1zuHvw== 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 4bGGVG2qlkz11yL; Mon, 09 Jun 2025 15:45:58 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 559FjwAA088463; Mon, 9 Jun 2025 15:45:58 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 559Fjwe0088460; Mon, 9 Jun 2025 15:45:58 GMT (envelope-from git) Date: Mon, 9 Jun 2025 15:45:58 GMT Message-Id: <202506091545.559Fjwe0088460@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Andrew Turner Subject: git: d49ed3608010 - main - Revert "scmi: Make transports report the effective length of the received messages" 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: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: andrew X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: d49ed3608010681a5d1958b6499b336d48ec0dcc Auto-Submitted: auto-generated The branch main has been updated by andrew: URL: https://cgit.FreeBSD.org/src/commit/?id=d49ed3608010681a5d1958b6499b336d48ec0dcc commit d49ed3608010681a5d1958b6499b336d48ec0dcc Author: Andrew Turner AuthorDate: 2025-06-09 13:21:52 +0000 Commit: Andrew Turner CommitDate: 2025-06-04 01:32:39 +0000 Revert "scmi: Make transports report the effective length of the received messages" Revert to reapply series as some patches were incorrect versions This reverts commit 9342829d578e26f10a5cbc26e2b9e66cfd9864c4. --- sys/dev/firmware/arm/scmi.c | 10 ++++------ sys/dev/firmware/arm/scmi.h | 2 +- sys/dev/firmware/arm/scmi_mailbox.c | 10 +++++----- sys/dev/firmware/arm/scmi_shmem.c | 22 +++++++++++++--------- sys/dev/firmware/arm/scmi_shmem.h | 6 +++--- sys/dev/firmware/arm/scmi_smc.c | 4 ++-- sys/dev/firmware/arm/scmi_virtio.c | 5 +++-- 7 files changed, 31 insertions(+), 28 deletions(-) diff --git a/sys/dev/firmware/arm/scmi.c b/sys/dev/firmware/arm/scmi.c index 00a229762414..37496136c828 100644 --- a/sys/dev/firmware/arm/scmi.c +++ b/sys/dev/firmware/arm/scmi.c @@ -146,8 +146,7 @@ static struct scmi_req *scmi_req_lookup_inflight(struct scmi_softc *, uint32_t); static int scmi_wait_for_response(struct scmi_softc *, struct scmi_req *, void **); -static void scmi_process_response(struct scmi_softc *, uint32_t, - unsigned int); +static void scmi_process_response(struct scmi_softc *, uint32_t); int scmi_attach(device_t dev) @@ -470,7 +469,7 @@ scmi_req_lookup_inflight(struct scmi_softc *sc, uint32_t hdr) } static void -scmi_process_response(struct scmi_softc *sc, uint32_t hdr, uint32_t rx_len) +scmi_process_response(struct scmi_softc *sc, uint32_t hdr) { bool timed_out = false; struct scmi_req *req; @@ -485,7 +484,6 @@ scmi_process_response(struct scmi_softc *sc, uint32_t hdr, uint32_t rx_len) mtx_lock_spin(&req->mtx); req->done = true; - req->msg.rx_len = rx_len; if (!req->timed_out) { /* * Consider the case in which a polled message is picked @@ -514,7 +512,7 @@ scmi_process_response(struct scmi_softc *sc, uint32_t hdr, uint32_t rx_len) } void -scmi_rx_irq_callback(device_t dev, void *chan, uint32_t hdr, uint32_t rx_len) +scmi_rx_irq_callback(device_t dev, void *chan, uint32_t hdr) { struct scmi_softc *sc; @@ -526,7 +524,7 @@ scmi_rx_irq_callback(device_t dev, void *chan, uint32_t hdr, uint32_t rx_len) return; } - scmi_process_response(sc, hdr, rx_len); + scmi_process_response(sc, hdr); } static int diff --git a/sys/dev/firmware/arm/scmi.h b/sys/dev/firmware/arm/scmi.h index 5ad7b0db3f5f..345ae6eeb03a 100644 --- a/sys/dev/firmware/arm/scmi.h +++ b/sys/dev/firmware/arm/scmi.h @@ -75,7 +75,7 @@ void *scmi_buf_get(device_t dev, uint8_t protocol_id, uint8_t message_id, int tx_payd_sz, int rx_payld_sz); void scmi_buf_put(device_t dev, void *buf); int scmi_request(device_t dev, void *in, void **); -void scmi_rx_irq_callback(device_t dev, void *chan, uint32_t hdr, uint32_t rx_len); +void scmi_rx_irq_callback(device_t dev, void *chan, uint32_t hdr); DECLARE_CLASS(scmi_driver); diff --git a/sys/dev/firmware/arm/scmi_mailbox.c b/sys/dev/firmware/arm/scmi_mailbox.c index d7b642b69b85..858b81f68845 100644 --- a/sys/dev/firmware/arm/scmi_mailbox.c +++ b/sys/dev/firmware/arm/scmi_mailbox.c @@ -70,14 +70,14 @@ static void scmi_mailbox_a2p_callback(void *arg) { struct scmi_mailbox_softc *sc; - uint32_t msg_header, rx_len; + uint32_t msg_header; int ret; sc = arg; - ret = scmi_shmem_read_msg_header(sc->a2p_dev, &msg_header, &rx_len); + ret = scmi_shmem_read_msg_header(sc->a2p_dev, &msg_header); if (ret == 0) - scmi_rx_irq_callback(sc->base.dev, sc->a2p_dev, msg_header, rx_len); + scmi_rx_irq_callback(sc->base.dev, sc->a2p_dev, msg_header); } static int @@ -154,7 +154,7 @@ scmi_mailbox_poll_msg(device_t dev, struct scmi_msg *msg, unsigned int tmo_ms) sc = device_get_softc(dev); do { - if (scmi_shmem_poll_msg(sc->a2p_dev, &msg->hdr, &msg->rx_len)) + if (scmi_shmem_poll_msg(sc->a2p_dev, &msg->hdr)) break; DELAY(SCMI_MBOX_POLL_INTERVAL_MS * 1000); } while (tmo_loops--); @@ -171,7 +171,7 @@ scmi_mailbox_collect_reply(device_t dev, struct scmi_msg *msg) sc = device_get_softc(dev); ret = scmi_shmem_read_msg_payload(sc->a2p_dev, - msg->payld, msg->rx_len - SCMI_MSG_HDR_SIZE, msg->rx_len); + msg->payld, msg->rx_len - SCMI_MSG_HDR_SIZE); return (ret); } diff --git a/sys/dev/firmware/arm/scmi_shmem.c b/sys/dev/firmware/arm/scmi_shmem.c index a63d96b64cb5..9bab4bc4004e 100644 --- a/sys/dev/firmware/arm/scmi_shmem.c +++ b/sys/dev/firmware/arm/scmi_shmem.c @@ -247,7 +247,7 @@ scmi_shmem_clear_channel(device_t dev) } int -scmi_shmem_read_msg_header(device_t dev, uint32_t *msg_header, unsigned int *rx_len) +scmi_shmem_read_msg_header(device_t dev, uint32_t *msg_header) { uint32_t length, header; @@ -256,7 +256,6 @@ scmi_shmem_read_msg_header(device_t dev, uint32_t *msg_header, unsigned int *rx_ if (le32toh(length) < sizeof(header)) return (EINVAL); - *rx_len = le32toh(length); /* Read header. */ scmi_shmem_read(dev, SMT_OFFSET_MSG_HEADER, &header, SMT_SIZE_MSG_HEADER); @@ -267,11 +266,14 @@ scmi_shmem_read_msg_header(device_t dev, uint32_t *msg_header, unsigned int *rx_ } int -scmi_shmem_read_msg_payload(device_t dev, uint8_t *buf, uint32_t buf_len, uint32_t rx_len) +scmi_shmem_read_msg_payload(device_t dev, uint8_t *buf, uint32_t buf_len) { - uint32_t payld_len; + uint32_t length, payld_len; + + /* Read length. */ + scmi_shmem_read(dev, SMT_OFFSET_LENGTH, &length, SMT_SIZE_LENGTH); + payld_len = le32toh(length) - SCMI_MSG_HDR_SIZE; - payld_len = rx_len - SCMI_MSG_HDR_SIZE; if (payld_len > buf_len) { device_printf(dev, "RX payload %dbytes exceeds buflen %dbytes. Truncate.\n", @@ -294,7 +296,7 @@ scmi_shmem_tx_complete(device_t dev) scmi_shmem_release_channel(sc); } -bool scmi_shmem_poll_msg(device_t dev, uint32_t *msg_header, uint32_t *rx_len) +bool scmi_shmem_poll_msg(device_t dev, uint32_t *msg_header) { uint32_t status; bool ret; @@ -304,10 +306,12 @@ bool scmi_shmem_poll_msg(device_t dev, uint32_t *msg_header, uint32_t *rx_len) ret = (status & (SCMI_SHMEM_CHAN_STAT_CHANNEL_ERROR | SCMI_SHMEM_CHAN_STAT_CHANNEL_FREE)); - if (ret == 0) - return (ret); - return (scmi_shmem_read_msg_header(dev, msg_header, rx_len)); + if (ret) + scmi_shmem_read(dev, SMT_OFFSET_MSG_HEADER, msg_header, + SMT_SIZE_MSG_HEADER); + + return (ret); } static device_method_t shmem_methods[] = { diff --git a/sys/dev/firmware/arm/scmi_shmem.h b/sys/dev/firmware/arm/scmi_shmem.h index bc8284502129..ed8763d5c145 100644 --- a/sys/dev/firmware/arm/scmi_shmem.h +++ b/sys/dev/firmware/arm/scmi_shmem.h @@ -63,9 +63,9 @@ struct scmi_smt_header { device_t scmi_shmem_get(device_t sdev, phandle_t node, int index); int scmi_shmem_prepare_msg(device_t dev, uint8_t *msg, uint32_t tx_len, bool polling); -bool scmi_shmem_poll_msg(device_t dev, uint32_t *msg_header, uint32_t *rx_len); -int scmi_shmem_read_msg_header(device_t dev, uint32_t *msg_header, uint32_t *rx_len); -int scmi_shmem_read_msg_payload(device_t dev, uint8_t *buf, uint32_t buf_len, uint32_t rx_len); +bool scmi_shmem_poll_msg(device_t dev, uint32_t *msg_header); +int scmi_shmem_read_msg_header(device_t dev, uint32_t *msg_header); +int scmi_shmem_read_msg_payload(device_t dev, uint8_t *buf, uint32_t buf_len); void scmi_shmem_tx_complete(device_t); void scmi_shmem_clear_channel(device_t); diff --git a/sys/dev/firmware/arm/scmi_smc.c b/sys/dev/firmware/arm/scmi_smc.c index 81c66ad7bb46..9f0d899233fa 100644 --- a/sys/dev/firmware/arm/scmi_smc.c +++ b/sys/dev/firmware/arm/scmi_smc.c @@ -122,7 +122,7 @@ scmi_smc_poll_msg(device_t dev, struct scmi_msg *msg, unsigned int tmo) * Nothing to poll since commands are completed as soon as smc * returns ... but did we get back what we were poling for ? */ - scmi_shmem_read_msg_header(sc->a2p_dev, &msg->hdr, &msg->rx_len); + scmi_shmem_read_msg_header(sc->a2p_dev, &msg->hdr); return (0); } @@ -136,7 +136,7 @@ scmi_smc_collect_reply(device_t dev, struct scmi_msg *msg) sc = device_get_softc(dev); ret = scmi_shmem_read_msg_payload(sc->a2p_dev, - msg->payld, msg->rx_len - SCMI_MSG_HDR_SIZE, msg->rx_len); + msg->payld, msg->rx_len - SCMI_MSG_HDR_SIZE); return (ret); } diff --git a/sys/dev/firmware/arm/scmi_virtio.c b/sys/dev/firmware/arm/scmi_virtio.c index 8714fee2ec87..12cbb9ecefd5 100644 --- a/sys/dev/firmware/arm/scmi_virtio.c +++ b/sys/dev/firmware/arm/scmi_virtio.c @@ -76,7 +76,7 @@ scmi_virtio_callback(void *msg, unsigned int len, void *priv) } hdr = le32toh(*((uint32_t *)msg)); - scmi_rx_irq_callback(sc->base.dev, msg, hdr, len); + scmi_rx_irq_callback(sc->base.dev, msg, hdr); } static void * @@ -225,6 +225,7 @@ scmi_virtio_poll_msg(device_t dev, struct scmi_msg *msg, unsigned int tmo_ms) } rx_msg = hdr_to_msg(rx_buf); + rx_msg->rx_len = rx_len; /* Complete the polling on any poll path */ if (rx_msg->polling) atomic_store_rel_int(&rx_msg->poll_done, 1); @@ -241,7 +242,7 @@ scmi_virtio_poll_msg(device_t dev, struct scmi_msg *msg, unsigned int tmo_ms) rx_msg->hdr, rx_msg->polling); if (!rx_msg->polling) - scmi_rx_irq_callback(sc->base.dev, rx_msg, rx_msg->hdr, rx_len); + scmi_rx_irq_callback(sc->base.dev, rx_msg, rx_msg->hdr); } return (tmo_loops > 0 ? 0 : ETIMEDOUT);