From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752174AbcBAPjP (ORCPT ); Mon, 1 Feb 2016 10:39:15 -0500 Received: from 83-64-71-82.hebragasse.xdsl-line.inode.at ([83.64.71.82]:51995 "EHLO bagheera.dmz.drnet.at" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751797AbcBAPjN (ORCPT ); Mon, 1 Feb 2016 10:39:13 -0500 X-Greylist: delayed 331 seconds by postgrey-1.27 at vger.kernel.org; Mon, 01 Feb 2016 10:39:12 EST To: San Mehat , Johannes Erdfelt , NeilBrown Cc: linux-kernel@vger.kernel.org, trivial@kernel.org From: "Dr. Net! - Eugen Rieck" Subject: [PATCH 1/1] umem driver: allow multiple magic numbers per model Message-ID: <56AF7AD2.7000404@drnet.at> Date: Mon, 1 Feb 2016 16:33:38 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.5.1 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Assp-Version: 2.2.1(12137) on smtp.drnet.at X-Assp-ID: smtp.drnet.at m1-39695-09253 X-Assp-Original-Subject: [PATCH 1/1] umem driver: allow multiple magic numbers per model Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Eugen Rieck Allow for multiple magic numbers per model and include the magic number for the PCIe-based 5453CN, that shares the device id of the older PCI-X-based 5425CN. Signed-off-by: Eugen Rieck --- The umem driver for Micro Memory (now Curtiss-Wright) NVRAM cards relied on a unique magic number for each PCI device id. Newer cards violate this and were thus rejected by the driver. Developed for 3.13.0 (Ubuntu 14.04, ubuntu 3.13.0-76-generic), but merges cleanly into current (4.5-rc2) as the driver is old and largely unchanged. umem.c | 29 +++++++++++++++++++++++------ umem.h | 2 ++ 2 files changed, 25 insertions(+), 6 deletions(-) --- drivers/block/umem.c.orig 2016-02-01 14:51:07.463944676 +0100 +++ drivers/block/umem.c 2016-02-01 15:03:52.815934423 +0100 @@ -32,6 +32,8 @@ * 17May2002:NeilBrown - remove init_mem initialisation. Instead detect * - a sequence of writes that cover the card, and * - set initialised bit then. + * 01Feb2016:Eugen Rieck - allow multiple magic numbers per pci id to + * acommodate newer models */ #undef DEBUG /* #define DEBUG if you want debugging info (pr_debug) */ @@ -799,6 +801,9 @@ unsigned long csr_base; unsigned long csr_len; int magic_number; + int magic_numbers[MAGIC_NUMBERS_PER_DEV]; + int magic_number_ok = 0; + int i; static int printed_version; if (!printed_version++) @@ -850,27 +855,39 @@ switch (card->dev->device) { case 0x5415: card->flags |= UM_FLAG_NO_BYTE_STATUS | UM_FLAG_NO_BATTREG; - magic_number = 0x59; + magic_numbers[0] = 0x59; + magic_numbers[1] = 0x100; break; case 0x5425: card->flags |= UM_FLAG_NO_BYTE_STATUS; - magic_number = 0x5C; + magic_numbers[0] = 0x5C; + magic_numbers[1] = 0x5E; + magic_numbers[2] = 0x100; break; case 0x6155: card->flags |= UM_FLAG_NO_BYTE_STATUS | UM_FLAG_NO_BATTREG | UM_FLAG_NO_BATT; - magic_number = 0x99; + magic_numbers[0] = 0x99; + magic_numbers[1] = 0x100; break; default: - magic_number = 0x100; + magic_numbers[0] = 0x100; break; } - if (readb(card->csr_remap + MEMCTRLSTATUS_MAGIC) != magic_number) { - dev_printk(KERN_ERR, &card->dev->dev, "Magic number invalid\n"); + magic_number = readb(card->csr_remap + MEMCTRLSTATUS_MAGIC); + for (i = 0; i < MAGIC_NUMBERS_PER_DEV; i++) { + if (magic_numbers[i] == magic_number) { + magic_number_ok = 1; + break; + } + if (magic_numbers[i] >= 0x100) break; + } + if (!magic_number_ok) { + dev_printk(KERN_ERR, &card->dev->dev, "Magic number 0x%02x invalid for device 0x%04x\n", magic_number, card->dev->device); ret = -ENOMEM; goto failed_magic; } --- drivers/block/umem.h.orig 2016-02-01 14:51:16.055944561 +0100 +++ drivers/block/umem.h 2016-02-01 14:47:38.463947477 +0100 @@ -15,6 +15,8 @@ #define IRQ_TIMEOUT (1 * HZ) +#define MAGIC_NUMBERS_PER_DEV 2 + /* CSR register definition */ #define MEMCTRLSTATUS_MAGIC 0x00 #define MM_MAGIC_VALUE (unsigned char)0x59