The branch main has been updated by andrew:

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

commit b0be4172f55752bd5d868ac8fe3a5abf36fe91e7
Author:     Andrew Turner <and...@freebsd.org>
AuthorDate: 2025-06-09 13:21:40 +0000
Commit:     Andrew Turner <and...@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);
 }
 

Reply via email to