nvmem: core: update raw_len if the bit reading is required
authorDmitry Baryshkov <dmitry.baryshkov@linaro.org>
Fri, 11 Apr 2025 11:22:48 +0000 (12:22 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 11 Apr 2025 12:41:21 +0000 (14:41 +0200)
If NVMEM cell uses bit offset or specifies bit truncation, update
raw_len manually (following the cell->bytes update), ensuring that the
NVMEM access is still word-aligned.

Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Link: https://lore.kernel.org/r/20250411112251.68002-11-srinivas.kandagatla@linaro.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/nvmem/core.c

index 7b8c85f9e035cc9ce537c2905a7866383bda5b7f..e206efc29a0044739f9d56e1b131af2809365201 100644 (file)
@@ -594,9 +594,11 @@ static int nvmem_cell_info_to_nvmem_cell_entry_nodup(struct nvmem_device *nvmem,
        cell->nbits = info->nbits;
        cell->np = info->np;
 
-       if (cell->nbits)
+       if (cell->nbits) {
                cell->bytes = DIV_ROUND_UP(cell->nbits + cell->bit_offset,
                                           BITS_PER_BYTE);
+               cell->raw_len = ALIGN(cell->bytes, nvmem->word_size);
+       }
 
        if (!IS_ALIGNED(cell->offset, nvmem->stride)) {
                dev_err(&nvmem->dev,