[openfirmware] [commit] r2738 - dev/usb2/hcd/ehci

repository service svn at openfirmware.info
Tue Dec 6 08:11:03 CET 2011


Author: wmb
Date: Tue Dec  6 08:11:02 2011
New Revision: 2738
URL: http://tracker.coreboot.org/trac/openfirmware/changeset/2738

Log:
USB - added some access words - currently unused - for the ULPI viewport register.

Added:
   dev/usb2/hcd/ehci/ulpi.fth

Added: dev/usb2/hcd/ehci/ulpi.fth
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dev/usb2/hcd/ehci/ulpi.fth	Tue Dec  6 08:11:02 2011	(r2738)
@@ -0,0 +1,75 @@
+\ See license at end of file
+purpose: Support for ULPI Viewports
+
+\ ULPI is a hardware interface between a USB controller and external PHY.
+\ The semantics of the interface mimics that of the UTMI+ hardware interface,
+\ but the ULPI interface has fewer pins and is thus better-suited for
+\ external PHYs.  The UTMI+ interface was optimized for controller and PHY
+\ on the same chip.
+\ UTMI+ has a number of hardware control signals that change infrequently.
+\ ULPI implements those almost-static signals with bits in PHY-resident
+\ registers.  Typically that is transparent to software, as the ULPI side
+\ of the hardware interface does the work of translating the UTMI hardware
+\ signaling into register accesses across the ULPI interconnect.  However,
+\ it is possible to read and write those registers explicitly, e.g. for
+\ debugging.  The "ULPI Viewport" register in the EHCI register block lets
+\ you do that
+
+\ Low-level access to the viewport registers
+: view@  ( -- n )  h# 30 op-reg@  ;
+: view!  ( -- n )  h# 30 op-reg!  ;
+
+\ Wait for the indicated viewport register bit to go to 0.
+: ulpi-poll  ( bit -- )
+   d# 10000 0  do         ( bit )
+      dup view@ and  if   ( bit )
+         drop unloop exit ( -- )
+      then                ( bit )
+      d# 5 us             ( bit )
+   loop                   ( bit )
+   drop  true abort" ULPI poll timeout"
+;
+\ Wakeup the ULPI interface if it is not in "synchronized" state
+: ?ulpi-wakeup  ( -- )
+   view@ h# 0800.0000 and  0=  if      \ SYNC state
+      h# 8000.0000 view!               \ wakeup
+      h# 8000.0000 ulpi-poll           \ wait for wakeup
+   then
+;
+\ Read a register in the ULPI PHY
+: ulpi@  ( reg -- n )
+   ?ulpi-wakeup                        ( reg )
+   d# 16 lshift h# 4000.0000 or view!  ( )  \ address and RUN bit
+   h# 4000.0000 ulpi-poll              ( )
+   view@ 8 rshift  h# ff and           ( n )
+;
+\ Write a register in the ULPI PHY
+: ulpi!  ( n reg -- )
+   ?ulpi-wakeup                             ( n reg )
+   d# 16 lshift or  h# 4000.0000 or  view!  ( )  \ address and WRITE bit and RUN bit
+   h# 4000.0000 ulpi-poll                   ( )
+;
+
+\ LICENSE_BEGIN
+\ Copyright (c) 2011 FirmWorks
+\ 
+\ Permission is hereby granted, free of charge, to any person obtaining
+\ a copy of this software and associated documentation files (the
+\ "Software"), to deal in the Software without restriction, including
+\ without limitation the rights to use, copy, modify, merge, publish,
+\ distribute, sublicense, and/or sell copies of the Software, and to
+\ permit persons to whom the Software is furnished to do so, subject to
+\ the following conditions:
+\ 
+\ The above copyright notice and this permission notice shall be
+\ included in all copies or substantial portions of the Software.
+\ 
+\ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+\ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+\ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+\ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+\ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+\ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+\ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+\
+\ LICENSE_END



More information about the openfirmware mailing list