diff options
Diffstat (limited to 'meta-hpe')
33 files changed, 2465 insertions, 0 deletions
diff --git a/meta-hpe/COPYING.MIT b/meta-hpe/COPYING.MIT new file mode 100644 index 000000000..89de35479 --- /dev/null +++ b/meta-hpe/COPYING.MIT @@ -0,0 +1,17 @@ +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/meta-hpe/COPYING.apache-2.0 b/meta-hpe/COPYING.apache-2.0 new file mode 100644 index 000000000..67db85882 --- /dev/null +++ b/meta-hpe/COPYING.apache-2.0 @@ -0,0 +1,175 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. diff --git a/meta-hpe/LICENSE b/meta-hpe/LICENSE new file mode 100644 index 000000000..ebec7f9e7 --- /dev/null +++ b/meta-hpe/LICENSE @@ -0,0 +1,12 @@ +Different components of meta-hpe are under different licenses (a mix +of MIT and Apache-2.0). Please see: + +COPYING.Apache-2.0 +COPYING.MIT (MIT) + +All metadata is MIT licensed unless otherwise stated. Source code +included in tree for individual recipes is under the LICENSE stated in +the associated recipe (.bb file) unless otherwise stated. + +License information for any other files is either explicitly stated +or defaults to Apache-2.0. diff --git a/meta-hpe/MAINTAINERS b/meta-hpe/MAINTAINERS new file mode 100644 index 000000000..3563ffc22 --- /dev/null +++ b/meta-hpe/MAINTAINERS @@ -0,0 +1,50 @@ +How to use this list: + Find the most specific section entry (described below) that matches where + your change lives and add the reviewers (R) and maintainers (M) as + reviewers. You can use the same method to track down who knows a particular + code base best. + + Your change/query may span multiple entries; that is okay. + + If you do not find an entry that describes your request at all, someone + forgot to update this list; please at least file an issue or send an email + to a maintainer, but preferably you should just update this document. + +Description of section entries: + + Section entries are structured according to the following scheme: + + X: NAME <EMAIL_USERNAME@DOMAIN> <IRC_USERNAME!> + X: ... + . + . + . + + Where REPO_NAME is the name of the repository within the OpenBMC GitHub + organization; FILE_PATH is a file path within the repository, possibly with + wildcards; X is a tag of one of the following types: + + M: Denotes maintainer; has fields NAME <EMAIL_USERNAME@DOMAIN> <IRC_USERNAME!>; + if omitted from an entry, assume one of the maintainers from the + MAINTAINERS entry. + R: Denotes reviewer; has fields NAME <EMAIL_USERNAME@DOMAIN> <IRC_USERNAME!>; + these people are to be added as reviewers for a change matching the repo + path. + F: Denotes forked from an external repository; has fields URL. + + Line comments are to be denoted "# SOME COMMENT" (typical shell style + comment); it is important to follow the correct syntax and semantics as we + may want to use automated tools with this file in the future. + + A change cannot be added to an OpenBMC repository without a MAINTAINER's + approval; thus, a MAINTAINER should always be listed as a reviewer. + +START OF MAINTAINERS LIST +------------------------- + +# THIS REPOSITORY HAS A DIFFERENT SUBMISSION PROCESS: this is a subtree in +# @openbmc and is synced by the maintainer using git-subtree. Please submit +# changes against @openbmc. +M: Gilbert Chen <gilbert.chen@hpe.com> +M: Jorge Cisneros <jorge.cisneros@hpe.com> +M: Mike Garrett <mike.garrett@hpe.com> diff --git a/meta-hpe/README.md b/meta-hpe/README.md new file mode 100644 index 000000000..d2960f4d7 --- /dev/null +++ b/meta-hpe/README.md @@ -0,0 +1,55 @@ +OpenEmbedded/Yocto/OpenBMC BSP layer for Hewlett Packard Enterprise servers +==================================================== + +This layer supports OpenBMC firmware on supported Hewlett Packard Enterprise server +products. + +The following system is supported. + +## HPE DL360 Gen10 (Modified Proof of Concept) +The HPE DL360 Gen10 OpenBMC Proof of Concept is a two-socket, 1U general purpose server. +For more information, click [here](https://buy.hpe.com/us/en/servers/rack-servers/proliant-dl300-servers/proliant-dl360-server/hpe-proliant-dl360-gen10-server/p/1010007891) + +**This is for experimental use only at this time. The thermal management configuration (fan PID calibration) is not complete.** + +HPE ProLiant Gen10 products contain a custom BMC ASIC (called "GXP" here) that includes Hewlett Packard Enterprise Silicon Root of Trust technology. This feature was designed to ensure that only firmware released by Hewlett Packard Enterprise can run. In order to enable customers and partners to work with open firmware including OpenBMC, the DL360 layer described here will run only on a modified server or on the open source firmware CI system at https://osfci.tech/ci/. + +This boot process for the GXP ASIC begins with a binary bootblock before starting U-Boot, +Linux, and the OpenBMC services. + +### Configuration +Source the `setup` script as follows: + +``` +. ./setup dl360poc +``` + +Build + +``` +bitbake obmc-phosphor-image +``` + +Additional machine configurations will be made available in the future. + +Contributing +------------ + +meta-hpe patches are reviewed using the Gerrit instance at +https://gerrit.openbmc-project.xyz. + +Please submit patches to Gerrit. More information about using Gerrit can be found +[here](https://github.com/openbmc/docs/blob/meta-hpe/master/CONTRIBUTING.md#submitting-changes-via-gerrit-server). +https://github.com/openbmc/meta-hpe is a hosting mirror only. GitHub +pull requests are not monitored and will not be accepted. + +Patch checklist. Please ensure that patches adhere to the following guidelines: + + - meta-hpe uses the [OE style + guidelines](https://www.openembedded.org/wiki/Styleguide). + - Follow [the seven rules of a great git commit + message](https://chris.beams.io/posts/git-commit/#seven-rules) + +For questions or help, join us on the [mailing +list](https://lists.ozlabs.org/listinfo/openbmc) or in +[IRC](irc://freenode.net/openbmc). diff --git a/meta-hpe/conf/layer.conf b/meta-hpe/conf/layer.conf new file mode 100644 index 000000000..977654c82 --- /dev/null +++ b/meta-hpe/conf/layer.conf @@ -0,0 +1,13 @@ +# We have a conf and classes directory, add to BBPATH +BBPATH .= ":${LAYERDIR}" + +# We have recipes-* directories, add to BBFILES +BBFILES += "${LAYERDIR}/meta-common/recipes-*/*/*.bb \ + ${LAYERDIR}/meta-common/recipes-*/*/*.bbappend" + +BBFILE_COLLECTIONS += "hpe-layer" +BBFILE_PATTERN_hpe-layer := "^${LAYERDIR}/" +LAYERSERIES_COMPAT_hpe-layer = "dunfell gatesgarth" + +# Provide a variable that points the base of the hpe layer. +HPEBASE = '${@os.path.normpath("${LAYERDIR}/")}' diff --git a/meta-hpe/conf/machine/include/hpe.inc b/meta-hpe/conf/machine/include/hpe.inc new file mode 100644 index 000000000..1e928beeb --- /dev/null +++ b/meta-hpe/conf/machine/include/hpe.inc @@ -0,0 +1,19 @@ +OBMC_MACHINE_FEATURES += "\ + obmc-phosphor-fan-mgmt \ + obmc-phosphor-chassis-mgmt \ + obmc-phosphor-flash-mgmt \ + obmc-host-ipmi \ + obmc-host-state-mgmt \ + obmc-chassis-state-mgmt \ + obmc-bmc-state-mgmt \ + " + +PREFERRED_PROVIDER_virtual/obmc-host-ipmi-hw = "phosphor-ipmi-kcs" +PREFERRED_PROVIDER_virtual/obmc-chassis-mgmt = "packagegroup-hpe-apps" +PREFERRED_PROVIDER_virtual/obmc-fan-mgmt = "packagegroup-hpe-apps" +PREFERRED_PROVIDER_virtual/obmc-flash-mgmt = "packagegroup-hpe-apps" +PREFERRED_PROVIDER_virtual/obmc-system-mgmt = "packagegroup-hpe-apps" +PREFERRED_PROVIDER_virtual/obmc-host-ctl ?= "" +#PREFERRED_PROVIDER_virtual/phosphor-ipmi-fru-hostfw-config ?= "hostboot-inventory-config-native" + +IMAGE_FEATURES_remove = "obmc-fan-control" diff --git a/meta-hpe/meta-common/recipes-phosphor/image/obmc-phosphor-image.bbappend b/meta-hpe/meta-common/recipes-phosphor/image/obmc-phosphor-image.bbappend new file mode 100644 index 000000000..7c21fb4d2 --- /dev/null +++ b/meta-hpe/meta-common/recipes-phosphor/image/obmc-phosphor-image.bbappend @@ -0,0 +1,151 @@ +inherit image_version +unset do_get_version[noexec] +do_get_version[depends] = "os-release" + +# do_get_version() is copied from meta-phosphor/classes/image_version.bbclass and +# modified to append the date and time to the version if a file named "developer" +# exists in the openbmc/build directory +def do_get_version(d): + import configparser + import io + path = d.getVar('STAGING_DIR_TARGET', True) + d.getVar('sysconfdir', True) + path = os.path.join(path, 'os-release') + parser = configparser.SafeConfigParser(strict=False) + parser.optionxform = str + version = '' + try: + with open(path, 'r') as fd: + buf = '[root]\n' + fd.read() + fd = io.StringIO(buf) + parser.readfp(fd) + version = parser['root']['VERSION_ID'] + dev_path = d.getVar('PWD', True) + dev_path = os.path.join(dev_path, 'developer') + if os.path.isfile(dev_path): + version = version[:-1] + str(d.getVar('IMAGE_VERSION_SUFFIX', True)).strip() + except: + pass + return version + +HPE_GXP_BOOTBLOCK_IMAGE ?= "gxp-bootblock.bin" +HPE_UBOOT_SIGNING_HEADER ?= "hpe-uboot-header.section" +HPE_UBOOT_SIGNING_KEY ?= "hpe-uboot-signing-key.pem" + +FLASH_SIZE = "31552" +FLASH_UBOOT_OFFSET = "0" +FLASH_KERNEL_OFFSET = "512" +FLASH_ROFS_OFFSET = "5376" +FLASH_RWFS_OFFSET = "29184" +FLASH_SECTION_OFFSET = "31552" +FLASH_SECTION_END = "32768" + +UBOOT_IMG_SIZE = "393216" + +do_generate_static[depends] += " \ + gxp-bootblock:do_deploy \ + gxp-bootblock:do_populate_sysroot \ + " + + +make_image_links_append() { + ln -sf ${DEPLOY_DIR_IMAGE}/hpe-section image-section +} + +do_mk_static_symlinks_append() { + ln -sf hpe-section image-section +} + +do_generate_static_prepend() { + bb.build.exec_func("do_generate_hpe_image", d) +} + +do_generate_static_append() { + _append_image(os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True), + 'hpe-section'), + int(d.getVar('FLASH_SECTION_OFFSET', True)), + int(d.getVar('FLASH_SECTION_END', True))) +} + +do_generate_hpe_image() { + # Extract uboot 256K + dd if=/dev/zero bs=1k count=256 > ${DEPLOY_DIR_IMAGE}/u-boot-tmp.${UBOOT_SUFFIX} + dd bs=1k conv=notrunc seek=0 count=256\ + if=${DEPLOY_DIR_IMAGE}/u-boot.${UBOOT_SUFFIX} \ + of=${DEPLOY_DIR_IMAGE}/u-boot-tmp.${UBOOT_SUFFIX} + + # Sign uboot 256K + openssl sha256 -sign ${DEPLOY_DIR_IMAGE}/${HPE_UBOOT_SIGNING_KEY} -out ${DEPLOY_DIR_IMAGE}/gxp_tmp.sig \ + ${DEPLOY_DIR_IMAGE}/u-boot-tmp.${UBOOT_SUFFIX} + + # Expand (header+signature) to 4K + cat ${DEPLOY_DIR_IMAGE}/${HPE_UBOOT_SIGNING_HEADER} ${DEPLOY_DIR_IMAGE}/gxp_tmp.sig \ + > ${DEPLOY_DIR_IMAGE}/gxp.sig + + # Add Header and Signature to hpe-section (from 60K) + dd bs=1k conv=notrunc seek=60 \ + if=${DEPLOY_DIR_IMAGE}/gxp.sig \ + of=${DEPLOY_DIR_IMAGE}/hpe-section + + # Add ubb to hpe-section + dd bs=1k conv=notrunc seek=64 \ + if=${DEPLOY_DIR_IMAGE}/${HPE_GXP_BOOTBLOCK_IMAGE} \ + of=${DEPLOY_DIR_IMAGE}/hpe-section + + # Expand uboot to 384K + dd if=/dev/zero bs=1k count=384 > ${DEPLOY_DIR_IMAGE}/u-boot-tmp.${UBOOT_SUFFIX} + dd bs=1k conv=notrunc seek=0 count=384\ + if=${DEPLOY_DIR_IMAGE}/u-boot.${UBOOT_SUFFIX} \ + of=${DEPLOY_DIR_IMAGE}/u-boot-tmp.${UBOOT_SUFFIX} + + # Remove unnecessary files + rm ${DEPLOY_DIR_IMAGE}/u-boot.${UBOOT_SUFFIX} \ + ${DEPLOY_DIR_IMAGE}/gxp_tmp.sig \ + ${DEPLOY_DIR_IMAGE}/gxp.sig + + mv ${DEPLOY_DIR_IMAGE}/u-boot-tmp.${UBOOT_SUFFIX} ${DEPLOY_DIR_IMAGE}/u-boot.${UBOOT_SUFFIX} + + # Check uboot image size equals to 384K + size="$(wc -c < "${DEPLOY_DIR_IMAGE}/u-boot.${UBOOT_SUFFIX}")" + if [ ${size} -ne ${UBOOT_IMG_SIZE} ] + then + echo "ERROR: STATIC - uBoot image size ${size} incorrect. Please try it again." + exit 1 + fi +} + +make_tar_of_images() { + type=$1 + shift + extra_files="$@" + + # Create the tar archive + tar -h -cvf ${IMGDEPLOYDIR}/${IMAGE_NAME}.$type.mtd.tar \ + image-u-boot image-kernel image-rofs image-rwfs image-section $extra_files + + cd ${IMGDEPLOYDIR} + ln -sf ${IMAGE_NAME}.$type.mtd.tar ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.$type.mtd.tar +} + +do_generate_static_tar[depends] += " obmc-phosphor-image:do_generate_static" + +do_generate_static_tar() { + + ln -sf ${S}/MANIFEST MANIFEST + ln -sf ${S}/publickey publickey + make_image_links ${OVERLAY_BASETYPE} ${IMAGE_BASETYPE} + + # Check uboot image size equals to 384K + size="$(wc -c < "image-u-boot")" + if [ ${size} != ${UBOOT_IMG_SIZE} ] + then + echo "ERROR: TAR - uBoot image size ${size} incorrect. Please try it again." + exit 1 + fi + + make_signatures image-u-boot image-kernel image-rofs image-rwfs image-section MANIFEST publickey + make_tar_of_images static MANIFEST publickey ${signature_files} + + # Maintain non-standard legacy link. + cd ${IMGDEPLOYDIR} + ln -sf ${IMAGE_NAME}.static.mtd.tar ${IMGDEPLOYDIR}/${MACHINE}-${DATETIME}.tar +} diff --git a/meta-hpe/meta-common/recipes-phosphor/initrdscripts/files/gxp-obmc-init.sh b/meta-hpe/meta-common/recipes-phosphor/initrdscripts/files/gxp-obmc-init.sh new file mode 100644 index 000000000..e2a9ebcb6 --- /dev/null +++ b/meta-hpe/meta-common/recipes-phosphor/initrdscripts/files/gxp-obmc-init.sh @@ -0,0 +1,452 @@ +#!/bin/sh + +fslist="proc sys dev run" +rodir=run/initramfs/ro +rwdir=run/initramfs/rw +upper=$rwdir/cow +work=$rwdir/work + +cd / +mkdir -p $fslist +mount dev dev -tdevtmpfs +mount sys sys -tsysfs +mount proc proc -tproc +if ! grep run proc/mounts +then + mount tmpfs run -t tmpfs -o mode=755,nodev +fi + +mkdir -p $rodir $rwdir + +cp -rp init shutdown update whitelist bin sbin usr lib etc var run/initramfs + +# To start a interactive shell with job control at this point, run +# getty 38400 ttyS4 + +findmtd() { + m=$(grep -xl "$1" /sys/class/mtd/*/name) + m=${m%/name} + m=${m##*/} + echo $m +} + +blkid_fs_type() { + # Emulate util-linux's `blkid -s TYPE -o value $1` + # Example busybox blkid output: + # # blkid /dev/mtdblock5 + # /dev/mtdblock5: TYPE="squashfs" + # Process output to extract TYPE value "squashfs". + blkid $1 | sed -e 's/^.*TYPE="//' -e 's/".*$//' +} + +probe_fs_type() { + fst=$(blkid_fs_type $1) + echo ${fst:=jffs2} +} + +# This fw_get_env_var is a possibly broken version of fw_printenv that +# does not check the crc or flag byte. +# The u-boot environment starts with a crc32, followed by a flag byte +# when a redundannt environment is configured, followed by var=value\0 sets. +# The flag byte for nand is a 1 byte counter; for nor it is a 1 or 0 byte. + +get_fw_env_var() { + # do we have 1 or 2 copies of the environment? + # count non-blank non-comment lines + # copies=$(grep -v ^# /etc/fw_env.config | grep -c [::alnum::]) + # ... we could if we had the fw_env.config in the initramfs + copies=2 + + # * Change \n to \r and \0 to \n + # * Skip to the 5th byte to skip over crc + # * then skip to the first or 2nd byte to skip over flag if it exists + # * stop parsing at first empty line corresponding to the + # double \0 at the end of the environment. + # * print the value of the variable name passed as argument + + envdev=$(findmtd u-boot-env) + if test -n $envdev + then + cat /dev/$envdev | + tr '\n\000' '\r\n' | + tail -c +5 | tail -c +${copies-1} | + sed -ne '/^$/,$d' -e "s/^$1=//p" + fi +} + +setup_resolv() { + runresolv=/run/systemd/resolve/resolv.conf + etcresolv=/etc/resolv.conf + + if test ! -e $etcresolv -a ! -L $etcresolv + then + mkdir -p ${runresolv%/*} + ln -s $runresolv $etcresolv + fi + if test ! -f $runresolv + then + cat /proc/net/pnp > $runresolv + fi + + return 0 +} + +try_tftp() { + # split into tftp:// host:port/ path/on/remote + # then spilt off / and then :port from the end of host:port/ + # and : from the beginning of port + + rest="${1#tftp://}" + path=${rest#*/} + host=${rest%$path} + host="${host%/}" + port="${host#${host%:*}}" + host="${host%$port}" + port="${port#:}" + + setup_resolv + + if test -z "$host" -o -z "$path" + then + debug_takeover "Invalid tftp download url '$url'." + elif echo "Downloading '$url' from $host ..." && + ! tftp -g -r "$path" -l /run/image-rofs "$host" ${port+"$port"} + then + debug_takeover "Download of '$url' failed." + fi +} + +try_wget() { + setup_resolv + + echo "Downloading '$1' ..." + if ! wget -O /run/image-rofs "$1" + then + debug_takeover "Download of '$url' failed." + fi +} + +debug_takeover() { + echo "$@" + read -t 5 -n 1 -s -r -p "Press any key to log in and try to manually fix, force recovery in 5 seconds" + if test $? -gt 0 + then + mkdir -p /var/lock + envdev=$(findmtd u-boot-env) + echo -e "/dev/${envdev}\t0x00000\t0x10000" > /etc/fw_env.config + echo -e "/dev/${envdev}\t0x10000\t0x10000" >> /etc/fw_env.config + fw_setenv force_recovery 1 + fw_setenv last_booterrmsg "$@" + devmem 0xc0000000 32 0x01 + fi + cat << HERE +After fixing run exit to continue this script, or reboot -f to retry, or +touch /takeover and exit to become PID 1 allowing editing of this script. +HERE + + while ! sulogin && ! test -f /takeover + do + echo getty failed, retrying + done + + # Touch /takeover in the above getty to become pid 1 + if test -e /takeover + then + cat << HERE + +Takeover of init requested. Executing /bin/sh as PID 1. +When finished exec new init or cleanup and run reboot -f. + +Warning: No job control! Shell exit will panic the system! +HERE + export PS1=init#\ + exec /bin/sh + fi +} + +# Check System Maintenace Switch 7 and load factory default +check_dip() { + devmem 0x800000b8 16 0xFF + dip=$(devmem 0x800000b8 16) + + value1=$((( $dip & 0xFF00 ) >> 8 )) + value2=$((( $dip & 0x0040 ) >> 6 )) + + if [ $value1 -eq 0 ] && [ $value2 -eq 1 ] + then + echo "Detect System Maintenace Switch 7 on. Will load factory default" + return 0 + fi + return 1 +} + +rofs=$(findmtd rofs) +rwfs=$(findmtd rwfs) + +rodev=/dev/mtdblock${rofs#mtd} +rwdev=/dev/mtdblock${rwfs#mtd} + +# Set to y for yes, anything else for no. +force_rwfst_jffs2=y +flash_images_before_init=n +consider_download_files=y +consider_download_tftp=y +consider_download_http=y +consider_download_ftp=y + +rofst=squashfs +rwfst=$(probe_fs_type $rwdev) +roopts=ro +rwopts=rw + +image=/run/initramfs/image- +trigger=${image}rwfs + +init=/sbin/init +fsckbase=/sbin/fsck. +fsck=$fsckbase$rwfst +fsckopts=-a +optfile=/run/initramfs/init-options +optbase=/run/initramfs/init-options-base +urlfile=/run/initramfs/init-download-url +update=/run/initramfs/update + +if test -e /${optfile##*/} +then + cp /${optfile##*/} $optfile +fi + +if test -e /${optbase##*/} +then + cp /${optbase##*/} $optbase +else + touch $optbase +fi + +if test ! -f $optfile +then + cat /proc/cmdline $optbase > $optfile + get_fw_env_var openbmcinit >> $optfile + get_fw_env_var openbmconce >> $optfile +fi + +echo rofs = $rofs $rofst rwfs = $rwfs $rwfst + +if grep -w debug-init-sh $optfile +then + debug_takeover "Debug initial shell requested by command line." +fi + +if test "x$consider_download_files" = xy && + grep -w openbmc-init-download-files $optfile +then + if test -f ${urlfile##*/} + then + cp ${urlfile##*/} $urlfile + fi + if test ! -f $urlfile + then + get_fw_env_var openbmcinitdownloadurl > $urlfile + fi + url="$(cat $urlfile)" + rest="${url#*://}" + proto="${url%$rest}" + + if test -z "$url" + then + echo "Download url empty. Ignoring download request." + elif test -z "$proto" + then + echo "Download failed." + elif test "$proto" = tftp:// + then + if test "x$consider_download_tftp" = xy + then + try_tftp "$url" + else + echo "Download failed." + fi + elif test "$proto" = http:// + then + if test "x$consider_download_http" = xy + then + try_wget "$url" + else + echo "Download failed." + fi + elif test "$proto" = ftp:// + then + if test "x$consider_download_ftp" = xy + then + try_wget "$url" + else + echo "Download failed." + fi + else + echo "Download failed." + fi +fi + +# If there are images in root move them to /run/initramfs/ or /run/ now. +imagebasename=${image##*/} +if test -n "${imagebasename}" && ls /${imagebasename}* > /dev/null 2>&1 +then + if test "x$flash_images_before_init" = xy + then + echo "Flash images found, will update before starting init." + mv /${imagebasename}* ${image%$imagebasename} + else + echo "Flash images found, will use but deferring flash update." + mv /${imagebasename}* /run/ + fi +fi + +if grep -w clean-rwfs-filesystem $optfile +then + echo "Cleaning of read-write overlay filesystem requested." + touch $trigger +fi + +if grep -w factory-reset $optfile || check_dip +then + echo "Factory reset requested." + touch $trigger + do_save=--no-save-files +else + do_save=--save-files +fi + +if test "x$force_rwfst_jffs2" = xy -a $rwfst != jffs2 -a ! -f $trigger +then + echo "Converting read-write overlay filesystem to jffs2 forced." + touch $trigger +fi + +if ls $image* > /dev/null 2>&1 +then + if ! test -x $update + then + debug_takeover "Flash update requested but $update missing!" + elif test -f $trigger -a ! -s $trigger + then + if [ $do_save = "--save-files" ] + then + echo "Saving selected files from read-write overlay filesystem." + else + echo "No files will be selected for save." + fi + $update --no-restore-files $do_save + echo "Clearing read-write overlay filesystem." + flash_eraseall /dev/$rwfs + echo "Restoring saved files to read-write overlay filesystem." + touch $trigger + $update --no-save-files --clean-saved-files + else + $update --clean-saved-files $do_save + fi + + rwfst=$(probe_fs_type $rwdev) + fsck=$fsckbase$rwfst +fi + +if grep -w overlay-filesystem-in-ram $optfile +then + rwfst=none +fi + +copyfiles= +if grep -w copy-files-to-ram $optfile +then + rwfst=none + copyfiles=y +fi + +# It would be nice to do this after fsck but that mean rofs is mounted +# which triggers the mtd is mounted check +if test "$rwfst$copyfiles" = noney +then + touch $trigger + $update --copy-files --clean-saved-files --no-restore-files +fi + +if grep -w copy-base-filesystem-to-ram $optfile && + test ! -e /run/image-rofs && ! cp $rodev /run/image-rofs +then + # Remove any partial copy to avoid attempted usage later + if test -e /run/image-rofs + then + ls -l /run/image-rofs + rm -f /run/image-rofs + fi + debug_takeover "Copying $rodev to /run/image-rofs failed." +fi + +if test -s /run/image-rofs +then + rodev=/run/image-rofs + roopts=$roopts,loop +fi + +mount $rodev $rodir -t $rofst -o $roopts + +if test -x $rodir$fsck +then + for fs in $fslist + do + mount --bind $fs $rodir/$fs + done + chroot $rodir $fsck $fsckopts $rwdev + rc=$? + for fs in $fslist + do + umount $rodir/$fs + done + if test $rc -gt 1 + then + debug_takeover "fsck of read-write fs on $rwdev failed (rc=$rc)" + fi +elif test "$rwfst" != jffs2 -a "$rwfst" != none +then + echo "No '$fsck' in read only fs, skipping fsck." +fi + +if test "$rwfst" = none +then + echo "Running with read-write overlay in RAM for this boot." + echo "No state will be preserved unless flash update performed." +elif ! mount $rwdev $rwdir -t $rwfst -o $rwopts +then + msg="$(cat)" << HERE + +Mounting read-write $rwdev filesystem failed. Please fix and run + mount $rwdev $rwdir -t $rwfst -o $rwopts +to to continue, or do change nothing to run from RAM for this boot. +HERE + debug_takeover "$msg" +fi + +rm -rf $work +mkdir -p $upper $work + +mount -t overlay -o lowerdir=$rodir,upperdir=$upper,workdir=$work cow /root + +while ! chroot /root /bin/sh -c "test -x '$init' -a -s '$init'" +do + msg="$(cat)" << HERE + +Unable to confirm /sbin/init is an executable non-empty file +in merged file system mounted at /root. + +Change Root test failed! Invoking emergency shell. +HERE + debug_takeover "$msg" +done + +for f in $fslist +do + mount --move $f root/$f +done + +# switch_root /root $init +exec chroot /root $init + diff --git a/meta-hpe/meta-common/recipes-phosphor/initrdscripts/obmc-phosphor-initfs.bbappend b/meta-hpe/meta-common/recipes-phosphor/initrdscripts/obmc-phosphor-initfs.bbappend new file mode 100644 index 000000000..cdf163cea --- /dev/null +++ b/meta-hpe/meta-common/recipes-phosphor/initrdscripts/obmc-phosphor-initfs.bbappend @@ -0,0 +1,11 @@ +FILESEXTRAPATHS_prepend :="${THISDIR}/files:" + +SRC_URI += "file://gxp-obmc-init.sh \ + " + +do_install_append() { + install -m 0755 ${WORKDIR}/gxp-obmc-init.sh ${D}/init +} + +FILES_${PN} += " /init /shutdown /update /whitelist /dev " +FILES_${PN} += " /init-options /init-download-url " diff --git a/meta-hpe/meta-common/recipes-phosphor/packagegroups/packagegroup-hpe-apps.bb b/meta-hpe/meta-common/recipes-phosphor/packagegroups/packagegroup-hpe-apps.bb new file mode 100644 index 000000000..82a748b91 --- /dev/null +++ b/meta-hpe/meta-common/recipes-phosphor/packagegroups/packagegroup-hpe-apps.bb @@ -0,0 +1,48 @@ +SUMMARY = "OpenBMC for HPE - Applications" +PR = "r1" + +inherit packagegroup + +PROVIDES = "${PACKAGES}" +PACKAGES = " \ + ${PN}-chassis \ + ${PN}-fans \ + ${PN}-flash \ + ${PN}-system \ + " + +PROVIDES += "virtual/obmc-chassis-mgmt" +PROVIDES += "virtual/obmc-fan-mgmt" +PROVIDES += "virtual/obmc-flash-mgmt" +PROVIDES += "virtual/obmc-system-mgmt" + +RPROVIDES_${PN}-chassis += "virtual-obmc-chassis-mgmt" +RPROVIDES_${PN}-fans += "virtual-obmc-fan-mgmt" +RPROVIDES_${PN}-flash += "virtual-obmc-flash-mgmt" +RPROVIDES_${PN}-system += "virtual-obmc-system-mgmt" + +SUMMARY_${PN}-chassis = "HPE Chassis" +RDEPENDS_${PN}-chassis = " \ + obmc-phosphor-buttons-signals \ + obmc-phosphor-buttons-handler \ + obmc-op-control-power \ + obmc-host-failure-reboots \ + " + +SUMMARY_${PN}-fans = "HPE Fans" +RDEPENDS_${PN}-fans = " \ + phosphor-pid-control \ + " + +SUMMARY_${PN}-flash = "HPE Flash" +RDEPENDS_${PN}-flash = " \ + obmc-control-bmc \ + " + +SUMMARY_${PN}-system = "HPE System" +RDEPENDS_${PN}-system = " \ + bmcweb \ + phosphor-webui \ + phosphor-ipmi-ipmb \ + dbus-sensors \ + " diff --git a/meta-hpe/meta-common/recipes-phosphor/packagegroups/packagegroup-obmc-apps.bbappend b/meta-hpe/meta-common/recipes-phosphor/packagegroups/packagegroup-obmc-apps.bbappend new file mode 100644 index 000000000..fc6a05510 --- /dev/null +++ b/meta-hpe/meta-common/recipes-phosphor/packagegroups/packagegroup-obmc-apps.bbappend @@ -0,0 +1,10 @@ +RDEPENDS_${PN}-logging += "phosphor-logging" +RDEPENDS_${PN}-extras += " bmcweb \ + phosphor-webui \ + phosphor-image-signing \ + phosphor-pid-control \ +" + +RDEPENDS_${PN}-fan-control = " \ + ${VIRTUAL-RUNTIME_obmc-fan-control} \ + " diff --git a/meta-hpe/meta-dl360poc/conf/bblayers.conf.sample b/meta-hpe/meta-dl360poc/conf/bblayers.conf.sample new file mode 100644 index 000000000..3416353bf --- /dev/null +++ b/meta-hpe/meta-dl360poc/conf/bblayers.conf.sample @@ -0,0 +1,31 @@ +# LAYER_CONF_VERSION is increased each time build/conf/bblayers.conf +# changes incompatibly +LCONF_VERSION = "8" + +BBPATH = "${TOPDIR}" +BBFILES ?= "" + +BBLAYERS ?= " \ + ##OEROOT##/meta \ + ##OEROOT##/meta-openembedded/meta-oe \ + ##OEROOT##/meta-openembedded/meta-networking \ + ##OEROOT##/meta-openembedded/meta-perl \ + ##OEROOT##/meta-openembedded/meta-python \ + ##OEROOT##/meta-openembedded/meta-webserver \ + ##OEROOT##/meta-phosphor \ + ##OEROOT##/meta-hpe/meta-gxp \ + ##OEROOT##/meta-hpe \ + ##OEROOT##/meta-hpe/meta-dl360poc \ + " +BBLAYERS_NON_REMOVABLE ?= " \ + ##OEROOT##/meta \ + ##OEROOT##/meta-openembedded/meta-oe \ + ##OEROOT##/meta-openembedded/meta-networking \ + ##OEROOT##/meta-openembedded/meta-perl \ + ##OEROOT##/meta-openembedded/meta-python \ + ##OEROOT##/meta-openembedded/meta-webserver \ + ##OEROOT##/meta-phosphor \ + ##OEROOT##/meta-hpe/meta-gxp \ + ##OEROOT##/meta-hpe \ + ##OEROOT##/meta-hpe/meta-dl360poc \ + " diff --git a/meta-hpe/meta-dl360poc/conf/layer.conf b/meta-hpe/meta-dl360poc/conf/layer.conf new file mode 100644 index 000000000..462756444 --- /dev/null +++ b/meta-hpe/meta-dl360poc/conf/layer.conf @@ -0,0 +1,10 @@ +# We have a conf and classes directory, add to BBPATH +BBPATH .= ":${LAYERDIR}" + +# We have recipes-* directories, add to BBFILES +BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \ + ${LAYERDIR}/recipes-*/*/*.bbappend" + +BBFILE_COLLECTIONS += "dl360poc-layer" +BBFILE_PATTERN_dl360poc-layer := "^${LAYERDIR}/" +LAYERSERIES_COMPAT_dl360poc-layer = "zeus warrior dunfell" diff --git a/meta-hpe/meta-dl360poc/conf/local.conf.sample b/meta-hpe/meta-dl360poc/conf/local.conf.sample new file mode 100644 index 000000000..1161dcec0 --- /dev/null +++ b/meta-hpe/meta-dl360poc/conf/local.conf.sample @@ -0,0 +1,245 @@ +# +# This file is your local configuration file and is where all local user settings +# are placed. The comments in this file give some guide to the options a new user +# to the system might want to change but pretty much any configuration option can +# be set in this file. More adventurous users can look at local.conf.extended +# which contains other examples of configuration which can be placed in this file +# but new users likely won't need any of them initially. +# +# Lines starting with the '#' character are commented out and in some cases the +# default values are provided as comments to show people example syntax. Enabling +# the option is a question of removing the # character and making any change to the +# variable as required. + +# +# Machine Selection +# +# You need to select a specific machine to target the build with. There are a selection +# of emulated machines available which can boot and run in the QEMU emulator: +# +#MACHINE ?= "qemuarm" +#MACHINE ?= "qemuarm64" +#MACHINE ?= "qemumips" +#MACHINE ?= "qemuppc" +#MACHINE ?= "qemux86" +#MACHINE ?= "qemux86-64" +# +# There are also the following hardware board target machines included for +# demonstration purposes: +# +#MACHINE ?= "beaglebone" +#MACHINE ?= "genericx86" +#MACHINE ?= "genericx86-64" +#MACHINE ?= "mpc8315e-rdb" +#MACHINE ?= "edgerouter" +# +# This sets the default machine to be qemux86 if no other machine is selected: +MACHINE ??= "dl360poc" + +# +# Where to place downloads +# +# During a first build the system will download many different source code tarballs +# from various upstream projects. This can take a while, particularly if your network +# connection is slow. These are all stored in DL_DIR. When wiping and rebuilding you +# can preserve this directory to speed up this part of subsequent builds. This directory +# is safe to share between multiple builds on the same machine too. +# +# The default is a downloads directory under TOPDIR which is the build directory. +# +#DL_DIR ?= "${TOPDIR}/downloads" + +# +# Where to place shared-state files +# +# BitBake has the capability to accelerate builds based on previously built output. +# This is done using "shared state" files which can be thought of as cache objects +# and this option determines where those files are placed. +# +# You can wipe out TMPDIR leaving this directory intact and the build would regenerate +# from these files if no changes were made to the configuration. If changes were made +# to the configuration, only shared state files where the state was still valid would +# be used (done using checksums). +# +# The default is a sstate-cache directory under TOPDIR. +# +#SSTATE_DIR ?= "${TOPDIR}/sstate-cache" + +# +# Where to place the build output +# +# This option specifies where the bulk of the building work should be done and +# where BitBake should place its temporary files and output. Keep in mind that +# this includes the extraction and compilation of many applications and the toolchain +# which can use Gigabytes of hard disk space. +# +# The default is a tmp directory under TOPDIR. +# +#TMPDIR = "${TOPDIR}/tmp" + +# +# Default policy config +# +# The distribution setting controls which policy settings are used as defaults. +# The default value is fine for general Yocto project use, at least initially. +# Ultimately when creating custom policy, people will likely end up subclassing +# these defaults. +# +DISTRO ?= "openbmc-phosphor" +# As an example of a subclass there is a "bleeding" edge policy configuration +# where many versions are set to the absolute latest code from the upstream +# source control systems. This is just mentioned here as an example, its not +# useful to most new users. +# DISTRO ?= "poky-bleeding" + +# +# Package Management configuration +# +# This variable lists which packaging formats to enable. Multiple package backends +# can be enabled at once and the first item listed in the variable will be used +# to generate the root filesystems. +# Options are: +# - 'package_deb' for debian style deb files +# - 'package_ipk' for ipk files are used by opkg (a debian style embedded package manager) +# - 'package_rpm' for rpm style packages +# E.g.: PACKAGE_CLASSES ?= "package_rpm package_deb package_ipk" +# We default to rpm: +PACKAGE_CLASSES ?= "package_rpm" + +# +# SDK/ADT target architecture +# +# This variable specifies the architecture to build SDK/ADT items for and means +# you can build the SDK packages for architectures other than the machine you are +# running the build on (i.e. building i686 packages on an x86_64 host). +# Supported values are i686 and x86_64 +#SDKMACHINE ?= "i686" + +SANITY_TESTED_DISTROS_append ?= " RedHatEnterpriseWorkstation-6.*" + +# +# Extra image configuration defaults +# +# The EXTRA_IMAGE_FEATURES variable allows extra packages to be added to the generated +# images. Some of these options are added to certain image types automatically. The +# variable can contain the following options: +# "dbg-pkgs" - add -dbg packages for all installed packages +# (adds symbol information for debugging/profiling) +# "dev-pkgs" - add -dev packages for all installed packages +# (useful if you want to develop against libs in the image) +# "ptest-pkgs" - add -ptest packages for all ptest-enabled packages +# (useful if you want to run the package test suites) +# "tools-sdk" - add development tools (gcc, make, pkgconfig etc.) +# "tools-debug" - add debugging tools (gdb, strace) +# "eclipse-debug" - add Eclipse remote debugging support +# "tools-profile" - add profiling tools (oprofile, exmap, lttng, valgrind) +# "tools-testapps" - add useful testing tools (ts_print, aplay, arecord etc.) +# "debug-tweaks" - make an image suitable for development +# e.g. ssh root access has a blank password +# There are other application targets that can be used here too, see +# meta/classes/image.bbclass and meta/classes/core-image.bbclass for more details. +# We default to enabling the debugging tweaks. +EXTRA_IMAGE_FEATURES = "debug-tweaks" + +# +# Additional image features +# +# The following is a list of additional classes to use when building images which +# enable extra features. Some available options which can be included in this variable +# are: +# - 'buildstats' collect build statistics +# - 'image-mklibs' to reduce shared library files size for an image +# - 'image-prelink' in order to prelink the filesystem image +# - 'image-swab' to perform host system intrusion detection +# NOTE: if listing mklibs & prelink both, then make sure mklibs is before prelink +# NOTE: mklibs also needs to be explicitly enabled for a given image, see local.conf.extended +USER_CLASSES ?= "buildstats image-mklibs image-prelink" + +# +# Runtime testing of images +# +# The build system can test booting virtual machine images under qemu (an emulator) +# after any root filesystems are created and run tests against those images. To +# enable this uncomment this line. See classes/testimage(-auto).bbclass for +# further details. +#TEST_IMAGE = "1" +# +# Interactive shell configuration +# +# Under certain circumstances the system may need input from you and to do this it +# can launch an interactive shell. It needs to do this since the build is +# multithreaded and needs to be able to handle the case where more than one parallel +# process may require the user's attention. The default is iterate over the available +# terminal types to find one that works. +# +# Examples of the occasions this may happen are when resolving patches which cannot +# be applied, to use the devshell or the kernel menuconfig +# +# Supported values are auto, gnome, xfce, rxvt, screen, konsole (KDE 3.x only), none +# Note: currently, Konsole support only works for KDE 3.x due to the way +# newer Konsole versions behave +#OE_TERMINAL = "auto" +# By default disable interactive patch resolution (tasks will just fail instead): +PATCHRESOLVE = "noop" + +# +# Disk Space Monitoring during the build +# +# Monitor the disk space during the build. If there is less that 1GB of space or less +# than 100K inodes in any key build location (TMPDIR, DL_DIR, SSTATE_DIR), gracefully +# shutdown the build. If there is less that 100MB or 1K inodes, perform a hard abort +# of the build. The reason for this is that running completely out of space can corrupt +# files and damages the build in ways which may not be easily recoverable. +# It's necessary to monitor /tmp, if there is no space left the build will fail +# with very exotic errors. +BB_DISKMON_DIRS = "\ + STOPTASKS,${TMPDIR},1G,100K \ + STOPTASKS,${DL_DIR},1G,100K \ + STOPTASKS,${SSTATE_DIR},1G,100K \ + STOPTASKS,/tmp,100M,100K \ + ABORT,${TMPDIR},100M,1K \ + ABORT,${DL_DIR},100M,1K \ + ABORT,${SSTATE_DIR},100M,1K \ + ABORT,/tmp,10M,1K" + +# +# Shared-state files from other locations +# +# As mentioned above, shared state files are prebuilt cache data objects which can +# used to accelerate build time. This variable can be used to configure the system +# to search other mirror locations for these objects before it builds the data itself. +# +# This can be a filesystem directory, or a remote url such as http or ftp. These +# would contain the sstate-cache results from previous builds (possibly from other +# machines). This variable works like fetcher MIRRORS/PREMIRRORS and points to the +# cache locations to check for the shared objects. +# NOTE: if the mirror uses the same structure as SSTATE_DIR, you need to add PATH +# at the end as shown in the examples below. This will be substituted with the +# correct path within the directory structure. +#SSTATE_MIRRORS ?= "\ +#file://.* http://someserver.tld/share/sstate/PATH;downloadfilename=PATH \n \ +#file://.* file:///some/local/dir/sstate/PATH" + + +# +# Qemu configuration +# +# By default qemu will build with a builtin VNC server where graphical output can be +# seen. The two lines below enable the SDL backend too. This assumes there is a +# libsdl library available on your build system. +PACKAGECONFIG_append_pn-qemu-native = " sdl" +PACKAGECONFIG_append_pn-nativesdk-qemu = " sdl" +#ASSUME_PROVIDED += "libsdl-native" + + +# CONF_VERSION is increased each time build/conf/ changes incompatibly and is used to +# track the version of this file when it was generated. This can safely be ignored if +# this doesn't mean anything to you. +CONF_VERSION = "1" + +# Set the root password to '0penBmc' +INHERIT += "extrausers" + +EXTRA_USERS_PARAMS = " \ + usermod -p '\$1\$UGMqyqdG\$FZiylVFmRRfl9Z0Ue8G7e/' root; \ + " diff --git a/meta-hpe/meta-dl360poc/conf/machine/dl360poc.conf b/meta-hpe/meta-dl360poc/conf/machine/dl360poc.conf new file mode 100644 index 000000000..1f27f8cbe --- /dev/null +++ b/meta-hpe/meta-dl360poc/conf/machine/dl360poc.conf @@ -0,0 +1,9 @@ +KERNEL_DEVICETREE = "gxp.dtb" + +require conf/machine/include/gxp.inc +require conf/machine/include/obmc-bsp-common.inc +require conf/machine/include/hpe.inc + +#PREFERRED_PROVIDER_virtual/phosphor-led-manager-config-native = "dl360poc-led-manager-config-native" + +VIRTUAL-RUNTIME_obmc-fan-control ?= "phosphor-pid-control" diff --git a/meta-hpe/meta-dl360poc/recipes-kernel/linux/linux-obmc/gxp.dts b/meta-hpe/meta-dl360poc/recipes-kernel/linux/linux-obmc/gxp.dts new file mode 100644 index 000000000..c11ccb023 --- /dev/null +++ b/meta-hpe/meta-dl360poc/recipes-kernel/linux/linux-obmc/gxp.dts @@ -0,0 +1,711 @@ +/dts-v1/; +/ { + #address-cells = <1>; + #size-cells = <1>; + compatible = "HPE,GXP"; + model = "GXP"; + + chosen { + bootargs = "earlyprintk console=ttyS0,115200 user_debug=31"; + }; + + aliases { + }; + + memory@40000000 { + device_type = "memory"; + reg = <0x40000000 0x20000000>; + }; + + ahb@80000000 { + compatible = "simple-bus"; + #address-cells = <1>; + #size-cells = <1>; + ranges; + + vic0: vic@ceff0000 { + compatible = "arm,pl192-vic"; + interrupt-controller; + reg = <0xceff0000 0x1000>; + #interrupt-cells = <1>; + }; + + vic1: vic@80f00000 { + compatible = "arm,pl192-vic"; + interrupt-controller; + reg = <0x80f00000 0x1000>; + #interrupt-cells = <1>; + }; + + timer0: timer@c0000080 { + compatible = "hpe,gxp-timer"; + reg = <0xc0000080 0x1>, <0xc0000094 0x01>, <0xc0000088 0x08>; + interrupts = <0>; + interrupt-parent = <&vic0>; + clock-frequency = <400000000>; + }; + + watchdog: watchdog@c0000090 { + compatible = "hpe,gxp-wdt"; + reg = <0xc0000090 0x02>, <0xc0000096 0x01>; + }; + + uartc: serial@c00000f0 { + compatible = "ns16550a"; + reg = <0xc00000f0 0x8>; + interrupts = <19>; + interrupt-parent = <&vic0>; + clock-frequency = <1846153>; + reg-shift = <0>; + }; + + uarta: serial@c00000e0 { + compatible = "ns16550a"; + reg = <0xc00000e0 0x8>; + interrupts = <17>; + interrupt-parent = <&vic0>; + clock-frequency = <1846153>; + reg-shift = <0>; + }; + + uartb: serial@c00000e8 { + compatible = "ns16550a"; + reg = <0xc00000e8 0x8>; + interrupts = <18>; + interrupt-parent = <&vic0>; + clock-frequency = <1846153>; + reg-shift = <0>; + }; + + vuart_a_cfg: vuarta_cfg@80fc0230 { + compatible = "hpe,gxp-vuarta_cfg", "simple-mfd", "syscon"; + reg = <0x80fc0230 0x100>; + reg-io-width = <1>; + }; + + vuart_a: vuart_a@80fd0200 { + compatible = "hpe,gxp-vuart"; + reg = <0x80fd0200 0x100>; + interrupts = <2>; + interrupt-parent = <&vic1>; + clock-frequency = <1846153>; + reg-shift = <0>; + status = "okay"; + serial-line = <3>; + vuart_cfg = <&vuart_a_cfg>; + }; + + spifi0: spifi@c0000200 { + compatible = "hpe,gxp-spifi"; + reg = <0xc0000200 0x80>, <0xc000c000 0x100>, <0xf8000000 0x8000000>; + interrupts = <20>; + interrupt-parent = <&vic0>; + #address-cells = <1>; + #size-cells = <0>; + + flash@0 { + compatible = "jedec,spi-nor"; + reg = <0>; + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + u-boot@0 { + label = "u-boot"; + reg = <0x0 0x60000>; + }; + u-boot-env@60000 { + label = "u-boot-env"; + reg = <0x60000 0x20000>; + }; + kernel@80000 { + label = "kernel"; + reg = <0x80000 0x4c0000>; + }; + rofs@540000 { + label = "rofs"; + reg = <0x540000 0x1740000>; + }; + rwfs@1c80000 { + label = "rwfs"; + reg = <0x1c80000 0x250000>; + }; + section@1edf000{ + labele = "section"; + reg = <0x1ed0000 0x130000>; + }; + }; + }; + + flash@1 { + compatible = "jedec,spi-nor"; + reg = <1>; + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + host-prime@0 { + label = "host-prime"; + reg = <0x0 0x02000000>; + }; + host-second@0 { + label = "host-second"; + reg = <0x02000000 0x02000000>; + }; + }; + }; + }; + + sram@d0000000 { + compatible = "mtd-ram"; + reg = <0xd0000000 0x80000>; + bank-width = <1>; + erase-size =<1>; + partition@0 { + label = "host-reserved"; + reg = <0x0 0x10000>; + }; + partition@10000 { + label = "nvram"; + reg = <0x10000 0x70000>; + }; + }; + + srom@80fc0000 { + compatible = "hpe,gxp-srom", "simple-mfd", "syscon"; + reg = <0x80fc0000 0x100>; + }; + + vrom@58000000 { + compatible = "mtd-ram"; + bank-width = <4>; + reg = <0x58000000 0x4000000>; + #address-cells = <1>; + #size-cells = <1>; + partition@0 { + label = "vrom-prime"; + reg = <0x0 0x2000000>; + }; + partition@2000000 { + label = "vrom-second"; + reg = <0x2000000 0x2000000>; + }; + }; + + i2cg: i2cg@c00000f8 { + compatible = "syscon"; + reg = <0xc00000f8 0x08>; + }; + + i2c0: i2c@c0002000 { + compatible = "hpe,gxp-i2c"; + reg = <0xc0002000 0x70>; + interrupts = <9>; + interrupt-parent = <&vic0>; + i2cg-handle = <&i2cg>; + #address-cells = <1>; + #size-cells = <0>; + }; + + i2c1: i2c@c0002100 { + compatible = "hpe,gxp-i2c"; + reg = <0xc0002100 0x70>; + interrupts = <9>; + interrupt-parent = <&vic0>; + i2cg-handle = <&i2cg>; + #address-cells = <1>; + #size-cells = <0>; + }; + + i2c2: i2c@c0002200 { + compatible = "hpe,gxp-i2c"; + reg = <0xc0002200 0x70>; + interrupts = <9>; + interrupt-parent = <&vic0>; + i2cg-handle = <&i2cg>; + #address-cells = <1>; + #size-cells = <0>; + + at24c02@50 { + compatible = "at24,24c02"; + pagesize = <8>; + reg = <0x50>; + }; + }; + + i2c3: i2c@c0002300 { + compatible = "hpe,gxp-i2c"; + reg = <0xc0002300 0x70>; + interrupts = <9>; + interrupt-parent = <&vic0>; + i2cg-handle = <&i2cg>; + #address-cells = <1>; + #size-cells = <0>; + }; + + i2c4: i2c@c0002400 { + compatible = "hpe,gxp-i2c"; + reg = <0xc0002400 0x70>; + interrupts = <9>; + interrupt-parent = <&vic0>; + i2cg-handle = <&i2cg>; + #address-cells = <1>; + #size-cells = <0>; + }; + + i2c5: i2c@c0002500 { + compatible = "hpe,gxp-i2c"; + reg = <0xc0002500 0x70>; + interrupts = <9>; + interrupt-parent = <&vic0>; + i2cg-handle = <&i2cg>; + #address-cells = <1>; + #size-cells = <0>; + + emc1402@4c { + compatible = "emc1402"; + reg = <0x4c>; + }; + + emc1404@1c { + compatible = "emc1404"; + reg = <0x1c>; + }; + }; + + i2c6: i2c@c0002600 { + compatible = "hpe,gxp-i2c"; + reg = <0xc0002600 0x70>; + interrupts = <9>; + interrupt-parent = <&vic0>; + i2cg-handle = <&i2cg>; + #address-cells = <1>; + #size-cells = <0>; + }; + + i2c7: i2c@c0002700 { + compatible = "hpe,gxp-i2c"; + reg = <0xc0002700 0x70>; + interrupts = <9>; + interrupt-parent = <&vic0>; + i2cg-handle = <&i2cg>; + #address-cells = <1>; + #size-cells = <0>; + + psu1: psu@58 { + compatible = "hpe,gxp-psu"; + reg = <0x58>; + }; + + psu2: psu@59 { + compatible = "hpe,gxp-psu"; + reg = <0x59>; + }; + }; + + i2c8: i2c@c0002800 { + compatible = "hpe,gxp-i2c"; + reg = <0xc0002800 0x70>; + interrupts = <9>; + interrupt-parent = <&vic0>; + i2cg-handle = <&i2cg>; + #address-cells = <1>; + #size-cells = <0>; + }; + + i2c9: i2c@c0002900 { + compatible = "hpe,gxp-i2c"; + reg = <0xc0002900 0x70>; + interrupts = <9>; + interrupt-parent = <&vic0>; + i2cg-handle = <&i2cg>; + #address-cells = <1>; + #size-cells = <0>; + }; + + i2cmux@4 { + compatible = "i2c-mux-reg"; + i2c-parent = <&i2c4>; + reg = <0xd1000374 1>; + #address-cells = <1>; + #size-cells = <0>; + + i2c4@1 { + reg = <1>; + #address-cells = <1>; + #size-cells = <0>; + }; + + i2c4@3 { + reg = <3>; + #address-cells = <1>; + #size-cells = <0>; + }; + + i2c4@4 { + reg = <4>; + #address-cells = <1>; + #size-cells = <0>; + }; + }; + + i2cmux@6 { + compatible = "i2c-mux-reg"; + i2c-parent = <&i2c6>; + reg = <0xd1000376 1>; + #address-cells = <1>; + #size-cells = <0>; + + i2c6@1 { + reg = <1>; + #address-cells = <1>; + #size-cells = <0>; + }; + + i2c6@2 { + reg = <2>; + #address-cells = <1>; + #size-cells = <0>; + }; + + i2c6@3 { + reg = <3>; + #address-cells = <1>; + #size-cells = <0>; + }; + + i2c6@4 { + reg = <4>; + #address-cells = <1>; + #size-cells = <0>; + }; + + i2c6@5 { + reg = <5>; + #address-cells = <1>; + #size-cells = <0>; + }; + }; + + mdio0: mdio@c0004080 { + compatible = "hpe,gxp-umac-mdio"; + reg = <0xc0004080 0x10>; + #address-cells = <1>; + #size-cells = <0>; + ext_phy0: ethernt-phy@0 { + compatible = "marvell,88e1415","ethernet-phy-ieee802.3-c22"; + phy-mode = "sgmii"; + reg = <0>; + }; + }; + + mdio1: mdio@c0005080 { + compatible = "hpe,gxp-umac-mdio"; + reg = <0xc0005080 0x10>; + #address-cells = <1>; + #size-cells = <0>; + int_phy0: ethernt-phy@0 { + compatible = "ethernet-phy-ieee802.3-c22"; + phy-mode = "gmii"; + reg = <0>; + }; + int_phy1: ethernt-phy@1 { + compatible = "ethernet-phy-ieee802.3-c22"; + phy-mode = "gmii"; + reg = <1>; + }; + }; + + umac0: umac@c0004000 { + compatible = "hpe, gxp-umac"; + reg = <0xc0004000 0x80>; + interrupts = <10>; + interrupt-parent = <&vic0>; + mac-address = [94 18 82 16 04 d8]; + phy-handle = <&ext_phy0>; + int-phy-handle = <&int_phy0>; + }; + + umac1: umac@c0005000 { + compatible = "hpe, gxp-umac"; + use-ncsi; + reg = <0xc0005000 0x80>; + interrupts = <11>; + interrupt-parent = <&vic0>; + mac-address = [94 18 82 16 04 d9]; + phy-handle = <&int_phy1>; + }; + + kcs_conf: kcs_conf@80fc0430 { + compatible = "hpe,gxp-kcs-bmc-cfg", "simple-mfd", "syscon"; + reg = <0x80fc0430 0x100>; + }; + + kcs_reg: kcs_reg@080fd0400 { + compatible = "hpe,gxp-kcs-bmc"; + reg = <0x80fd0400 0x8>; + interrupts = <6>; + interrupt-parent = <&vic1>; + kcs_chan = <1>; + status = "okay"; + kcs-bmc-cfg = <&kcs_conf>; + }; + + thumbnail: thumbnail@c0000500 { + compatible = "hpe,gxp-thumbnail"; + reg = <0xc0000500 0x20>; + bits-per-pixel = <32>; + width = <800>; + height = <600>; + }; + + xreg: xreg@d1000000 { + compatible = "hpe,gxp-xreg", "simple-mfd", "syscon"; + reg = <0xd1000300 0xFF>; + }; + + fanctrl: fanctrl@c1000c00 { + compatible = "hpe,gxp-fan-ctrl"; + reg = <0xc1000c00 0x200>; + xreg_handle = <&xreg>; + fn2_handle = <&fn2>; + }; + + fn2: fn2@80200000 { + compatible = "hpe,gxp-fn2", "simple-mfd", "syscon"; + reg = <0x80200000 0x100000>; + interrupts = <0>; + interrupt-parent = <&vic1>; + }; + + csm: csm@80000000 { + compatible = "hpe,gxp-csm", "simple-mfd", "syscon"; + reg = <0x80000000 0x100000>; + }; + + gpio: gpio { + compatible = "hpe,gxp-gpio"; + #gpio-cells = <2>; + csm_handle = <&csm>; + fn2_handle = <&fn2>; + xreg_handle = <&xreg>; + vuhc0_handle = <&vuhc0>; + interrupts = <26>; + interrupt-parent = <&vic0>; + }; + + leds: leds { + compatible = "gpio-leds"; + + power { + gpios = <&gpio 306 0>; + default-state = "off"; + }; + + heartbeat { + gpios = <&gpio 307 0>; + default-state = "off"; + }; + + identify { + gpios = <&gpio 356 0>; + default-state = "off"; + }; + + health_red { + gpios = <&gpio 357 0>; + default-state = "off"; + }; + + health_amber { + gpios = <&gpio 358 0>; + default-state = "off"; + }; + }; + + presence: presence { + compatible = "gpio-keys-polled"; + poll-interval = <100>; + autorepeat; + + fan1 { + label = "fan1 presence"; + linux,code = <200>; + gpios = <&gpio 308 0>; + }; + + fan2 { + label = "fan2 presence"; + linux,code = <201>; + gpios = <&gpio 309 0>; + }; + + fan3 { + label = "fan3 presence"; + linux,code = <202>; + gpios = <&gpio 310 0>; + }; + + fan4 { + label = "fan4 presence"; + linux,code = <203>; + gpios = <&gpio 311 0>; + }; + + fan5 { + label = "fan5 presence"; + linux,code = <204>; + gpios = <&gpio 312 0>; + }; + + fan6 { + label = "fan6 presence"; + linux,code = <205>; + gpios = <&gpio 313 0>; + }; + + fan7 { + label = "fan7 presence"; + linux,code = <206>; + gpios = <&gpio 314 0>; + }; + + fan8 { + label = "fan8 presence"; + linux,code = <207>; + gpios = <&gpio 315 0>; + }; + + fan9 { + label = "fan9 presence"; + linux,code = <208>; + gpios = <&gpio 316 0>; + }; + + fan10 { + label = "fan10 presence"; + linux,code = <209>; + gpios = <&gpio 317 0>; + }; + + fan11 { + label = "fan11 presence"; + linux,code = <210>; + gpios = <&gpio 318 0>; + }; + + fan12 { + label = "fan12 presence"; + linux,code = <211>; + gpios = <&gpio 319 0>; + }; + + fan13 { + label = "fan13 presence"; + linux,code = <212>; + gpios = <&gpio 320 0>; + }; + + fan14 { + label = "fan14 presence"; + linux,code = <213>; + gpios = <&gpio 321 0>; + }; + + fan15 { + label = "fan15 presence"; + linux,code = <214>; + gpios = <&gpio 322 0>; + }; + + fan16 { + label = "fan16 presence"; + linux,code = <215>; + gpios = <&gpio 323 0>; + }; + }; + + vuhc: vuhc { + compatible = "gpio-keys-polled"; + poll-interval = <100>; + + PortOwner@0 { + label = "Port Owner"; + linux,code = <200>; + gpios = <&gpio 250 1>; + }; + + PortOwner@1 { + label = "Port Owner"; + linux,code = <201>; + gpios = <&gpio 251 1>; + }; + }; + + vuhc0: vuhc@80400080 { + compatible = "syscon"; + reg = <0x80400000 0x80>; + }; + + udcg: udcg@80400800 { + compatible = "syscon"; + reg = <0x80400800 0x200>; + }; + + udc0: udc@80401000 { + compatible = "hpe, gxp-udc"; + reg = <0x80401000 0x1000>; + interrupts = <13>; + interrupt-parent = <&vic1>; + vdevnum = <0>; + fepnum = <7>; + udcg-handle = <&udcg>; + }; + + udc1: udc@80402000 { + compatible = "hpe, gxp-udc"; + reg = <0x80402000 0x1000>; + interrupts = <13>; + interrupt-parent = <&vic1>; + vdevnum = <1>; + fepnum = <7>; + udcg-handle = <&udcg>; + }; + + coretemp: coretemp@c0000130 { + compatible = "hpe,gxp-coretemp"; + reg = <0xc0000130 0x8>; + }; + + syspower: syspower { + compatible = "hpe,gxp-power"; + psu_phandle = <&psu1>, <&psu2>; + }; + }; + + clocks { + osc: osc { + compatible = "fixed-clock"; + #clock-cells = <0>; + clock-output-names = "osc"; + clock-frequency = <33333333>; + }; + + iopclk: iopclk { + compatible = "fixed-clock"; + #clock-cells = <0>; + clocks = <&osc>; + clock-out-put-names = "iopclk"; + clock-frequency = <400000000>; + }; + + memclk: memclk { + compatible = "fixed-clock"; + #clock-cells = <0>; + clocks = <&osc>; + clock-out-put-names = "memclk"; + clock-frequency = <800000000>; + }; + }; +}; diff --git a/meta-hpe/meta-dl360poc/recipes-kernel/linux/linux-obmc_%.bbappend b/meta-hpe/meta-dl360poc/recipes-kernel/linux/linux-obmc_%.bbappend new file mode 100644 index 000000000..57be249c9 --- /dev/null +++ b/meta-hpe/meta-dl360poc/recipes-kernel/linux/linux-obmc_%.bbappend @@ -0,0 +1,15 @@ +FILESEXTRAPATHS_prepend := "${THISDIR}/linux-obmc:" +SRC_URI += "file://gxp.dts \ + " + +do_patch_append() { + for DTB in "${KERNEL_DEVICETREE}"; do + DT=`basename ${DTB} .dtb` + if [ -r "${WORKDIR}/${DT}.dts" ]; then + cp ${WORKDIR}/${DT}.dts \ + ${STAGING_KERNEL_DIR}/arch/${ARCH}/boot/dts + fi + done + +} + diff --git a/meta-hpe/meta-dl360poc/recipes-phosphor/image/obmc-phosphor-image.bbappend b/meta-hpe/meta-dl360poc/recipes-phosphor/image/obmc-phosphor-image.bbappend new file mode 100644 index 000000000..ad672452a --- /dev/null +++ b/meta-hpe/meta-dl360poc/recipes-phosphor/image/obmc-phosphor-image.bbappend @@ -0,0 +1,23 @@ + + +do_generate_hpe_image() { + # Add gxp-bootblock to hpe-section + dd bs=1k conv=notrunc seek=64 \ + if=${DEPLOY_DIR_IMAGE}/${HPE_GXP_BOOTBLOCK_IMAGE} \ + of=${DEPLOY_DIR_IMAGE}/hpe-section +} + +do_generate_static_tar() { + + ln -sf ${S}/MANIFEST MANIFEST + ln -sf ${S}/publickey publickey + make_image_links ${OVERLAY_BASETYPE} ${IMAGE_BASETYPE} + + make_signatures image-u-boot image-kernel image-rofs image-rwfs image-section MANIFEST publickey + make_tar_of_images static MANIFEST publickey ${signature_files} + + # Maintain non-standard legacy link. + cd ${IMGDEPLOYDIR} + ln -sf ${IMAGE_NAME}.static.mtd.tar ${IMGDEPLOYDIR}/${MACHINE}-${DATETIME}.tar +} + diff --git a/meta-hpe/meta-gxp/classes/gxp-bootblock-n-poc.bbclass b/meta-hpe/meta-gxp/classes/gxp-bootblock-n-poc.bbclass new file mode 100644 index 000000000..206203055 --- /dev/null +++ b/meta-hpe/meta-gxp/classes/gxp-bootblock-n-poc.bbclass @@ -0,0 +1,20 @@ +LICENSE = "CLOSED" +LIC_FILES_CHKSUM = "" + + +BBRANCH = "master" +SRC_URI = "git://github.com/HewlettPackard/gxp-bootblock.git;branch=${BBRANCH}" +SRCREV = "1d4b424934ab3a2f22cf1b9a459a38e45971509f" +S = "${WORKDIR}/git" + +inherit deploy + +do_deploy () { + install -d ${DEPLOYDIR} + + install -m 644 gxp-bootblock-dl360poc.bin ${DEPLOYDIR}/gxp-bootblock.bin + +} + +addtask deploy before do_build after do_compile + diff --git a/meta-hpe/meta-gxp/conf/layer.conf b/meta-hpe/meta-gxp/conf/layer.conf new file mode 100644 index 000000000..eafb7badb --- /dev/null +++ b/meta-hpe/meta-gxp/conf/layer.conf @@ -0,0 +1,12 @@ +# We have a conf and classes directory, add to BBPATH +BBPATH .= ":${LAYERDIR}" + +BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \ + ${LAYERDIR}/recipes-*/*/*.bbappend" + +BBFILE_COLLECTIONS += "gxp-layer" +BBFILE_PATTERN_gxp-layer = "^${LAYERDIR}/" +LAYERVERSION_gxp-layer = "1" +LAYERSERIES_COMPAT_gxp-layer = "zeus warrior dunfell" + +GXPBASE = '${@os.path.normpath("${LAYERDIR}/")}' diff --git a/meta-hpe/meta-gxp/conf/machine/include/gxp.inc b/meta-hpe/meta-gxp/conf/machine/include/gxp.inc new file mode 100644 index 000000000..8f515d99a --- /dev/null +++ b/meta-hpe/meta-gxp/conf/machine/include/gxp.inc @@ -0,0 +1,22 @@ +#@TYPE: Machine +#@NAME: HPE GXP +#@DESCRIPTION: Common machine configuration for the HPE GXP Chip + +require conf/machine/include/hpe_soc.inc + +UBOOT_ARCH ?= "arm" + +DISTRO_FEATURES ?= "ipv4 ipv6" + +SOC_FAMILY = "gxp-b1" +include conf/machine/include/soc-family.inc +MACHINEOVERRIDES .= ":gxp" + +DEFAULTTUNE ?= "armv6-novfp" +require conf/machine/include/arm/arch-armv6.inc + +UBOOT_MACHINE = "gxp_defconfig" +UBOOT_ENTRYPOINT = "0x40100000" +UBOOT_LOADADDRESS = "0x40100000" + + diff --git a/meta-hpe/meta-gxp/conf/machine/include/hpe_soc.inc b/meta-hpe/meta-gxp/conf/machine/include/hpe_soc.inc new file mode 100644 index 000000000..016d9c675 --- /dev/null +++ b/meta-hpe/meta-gxp/conf/machine/include/hpe_soc.inc @@ -0,0 +1,6 @@ +PREFERRED_PROVIDER_virtual/kernel ?= "linux-obmc" + +PREFERRED_PROVIDER_virtual/bootloader ?= "u-boot-gxp" +PREFERRED_PROVIDER_u-boot ?= "u-boot-gxp" +//PREFERRED_PROVIDER_u-boot-fw-utils ?= "u-boot-fw-utils-gxp" + diff --git a/meta-hpe/meta-gxp/recipes-bsp/image/gxp-bootblock.bb b/meta-hpe/meta-gxp/recipes-bsp/image/gxp-bootblock.bb new file mode 100644 index 000000000..969937551 --- /dev/null +++ b/meta-hpe/meta-gxp/recipes-bsp/image/gxp-bootblock.bb @@ -0,0 +1 @@ +inherit gxp-bootblock-n-poc diff --git a/meta-hpe/meta-gxp/recipes-bsp/u-boot/u-boot-common-gxp_2019.07.inc b/meta-hpe/meta-gxp/recipes-bsp/u-boot/u-boot-common-gxp_2019.07.inc new file mode 100644 index 000000000..13cd7b42a --- /dev/null +++ b/meta-hpe/meta-gxp/recipes-bsp/u-boot/u-boot-common-gxp_2019.07.inc @@ -0,0 +1,16 @@ +HOMEPAGE = "https://www.github.com/HewlettPackard/gxp-uboot" +DEPENDS += "flex-native bison-native bc-native" + +LICENSE = "GPLv2+" +LIC_FILES_CHKSUM = "file://Licenses/gpl-2.0.txt;md5=b234ee4d69f5fce4486a80fdaf4a4263" +PE = "1" + +# We use the revision in order to avoid having to fetch it from the +# repo during parse +SRCREV = "e15b2ace2d7f38d470ba3b0415d47e05281c7660" +UBRANCH = "v2019.07-gxp-openbmc" +SRC_URI = "git://github.com/HewlettPackard/gxp-uboot.git;branch=${UBRANCH}" + +S = "${WORKDIR}/git" + +PV = "v2019.07+git${SRCPV}" diff --git a/meta-hpe/meta-gxp/recipes-bsp/u-boot/u-boot-gxp_2019.07.bb b/meta-hpe/meta-gxp/recipes-bsp/u-boot/u-boot-gxp_2019.07.bb new file mode 100644 index 000000000..58a65b398 --- /dev/null +++ b/meta-hpe/meta-gxp/recipes-bsp/u-boot/u-boot-gxp_2019.07.bb @@ -0,0 +1,7 @@ +require recipes-bsp/u-boot/u-boot-common.inc +require recipes-bsp/u-boot/u-boot.inc +require u-boot-common-gxp_2019.07.inc + +S = "${WORKDIR}/git" + +PROVIDES += "u-boot" diff --git a/meta-hpe/meta-gxp/recipes-core/udev/udev-gxp-mtd-partitions.bb b/meta-hpe/meta-gxp/recipes-core/udev/udev-gxp-mtd-partitions.bb new file mode 100644 index 000000000..dc185655b --- /dev/null +++ b/meta-hpe/meta-gxp/recipes-core/udev/udev-gxp-mtd-partitions.bb @@ -0,0 +1,15 @@ +SUMMARY = "udev rules for MTD partitions" +DESCRIPTION = "udev rules for MTD partitions" +PR = "r1" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" + +S = "${WORKDIR}" +SRC_URI += "file://76-gxp-mtd-partitions.rules" + +RDEPENDS_${PN} += "udev" + +do_install() { + install -d ${D}/${base_libdir}/udev/rules.d + install -m 0644 ${WORKDIR}/76-gxp-mtd-partitions.rules ${D}/${base_libdir}/udev/rules.d +} diff --git a/meta-hpe/meta-gxp/recipes-core/udev/udev-gxp-mtd-partitions/76-gxp-mtd-partitions.rules b/meta-hpe/meta-gxp/recipes-core/udev/udev-gxp-mtd-partitions/76-gxp-mtd-partitions.rules new file mode 100644 index 000000000..28e458645 --- /dev/null +++ b/meta-hpe/meta-gxp/recipes-core/udev/udev-gxp-mtd-partitions/76-gxp-mtd-partitions.rules @@ -0,0 +1 @@ +ENV{DEVTYPE}=="mtd", SYMLINK+="mtd/%s{name}" diff --git a/meta-hpe/meta-gxp/recipes-kernel/linux/linux-obmc.inc b/meta-hpe/meta-gxp/recipes-kernel/linux/linux-obmc.inc new file mode 100644 index 000000000..40de352f3 --- /dev/null +++ b/meta-hpe/meta-gxp/recipes-kernel/linux/linux-obmc.inc @@ -0,0 +1,23 @@ +DESCRIPTION = "Linux kernel for GXP" +SECTION = "kernel" +LICENSE = "GPLv2" + +PROVIDES += "virtual/kernel" + +KCONFIG_MODE="--alldefconfig" + +KSRC ?= "git://github.com/HewlettPackard/gxp-linux.git;branch=${KBRANCH}" +SRC_URI = "${KSRC}" +SRC_URI += " file://defconfig" + +FILESEXTRAPATHS_prepend_linux-obmc := "${THISDIR}/linux-obmc:" + +LINUX_VERSION_EXTENSION ?= "-${SRCREV}" + +PV = "${LINUX_VERSION}+git${SRCPV}" + +inherit kernel +require recipes-kernel/linux/linux-yocto.inc + +# From 4.16+ the COPYING file changed +LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46" diff --git a/meta-hpe/meta-gxp/recipes-kernel/linux/linux-obmc/defconfig b/meta-hpe/meta-gxp/recipes-kernel/linux/linux-obmc/defconfig new file mode 100644 index 000000000..1507daf83 --- /dev/null +++ b/meta-hpe/meta-gxp/recipes-kernel/linux/linux-obmc/defconfig @@ -0,0 +1,264 @@ +CONFIG_KERNEL_XZ=y +CONFIG_DEFAULT_HOSTNAME="gxp" +CONFIG_SYSVIPC=y +CONFIG_NO_HZ=y +CONFIG_HIGH_RES_TIMERS=y +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_BSD_PROCESS_ACCT_V3=y +CONFIG_LOG_BUF_SHIFT=18 +CONFIG_CFS_BANDWIDTH=y +CONFIG_RT_GROUP_SCHED=y +CONFIG_CGROUP_FREEZER=y +CONFIG_CGROUP_DEVICE=y +CONFIG_CGROUP_CPUACCT=y +CONFIG_CGROUP_BPF=y +CONFIG_NAMESPACES=y +CONFIG_SCHED_AUTOGROUP=y +CONFIG_RELAY=y +CONFIG_BLK_DEV_INITRD=y +CONFIG_KALLSYMS_ALL=y +CONFIG_BPF_SYSCALL=y +CONFIG_EMBEDDED=y +# CONFIG_COMPAT_BRK is not set +CONFIG_SLAB=y +CONFIG_ARCH_MULTI_V6=y +CONFIG_ARCH_HPE=y +CONFIG_ARCH_HPE_GXP=y +CONFIG_SECCOMP=y +# CONFIG_ATAGS is not set +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +# CONFIG_SUSPEND is not set +CONFIG_ARM_CRYPTO=y +CONFIG_CRYPTO_SHA1_ARM=y +CONFIG_CRYPTO_SHA256_ARM=y +CONFIG_CRYPTO_SHA512_ARM=y +CONFIG_CRYPTO_AES_ARM=y +CONFIG_CRYPTO_CHACHA20_NEON=y +CONFIG_CRYPTO_POLY1305_ARM=y +CONFIG_JUMP_LABEL=y +# CONFIG_STRICT_KERNEL_RWX is not set +# CONFIG_BLK_DEBUG_FS is not set +# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set +CONFIG_KSM=y +CONFIG_CLEANCACHE=y +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_PACKET_DIAG=y +CONFIG_UNIX=y +CONFIG_UNIX_DIAG=y +CONFIG_XFRM_USER=y +CONFIG_XFRM_STATISTICS=y +CONFIG_INET=y +CONFIG_IPV6_ROUTER_PREF=y +CONFIG_IPV6_ROUTE_INFO=y +# CONFIG_IPV6_SIT is not set +CONFIG_BPFILTER=y +CONFIG_VLAN_8021Q=y +CONFIG_NETLINK_DIAG=y +# CONFIG_WIRELESS is not set +CONFIG_DEVTMPFS=y +CONFIG_DEVTMPFS_MOUNT=y +# CONFIG_STANDALONE is not set +CONFIG_MTD=y +CONFIG_MTD_BLOCK=y +CONFIG_MTD_PHYSMAP=y +CONFIG_MTD_PHYSMAP_OF=y +CONFIG_MTD_PLATRAM=y +CONFIG_MTD_SPI_NOR=y +CONFIG_SPI_GXP_SPIFI=y +CONFIG_BLK_DEV_NULL_BLK=y +CONFIG_BLK_DEV_LOOP=y +CONFIG_BLK_DEV_NBD=y +CONFIG_BLK_DEV_RAM=y +CONFIG_EEPROM_AT24=y +CONFIG_SCSI=y +CONFIG_BLK_DEV_SD=y +# CONFIG_SCSI_LOWLEVEL is not set +CONFIG_NETDEVICES=y +# CONFIG_NET_VENDOR_ALACRITECH is not set +# CONFIG_NET_VENDOR_AMAZON is not set +# CONFIG_NET_VENDOR_AQUANTIA is not set +# CONFIG_NET_VENDOR_ARC is not set +# CONFIG_NET_VENDOR_AURORA is not set +# CONFIG_NET_VENDOR_BROADCOM is not set +# CONFIG_NET_VENDOR_CADENCE is not set +# CONFIG_NET_VENDOR_CAVIUM is not set +# CONFIG_NET_VENDOR_CIRRUS is not set +# CONFIG_NET_VENDOR_CORTINA is not set +# CONFIG_NET_VENDOR_EZCHIP is not set +# CONFIG_NET_VENDOR_FARADAY is not set +# CONFIG_NET_VENDOR_GOOGLE is not set +# CONFIG_NET_VENDOR_HISILICON is not set +# CONFIG_NET_VENDOR_HUAWEI is not set +# CONFIG_NET_VENDOR_INTEL is not set +# CONFIG_NET_VENDOR_MARVELL is not set +# CONFIG_NET_VENDOR_MELLANOX is not set +# CONFIG_NET_VENDOR_MICREL is not set +# CONFIG_NET_VENDOR_MICROCHIP is not set +# CONFIG_NET_VENDOR_MICROSEMI is not set +# CONFIG_NET_VENDOR_NATSEMI is not set +# CONFIG_NET_VENDOR_NETRONOME is not set +# CONFIG_NET_VENDOR_NI is not set +# CONFIG_NET_VENDOR_PENSANDO is not set +# CONFIG_NET_VENDOR_QUALCOMM is not set +# CONFIG_NET_VENDOR_RENESAS is not set +# CONFIG_NET_VENDOR_ROCKER is not set +# CONFIG_NET_VENDOR_SAMSUNG is not set +# CONFIG_NET_VENDOR_SEEQ is not set +# CONFIG_NET_VENDOR_SOLARFLARE is not set +# CONFIG_NET_VENDOR_SMSC is not set +# CONFIG_NET_VENDOR_SOCIONEXT is not set +# CONFIG_NET_VENDOR_STMICRO is not set +# CONFIG_NET_VENDOR_SYNOPSYS is not set +# CONFIG_NET_VENDOR_VIA is not set +# CONFIG_NET_VENDOR_WIZNET is not set +# CONFIG_NET_VENDOR_XILINX is not set +CONFIG_UMAC=y +# CONFIG_USB_NET_DRIVERS is not set +# CONFIG_WLAN is not set +# CONFIG_INPUT_LEDS is not set +CONFIG_INPUT_EVDEV=y +# CONFIG_KEYBOARD_ATKBD is not set +CONFIG_KEYBOARD_GPIO=y +CONFIG_KEYBOARD_GPIO_POLLED=y +# CONFIG_INPUT_MOUSE is not set +CONFIG_VT_HW_CONSOLE_BINDING=y +# CONFIG_LEGACY_PTYS is not set +CONFIG_SERIAL_8250=y +# CONFIG_SERIAL_8250_DEPRECATED_OPTIONS is not set +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_SERIAL_8250_NR_UARTS=6 +CONFIG_SERIAL_8250_RUNTIME_UARTS=6 +CONFIG_SERIAL_8250_EXTENDED=y +CONFIG_SERIAL_8250_SHARE_IRQ=y +CONFIG_SERIAL_8250_GXP_VUART=y +CONFIG_SERIAL_OF_PLATFORM=y +CONFIG_TTY_PRINTK=y +CONFIG_IPMI_HANDLER=y +CONFIG_IPMI_DEVICE_INTERFACE=y +CONFIG_IPMI_SI=y +CONFIG_IPMI_SSIF=y +CONFIG_HPE_KCS_IPMI_BMC=y +CONFIG_HW_RANDOM_TIMERIOMEM=y +CONFIG_I2C_CHARDEV=y +CONFIG_I2C_GXP=y +CONFIG_I2C_SLAVE=y +CONFIG_I2C_SLAVE_EEPROM=y +CONFIG_I2C_SLAVE_MQUEUE=y +CONFIG_SPI=y +CONFIG_GPIOLIB=y +CONFIG_GPIO_SYSFS=y +CONFIG_GPIO_GXP=y +CONFIG_SENSORS_EMC1403=y +CONFIG_SENSORS_GXP_FAN_CTRL=y +CONFIG_SENSORS_GXP_CORETEMP=y +CONFIG_SENSORS_GXP_PSU=y +CONFIG_SENSORS_GXP_POWER=y +CONFIG_WATCHDOG=y +CONFIG_GXP_WATCHDOG=y +CONFIG_MFD_SYSCON=y +CONFIG_FB=y +CONFIG_FB_THUMBNAIL=y +CONFIG_USB_HIDDEV=y +CONFIG_USB=y +CONFIG_USB_ANNOUNCE_NEW_DEVICES=y +CONFIG_USB_XHCI_HCD=y +CONFIG_USB_EHCI_HCD=y +CONFIG_USB_EHCI_ROOT_HUB_TT=y +CONFIG_USB_OHCI_HCD=y +CONFIG_USB_OHCI_HCD_PLATFORM=y +CONFIG_USB_STORAGE=y +CONFIG_USB_GADGET=y +CONFIG_USB_GXP_UDC=y +CONFIG_USB_CONFIGFS=y +CONFIG_USB_CONFIGFS_SERIAL=y +CONFIG_USB_CONFIGFS_ACM=y +CONFIG_USB_CONFIGFS_OBEX=y +CONFIG_USB_CONFIGFS_NCM=y +CONFIG_USB_CONFIGFS_ECM=y +CONFIG_USB_CONFIGFS_ECM_SUBSET=y +CONFIG_USB_CONFIGFS_RNDIS=y +CONFIG_USB_CONFIGFS_EEM=y +CONFIG_USB_CONFIGFS_MASS_STORAGE=y +CONFIG_USB_CONFIGFS_F_LB_SS=y +CONFIG_USB_CONFIGFS_F_FS=y +CONFIG_USB_CONFIGFS_F_HID=y +CONFIG_USB_CONFIGFS_F_PRINTER=y +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y +CONFIG_LEDS_GPIO=y +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_TRIGGER_TIMER=y +CONFIG_LEDS_TRIGGER_ONESHOT=y +CONFIG_LEDS_TRIGGER_MTD=y +CONFIG_LEDS_TRIGGER_HEARTBEAT=y +CONFIG_LEDS_TRIGGER_CPU=y +CONFIG_LEDS_TRIGGER_GPIO=y +CONFIG_LEDS_TRIGGER_DEFAULT_ON=y +CONFIG_LEDS_TRIGGER_TRANSIENT=y +CONFIG_LEDS_TRIGGER_PANIC=y +# CONFIG_VIRTIO_MENU is not set +# CONFIG_VHOST_MENU is not set +# CONFIG_IOMMU_SUPPORT is not set +CONFIG_HPE_GXP_XREG=y +CONFIG_HPE_GXP_FN2=y +CONFIG_HPE_GXP_CSM=y +CONFIG_HPE_GXP_SROM=y +CONFIG_PECI=y +CONFIG_PECI_CHARDEV=y +CONFIG_FANOTIFY=y +CONFIG_AUTOFS_FS=y +CONFIG_OVERLAY_FS=y +CONFIG_OVERLAY_FS_REDIRECT_DIR=y +CONFIG_TMPFS=y +CONFIG_TMPFS_POSIX_ACL=y +CONFIG_JFFS2_FS=y +# CONFIG_JFFS2_FS_WRITEBUFFER is not set +CONFIG_JFFS2_SUMMARY=y +CONFIG_JFFS2_FS_XATTR=y +# CONFIG_JFFS2_FS_POSIX_ACL is not set +# CONFIG_JFFS2_FS_SECURITY is not set +CONFIG_SQUASHFS=y +CONFIG_SQUASHFS_XZ=y +CONFIG_SQUASHFS_ZSTD=y +CONFIG_SQUASHFS_4K_DEVBLK_SIZE=y +# CONFIG_NETWORK_FILESYSTEMS is not set +CONFIG_NLS_CODEPAGE_437=y +CONFIG_NLS_ASCII=y +CONFIG_NLS_ISO8859_1=y +CONFIG_NLS_UTF8=y +CONFIG_CRYPTO_CCM=y +CONFIG_CRYPTO_GCM=y +CONFIG_CRYPTO_CRC32C=y +CONFIG_CRYPTO_ARC4=y +CONFIG_CRYPTO_DEFLATE=y +CONFIG_CRYPTO_LZO=y +CONFIG_CRYPTO_ZSTD=y +CONFIG_CRYPTO_USER_API_HASH=y +# CONFIG_CRYPTO_HW is not set +CONFIG_CRC16=y +# CONFIG_XZ_DEC_X86 is not set +# CONFIG_XZ_DEC_POWERPC is not set +# CONFIG_XZ_DEC_IA64 is not set +# CONFIG_XZ_DEC_SPARC is not set +CONFIG_PRINTK_TIME=y +CONFIG_BOOT_PRINTK_DELAY=y +CONFIG_DYNAMIC_DEBUG=y +CONFIG_DEBUG_INFO=y +# CONFIG_ENABLE_MUST_CHECK is not set +CONFIG_MAGIC_SYSRQ=y +CONFIG_PANIC_ON_OOPS=y +CONFIG_SCHED_TRACER=y +CONFIG_STACK_TRACER=y +CONFIG_FUNCTION_PROFILER=y +CONFIG_TEST_KSTRTOX=y +CONFIG_STRICT_DEVMEM=y +CONFIG_DEBUG_USER=y +CONFIG_DEBUG_LL=y +CONFIG_DEBUG_LL_UART_8250=y +CONFIG_DEBUG_UART_PHYS=0xC00000F0 +CONFIG_DEBUG_UART_VIRT=0xF00000F0 +CONFIG_DEBUG_UART_8250_SHIFT=0 +CONFIG_EARLY_PRINTK=y +CONFIG_UNWINDER_FRAME_POINTER=y diff --git a/meta-hpe/meta-gxp/recipes-kernel/linux/linux-obmc/phosphor-gpio-keys.cfg b/meta-hpe/meta-gxp/recipes-kernel/linux/linux-obmc/phosphor-gpio-keys.cfg new file mode 100644 index 000000000..f5c01bed7 --- /dev/null +++ b/meta-hpe/meta-gxp/recipes-kernel/linux/linux-obmc/phosphor-gpio-keys.cfg @@ -0,0 +1,7 @@ +CONFIG_INPUT_KEYBOARD=y +# CONFIG_INPUT_LEDS is not set +# CONFIG_INPUT_MOUSDEV is not set +CONFIG_INPUT_EVDEV=y +# CONFIG_KEYBOARD_ATKBD is not set +CONFIG_KEYBOARD_GPIO=y +# CONFIG_INPUT_MOUSE is not set diff --git a/meta-hpe/meta-gxp/recipes-kernel/linux/linux-obmc/phosphor-gpio-keys.scc b/meta-hpe/meta-gxp/recipes-kernel/linux/linux-obmc/phosphor-gpio-keys.scc new file mode 100644 index 000000000..78961af7a --- /dev/null +++ b/meta-hpe/meta-gxp/recipes-kernel/linux/linux-obmc/phosphor-gpio-keys.scc @@ -0,0 +1,2 @@ +define KFEATURE_DESCRIPTION "Enable gpio-keys" +kconf non-hardware phosphor-gpio-keys.cfg diff --git a/meta-hpe/meta-gxp/recipes-kernel/linux/linux-obmc_5.7.bb b/meta-hpe/meta-gxp/recipes-kernel/linux/linux-obmc_5.7.bb new file mode 100644 index 000000000..8f5a627ed --- /dev/null +++ b/meta-hpe/meta-gxp/recipes-kernel/linux/linux-obmc_5.7.bb @@ -0,0 +1,12 @@ +KBRANCH ?= "dev-5.7-gxp-openbmc" +LINUX_VERSION ?= "5.7.10" + +SRCREV="1ca49db2b4baf304d29396a603d0308770797a5c" +require linux-obmc.inc + +SRC_URI += "file://phosphor-gpio-keys.scc" +SRC_URI += "file://phosphor-gpio-keys.cfg" + +# OpenBMC loads in kernel features via other mechanisms so this check +# in the kernel-yocto.bbclass is not required +KERNEL_DANGLING_FEATURES_WARN_ONLY="1" |