From patchwork Wed Jun 15 13:41:04 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: 635894 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 3rV7mg3gvrz9t1N for ; Thu, 16 Jun 2016 00:14:11 +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=pA/osaNn; dkim-atps=neutral Received: from localhost ([::1]:42437 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bDBa5-0005nJ-F7 for incoming@patchwork.ozlabs.org; Wed, 15 Jun 2016 10:14:09 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46477) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bDBZ5-00053O-0h for qemu-devel@nongnu.org; Wed, 15 Jun 2016 10:13:08 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bDBZ2-0001AZ-8j for qemu-devel@nongnu.org; Wed, 15 Jun 2016 10:13:06 -0400 Received: from mail-am1on0130.outbound.protection.outlook.com ([157.56.112.130]:2551 helo=emea01-am1-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bDBZ1-0001AG-Qi for qemu-devel@nongnu.org; Wed, 15 Jun 2016 10:13:04 -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=pzvqpKc9Q8nWY1KL0Z/4XZ6zr+0KxYdhCrIZKok5T48=; b=pA/osaNnoWArNZYE/Y8R8GQ3548G/a1AzXBq5lI85PsK5RbYyVCuGw6e7X5FVZ41UQq4+lj9vsXgfqM+BH8r1fhvu5bZCVNju8H+7Bsr5lSBB6AAz+z9zZDv6fn0cXpxuOV5ONZx3dD3ZPfA5HX+Fz2pL6UsvB1TbEXjRNpBc3c= Received: from HE1PR0701CA0034.eurprd07.prod.outlook.com (10.165.214.172) by AM2PR07MB0899.eurprd07.prod.outlook.com (10.161.71.20) with Microsoft SMTP Server (TLS) id 15.1.517.8; Wed, 15 Jun 2016 13:42:52 +0000 Received: from AM1FFO11OLC005.protection.gbl (2a01:111:f400:7e00::121) by HE1PR0701CA0034.outlook.office365.com (2603:10a6:3:5::44) with Microsoft SMTP Server (TLS) id 15.1.517.8 via Frontend Transport; Wed, 15 Jun 2016 13:42:52 +0000 Authentication-Results: spf=pass (sender IP is 131.228.2.240) 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.240 as permitted sender) receiver=protection.outlook.com; client-ip=131.228.2.240; helo=mailrelay.int.nokia.com; Received: from mailrelay.int.nokia.com (131.228.2.240) by AM1FFO11OLC005.mail.protection.outlook.com (10.174.64.132) with Microsoft SMTP Server (TLS) id 15.1.511.7 via Frontend Transport; Wed, 15 Jun 2016 13:42:51 +0000 Received: from fihe3nok0734.emea.nsn-net.net (localhost [127.0.0.1]) by fihe3nok0734.emea.nsn-net.net (8.14.9/8.14.5) with ESMTP id u5FDfm5W004081 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Wed, 15 Jun 2016 16:41:48 +0300 Received: from CNU418C7XK.nsn-intra.net ([10.154.155.220]) by fihe3nok0734.emea.nsn-net.net (8.14.9/8.14.5) with ESMTP id u5FDfkX6004036; Wed, 15 Jun 2016 16:41:48 +0300 X-HPESVCS-Source-Ip: 10.154.155.220 From: To: Date: Wed, 15 Jun 2016 15:41:04 +0200 Message-ID: <1465998071-7355-3-git-send-email-marcin.krzeminski@nokia.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1465998071-7355-1-git-send-email-marcin.krzeminski@nokia.com> References: <1465998071-7355-1-git-send-email-marcin.krzeminski@nokia.com> X-EOPAttributedMessage: 0 X-Forefront-Antispam-Report: CIP:131.228.2.240; IPV:NLI; CTRY:FI; EFV:NLI; SFV:NSPM; SFS:(10019020)(6009001)(7916002)(2980300002)(438002)(189002)(199003)(2950100001)(19580395003)(19580405001)(356003)(77096005)(106466001)(110136002)(229853001)(2351001)(50466002)(97736004)(33646002)(189998001)(11100500001)(8936002)(86152002)(36756003)(16796002)(50226002)(87936001)(68736007)(22756006)(5003940100001)(2906002)(4326007)(76176999)(586003)(48376002)(50986999)(2876002)(86362001)(92566002)(6806005)(5008740100001)(53416004)(8676002)(47776003)(81166006)(81156014); DIR:OUT; SFP:1102; SCL:1; SRVR:AM2PR07MB0899; H:mailrelay.int.nokia.com; FPR:; SPF:Pass; PTR:InfoDomainNonexistent; MX:1; A:1; CAT:NONE; LANG:en; CAT:NONE; X-Microsoft-Exchange-Diagnostics: 1; AM1FFO11OLC005; 1:jEyYg4hNwgPVs4S7fZqbSQHF9Apd65D+I7Q32MoUxbgmNVzsmz+rG99FSXqE1sM/KQr+QDNYq6T4mgtojSjyZolCv1uL8yimXrIRFPn9UFcrIqh1PrXSaMi24XDKN09YW5iWikdJMnz+w5Z99qFFY23jcZFtEnaAC21H6Xy+TGrlOtFCuJ9Iv4DwO69NO9seX/C9fmaXTlKHPDRAgbprtrRN73ENCmctCa3zV8EK1h0HtE5Aqi/gG0wUTWbnquLrBpLlWg/Vl/9rr0wJS+W1ZOXhFE5oB2zT/rmFkvwAqa6GOSTG5Wvb4XLBqzqMra9lfSfN1wkWRQY/2VUXq/Ukm+os52GM90RPD9uOLsQdjqd40h5tgrqHk026yWGUdH0A4tf/uokh8iZcN8gsTs9sxLZdrkLDyIGoaJ3nAG9vB25ih0jsAwpOv0jYGi7EnSKLIbwWIDJX0B2rmaPU9gicw+xZqERKuI7dSjGraMLZaAI= MIME-Version: 1.0 X-MS-Office365-Filtering-Correlation-Id: c73a9c09-28ff-488d-e5b0-08d39522f29c X-Microsoft-Exchange-Diagnostics: 1; AM2PR07MB0899; 2:6eqrMBR0JEo8V+TUqIiyE9SQ2Wfs/zZUri1jI9EYYGEhkoRM3FOl79eGDU5aVKAWB1M8P6on7SFVPDgwBpSv/HJ9oyWPtW4Iue3hKJRrmezE+4sEVRG0/JLkwsSsaPSwzuxb6Vv+/ARn4P5lGQTfTXsjGQejaAQ8Pf1pCmTKT2DYLmJsc49uHOvI8XAFmoqZ; 3:5k/l+q56y3ByzawffyalfwileD2byUqViMKCNaNWwgpu2new4PASOgSXBwhTAXyaIkPNriGooTTglWGeTFSybDeLeICKT/7uuKbvCYZ0XYDBRPt88lCZa5+PpMZ7mrbCS3ADMEwmRUt2aDZrwWYAQ/SiNKTGumPVSEPRF7rBHirZf5+Ui1JT9xb8nSaE+JjOhnjmkukVPCMdxRmL4YmM3kVvqiIpTzK13tEi2/ytk2IUQy7BbQgMsMnhSfyHU9G4SrHgQbY0CF3eKBFlHzHJyA==; 25:PaRFwttcJ0C444VlNYraEbjf4gKETK7xcXJcrKbHl5qpa0xYBOK/X79BDI1WXKAYrdC0lpVzTFlMSZAq0G4X3XRXGuFOpPV0b41RmMuA0PuRausknvyddmgZ/OZc5CYdPaQoGaN8xsQyELE31ePbtT8ThzRGrULw9u52Q3z44L2610CD+sFeOQa/96aHnQuktq7cBVbcvAYPgtFmnRl+OYcMzCjVH9T4DUrRUPvOVykh9HLNpTgKYUu/7rUOMMLMruiyJdWesFMYyGHb4sBOujDqMk8TOKiNGtGaULhLe3SQCU2lDgDbyiAsDFtsLCgwqd6Bo8eLT+85r8nxPdoy+AP16l+76+z2CaFF5pViJbqVZK+hlugRDz5BPRNQ9v/0uvOpjurVoq2Q0yK+UjPbcHtxepLUgjEroaqZqIEaRzM= X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(8251501002); SRVR:AM2PR07MB0899; X-Microsoft-Exchange-Diagnostics: 1; AM2PR07MB0899; 20:UQWEqkdWYug+2NRRjUJggzn9cSA72dPZSgqZRU0aXgrxUlfCvPT3zZWp2INJAhz9kYHGKiiwcOMva9Ilq10ZcG9BqkbrWSbREma8EW8VQSHly3f2ITnAJB/6qJcYs7V1LazOmf30gwmhz0nGU+dkEc20FJ3/gn/akzTahT9P7lWEKdnDLJbk7vG/1zf5SJz7fpiambf2KUuFmAgGSc4KiO1yEETI90Ltckp8ozcTlOogaJhElcJMtKWbXxo8k41IwID5Eeoxl/PIn5WtFm7MoGfHljZX7xbCOphz4jqGloRKapc69dG6ojTv55ILPphr88lXS9cnUPHFazZ92glOGXYoMERRBDhnCQX+bz2WmQJDBWZoSkpueWB0azyEulbM7q+qQL+xPu0LOptypuvsc2wdPkIKcazs+MNvjJq5IlotfYXhQs3vLMuTnu8lfBTdyrHshZ4OiOLCFEsU9UmCRMPFWeO7ftHQqh1c8Bm8SWdjy6NYGDbDVFmeQQEnjY+caYyUH7cv3s7m98yGzXqqqGmVlWVnNVJKkE0X7wpTzDzq4z/NizXBFgJvFZtTRzvA34NPAW1YJOhO5QFpiMOTvEOAo07D6BkTZO4f0p5d93I= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(82608151540597); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(2401047)(8121501046)(5005006)(13016025)(13018025)(10201501046)(3002001); SRVR:AM2PR07MB0899; BCL:0; PCL:0; RULEID:; SRVR:AM2PR07MB0899; X-Microsoft-Exchange-Diagnostics: 1; AM2PR07MB0899; 4:dBZKnvRhOM+kULZ1/1vqsyUMs0kNnRjneDZsPeM8vosd750R7RDZhvHCzvg7GVrxOa3PU5tFgZ+pQoxiZ4IBrgq4NkXgLaascnAE935Jc2ukbRv9skDfCMyHOjqcIeDjvQe7f3wKUCQPVLbkOVU+iLGesco+nUc7TUKVBlqHyBSIcVo4g5SDce+gMcK+wSaoD4UHg6Y36vqldSQ53DYXxAipPMrOjO141yuv7q9ViaTH0L7fNHWTh/DYMjQT9uGgB9twBbSrDMUvDgN8lDX+oEDq2FJQ0dGOPgG2SF5qFmiGmIDB5wDRyY9EUc88GIESRrow6K57x3vMYll/oB/3Ehyr+iB//TWRhOrzcZ5YC0VtHGn6uI5DovIm16R4OJkjtmaMSNixoParTomdTzmYISPzRd+kCzvu9NiazegNPPBRSdsHwJe6B9/J51y/A7Qh2xRZsS2yfc5JZBl1BtJN0Q== X-Forefront-PRVS: 09749A275C X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; AM2PR07MB0899; 23:aQ63RQF0oy1gq9dHyK09FC85tYoaPo7duCuNsQOtf?= =?us-ascii?Q?AnxhRsDJYCKUjoQ6kVGjvIm8i1R2OnTxZIXWEQfbQo8N9bZ3pxRzBoDNco8C?= =?us-ascii?Q?mC35yyyjbVlX97zEvG12zA5dSqikFJKOJmM6IFUhPPj3MfwEt7t8Pgm9JtVO?= =?us-ascii?Q?Nd/ng7XkTpfNaE18l7AwAQoC2d6f2mIPAdAINSoaGgLizCDspDHbIEOrvwpt?= =?us-ascii?Q?QX46VIg/oF120qDDXw88XM6FAvHu2H15MqRPkthGAwiRaq3Ise6hp01Ih3Mn?= =?us-ascii?Q?2MdFnJ59PXrK8NL9oluSbA+E8zK9iJBLrqKQC1iG6/HEVKTwYwTNVXmLfcR5?= =?us-ascii?Q?q1BvGRPVpkpdlOgOvcGfbI5xvUungAG0wdL+TT1pWsrRGsJMMrwOt00PkF4A?= =?us-ascii?Q?eVjZcJ+x2oeAp5mRVekzILOXZqIfgk4+BhAMR0rXgJFe8Evq3WFyjVG/Zsfb?= =?us-ascii?Q?BWVRGDzFsF8zDIqzAyOs7icUGrogbdyzYAUTs3vHlO/qEX1HIpCBnmY0DKLF?= =?us-ascii?Q?4KU71u52BGcB7rwPkGPbNE1BKNhuGDiH8wI06xR1iCONQ/79w9V0KHpr6Hq+?= =?us-ascii?Q?xHZPEQyjQ0Bkb4rigCvTJpzmIgU8J+F1tGn2/qGh3tScJH33z59DQGzIa6e/?= =?us-ascii?Q?VYk6o2+QgE90LWF0u9kldsnOBg1L09tDDx2jjSZBzZcNvBWk3RSHOd2Npt9U?= =?us-ascii?Q?QXlsTE+Yw0pf4gOyVPQ3rHP6jiPLOZ8xSjO91vXUKem3vO/O+gc/Sf3Ptu96?= =?us-ascii?Q?5sd1vLAN7AvtHVRvXGdfMNysq1O07ECb1/UBxcPsHwZW6p/qjAy/YWwkD3kk?= =?us-ascii?Q?zmnhw8rBBUFLJ1AdRtiICkZe7xHgq1wH0s88iOQA3MJ6o+3W0HeStZ/ihTMV?= =?us-ascii?Q?ohshdZ16xSoJPEZ6cgi0NZYsdsc8JVg6FdEEiO7T3jkNCrbMcSrl1y6dSA9E?= =?us-ascii?Q?Ta9KZUald215Ru7kdYdW4uSQk67Mqwa3TiWxZ/i9yaVgZkD0cVhBpcjdI5Vs?= =?us-ascii?Q?vb71aljBg38IyXcTNoK9cVBhzEU0LtF0NUiJKXjToM6RTzVPv1aK/GMMnH8x?= =?us-ascii?Q?7Eg5r88xgGHsTDFFgLuDoAyJjymv6EBDRIGTxyX+lnLXSAwOoiTVFG62ATp1?= =?us-ascii?Q?nPUP0Y+ecO0w/il+x7kuKdTVQrB+iT1?= X-Microsoft-Exchange-Diagnostics: 1; AM2PR07MB0899; 6:e/oN0RsHpLfyxk3Dhe6RMF8USjvYCTm8UeJVYGe8P1c2R54APpRCEgUoZ+2BdgajbyJUYpPfQJXBQpbB9uqfdFe/cz+XTA775LSnbaBixrL7jawFfTGGrZaXxiQX8KnSHlUSsI3g+VVka8yRQ2SZCKaKu0iGPziu3BuIbedqh6BO6NVFdFtPEUNVGorteiDBcxYjCaHM9w3bfDcJ4HRz9JZ5nNAp3H2+7ficPdKHnzgFbvxsVFN0K89+Y79qts4R4fxMIfzhm+OX5SeSNDMIww==; 5:ce6S/OgrdjfKq1o0KADye6Fhl3Of0jrZlxikw9XNAhaUWuuoCiBSkwpWJda14oC+S8MQxyJkBOgl+PN/LJsF3OSb/vuN4gasrHKG+6KufHVw/GXTq9hhHJB+VHuhTkcoqf2PlT27i4gJBFX8W89AEw==; 24:Wc+4xVtbTF+KYRqgrv5yrvPUVZqhIdMZ4l+2uZjmWJnqwFgpfUHRLdZMZdm89vdv8I8RXpHfwGq1tjXN3GvYrj8g/RknJXyq1AQHXOMak20=; 7:9VdoL9cuqzk4KAPYZyzGAcmL0Kv4+183e17D2z7oQRWv9PNCuf/Mya5E9ZiFmWCAtKo4nr+dQpY6uBAv5/jzot+AMV1u+9eojZL/Doqh9yEiBA04SSQnFlNcYurND9bLSONDF+UHGNhzHtz38MTWeAyH1pFjH2cFUkHA4gJKe5+7+bD2BCP6vmIOHi/e3F9D1QhUKRrLqyv5f3vcmnFZMQ== SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: nokia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jun 2016 13:42:51.9763 (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.240]; Helo=[mailrelay.int.nokia.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM2PR07MB0899 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 X-Received-From: 157.56.112.130 Subject: [Qemu-devel] [PATCH 2/9] 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, rfsw-patches@mlist.emea.nsn-intra.net, pawel.lenkow@itlen.com 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;