Received: by 2002:a25:7ec1:0:0:0:0:0 with SMTP id z184csp173954ybc; Fri, 15 Nov 2019 19:49:09 -0800 (PST) X-Google-Smtp-Source: APXvYqyP240C+u1Kd7lAzL5qXGGD9L+wnR0KgnJi/7njae6/xgWfwvUdNUKTKbbU2VTud9H8CA/m X-Received: by 2002:a17:906:301a:: with SMTP id 26mr6392871ejz.201.1573876149062; Fri, 15 Nov 2019 19:49:09 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1573876149; cv=none; d=google.com; s=arc-20160816; b=SC2ARyL7Pk17igI56dkEAlc7MEYJ34v4q19IBjdEx2oauwbeqN609nz1XppprVOTyN lDtJMeqkDj90JhaVlmlBHouAzTs5rRftId/F5dKIhcrqeeqcoz/sYbsWvqQrhQKfRLZE XL+3YONQMBdNWCJq7ItMvWUg/ijYOXQzDEbPOh9fh7vo5+fYvDGeWWNBvxPmI5S3FzA9 dZOB30FvEbvEkKr6VuO7OekqrvzCHUr7VlOWRZkL8IK9bqhEIgdvWd4zp/QpTRW67H4r MZlWNiGxDL3yQ3dr6JgnboeBCK3MKz+b5eq5sTaVD8uI9Hv5yGx6cPAhsezANj8wACuz YaMA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:date:subject:from:message-id:cc:to; bh=rZhtqlSWy2SqpQY4UAsvzQmPON0CWAeXJq9IiutPQ38=; b=oDFfZJhhhv1nmh5XfBIyY15mP95HclnvCUnIV9YnqArAqBra76pl6H9EqQKBgA5RXx JSrX1iny7PTct2TRY4U4sUkBoR6chB7NQREZMzNgs8uxqTJJt5frvJFi/X9nWGNJz3c/ 9CUbkquysQLoS/VF9lHhqg46M0fq7Ob0ZZXzbvYnL653eMz1IrJC1Bqg70gSENZ2kFRE n/iNp9bqwoYWvYlkIhb/PibTJiub1L7ssfBdKvw2FwRdjWBjFo0I23YP5i7PXjxjs251 YLIlPTbTWeLkpsA4IesJArofwbiYahYVdMEiCa5ejB8GvboYuPXDFYO2up4PP5A4toWU GCTQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id e50si8308348ede.59.2019.11.15.19.48.44; Fri, 15 Nov 2019 19:49:09 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727510AbfKPDrm (ORCPT + 99 others); Fri, 15 Nov 2019 22:47:42 -0500 Received: from kvm5.telegraphics.com.au ([98.124.60.144]:35268 "EHLO kvm5.telegraphics.com.au" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727418AbfKPDrk (ORCPT ); Fri, 15 Nov 2019 22:47:40 -0500 Received: by kvm5.telegraphics.com.au (Postfix, from userid 502) id 99A542A721; Fri, 15 Nov 2019 22:47:39 -0500 (EST) To: "James E.J. Bottomley" , "Martin K. Petersen" Cc: "Michael Schmitz" , "Kars de Jong" , linux-scsi@vger.kernel.org, linux-kernel@vger.kernel.org Message-Id: <2bbb6359d542f5882be67c415ecc25ad2d9eeb5e.1573875417.git.fthain@telegraphics.com.au> From: Finn Thain Subject: [PATCH] esp_scsi: Clear Transfer Count registers before PIO transfers Date: Sat, 16 Nov 2019 14:36:57 +1100 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The zorro_esp driver uses both PIO and DMA transfers. If a failed DMA transfer happened to be followed by a PIO transfer, the TCLOW and TCMED registers would not get cleared. It is theoretically possible that the stale value from the transfer counter or the TCLOW/TCMED registers could then be used by the controller and the driver. Avoid that by clearing these registers before each PIO transfer. Cc: Michael Schmitz Cc: Kars de Jong Tested-by: Stan Johnson Signed-off-by: Finn Thain --- drivers/scsi/esp_scsi.c | 3 +++ drivers/scsi/mac_esp.c | 2 -- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/scsi/esp_scsi.c b/drivers/scsi/esp_scsi.c index bb88995a12c7..afbef83f5dd9 100644 --- a/drivers/scsi/esp_scsi.c +++ b/drivers/scsi/esp_scsi.c @@ -2835,6 +2835,9 @@ void esp_send_pio_cmd(struct esp *esp, u32 addr, u32 esp_count, cmd &= ~ESP_CMD_DMA; esp->send_cmd_error = 0; + esp_write8(0, ESP_TCLOW); + esp_write8(0, ESP_TCMED); + if (write) { u8 *dst = (u8 *)addr; u8 mask = ~(phase == ESP_MIP ? ESP_INTR_FDONE : ESP_INTR_BSERV); diff --git a/drivers/scsi/mac_esp.c b/drivers/scsi/mac_esp.c index 1c78bc10c790..797579247e47 100644 --- a/drivers/scsi/mac_esp.c +++ b/drivers/scsi/mac_esp.c @@ -361,8 +361,6 @@ static int esp_mac_probe(struct platform_device *dev) esp->flags = ESP_FLAG_NO_DMA_MAP; if (mep->pdma_io == NULL) { printk(KERN_INFO PFX "using PIO for controller %d\n", dev->id); - esp_write8(0, ESP_TCLOW); - esp_write8(0, ESP_TCMED); esp->flags |= ESP_FLAG_DISABLE_SYNC; mac_esp_ops.send_dma_cmd = esp_send_pio_cmd; } else { -- 2.23.0