All of lore.kernel.org
 help / color / mirror / Atom feed
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

  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.