Commit 651e013e authored by Mark Brown's avatar Mark Brown

regmap: Don't generate gather writes for single register raw writes

Since it is quite common for single register raw or async writes to be
generated by rbtree cache syncs or firmware downloads and essentially all
hardware will be faster with only a single transfer optimise this case by
copying single values into the internal scratch buffer before sending.
Signed-off-by: default avatarMark Brown <broonie@linaro.org>
parent 7e09a979
...@@ -1116,6 +1116,16 @@ int _regmap_raw_write(struct regmap *map, unsigned int reg, ...@@ -1116,6 +1116,16 @@ int _regmap_raw_write(struct regmap *map, unsigned int reg,
u8[0] |= map->write_flag_mask; u8[0] |= map->write_flag_mask;
/*
* Essentially all I/O mechanisms will be faster with a single
* buffer to write. Since register syncs often generate raw
* writes of single registers optimise that case.
*/
if (val != work_val && val_len == map->format.val_bytes) {
memcpy(work_val, val, map->format.val_bytes);
val = work_val;
}
if (async && map->bus->async_write) { if (async && map->bus->async_write) {
struct regmap_async *async; struct regmap_async *async;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment