From patchwork Fri Jun 24 08:07:09 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: marcin.krzeminski@nokia.com X-Patchwork-Id: 9196929 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 3078F60871 for ; Fri, 24 Jun 2016 08:18:14 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1D76628499 for ; Fri, 24 Jun 2016 08:18:14 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 115992849C; Fri, 24 Jun 2016 08:18:14 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=2.0 tests=BAD_ENC_HEADER,BAYES_00, DKIM_SIGNED, RCVD_IN_DNSWL_HI, T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 4C94B28499 for ; Fri, 24 Jun 2016 08:18:13 +0000 (UTC) Received: from localhost ([::1]:41797 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bGMJY-00008A-Co for patchwork-qemu-devel@patchwork.kernel.org; Fri, 24 Jun 2016 04:18:12 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59533) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bGMAY-0007js-BA for qemu-devel@nongnu.org; Fri, 24 Jun 2016 04:09:15 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bGMAG-00087R-Ji for qemu-devel@nongnu.org; Fri, 24 Jun 2016 04:08:54 -0400 Received: from mail-db3on0118.outbound.protection.outlook.com ([157.55.234.118]:32846 helo=emea01-db3-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bGMAF-00086b-Vx for qemu-devel@nongnu.org; Fri, 24 Jun 2016 04:08:36 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nokia.onmicrosoft.com; s=selector1-nokia-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=L9m2ctrCHG+fkR/N6SW4RnL4FHXRtcpHm57u3j5nCJk=; b=O0oJ0A19Ti9iQFsZZ+yTW/mXua50bvPQGTuS2CSaDaD2Sym/1+AZFNkGMHS9d/sakj7LxHBxwaRVcc+K1QxcYvMNzNbqecNcl6e2lmjExW8aKl4ObrHkNXiD0mjMfe3OW+UFgNUSAnY/Sop7Mnb76wBCwpM8U8mCi2BMO/fUXUU= Received: from AM2PR07CA0026.eurprd07.prod.outlook.com (10.163.24.164) by VI1PR07MB0909.eurprd07.prod.outlook.com (10.161.108.27) with Microsoft SMTP Server (TLS) id 15.1.523.12; Fri, 24 Jun 2016 08:08:34 +0000 Received: from DB3FFO11FD008.protection.gbl (2a01:111:f400:7e04::164) by AM2PR07CA0026.outlook.office365.com (2a01:111:e400:8448::36) with Microsoft SMTP Server (TLS) id 15.1.523.12 via Frontend Transport; Fri, 24 Jun 2016 08:08:34 +0000 Authentication-Results: spf=pass (sender IP is 131.228.2.241) smtp.mailfrom=nokia.com; nongnu.org; dkim=none (message not signed) header.d=none; nongnu.org; dmarc=pass action=none header.from=nokia.com; Received-SPF: Pass (protection.outlook.com: domain of nokia.com designates 131.228.2.241 as permitted sender) receiver=protection.outlook.com; client-ip=131.228.2.241; helo=fihe3nok0735.emea.nsn-net.net; Received: from fihe3nok0735.emea.nsn-net.net (131.228.2.241) by DB3FFO11FD008.mail.protection.outlook.com (10.47.216.97) with Microsoft SMTP Server (TLS) id 15.1.517.7 via Frontend Transport; Fri, 24 Jun 2016 08:08:33 +0000 Received: from fihe3nok0735.emea.nsn-net.net (localhost [127.0.0.1]) by fihe3nok0735.emea.nsn-net.net (8.14.9/8.14.5) with ESMTP id u5O881QC008684 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 24 Jun 2016 11:08:01 +0300 Received: from CNU418C7XK.nsn-intra.net ([10.154.155.220]) by fihe3nok0735.emea.nsn-net.net (8.14.9/8.14.5) with ESMTP id u5O87u79008453; Fri, 24 Jun 2016 11:08:01 +0300 X-HPESVCS-Source-Ip: 10.154.155.220 From: To: Date: Fri, 24 Jun 2016 10:07:09 +0200 Message-ID: <1466755631-25201-9-git-send-email-marcin.krzeminski@nokia.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1466755631-25201-1-git-send-email-marcin.krzeminski@nokia.com> References: <1466755631-25201-1-git-send-email-marcin.krzeminski@nokia.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-Forefront-Antispam-Report: CIP:131.228.2.241; IPV:NLI; CTRY:FI; EFV:NLI; SFV:NSPM; SFS:(10019020)(6009001)(7916002)(2980300002)(438002)(189002)(199003)(86152002)(87936001)(77096005)(50226002)(86362001)(586003)(47776003)(16796002)(68736007)(97736004)(2950100001)(2870700001)(110136002)(2906002)(4326007)(8936002)(2876002)(81166006)(305945005)(81156014)(6806005)(106466001)(7846002)(356003)(8676002)(19580405001)(19580395003)(11100500001)(33646002)(2351001)(229853001)(53416004)(23676002)(189998001)(36756003)(5820100001)(76176999)(50986999)(92566002)(50466002); DIR:OUT; SFP:1102; SCL:1; SRVR:VI1PR07MB0909; H:fihe3nok0735.emea.nsn-net.net; FPR:; SPF:Pass; PTR:InfoDomainNonexistent; MX:1; A:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; DB3FFO11FD008; 1:1hekpT9mNUNGsdZfHGt77rINwfWCqavMMgp2Fchn0Np7dTsrlFx7KniVWdPPe8fK98Rk/XJSH7HOPGPLftLYI7Mu6UzLCRf0AIXi266cMCwVZ/OTurD1CXZldGLTQ4a5OFuhThpGTg61pz7APAxHdMBa236OKNbHtupJxKfJuVaXBQW0L3evUrzFQS9Kark+mk9XmBeLaPTCbMezVSmxs8vspCGYzz43J/wUs8I12pMHllH6+zN1liH/lqXIoMk3DIp7vi/03Oj5zwXUjbX5NZN1IpcLj61kbjUC1d8bY82Oo4LvgTDwBgQ/FsH1tcisND8/TPY8vUqqSc08hsJwwN6v4pLJ/bWydhEl4oW4HGe/+LqelRNbeTOgvdujquLsnyrcIPz/reF8oAEeeZ83Qk2G6kl85soxleEbeWqvliGVjiHwpm6ZWtTKHr5Ywiti X-MS-Office365-Filtering-Correlation-Id: df9dd63e-1daa-4209-989f-08d39c06bc84 X-Microsoft-Exchange-Diagnostics: 1; VI1PR07MB0909; 2:HztwBY2O5ganvS7QXW76fPPiidkmSGOe3kU+EbPWcPe8ilelH+z59ltlp71OOC9jXoP3cCIZh2GvEISXDAfbUM0XdsNt972F7H6zLwS1563PKgBbpusBvP7A6Qiz5oPYXJpPaZSDiLL/b4hmbgln7xQTwrNjmltaotT68cckBnyyVUcTFWdGqmy+fe8MoYBG; 3:FQbUGjJtLEhNqDhnQ3wOH5yPIqwXVjFkJb6Fd3ABBoSNANyRkthUz+cjylDOd2L0evkK3ibKlvKinyV3E18nW6ZCq6xHqGMZtDuovFxZp3/naMlVyZdC4Xwwdz+HIcH70rxuGHmMIJGPvac5vnV/nWNd4XSdiuYV4OY47Llqf10Ct0/TwgoIblQ96LZOLHC88WdNhlP6/a6qh7O5SNfnI4vGhTnAu/TZElNfb0mGKAF3AFe34ZQsuSdUnonumAVmkQRiWNPz5Re53P6/LOOE5w==; 25:uo/nf1yqqHAlP1jM4WdTL8gI5ShpAUjcA37eCPf86bQzRznkI2JmaMeM6t+EAtlqsGBogoDBFfMEaGM+27mLeFK1OU15VaSzj+bgTIC51uj9YeYszfpo/7F52JwXpqpE4prn1BfuBa4CkhGlzzuVOEAcLuwqeW6/60ijHyhDDZgluURelGrrGxxgEfTq4WOvYKluMQKksjUqnWSwAvjMquUWlj74zojdc2nPF+c+F5xNEnejyHQRxZjJX/xQZTGjWTt3TqLzo0Wc/G++MipnsO1NW4ebpy79kywGSPd936Mn2nWlfvhqRlWGJUVqKOb6icqnmx8D5ubNLKhkkQYrc0VKso365vY5cKLidH1FvK0rdxU/b3tPksiD5rEKbf5r1TCi9t7tTpwo+tYmBhI+6fBBgjsh4ngyHJYsC9DnqLM= X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(8251501002); SRVR:VI1PR07MB0909; X-Microsoft-Exchange-Diagnostics: 1; VI1PR07MB0909; 20:1u9nTgswjNA1qFsK4MHc6YENZ9Nwtz5awJKOUR+2y7geglUSihRyZLLwD4OxrVtzk8/xlyVAjOz1LjfNQ6ItViSEI3tUjzT3KnwTkvynOHRPc2+3pgYjmFzYl90UEUktYAu76XuI7OZJzx2uY999mcLDm7QYnOsU4+giwR/0YtTyZngYQqb/NYO+I0mki1QUD40qJraeYGz7WHQTWIxK4lFERTnWZXGKjyxkUsK5ru9P4kwnlC+vKC3B98yPY+iTLFGmvOPLdFN+s4pOgaHGQm0JMAveDSA21b34r0TbVqmVNG9TSCNcL7r1N2dsnI6e1ZXqLscy+ZkMR+j70lLUCY+gy4/tw0O1gor5pHWYHfjtU1HdBT5FeNf8kj6mB+ia5tM7INgM1C93Q6y7UAknXKYbPr69KD2H4eG1YDrhFR9YWbOQEAW2l/gd1un5FZgg36qazn3+SblowQlxQGqolFXKUaruQcSLdFRPAfbg/dn+TPSShHGdQYP37jI2B8/gsbNK1LBnT8x0TzCZglQ0pI/j+lP0RgmK41Y0t/iQ7iQ8snpb9gBMtm/rWRJIicg5LYFLOmP5lnsFy5QbLCpjdm9bQaIQL2skK+yWjj6iJPI= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(82608151540597); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(2401047)(13018025)(13016025)(8121501046)(5005006)(10201501046)(3002001); SRVR:VI1PR07MB0909; BCL:0; PCL:0; RULEID:; SRVR:VI1PR07MB0909; X-Microsoft-Exchange-Diagnostics: 1; VI1PR07MB0909; 4:EomGn+STBhk04tv8z/UebsdnvI7lGm4eSCc5EnbjTJGsx+t+qSM5xqJvKebMg4Gz8hhItFt/EDlR7YftRUDd+T4dkos/n/brDQhTcJLi1/rTJScd69as0vm7W1TnOayJFSJUMOAOi0PUaJAz7cLmSCEgWD/qz8C9nLf6Gly93OEVYPI/itiJzOXJC5bX287uF/UsJeS2r6pEPwFCebIOZymG9YK+oVPjKln5470XSw6Wui0E2ClMiBn7oXdoQqERpB5lPRMt7t6zamPcnasSozxhCRmvGYtO2Pcr6LnKGRqfyFUg+gt5APBh4LFGi2MSQ3LmWj3gkd+TUDEOggIXb3WIazJmIYCAI5PlG1QTVGVlh0ftY/2HhhW9pWzj5qAnTVx0RH4F3um5XIPjTOCT93di1/2udXQvVjwiqx0d6luwlfKSKfPmxqEt41/CpTyuSuVJ7ignfk4ZTKUCUAPMSA== X-Forefront-PRVS: 0983EAD6B2 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR07MB0909; 23:hG1J70p6QmqDZfGpN6ZOg9takfvC4ZjaAwlKmuyb2?= =?us-ascii?Q?cX0NtGbxxPF3fgvXYMQmwiVPMkJM13HvJEsuvNgLrhOZhVEl/mO0ZNA+A7PA?= =?us-ascii?Q?mrdkiGcFEWVaar9jLuVx2dcsFSdiYSWm3sRjpDVSJk8CoUS6EBmu3cliAR49?= =?us-ascii?Q?HB5SsaszNxfz5pVIyAbPIrwRf/rrZBYJLqtanbowI1EDpNURib8ZbdpVfJoh?= =?us-ascii?Q?CUvPNpAQMZ/k8RjheUWhS5JT93LrrbLkb50FahrqVF7RgPb2V+xljoUxaXwj?= =?us-ascii?Q?B+UsvaLXW602EtFlYglRCLjjauuclDbVxh526frX/aO8+cRFI0MqVhXMTO5k?= =?us-ascii?Q?JH9HcntMlOKtZNXxA+J6SrSCAQ/hS6lLH8KsthltV9hdpS2mp+mAdSki5YVc?= =?us-ascii?Q?VZ6Aa46OY8ND62qkgR1fvPdEiGNUaKNMKcf9AhUs5Okx5pUEB9pm0y/l5x4B?= =?us-ascii?Q?r1ywkt4jKqi/lpsfzYKIWWahVReXGXdJQs9Qf+aJZrJ5cj1cbOTM7YC0WtWf?= =?us-ascii?Q?jC1StoioGS833LRRufwMEeuP99nskMWxYo6AKfyqnGJixXyBIkzAIKKYZHW2?= =?us-ascii?Q?V1/Cj4w9vQVXYI+44t9BJi9o+Q2nTQ6MgH858gXBDUJMXlaY2/YY3uJodssn?= =?us-ascii?Q?9WztuWFH7Oq4eI20W95O8Tqghql/wZthliUbwUC7GK7OP1YNEvaD7i2JBb3g?= =?us-ascii?Q?iVAJHsIpJ/2rIY/iqL9rW0Y+xSse5KwgXsqPMoZiQYVqOYWqfvGhfTJQrEKI?= =?us-ascii?Q?vkcB6wXetIFZJcSdsFayc1jgefvlHGw+Hx1Im2spOCHrZWZeKmSvUE0bM0j/?= =?us-ascii?Q?67PNiiv2iKy7aH45GdPjbY/Sni4OAENHA/xKq70Iu5AHeGM7SBHBCzUU3ZYp?= =?us-ascii?Q?fYRLORbus3gl8i4SQEkQeNFaBvqoFKLBDY0T7fSo6DH7s3c7ffZBuSGQPpQY?= =?us-ascii?Q?o3+B7O3zjBOvbj2zVOct+rBHB3L7qsAUexprHAXhkNWomerXyHK614Rnfw1V?= =?us-ascii?Q?bGsNk7dcm49gQga/yQqQKcj3zNOjirhhE9f3p9PiyrCVCKVIYuIA3sgZHlq4?= =?us-ascii?Q?ZWmDAREu10euJSKrIQeV7Q4qMI4neOWYZnJwAdTkDwX3fdrFWsH8+xLxMQdb?= =?us-ascii?Q?Jxx5G7HAu3f8PVvyhLHxsYlQmwHfiq0?= X-Microsoft-Exchange-Diagnostics: 1; VI1PR07MB0909; 6:N2Yr9NDYy3TZYcsxiWTn5LdXDr6P76xgopgpJvEHyBEWWPnTrc4+nmk1c3bQRHuQiWTbNaBJpHwRTfLw5Z7XxcebiBlPAiHdcI5y7A34k8+zHkp+bLftK1WH1uB9zDbSgwG035jWaW8PxuCgJYojUBXwkHNrgJe65nBblmHdq+XFntiUQTmaQ2fY11ZkHAkFFDSdljFkaruumZDC+Dt2rdubXPQULWOfj/k0J+PJvj+6Q2EFruDMl7uhhuz5oNVZRs0Ijie7ZF4MXBZiBvr85GKLeGwjylAzYFXfJN4dK6wBuW3OAGvgEfIfCFF4t2Rd; 5:4z6MvA5xM3igHcGSQMKO30IPzHf5Hneh+9eUMT8xBn1KUGvc08h71a59LteQRzc2OewuwQBjTutEpL4ynL22UNlPnaOoJH66e0UFKV+4J31Y9cnqFGeIwAPzITPpbMgy+shWpm85ndEpq4baN2hNSQ==; 24:xKspkuxppT8q+Koi1jO8g14dmv5da7TcAzmsEWK3/Fpcf4P9OYhZb8FujXJSmI/baFUwTzQeOo4Bh48iGWPxH0oo/+dHYn7tUYG8HMR6qeQ=; 7:gH2ZinaA1rQDMvT7D6NNeCchY54SgUoVTLQ8HnDEqR4v1kKrJ/KxKb3iLSMQd/0VanHmnGPxGyTZBIKp3xCEP17U2dl0jc7HBK8wFYNZARktjEeGvlSvxrZqHbvkbv7J5m4rAgdwntQPzZ09Xymn7kkn3cEFA7N1JL8aZ/0KIBKeBi8oLTktlrStAMlrTQRYyBxoUq1KJdiIDvmeZ7UlUIVpnmgnSXI/0Fyz835FrHy9P6KpJI5qdRAi2GdNuKwhHxqnYR4tZzPn4hghIclgDA== SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: nokia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jun 2016 08:08:33.3887 (UTC) X-MS-Exchange-CrossTenant-Id: 5d471751-9675-428d-917b-70f44f9630b0 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=5d471751-9675-428d-917b-70f44f9630b0; Ip=[131.228.2.241]; Helo=[fihe3nok0735.emea.nsn-net.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR07MB0909 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 X-Received-From: 157.55.234.118 Subject: [Qemu-devel] [PATCH v3 08/10] m25p80: Fast read commands family changes. X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, crosthwaitepeter@gmail.com, clg@fr.ibm.com, clg@kaod.org, pawel.lenkow@itlen.com, rfsw-patches@mlist.emea.nsn-intra.net Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP From: Marcin Krzeminski Support for Spansion and Macronix flashes. Additionally Numonyx(Micron) moved from default in fast read commands family. Also moved fast read command decoding to functions. Signed-off-by: Marcin Krzeminski Reviewed-by: Cédric Le Goater --- hw/block/m25p80.c | 154 +++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 117 insertions(+), 37 deletions(-) diff --git a/hw/block/m25p80.c b/hw/block/m25p80.c index 21998db..92ce118 100644 --- a/hw/block/m25p80.c +++ b/hw/block/m25p80.c @@ -142,6 +142,13 @@ typedef struct FlashPartInfo { #define SPANSION_ADDR_LEN_POS 7 #define SPANSION_ADDR_LEN_LEN 1 +/* + * Spansion read mode command length in bytes, + * the mode is currently not supported. +*/ + +#define SPANSION_CONTINUOUS_READ_MODE_CMD_LEN 1 + static const FlashPartInfo known_devices[] = { /* Atmel -- some are (confusingly) marketed as "DataFlash" */ { INFO("at25fs010", 0x1f6601, 0, 32 << 10, 4, ER_4K) }, @@ -719,6 +726,113 @@ static void reset_memory(Flash *s) DB_PRINT_L(0, "Reset done.\n"); } +static void decode_fast_read_cmd(Flash *s) +{ + s->needed_bytes = get_addr_length(s); + switch (get_man(s)) { + /* Dummy cycles - modeled with bytes writes instead of bits */ + case MAN_NUMONYX: + s->needed_bytes += extract32(s->volatile_cfg, 4, 4); + break; + case MAN_MACRONIX: + if (extract32(s->volatile_cfg, 6, 2) == 1) { + s->needed_bytes += 6; + } else { + s->needed_bytes += 8; + } + break; + case MAN_SPANSION: + s->needed_bytes += extract32(s->spansion_cr2v, + SPANSION_DUMMY_CLK_POS, + SPANSION_DUMMY_CLK_LEN + ); + break; + default: + break; + } + s->pos = 0; + s->len = 0; + s->state = STATE_COLLECTING_DATA; +} + +static void decode_dio_read_cmd(Flash *s) +{ + s->needed_bytes = get_addr_length(s); + /* Dummy cycles modeled with bytes writes instead of bits */ + switch (get_man(s)) { + case MAN_WINBOND: + s->needed_bytes = 4; + break; + case MAN_SPANSION: + s->needed_bytes += SPANSION_CONTINUOUS_READ_MODE_CMD_LEN; + s->needed_bytes += extract32(s->spansion_cr2v, + SPANSION_DUMMY_CLK_POS, + SPANSION_DUMMY_CLK_LEN + ); + break; + case MAN_NUMONYX: + s->needed_bytes += extract32(s->volatile_cfg, 4, 4); + break; + case MAN_MACRONIX: + switch (extract32(s->volatile_cfg, 6, 2)) { + case 1: + s->needed_bytes += 6; + break; + case 2: + s->needed_bytes += 8; + break; + default: + s->needed_bytes += 4; + break; + } + break; + default: + break; + } + s->pos = 0; + s->len = 0; + s->state = STATE_COLLECTING_DATA; +} + +static void decode_qio_read_cmd(Flash *s) +{ + s->needed_bytes = get_addr_length(s); + /* Dummy cycles modeled with bytes writes instead of bits */ + switch (get_man(s)) { + case MAN_WINBOND: + s->needed_bytes = 6; + break; + case MAN_SPANSION: + s->needed_bytes += SPANSION_CONTINUOUS_READ_MODE_CMD_LEN; + s->needed_bytes += extract32(s->spansion_cr2v, + SPANSION_DUMMY_CLK_POS, + SPANSION_DUMMY_CLK_LEN + ); + break; + case MAN_NUMONYX: + s->needed_bytes += extract32(s->volatile_cfg, 4, 4); + break; + case MAN_MACRONIX: + switch (extract32(s->volatile_cfg, 6, 2)) { + case 1: + s->needed_bytes += 4; + break; + case 2: + s->needed_bytes += 8; + break; + default: + s->needed_bytes += 6; + break; + } + break; + default: + break; + } + s->pos = 0; + s->len = 0; + s->state = STATE_COLLECTING_DATA; +} + static void decode_new_cmd(Flash *s, uint32_t value) { s->cmd_in_progress = value; @@ -756,51 +870,17 @@ static void decode_new_cmd(Flash *s, uint32_t value) case DOR4: case QOR: case QOR4: - s->needed_bytes = get_addr_length(s); - switch (get_man(s)) { - case MAN_NUMONYX: - s->needed_bytes += extract32(s->volatile_cfg, 4, 4); - break; - default: - break; - } - s->pos = 0; - s->len = 0; - s->state = STATE_COLLECTING_DATA; + decode_fast_read_cmd(s); break; case DIOR: case DIOR4: - switch (get_man(s)) { - case MAN_WINBOND: - case MAN_SPANSION: - s->needed_bytes = 4; - break; - default: - s->needed_bytes = get_addr_length(s); - /* Dummy cycles modeled with bytes writes instead of bits */ - s->needed_bytes += extract32(s->volatile_cfg, 4, 4); - } - s->pos = 0; - s->len = 0; - s->state = STATE_COLLECTING_DATA; + decode_dio_read_cmd(s); break; case QIOR: case QIOR4: - switch (get_man(s)) { - case MAN_WINBOND: - case MAN_SPANSION: - s->needed_bytes = 6; - break; - default: - s->needed_bytes = get_addr_length(s); - /* Dummy cycles modeled with bytes writes instead of bits */ - s->needed_bytes += extract32(s->volatile_cfg, 4, 4); - } - s->pos = 0; - s->len = 0; - s->state = STATE_COLLECTING_DATA; + decode_qio_read_cmd(s); break; case WRSR: