From: Alistair Francis <alistair23@gmail.com> To: Bin Meng <bmeng.cn@gmail.com> Cc: "open list:RISC-V" <qemu-riscv@nongnu.org>, Qemu-block <qemu-block@nongnu.org>, "Bin Meng" <bin.meng@windriver.com>, "Philippe Mathieu-Daudé" <f4bug@amsat.org>, "qemu-devel@nongnu.org Developers" <qemu-devel@nongnu.org>, "Alistair Francis" <alistair.francis@wdc.com> Subject: Re: [PATCH 15/22] hw/sd: ssi-sd: Support multiple block write Date: Wed, 13 Jan 2021 10:11:11 -0800 [thread overview] Message-ID: <CAKmqyKPNN30gCQqGxyvRAexnaGYDDnD9min8Yc1ZYU=KWioC-g@mail.gmail.com> (raw) In-Reply-To: <20201231113010.27108-16-bmeng.cn@gmail.com> On Thu, Dec 31, 2020 at 3:47 AM Bin Meng <bmeng.cn@gmail.com> wrote: > > From: Bin Meng <bin.meng@windriver.com> > > For a multiple block write operation, each block begins with a multi > write start token. Unlike the SD mode that the multiple block write > ends when receiving a STOP_TRAN command (CMD12), a special stop tran > tocken is used to signal the card. > > Emulating this by manually sending a CMD12 to the SD card core, to > bring it out of the receiving data state. > > Signed-off-by: Bin Meng <bin.meng@windriver.com> Acked-by: Alistair Francis <alistair.francis@wdc.com> Alistair > --- > > hw/sd/ssi-sd.c | 26 ++++++++++++++++++++++++-- > 1 file changed, 24 insertions(+), 2 deletions(-) > > diff --git a/hw/sd/ssi-sd.c b/hw/sd/ssi-sd.c > index 21a96e91f0..6cf5d749c7 100644 > --- a/hw/sd/ssi-sd.c > +++ b/hw/sd/ssi-sd.c > @@ -99,6 +99,8 @@ OBJECT_DECLARE_SIMPLE_TYPE(ssi_sd_state, SSI_SD) > static uint32_t ssi_sd_transfer(SSIPeripheral *dev, uint32_t val) > { > ssi_sd_state *s = SSI_SD(dev); > + SDRequest request; > + uint8_t longresp[16]; > > /* Special case: allow CMD12 (STOP TRANSMISSION) while reading data. */ > if (s->mode == SSI_SD_DATA_READ && val == 0x4c) { > @@ -115,9 +117,31 @@ static uint32_t ssi_sd_transfer(SSIPeripheral *dev, uint32_t val) > return SSI_DUMMY; > break; > case SSI_TOKEN_SINGLE: > + case SSI_TOKEN_MULTI_WRITE: > DPRINTF("Start write block\n"); > s->mode = SSI_SD_DATA_WRITE; > return SSI_DUMMY; > + case SSI_TOKEN_STOP_TRAN: > + DPRINTF("Stop multiple write\n"); > + > + /* manually issue cmd12 to stop the transfer */ > + request.cmd = 12; > + request.arg = 0; > + s->arglen = sdbus_do_command(&s->sdbus, &request, longresp); > + if (s->arglen <= 0) { > + s->arglen = 1; > + /* a zero value indicates the card is busy */ > + s->response[0] = 0; > + DPRINTF("SD card busy\n"); > + } else { > + s->arglen = 1; > + /* a non-zero value indicates the card is ready */ > + s->response[0] = SSI_DUMMY; > + } > + > + s->mode = SSI_SD_RESPONSE; > + s->response_pos = 0; > + return SSI_DUMMY; > } > > s->cmd = val & 0x3f; > @@ -126,8 +150,6 @@ static uint32_t ssi_sd_transfer(SSIPeripheral *dev, uint32_t val) > return SSI_DUMMY; > case SSI_SD_CMDARG: > if (s->arglen == 4) { > - SDRequest request; > - uint8_t longresp[16]; > /* FIXME: Check CRC. */ > request.cmd = s->cmd; > request.arg = ldl_be_p(s->cmdarg); > -- > 2.25.1 > >
WARNING: multiple messages have this Message-ID (diff)
From: Alistair Francis <alistair23@gmail.com> To: Bin Meng <bmeng.cn@gmail.com> Cc: "Philippe Mathieu-Daudé" <f4bug@amsat.org>, "Alistair Francis" <alistair.francis@wdc.com>, Qemu-block <qemu-block@nongnu.org>, "open list:RISC-V" <qemu-riscv@nongnu.org>, "qemu-devel@nongnu.org Developers" <qemu-devel@nongnu.org>, "Bin Meng" <bin.meng@windriver.com> Subject: Re: [PATCH 15/22] hw/sd: ssi-sd: Support multiple block write Date: Wed, 13 Jan 2021 10:11:11 -0800 [thread overview] Message-ID: <CAKmqyKPNN30gCQqGxyvRAexnaGYDDnD9min8Yc1ZYU=KWioC-g@mail.gmail.com> (raw) In-Reply-To: <20201231113010.27108-16-bmeng.cn@gmail.com> On Thu, Dec 31, 2020 at 3:47 AM Bin Meng <bmeng.cn@gmail.com> wrote: > > From: Bin Meng <bin.meng@windriver.com> > > For a multiple block write operation, each block begins with a multi > write start token. Unlike the SD mode that the multiple block write > ends when receiving a STOP_TRAN command (CMD12), a special stop tran > tocken is used to signal the card. > > Emulating this by manually sending a CMD12 to the SD card core, to > bring it out of the receiving data state. > > Signed-off-by: Bin Meng <bin.meng@windriver.com> Acked-by: Alistair Francis <alistair.francis@wdc.com> Alistair > --- > > hw/sd/ssi-sd.c | 26 ++++++++++++++++++++++++-- > 1 file changed, 24 insertions(+), 2 deletions(-) > > diff --git a/hw/sd/ssi-sd.c b/hw/sd/ssi-sd.c > index 21a96e91f0..6cf5d749c7 100644 > --- a/hw/sd/ssi-sd.c > +++ b/hw/sd/ssi-sd.c > @@ -99,6 +99,8 @@ OBJECT_DECLARE_SIMPLE_TYPE(ssi_sd_state, SSI_SD) > static uint32_t ssi_sd_transfer(SSIPeripheral *dev, uint32_t val) > { > ssi_sd_state *s = SSI_SD(dev); > + SDRequest request; > + uint8_t longresp[16]; > > /* Special case: allow CMD12 (STOP TRANSMISSION) while reading data. */ > if (s->mode == SSI_SD_DATA_READ && val == 0x4c) { > @@ -115,9 +117,31 @@ static uint32_t ssi_sd_transfer(SSIPeripheral *dev, uint32_t val) > return SSI_DUMMY; > break; > case SSI_TOKEN_SINGLE: > + case SSI_TOKEN_MULTI_WRITE: > DPRINTF("Start write block\n"); > s->mode = SSI_SD_DATA_WRITE; > return SSI_DUMMY; > + case SSI_TOKEN_STOP_TRAN: > + DPRINTF("Stop multiple write\n"); > + > + /* manually issue cmd12 to stop the transfer */ > + request.cmd = 12; > + request.arg = 0; > + s->arglen = sdbus_do_command(&s->sdbus, &request, longresp); > + if (s->arglen <= 0) { > + s->arglen = 1; > + /* a zero value indicates the card is busy */ > + s->response[0] = 0; > + DPRINTF("SD card busy\n"); > + } else { > + s->arglen = 1; > + /* a non-zero value indicates the card is ready */ > + s->response[0] = SSI_DUMMY; > + } > + > + s->mode = SSI_SD_RESPONSE; > + s->response_pos = 0; > + return SSI_DUMMY; > } > > s->cmd = val & 0x3f; > @@ -126,8 +150,6 @@ static uint32_t ssi_sd_transfer(SSIPeripheral *dev, uint32_t val) > return SSI_DUMMY; > case SSI_SD_CMDARG: > if (s->arglen == 4) { > - SDRequest request; > - uint8_t longresp[16]; > /* FIXME: Check CRC. */ > request.cmd = s->cmd; > request.arg = ldl_be_p(s->cmdarg); > -- > 2.25.1 > >
next prev parent reply other threads:[~2021-01-13 18:17 UTC|newest] Thread overview: 80+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-12-31 11:29 [PATCH 00/22] hw/riscv: sifive_u: Add missing SPI support Bin Meng 2020-12-31 11:29 ` [PATCH 01/22] hw/block: m25p80: Add ISSI SPI flash support Bin Meng 2021-01-04 16:00 ` Francisco Iglesias 2021-01-04 16:00 ` Francisco Iglesias 2021-01-04 23:30 ` Bin Meng 2021-01-04 23:30 ` Bin Meng 2020-12-31 11:29 ` [PATCH 02/22] hw/block: m25p80: Add various ISSI flash information Bin Meng 2021-01-05 21:16 ` Alistair Francis 2021-01-05 21:16 ` Alistair Francis 2020-12-31 11:29 ` [PATCH 03/22] hw/sd: ssi-sd: Fix incorrect card response sequence Bin Meng 2021-01-02 13:49 ` Pragnesh Patel 2021-01-02 13:49 ` Pragnesh Patel 2020-12-31 11:29 ` [PATCH 04/22] hw/sd: sd: Support CMD59 for SPI mode Bin Meng 2021-01-02 13:50 ` Pragnesh Patel 2021-01-02 13:50 ` Pragnesh Patel 2020-12-31 11:29 ` [PATCH 05/22] hw/sd: sd: Drop sd_crc16() Bin Meng 2021-01-02 13:53 ` Pragnesh Patel 2021-01-02 13:53 ` Pragnesh Patel 2021-01-14 11:51 ` Philippe Mathieu-Daudé 2020-12-31 11:29 ` [PATCH 06/22] util: Add CRC16 (CCITT) calculation routines Bin Meng 2021-01-14 20:20 ` Alistair Francis 2021-01-14 20:20 ` Alistair Francis 2020-12-31 11:29 ` [PATCH 07/22] hw/sd: ssi-sd: Suffix a data block with CRC16 Bin Meng 2021-01-13 16:54 ` Alistair Francis 2021-01-13 16:54 ` Alistair Francis 2020-12-31 11:29 ` [PATCH 08/22] hw/sd: ssi-sd: Support multiple block read (CMD18) Bin Meng 2021-01-13 16:59 ` Alistair Francis 2021-01-13 16:59 ` Alistair Francis 2020-12-31 11:29 ` [PATCH 09/22] hw/sd: ssi-sd: Use macros for the dummy value and tokens in the transfer Bin Meng 2021-01-13 17:00 ` Alistair Francis 2021-01-13 17:00 ` Alistair Francis 2021-01-14 11:40 ` Philippe Mathieu-Daudé 2020-12-31 11:29 ` [PATCH 10/22] hw/sd: sd: Remove duplicated codes in single/multiple block read/write Bin Meng 2021-01-13 17:02 ` Alistair Francis 2021-01-13 17:02 ` Alistair Francis 2020-12-31 11:29 ` [PATCH 11/22] hw/sd: sd: Allow single/multiple block write for SPI mode Bin Meng 2021-01-13 17:03 ` Alistair Francis 2021-01-13 17:03 ` Alistair Francis 2020-12-31 11:30 ` [PATCH 12/22] hw/sd: sd.h: Cosmetic change of using spaces Bin Meng 2021-01-13 17:59 ` Alistair Francis 2021-01-13 17:59 ` Alistair Francis 2020-12-31 11:30 ` [PATCH 13/22] hw/sd: Introduce receive_ready() callback Bin Meng 2021-01-13 17:22 ` Alistair Francis 2021-01-13 17:22 ` Alistair Francis 2021-01-14 11:44 ` Philippe Mathieu-Daudé 2020-12-31 11:30 ` [PATCH 14/22] hw/sd: ssi-sd: Support single block write Bin Meng 2021-01-13 18:07 ` Alistair Francis 2021-01-13 18:07 ` Alistair Francis 2020-12-31 11:30 ` [PATCH 15/22] hw/sd: ssi-sd: Support multiple " Bin Meng 2021-01-13 18:11 ` Alistair Francis [this message] 2021-01-13 18:11 ` Alistair Francis 2020-12-31 11:30 ` [PATCH 16/22] hw/ssi: Add SiFive SPI controller support Bin Meng 2021-01-13 18:28 ` Alistair Francis 2021-01-13 18:28 ` Alistair Francis 2020-12-31 11:30 ` [PATCH 17/22] hw/riscv: sifive_u: Add QSPI0 controller and connect a flash Bin Meng 2021-01-13 18:30 ` Alistair Francis 2021-01-13 18:30 ` Alistair Francis 2020-12-31 11:30 ` [PATCH 18/22] hw/riscv: sifive_u: Add QSPI2 controller and connect an SD card Bin Meng 2021-01-13 18:32 ` Alistair Francis 2021-01-13 18:32 ` Alistair Francis 2020-12-31 11:30 ` [PATCH 19/22] hw/riscv: sifive_u: Change SIFIVE_U_GEM_IRQ to decimal value Bin Meng 2021-01-13 18:33 ` Alistair Francis 2021-01-13 18:33 ` Alistair Francis 2020-12-31 11:30 ` [PATCH 20/22] docs/system: Sort targets in alphabetical order Bin Meng 2021-01-13 18:33 ` Alistair Francis 2021-01-13 18:33 ` Alistair Francis 2020-12-31 11:30 ` [PATCH 21/22] docs/system: Add RISC-V documentation Bin Meng 2021-01-14 0:11 ` Alistair Francis 2021-01-14 0:11 ` Alistair Francis 2020-12-31 11:30 ` [PATCH 22/22] docs/system: riscv: Add documentation for sifive_u machine Bin Meng 2021-01-14 0:11 ` Alistair Francis 2021-01-14 0:11 ` Alistair Francis 2021-01-02 12:26 ` [PATCH 00/22] hw/riscv: sifive_u: Add missing SPI support Pragnesh Patel 2021-01-02 12:26 ` Pragnesh Patel 2021-01-02 13:15 ` Bin Meng 2021-01-02 13:15 ` Bin Meng 2021-01-02 13:30 ` Pragnesh Patel 2021-01-02 13:30 ` Pragnesh Patel 2021-01-02 13:36 ` Bin Meng 2021-01-02 13:36 ` Bin Meng
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to='CAKmqyKPNN30gCQqGxyvRAexnaGYDDnD9min8Yc1ZYU=KWioC-g@mail.gmail.com' \ --to=alistair23@gmail.com \ --cc=alistair.francis@wdc.com \ --cc=bin.meng@windriver.com \ --cc=bmeng.cn@gmail.com \ --cc=f4bug@amsat.org \ --cc=qemu-block@nongnu.org \ --cc=qemu-devel@nongnu.org \ --cc=qemu-riscv@nongnu.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.