On 02/10/2020 01:21 PM, Behme Dirk (CM/ESO2) wrote: >> Add the memory driver for Renesas RPC-IF which registers either SPI or >> HyperFLash device depending on the contents of the device tree subnode. >> It also provides the absract "back end" device APIs that can be used by >> the "front end" SPI/MTD drivers to talk to the real hardware. >> >> Based on the original patch by Mason Yang <masonccyang@xxxxxxxxxxx>. >> >> Signed-off-by: Sergei Shtylyov <sergei.shtylyov@xxxxxxxxxxxxxxxxxx> > > > FYI, please find below [1] the changes I did locally on this driver. It seems to read & write successfully on my custom M3 (R8A7796) device, now. Not for me... BTW, your patch had whitespace ruined, I had to apply it by hand, you'd better attach the patches, not paste. :-/ > Best regards > > Dirk > > [1] > > From d72b805cc461ab1e9747c973e9be84e7abb8f828 Mon Sep 17 00:00:00 2001 > From: Dirk Behme <dirk.behme@xxxxxxxxxxxx> > Date: Tue, 4 Feb 2020 08:39:31 +0100 > Subject: [PATCH] memory: renesas-rpc-if: Correct the STRTIM and some other > clean up > > This is required to make the driver work correctly in my M3 environment. > > Signed-off-by: Dirk Behme <dirk.behme@xxxxxxxxxxxx> > --- > drivers/memory/renesas-rpc-if.c | 42 ++++++++++++++++++++------------- > 1 file changed, 25 insertions(+), 17 deletions(-) > > diff --git a/drivers/memory/renesas-rpc-if.c b/drivers/memory/renesas-rpc-if.c > index 04be92b64bfa..f4356b066384 100644 > --- a/drivers/memory/renesas-rpc-if.c > +++ b/drivers/memory/renesas-rpc-if.c [...] > @@ -513,19 +525,15 @@ ssize_t rpcif_dirmap_read(struct rpcif *rpc, u64 offs, size_t len, void *buf) > pm_runtime_get_sync(rpc->dev); > > regmap_update_bits(rpc->regmap, RPCIF_CMNCR, RPCIF_CMNCR_MD, 0); > - regmap_write(rpc->regmap, RPCIF_DRCR, > - RPCIF_DRCR_RBURST(32) | RPCIF_DRCR_RBE); > - regmap_write(rpc->regmap, RPCIF_DRCMR, rpc->command); > - regmap_write(rpc->regmap, RPCIF_DREAR, > - RPCIF_DREAR_EAV(offs >> 25) | RPCIF_DREAR_EAC(1)); > - regmap_write(rpc->regmap, RPCIF_DROPR, rpc->option); > - regmap_write(rpc->regmap, RPCIF_DRENR, > - rpc->enable & ~RPCIF_SMENR_SPIDE(0xF)); > - regmap_write(rpc->regmap, RPCIF_DRDMCR, rpc->dummy); > - regmap_write(rpc->regmap, RPCIF_DRDRENR, rpc->ddr); The driver somehow works only with this left in place (with 2 bytes eaten as before), otherwise all the flash reads all 0xff (via dirmap). > + ret = wait_msg_xfer_end(rpc); > + if (ret) { > + len = 0; > + goto err_out; > + } > > memcpy_fromio(buf, rpc->dirmap + from, len); > > +err_out: > pm_runtime_put(rpc->dev); > > return len; MBR, Sergei