Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 9 Jun 2025 15:45:53 GMT
From:      Andrew Turner <andrew@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: b0be4172f557 - main - Revert "scmi: Add scmi_token_reserve helper"
Message-ID:  <202506091545.559FjrNS088312@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by andrew:

URL: https://cgit.FreeBSD.org/src/commit/?id=b0be4172f55752bd5d868ac8fe3a5abf36fe91e7

commit b0be4172f55752bd5d868ac8fe3a5abf36fe91e7
Author:     Andrew Turner <andrew@FreeBSD.org>
AuthorDate: 2025-06-09 13:21:40 +0000
Commit:     Andrew Turner <andrew@FreeBSD.org>
CommitDate: 2025-06-04 01:32:39 +0000

    Revert "scmi: Add scmi_token_reserve helper"
    
    Revert to reapply series as some patches were incorrect versions
    
    This reverts commit c508841dfc5923ef81ed8ea61da364fb20616bbf.
---
 sys/dev/firmware/arm/scmi.c | 48 +++++++++------------------------------------
 1 file changed, 9 insertions(+), 39 deletions(-)

diff --git a/sys/dev/firmware/arm/scmi.c b/sys/dev/firmware/arm/scmi.c
index c24768a5668a..8104f4e10429 100644
--- a/sys/dev/firmware/arm/scmi.c
+++ b/sys/dev/firmware/arm/scmi.c
@@ -93,7 +93,6 @@ struct scmi_req {
 	bool		timed_out;
 	bool		use_polling;
 	bool		done;
-	bool		is_raw;
 	struct mtx	mtx;
 	LIST_ENTRY(scmi_req)	next;
 	int		protocol_id;
@@ -140,7 +139,6 @@ static void		scmi_req_free_unlocked(struct scmi_softc *,
 static void		scmi_req_get(struct scmi_softc *, struct scmi_req *);
 static void		scmi_req_put(struct scmi_softc *, struct scmi_req *);
 static int		scmi_token_pick(struct scmi_softc *);
-static int		scmi_token_reserve(struct scmi_softc *, uint16_t);
 static void		scmi_token_release_unlocked(struct scmi_softc *, int);
 static int		scmi_req_track_inflight(struct scmi_softc *,
 			    struct scmi_req *);
@@ -378,7 +376,6 @@ scmi_req_free_unlocked(struct scmi_softc *sc, enum scmi_chan ch_idx,
 	mtx_lock_spin(&rp->mtx);
 	req->timed_out = false;
 	req->done = false;
-	req->is_raw = false;
 	refcount_init(&req->cnt, 0);
 	LIST_INSERT_HEAD(&rp->head, req, next);
 	mtx_unlock_spin(&rp->mtx);
@@ -427,6 +424,7 @@ scmi_token_pick(struct scmi_softc *sc)
 	 */
 	next_msg_id = sc->trs->next_id++ & SCMI_HDR_TOKEN_BF;
 	token = BIT_FFS_AT(SCMI_MAX_TOKEN, &sc->trs->avail_tokens, next_msg_id);
+	/* TODO Account for wrap-arounds and holes */
 	if (token != 0)
 		BIT_CLR(SCMI_MAX_TOKEN, token - 1, &sc->trs->avail_tokens);
 	mtx_unlock_spin(&sc->trs->mtx);
@@ -442,28 +440,6 @@ scmi_token_pick(struct scmi_softc *sc)
 	return ((int)(token - 1));
 }
 
-static int
-scmi_token_reserve(struct scmi_softc *sc, uint16_t candidate)
-{
-	int token = -EBUSY, retries = 3;
-
-	do {
-		mtx_lock_spin(&sc->trs->mtx);
-		if (BIT_ISSET(SCMI_MAX_TOKEN, candidate, &sc->trs->avail_tokens)) {
-			BIT_CLR(SCMI_MAX_TOKEN, candidate, &sc->trs->avail_tokens);
-			token = candidate;
-			sc->trs->next_id++;
-		}
-		mtx_unlock_spin(&sc->trs->mtx);
-		if (token == candidate || retries-- == 0)
-			break;
-
-		pause("scmi_tk_reserve", hz);
-	} while (1);
-
-	return (token);
-}
-
 static void
 scmi_token_release_unlocked(struct scmi_softc *sc, int token)
 {
@@ -474,23 +450,19 @@ scmi_token_release_unlocked(struct scmi_softc *sc, int token)
 static int
 scmi_finalize_req(struct scmi_softc *sc, struct scmi_req *req)
 {
-	if (!req->is_raw)
-		req->token = scmi_token_pick(sc);
-	else
-		req->token = scmi_token_reserve(sc, SCMI_MSG_TOKEN(req->msg.hdr));
+	uint32_t header = 0;
 
+	req->token = scmi_token_pick(sc);
 	if (req->token < 0)
 		return (EBUSY);
 
-	if (!req->is_raw) {
-		req->msg.hdr = req->message_id;
-		req->msg.hdr |= SCMI_MSG_TYPE_CMD << SCMI_HDR_MESSAGE_TYPE_S;
-		req->msg.hdr |= req->protocol_id << SCMI_HDR_PROTOCOL_ID_S;
-		req->msg.hdr |= req->token << SCMI_HDR_TOKEN_S;
-	}
+	header = req->message_id;
+	header |= SCMI_MSG_TYPE_CMD << SCMI_HDR_MESSAGE_TYPE_S;
+	header |= req->protocol_id << SCMI_HDR_PROTOCOL_ID_S;
+	header |= req->token << SCMI_HDR_TOKEN_S;
 
-	/* Save requested header */
-	req->header = req->msg.hdr;
+	req->header = htole32(header);
+	req->msg.hdr = htole32(header);
 
 	return (0);
 }
@@ -698,8 +670,6 @@ scmi_msg_get(device_t dev, int tx_payld_sz, int rx_payld_sz)
 	if (req == NULL)
 		return (NULL);
 
-	req->is_raw = true;
-
 	return (&req->msg);
 }
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202506091545.559FjrNS088312>