git: b0be4172f557 - main - Revert "scmi: Add scmi_token_reserve helper"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 09 Jun 2025 15:45:53 UTC
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);
}