From: Alexander Stein <alexander.stein@systec-electronic.com>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Mathias Nyman <mathias.nyman@intel.com>,
linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, "Wang,
Yu" <yu.y.wang@intel.com>,
"Li, Guanglei" <guangleix.li@intel.com>,
"Wu, Hao" <hao.wu@intel.com>
Subject: Re: [PATCH 1/1] xhci: add USB2 test mode support
Date: Wed, 08 Feb 2017 14:10:39 +0100 [thread overview]
Message-ID: <2924299.FzB3BCsVab@ws-stein> (raw)
In-Reply-To: <20170208125330.GA27478@kroah.com>
On Wednesday 08 February 2017 13:53:30, Greg Kroah-Hartman wrote:
> On Wed, Feb 08, 2017 at 11:26:35AM +0100, Alexander Stein wrote:
> > This patch adds support for USB2 test mode (Test_J, Test_K,
> > Test_SE0_NAK and Test_Packet) per XHCI spec 4.19.6.
>
> What does that mean "in English"? In other words, why do we want this?
> What does it provide for a user? Why do we care?
USB2 test mode is a required hardware feature for system integrators
validating their hardware according to USB spec, regarding signal strength and
stuff. It is purely a hardware test feature.
> > @@ -1134,6 +1137,64 @@ int xhci_hub_control(struct usb_hcd *hcd, u16
> > typeReq, u16 wValue,>
> > temp |= PORT_U2_TIMEOUT(timeout);
> > writel(temp, port_array[wIndex] + PORTPMSC);
> > break;
> >
> > + case USB_PORT_FEAT_TEST:
> > + /* 4.19.6 Port Test Modes (USB2 Test Mode) */
> > + if (hcd->speed != HCD_USB2)
> > + goto error;
> > +
> > + /* FIXME: Test_Force_Enable case to be implemented */
> > + if (selector < TEST_J || selector > TEST_PACKET)
> > + goto error;
> > +
> > + /* Disable all Device Slots */
> > + for (i = 0; i < MAX_HC_SLOTS; i++) {
> > + struct xhci_command *command;
> > +
> > + if (!xhci->dcbaa->dev_context_ptrs[i])
> > + continue;
> > + command = xhci_alloc_command(xhci, false,
> > + false, GFP_ATOMIC);
> > + if (!command)
> > + return -ENOMEM;
> > + if (xhci_queue_slot_control(xhci, command,
> > + TRB_DISABLE_SLOT, i)) {
> > + xhci_err(xhci,
> > + "Disable slot[%d] fail!\n", i);
> > + goto error;
> > + }
> > + xhci_dbg(xhci, "Disable Slot[%d].\n", i);
> > + }
> > +
> > + /* Put all ports to the Disable state by clear PP */
> > + xhci_dbg(xhci, "Disable all port (PP = 0)\n");
> > + for (i = 0; i < max_ports; i++) {
> > + temp = readl(port_array[i]);
> > + temp &= ~PORT_POWER;
> > + writel(temp, port_array[i]);
> > + }
> > +
> > + /* Stop the controller */
> > + xhci_dbg(xhci, "Stop controller\n");
> > + temp = readl(&xhci->op_regs->command);
> > + temp &= ~CMD_RUN;
> > + writel(temp, &xhci->op_regs->command);
> > +
> > + if (xhci_handshake(&xhci->op_regs->status,
> > + STS_HALT, STS_HALT, XHCI_MAX_HALT_USEC)) {
> > + xhci_warn(xhci, "Stop controller timeout\n");
> > + return -ETIMEDOUT;
> > + }
> > +
> > + /* Disable runtime PM for test mode */
> > + pm_runtime_forbid(hcd->self.controller);
> > +
> > + /* Set PORTPMSC.PTC field for selected test mode */
> > + xhci_dbg(xhci, "Enter Test Mode: %d\n", selector);
> > + temp = readl(port_array[wIndex] + PORTPMSC);
> > + temp |= selector << 28;
> > + writel(temp, port_array[wIndex] + PORTPMSC);
> > +
> > + break;
>
> What does this "test mode" do? Where does it report the information?
> Who can use it?
Useually you need an oscilloscope and have to enable those test modes on the
hardware. This will send some specific test patterns on D+/D-. There is no
report available (in linux itself) as it is purely externaly visible.
Regular USB usage is not possible at that time.
Anyone (well access to e.g. /dev/bus/usb/001/001 provided) can use it by
sending appropriate USB_PORT_FEAT_TEST requests to the hub.
The same feature for ehci based hosts is already available at
https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/drivers/usb/host/ehci-hub.c#n1267
Best regards,
Alexander
--
Dipl.-Inf. Alexander Stein
SYS TEC electronic GmbH
alexander.stein@systec-electronic.com
Legal and Commercial Address:
Am Windrad 2
08468 Heinsdorfergrund
Germany
Office: +49 (0) 3765 38600-0
Fax: +49 (0) 3765 38600-4100
Managing Directors:
Director Technology/CEO: Dipl.-Phys. Siegmar Schmidt;
Director Commercial Affairs/COO: Dipl. Ing. (FH) Armin von Collrepp
Commercial Registry:
Amtsgericht Chemnitz, HRB 28082; USt.-Id Nr. DE150534010
next prev parent reply other threads:[~2017-02-08 13:12 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-02-08 10:26 [PATCH 1/1] xhci: add USB2 test mode support Alexander Stein
2017-02-08 12:53 ` Greg Kroah-Hartman
2017-02-08 13:10 ` Alexander Stein [this message]
2017-02-08 13:24 ` Greg Kroah-Hartman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=2924299.FzB3BCsVab@ws-stein \
--to=alexander.stein@systec-electronic.com \
--cc=gregkh@linuxfoundation.org \
--cc=guangleix.li@intel.com \
--cc=hao.wu@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=mathias.nyman@intel.com \
--cc=yu.y.wang@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.