From patchwork Fri Jun 17 10:28:26 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: "Krzeminski, Marcin (Nokia - PL/Wroclaw)" X-Patchwork-Id: 636890 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3rWGsh2tQSz9t2J for ; Fri, 17 Jun 2016 20:37:28 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=nokia.onmicrosoft.com header.i=@nokia.onmicrosoft.com header.b=eh5rS1ND; dkim-atps=neutral Received: from localhost ([::1]:55556 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bDr9S-00047M-8v for incoming@patchwork.ozlabs.org; Fri, 17 Jun 2016 06:37:26 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:43737) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bDr4a-0007L1-Ue for qemu-devel@nongnu.org; Fri, 17 Jun 2016 06:32:26 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bDr4W-00032H-Ta for qemu-devel@nongnu.org; Fri, 17 Jun 2016 06:32:24 -0400 Received: from mail-db3on0134.outbound.protection.outlook.com ([157.55.234.134]:35088 helo=emea01-db3-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bDr4W-000320-F3 for qemu-devel@nongnu.org; Fri, 17 Jun 2016 06:32:20 -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=ea5MRcW0q/ZtqX+crhMKVbhEv460RdjnAH15EwB88Vg=; b=eh5rS1NDdGn9KYefxNNqU37yXg997Yq/9bHHjgBGJ0g4/PA6LyEsSLSgREB70dtGvw3DuQI//3C+gMRAOw3Ou0XibQED6nsgB/LJVVxRRpSIGBy23cAdWB+xNoRwMYY5lmCauURmrJ4vOmI3oBoh4tuDIc6PRTypuMOpREwLFjs= Received: from VI1PR07CA0050.eurprd07.prod.outlook.com (10.164.94.146) by AM2PR07MB0897.eurprd07.prod.outlook.com (10.161.71.18) with Microsoft SMTP Server (TLS) id 15.1.523.12; Fri, 17 Jun 2016 10:32:19 +0000 Received: from AM1FFO11FD051.protection.gbl (2a01:111:f400:7e00::158) by VI1PR07CA0050.outlook.office365.com (2a01:111:e400:5967::18) with Microsoft SMTP Server (TLS) id 15.1.523.12 via Frontend Transport; Fri, 17 Jun 2016 10:32:18 +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=mailrelay.int.nokia.com; Received: from mailrelay.int.nokia.com (131.228.2.241) by AM1FFO11FD051.mail.protection.outlook.com (10.174.65.214) with Microsoft SMTP Server (TLS) id 15.1.511.7 via Frontend Transport; Fri, 17 Jun 2016 10:32:18 +0000 Received: from mailrelay.int.nokia.com (localhost [127.0.0.1]) by fihe3nok0735.emea.nsn-net.net (8.14.9/8.14.5) with ESMTP id u5HATEYb000563 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Fri, 17 Jun 2016 13:29:14 +0300 Received: from CNU418C7XK.nsn-intra.net ([10.154.155.220]) by mailrelay.int.nokia.com (8.14.9/8.14.5) with ESMTP id u5HATC32000470; Fri, 17 Jun 2016 13:29:14 +0300 X-HPESVCS-Source-Ip: 10.154.155.220 From: To: Date: Fri, 17 Jun 2016 12:28:26 +0200 Message-ID: <1466159314-28597-3-git-send-email-marcin.krzeminski@nokia.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1466159314-28597-1-git-send-email-marcin.krzeminski@nokia.com> References: <1466159314-28597-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)(53416004)(2876002)(97736004)(76176999)(50986999)(8676002)(81156014)(81166006)(36756003)(23676002)(16796002)(4326007)(189998001)(2906002)(86362001)(77096005)(86152002)(11100500001)(68736007)(87936001)(106466001)(33646002)(2950100001)(229853001)(2351001)(586003)(19580405001)(19580395003)(47776003)(5008740100001)(110136002)(6806005)(2870700001)(356003)(50466002)(8936002)(50226002)(5820100001)(92566002); DIR:OUT; SFP:1102; SCL:1; SRVR:AM2PR07MB0897; H:mailrelay.int.nokia.com; FPR:; SPF:Pass; PTR:InfoDomainNonexistent; MX:1; A:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; AM1FFO11FD051; 1:FM9TYGKTKOwbicWyy0oGn9TFcZEbhiHBIpHx78JFVEtgoxS42cNUTFKPsUpRywDdHDp2g8FU237uo/HXb1HDfTClvTIaXQsmzUtwuwM3kFNLwQYHnDqM0wja/yozCqGuf46R1av2bWvprNYN8Kg+R3bmJpledl/UOOHZ6R4TEEDIviQ0cDWJjvETqToKy2YmJbZSz/fp08aUEyOc7a8+IypVb7cMBCj4yOR5ZQOdT0/+Etq1TI46mS4UiDTlsqukce7VWMCz0EaMZdHjGGy5uLJtdeA10nl83ydFvfo7vdFuqzz4wf82Uf1xNJ+zuuAVkpr7WGfht/JzXaUeDwP/zUxwpU59S1kOaxayZufvTZ8zdt5GLWgjEfAU9mbtujff5GP2rguo9SwUaCGVKEVPBqrHOctK8qAZCiv5Gm8atPHz+Y8OSP0iSSi6ObdjDnUB X-MS-Office365-Filtering-Correlation-Id: 7c2de367-e334-42e3-17e6-08d3969aa87c X-Microsoft-Exchange-Diagnostics: 1; AM2PR07MB0897; 2:IIE1lcNoei8HFYof40bq6Bcm+CLCw3LK2XHaFuaRcEB7+1bgwPNghcAwadww6gRKpq2cNz1VZHBT38rRILOKmqIk7VHP1JQNPCC7qNq9w75B5nF6EvKaKNyOp5kwKWC40b9Om+9i/fox+iRZI2/jc2cgIklSdvFJjfsEAF3U43zZB7dspNcDWs9DoPMslo6m; 3:ZMaVLdghslt4tE8nzPFtuaFFMY8ZJT+h6FMEsmWnFOizgFlw/WtKCEY92ylQ5bAfc52NABQth1OSHMdNr3xQlKN0Q0xRXWBbNu3bRApfVczJLHhbpnMQMdwtrj7Rp0TyZr/f/LNFDuJKb/Bx39y+4SXHzZGw1B5r9u7ZZZ2Cnidqo4LZ9Du1JRd6rNkPhGBOIbpN82HYrZnyRhud/olan5OcAMuZ1IQeDzQqee2suZXTvzHPEbD+DIDDSilv7ijaVrOtduG/jgwq5G27JxI/Ug==; 25:dSz8ScLuXhKfsaDqraR08td/hWQrXgnqt2oAu3NmcfqVD5x5wz/SfSCBRj4pdAjP3UE0erFH8mmbkJ2SrrEOgccsska9/IFQe0tkaeZM2wS7Rkpz2Ftvh4hp61+xZfYlMTICRkE9h0J4zQXW5GujGkVRLVilZCLKZ+qsEx7Bt4lUs2zuve7m/W2SImm3f+WupD4BMBlOn0bWoF8QWBoeaQehofMEsQIGnLkWqUrvJbvkiRRDxWh7FiS0e5/5WtX/Vq80A7dikT1sdSPBJBo5fTpIXxzdi1H+DVp0Ru260GbO07sQZRJeOI4UrxU25LotsekLaGiRaElf/ieEG3zsnJozHueV7e799SlHgHyHqcD6AwvlMsiHmbSgMTa83kkFDWncuCalTaIG+ntyixQqVw9vk7i0O3e7OTKJusQqXW0= X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(8251501002); SRVR:AM2PR07MB0897; X-Microsoft-Exchange-Diagnostics: 1; AM2PR07MB0897; 20:ts3G2dRTtdVyUK7nSBVKSDe5fSShIAEwQisvbFseYqKJ28qb142S5TmxG85Z9TuPvCw/TjRvBb26Bv81ed3++JnlVAUtjOGlNVlkt7IJG6QDZ1+OG4gMxm3B6KpRyAzOmvyVza5VyV+MPRUbhinQSKzwGCP8q7eAW1XAejioZWR09glYm8M7Krv7mjtC9DlZE39Qli4LTucGLGamVxplKkBBJ2Y4MK+u9wE4O1BxNn1bCxASF7imJhJm+deuC5lE9ycyhdoyw6Pvv1oJKYBJ0PyB43kd8d8hsGzpaeOIls0jgqH9Yf08vzxOBT4Kdq9zDx/Jzxc9MnCw8FDibqCK0hTCh3qWNqkAKAvMggMDpaGLfTWQSmh81LBTIiVFkvve2we6WGH/Pbn8h2AFEqGDORlOcgINAs5CtRTn9iW1WvTBXIiCyLcd9eHIb4eKR7WEAPRrTT8GHSkxFYxolVip+zlvqZda2+J5nPJQTkDWz9cHIepAUQ3PYPuNOs+7JZhh+WrcVxH2l0cCIDEzNWKOp97bi9TTdT+5DNqcBzoD1LnFaxGXfP5ntd7u1hJdzFRcx1ZDAoM8mGNkijLDh5/yVyUenywgaApNcZksAsUT62I= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(82608151540597); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(2401047)(13016025)(13018025)(8121501046)(5005006)(10201501046)(3002001); SRVR:AM2PR07MB0897; BCL:0; PCL:0; RULEID:; SRVR:AM2PR07MB0897; X-Microsoft-Exchange-Diagnostics: 1; AM2PR07MB0897; 4:1124THHqEKPq+vrjM3BVkV4a627L2aCf6WqZnK7VEGVuB4QgVJdk3pnttSuj5itTmSfHQKgaCq0Yii3XvDcNDvXPADVWGE8D04JLWjJ+u8n3lZZ15XF5e3i4+lMfWZvmclRYksYbBkATzMLBXm/KrJN/52bXVJykke5oD1u7HxHDFap91XEus78T+RG/xeDeyMO/f5JGsBA4E365e2q+zImQRmlHSXCZnjFQT+0qxMX6ZNFxaC/unoZ8cidm0qgUJ42i9qfk78Rcrrhs4Z3NZk1QxLp8V7u63C9PW3mzjpiVTM3r6PadNtDF2VjKXdKD15g1Dw6xXelktpCkfCMNF4BPsxWRJ3SOM/LN7oVJNnMsmMIjj9PSqfrrws1cyIYzkl7BJaJEexRajoXsLBqMRRIUo1wEdd/IJErYhnheH1fE8RJlwJhuSq1DWD4qnGah3x/tGcjsZkMVUGjht5ehIA== X-Forefront-PRVS: 09760A0505 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; AM2PR07MB0897; 23:yA+JzyI5AN0AnYhGfiLvlgJlBpC+2PdxrOzcq3r6h?= =?us-ascii?Q?7oLGD7r7KFIZnXisLYrjNEArVgiQDcrdxCbNj1wh3yO0vpXwTtavGX4oC0rU?= =?us-ascii?Q?h6b0Bc9WP3XbmjwGGIAYgdI4Npim8sxV2o2a2l2/k10MvSMDv3CxZSjVEYaB?= =?us-ascii?Q?jGRqWlyThEOckGvJ6IlYY7oUMWY9wvq4EVmtW9Zjmt6S40ID7crA5W3M/ZWg?= =?us-ascii?Q?Kxsjnd9zSDPsl6UzJX0PrpKrwXd1tOmj6rVInWEDnOjpr2Svc5shJQyDvKfZ?= =?us-ascii?Q?Ow7rmOtD1SlikIHrwNPv3H/Zaq1VAqQurHk8TyUxUIgmO1GiIIIPRyz8J/8I?= =?us-ascii?Q?VN/SptzbuRCUOKHjGq9JqE6ix8RT5NOwLI8FzLms0dsx7gxBJw8iJzrwHfUw?= =?us-ascii?Q?aSllTNIQe5l1LqIh7uxdVJjhHDmCTiAl+gAG/JU2EaD96nxwXhHoYGRRnor7?= =?us-ascii?Q?z0P/nAwa6j3OZz/zkcciw0zF8B5Ig9k9HuE7TrpmG6M8ysEtbGvCyzNMWPM+?= =?us-ascii?Q?GoNCn5PWTzDDjmvknabdtPhuCe3Fh187/4b1SO/LLvb7Wx+5ou+WJKk2haBF?= =?us-ascii?Q?v1bE53HIsR7t5xXPfaTHgwbLBo3sLUxmgiZEhwhrH3lqStmQKQuPs7jVyc1N?= =?us-ascii?Q?DiYGhgvk7gOpvoIWEnUhWyoDHxtI0RQra7v3godsIANDczVuQt2gnUvzwkTH?= =?us-ascii?Q?QsW6QIw15yjZuhABDSRULk1GUclDdaRB8uSLJi8IY6AQXd0FOpodIUksq7dO?= =?us-ascii?Q?uHKIu5q+TsaZed8LJgk+B8JIY5Q70lWWZSPPBfNmFJU+z/eQYibEMXpCLkkM?= =?us-ascii?Q?mqNkrZnJqVz7xzxpeC83zAX/ZDW9eSVrb7gX3xmXe92Lr8gKOO+hT9CkXbf3?= =?us-ascii?Q?8I+ROWRL3CypEOPWVJ5xeGU0K3dVvGp1EhYzIgtQW3YZyk/o71MRDv4VI2HK?= =?us-ascii?Q?gTM3RaKNgaR+mjQUHOFjBIXH92HEWKqWX07IT5LPUjhhzCBrzDDMCDorpnWS?= =?us-ascii?Q?tjktY7yI2EA3dAurCA/MUZAfjDvnOx5uF+YXovCEkOpkd7J10a/+vMLgbJsN?= =?us-ascii?Q?DBXMcZvnfgIf+r7r1dFsAMG1fEScAU7EX2kolcT3YPYj/cqOIB6PC/T62YqL?= =?us-ascii?Q?3fVAbVAOlCHkBk8gbMrpvyVgZgoZzYY?= X-Microsoft-Exchange-Diagnostics: 1; AM2PR07MB0897; 6:t8+FQEc/61sC2S5aGucwvajtAsLGRvSvkJsdbnrnpzOwTYTFfRPWsJ7Scvq3E21cX0AxsrOw0xtpI6WI0CHGqg5dbAz4dYePlgvO9OzniwPq9BOapQrf0PsI6TqQFhmYxpICsoiRx/hTKjzGVJ0h8kVf5X+LDSHkdiifXtyTIgxMyGRKo7GS7UGGLCxUNexkghq3i3ydmzF9p3NKFMrZIKdUMz48hJhQR8TM5B8KeRl81b2AZ9GBfkIxyHwvh9XWArur5rnsSeQOaN7foLTvhz8w+3AsQjG7N8O3yONatOA=; 5:nNRfvpALhNWtiHCTH3hFS0feUkHT48mJb5ahu7iDoQgl+/dQ6ryGVUP5Uz0YJM+8GqRb7qvQcEXLoa57wsIuQabO6H68IT29vLyLVR/o2QC0Cvay/RT4QgQL5Kyxa4LWrUgl/QWdBIDYm6w6Sva7Cw==; 24:XRBpnA4bSvtm+aQrgNbREfGJdF4owDGaU4lgXZi4gomovFRCupwj1ctiO1HOsbd771FJ/GHtiMamGvyhtm1rq1q5SL7k+aeQpll14+Ee3fU=; 7:gx5haFJzsjxnWjHpywxotzGZq2hpamdQMb9tnB3zEFI1QBd5CklavspOPT1e9jvfZt5Ytj8P+fQmYAlXk2Ad0dhDAF2bl260aGhFt8IhsIRuZFRSgHLGuHBj4qmLvXzxGXu//yE9HyTV7Vb9W3IbVH2fZ3Km/FLMJ2MzhC191G44dw8ukMsLg5JGYXu5qBt1Oz/3XGCJBEKSmqMQEdV/SJnDKqH0XjQN8dU0koBirtM2pIG+dv2nuxXVWiHrVgPZ SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: nokia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Jun 2016 10:32:18.3490 (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=[mailrelay.int.nokia.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM2PR07MB0897 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 X-Received-From: 157.55.234.134 Subject: [Qemu-devel] [PATCH v2 02/10] m25p80: Make a table for JEDEC ID. 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+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Marcin Krzeminski Since it is now longer than 4. This work based on Pawel Lenkow changes and the kernel SPI framework. Signed-off-by: Marcin Krzeminski Reviewed-by: Cédric Le Goater --- hw/block/m25p80.c | 61 ++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 42 insertions(+), 19 deletions(-) diff --git a/hw/block/m25p80.c b/hw/block/m25p80.c index 15765f5..342f7c9 100644 --- a/hw/block/m25p80.c +++ b/hw/block/m25p80.c @@ -53,12 +53,17 @@ /* 16 MiB max in 3 byte address mode */ #define MAX_3BYTES_SIZE 0x1000000 +#define SPI_NOR_MAX_ID_LEN 6 + typedef struct FlashPartInfo { const char *part_name; - /* jedec code. (jedec >> 16) & 0xff is the 1st byte, >> 8 the 2nd etc */ - uint32_t jedec; - /* extended jedec code */ - uint16_t ext_jedec; + /* + * This array stores the ID bytes. + * The first three bytes are the JEDIC ID. + * JEDEC ID zero means "no ID" (mostly older chips). + */ + uint8_t id[SPI_NOR_MAX_ID_LEN]; + uint8_t id_len; /* there is confusion between manufacturers as to what a sector is. In this * device model, a "sector" is the size that is erased by the ERASE_SECTOR * command (opcode 0xd8). @@ -70,11 +75,33 @@ typedef struct FlashPartInfo { } FlashPartInfo; /* adapted from linux */ - -#define INFO(_part_name, _jedec, _ext_jedec, _sector_size, _n_sectors, _flags)\ - .part_name = (_part_name),\ - .jedec = (_jedec),\ - .ext_jedec = (_ext_jedec),\ +/* Used when the "_ext_id" is two bytes at most */ +#define INFO(_part_name, _jedec_id, _ext_id, _sector_size, _n_sectors, _flags)\ + .part_name = _part_name,\ + .id = {\ + ((_jedec_id) >> 16) & 0xff,\ + ((_jedec_id) >> 8) & 0xff,\ + (_jedec_id) & 0xff,\ + ((_ext_id) >> 8) & 0xff,\ + (_ext_id) & 0xff,\ + },\ + .id_len = (!(_jedec_id) ? 0 : (3 + ((_ext_id) ? 2 : 0))),\ + .sector_size = (_sector_size),\ + .n_sectors = (_n_sectors),\ + .page_size = 256,\ + .flags = (_flags), + +#define INFO6(_part_name, _jedec_id, _ext_id, _sector_size, _n_sectors, _flags)\ + .part_name = _part_name,\ + .id = {\ + ((_jedec_id) >> 16) & 0xff,\ + ((_jedec_id) >> 8) & 0xff,\ + (_jedec_id) & 0xff,\ + ((_ext_id) >> 16) & 0xff,\ + ((_ext_id) >> 8) & 0xff,\ + (_ext_id) & 0xff,\ + },\ + .id_len = 6,\ .sector_size = (_sector_size),\ .n_sectors = (_n_sectors),\ .page_size = 256,\ @@ -360,7 +387,7 @@ typedef struct M25P80Class { static inline Manufacturer get_man(Flash *s) { - switch (((s->pi->jedec >> 16) & 0xFF)) { + switch (s->pi->id[0]) { case 0x20: return MAN_NUMONYX; case 0xEF: @@ -630,6 +657,7 @@ static void reset_memory(Flash *s) static void decode_new_cmd(Flash *s, uint32_t value) { s->cmd_in_progress = value; + int i; DB_PRINT_L(0, "decoded new command:%x\n", value); if (value != RESET_MEMORY) { @@ -743,16 +771,11 @@ static void decode_new_cmd(Flash *s, uint32_t value) case JEDEC_READ: DB_PRINT_L(0, "populated jedec code\n"); - s->data[0] = (s->pi->jedec >> 16) & 0xff; - s->data[1] = (s->pi->jedec >> 8) & 0xff; - s->data[2] = s->pi->jedec & 0xff; - if (s->pi->ext_jedec) { - s->data[3] = (s->pi->ext_jedec >> 8) & 0xff; - s->data[4] = s->pi->ext_jedec & 0xff; - s->len = 5; - } else { - s->len = 3; + for (i = 0; i < s->pi->id_len; i++) { + s->data[i] = s->pi->id[i]; } + + s->len = s->pi->id_len; s->pos = 0; s->state = STATE_READING_DATA; break;