From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=pass header.i=@akeo-ie.20150623.gappssmtp.com header.s=20150623 header.b=EwmVq/Ak; spf=none, err=permanent DNS error (domain: akeo.ie, ip: 209.85.221.67, mailfrom: pete@akeo.ie) Received: from mail-wr1-f67.google.com (mail-wr1-f67.google.com [209.85.221.67]) by groups.io with SMTP; Wed, 17 Jul 2019 04:47:05 -0700 Received: by mail-wr1-f67.google.com with SMTP id 31so24510926wrm.1 for ; Wed, 17 Jul 2019 04:47:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=akeo-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=0gcePwvrKr5kT0jUKGf6vxeRgYZU0j/nZ87MKzkbXj8=; b=EwmVq/AkhtNFfISHT/TjJfwRdSRasaTuKikxfq/nYzndlFkmQOrGNesdM3PpiaIedF nDVyKRFyypvikVcEVDlIIluj6eK7aABzOgBFm0yf4Sk1gGw8Wgr4LhlLjhgfQscvS6ii vuJ9d+CYk/i/HapMbYiqvLncnRlQUywFy/dVvwxDl5cADLEacR2jHBDvOZ8nAlngg4/i 9KHHsAP9eWHs37TapkcnF91VBy2cmEEYAUSaJRVVbd86XZ25IUiZdOo4XYZjuwxNkAUA prSAAuCzsee07UpR7WMkCZhSi8CAp70IH1At9i0W3LKDeuNn95j7HlymQWmFyuXD6WyC NbaQ== 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:mime-version:content-transfer-encoding; bh=0gcePwvrKr5kT0jUKGf6vxeRgYZU0j/nZ87MKzkbXj8=; b=fWsYCFkeUYekwF49a0GAr9BXLS//EAeXxFFkoT7ZdZdHbxzSWo1CrgiOxjMw8Gi6Va X//59nEOf66VZZT1PJbBrsUBG6k7syBJr5PcGyFVUvllTs8nAFi3ZLin1izTgdCZsle6 Co36HUyH2mTtoxsRQyv3E+H1nEbaZpq31O8xTXc2EaQV2v8jZ+p1eQUchcrPrUgwUG7w 4sTn+DC7ARTSne93uH9vBkkRaqgzydXOCSQenZOs17EjU6PJK76rRB/G0lNorINpjLQK UkBXb7IhfgcZ4V51ekUgXZXqWu2mMbV87W0ni6H9BNjsSUccmLWfDKha3feXVtYBpQxQ E2Ew== X-Gm-Message-State: APjAAAUHaBgJWQILOx9oswn0UHmtw0Ryk+N9dW+dxxgLB+BDFDs2RC8d MKeKd+Jsy5V0MNyzAbgxIIAEYHyO X-Google-Smtp-Source: APXvYqz9HOPxDfTOdY5hffJkjT2C2r90+n+tNPXgOqgE/tTTfMU71jNdndyllLyh8MmvEH72csUQnQ== X-Received: by 2002:a5d:5012:: with SMTP id e18mr14154232wrt.166.1563364022861; Wed, 17 Jul 2019 04:47:02 -0700 (PDT) Return-Path: Received: from localhost.localdomain ([84.203.61.230]) by smtp.gmail.com with ESMTPSA id c3sm26885778wrx.19.2019.07.17.04.47.01 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 17 Jul 2019 04:47:02 -0700 (PDT) From: "Pete Batard" To: devel@edk2.groups.io Cc: ard.biesheuvel@linaro.org, leif.lindholm@linaro.org Subject: [edk2-platforms: PATCH 2/3] Platform/RPi3: Gracefully disable USB channel after a timeout Date: Wed, 17 Jul 2019 12:46:44 +0100 Message-Id: <20190717114645.7776-3-pete@akeo.ie> X-Mailer: git-send-email 2.21.0.windows.1 In-Reply-To: <20190717114645.7776-1-pete@akeo.ie> References: <20190717114645.7776-1-pete@akeo.ie> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit From: Michael Brown When a timeout occurs, attempt to gracefully disable the channel. Report a final status of EFI_TIMEOUT if the channel was disabled successfully, or EFI_DEVICE_ERROR if we were unable to disable the channel. Signed-off-by: Michael Brown Signed-off-by: Pete Batard --- Platform/RaspberryPi/RPi3/Drivers/DwUsbHostDxe/DwUsbHostDxe.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/Platform/RaspberryPi/RPi3/Drivers/DwUsbHostDxe/DwUsbHostDxe.c b/Platform/RaspberryPi/RPi3/Drivers/DwUsbHostDxe/DwUsbHostDxe.c index c1e1229f858e..22d9bd822f96 100644 --- a/Platform/RaspberryPi/RPi3/Drivers/DwUsbHostDxe/DwUsbHostDxe.c +++ b/Platform/RaspberryPi/RPi3/Drivers/DwUsbHostDxe/DwUsbHostDxe.c @@ -318,13 +318,21 @@ DwHcTransfer ( Ret = Wait4Chhltd (DwHc, Timeout, Channel, &Sub, Pid, IgnoreAck, &Split); if (Ret == XFER_NOT_HALTED) { - /* - * FIXME: do proper channel reset. - */ - MmioWrite32 (DwHc->DwUsbBase + HCCHAR (Channel), DWC2_HCCHAR_CHDIS); - *TransferResult = EFI_USB_ERR_TIMEOUT; - Status = EFI_DEVICE_ERROR; + MmioOr32 (DwHc->DwUsbBase + HCCHAR (Channel), DWC2_HCCHAR_CHDIS); + Status = gBS->SetTimer (Timeout, TimerRelative, + EFI_TIMER_PERIOD_MILLISECONDS (1)); + ASSERT_EFI_ERROR (Status); + if (EFI_ERROR (Status)) { + break; + } + Status = Wait4Bit (Timeout, DwHc->DwUsbBase + HCINT (Channel), + DWC2_HCINT_CHHLTD, 1); + if (Status == EFI_SUCCESS) { + Status = EFI_TIMEOUT; + } else { + Status = EFI_DEVICE_ERROR; + } break; } else if (Ret == XFER_STALL) { *TransferResult = EFI_USB_ERR_STALL; -- 2.21.0.windows.1