[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 20/20] hw/block/m25p80: Fix Numonyx fast read dummy cycle count
From: |
Peter Maydell |
Subject: |
[PULL 20/20] hw/block/m25p80: Fix Numonyx fast read dummy cycle count |
Date: |
Tue, 15 Dec 2020 14:12:37 +0000 |
From: Joe Komlodi <joe.komlodi@xilinx.com>
Numonyx chips determine the number of cycles to wait based on bits 7:4
in the volatile configuration register.
However, if these bits are 0x0 or 0xF, the number of dummy cycles to
wait is 10 for QIOR and QIOR4 commands or when in QIO mode, and otherwise 8 for
the currently supported fast read commands. [1]
[1]
https://www.micron.com/-/media/client/global/documents/products/data-sheet/nor-flash/serial-nor/mt25q/die-rev-b/mt25q_qlkt_u_02g_cbb_0.pdf?rev=9b167fbf2b3645efba6385949a72e453
Signed-off-by: Joe Komlodi <komlodi@xilinx.com>
Reviewed-by: Francisco Iglesias <francisco.iglesias@xilinx.com>
Message-id: 1605568264-26376-5-git-send-email-komlodi@xilinx.com
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
hw/block/m25p80.c | 30 +++++++++++++++++++++++++++---
1 file changed, 27 insertions(+), 3 deletions(-)
diff --git a/hw/block/m25p80.c b/hw/block/m25p80.c
index f1d7da65c85..c45afdd2cb3 100644
--- a/hw/block/m25p80.c
+++ b/hw/block/m25p80.c
@@ -837,6 +837,30 @@ static uint8_t numonyx_mode(Flash *s)
}
}
+static uint8_t numonyx_extract_cfg_num_dummies(Flash *s)
+{
+ uint8_t num_dummies;
+ uint8_t mode;
+ assert(get_man(s) == MAN_NUMONYX);
+
+ mode = numonyx_mode(s);
+ num_dummies = extract32(s->volatile_cfg, 4, 4);
+
+ if (num_dummies == 0x0 || num_dummies == 0xf) {
+ switch (s->cmd_in_progress) {
+ case QIOR:
+ case QIOR4:
+ num_dummies = 10;
+ break;
+ default:
+ num_dummies = (mode == MODE_QIO) ? 10 : 8;
+ break;
+ }
+ }
+
+ return num_dummies;
+}
+
static void decode_fast_read_cmd(Flash *s)
{
s->needed_bytes = get_addr_length(s);
@@ -846,7 +870,7 @@ static void decode_fast_read_cmd(Flash *s)
s->needed_bytes += 8;
break;
case MAN_NUMONYX:
- s->needed_bytes += extract32(s->volatile_cfg, 4, 4);
+ s->needed_bytes += numonyx_extract_cfg_num_dummies(s);
break;
case MAN_MACRONIX:
if (extract32(s->volatile_cfg, 6, 2) == 1) {
@@ -885,7 +909,7 @@ static void decode_dio_read_cmd(Flash *s)
);
break;
case MAN_NUMONYX:
- s->needed_bytes += extract32(s->volatile_cfg, 4, 4);
+ s->needed_bytes += numonyx_extract_cfg_num_dummies(s);
break;
case MAN_MACRONIX:
switch (extract32(s->volatile_cfg, 6, 2)) {
@@ -925,7 +949,7 @@ static void decode_qio_read_cmd(Flash *s)
);
break;
case MAN_NUMONYX:
- s->needed_bytes += extract32(s->volatile_cfg, 4, 4);
+ s->needed_bytes += numonyx_extract_cfg_num_dummies(s);
break;
case MAN_MACRONIX:
switch (extract32(s->volatile_cfg, 6, 2)) {
--
2.20.1
- [PULL 11/20] elf_ops.h: Be more verbose with ROM blob names, (continued)
- [PULL 11/20] elf_ops.h: Be more verbose with ROM blob names, Peter Maydell, 2020/12/15
- [PULL 01/20] gdbstub: Correct misparsing of vCont C/S requests, Peter Maydell, 2020/12/15
- [PULL 15/20] arm: xlnx-versal: Connect usb to virt-versal, Peter Maydell, 2020/12/15
- [PULL 14/20] usb: xlnx-usb-subsystem: Add xilinx usb subsystem, Peter Maydell, 2020/12/15
- [PULL 13/20] usb: Add DWC3 model, Peter Maydell, 2020/12/15
- [PULL 16/20] hw/misc/zynq_slcr: Avoid #DIV/0! error, Peter Maydell, 2020/12/15
- [PULL 17/20] hw/block/m25p80: Make Numonyx config field names more accurate, Peter Maydell, 2020/12/15
- [PULL 08/20] hw/core/loader.c: Track last-seen ROM in rom_check_and_register_reset(), Peter Maydell, 2020/12/15
- [PULL 12/20] usb: Add versal-usb2-ctrl-regs module, Peter Maydell, 2020/12/15
- [PULL 18/20] hw/block/m25p80: Fix when VCFG XIP bit is set for Numonyx, Peter Maydell, 2020/12/15
- [PULL 20/20] hw/block/m25p80: Fix Numonyx fast read dummy cycle count,
Peter Maydell <=
[PULL 19/20] hw/block/m25p80: Check SPI mode before running some Numonyx commands, Peter Maydell, 2020/12/15
Re: [PULL 00/20] target-arm queue, Peter Maydell, 2020/12/15