linux-xiaomi-chiron/drivers/memory
Wolfram Sang fff53a551d memory: renesas-rpc-if: Correct QSPI data transfer in Manual mode
This patch fixes 2 problems:
[1] The output warning logs and data loss when performing
mount/umount then remount the device with jffs2 format.
[2] The access width of SMWDR[0:1]/SMRDR[0:1] register is wrong.

This is the sample warning logs when performing mount/umount then
remount the device with jffs2 format:
jffs2: jffs2_scan_inode_node(): CRC failed on node at 0x031c51d4:
Read 0x00034e00, calculated 0xadb272a7

The reason for issue [1] is that the writing data seems to
get messed up.
Data is only completed when the number of bytes is divisible by 4.
If you only have 3 bytes of data left to write, 1 garbage byte
is inserted after the end of the write stream.
If you only have 2 bytes of data left to write, 2 bytes of '00'
are added into the write stream.
If you only have 1 byte of data left to write, 2 bytes of '00'
are added into the write stream. 1 garbage byte is inserted after
the end of the write stream.

To solve problem [1], data must be written continuously in serial
and the write stream ends when data is out.

Following HW manual 62.2.15, access to SMWDR0 register should be
in the same size as the transfer size specified in the SPIDE[3:0]
bits in the manual mode enable setting register (SMENR).
Be sure to access from address 0.

So, in 16-bit transfer (SPIDE[3:0]=b'1100), SMWDR0 should be
accessed by 16-bit width.
Similar to SMWDR1, SMDDR0/1 registers.
In current code, SMWDR0 register is accessed by regmap_write()
that only set up to do 32-bit width.

To solve problem [2], data must be written 16-bit or 8-bit when
transferring 1-byte or 2-byte.

Fixes: ca7d8b980b ("memory: add Renesas RPC-IF driver")
Cc: <stable@vger.kernel.org>
Signed-off-by: Duc Nguyen <duc.nguyen.ub@renesas.com>
[wsa: refactored to use regmap only via reg_read/reg_write]
Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
Tested-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Link: https://lore.kernel.org/r/20210922091007.5516-1-wsa+renesas@sang-engineering.com
Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
2021-09-28 12:32:19 +02:00
..
samsung Power management updates for 5.13-rc1 2021-04-26 15:10:25 -07:00
tegra memory: tegra: fix unused-function warning 2021-07-23 08:25:34 +02:00
.gitignore .gitignore: prefix local generated files with a slash 2021-05-02 00:43:35 +09:00
atmel-ebi.c memory: atmel-ebi: add missing of_node_put for loop iteration 2021-05-11 08:49:18 -04:00
atmel-sdramc.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 340 2019-06-05 17:37:07 +02:00
brcmstb_dpfe.c memory: brcmstb_dpfe: Simplify with dev_err_probe() 2020-09-02 17:22:31 +02:00
bt1-l2-ctl.c memory: bt1-l2-ctl: Add blank lines after declarations 2020-07-27 11:13:33 +02:00
da8xx-ddrctl.c memory: da8xx-ddrctl: Remove unused 'node' variable 2020-07-24 16:18:32 +02:00
dfl-emif.c memory: dfl-emif: add the DFL EMIF private feature driver 2021-01-07 15:21:27 +01:00
emif-asm-offsets.c memory: emif-asm-offsets: Add GPLv2 SPDX license header 2020-07-24 16:18:32 +02:00
emif.c memory: emif: remove unused frequency and voltage notifiers 2021-06-10 09:24:46 +02:00
emif.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
fsl-corenet-cf.c memory: fsl-corenet-cf: Remove redundant dev_err call in ccf_probe() 2021-04-01 19:56:52 +02:00
fsl_ifc.c memory: fsl_ifc: fix leak of private memory on probe failure 2021-06-10 09:24:37 +02:00
jedec_ddr.h memory: Extend of_memory with LPDDR3 support 2019-10-01 20:28:38 +02:00
jedec_ddr_data.c ARM: SoC-related driver updates 2019-07-19 17:13:56 -07:00
jz4780-nemc.c memory: jz4780_nemc: Fix potential NULL dereference in jz4780_nemc_probe() 2020-12-05 14:57:52 +01:00
Kconfig Char/Misc driver patches for 5.12-rc1 2021-02-24 10:25:37 -08:00
Makefile memory: dfl-emif: add the DFL EMIF private feature driver 2021-01-07 15:21:27 +01:00
mtk-smi.c memory: mtk-smi: Add device-link between smi-larb and smi-common 2021-04-13 16:56:31 +02:00
mvebu-devbus.c memory: mvebu-devbus: Align with open parenthesis 2020-07-27 11:13:33 +02:00
of_memory.c memory: of: Correct kerneldoc 2020-07-27 11:13:33 +02:00
of_memory.h memory: of: Remove unneeded extern from function declarations 2020-07-24 16:18:32 +02:00
omap-gpmc.c memory: omap-gpmc: Drop custom PM calls with cpu_pm notifier 2021-07-29 09:02:27 +02:00
pl172.c amba: Make the remove callback return void 2021-02-02 14:25:50 +01:00
pl353-smc.c Memory controller drivers for v5.14 - PL353 2021-06-12 08:53:06 -07:00
renesas-rpc-if.c memory: renesas-rpc-if: Correct QSPI data transfer in Manual mode 2021-09-28 12:32:19 +02:00
stm32-fmc2-ebi.c memory: stm32-fmc2-ebi: add missing of_node_put for loop iteration 2021-05-11 08:49:18 -04:00
ti-aemif.c memory: ti-aemif: Drop child node when jumping out loop 2021-01-25 20:18:42 +01:00
ti-emif-pm.c memory: ti-emif-pm: Drop of_match_ptr from of_device_id table 2021-02-08 18:13:24 +01:00
ti-emif-sram-pm.S memory: ti-emif-sram: move driver-specific asm-offset.h to drivers/memory/ 2019-07-17 10:25:10 +09:00