From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751822AbdAYPvs (ORCPT ); Wed, 25 Jan 2017 10:51:48 -0500 Received: from mga02.intel.com ([134.134.136.20]:54166 "EHLO mga02.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751644AbdAYPvr (ORCPT ); Wed, 25 Jan 2017 10:51:47 -0500 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.33,284,1477983600"; d="scan'208";a="926534404" Subject: Re: [PATCH v5 1/4] usb: dbc: early driver for xhci debug capability To: Peter Zijlstra References: <1479189731-2728-2-git-send-email-baolu.lu@linux.intel.com> <20170119093743.GC22865@gmail.com> <58817A25.6080305@linux.intel.com> <20170122090423.GA15061@gmail.com> <5886DBB7.4070501@linux.intel.com> <20170124082039.GB8667@gmail.com> <5888377F.8090709@linux.intel.com> <20170125092355.GA24580@gmail.com> <20170125095736.GP6515@twins.programming.kicks-ass.net> <588899BA.7040108@linux.intel.com> <20170125143829.GS6515@twins.programming.kicks-ass.net> Cc: Ingo Molnar , Greg Kroah-Hartman , Mathias Nyman , Ingo Molnar , tglx@linutronix.de, linux-usb@vger.kernel.org, x86@kernel.org, linux-kernel@vger.kernel.org, Jiri Slaby From: Lu Baolu Message-ID: <5888C986.4020809@linux.intel.com> Date: Wed, 25 Jan 2017 23:51:34 +0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.5.1 MIME-Version: 1.0 In-Reply-To: <20170125143829.GS6515@twins.programming.kicks-ass.net> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi, On 01/25/2017 10:38 PM, Peter Zijlstra wrote: > On Wed, Jan 25, 2017 at 08:27:38PM +0800, Lu Baolu wrote: >> In my driver, udelay() is mostly used to handle time out. >> >> Xdbc hides most USB things in its firmware. Early printk driver only needs >> to setup the registers/data structures and wait until link ready or time out. >> Without udelay(), I have no means to convert the polling times into waiting >> time. > What is timeout and why? Put it in simple: The driver sets the RUN bit in control register and polls READY bit in status register for the successful USB device enumeration. As the USB device enumeration might fail and the READY bit will never be set, the driver must have a timeout logic to avoid endless loop. More details: The operational model is that driver sets up all necessary registers and data structures, and then starts the debug engine by setting the RUN/STOP bit in the control register. The debug engine then brings up itself as a ready-for-enumeration USB device. The USB link between host and device starts link training and then host will detect the connected device. The hub driver in host will then starts the USB device enumeration processes (as defined in USB spec). If everything goes smoothly, the device gets enumerated and host can talk with the debug device. After that, xdbc firmware will set the READY bit in status register. And the driver can go ahead with data transfer over USB. > If there is an error other than !ready, I would > expect the hardware to inform you of this through another status bit, > no? Yeah, this might be another choice of hardware design. But it's not a topic for this driver. > > So why can't you poll indefinitely for either ready or error? > > Even if the hardware has both ready and error status bits, it's still nice to have a time out watch dog. Buggy hardware or firmware might not set any of these bits. Polling indefinitely might result in a endless loop. Best regards, Lu Baolu