提交 1f26a60b 编写于 作者: G Geert Uytterhoeven 提交者: Krzysztof Kozlowski

memory: renesas-rpc-if: Simplify single/double data register access

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: NGeert Uytterhoeven <geert+renesas@glider.be>
Tested-by: NWolfram Sang <wsa+renesas@sang-engineering.com>
Reviewed-by: NWolfram Sang <wsa+renesas@sang-engineering.com>
Link: https://lore.kernel.org/r/c3b2a8d1a69f1b1e8d1a460148406cfb83e52eb4.1649857740.git.geert+renesas@glider.beSigned-off-by: NKrzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
上级 8f0e3af8
...@@ -458,7 +458,7 @@ int rpcif_manual_xfer(struct rpcif *rpc) ...@@ -458,7 +458,7 @@ int rpcif_manual_xfer(struct rpcif *rpc)
case RPCIF_DATA_OUT: case RPCIF_DATA_OUT:
while (pos < rpc->xferlen) { while (pos < rpc->xferlen) {
u32 bytes_left = rpc->xferlen - pos; u32 bytes_left = rpc->xferlen - pos;
u32 nbytes, data[2]; u32 nbytes, data[2], *p = data;
smcr = rpc->smcr | RPCIF_SMCR_SPIE; smcr = rpc->smcr | RPCIF_SMCR_SPIE;
...@@ -471,15 +471,9 @@ int rpcif_manual_xfer(struct rpcif *rpc) ...@@ -471,15 +471,9 @@ int rpcif_manual_xfer(struct rpcif *rpc)
regmap_write(rpc->regmap, RPCIF_SMENR, smenr); regmap_write(rpc->regmap, RPCIF_SMENR, smenr);
memcpy(data, rpc->buffer + pos, nbytes); memcpy(data, rpc->buffer + pos, nbytes);
if (nbytes == 8) { if (nbytes == 8)
regmap_write(rpc->regmap, RPCIF_SMWDR1, regmap_write(rpc->regmap, RPCIF_SMWDR1, *p++);
data[0]); regmap_write(rpc->regmap, RPCIF_SMWDR0, *p);
regmap_write(rpc->regmap, RPCIF_SMWDR0,
data[1]);
} else {
regmap_write(rpc->regmap, RPCIF_SMWDR0,
data[0]);
}
regmap_write(rpc->regmap, RPCIF_SMCR, smcr); regmap_write(rpc->regmap, RPCIF_SMCR, smcr);
ret = wait_msg_xfer_end(rpc); ret = wait_msg_xfer_end(rpc);
...@@ -521,7 +515,7 @@ int rpcif_manual_xfer(struct rpcif *rpc) ...@@ -521,7 +515,7 @@ int rpcif_manual_xfer(struct rpcif *rpc)
} }
while (pos < rpc->xferlen) { while (pos < rpc->xferlen) {
u32 bytes_left = rpc->xferlen - pos; 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 may only be 1, 2, 4, or 8 */
nbytes = bytes_left >= max ? max : (1 << ilog2(bytes_left)); nbytes = bytes_left >= max ? max : (1 << ilog2(bytes_left));
...@@ -537,15 +531,9 @@ int rpcif_manual_xfer(struct rpcif *rpc) ...@@ -537,15 +531,9 @@ int rpcif_manual_xfer(struct rpcif *rpc)
if (ret) if (ret)
goto err_out; goto err_out;
if (nbytes == 8) { if (nbytes == 8)
regmap_read(rpc->regmap, RPCIF_SMRDR1, regmap_read(rpc->regmap, RPCIF_SMRDR1, p++);
&data[0]); regmap_read(rpc->regmap, RPCIF_SMRDR0, p);
regmap_read(rpc->regmap, RPCIF_SMRDR0,
&data[1]);
} else {
regmap_read(rpc->regmap, RPCIF_SMRDR0,
&data[0]);
}
memcpy(rpc->buffer + pos, data, nbytes); memcpy(rpc->buffer + pos, data, nbytes);
pos += nbytes; pos += nbytes;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册