memory: renesas-rpc-if: Simplify single/double data register access
authorGeert Uytterhoeven <geert+renesas@glider.be>
Wed, 13 Apr 2022 13:49:21 +0000 (15:49 +0200)
committerKrzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Thu, 14 Apr 2022 07:43:59 +0000 (09:43 +0200)
For manual write and read, factor out the common access to the first
data register by keeping track of the current data pointer.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Tested-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
Reviewed-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
Link: https://lore.kernel.org/r/c3b2a8d1a69f1b1e8d1a460148406cfb83e52eb4.1649857740.git.geert+renesas@glider.be
Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
drivers/memory/renesas-rpc-if.c

index e4cc64f..f946b77 100644 (file)
@@ -458,7 +458,7 @@ int rpcif_manual_xfer(struct rpcif *rpc)
        case RPCIF_DATA_OUT:
                while (pos < rpc->xferlen) {
                        u32 bytes_left = rpc->xferlen - pos;
-                       u32 nbytes, data[2];
+                       u32 nbytes, data[2], *p = data;
 
                        smcr = rpc->smcr | RPCIF_SMCR_SPIE;
 
@@ -471,15 +471,9 @@ int rpcif_manual_xfer(struct rpcif *rpc)
                        regmap_write(rpc->regmap, RPCIF_SMENR, smenr);
 
                        memcpy(data, rpc->buffer + pos, nbytes);
-                       if (nbytes == 8) {
-                               regmap_write(rpc->regmap, RPCIF_SMWDR1,
-                                            data[0]);
-                               regmap_write(rpc->regmap, RPCIF_SMWDR0,
-                                            data[1]);
-                       } else {
-                               regmap_write(rpc->regmap, RPCIF_SMWDR0,
-                                            data[0]);
-                       }
+                       if (nbytes == 8)
+                               regmap_write(rpc->regmap, RPCIF_SMWDR1, *p++);
+                       regmap_write(rpc->regmap, RPCIF_SMWDR0, *p);
 
                        regmap_write(rpc->regmap, RPCIF_SMCR, smcr);
                        ret = wait_msg_xfer_end(rpc);
@@ -521,7 +515,7 @@ int rpcif_manual_xfer(struct rpcif *rpc)
                }
                while (pos < rpc->xferlen) {
                        u32 bytes_left = rpc->xferlen - pos;
-                       u32 nbytes, data[2];
+                       u32 nbytes, data[2], *p = data;
 
                        /* nbytes may only be 1, 2, 4, or 8 */
                        nbytes = bytes_left >= max ? max : (1 << ilog2(bytes_left));
@@ -537,15 +531,9 @@ int rpcif_manual_xfer(struct rpcif *rpc)
                        if (ret)
                                goto err_out;
 
-                       if (nbytes == 8) {
-                               regmap_read(rpc->regmap, RPCIF_SMRDR1,
-                                           &data[0]);
-                               regmap_read(rpc->regmap, RPCIF_SMRDR0,
-                                           &data[1]);
-                       } else {
-                               regmap_read(rpc->regmap, RPCIF_SMRDR0,
-                                           &data[0]);
-                       }
+                       if (nbytes == 8)
+                               regmap_read(rpc->regmap, RPCIF_SMRDR1, p++);
+                       regmap_read(rpc->regmap, RPCIF_SMRDR0, p);
                        memcpy(rpc->buffer + pos, data, nbytes);
 
                        pos += nbytes;