summaryrefslogtreecommitdiffstats
path: root/meta-facebook/meta-wedge/recipes-wedge/fbutils/files
diff options
context:
space:
mode:
Diffstat (limited to 'meta-facebook/meta-wedge/recipes-wedge/fbutils/files')
-rw-r--r--meta-facebook/meta-wedge/recipes-wedge/fbutils/files/COPYING340
-rw-r--r--meta-facebook/meta-wedge/recipes-wedge/fbutils/files/at93cx6.py318
-rwxr-xr-xmeta-facebook/meta-wedge/recipes-wedge/fbutils/files/at93cx6_util.py223
-rw-r--r--meta-facebook/meta-wedge/recipes-wedge/fbutils/files/bcm5396.py467
-rw-r--r--meta-facebook/meta-wedge/recipes-wedge/fbutils/files/bcm5396_util.py266
-rw-r--r--meta-facebook/meta-wedge/recipes-wedge/fbutils/files/board-utils.sh163
-rw-r--r--meta-facebook/meta-wedge/recipes-wedge/fbutils/files/create_vlan_intf37
-rw-r--r--meta-facebook/meta-wedge/recipes-wedge/fbutils/files/eth0_mac_fixup.sh55
-rwxr-xr-xmeta-facebook/meta-wedge/recipes-wedge/fbutils/files/mdio.py124
-rwxr-xr-xmeta-facebook/meta-wedge/recipes-wedge/fbutils/files/mount_data0.sh61
-rw-r--r--meta-facebook/meta-wedge/recipes-wedge/fbutils/files/post_led.sh105
-rw-r--r--meta-facebook/meta-wedge/recipes-wedge/fbutils/files/power-on.sh72
-rwxr-xr-xmeta-facebook/meta-wedge/recipes-wedge/fbutils/files/power_led.sh49
-rw-r--r--meta-facebook/meta-wedge/recipes-wedge/fbutils/files/rc.early25
-rw-r--r--meta-facebook/meta-wedge/recipes-wedge/fbutils/files/rc.local26
-rw-r--r--meta-facebook/meta-wedge/recipes-wedge/fbutils/files/reset_usb.sh36
-rwxr-xr-xmeta-facebook/meta-wedge/recipes-wedge/fbutils/files/setup-gpio.sh457
-rwxr-xr-xmeta-facebook/meta-wedge/recipes-wedge/fbutils/files/setup_rov.sh106
-rw-r--r--meta-facebook/meta-wedge/recipes-wedge/fbutils/files/setup_switch.py49
-rwxr-xr-xmeta-facebook/meta-wedge/recipes-wedge/fbutils/files/sol.sh44
-rw-r--r--meta-facebook/meta-wedge/recipes-wedge/fbutils/files/src/include/i2c-dev.h362
-rw-r--r--meta-facebook/meta-wedge/recipes-wedge/fbutils/files/start_us_monitor.sh73
-rwxr-xr-xmeta-facebook/meta-wedge/recipes-wedge/fbutils/files/us_console.sh47
-rw-r--r--meta-facebook/meta-wedge/recipes-wedge/fbutils/files/us_monitor.sh56
-rw-r--r--meta-facebook/meta-wedge/recipes-wedge/fbutils/files/wedge_power.sh190
-rw-r--r--meta-facebook/meta-wedge/recipes-wedge/fbutils/files/wedge_us_mac.sh29
26 files changed, 0 insertions, 3780 deletions
diff --git a/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/COPYING b/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/COPYING
deleted file mode 100644
index 3912109..0000000
--- a/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/COPYING
+++ /dev/null
@@ -1,340 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License. The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language. (Hereinafter, translation is included without limitation in
-the term "modification".) Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b) You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- c) If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
- a) Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
-
- b) Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
-
- c) Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable. However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
- 9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
- NO WARRANTY
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
- Gnomovision version 69, Copyright (C) year name of author
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
- <signature of Ty Coon>, 1 April 1989
- Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs. If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Library General
-Public License instead of this License.
diff --git a/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/at93cx6.py b/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/at93cx6.py
deleted file mode 100644
index 514a06b..0000000
--- a/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/at93cx6.py
+++ /dev/null
@@ -1,318 +0,0 @@
-# Copyright 2004-present Facebook. All rights reserved.
-#
-# This program file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# This program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program in a file named COPYING; if not, write to the
-# Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor,
-# Boston, MA 02110-1301 USA
-#
-
-import subprocess
-import struct
-import sys
-
-
-AT93C46 = 'at93c46'
-AT93C56 = 'at93c56'
-AT93C66 = 'at93c66'
-AT93C86 = 'at93c86'
-
-
-class VerboseLogger:
- def __init__(self, verbose=False):
- self.verbose = verbose
-
- def _verbose_print(self, caption, bytestream=None):
- '''
- Print a bytestream to stdout if verbose is enabled.
- '''
- if self.verbose:
- if bytestream is not None:
- sys.stderr.write(
- "{}: {}\n" .format(
- caption, " ".join(['{:02X}'.format(ord(x))
- for x in bytestream])))
- else:
- sys.stderr.write("{}\n".format(caption))
-
-
-class AT93CX6SPI(VerboseLogger):
- '''The class to access AT93CX6 through SPI intf'''
- SPI_CMD = 'spi-bb'
-
- def __init__(self, bus_width, gpio_cs, gpio_ck, gpio_do, gpio_di,
- model, verbose=False):
- addr_bits_map = {
- AT93C46 : 6,
- AT93C56 : 8,
- AT93C66 : 8,
- AT93C86 : 10,
- }
- if bus_width != 8 and bus_width != 16:
- raise Exception("Invalid bus width for AT93CX6!")
- if model not in addr_bits_map:
- raise Exception("Invalid model '%s'" % model)
-
- self.bus_width = bus_width
- self.gpio_cs = gpio_cs
- self.gpio_ck = gpio_ck
- self.gpio_do = gpio_do
- self.gpio_di = gpio_di
- self.verbose = verbose
-
- self.addr_bits = addr_bits_map[model] \
- + (0 if self.bus_width == 16 else 1)
- self.addr_mask = (1 << self.addr_bits) - 1
-
- def __shift(self, bytestream, value):
- '''
- Shift an entire byte stream by value bits.
- '''
- binary = "".join(['{:08b}'.format(ord(x)) for x in bytestream])
- if value > 0:
- binary = binary[value:] + '0' * value
- else:
- binary = '0' * (-value) + binary[:value]
- return "".join([chr(int(binary[x:x+8],2))
- for x in range(0, len(binary), 8)])
-
- def __io(self, op, addr, data=None):
- '''
- Perform an IO operation against the EEPROM
- '''
- write_bits = self.addr_bits + 3
- if data is not None:
- # If giving data, we are doing a write command so
- # no need to read any data.
- write_bits = write_bits + self.bus_width
- read_bits = 0
- else:
- # If not giving data, we are doing either a read
- # command or a set command, so read the result.
- # We pad with an extra bit due to a dummy bit introduced
- # by a delay for address decoding on chip.
- read_bits = self.addr_bits + 4 + self.bus_width
-
- # Format the command itself
- instruction = addr & self.addr_mask
- instruction = instruction | ((0x4 | (op & 0x3)) << self.addr_bits)
- if data is not None:
- if self.bus_width == 16:
- write_data = struct.pack(">HH", instruction, data & 0xFFFF)
- else:
- write_data = struct.pack(">HB", instruction, data & 0xFF)
- else:
- write_data = struct.pack(">H", instruction)
- write_data = self.__shift(write_data, 16 - (self.addr_bits + 3))
-
- self._verbose_print("Write data", write_data)
-
- # Run the command with the bitbang driver
- if read_bits > 0:
- data_portion = "-r {} -w {}".format(read_bits, write_bits)
- else:
- data_portion = "-w {}".format(write_bits)
-
- cmd = "{} -s {} -c {} -o {} -i {} -b {}".format(
- self.SPI_CMD, self.gpio_cs, self.gpio_ck, self.gpio_do,
- self.gpio_di, data_portion
- )
-
- self._verbose_print("Command: {}".format(cmd))
-
- out = subprocess.Popen(cmd.split(),
- stdout=subprocess.PIPE,
- stdin = subprocess.PIPE)\
- .communicate(input=write_data)
-
- # Format the response
- read_data = self.__shift(out[0], self.addr_bits + 4)
- if self.bus_width == 16:
- read_data = read_data[:2]
- self._verbose_print("Read data", read_data)
- return struct.unpack(">H", read_data)[0]
- else:
- read_data = read_data[:1]
- self._verbose_print("Read data", read_data)
- return struct.unpack(">B", read_data)[0]
-
- def read(self, addr):
- return self.__io(0x2, addr)
-
- def ewen(self):
- self.__io(0x0, 0x3 << (self.addr_bits - 2))
-
- def erase(self, addr):
- self.__io(0x3, addr)
-
- def write(self, addr, data):
- self.__io(0x1, addr, data)
-
- def eral(self):
- self.__io(0x0, 0x2 << (self.addr_bits - 2))
-
- def wral(self, data):
- self.__io(0x0, 0x1 << (self.addr_bits - 2), data)
-
- def ewds(self):
- self.__io(0x0, 0x0)
-
-
-class AT93CX6(VerboseLogger):
- '''
- The class which handles accessing memory on the AT93CX6 chip.
- '''
-
- def __init__(self, bus_width, gpio_cs, gpio_ck, gpio_do, gpio_di,
- byte_swap, model=AT93C46, verbose=False):
- mem_size_map = {
- # in bytes
- AT93C46 : 128,
- AT93C56 : 256,
- AT93C66 : 512,
- AT93C86 : 2048,
- }
- self.bus_width = bus_width
- self.verbose = verbose
- self.byte_swap = byte_swap
- self.model = model
- self.memory_size = mem_size_map[model]
-
- self.spi = AT93CX6SPI(bus_width=bus_width, gpio_cs=gpio_cs,
- gpio_ck=gpio_ck, gpio_do=gpio_do,
- gpio_di=gpio_di, model=model,
- verbose=verbose)
-
- def __swap(self, value):
- '''
- Swap bytes for a 16-bit integer if instructed to do so.
- '''
- if self.bus_width == 16:
- if self.byte_swap:
- return ((value >> 8) & 0xFF) | ((value << 8) & 0xFF00)
- else:
- return value
- else:
- return value
-
- def get_memory_size(self):
- return self.memory_size
-
- def erase(self, offset=None, limit=None):
- '''
- Erase the chip.
- '''
- if offset is None:
- offset = 0
- if limit is None:
- limit = self.memory_size
-
- if offset < 0 or offset + limit > self.memory_size:
- raise Exception("Erase would be out of bounds!")
- if self.bus_width == 16 and \
- ((offset & 1) != 0 or ((offset + limit) & 1) != 0):
- raise Exception("Erase can't start or end on odd boundary in "
- "16-bit mode!")
-
- if offset == 0 and limit == self.memory_size:
- # Special case when we are erasing the entire chip
- self.spi.ewen()
- self.spi.eral()
- self.spi.ewds()
-
- self._verbose_print("Erased entire chip")
- else:
- # Regular case
- if self.bus_width == 16:
- real_offset = offset / 2
- real_limit = limit / 2
- else:
- real_offset = offset
- real_limit = limit
-
- self.spi.ewen()
- for addr in range(real_offset, real_offset + real_limit):
- self.spi.erase(addr)
- self.spi.ewds()
-
- self._verbose_print("Erased {} bytes from offset {}"
- .format(limit, offset))
-
- def read(self, offset=None, limit=None):
- '''
- Read the chip into a memory buffer.
- '''
- if offset is None:
- offset = 0
- if limit is None:
- limit = self.memory_size
-
- if offset < 0 or offset + limit > self.memory_size:
- raise Exception("Read would be out of bounds!")
- if self.bus_width == 16 and \
- ((offset & 1) != 0 or ((offset + limit) & 1) != 0):
- raise Exception("Read can't start or end on odd boundary in 16-bit "
- "mode!")
-
- output = ""
- if self.bus_width == 16:
- real_offset = offset / 2
- real_limit = limit / 2
- pack_instruction = "=H"
- else:
- real_offset = offset
- real_offset
- pack_instruction = "=B"
-
- for addr in range(real_offset, real_offset + real_limit):
- output = output + struct.pack(pack_instruction,
- self.__swap(self.spi.read(addr)))
-
- self._verbose_print("Read {} bytes from offset {}".format(limit, offset)
- , output)
-
- return output
-
- def write(self, data, offset=None):
- '''
- Write a memory buffer to the chip.
- '''
- if offset is None:
- offset = 0
-
- if offset < 0 or offset + len(data) > self.memory_size:
- raise Exception("Write would be out of bounds!")
- if self.bus_width == 16 and \
- ((offset & 1) != 0 or ((offset + len(data)) & 1) != 0):
- raise Exception("Write can't start or end on odd boundary in "
- "16-bit mode!")
-
- if self.bus_width == 16:
- offset_divisor = 2
- pack_instruction = "=H"
- else:
- offset_divisor = 1
- pack_instruction = "=B"
-
- self.spi.ewen()
- for addr in range(offset, offset + len(data), offset_divisor):
- actual_addr = addr / offset_divisor
- value = self.__swap(struct.unpack(
- pack_instruction, data[(addr - offset):(addr - offset)
- + offset_divisor])[0])
-
- self.spi.erase(actual_addr)
- self.spi.write(actual_addr, value)
- self.spi.ewds()
-
- self._verbose_print("Wrote {} bytes from offset {}"
- .format(len(data), offset), data)
diff --git a/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/at93cx6_util.py b/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/at93cx6_util.py
deleted file mode 100755
index 8ae7664..0000000
--- a/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/at93cx6_util.py
+++ /dev/null
@@ -1,223 +0,0 @@
-#!/usr/bin/python -S
-# Copyright 2004-present Facebook. All rights reserved.
-#
-# This program file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# This program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program in a file named COPYING; if not, write to the
-# Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor,
-# Boston, MA 02110-1301 USA
-#
-
-
-from argparse import ArgumentParser
-import at93cx6
-import sys
-
-
-def get_raw(args):
- return at93cx6.AT93CX6SPI(
- args.bus_width, args.cs, args.clk, args.mosi, args.miso,
- args.model, args.verbose)
-
-def get_chip(args):
- return at93cx6.AT93CX6(
- args.bus_width, args.cs, args.clk, args.mosi, args.miso,
- args.byte_swap if hasattr(args, 'byte_swap') else None,
- args.model, args.verbose)
-
-def model_parser(ap):
- # Default, based on currenct HW configuration
- MODEL_DEFAULT = at93cx6.AT93C46
-
- ap.add_argument('--model', default=at93cx6.AT93C46,
- choices=[at93cx6.AT93C46, at93cx6.AT93C56,
- at93cx6.AT93C66, at93cx6.AT93C86],
- help='The chip model (default: %(default)s)')
-
-def access_parser(ap):
- # Default, based on currenct HW configuration
- SPI_CS_DEFAULT = 68
- SPI_CLK_DEFAULT = 69
- SPI_MOSI_DEFAULT = 70
- SPI_MISO_DEFAULT = 71
-
- spi_group = ap.add_argument_group('SPI Access')
- spi_group.add_argument('--cs', type=int, default=SPI_CS_DEFAULT,
- help='The GPIO number for SPI CS pin '
- '(default: %(default)s)')
- spi_group.add_argument('--clk', type=int, default=SPI_CLK_DEFAULT,
- help='The GPIO number for SPI CLK pin '
- '(default: %(default)s)')
- spi_group.add_argument('--mosi', type=int, default=SPI_MOSI_DEFAULT,
- help='The GPIO number for SPI MOSI pin '
- '(default: %(default)s)')
- spi_group.add_argument('--miso', type=int, default=SPI_MISO_DEFAULT,
- help='The GPIO number for SPI MISO pin '
- '(default: %(default)s)')
-
-def bus_width_parser(ap):
- # Default, based on currenct HW configuration
- AT83C46_BUS_WIDTH = 16
-
- bus_group = ap.add_argument_group('Bus Width')
- bus_group.add_argument('--bus-width', type=int, default=AT83C46_BUS_WIDTH,
- help='The configured bus width '
- '(default: %(default)s)')
-
-def read_raw(args):
- raw = get_raw(args)
- val = raw.read(args.address)
-
- if args.int:
- print "{}".format(val)
- else:
- if args.bus_width == 16:
- print "0x{:04X}".format(val)
- else:
- print "0x{:02X}".format(val)
-
-def write_raw(args):
- if args.value[:2] == "0x":
- value = int(args.value, 16)
- else:
- value = int(args.value)
-
- raw = get_raw(args)
- raw.ewen()
- raw.erase(args.address)
- raw.write(args.address, value)
- raw.ewds()
-
-def erase_raw(args):
- raw = get_raw(args)
- raw.ewen()
- raw.erase(args.address)
- raw.ewds()
-
-def raw_subparser(subparsers):
- raw_parser = subparsers.add_parser(
- 'raw', help='Raw memory access')
- raw_sub = raw_parser.add_subparsers()
-
- read_parser = raw_sub.add_parser(
- 'read', help='Read a single memory address')
- read_parser.add_argument(
- 'address', type=int, help='The memory address')
- read_parser.add_argument('--int', action='store_true',
- help='Display output as an integer')
- read_parser.set_defaults(func=read_raw)
-
- write_parser = raw_sub.add_parser(
- 'write', help='Write a single memory address')
- write_parser.add_argument(
- 'address', type=int, help='The memory address')
- write_parser.add_argument(
- 'value', type=str, help='The value to write, either integer or hex')
- write_parser.set_defaults(func=write_raw)
-
- erase_parser = raw_sub.add_parser(
- 'erase', help='Erase a single memory address')
- erase_parser.add_argument('address', type=int, help='The memory address')
- erase_parser.set_defaults(func=erase_raw)
-
-def read_chip(args):
- chip = get_chip(args)
- data = chip.read(args.start, args.length)
-
- if args.file is None:
- sys.stdout.write(data)
- else:
- with open(args.file, "wb") as fp:
- fp.write(data)
-
-def write_chip(args):
- chip = get_chip(args)
-
- # Either way, limit reads to the size of the chip
- if args.file is None:
- data = sys.stdin.read(chip.get_memory_size())
- else:
- with open(args.file, "rb") as fp:
- data = fp.read(chip.get_memory_size())
-
- if args.length is not None:
- # Make sure length is correct
- if len(data) < args.length:
- data = data + '\x00' * (args.length - len(data))
- if len(data) > args.length:
- data = data[:args.length]
-
- chip.write(data, args.start)
-
-def erase_chip(args):
- chip = get_chip(args)
- chip.erase(args.start, args.length)
-
-def chip_subparser(subparsers):
- chip_parser = subparsers.add_parser('chip', help='Chip-level access')
- chip_sub = chip_parser.add_subparsers()
-
- read_parser = chip_sub.add_parser('read', help='Read from the chip')
- read_parser.add_argument('--start', type=int,
- help='The memory address to start at (default: 0)')
- read_parser.add_argument('--length', type=int,
- help='The number of bytes to read '
- '(default: whole chip)')
- read_parser.add_argument('--file', type=str,
- help='File to operate on (default: stdout)')
- read_parser.add_argument('--byte-swap', default=False, action='store_true',
- help='Byte swap values for 16-bit reads/writes '
- '(default: %(default)s)')
- read_parser.set_defaults(func=read_chip)
-
- write_parser = chip_sub.add_parser('write', help='Write to the chip')
- write_parser.add_argument('--start', type=int,
- help='The memory address to start at '
- '(default: 0)')
- write_parser.add_argument('--length', type=int,
- help='The number of bytes to write '
- '(default: file length)')
- write_parser.add_argument('--file', type=str,
- help='File to operate on (default: stdin)')
- write_parser.add_argument('--byte-swap', default=False, action='store_true',
- help='Byte swap values for 16-bit reads/writes '
- '(default: %(default)s)')
- write_parser.set_defaults(func=write_chip)
-
- erase_parser = chip_sub.add_parser('erase', help='Erase the chip')
- erase_parser.add_argument('--start', type=int,
- help='The memory address to start at '
- '(default: 0)')
- erase_parser.add_argument('--length', type=int,
- help='The number of bytes to erase '
- '(default: whole chip)')
- erase_parser.set_defaults(func=erase_chip)
-
-if __name__ == "__main__":
- # General arguments
- ap = ArgumentParser()
- ap.add_argument('--verbose', action='store_true',
- help='Print verbose debugging information')
-
- # Model, SPI, and bus width arguments
- model_parser(ap)
- access_parser(ap)
- bus_width_parser(ap)
-
- # Functionality
- subparsers = ap.add_subparsers()
- raw_subparser(subparsers)
- chip_subparser(subparsers)
-
- # Command runner
- args = ap.parse_args()
- args.func(args)
diff --git a/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/bcm5396.py b/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/bcm5396.py
deleted file mode 100644
index 91d9a85..0000000
--- a/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/bcm5396.py
+++ /dev/null
@@ -1,467 +0,0 @@
-#
-# Copyright 2004-present Facebook. All rights reserved.
-#
-# This program file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# This program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program in a file named COPYING; if not, write to the
-# Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor,
-# Boston, MA 02110-1301 USA
-#
-from __future__ import print_function
-
-
-import subprocess
-import time
-
-
-class Bcm5396MDIO:
- '''The class to access BCM5396 through MDIO intf'''
- MDIO_CMD = 'mdio-bb'
-
- PHYADDR = 0x1E
-
- ACCESS_CTRL_REG = 16
- IO_CTRL_REG = 17
- STATUS_REG = 18
- DATA0_REG = 24
- DATA1_REG = 25
- DATA2_REG = 26
- DATA3_REG = 27
-
- def __init__(self, mdc, mdio):
- self.mdc = mdc
- self.mdio = mdio
- self.page = -1
-
- def __io(self, op, reg, val=0):
- cmd = '%s -p -c %s -d %s %s %s %s' \
- % (self.MDIO_CMD, self.mdc, self.mdio, op, str(self.PHYADDR),
- str(reg))
- if op == 'write':
- cmd += ' %s' % val
- out = subprocess.Popen(cmd.split(), stdout=subprocess.PIPE)\
- .communicate()[0]
- if op == 'write':
- return val
- # need to parse the result for read
- rc = 0
- for line in out.split('\n'):
- if not line.startswith('Read:'):
- continue
- rc = int(line.split(':')[1], 0)
- return rc
-
- def __read_mdio(self, reg):
- return self.__io('read', reg)
-
- def __write_mdio(self, reg, val):
- return self.__io('write', reg, val)
-
- def __set_page(self, page):
- if self.page == page:
- return
- # Write MII register ACCESS_CTRL_REG:
- # set bit 0 as "1" to enable MDIO access
- # set "page number to bit 15:8
- val = 0x1 | ((page & 0xff) << 8)
- self.__write_mdio(self.ACCESS_CTRL_REG, val)
- self.page = page
-
- def __wait_for_done(self):
- # Read MII register IO_CTRL_REG:
- # Check op_code = "00"
- while (self.__read_mdio(self.IO_CTRL_REG) & 0x3):
- time.sleep(0.010) # 10ms
-
- def read(self, page, reg, n_bytes):
- self.__set_page(page)
- # Write MII register IO_CTRL_REG:
- # set "Operation Code as "00"
- # set "Register Address" to bit 15:8
- val = 0x00 | ((reg & 0xff) << 8)
- self.__write_mdio(self.IO_CTRL_REG, val)
- # Write MII register IO_CTRL_REG:
- # set "Operation Code as "10"
- # set "Register Address" to bit 15:8
- val = 0x2 | ((reg & 0xff) << 8)
- self.__write_mdio(self.IO_CTRL_REG, val)
- self.__wait_for_done()
- # Read MII register DATA0_REG for bit 15:0
- val = long(self.__read_mdio(self.DATA0_REG))
- # Read MII register DATA1_REG for bit 31:16
- val |= self.__read_mdio(self.DATA1_REG) << 16
- # Read MII register DATA2_REG for bit 47:32
- val |= self.__read_mdio(self.DATA2_REG) << 32
- # Read MII register DATA3_REG for bit 63:48
- val |= self.__read_mdio(self.DATA3_REG) << 48
- return val
-
- def write(self, page, reg, val, n_bytes):
- self.__set_page(page)
- # Write MII register DATA0_REG for bit 15:0
- self.__write_mdio(self.DATA0_REG, val & 0xFFFF)
- # Write MII register DATA1_REG for bit 31:16
- self.__write_mdio(self.DATA1_REG, (val >> 16) & 0xFFFF)
- # Write MII register DATA2_REG for bit 47:32
- self.__write_mdio(self.DATA2_REG, (val >> 32) & 0xFFFF)
- # Write MII register DATA3_REG for bit 63:48
- self.__write_mdio(self.DATA3_REG, (val >> 48) & 0xFFFF)
- # Write MII register IO_CTRL_REG:
- # set "Operation Code as "00"
- # set "Register Address" to bit 15:8
- val = 0x00 | ((reg & 0xff) << 8)
- self.__write_mdio(self.IO_CTRL_REG, val)
- # Write MII register IO_CTRL_REG:
- # set "Operation Code as "01"
- # set "Register Address" to bit 15:8
- val = 0x1 | ((reg & 0xff) << 8)
- self.__write_mdio(self.IO_CTRL_REG, val)
- self.__wait_for_done()
-
-
-class Bcm5396SPI:
- '''The class to access BCM5396 through SPI interface'''
- SPI_CMD = 'spi-bb'
-
- READ_CMD = 0x60
- WRITE_CMD = 0x61
-
- SPI_STS_DIO = 0xF0
- SPI_STS_REG = 0xFE
- SPI_STS_REG_RACK = 0x1 << 5
- SPI_STS_REG_SPIF = 0x1 << 7
- PAGE_REG = 0xFF
-
- def __init__(self, cs, clk, mosi, miso):
- self.cs = cs
- self.clk = clk
- self.mosi = mosi
- self.miso = miso
- self.page = -1
-
- def __bytes2val(self, values):
- # LSB first, MSB last
- pos = 0
- result = 0L
- for byte in values:
- if type(byte) is str:
- byte = int(byte, 16)
- if byte > 255:
- raise Exception('%s is not a byte in the list %s'\
- % (byte, values))
- result |= byte << pos
- pos += 8
- return result
-
- def __val2bytes(self, value, n):
- result = []
- for _ in range(n):
- result.append(value & 0xFF)
- value >>= 8
- if value > 0:
- raise Exception('Value, %s, is too large for %s bytes'
- % (value, n))
- return result
-
- def __io(self, bytes_to_write, to_read=0):
- # TODO: check parameters
- cmd = '%s -s %s -S low -c %s -o %s -i %s '\
- % (self.SPI_CMD, self.cs, self.clk, self.mosi, self.miso)
- if len(bytes_to_write):
- write_cmd = '-w %s %s '\
- % (len(bytes_to_write) * 8,
- ' '.join([str(byte) for byte in bytes_to_write]))
- else:
- write_cmd = ''
- if to_read:
- # spi-bb will first return the exact number of bits used for
- # writing. So, total number of bits to read should also include
- # the number of bits written.
- cmd += '-r %s ' % str((len(bytes_to_write) + to_read) * 8)
- cmd += write_cmd
- rc = 0L
- out = subprocess.Popen(cmd.split(), stdout=subprocess.PIPE)\
- .communicate()[0]
- if to_read:
- # need to parse the result
- for line in out.split('\n'):
- if not line.startswith('Read'):
- continue
- res = line.split(':')[1]
- rc = self.__bytes2val(res.split()[len(bytes_to_write):])
- break
- return rc
-
- def __set_page(self, page):
- page &= 0xff
- if self.page == page:
- return
- self.__io([self.WRITE_CMD, self.PAGE_REG, page])
- self.page = page
-
- def __read_spi_reg(self, reg):
- reg &= 0xFF
- return self.__io([self.READ_CMD, reg], 1)
-
- def __read_spi_sts(self):
- return self.__read_spi_reg(self.SPI_STS_REG)
-
- def __read_spi_dio(self):
- return self.__read_spi_reg(self.SPI_STS_DIO)
-
- def read(self, page, reg, n_bytes):
- '''Read a register value from a page.'''
- if n_bytes > 8:
- print('TODO to support reading more than 8 bytes')
- return 0
- if page > 0xff or reg > 0xff:
- print('Page and register must be <= 255')
- return 0
- try:
- self.__set_page(page)
- self.__io([self.READ_CMD, reg], 1)
- while True:
- # check sts
- sts = self.__read_spi_sts()
- if sts & self.SPI_STS_REG_RACK:
- break
- bytes = []
- for _ in range(n_bytes):
- bytes.append(self.__read_spi_dio())
- except Exception as e:
- print(e)
- return self.__bytes2val(bytes)
-
- def write(self, page, reg, val, n_bytes):
- '''Write a value as n bytes to a register on a page.'''
- if page > 0xff or reg > 0xff:
- print('Page and register must be <= 255')
- return
- bytes = self.__val2bytes(val, n_bytes)
- if len(bytes) > 8:
- print('TODO to support writing more than 8 bytes')
- return
- bytes = [self.WRITE_CMD, reg] + bytes
- try:
- self.__set_page(page)
- self.__io(bytes)
- except Exception as e:
- print(e)
-
-
-class Bcm5396:
- '''The class for BCM5396 Switch'''
-
- MDIO_ACCESS = 0
- SPI_ACCESS = 1
-
- def __init__(self, access, verbose=False, **kwargs):
- self.verbose = verbose
- if access == self.MDIO_ACCESS:
- self.access = Bcm5396MDIO(**kwargs)
- else:
- self.access = Bcm5396SPI(**kwargs)
-
- def write(self, page, reg, value, n_bytes):
- if self.verbose:
- print('WRITE {:2x} {:2x} {:2x} '.format(page, reg, n_bytes), end='')
- bytes = '{:2x}'.format(value)
- print([bytes[i:i+2] for i in range(0, len(bytes), 2)][-n_bytes:])
- return self.access.write(page, reg, value, n_bytes)
-
- def read(self, page, reg, n_bytes):
- if self.verbose:
- print('READ {:2x} {:2x} {:2x} '.format(page, reg, n_bytes), end='')
- result = self.access.read(page, reg, n_bytes)
- if self.verbose:
- bytes = '{:2x}'.format(result)
- print([bytes[i:i+2] for i in range(0, len(bytes), 2)][-n_bytes:])
- return result
-
- def __add_remove_vlan(self, add, vid, untag, fwd, spt):
- VLAN_PAGE = 0x5
- CTRL_ADDR = 0x60
- CTRL_START_DONE = (0x1 << 7)
- VID_ADDR = 0x61
- ENTRY_ADDR = 0x63
-
- fwd_map = self.__ports2portmap(fwd)
- untag_map = self.__ports2portmap(untag)
-
- # mark it as write and stop the previous action
- ctrl = 0
- self.write(VLAN_PAGE, CTRL_ADDR, ctrl, 1)
- # write entry
- if (add):
- entry = 0x1L | ((spt & 0x1F) << 1) \
- | (fwd_map << 6) | (untag_map << 23)
- else:
- entry = 0x0L
- self.write(VLAN_PAGE, ENTRY_ADDR, entry, 8)
- # write vid as the index
- self.write(VLAN_PAGE, VID_ADDR, vid & 0xFFF, 2)
- # start the write
- ctrl = CTRL_START_DONE
- self.write(VLAN_PAGE, CTRL_ADDR, ctrl, 1)
- while True:
- ctrl = self.read(VLAN_PAGE, CTRL_ADDR, 1)
- if not (ctrl & CTRL_START_DONE):
- # done
- break
- time.sleep(0.010) # 10ms
-
- def add_vlan(self, vid, untag, fwd, spt=0):
- return self.__add_remove_vlan(True, vid, untag, fwd, spt)
-
- def remove_vlan(self, vid):
- return self.__add_remove_vlan(False, vid, [], [], 0)
-
- def get_vlan(self, vid):
- VLAN_PAGE = 0x5
- CTRL_ADDR = 0x60
- CTRL_START_DONE = (0x1 << 7)
- CTRL_READ = 0x1
- VID_ADDR = 0x61
- ENTRY_ADDR = 0x63
-
- # mark it as read and stop the previous action
- ctrl = CTRL_READ
- self.write(VLAN_PAGE, CTRL_ADDR, ctrl, 1)
- # write the vid as the index
- self.write(VLAN_PAGE, VID_ADDR, vid & 0xFFF, 2)
- # start the read
- ctrl = CTRL_READ|CTRL_START_DONE
- self.write(VLAN_PAGE, CTRL_ADDR, ctrl, 1)
- while True:
- ctrl = self.read(VLAN_PAGE, CTRL_ADDR, 1)
- if not (ctrl & CTRL_START_DONE):
- # done
- break
- time.sleep(0.010) # 10ms
- entry = self.read(VLAN_PAGE, ENTRY_ADDR, 8)
- res = {}
- res['valid'] = True if entry & 0x1 else False
- res['spt'] = (entry >> 1) & 0x1f
- res['fwd'] = self.__portmap2ports((entry >> 6) & 0x1ffff)
- res['untag'] = self.__portmap2ports((entry >> 23) & 0x1ffff)
- return res
-
- def __portmap2ports(self, port_map):
- return list(set([port if port_map & (0x1 << port) else None
- for port in range (0, 17)])
- - set([None]))
-
- def __ports2portmap(self, ports):
- port_map = 0
- for port in ports:
- port_map |= (0x1 << port)
- return port_map & 0x1FFFF
-
- def __parse_arl_result(self, vid, result):
- is_bitset = lambda bit: True if result & (0x1 << bit) else False
- if not is_bitset(3):
- return None
- res = {}
- # parse vid first
- res['vid'] = (vid >> 48) & 0xfff
- mac_val = vid & 0xffffffffffffL
- mac_list = []
- for pos in range(5, -1, -1):
- mac_list.append('{:02x}'.format((mac_val >> (pos * 8)) & 0xff))
- res['mac'] = ':'.join(mac_list)
- if mac_val & (0x1 << 40):
- res['ports'] = self.__portmap2ports((result >> 6) & 0xffff)
- else:
- res['ports'] = [(result >> 6) & 0xf]
- res['static'] = is_bitset(5)
- res['age'] = is_bitset(4)
- res['valid'] = is_bitset(3)
- res['priority'] = result & 0x7
- return res
-
- def get_all_arls(self):
- ARL_PAGE = 0x5
- SEARCH_CTRL_ADDR = 0x30
- SEARCH_CTRL_START_DONE = (0x1 << 7)
- SEARCH_CTRL_SR_VALID = (0x1)
-
- VID0_ADDR = 0x33
- RESULT0_ADDR = 0x3B
- VID1_ADDR = 0x40
- RESULT1_ADDR = 0x48
-
- all = []
- # write START to search control
- ctrl = SEARCH_CTRL_START_DONE
- self.write(ARL_PAGE, SEARCH_CTRL_ADDR, ctrl, 1)
- while True:
- ctrl = self.read(ARL_PAGE, SEARCH_CTRL_ADDR, 1)
- if not (ctrl & SEARCH_CTRL_START_DONE):
- # Done
- break
- if not (ctrl & SEARCH_CTRL_SR_VALID):
- # result is not ready, sleep and retry
- time.sleep(0.010) # 10ms
- continue
- for vid_addr, result_addr in [[VID1_ADDR, RESULT1_ADDR],
- [VID0_ADDR, RESULT0_ADDR]]:
- vid = self.read(ARL_PAGE, vid_addr, 8)
- result = self.read(ARL_PAGE, result_addr, 4)
- one = self.__parse_arl_result(vid, result)
- if one:
- all.append(one)
- return all
-
- def vlan_ctrl(self, enable):
- VLAN_CTRL_PAGE = 0x34
- VLAN_CTRL0_REG = 0x0
- VLAN_CTRL0_B_EN_1QVLAN = 0x1 << 7
-
- ctrl = self.read(VLAN_CTRL_PAGE, VLAN_CTRL0_REG, 1)
- need_write = False
- if enable:
- if not ctrl & VLAN_CTRL0_B_EN_1QVLAN:
- need_write = True;
- ctrl |= VLAN_CTRL0_B_EN_1QVLAN
- else:
- if ctrl & VLAN_CTRL0_B_EN_1QVLAN:
- need_write = True;
- ctrl &= (~VLAN_CTRL0_B_EN_1QVLAN) & 0xFF
- if need_write:
- self.write(VLAN_CTRL_PAGE, VLAN_CTRL0_REG, ctrl, 1)
-
- def vlan_set_port_default(self, port, vid, pri=0):
- VLAN_PORT_PAGE = 0x34
- VLAN_PORT_REG_BASE = 0x10
-
- if port < 0 or port > 16:
- raise Exception('Invalid port number %s' % port)
- if pri < 0 or pri > 7:
- raise Exception('Invalid priority %s' % pri)
- if vid < 0 or vid > 0xFFF:
- raise Exception('Invalid VLAN %s' % vid)
- reg = VLAN_PORT_REG_BASE + port * 2
- ctrl = (pri << 13) | vid
- self.write(VLAN_PORT_PAGE, reg, ctrl, 2)
-
- def vlan_get_port_default(self, port):
- VLAN_PORT_PAGE = 0x34
- VLAN_PORT_REG_BASE = 0x10
-
- if port < 0 or port > 16:
- raise Exception('Invalid port number %s' % port)
- reg = VLAN_PORT_REG_BASE + port * 2
- val = self.read(VLAN_PORT_PAGE, reg, 2)
- res = {}
- res['priority'] = (val >> 13) & 0x7
- res['vid'] = val & 0xFFF
- return res
diff --git a/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/bcm5396_util.py b/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/bcm5396_util.py
deleted file mode 100644
index 0759b08..0000000
--- a/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/bcm5396_util.py
+++ /dev/null
@@ -1,266 +0,0 @@
-#!/usr/bin/python -tt
-# Copyright 2004-present Facebook. All rights reserved.
-#
-# This program file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# This program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program in a file named COPYING; if not, write to the
-# Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor,
-# Boston, MA 02110-1301 USA
-#
-
-from argparse import ArgumentParser
-from bcm5396 import Bcm5396
-
-def auto_long(x):
- return long(x, 0)
-
-def auto_int(x):
- return int(x, 0)
-
-def get_bcm(args):
- if args.spi:
- return Bcm5396(Bcm5396.SPI_ACCESS, cs=args.cs, clk=args.clk,
- mosi=args.mosi, miso=args.miso,
- verbose=args.verbose)
- else:
- return Bcm5396(Bcm5396.MDIO_ACCESS, mdc=args.mdc, mdio=args.mdio,
- verbose=args.verbose)
-
-
-def read_register(args):
- bcm = get_bcm(args)
- val = bcm.read(args.page, args.register, args.size)
- print('Read from BCM5396 ({}:{}.{}): {}'
- .format(hex(args.page), hex(args.register), args.size, hex(val)))
-
-def write_register(args):
- bcm = get_bcm(args)
- val = bcm.write(args.page, args.register, args.value, args.size)
- print('Write to BCM5396 ({}.{}): {}'
- .format(hex(args.page), hex(args.register), hex(args.value)))
-
-def register_parser(subparser):
- reg_parser = subparser.add_parser('register', help='Register IO')
- reg_sub = reg_parser.add_subparsers()
-
- read_parser = reg_sub.add_parser('read', help='read switch register')
- read_parser.set_defaults(func=read_register)
- read_parser.add_argument('page', type=auto_int,
- help='The page of the register')
- read_parser.add_argument('register', type=auto_int,
- help='The register to read from')
- read_parser.add_argument('size', type=auto_int,
- help='Number of bytes',
- choices=range(1, 9))
-
- write_parser = reg_sub.add_parser('write', help='write switch register')
- write_parser.set_defaults(func=write_register)
- write_parser.add_argument('page', type=auto_int,
- help='The page oof the register')
- write_parser.add_argument('register', type=auto_int,
- help='The register to write to')
- write_parser.add_argument('value', type=auto_long,
- help='The value to write')
- write_parser.add_argument('size', type=auto_int,
- help='Number of bytes',
- choices=range(1, 9))
-
-
-def dump_arl(args):
- bcm = get_bcm(args)
- arls = bcm.get_all_arls()
- print('All ARLs are:')
- for entry in arls:
- print(entry)
-
-def arl_parser(subparser):
- dump_parser = subparser.add_parser('arl', help='dump all ARL entries')
- dump_parser.set_defaults(func=dump_arl)
-
-
-def __parse_port_list(parm):
- '''Parse the port numbers to a list'''
- if len(parm) == 0:
- return []
- ports=[]
- for port in parm.split(','):
- idx = port.find('-')
- if idx == -1:
- p = int(port)
- if p < 0 or p > 15:
- raise Exception('Invalid port number %s' % p)
- # just one port
- ports.append(p)
- else:
- start = int(port[:idx])
- end = int(port[idx+1:])
- if start > end or start < 0 or end > 15:
- raise Exception('Invalid port range %s-%s' % (start, end))
- ports.extend(range(start, end + 1))
- return ports
-
-def enable_vlan(args):
- bcm = get_bcm(args)
- bcm.vlan_ctrl(True)
- print('VLAN function is enabled.')
-
-def disable_vlan(args):
- bcm = get_bcm(args)
- bcm.vlan_ctrl(False)
- print('VLAN function is disabled.')
-
-def add_vlan(args):
- bcm = get_bcm(args)
- vid = args.vid
- fwd = sorted(__parse_port_list(args.fwd))
- untag = sorted(__parse_port_list(args.untag))
- spt = args.spt
- # make sure untag is subset of fwd
- if not set(untag).issubset(set(fwd)):
- raise Exception('Some untagged ports, %s, are not part of forward ports'
- % (set(untag) - set(fwd)))
- bcm.add_vlan(vid, untag, fwd, spt)
- print('Added VLAN: %s' % vid)
- print('Ports in VLAN: %s' % sorted(fwd))
- print('Ports without VLAN tag: %s' % sorted(untag))
-
-def remove_vlan(args):
- bcm = get_bcm(args)
- vid = args.vid
- bcm.remove_vlan(vid)
- print('Removed VLAN: %s' % vid)
-
-def show_vlan(args):
- bcm = get_bcm(args)
- vid = args.vid
- vlan = bcm.get_vlan(vid)
- if not vlan['valid']:
- print('VLAN %s does not exist' % vid)
- else:
- print('VLAN: %s' % vid)
- print('Spanning tree index: %s' % vlan['spt'])
- print('Ports in VLAN: %s' % sorted(vlan['fwd']))
- print('Untagged ports in VLAN: %s' % sorted(vlan['untag']))
-
-def set_port_vlan(args):
- bcm = get_bcm(args)
- bcm.vlan_set_port_default(args.port, args.vid, args.pri)
- print('Set VLAN default for port: %s' % args.port)
- print('Default VLAN: %s' % args.vid)
- print('Default priority %s' % args.pri)
-
-def get_port_vlan(args):
- bcm = get_bcm(args)
- port = bcm.vlan_get_port_default(args.port)
- print('Get VLAN default for port: %s' % args.port)
- print('Default VLAN: %s' % port['vid'])
- print('Default priority: %s' % port['priority'])
-
-def vlan_parser(subparser):
- UNTAG_DEFAULT = ''
- SPT_DEFAULT = 0
- PRI_DEFAULT = 0
-
- vlan_parser = subparser.add_parser('vlan', help='Manage vlan function')
- vlan_sub = vlan_parser.add_subparsers()
-
- add_parser = vlan_sub.add_parser('add', help='Add or modify a VLAN entry')
- add_parser.add_argument('vid', type=int, help='The VLAN ID')
- add_parser.add_argument('fwd', type=str,
- help='Ports belonging to this VLAN. i.e. 1,4,5-8')
- add_parser.add_argument('untag', type=str, default=UNTAG_DEFAULT, nargs='?',
- help='Ports that do not add VLAN tag. i.e. 1,4,5-8'
- ' (default: all ports are tagged)')
- add_parser.add_argument('spt', type=int, default=SPT_DEFAULT, nargs='?',
- help='Spanning tree index (default: %s)'
- % SPT_DEFAULT)
- add_parser.set_defaults(func=add_vlan)
-
- remove_parser = vlan_sub.add_parser('remove', help='Remove a VLAN entry')
- remove_parser.add_argument('vid', type=int, help='The VLAN ID')
- remove_parser.set_defaults(func=remove_vlan)
-
- show_parser = vlan_sub.add_parser('show', help='Show a VLAN entry')
- show_parser.add_argument('vid', type=int, help='The VLAN ID')
- show_parser.set_defaults(func=show_vlan)
-
- enable_parser = vlan_sub.add_parser('enable', help='Enable VLAN function')
- enable_parser.set_defaults(func=enable_vlan)
-
- disable_parser = vlan_sub.add_parser('disable', help='Enable VLAN function')
- disable_parser.set_defaults(func=disable_vlan)
-
- port_parser = vlan_sub.add_parser('port',
- help='Set/Get VLAN default for a port')
- port_sub = port_parser.add_subparsers()
- set_port = port_sub.add_parser('set', help='Set VLAN default for a port')
- set_port.add_argument('port', type=int, help='The port number (0..16)')
- set_port.add_argument('vid', type=int,
- help='The default VLAN for this port')
- set_port.add_argument('pri', type=int, default=PRI_DEFAULT, nargs='?',
- help='The default priority for this port '
- '(default: %s)' % PRI_DEFAULT)
- set_port.set_defaults(func=set_port_vlan)
-
- get_port = port_sub.add_parser('get', help='Get VLAN default for a port')
- get_port.add_argument('port', type=int, help='The port number (0..16)')
- get_port.set_defaults(func=get_port_vlan)
-
-def access_parser(ap):
- SPI_CS_DEFAULT = 68
- SPI_CLK_DEFAULT = 69
- SPI_MOSI_DEFAULT = 70
- SPI_MISO_DEFAULT = 71
-
- MDIO_MDC_DEFAULT = 6
- MDIO_MDIO_DEFAULT = 7
-
- spi_group = ap.add_argument_group('SPI Access')
- spi_group.add_argument('--spi', action='store_true',
- help='Access through SPI.')
- spi_group.add_argument('--cs', type=int, default=SPI_CS_DEFAULT,
- help='The GPIO number for SPI CS pin (default: %s)'
- % SPI_CS_DEFAULT)
- spi_group.add_argument('--clk', type=int, default=SPI_CLK_DEFAULT,
- help='The GPIO number for SPI CLK pin (default: %s)'
- % SPI_CLK_DEFAULT)
- spi_group.add_argument('--mosi', type=int, default=SPI_MOSI_DEFAULT,
- help='The GPIO number for SPI MOSI pin (default: %s)'
- % SPI_MOSI_DEFAULT)
- spi_group.add_argument('--miso', type=int, default=SPI_MISO_DEFAULT,
- help='The GPIO number for SPI MISO pin (default: %s)'
- % SPI_MISO_DEFAULT)
- mdio_group = ap.add_argument_group('MDIO Access (default)')
- mdio_group.add_argument('--mdc', type=int, default=MDIO_MDC_DEFAULT,
- help='The GPIO number for MDC pin (default: %s)'
- % MDIO_MDC_DEFAULT)
- mdio_group.add_argument('--mdio', type=int, default=MDIO_MDIO_DEFAULT,
- help='The GPIO number for MDIO pin (default: %s)'
- % MDIO_MDIO_DEFAULT)
- return ap
-
-
-if __name__ == '__main__':
- ap = ArgumentParser()
- ap.add_argument('-v', '--verbose', action='store_true',
- help='Dump the switch page, register, and value '
- 'for each operation')
-
- access_parser(ap)
-
- subparsers = ap.add_subparsers()
- register_parser(subparsers)
- arl_parser(subparsers)
- vlan_parser(subparsers)
- args = ap.parse_args()
-
- args.func(args)
diff --git a/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/board-utils.sh b/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/board-utils.sh
deleted file mode 100644
index e4d34aa..0000000
--- a/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/board-utils.sh
+++ /dev/null
@@ -1,163 +0,0 @@
-# Copyright 2014-present Facebook. All Rights Reserved.
-wedge_iso_buf_enable() {
- # GPIOC2 (18) to low, SCU90[0] and SCU90[24] must be 0
- devmem_clear_bit $(scu_addr 90) 0
- devmem_clear_bit $(scu_addr 90) 24
- gpio_set 18 0
-}
-
-wedge_iso_buf_disable() {
- # GPIOC2 (18) to low, SCU90[0] and SCU90[24] must be 0
- devmem_clear_bit $(scu_addr 90) 0
- devmem_clear_bit $(scu_addr 90) 24
- gpio_set 18 1
-}
-
-wedge_is_us_on() {
- local val n retries prog
- if [ $# -gt 0 ]; then
- retries="$1"
- else
- retries=1
- fi
- if [ $# -gt 1 ]; then
- prog="$2"
- else
- prog=""
- fi
- if [ $# -gt 2 ]; then
- default=$3 # value 0 means defaul is 'ON'
- else
- default=1
- fi
- n=1
- while true; do
- val=$(cat /sys/class/i2c-adapter/i2c-4/4-0040/gpio_inputs 2>/dev/null)
- if [ -n "$val" ]; then
- break
- fi
- n=$((n+1))
- if [ $n -gt $retries ]; then
- echo -n " failed to read GPIO. "
- return $default
- break
- fi
- echo -n "$prog"
- sleep 1
- done
- if [ "$((val & (0x1 << 14)))" != "0" ]; then
- # powered on already
- return 0
- else
- return 1
- fi
-}
-
-
-# Return the board type, 'LC', 'FC-LEFT', 'FC-RIGHT', or, 'WEDGE'
-wedge_board_type() {
- local pn
- pn=$(/usr/bin/weutil 2> /dev/null | grep -i '^Location on Fabric:')
- case "$pn" in
- *LEFT*)
- echo 'FC-LEFT'
- ;;
- *RIGHT*)
- echo 'FC-RIGHT'
- ;;
- *LC*)
- echo 'LC'
- ;;
- *)
- echo 'WEDGE'
- ;;
- esac
-}
-
-# On FC,
-# board rev < 2:
-# FAB_SLOT_ID (GPIOU0), low == FC0; high == FC1
-# else:
-# FAB_SLOT_ID (GPIOU6), low == FC0; high == FC1
-## On LC, Wedge,
-# board rev < 3:
-# GPIOU0(ID0), GPIOU1(ID1), GPIOU2(ID2), GPIOU3(ID3)
-# else:
-# GPIOU6(ID0), GPIOU7(ID1), GPIOV0(ID2), GPIOV1(ID3)
-#
-# ID[2:0] ID3 Slot#
-# 000 0 1
-# 000 1 2
-# 001 0 3
-# 001 1 4
-# 010 0 5
-# 010 1 6
-# 011 0 7
-# 011 1 8
-
-wedge_slot_id() {
- local type slot id3 id2 id1 id0 FC_CARD_BASE board_rev
- FC_CARD_BASE=65
- # need to check the board rev
- board_rev=$(wedge_board_rev)
- case "$1" in
- FC-LEFT|FC-RIGHT)
- # On FC
- if [ $board_rev -lt 2 ]; then
- slot=$(gpio_get U0)
- else
- slot=$(gpio_get U6)
- fi
- if [ "$1" = "FC-LEFT" ]; then
- # fabric card left
- slot=$((FC_CARD_BASE + slot * 2))
- else
- # fabric card right
- slot=$((FC_CARD_BASE + slot * 2 + 1))
- fi
- ;;
- *)
- # either edge or LC
- if [ $board_rev -lt 3 ]; then
- id0=$(gpio_get U0)
- id1=$(gpio_get U1)
- id2=$(gpio_get U2)
- id3=$(gpio_get U3)
- else
- id0=$(gpio_get U6)
- id1=$(gpio_get U7)
- id2=$(gpio_get V0)
- id3=$(gpio_get V1)
- fi
- slot=$(((id2 * 4 + id1 * 2 + id0) * 2 + id3 + 1))
- esac
- echo "$slot"
-}
-
-# wedge_board_rev() is only valid after GPIO Y0, Y1, and Y2 are enabled
-wedge_board_rev() {
- local val0 val1 val2
- val0=$(cat /sys/class/gpio/gpio192/value 2>/dev/null)
- val1=$(cat /sys/class/gpio/gpio193/value 2>/dev/null)
- val2=$(cat /sys/class/gpio/gpio194/value 2>/dev/null)
- echo $((val0 | (val1 << 1) | (val2 << 2)))
-}
-
-# Should we enable OOB interface or not
-wedge_should_enable_oob() {
- board_rev=$(wedge_board_rev)
- board_type=$(wedge_board_type)
- case "$board_type" in
- FC-LEFT|FC-RIGHT)
- if [ $board_rev -lt 2 ]; then
- return 0
- fi
- ;;
- *)
- if [ $board_rev -lt 3 ]; then
- return 0
- fi
- ;;
- esac
- return -1
-}
diff --git a/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/create_vlan_intf b/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/create_vlan_intf
deleted file mode 100644
index 8c7e74b..0000000
--- a/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/create_vlan_intf
+++ /dev/null
@@ -1,37 +0,0 @@
-#!/bin/bash
-#
-# Copyright 2014-present Facebook. All Rights Reserved.
-#
-# This program file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# This program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program in a file named COPYING; if not, write to the
-# Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor,
-# Boston, MA 02110-1301 USA
-#
-
-# only care about 'eth0' and 'oob' intf
-[ "$IFACE" != "eth0" ] && [ "$IFACE" != "oob" ] && exit 0
-
-. /usr/local/bin/openbmc-utils.sh
-
-board=$(wedge_board_type)
-
-[ "$board" = "WEDGE" ] && exit 0
-
-vlan=4088
-intf="${IFACE}.${vlan}"
-slot=$(wedge_slot_id $board)
-
-vconfig add $IFACE $vlan
-ifconfig $intf up "fe80::$(printf "%x" $slot):1/64"
-
-exit 0
diff --git a/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/eth0_mac_fixup.sh b/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/eth0_mac_fixup.sh
deleted file mode 100644
index f244bd0..0000000
--- a/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/eth0_mac_fixup.sh
+++ /dev/null
@@ -1,55 +0,0 @@
-#!/bin/bash
-#
-# Copyright 2014-present Facebook. All Rights Reserved.
-#
-# This program file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# This program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program in a file named COPYING; if not, write to the
-# Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor,
-# Boston, MA 02110-1301 USA
-#
-
-### BEGIN INIT INFO
-# Provides: eth0_mac_fixup.sh
-# Required-Start:
-# Required-Stop:
-# Default-Start: S
-# Default-Stop:
-# Short-Description: Fixup the MAC address for eth0 based on wedge EEPROM
-### END INIT INFO
-
-PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
-
-# get the MAC from EEPROM
-mac=$(weutil 2>/dev/null | grep '^Local MAC' 2>/dev/null | cut -d' ' -f3 2>/dev/null)
-
-# get the MAC from u-boot environment
-ethaddr=$(fw_printenv ethaddr 2>/dev/null | cut -d'=' -f2 2>/dev/null)
-
-if [ -z "$mac" ] && [ -n "$ethaddr" ]; then
- # no MAC from EEPROM, use the one from u-boot environment
- mac="$ethaddr"
-fi
-
-if [ -n "$mac" ]; then
- ifconfig eth0 hw ether $mac
-else
- # no MAC from either EEPROM or u-boot environment
- mac=$(ifconfig eth0 2>/dev/null |grep HWaddr 2>/dev/null |awk '{ print $5 }')
-
-fi
-
-if [ "$ethaddr" != "$mac" ]; then
- # set the MAC from EEPROM or ifconfig back to u-boot environment so that u-boot
- # can use it
- fw_setenv "ethaddr" "$mac"
-fi
diff --git a/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/mdio.py b/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/mdio.py
deleted file mode 100755
index aa7d4bf..0000000
--- a/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/mdio.py
+++ /dev/null
@@ -1,124 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright 2014-present Facebook. All Rights Reserved.
-#
-# This program file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# This program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program in a file named COPYING; if not, write to the
-# Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor,
-# Boston, MA 02110-1301 USA
-#
-
-from argparse import ArgumentParser
-import subprocess
-import time
-
-IO_BASE = [ 0x1e660000, 0x1e680000 ]
-PHYCR_REG_OFFSET = 0x60
-PHYCR_READ_BIT = 0x1 << 26
-PHYCR_WRITE_BIT = 0x1 << 27
-phycr_reg = lambda mac: IO_BASE[mac - 1] + PHYCR_REG_OFFSET
-PHYDATA_REG_OFFSET = 0x64
-phydata_reg = lambda mac: IO_BASE[mac - 1] + PHYDATA_REG_OFFSET
-
-
-devmem_read_cmd = lambda reg: [ 'devmem', hex(reg) ]
-devmem_write_cmd = lambda reg, val: [ 'devmem', hex(reg), '32', hex(val)]
-
-
-def devmem_read(reg):
- cmd = devmem_read_cmd(reg)
- #print('Cmd: {}'.format(cmd))
- out = subprocess.Popen(cmd, stdout=subprocess.PIPE).communicate()[0]
- return int(out, 0)
-
-
-def devmem_write(reg, val):
- cmd = devmem_write_cmd(reg, val)
- #print('Cmd: {}'.format(cmd))
- subprocess.Popen(cmd, stdout=subprocess.PIPE).communicate()[0]
-
-
-def wait_for_mdio_done(args):
- reg = phycr_reg(args.mac)
- while devmem_read(reg) & (PHYCR_READ_BIT|PHYCR_WRITE_BIT):
- time.sleep(0.010) # 10ms
-
-
-def read_mdio(args):
- reg = phycr_reg(args.mac)
- ctrl = devmem_read(reg)
- ctrl &= 0x3000003f
- ctrl |= (args.phy & 0x1F) << 16
- ctrl |= (args.register & 0x1F) << 21
- ctrl |= PHYCR_READ_BIT
- devmem_write(reg, ctrl)
- wait_for_mdio_done(args)
- val = devmem_read(phydata_reg(args.mac)) >> 16
- print('Read from PHY ({}.{}): {}'
- .format(hex(args.phy), hex(args.register), hex(val)))
-
-
-def write_mdio(args):
- ctrl_reg = phycr_reg(args.mac)
- ctrl = devmem_read(ctrl_reg)
- ctrl &= 0x3000003f
- ctrl |= (args.phy & 0x1F) << 16
- ctrl |= (args.register & 0x1F) << 21
- ctrl |= PHYCR_WRITE_BIT
- data_reg = phydata_reg(args.mac)
- # write data first
- devmem_write(data_reg, args.value)
- # then ctrl
- devmem_write(ctrl_reg, ctrl)
- wait_for_mdio_done(args)
- print('Write to PHY ({}.{}): {}'
- .format(hex(args.phy), hex(args.register), hex(args.value)))
-
-
-def auto_int(x):
- return int(x, 0)
-
-if __name__ == '__main__':
- ap = ArgumentParser()
- ap.add_argument('--mac', '-m', type=int, default=2,
- help='The MAC')
- ap.add_argument('--phy', '-p', type=auto_int, default=0x1f,
- help='The PHY address')
-
- subparsers = ap.add_subparsers()
-
- read_parser = subparsers.add_parser('read',
- help='read MDIO')
- read_parser.set_defaults(func=read_mdio)
- read_parser.add_argument('register', type=auto_int,
- help='The register to read from')
-
- write_parser = subparsers.add_parser('write',
- help='write MDIO')
- write_parser.set_defaults(func=write_mdio)
- write_parser.add_argument('register', type=auto_int,
- help='The register to write to')
- write_parser.add_argument('value', type=auto_int,
- help='The value to write to')
-
- args = ap.parse_args()
-
- if args.mac != 2 and args.mac != 1:
- print("MAC can only be either 1 or 2.")
- exit(-1)
-
- if args.phy > 0x1f:
- printf("PHY address must be smaller than 0x1f.")
- exit(-2)
-
- args.func(args)
diff --git a/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/mount_data0.sh b/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/mount_data0.sh
deleted file mode 100755
index 6986be5..0000000
--- a/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/mount_data0.sh
+++ /dev/null
@@ -1,61 +0,0 @@
-#!/bin/sh
-#
-# Copyright 2014-present Facebook. All Rights Reserved.
-#
-# This program file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# This program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program in a file named COPYING; if not, write to the
-# Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor,
-# Boston, MA 02110-1301 USA
-#
-
-### BEGIN INIT INFO
-# Provides: mount_data0
-# Required-Start: mountvirtfs
-# Required-Stop:
-# Default-Start: S
-# Default-Stop:
-# Short-Description: Mount data0 partition from flash chip.
-# Description:
-### END INIT INFO
-
-. /etc/default/rcS
-
-# Find out which device maps to 'data0' on mtd
-# Note: /proc/mtd lists partitions using mtdX, where X is a number,
-# but we mount using /dev/mtdblockX. We'll do some magic here
-# to get the mtdX (char device) and mtdblockX (block device)
-# names.
-MOUNT_POINT="/mnt/data"
-DATA_CHAR_DEV=$(cat /proc/mtd | awk '{ if ($4 == "\"data0\"") print $1 }' |
- cut -d ':' -f 1 | awk '{ print "/dev/" $1 }')
-if [ -z "$DATA_CHAR_DEV" ]
-then
- echo "No data0 partition found. Not mounting anything to $MOUNT_POINT."
-else
- DEVICE_ID=$(echo $DATA_CHAR_DEV | tail -c 2)
- DATA_BLOCK_DEV=${DATA_CHAR_DEV/mtd/mtdblock}
-
- echo "data0 partition found on $DATA_BLOCK_DEV; mounting to $MOUNT_POINT."
- mount -t jffs2 $DATA_BLOCK_DEV $MOUNT_POINT
-
- # if the mount failed, format the partition and remount
- if [ $? -ne 0 ]
- then
- echo "Mount failed; formatting $DATA_BLOCK_DEV and remounting."
- flash_eraseall $DATA_CHAR_DEV
- mount -t jffs2 $DATA_BLOCK_DEV $MOUNT_POINT
- fi
-fi
-
-: exit 0
-
diff --git a/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/post_led.sh b/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/post_led.sh
deleted file mode 100644
index b653cb3..0000000
--- a/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/post_led.sh
+++ /dev/null
@@ -1,105 +0,0 @@
-#!/bin/sh
-#
-# Copyright 2004-present Facebook. All rights reserved.
-#
-# This program file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# This program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program in a file named COPYING; if not, write to the
-# Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor,
-# Boston, MA 02110-1301 USA
-#
-
-usage() {
- echo "Displays values onto the debug header LEDs."
- echo "Hex and decimal accepted."
- echo "Usage: $0 <value>"
-}
-
-. /usr/local/bin/openbmc-utils.sh
-
-# Function to set the less significant hex digit
-display_lower() {
- local bit0=$(expr $1 % 2)
- local bit1=$(expr $1 / 2 % 2)
- local bit2=$(expr $1 / 4 % 2)
- local bit3=$(expr $1 / 8 % 2)
-
- # Set the pins to the correct operating mode.
- # The relevant pins are GPIOG[0...3].
- # For GPIO bank G, SCU84[0..3] must be 0.
- devmem_clear_bit $(scu_addr 84) 0
- devmem_clear_bit $(scu_addr 84) 1
- devmem_clear_bit $(scu_addr 84) 2
- devmem_clear_bit $(scu_addr 84) 3
-
- # Now set the GPIOs to the right binary values
- gpio_set 48 $bit0
- gpio_set 49 $bit1
- gpio_set 50 $bit2
- gpio_set 51 $bit3
-}
-
-# Function to set the more significant hex digit
-display_upper() {
- local bit0=$(expr $1 % 2)
- local bit1=$(expr $1 / 2 % 2)
- local bit2=$(expr $1 / 4 % 2)
- local bit3=$(expr $1 / 8 % 2)
-
- # Set the pins to the correct operating mode.
- # The relevant pins are GPIOB[4...7].
- # GPIOB4: SCU80[12] = 0 and Strap[14] = 0
- # GPIOB5: SCU80[13] = 0
- # GPIOB6: SCU80[14] = 0
- # GPIOB7: SCU80[15] = 0
- devmem_clear_bit $(scu_addr 70) 14
- devmem_clear_bit $(scu_addr 80) 12
- devmem_clear_bit $(scu_addr 80) 13
- devmem_clear_bit $(scu_addr 80) 14
- devmem_clear_bit $(scu_addr 80) 15
-
- gpio_set 12 $bit0
- gpio_set 13 $bit1
- gpio_set 14 $bit2
- gpio_set 15 $bit3
-}
-
-# Check number of parameters
-if [ $# -ne 1 ]
-then
- usage
- exit 1
-fi
-
-# Make sure input is actually numeric
-DEC_VALUE=$(printf "%d" $1 2>/dev/null)
-if [ $? -eq 1 ]
-then
- echo "Unable to parse input as numeric value."
- exit 1
-fi
-
-# Make sure input is within proper range
-if [ $DEC_VALUE -lt 0 ] || [ $DEC_VALUE -gt 255 ]
-then
- echo "Value $DEC_VALUE is outside of displayable range 0 - 0xff (255)."
- exit 1
-fi
-
-# Get upper/lower decimal values
-LOWER_DEC_VALUE=$(expr $DEC_VALUE % 16)
-UPPER_DEC_VALUE=$(expr $DEC_VALUE / 16)
-
-# Display the results
-display_lower $LOWER_DEC_VALUE
-display_upper $UPPER_DEC_VALUE
-
diff --git a/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/power-on.sh b/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/power-on.sh
deleted file mode 100644
index ace3c6a..0000000
--- a/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/power-on.sh
+++ /dev/null
@@ -1,72 +0,0 @@
-#!/bin/sh
-#
-# Copyright 2014-present Facebook. All Rights Reserved.
-#
-# This program file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# This program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program in a file named COPYING; if not, write to the
-# Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor,
-# Boston, MA 02110-1301 USA
-
-### BEGIN INIT INFO
-# Provides: power-on
-# Required-Start:
-# Required-Stop:
-# Default-Start: S
-# Default-Stop:
-# Short-Description: Power on micro-server
-### END INIT INFO
-. /usr/local/bin/openbmc-utils.sh
-
-PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
-
-echo -n "Checking microserver power status ... "
-if wedge_is_us_on 10 "."; then
- echo "on"
- on=1
-else
- echo "off"
- on=0
-fi
-
-if [ $on -eq 0 ]; then
- # Reset USB hub
- /usr/local/bin/reset_usb.sh
- # Set up ROV
- /usr/local/bin/setup_rov.sh
- # Configure the management switch on LEFT side of FC.
- # Must do so after setup_rov.sh, as setup_rov.sh might reset
- # T2, which also resets the switch.
- if [ "$(wedge_board_type)" = "FC-LEFT" ]; then
- echo -n "Configure management switch ... "
- if [ $(wedge_board_rev) -gt 1 ]; then
- echo "skip. Need new switch setup script!!!"
- else
- # configure MDIO as GPIO output
- gpio_set A6 1
- gpio_set A7 1
- # set the switch to be configured by CPU
- gpio_set E2 1
- # set the switch to be configured by CPU, then reset the switch,
- # which also cause T2 reset in the current board
- gpio_set E2 1
- gpio_set C0 0
- sleep 1
- gpio_set C0 1
- # configure the switch
- setup_switch.py
- echo "done"
- fi
- fi
- # Power on now
- wedge_power.sh on -f
-fi
diff --git a/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/power_led.sh b/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/power_led.sh
deleted file mode 100755
index 066646e..0000000
--- a/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/power_led.sh
+++ /dev/null
@@ -1,49 +0,0 @@
-#!/bin/bash
-#
-# Copyright 2014-present Facebook. All Rights Reserved.
-#
-# This program file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# This program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program in a file named COPYING; if not, write to the
-# Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor,
-# Boston, MA 02110-1301 USA
-#
-
-usage() {
- echo "Usage: $1 <on | off>"
- exit -1
-}
-
-. /usr/local/bin/openbmc-utils.sh
-
-PATH=/sbin:/bin:/usr/sbin:/usr/bin
-
-set -e
-
-if [ $# != 1 ]; then
- usage $0
-fi
-
-if [ $1 = "on" ]; then
- val=1
-elif [ $1 = "off" ]; then
- val=0
-else
- usage $0
-fi
-
-# To use GPIOE5 (37), SCU80[21], SCU8C[14], and SCU70[22] must be 0
-devmem_clear_bit $(scu_addr 80) 21
-devmem_clear_bit $(scu_addr 8C) 14
-devmem_clear_bit $(scu_addr 70) 22
-
-gpio_set 37 $val
diff --git a/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/rc.early b/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/rc.early
deleted file mode 100644
index 0f47c72..0000000
--- a/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/rc.early
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/sh
-#
-# Copyright 2014-present Facebook. All Rights Reserved.
-#
-# This program file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# This program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program in a file named COPYING; if not, write to the
-# Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor,
-# Boston, MA 02110-1301 USA
-#
-# This script will be executed at rcS S04 level, which is right after mount /mnt/data
-# and before almost anything else.
-
-if [ -x /mnt/data/etc/rc.early ]; then
- /mnt/data/etc/rc.early
-fi
diff --git a/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/rc.local b/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/rc.local
deleted file mode 100644
index 36fa0f1..0000000
--- a/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/rc.local
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/bin/sh
-#
-# Copyright 2014-present Facebook. All Rights Reserved.
-#
-# This program file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# This program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program in a file named COPYING; if not, write to the
-# Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor,
-# Boston, MA 02110-1301 USA
-#
-
-#
-# This script will be executed *after* all the other init scripts.
-
-if [ -x /mnt/data/etc/rc.local ]; then
- /mnt/data/etc/rc.local
-fi
diff --git a/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/reset_usb.sh b/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/reset_usb.sh
deleted file mode 100644
index c63ed10..0000000
--- a/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/reset_usb.sh
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/bin/sh
-#
-# Copyright 2014-present Facebook. All Rights Reserved.
-#
-# This program file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# This program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program in a file named COPYING; if not, write to the
-# Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor,
-# Boston, MA 02110-1301 USA
-#
-
-. /usr/local/bin/openbmc-utils.sh
-
-echo -n "Reset USB Switch ... "
-
-# To use GPIOD7 (31), SCU90[1], SCU8C[11], and SCU70[21] must be 0
-devmem_clear_bit $(scu_addr 8C) 11
-devmem_clear_bit $(scu_addr 70) 21
-devmem_clear_bit $(scu_addr 90) 1
-
-gpio_set 31 1
-sleep 1
-gpio_set 31 0
-sleep 1
-gpio_set 31 1
-
-echo "Done"
diff --git a/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/setup-gpio.sh b/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/setup-gpio.sh
deleted file mode 100755
index 717bcd8..0000000
--- a/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/setup-gpio.sh
+++ /dev/null
@@ -1,457 +0,0 @@
-#!/bin/bash
-#
-# Copyright 2014-present Facebook. All Rights Reserved.
-#
-# This program file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# This program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program in a file named COPYING; if not, write to the
-# Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor,
-# Boston, MA 02110-1301 USA
-#
-
-### BEGIN INIT INFO
-# Provides: gpio-setup
-# Required-Start:
-# Required-Stop:
-# Default-Start: S
-# Default-Stop:
-# Short-Description: Set up GPIO pins as appropriate
-### END INIT INFO
-
-# This file contains definitions for the GPIO pins that were not otherwise
-# defined in other files. We should probably move some more of the
-# definitions to this file at some point.
-
-# The commented-out sections are generally already defined elsewhere,
-# and defining them twice generates errors.
-
-# The exception to this is the definition of the GPIO H0, H1, and H2
-# pins, which seem to adversely affect the rebooting of the system.
-# When defined, the system doesn't reboot cleanly. We're still
-# investigating this.
-
-. /usr/local/bin/openbmc-utils.sh
-
-# Set up to read the board revision pins, Y0, Y1, Y2
-devmem_set_bit $(scu_addr 70) 19
-devmem_clear_bit $(scu_addr a4) 8
-devmem_clear_bit $(scu_addr a4) 9
-devmem_clear_bit $(scu_addr a4) 10
-echo 192 > /sys/class/gpio/export
-echo 193 > /sys/class/gpio/export
-echo 194 > /sys/class/gpio/export
-
-# enabled Y0, Y1, Y2, we can use wedge_board_rev() now
-board_rev=$(wedge_board_rev)
-
-# Set up ISO_SVR_ID[0-3], GPION[2-5]
-# On wedge, these 4 GPIOs are not connected. And the corresponding
-# 4 pins from uS are strapped to low.
-# On fabic, these 4 pins are connected to uS SVR_ID pins,
-# which are used to set the uS FPGA i2c address.
-# Force all pins to low to have the same uS FPGA i2c address on wedge
-# and fabric
-# To use GPION[2-5], SCU90[4:5] must be 0, and SCU88[2-5] must be 0 also
-devmem_clear_bit $(scu_addr 90) 4
-devmem_clear_bit $(scu_addr 90) 5
-devmem_clear_bit $(scu_addr 88) 2
-devmem_clear_bit $(scu_addr 88) 3
-devmem_clear_bit $(scu_addr 88) 4
-devmem_clear_bit $(scu_addr 88) 5
-gpio_set 106 0
-gpio_set 107 0
-gpio_set 108 0
-gpio_set 109 0
-
-## CARD_EN, GPIO C3
-#devmem_clear_bit $(scu_addr 90) 0
-#devmem_clear_bit $(scu_addr 90) 24
-#echo 18 > /sys/class/gpio/export
-
-# T2_RESET_N, RESET_SEQ0, RESET_SEQ1, on GPIO C0, F2, and F3
-devmem_clear_bit $(scu_addr 90) 0
-devmem_clear_bit $(scu_addr 90) 23
-devmem_clear_bit $(scu_addr 80) 26
-devmem_clear_bit $(scu_addr a4) 13
-devmem_clear_bit $(scu_addr 80) 27
-devmem_clear_bit $(scu_addr a4) 14
-devmem_set_bit $(scu_addr 70) 19
-echo 16 > /sys/class/gpio/export
-echo 42 > /sys/class/gpio/export
-echo 43 > /sys/class/gpio/export
-# output
-
-# PANTHER_PRSNT_N, uServer presence, on GPIO E4
-devmem_clear_bit $(scu_addr 80) 20
-devmem_clear_bit $(scu_addr 8c) 14
-devmem_clear_bit $(scu_addr 70) 22
-echo 36 > /sys/class/gpio/export
-
-# MRSRVR_SYS_RST, reset the uServer, on GPIO C1
-devmem_clear_bit $(scu_addr 90) 0
-devmem_clear_bit $(scu_addr 90) 23
-echo 17 > /sys/class/gpio/export
-# output
-
-# BMC_PWR_BTN_IN_N, uServer power button in, on GPIO D0
-# BMC_PWR_BTN_OUT_N, uServer power button out, on GPIO D1
-devmem_clear_bit $(scu_addr 90) 1
-devmem_clear_bit $(scu_addr 8c) 8
-devmem_clear_bit $(scu_addr 70) 21
-echo 24 > /sys/class/gpio/export
-# we have to ensure that BMC_PWR_BTN_OUT_N is high so that
-# when we enable the isolation buffer, uS will not be powered down
-gpio_set 25 1
-
-## BMC_READY_IN, BMC signal that it's up, on GPIO P7
-# To use GPIOP7 (127), SCU88[23] must be 0
-devmem_clear_bit $(scu_addr 88) 23
-# Put GPIOP7 (127) to low so that we can control uS power now
-# This must be after 'gpio_set 25 1'
-gpio_set 127 0
-
-# PANTHER_I2C_ALERT_N, alert for uServer I2C, GPIO B0
-devmem_clear_bit $(scu_addr 80) 8
-echo 8 > /sys/class/gpio/export
-
-# MNSERV_NIC_SMBUS_ALRT, alert for uServer NIC, GPIO B1
-devmem_clear_bit $(scu_addr 80) 9
-echo 9 > /sys/class/gpio/export
-
-# LED_PWR_BLUE, blue power light, GPIO E5
-devmem_clear_bit $(scu_addr 80) 21
-devmem_clear_bit $(scu_addr 8c) 14
-devmem_clear_bit $(scu_addr 70) 22
-echo 37 > /sys/class/gpio/export
-# output
-
-# BMC_HEARTBEAT_N, heartbeat LED, GPIO Q7
-devmem_clear_bit $(scu_addr 90) 28
-echo 135 > /sys/class/gpio/export
-# output
-
-# XXX: setting those causes the system to lock up on reboot
-## T2 ROV1, ROV2, ROV3 -- voltage reading, GPIOs H0, H1, and H2
-#devmem_clear_bit $(scu_addr 90) 6
-#devmem_clear_bit $(scu_addr 90) 7
-#devmem_clear_bit $(scu_addr 70) 4
-## Do I need to set 70:1 and 70:0 to 1?
-echo 56 > /sys/class/gpio/export
-echo 57 > /sys/class/gpio/export
-echo 58 > /sys/class/gpio/export
-
-# HOTSWAP_PG, hotswap issues, GPIO L3
-devmem_clear_bit $(scu_addr 90) 5
-devmem_clear_bit $(scu_addr 90) 4
-devmem_clear_bit $(scu_addr 84) 19
-echo 99 > /sys/class/gpio/export
-
-# XXX: These interfere with i2c bus 11 (on Linux, it's 12 on the hardware)
-# which we need to talk to the power supplies on certain hardware.
-## Hardware presence pins C4 and C5
-#devmem_clear_bit $(scu_addr 90) 0
-#devmem_clear_bit $(scu_addr 90) 24
-#echo 20 > /sys/class/gpio/export
-#echo 21 > /sys/class/gpio/export
-
-# FAB_GE_SEL, uServer GE connection, GPIO A0
-devmem_clear_bit $(scu_addr 80) 0
-echo 0 > /sys/class/gpio/export
-# output
-
-# USB_OCS_N1, resettable fuse tripped, GPIO Q6
-devmem_clear_bit $(scu_addr 90) 28
-echo 136 > /sys/class/gpio/export
-
-# RX loss signal?
-
-# System SPI
-# Strap 12 must be 0 and Strape 13 must be 1
-devmem_clear_bit $(scu_addr 70) 12
-devmem_set_bit $(scu_addr 70) 13
-# GPIOQ4 is ISO_FLASH_WP, must be 1 to avoid write protection
-# GPIOQ5 is ISO_FLASH_HOLD, must be 1 to be out of reset
-# To use GPIOQ4 and GPIOQ5, SCU90[27] must be 0
-devmem_clear_bit $(scu_addr 90) 27
-gpio_set Q4 1
-gpio_set Q5 1
-# GPIOD6 is ISO_FL_PRG_SEL, set it to 0 so that BMC does not have control
-# on the EEPROM by default.
-# To use GPIOD6, SCU90[1] must be 0, SCU8C[21] must be 0, and Strap[21] must be 0
-devmem_clear_bit $(scu_addr 90) 1
-devmem_clear_bit $(scu_addr 8c) 8
-devmem_clear_bit $(scu_addr 70) 21
-gpio_set 30 0
-
-# DEBUG_RST_BTN_N, Debug Reset button on front panel, GPIO R2
-devmem_clear_bit $(scu_addr 88) 26
-echo 138 > /sys/class/gpio/export
-
-# DEBUG_PORT_UART_SEL_N, Debug Select button, GPIO B2
-devmem_clear_bit $(scu_addr 80) 10
-echo 10 > /sys/class/gpio/export
-
-# DEBUG_UART_SEL_0, select uServer UART to the debug header, GPIO E0
-devmem_clear_bit $(scu_addr 80) 16
-devmem_clear_bit $(scu_addr 8c) 12
-devmem_clear_bit $(scu_addr 70) 22
-echo 32 > /sys/class/gpio/export
-# output
-
-# RS485 transceiver TX/RX toggle (RTS) pin, GPIOF5
-devmem_clear_bit $(scu_addr 80) 29
-echo 45 > /sys/class/gpio/export
-gpio_set 45 0
-
-# Bloodhound GPIOs, P0-6, G4, J1-3, Y3
-# Make sure GPIOP0,1,2,3,6 are enabled.
-for i in {16..19} 22; do
- devmem_clear_bit $(scu_addr 88) $i
-done
-# Enable GPIOY3
-devmem_clear_bit $(scu_addr a4) 11
-# GPIOG4
-devmem_clear_bit $(scu_addr 2c) 1
-# GPIOJ1
-devmem_clear_bit $(scu_addr 84) 9
-# GPIOJ2
-devmem_clear_bit $(scu_addr 84) 10
-# GPIOJ11
-devmem_clear_bit $(scu_addr 84) 11
-
-# Export all the GPIOs
-for i in {120..126} 52 {73..75} 195; do
- echo $i > /sys/class/gpio/export
-done
-
-# Enable the isolation buffer
-wedge_iso_buf_enable
-
-# Get the board type by parsing the EEPROM.
-# This must be after enabling isolation buffer as the i2c bus
-# is isolated by the buffer
-board_type=$(wedge_board_type)
-
-case "$board_type" in
- FC-LEFT|FC-RIGHT)
- # On FC
- if [ $board_rev -lt 2 ]; then
- # EVT board
- # FAB_SLOT_ID is GPIOU0
- # PEER_FAB_PRSNT is GPIOU1
- devmem_set_bit $(scu_addr a0) 8
- devmem_set_bit $(scu_addr a0) 9
- gpio_export U0
- gpio_export U1
- # T2_POWER_UP is GPIOT6
- devmem_set_bit $(scu_addr a0) 6
- gpio_export T6 T2_POWER_UP
- # HS_FAULT_N is GPIOT7
- devmem_set_bit $(scu_addr a0) 7
- gpio_export T7
- if [ "$board_type" = "FC-LEFT" ]; then
- # GPIOE2 is CPU_EEPROM_SEL, on FC-LEFT
- devmem_clear_bit $(scu_addr 80) 18
- devmem_clear_bit $(scu_addr 8c) 13
- devmem_clear_bit $(scu_addr 70) 22
- gpio_export E2
- # GPIOA6 and GPIOA7 are MAC2 MDIO pins, we use them as
- # GPIO for bitbang driver
- devmem_clear_bit $(scu_addr 90) 2
- devmem_clear_bit $(scu_addr 80) 6
- devmem_clear_bit $(scu_addr 80) 7
- gpio_export A6
- gpio_export A7
- fi
- else
- # DVT board
- if [ "$board_type" = "FC-LEFT" ]; then # Left FC
- # BMC_SW_RST is GPIOL0, 16p switch
- # SCU84[16] must be 0
- devmem_clear_bit $(scu_addr 84) 16
- gpio_set L0 1
-
- # MDC|MDIO_CONT are GPIOR6 and GPIOR7, 16p switch
- # SCU88[30:31] must be 0
- devmem_clear_bit $(scu_addr 88) 30
- devmem_clear_bit $(scu_addr 88) 31
- gpio_set R6 1
- gpio_set R7 1
-
- # SWITCH_EEPROM1_WRT is GPIOE2, 16p switch EEPROM (U61)
- # SCU80[18], SCU8C[13], and SCU70[22] must be 0
- devmem_clear_bit $(scu_addr 80) 18
- devmem_clear_bit $(scu_addr 8C) 13
- devmem_clear_bit $(scu_addr 70) 22
- gpio_export E2
-
- # SPI bus to 16p switch EEPROM
- # GPIOI4 <--> BMC_EEPROM1_SPI_SS
- # GPIOI5 <--> BMC_EEPROM1_SPI_SCK
- # GPIOI6 <--> BMC_EEPROM1_SPI_MOSI
- # GPIOI7 <--> BMC_EEPROM1_SPI_MISO
- # The EEPROM SPI clk does not match with the BMC SPI master.
- # Have to configure these pins as GPIO to use with
- # SPI bitbang driver.
- # SCU70[13:12,5] must be 0
- devmem_clear_bit $(scu_addr 70) 5
- devmem_clear_bit $(scu_addr 70) 12
- devmem_clear_bit $(scu_addr 70) 13
- gpio_export I4
- gpio_export I5
- gpio_export I6
- gpio_export I7
-
- # BMC_PHY_RST is GPIOT0, Front Panel Port PHY on the 16p switch
- # SCUA0[0] must be 1
- devmem_set_bit $(scu_addr a0) 0
- gpio_set T0 1
-
- # BMC_5PORTSW_RST is GPIOT1, 5p switch
- # SCUA0[1] must be 1
- devmem_set_bit $(scu_addr a0) 1
- gpio_set T1 1
-
- # ISO_SWITCH1_MDC|MDIO are GPIOT4 and GPIOT5, 5p switch
- # SCUA0[4:5] must be 1
- devmem_set_bit $(scu_addr a0) 4
- devmem_set_bit $(scu_addr a0) 5
- gpio_set T4 1
- gpio_set T5 1
-
- # ISO_SWITCH_EEPROM2_WRT is GPIOV0, 5p switch EEPROM (U114)
- # SCUA0[16] must be 1
- devmem_set_bit $(scu_addr a0) 16
- gpio_export V0
-
- # SPI bus to 5p switch EEPROM (U114)
- # GPIOI0 <--> ISO_BMC_EEPROM2_SPI_SS
- # GPIOI1 <--> ISO_BMC_EEPROM2_SPI_SCK
- # GPIOI2 <--> ISO_BMC_EEPROM2_SPI_MOSI
- # GPIOI3 <--> ISO_BMC_EEPROM2_SPI_MISO
- # The EEPROM SPI clk does not match with the BMC SPI master.
- # Have to configure these pins as GPIO to use with
- # SPI bitbang driver.
- # SCU70[13] must be 0, has already been set when
- # preparing for GPIOI4-GPIOI7
- gpio_export I0
- gpio_export I1
- gpio_export I2
- gpio_export I3
-
- # BMC_PHYL_RST is GPIOF0, Left BMC PHY
- # SCU80[24] must be 0
- devmem_clear_bit $(scu_addr 80) 24
- gpio_set F0 1
- else # Right FC
- # BMC_PHYR_RST is GPIOL1, Right BMC PHY
- # SCU84[17] must be 0
- devmem_clear_bit $(scu_addr 84) 17
- gpio_set L1 1
- fi
- # T2_POWER_UP is GPIOU4
- # SCUA0[12] must be 1
- devmem_set_bit $(scu_addr a0) 12
- gpio_export U4 T2_POWER_UP
-
- # HS_FAULT_N is GPIOU5
- # SCUA0[13] must be 1
- devmem_set_bit $(scu_addr a0) 13
- gpio_export U5
-
- # FAB_SLOT_ID is GPIOU6
- # SCUA0[14] must be 1
- devmem_set_bit $(scu_addr a0) 14
- gpio_export U6
-
- # PEER_FAB_PRSNT is GPIOU7
- # SCUA0[15] must be 1
- devmem_set_bit $(scu_addr a0) 15
- gpio_export U7
- fi
- ;;
- *)
- # Set up to watch for FC presence, and switch between interfaces.
- # GPIOC0..C7, interested in C4, C5
- devmem_clear_bit $(scu_addr 90) 0
- devmem_clear_bit $(scu_addr 90) 25
- if [ $board_rev -lt 3 ]; then
- # Prior to DVTC
- # BP_SLOT_ID GPIO pins are U0, U1, U2, U3
- devmem_set_bit $(scu_addr a0) 8
- devmem_set_bit $(scu_addr a0) 9
- devmem_set_bit $(scu_addr a0) 10
- devmem_set_bit $(scu_addr a0) 11
- gpio_export U0
- gpio_export U1
- gpio_export U2
- gpio_export U3
- # T2_POWER_UP is GPIOT6
- devmem_set_bit $(scu_addr a0) 6
- gpio_export T6 T2_POWER_UP
- # HS_FAULT_N is GPIOT7
- devmem_set_bit $(scu_addr a0) 7
- gpio_export T7
- else
- # Starting from DVTC
- # BP_SLOT_ID GPIO pins are U6, U7, V0, V1
- devmem_set_bit $(scu_addr 70) 6
- devmem_set_bit $(scu_addr a0) 14
- devmem_set_bit $(scu_addr a0) 15
- devmem_set_bit $(scu_addr a0) 16
- devmem_set_bit $(scu_addr a0) 17
- gpio_export U6
- gpio_export U7
- gpio_export V0
- gpio_export V1
- # T2_POWER_UP is GPIOU4
- devmem_set_bit $(scu_addr a0) 12
- gpio_export U4 T2_POWER_UP
- # HS_FAULT_N is GPIOU5
- devmem_set_bit $(scu_addr a0) 13
- gpio_export U5
- fi
- ;;
-esac
-
-# Make it possible to turn off T2 if fand sees overheating via GPIOF1
-# Do not change the GPIO direction here as the default value of this GPIO
-# is low, which causes a Non-maskable interrupt to the uS.
-devmem_clear_bit $(scu_addr 80) 25
-devmem_clear_bit $(scu_addr a4) 12
-echo 41 > /sys/class/gpio/export
-
-# Allow us to set the fan LEDs boards.
-# This is GPIO G5, G6, G7, and J0
-
-devmem_clear_bit $(scu_addr 70) 23
-devmem_clear_bit $(scu_addr 84) 5
-devmem_clear_bit $(scu_addr 84) 6
-devmem_clear_bit $(scu_addr 84) 7
-devmem_clear_bit $(scu_addr 84) 8
-
-echo 53 > /sys/class/gpio/export
-echo 54 > /sys/class/gpio/export
-echo 55 > /sys/class/gpio/export
-echo 72 > /sys/class/gpio/export
-echo "out" > /sys/class/gpio/gpio53/direction
-echo "out" > /sys/class/gpio/gpio54/direction
-echo "out" > /sys/class/gpio/gpio55/direction
-echo "out" > /sys/class/gpio/gpio72/direction
-
-# Once we set "out", output values will be random unless we set them
-# to something
-
-echo "0" > /sys/class/gpio/gpio53/value
-echo "0" > /sys/class/gpio/gpio54/value
-echo "0" > /sys/class/gpio/gpio55/value
-echo "0" > /sys/class/gpio/gpio72/value
diff --git a/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/setup_rov.sh b/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/setup_rov.sh
deleted file mode 100755
index 4ff6f24..0000000
--- a/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/setup_rov.sh
+++ /dev/null
@@ -1,106 +0,0 @@
-#!/bin/bash
-#
-# Copyright 2014-present Facebook. All Rights Reserved.
-#
-# This program file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# This program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program in a file named COPYING; if not, write to the
-# Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor,
-# Boston, MA 02110-1301 USA
-#
-
-# The T2 chip can prefer different input voltages, depending, presumably
-# of manufacturing variations. We need to determine whether it wants
-# 0.95V or 1.025V, reset the T2 to reduce total power usage, set the
-# outgoing voltage on the first buck converter, and bring T2 up out of
-# reset.
-
-. /usr/local/bin/openbmc-utils.sh
-
-# read the T2 ROV after the GPIOs are enabled
-t2_rov() {
- local val0 val1 val2
- # Note that the values are *not* read in order.
- val0=$(cat /sys/class/gpio/gpio58/value 2>/dev/null)
- val1=$(cat /sys/class/gpio/gpio56/value 2>/dev/null)
- val2=$(cat /sys/class/gpio/gpio57/value 2>/dev/null)
- echo $((val0 | (val1 << 1) | (val2 << 2)))
-}
-
-rov=$(t2_rov)
-
-# target_volts come from the data sheet and 18mV of loss and
-# some fudging based on actual measurements to get either 1.025V
-# or 0.95V at T2
-if [ $rov -eq 1 ]; then
- target_volts=0x5a
-elif [ $rov -eq 2 ]; then
- target_volts=0x65
-else
- echo "Unrecognized T2 ROV value $rov, setting failed."
- exit 1
-fi
-target_volts=$(( $target_volts * 1 )) # normalize to decimal
-
-# We shouldn't have to rmmod pmbus, because it hasn't been loaded yet,
-# but if the script is rerun after the system is up, it may be necessary.
-rmmod pmbus
-reload=$?
-
-# Get current voltage value.
-# The device here is NCP4200. It turns out the first i2c transaction to this
-# device always fails. The spec does not mention anything about NCP4200 i2c
-# engine start delay. However, each time, when the isolation buffer between the
-# BMC i2c controller and NCP4200 is disabled and re-enabled, the first i2c
-# transaction to NCP4200 always fails.
-# To workaround this issue, we are doing the first read twice.
-cur_volts=$(i2cget -y 1 0x60 0x8b w 2> /dev/null)
-cur_volts=$(i2cget -y 1 0x60 0x8b w)
-cur_volts=$(( $cur_volts * 1 )) # normalize to decimal
-
-# Only bounce the T2 if we actually need to modify the voltage
-if [ $cur_volts -ne $target_volts ]; then
- # Set values before turning out output; we're using "PCIE, then MCS"
- echo 1 > /sys/class/gpio/gpio42/value
- echo 1 > /sys/class/gpio/gpio43/value
- echo out > /sys/class/gpio/gpio42/direction
- echo out > /sys/class/gpio/gpio43/direction
- echo 0 > /sys/class/gpio/gpio16/value
- echo out > /sys/class/gpio/gpio16/direction
- # T2 is in reset; note that this may cause NMI messages on the uServer,
- # which shouldn't be up anyway when this is first run.
-
- # Set the requested value to the current value to avoid rapid shifts
- i2cset -y 1 0x60 0x21 $cur_volts w
- # Enable the requested voltage
- i2cset -y 1 0x60 0xd2 0x5a
- i2cset -y 1 0x60 0xd3 0x5a
- sleep 1
-
- # Set the target voltage
- i2cset -y 1 0x60 0x21 $target_volts w
-
- sleep 1
-
- # Let T2 come out of reset
- echo 1 > /sys/class/gpio/gpio16/value
- echo "T2 ROV value set based on $rov."
- sleep 2
- echo 0 > /sys/class/gpio/gpio42/value
- echo 0 > /sys/class/gpio/gpio43/value
-else
- echo "T2 ROV already correctly set."
-fi
-# Bring back pmbus if necessary
-if [ $reload -eq 0 ]; then
- modprobe pmbus
-fi
diff --git a/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/setup_switch.py b/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/setup_switch.py
deleted file mode 100644
index 995cec8..0000000
--- a/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/setup_switch.py
+++ /dev/null
@@ -1,49 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright 2004-present Facebook. All rights reserved.
-#
-# This program file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# This program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program in a file named COPYING; if not, write to the
-# Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor,
-# Boston, MA 02110-1301 USA
-#
-# This script combines multiple switch configuration into one python script.
-# All such configuration can be done directly through bcm5396_util.py.
-# But, it turns out it took several seconds to just start the python script.
-# Involking the script 16 times (2 to create vlan, 13 to set port vlan default,
-# and 1 to enable vlan function) contributes 1 minute delay.
-
-from bcm5396 import Bcm5396
-
-MDC_GPIO = 6
-MDIO_GPIO = 7
-
-INTERNAL_VLAN = 4088
-DEFAULT_VLAN=4090
-
-INTERNAL_PORTS = [3, 10, 1, 11, 0, 8, 2, 9, 4, 12, 14, 13]
-FRONT_PORT=5
-
-if __name__ == '__main__':
- bcm = Bcm5396(Bcm5396.MDIO_ACCESS, mdc=MDC_GPIO, mdio=MDIO_GPIO)
- # create default VLAN including internal ports and front panel
- # port (un-tagged)
- bcm.add_vlan(DEFAULT_VLAN, INTERNAL_PORTS + [FRONT_PORT],
- INTERNAL_PORTS + [FRONT_PORT], 0)
- # set ingress vlan for internal ports and front panel port to default vlan
- for port in INTERNAL_PORTS + [FRONT_PORT]:
- bcm.vlan_set_port_default(port, DEFAULT_VLAN, 0)
- # create internal vlan including internal ports only (tagged)
- bcm.add_vlan(INTERNAL_VLAN, [], INTERNAL_PORTS, 0)
- # enable vlan
- bcm.vlan_ctrl(True)
diff --git a/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/sol.sh b/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/sol.sh
deleted file mode 100755
index 2998c81..0000000
--- a/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/sol.sh
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/bin/sh
-#
-# Copyright 2014-present Facebook. All Rights Reserved.
-#
-# This program file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# This program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program in a file named COPYING; if not, write to the
-# Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor,
-# Boston, MA 02110-1301 USA
-#
-
-CONSOLE_SH=/usr/local/bin/us_console.sh
-FILE=/etc/us_pseudo_tty
-TTY=/dev/ttyS1
-
-if [ -a $FILE ]
- then
- read -r TTY<$FILE
-fi
-
-$CONSOLE_SH connect
-
-echo "You are in SOL session."
-echo "Use ctrl-x to quit."
-echo "-----------------------"
-echo
-
-trap '"$CONSOLE_SH" disconnect' INT TERM QUIT EXIT
-
-/usr/bin/microcom -s 57600 $TTY
-
-echo
-echo
-echo "-----------------------"
-echo "Exit from SOL session."
diff --git a/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/src/include/i2c-dev.h b/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/src/include/i2c-dev.h
deleted file mode 100644
index eefb6e4..0000000
--- a/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/src/include/i2c-dev.h
+++ /dev/null
@@ -1,362 +0,0 @@
-/*
- i2c-dev.h - i2c-bus driver, char device interface
-
- Copyright (C) 1995-97 Simon G. Vogl
- Copyright (C) 1998-99 Frodo Looijaard <frodol@dds.nl>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- MA 02110-1301 USA.
-*/
-
-#ifndef _LINUX_I2C_DEV_H
-#define _LINUX_I2C_DEV_H
-
-#include <linux/types.h>
-#include <sys/ioctl.h>
-#include <stddef.h>
-#include <string.h>
-
-
-/* -- i2c.h -- */
-
-#define _I2C_MIN(a, b) (((a) <= (b)) ? (a) : (b))
-
-/*
- * I2C Message - used for pure i2c transaction, also from /dev interface
- */
-struct i2c_msg {
- __u16 addr; /* slave address */
- unsigned short flags;
-#define I2C_CLIENT_PEC 0x04 /* Use Packet Error Checking */
-#define I2C_M_TEN 0x0010 /* this is a ten bit chip address */
-#define I2C_M_RD 0x0001 /* read data, from slave to master */
-#define I2C_M_NOSTART 0x4000 /* if I2C_FUNC_PROTOCOL_MANGLING */
-#define I2C_M_REV_DIR_ADDR 0x2000 /* if I2C_FUNC_PROTOCOL_MANGLING */
-#define I2C_M_IGNORE_NAK 0x1000 /* if I2C_FUNC_PROTOCOL_MANGLING */
-#define I2C_M_NO_RD_ACK 0x0800 /* if I2C_FUNC_PROTOCOL_MANGLING */
-#define I2C_M_RECV_LEN 0x0400 /* length will be first received byte */
- short len; /* msg length */
- char *buf; /* pointer to msg data */
-};
-
-/* To determine what functionality is present */
-
-#define I2C_FUNC_I2C 0x00000001
-#define I2C_FUNC_10BIT_ADDR 0x00000002
-#define I2C_FUNC_PROTOCOL_MANGLING 0x00000004 /* I2C_M_{REV_DIR_ADDR,NOSTART,..} */
-#define I2C_FUNC_SMBUS_PEC 0x00000008
-#define I2C_FUNC_SMBUS_BLOCK_PROC_CALL 0x00008000 /* SMBus 2.0 */
-#define I2C_FUNC_SMBUS_QUICK 0x00010000
-#define I2C_FUNC_SMBUS_READ_BYTE 0x00020000
-#define I2C_FUNC_SMBUS_WRITE_BYTE 0x00040000
-#define I2C_FUNC_SMBUS_READ_BYTE_DATA 0x00080000
-#define I2C_FUNC_SMBUS_WRITE_BYTE_DATA 0x00100000
-#define I2C_FUNC_SMBUS_READ_WORD_DATA 0x00200000
-#define I2C_FUNC_SMBUS_WRITE_WORD_DATA 0x00400000
-#define I2C_FUNC_SMBUS_PROC_CALL 0x00800000
-#define I2C_FUNC_SMBUS_READ_BLOCK_DATA 0x01000000
-#define I2C_FUNC_SMBUS_WRITE_BLOCK_DATA 0x02000000
-#define I2C_FUNC_SMBUS_READ_I2C_BLOCK 0x04000000 /* I2C-like block xfer */
-#define I2C_FUNC_SMBUS_WRITE_I2C_BLOCK 0x08000000 /* w/ 1-byte reg. addr. */
-
-#define I2C_FUNC_SMBUS_BYTE (I2C_FUNC_SMBUS_READ_BYTE | \
- I2C_FUNC_SMBUS_WRITE_BYTE)
-#define I2C_FUNC_SMBUS_BYTE_DATA (I2C_FUNC_SMBUS_READ_BYTE_DATA | \
- I2C_FUNC_SMBUS_WRITE_BYTE_DATA)
-#define I2C_FUNC_SMBUS_WORD_DATA (I2C_FUNC_SMBUS_READ_WORD_DATA | \
- I2C_FUNC_SMBUS_WRITE_WORD_DATA)
-#define I2C_FUNC_SMBUS_BLOCK_DATA (I2C_FUNC_SMBUS_READ_BLOCK_DATA | \
- I2C_FUNC_SMBUS_WRITE_BLOCK_DATA)
-#define I2C_FUNC_SMBUS_I2C_BLOCK (I2C_FUNC_SMBUS_READ_I2C_BLOCK | \
- I2C_FUNC_SMBUS_WRITE_I2C_BLOCK)
-
-/* Old name, for compatibility */
-#define I2C_FUNC_SMBUS_HWPEC_CALC I2C_FUNC_SMBUS_PEC
-
-/*
- * Data for SMBus Messages
- */
-#define I2C_SMBUS_BLOCK_MAX 32 /* As specified in SMBus standard */
-#define I2C_SMBUS_I2C_BLOCK_MAX 32 /* Not specified but we use same structure */
-union i2c_smbus_data {
- __u8 byte;
- __u16 word;
- __u8 block[I2C_SMBUS_BLOCK_MAX + 2]; /* block[0] is used for length */
- /* and one more for PEC */
-};
-
-#define I2C_SMBUS_BLOCK_LARGE_MAX 240
-union i2c_smbus_large_data {
- union i2c_smbus_data data;
- __u8 block[I2C_SMBUS_BLOCK_LARGE_MAX + 2]; /* block[0] is used for length */
- /* and one more for PEC */
-};
-
-/* smbus_access read or write markers */
-#define I2C_SMBUS_READ 1
-#define I2C_SMBUS_WRITE 0
-
-/* SMBus transaction types (size parameter in the above functions)
- Note: these no longer correspond to the (arbitrary) PIIX4 internal codes! */
-#define I2C_SMBUS_QUICK 0
-#define I2C_SMBUS_BYTE 1
-#define I2C_SMBUS_BYTE_DATA 2
-#define I2C_SMBUS_WORD_DATA 3
-#define I2C_SMBUS_PROC_CALL 4
-#define I2C_SMBUS_BLOCK_DATA 5
-#define I2C_SMBUS_I2C_BLOCK_BROKEN 6
-#define I2C_SMBUS_BLOCK_PROC_CALL 7 /* SMBus 2.0 */
-#define I2C_SMBUS_I2C_BLOCK_DATA 8
-#define I2C_SMBUS_BLOCK_LARGE_DATA 9
-
-
-/* /dev/i2c-X ioctl commands. The ioctl's parameter is always an
- * unsigned long, except for:
- * - I2C_FUNCS, takes pointer to an unsigned long
- * - I2C_RDWR, takes pointer to struct i2c_rdwr_ioctl_data
- * - I2C_SMBUS, takes pointer to struct i2c_smbus_ioctl_data
- */
-#define I2C_RETRIES 0x0701 /* number of times a device address should
- be polled when not acknowledging */
-#define I2C_TIMEOUT 0x0702 /* set timeout in units of 10 ms */
-
-/* NOTE: Slave address is 7 or 10 bits, but 10-bit addresses
- * are NOT supported! (due to code brokenness)
- */
-#define I2C_SLAVE 0x0703 /* Use this slave address */
-#define I2C_SLAVE_FORCE 0x0706 /* Use this slave address, even if it
- is already in use by a driver! */
-#define I2C_TENBIT 0x0704 /* 0 for 7 bit addrs, != 0 for 10 bit */
-
-#define I2C_FUNCS 0x0705 /* Get the adapter functionality mask */
-
-#define I2C_RDWR 0x0707 /* Combined R/W transfer (one STOP only) */
-
-#define I2C_PEC 0x0708 /* != 0 to use PEC with SMBus */
-#define I2C_SMBUS 0x0720 /* SMBus transfer */
-
-
-/* This is the structure as used in the I2C_SMBUS ioctl call */
-struct i2c_smbus_ioctl_data {
- __u8 read_write;
- __u8 command;
- __u32 size;
- union i2c_smbus_data *data;
-};
-
-/* This is the structure as used in the I2C_RDWR ioctl call */
-struct i2c_rdwr_ioctl_data {
- struct i2c_msg *msgs; /* pointers to i2c_msgs */
- __u32 nmsgs; /* number of i2c_msgs */
-};
-
-#define I2C_RDRW_IOCTL_MAX_MSGS 42
-
-
-static inline __s32 i2c_smbus_access(int file, char read_write, __u8 command,
- int size, union i2c_smbus_data *data)
-{
- struct i2c_smbus_ioctl_data args;
-
- args.read_write = read_write;
- args.command = command;
- args.size = size;
- args.data = data;
- return ioctl(file,I2C_SMBUS,&args);
-}
-
-
-static inline __s32 i2c_smbus_write_quick(int file, __u8 value)
-{
- return i2c_smbus_access(file,value,0,I2C_SMBUS_QUICK,NULL);
-}
-
-static inline __s32 i2c_smbus_read_byte(int file)
-{
- union i2c_smbus_data data;
- if (i2c_smbus_access(file,I2C_SMBUS_READ,0,I2C_SMBUS_BYTE,&data))
- return -1;
- else
- return 0x0FF & data.byte;
-}
-
-static inline __s32 i2c_smbus_write_byte(int file, __u8 value)
-{
- return i2c_smbus_access(file,I2C_SMBUS_WRITE,value,
- I2C_SMBUS_BYTE,NULL);
-}
-
-static inline __s32 i2c_smbus_read_byte_data(int file, __u8 command)
-{
- union i2c_smbus_data data;
- if (i2c_smbus_access(file,I2C_SMBUS_READ,command,
- I2C_SMBUS_BYTE_DATA,&data))
- return -1;
- else
- return 0x0FF & data.byte;
-}
-
-static inline __s32 i2c_smbus_write_byte_data(int file, __u8 command,
- __u8 value)
-{
- union i2c_smbus_data data;
- data.byte = value;
- return i2c_smbus_access(file,I2C_SMBUS_WRITE,command,
- I2C_SMBUS_BYTE_DATA, &data);
-}
-
-static inline __s32 i2c_smbus_read_word_data(int file, __u8 command)
-{
- union i2c_smbus_data data;
- if (i2c_smbus_access(file,I2C_SMBUS_READ,command,
- I2C_SMBUS_WORD_DATA,&data))
- return -1;
- else
- return 0x0FFFF & data.word;
-}
-
-static inline __s32 i2c_smbus_write_word_data(int file, __u8 command,
- __u16 value)
-{
- union i2c_smbus_data data;
- data.word = value;
- return i2c_smbus_access(file,I2C_SMBUS_WRITE,command,
- I2C_SMBUS_WORD_DATA, &data);
-}
-
-static inline __s32 i2c_smbus_process_call(int file, __u8 command, __u16 value)
-{
- union i2c_smbus_data data;
- data.word = value;
- if (i2c_smbus_access(file,I2C_SMBUS_WRITE,command,
- I2C_SMBUS_PROC_CALL,&data))
- return -1;
- else
- return 0x0FFFF & data.word;
-}
-
-
-/* Returns the number of read bytes */
-static inline __s32 i2c_smbus_read_block_data(int file, __u8 command,
- __u8 *values)
-{
- union i2c_smbus_data data;
- if (i2c_smbus_access(file,I2C_SMBUS_READ,command,
- I2C_SMBUS_BLOCK_DATA,&data))
- return -1;
- else {
- memcpy(values, &data.block[1], _I2C_MIN(data.block[0], I2C_SMBUS_BLOCK_MAX));
- return data.block[0];
- }
-}
-
-static inline __s32 i2c_smbus_write_block_data(int file, __u8 command,
- __u8 length, const __u8 *values)
-{
- union i2c_smbus_data data;
- if (length > 32)
- length = 32;
- memcpy(&data.block[1], values, length);
- data.block[0] = length;
- return i2c_smbus_access(file,I2C_SMBUS_WRITE,command,
- I2C_SMBUS_BLOCK_DATA, &data);
-}
-
-static inline __s32 i2c_smbus_read_block_large_data(int file, __u8 command,
- __u8 *values)
-{
- union i2c_smbus_large_data data;
- if (i2c_smbus_access(file, I2C_SMBUS_READ, command,
- I2C_SMBUS_BLOCK_LARGE_DATA,
- (union i2c_smbus_data *)&data)) {
- return -1;
- } else {
- /* the first byte is the length which is not copied */
- memcpy(values, &data.block[1], _I2C_MIN(data.block[0], I2C_SMBUS_BLOCK_LARGE_MAX));
- return data.block[0];
- }
-}
-
-static inline __s32 i2c_smbus_write_block_large_data(int file, __u8 command,
- __u8 length,
- const __u8 *values)
-{
- union i2c_smbus_large_data data;
- if (length > I2C_SMBUS_BLOCK_LARGE_MAX) {
- length = I2C_SMBUS_BLOCK_LARGE_MAX;
- }
- data.block[0] = length;
- memcpy(&data.block[1], values, length);
- return i2c_smbus_access(file, I2C_SMBUS_WRITE, command,
- I2C_SMBUS_BLOCK_LARGE_DATA,
- (union i2c_smbus_data *)&data);
-}
-
-/* Returns the number of read bytes */
-/* Until kernel 2.6.22, the length is hardcoded to 32 bytes. If you
- ask for less than 32 bytes, your code will only work with kernels
- 2.6.23 and later. */
-static inline __s32 i2c_smbus_read_i2c_block_data(int file, __u8 command,
- __u8 length, __u8 *values)
-{
- union i2c_smbus_data data;
-
- if (length > 32)
- length = 32;
- data.block[0] = length;
- if (i2c_smbus_access(file,I2C_SMBUS_READ,command,
- length == 32 ? I2C_SMBUS_I2C_BLOCK_BROKEN :
- I2C_SMBUS_I2C_BLOCK_DATA,&data))
- return -1;
- else {
- memcpy(values, &data.block[1], _I2C_MIN(data.block[0], I2C_SMBUS_BLOCK_MAX));
- return data.block[0];
- }
-}
-
-static inline __s32 i2c_smbus_write_i2c_block_data(int file, __u8 command,
- __u8 length,
- const __u8 *values)
-{
- union i2c_smbus_data data;
- if (length > 32)
- length = 32;
- memcpy(&data.block[1], values, length);
- data.block[0] = length;
- return i2c_smbus_access(file,I2C_SMBUS_WRITE,command,
- I2C_SMBUS_I2C_BLOCK_BROKEN, &data);
-}
-
-/* Returns the number of read bytes */
-static inline __s32 i2c_smbus_block_process_call(int file, __u8 command,
- __u8 length, __u8 *values)
-{
- union i2c_smbus_data data;
- if (length > 32)
- length = 32;
- memcpy(&data.block[1], values, length);
- data.block[0] = length;
- if (i2c_smbus_access(file,I2C_SMBUS_WRITE,command,
- I2C_SMBUS_BLOCK_PROC_CALL,&data))
- return -1;
- else {
- memcpy(values, &data.block[1], _I2C_MIN(data.block[0], I2C_SMBUS_BLOCK_MAX));
- return data.block[0];
- }
-}
-
-#undef _I2C_MIN
-
-#endif /* _LINUX_I2C_DEV_H */
diff --git a/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/start_us_monitor.sh b/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/start_us_monitor.sh
deleted file mode 100644
index 19f3198..0000000
--- a/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/start_us_monitor.sh
+++ /dev/null
@@ -1,73 +0,0 @@
-#! /bin/sh
-#
-# Copyright 2014-present Facebook. All Rights Reserved.
-#
-# This program file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# This program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program in a file named COPYING; if not, write to the
-# Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor,
-# Boston, MA 02110-1301 USA
-#
-
-### BEGIN INIT INFO
-# Provides: us-monitor
-# Required-Start:
-# Required-Stop:
-# Default-Start: S
-# Default-Stop: 0 6
-# Short-Description: Start the microserver reset monitoring script
-#
-### END INIT INFO
-
-PATH=/sbin:/bin:/usr/sbin:/usr/bin
-NAME="us_monitor"
-DESC="monitoring microserver reset"
-DAEMON="us_monitor.sh"
-
-# source function library
-. /etc/init.d/functions
-
-. /usr/local/bin/openbmc-utils.sh
-
-STOPPER=
-ACTION="$1"
-
-case "$ACTION" in
- start)
- echo -n "Starting $DESC: "
- /usr/local/bin/${DAEMON} > /dev/null 2>&1 &
- echo "$NAME."
- ;;
- stop)
- echo -n "Stopping $DESC: "
- killall ${DAEMON}
- echo "$NAME."
- ;;
- restart|force-reload)
- echo -n "Restarting $DESC: "
- killall ${DAEMON}
- /usr/local/bin/${DAEMON} > /dev/null 2>&1 &
- echo "$NAME."
- ;;
- status)
- status ${DAEMON}
- exit $?
- ;;
- *)
- N=${0##*/}
- N=${N#[SK]??}
- echo "Usage: $N {start|stop|status|restart|force-reload}" >&2
- exit 1
- ;;
-esac
-
-exit 0
diff --git a/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/us_console.sh b/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/us_console.sh
deleted file mode 100755
index 75bbcea..0000000
--- a/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/us_console.sh
+++ /dev/null
@@ -1,47 +0,0 @@
-#!/bin/sh
-#
-# Copyright 2014-present Facebook. All Rights Reserved.
-#
-# This program file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# This program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program in a file named COPYING; if not, write to the
-# Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor,
-# Boston, MA 02110-1301 USA
-#
-
-usage() {
- echo "$0 <connect | disconnect>"
-}
-
-. /usr/local/bin/openbmc-utils.sh
-
-if [ $# -ne 1 ]; then
- usage
- exit 1
-fi
-
-if [ "$1" == "connect" ]; then
- VALUE=1
-elif [ "$1" == "disconnect" ]; then
- VALUE=0
-else
- usage
- exit 1
-fi
-
-# GPIOE0 (32) controls if uS console connects to UART1 or not.
-# To enable GPIOE0, SCU80[16], SCU8C[12], and SCU70[22] must be 0
-devmem_clear_bit $(scu_addr 80) 16
-devmem_clear_bit $(scu_addr 8C) 12
-devmem_clear_bit $(scu_addr 70) 22
-
-gpio_set 32 $VALUE
diff --git a/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/us_monitor.sh b/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/us_monitor.sh
deleted file mode 100644
index b7a9cb6..0000000
--- a/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/us_monitor.sh
+++ /dev/null
@@ -1,56 +0,0 @@
-#!/bin/bash
-#
-# Copyright 2015-present Facebook. All Rights Reserved.
-#
-# This program file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# This program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program in a file named COPYING; if not, write to the
-# Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor,
-# Boston, MA 02110-1301 USA
-
-. /usr/local/bin/openbmc-utils.sh
-
-PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
-
-# Because the voltage leak from uS COM pins could cause uS to struck when
-# transitting from S5 to S0, we will need to explicitely pull down uS COM
-# pins before powering off/reset and restoring COM pins after
-
-pull_down_us_com() {
- # set GPIOL6 and GPIOL7 low
- devmem_clear_bit $(scu_addr 84) 22
- devmem_clear_bit $(scu_addr 84) 23
- gpio_set 94 0
- gpio_set 95 0
- # now, connect uart from BMC to the uS
- gpio_set 32 1
-}
-
-restore_us_com() {
- devmem_set_bit $(scu_addr 84) 22
- devmem_set_bit $(scu_addr 84) 23
- # if sol.sh is running, keep uart from uS connected with BMC
- if pidof -x sol.sh > /dev/null 2>&1; then
- gpio_set 32 1
- else
- gpio_set 32 0
- fi
-}
-
-while true; do
- if ! wedge_is_us_on 1 '' 0 > /dev/null 2>&1; then
- pull_down_us_com
- else
- restore_us_com
- fi
- usleep 400000 # 400ms
-done
diff --git a/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/wedge_power.sh b/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/wedge_power.sh
deleted file mode 100644
index ce734ef..0000000
--- a/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/wedge_power.sh
+++ /dev/null
@@ -1,190 +0,0 @@
-#!/bin/bash
-#
-# Copyright 2014-present Facebook. All Rights Reserved.
-#
-# This program file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# This program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program in a file named COPYING; if not, write to the
-# Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor,
-# Boston, MA 02110-1301 USA
-#
-
-. /usr/local/bin/openbmc-utils.sh
-
-PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
-
-prog="$0"
-
-usage() {
- echo "Usage: $prog <command> [command options]"
- echo
- echo "Commands:"
- echo " status: Get the current microserver power status"
- echo
- echo " on: Power on microserver if not powered on already"
- echo " options:"
- echo " -f: Re-do power on sequence no matter if microserver has "
- echo " been powered on or not."
- echo
- echo " off: Power off microserver ungracefully"
- echo
- echo " reset: Power reset microserver ungracefully"
- echo " options:"
- echo " -s: Power reset whole wedge system ungracefully"
- echo
-}
-
-do_status() {
- echo -n "Microserver power is "
- if wedge_is_us_on; then
- echo "on"
- else
- echo "off"
- fi
- return 0
-}
-
-do_on() {
- local force opt pulse_us n retries
- force=0
- while getopts "f" opt; do
- case $opt in
- f)
- force=1
- ;;
- *)
- usage
- exit -1
- ;;
-
- esac
- done
- echo -n "Power on microserver ..."
- if [ $force -eq 0 ]; then
- # need to check if uS is on or not
- if wedge_is_us_on 10 "."; then
- echo " Already on. Skip!"
- return 1
- fi
- fi
- # first make sure, GPIOD1 (25) is high
- gpio_set 25 1
- sleep 1
- # then, put GPIOP7 (127) to low
- gpio_set 127 0
- pulse_us=500000 # 500ms
- retries=3
- n=1
- while true; do
- # first make sure, GPIOD1 (25) is high
- gpio_set 25 1
- usleep $pulse_us
- # generate the power on pulse
- gpio_set 25 0
- usleep $pulse_us
- gpio_set 25 1
- sleep 3
- if wedge_is_us_on 1 '' 1; then
- break
- fi
- n=$((n+1))
- if [ $n -gt $retries ]; then
- echo " Failed"
- return 1
- fi
- echo -n "..."
- done
- # Turn on the power LED (GPIOE5)
- /usr/local/bin/power_led.sh on
- echo " Done"
- return 0
-}
-
-do_off() {
- echo -n "Power off microserver ..."
- # first make sure, GPIOD1 (25) is high
- gpio_set 25 1
- # then, put GPIOP7 (127) to low
- gpio_set 127 0
- gpio_set 25 0
- sleep 5
- gpio_set 25 1
- # Turn off the power LED (GPIOE5)
- /usr/local/bin/power_led.sh off
- echo " Done"
- return 0
-}
-
-do_reset() {
- local system opt
- system=0
- while getopts "s" opt; do
- case $opt in
- s)
- system=1
- ;;
- *)
- usage
- exit -1
- ;;
- esac
- done
- if [ $system -eq 1 ]; then
- echo -n "Power reset whole system ..."
- rmmod adm1275
- i2cset -y 12 0x10 0xd9 c
- else
- if ! wedge_is_us_on; then
- echo "Power resetting microserver that is powered off has no effect."
- echo "Use '$prog on' to power the microserver on"
- return -1
- fi
- echo -n "Power reset microserver ..."
- # then, put GPIOP7 (127) to low
- gpio_set 127 0
- gpio_set 17 0
- sleep 1
- gpio_set 17 1
- sleep 1
- fi
- echo " Done"
- return 0
-}
-
-if [ $# -lt 1 ]; then
- usage
- exit -1
-fi
-
-command="$1"
-shift
-
-case "$command" in
- status)
- do_status $@
- ;;
- on)
- do_on $@
- ;;
- off)
- do_off $@
- ;;
- reset)
- do_reset $@
- ;;
- *)
- usage
- exit -1
- ;;
-esac
-
-exit $?
diff --git a/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/wedge_us_mac.sh b/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/wedge_us_mac.sh
deleted file mode 100644
index 34b8e59..0000000
--- a/meta-facebook/meta-wedge/recipes-wedge/fbutils/files/wedge_us_mac.sh
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/bin/bash
-#
-# Copyright 2014-present Facebook. All Rights Reserved.
-#
-# This program file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# This program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program in a file named COPYING; if not, write to the
-# Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor,
-# Boston, MA 02110-1301 USA
-#
-
-PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
-
-mac=$(i2cdump -y 0x0 0x49 s 0xd4 | grep '^00: d4'| awk '{ print $3":"$4":"$5":"$6":"$7":"$8 }') 2>/dev/null
-
-if [ -n "$mac" ]; then
- echo $mac
-else
- echo "Cannot find out the microserver MAC" 1>&2
-fi
OpenPOWER on IntegriCloud