Received: by 2002:ac0:a5a7:0:0:0:0:0 with SMTP id m36-v6csp2839705imm; Sun, 29 Jul 2018 04:43:51 -0700 (PDT) X-Google-Smtp-Source: AAOMgpd3tzmmDEsW5pyYq9iYwg+97bTKfLhwhE+7RBzDrrBWcdMva6cCHzceRgoq3qkY5mkF/IVC X-Received: by 2002:a63:67c3:: with SMTP id b186-v6mr12594750pgc.5.1532864631218; Sun, 29 Jul 2018 04:43:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1532864631; cv=none; d=google.com; s=arc-20160816; b=cPmeKW3RAi9vWzliOGXXPWmqmzB6BAk6O5Rcwb8hQHB5xjneRz9kL4OgqIsXCLcH7x 9bM4Mi3LBHfJRsCZyESd3Vf7kaGyOfoBcGSJiL3Bd9CbdqPZfujrPg0zmXjXebH2+8Eu pcZlH7eVqx8/lRDkLyRi7IN9xLQboNntqUgmvQTJQao4aqQanQeMe810dTEHIQ2bgH6x TZ7MiKPehK3tm/6zNtteF6V6Xh/8usef1MJFNBEmfA3aFE0pjIryjDzkMoz3Wfk69jcs 1A4/0yletVwfONm7By//cfcFMea1jMM7987iD4qFWmYtcd2pfBXXmTomtrBZJHlCtT3Y Z/Wg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:dkim-signature :arc-authentication-results; bh=10GUvqmS6JiyaCq216Pe5Yi+A0WnreATf2CdAiR54Rw=; b=OO6aDiDzit7xjS5ibiZoY+ygpdmYplPCmHNmhxaSq56aoQCZfwPAE//WS3xos9KKzd 4yNmiiS+Dd1zgnXzZwdX34nojsnhhtk4+mnS43yjl9nD4uJplkIk2xTarPpEB5JweZR4 5CyloOUaJl9vJg+ja7aoqQgazMtprAtpLWMephF3QyrPUQNYyfqudk6gO3dHIn4JAkxl Go+sggZnzzCFsNk7R+Y/MZ0MucGT8CLm3pT3KFaPEHqZgrabyhGucS2jKOQZB8RZtDkh YxvVCMEurExVkPHgelcjhQcVJo0m8pavSXAD1/AjgDgxs/kc4JOTkBsKnCkEhB7L0JzE JwpQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=vgwdbJXu; 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; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id l6-v6si8770533pfb.69.2018.07.29.04.43.37; Sun, 29 Jul 2018 04:43:51 -0700 (PDT) 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; dkim=pass header.i=@gmail.com header.s=20161025 header.b=vgwdbJXu; 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; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726914AbeG2NMS (ORCPT + 99 others); Sun, 29 Jul 2018 09:12:18 -0400 Received: from mail-wm0-f65.google.com ([74.125.82.65]:50397 "EHLO mail-wm0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726283AbeG2NMS (ORCPT ); Sun, 29 Jul 2018 09:12:18 -0400 Received: by mail-wm0-f65.google.com with SMTP id s12-v6so10042595wmc.0 for ; Sun, 29 Jul 2018 04:42:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=10GUvqmS6JiyaCq216Pe5Yi+A0WnreATf2CdAiR54Rw=; b=vgwdbJXuvMD6ncbs24RZ5CvtrAPxrwcBn1O23gy3CAzHwWRTMSe6kuNXzbL6wqVHT9 Rlmf+51kd314eJhwePW7Lu4MZfoWo1ZdfK5jVfwg+EUjTZzaNWuhH9Qz8vrbzHfOsGwT UikVerCQHc2NgIJ+B5P7CFwlfiAdGPn3IuVUtaSapAEFjopw+OkgCpX3t/qiQiafaU2E AHA2IP3SPqC1WBBa63UE69rjWoWhx/sakfTMBjD9C35mA0KGW0OMYQErkn23yqNNgfkX D75BNQjXeUj/OI2yCTTs/5ALSo4ocv2GuBY5Bw6vFdUykrdF3Lm/hGofIKBqtRridjMP W/Ig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:in-reply-to:references; bh=10GUvqmS6JiyaCq216Pe5Yi+A0WnreATf2CdAiR54Rw=; b=cJshG79yDxiSE1PWTARe/dN4Lcf3c7qhGquo9j8ebTHEK9FbuMyMocO8DwzdOXeVdn shz1l1RN9amNkeFtKo7dzX816HIYfJxStFIoo9N2cWev5km7X6C8UWLCl0vKIDPXpG7v 9m6s5WmyNeDm+MCtdTftTXqY8rz45XAgWVuFNZKSlxUgEZ7cSnVvnvh2TxGytkOsYXuM RlfAGAQHA0ePnoMqH2ixIVVY5MUNCes9iwFXhm0KkJtBBN+7fsLzju1tY/T685/UqSue B2ykhhnVWbMPCXQCMD8umQ8DfXnbCRrM7TADuoqg5876DdpaV15ULngzwmJ5MfYOO8dM 4ing== X-Gm-Message-State: AOUpUlHdSvsoDf1ryuZpR0ddZQSXrGe1jmKKsmsYvdog8VrWaxr1UlrD AnscmqK34/MQIpUpf7mCQchsYLGy X-Received: by 2002:a1c:19c2:: with SMTP id 185-v6mr11569251wmz.79.1532864526166; Sun, 29 Jul 2018 04:42:06 -0700 (PDT) Received: from we.local (ppp-2-87-92-87.home.otenet.gr. [2.87.92.87]) by smtp.gmail.com with ESMTPSA id k3-v6sm10070305wme.44.2018.07.29.04.42.05 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sun, 29 Jul 2018 04:42:05 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by we.local (Postfix) with ESMTP id 690FA6408D2; Sun, 29 Jul 2018 14:42:04 +0300 (EEST) X-Virus-Scanned: amavisd-new at local X-Amavis-Alert: BAD HEADER SECTION, Duplicate header field: "References" Received: from we.local ([127.0.0.1]) by localhost (we.local [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 6rNDzNrfH_IU; Sun, 29 Jul 2018 14:42:03 +0300 (EEST) Received: by we.local (Postfix, from userid 1000) id E6D8E6408D3; Sun, 29 Jul 2018 14:42:03 +0300 (EEST) From: Georgios Tsotsos To: Greg Kroah-Hartman Cc: Georgios Tsotsos , Aaro Koskinen , James Hogan , devel@driverdev.osuosl.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 1/1] Staging: octeon-usb: Breaks down cvmx_usb_poll_channel(). Date: Sun, 29 Jul 2018 14:41:53 +0300 Message-Id: <81f71a7c1997e53ec97f2b90ae562ff361a46f42.1532864059.git.tsotsos@gmail.com> X-Mailer: git-send-email 2.16.4 In-Reply-To: References: In-Reply-To: References: <3b90173dc3a8ce12ef7f4896f05673140ac3b4d7.camel@perches.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org In order to make this function more clear a new function created that controls channels halt on no DMA mode. Signed-off-by: Georgios Tsotsos --- drivers/staging/octeon-usb/octeon-hcd.c | 81 +++++++++++++++++++++------------ 1 file changed, 53 insertions(+), 28 deletions(-) diff --git a/drivers/staging/octeon-usb/octeon-hcd.c b/drivers/staging/octeon-usb/octeon-hcd.c index 8a7bdf1a9fe6..3f44ac260eff 100644 --- a/drivers/staging/octeon-usb/octeon-hcd.c +++ b/drivers/staging/octeon-usb/octeon-hcd.c @@ -2593,7 +2593,51 @@ static void cvmx_usb_transfer_isoc(struct octeon_hcd *usb, cvmx_usb_complete(usb, pipe, transaction, CVMX_USB_STATUS_OK); } } +/** + * Handles channels halt in non DMA mode + * @hcchar_chena: + * @hcint_xfercompl: + * @usb: USB device + * @channel: Channel to poll + * + * In non DMA mode the channels don't halt themselves. We need + * to manually disable channels that are left running + * + * Returns: -1 on halt + */ +static int cvmx_usb_dma_halt(u32 hcchar_chena, u32 hcint_xfercompl, + struct octeon_hcd *usb, int channel) +{ + struct usb_hcd *hcd = octeon_to_hcd(usb); + struct device *dev = hcd->self.controller; + if (hcchar_chena) { + union cvmx_usbcx_hcintmskx hcintmsk; + union cvmx_usbcx_hccharx usbc_hcchar; + /* Disable all interrupts except CHHLTD */ + hcintmsk.u32 = 0; + hcintmsk.s.chhltdmsk = 1; + cvmx_usb_write_csr32(usb, + CVMX_USBCX_HCINTMSKX(channel, usb->index), + hcintmsk.u32); + usbc_hcchar.s.chdis = 1; + cvmx_usb_write_csr32(usb, + CVMX_USBCX_HCCHARX(channel, usb->index), + usbc_hcchar.u32); + return -1; + } else if (hcint_xfercompl) { + /* + * Successful IN/OUT with transfer complete. + * Channel halt isn't needed. + */ + } else { + dev_err(dev, "USB%d: Channel %d interrupt without halt\n", + usb->index, channel); + return -1; + } + + return 0; +} /** * Poll a channel for status * @@ -2604,8 +2648,6 @@ static void cvmx_usb_transfer_isoc(struct octeon_hcd *usb, */ static int cvmx_usb_poll_channel(struct octeon_hcd *usb, int channel) { - struct usb_hcd *hcd = octeon_to_hcd(usb); - struct device *dev = hcd->self.controller; union cvmx_usbcx_hcintx usbc_hcint; union cvmx_usbcx_hctsizx usbc_hctsiz; union cvmx_usbcx_hccharx usbc_hcchar; @@ -2637,34 +2679,17 @@ static int cvmx_usb_poll_channel(struct octeon_hcd *usb, int channel) return 0; } - /* - * In non DMA mode the channels don't halt themselves. We need - * to manually disable channels that are left running - */ + /* In case of non DMA mode handle halt */ if (!usbc_hcint.s.chhltd) { - if (usbc_hcchar.s.chena) { - union cvmx_usbcx_hcintmskx hcintmsk; - /* Disable all interrupts except CHHLTD */ - hcintmsk.u32 = 0; - hcintmsk.s.chhltdmsk = 1; - cvmx_usb_write_csr32(usb, - CVMX_USBCX_HCINTMSKX(channel, usb->index), - hcintmsk.u32); - usbc_hcchar.s.chdis = 1; - cvmx_usb_write_csr32(usb, - CVMX_USBCX_HCCHARX(channel, usb->index), - usbc_hcchar.u32); - return 0; - } else if (usbc_hcint.s.xfercompl) { - /* - * Successful IN/OUT with transfer complete. - * Channel halt isn't needed. - */ - } else { - dev_err(dev, "USB%d: Channel %d interrupt without halt\n", - usb->index, channel); + int dma_halt_status = 0; + u32 xfercompl = usbc_hcint.s.xfercompl; + + dma_halt_status = cvmx_usb_dma_halt(usbc_hcchar.s.chena, + xfercompl, + usb, channel); + + if (dma_halt_status < 0) return 0; - } } } else { /* -- 2.16.4