project-lakitu: add open source TPU drivers
BUG=b/214598029
TEST=presubmit
RELEASE_NOTE=Added TPU driver v20220117.
Change-Id: Ic95e03d1ec78b9d59c2f8e8fe2dafb54dc557d01
Reviewed-on: https://cos-review.googlesource.com/c/cos/overlays/board-overlays/+/32942
Tested-by: Cusky Presubmit Bot <presubmit@cos-infra-prod.iam.gserviceaccount.com>
Reviewed-by: Meena Shanmugam <meenashanmugam@google.com>
diff --git a/project-lakitu/profiles/platform/gcp/make.defaults b/project-lakitu/profiles/platform/gcp/make.defaults
index b492e3c..7f1da71 100644
--- a/project-lakitu/profiles/platform/gcp/make.defaults
+++ b/project-lakitu/profiles/platform/gcp/make.defaults
@@ -15,3 +15,6 @@
# Enable GCP-specific settings
USE="${USE} platform_gcp"
+
+# Enable TPU kernel driver
+USE="${USE} tpu"
diff --git a/project-lakitu/sys-apps/tpu-drivers/Manifest b/project-lakitu/sys-apps/tpu-drivers/Manifest
new file mode 100644
index 0000000..4e5674b
--- /dev/null
+++ b/project-lakitu/sys-apps/tpu-drivers/Manifest
@@ -0,0 +1 @@
+DIST cb119a8607ee9bb70542867579dc9b6e69a85c5a.tar.gz 41950206 BLAKE2B 9a686a59186f6735729fda7d1735671ea1e3adf15d594996132235cf9e904424b48471ee6cb5400e1fb1b56fccd5d3579743db01ddaaad57e1092a5d52fe5491 SHA512 61c077557525ea9d539fa33e916de0392e216884bba7d3bc540ea4fd77adb82a0f4e7fbb3a6bb73ee8390227869c6d6a56a336659903b77adc70e8c3e31d2b20
diff --git a/project-lakitu/sys-apps/tpu-drivers/files/99-tpu.rules b/project-lakitu/sys-apps/tpu-drivers/files/99-tpu.rules
new file mode 100644
index 0000000..70f89f5
--- /dev/null
+++ b/project-lakitu/sys-apps/tpu-drivers/files/99-tpu.rules
@@ -0,0 +1 @@
+KERNEL=="accel*", MODE="0666"
diff --git a/project-lakitu/sys-apps/tpu-drivers/files/tpu-drivers-5.10-include-fix.patch b/project-lakitu/sys-apps/tpu-drivers/files/tpu-drivers-5.10-include-fix.patch
new file mode 100644
index 0000000..2697e6d
--- /dev/null
+++ b/project-lakitu/sys-apps/tpu-drivers/files/tpu-drivers-5.10-include-fix.patch
@@ -0,0 +1,12 @@
+diff --git a/drivers/accel/accel.c b/drivers/accel/accel.c
+index afeabe1..6d1c75a 100644
+--- a/drivers/accel/accel.c
++++ b/drivers/accel/accel.c
+@@ -7,6 +7,7 @@
+ #include <linux/kdev_t.h>
+ #include <linux/slab.h>
+ #include <linux/types.h>
++#include <linux/genhd.h>
+ #define ACCEL_MAX_DEVICES 512
+ static bool accel_class_registered;
+ static struct class accel_class;
diff --git a/project-lakitu/sys-apps/tpu-drivers/tpu-drivers-20220117.ebuild b/project-lakitu/sys-apps/tpu-drivers/tpu-drivers-20220117.ebuild
new file mode 100644
index 0000000..9dc6805
--- /dev/null
+++ b/project-lakitu/sys-apps/tpu-drivers/tpu-drivers-20220117.ebuild
@@ -0,0 +1,115 @@
+#
+# Copyright 2022 Google LLC
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# 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.
+#
+
+EAPI=7
+
+inherit eutils linux-mod udev
+
+DESCRIPTION="Snaggletooth kernel drivers"
+HOMEPAGE="https://cloud.google.com/tpu"
+GIT_COMMIT="cb119a8607ee9bb70542867579dc9b6e69a85c5a"
+SRC_URI="https://github.com/tensorflow/tpu/archive/${GIT_COMMIT}.tar.gz"
+
+LICENSE="BSD-Google"
+SLOT="0"
+KEYWORDS="*"
+IUSE="+clang kernel-5_10 kernel-5_15"
+# Prevent kernel module signature being striped.
+RESTRICT="mirror strip"
+
+COMMON=""
+DEPEND="
+ ${COMMON}
+ kernel-5_10? ( sys-kernel/lakitu-kernel-5_10[kernel_sources] )
+ kernel-5_15? ( sys-kernel/lakitu-kernel-5_15[kernel_sources] )
+"
+RDEPEND="
+ ${COMMON}"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-5.10-include-fix.patch
+)
+
+S="${WORKDIR}/tpu-${GIT_COMMIT}/tools/driver/"
+
+KBUILD_OUTPUT=${KERNEL_DIR}/build
+
+MODULE_NAMES="
+ accel-class(kernel/drivers/accel:${S})
+ asic_sw(kernel/drivers/asic_sw:${S})
+ gasket(kernel/drivers/gasket:${S})
+ tpu_common(kernel/drivers/tpu_common:${S})
+ tpu_v2_core(kernel/drivers/tpu_common:${S})
+ tpu_v2(kernel/drivers/tpu_common:${S})
+ tpu_v3(kernel/drivers/tpu_common:${S})
+ tpuv4common_common(kernel/drivers/tpu_common:${S})
+ tpu_v4(kernel/drivers/tpu_common:${S})
+ tpu_v4_lite(kernel/drivers/tpu_common:${S})"
+
+sign_module() {
+ local module_file="$1"
+
+ "${KBUILD_OUTPUT}"/scripts/sign-file \
+ sha256 \
+ "${KBUILD_OUTPUT}"/certs/signing_key.pem \
+ "${KBUILD_OUTPUT}"/certs/signing_key.x509 \
+ ${module_file}
+}
+
+src_prepare() {
+ use clang || cros_use_gcc
+ default
+}
+
+src_compile() {
+ local kernel_arch=${CHROMEOS_KERNEL_ARCH:-$(tc-arch-kernel)}
+ LIBELF="$("${CBUILD}-pkg-config" libelf --libs 2>/dev/null || echo -lelf)"
+ eval "emake -C ${S} HOSTCC=\"$(tc-getBUILD_CC)\" \
+ CROSS_COMPILE=${CHOST}- \
+ CC=${CC} \
+ LD=${LD} \
+ LDFLAGS=\"$(get_abi_LDFLAGS)\" \
+ ARCH=${kernel_arch} \
+ HOST_LIBELF_LIBS=${LIBELF} \
+ KERNELDIR=\"${KBUILD_OUTPUT}\" \
+ -f Makefile.tpu_kernel_modules \
+ all" \
+ || die "Unable to emake -C ${S} HOSTCC=\"$(tc-getBUILD_CC)\" \
+ CROSS_COMPILE=${CHOST}- \
+ CC=${CC} \
+ LD=${LD} \
+ LDFLAGS=\"$(get_abi_LDFLAGS)\" \
+ ARCH=${kernel_arch} \
+ KERNELDIR=\"${KBUILD_OUTPUT}\" \
+ -f Makefile.tpu_kernel_modules \
+ all"
+}
+
+src_install() {
+ for i in ${MODULE_NAMES}
+ do
+ unset libdir srcdir objdir
+ for n in $(find_module_params ${i})
+ do
+ eval ${n/:*}=${n/*:/}
+ done
+ libdir=${libdir:-misc}
+ srcdir=${srcdir:-${S}}
+ objdir=${objdir:-${srcdir}}
+
+ einfo "Signing ${modulename} module"
+ sign_module ${objdir}/${modulename}.${KV_OBJ}
+ done
+ linux-mod_src_install
+ udev_dorules "${FILESDIR}/99-tpu.rules"
+}
diff --git a/project-lakitu/virtual/target-lakitu/target-lakitu-1.5-r15.ebuild b/project-lakitu/virtual/target-lakitu/target-lakitu-1.5-r16.ebuild
similarity index 100%
rename from project-lakitu/virtual/target-lakitu/target-lakitu-1.5-r15.ebuild
rename to project-lakitu/virtual/target-lakitu/target-lakitu-1.5-r16.ebuild
diff --git a/project-lakitu/virtual/target-lakitu/target-lakitu-1.5.ebuild b/project-lakitu/virtual/target-lakitu/target-lakitu-1.5.ebuild
index bc9d6ab..ffb55da 100644
--- a/project-lakitu/virtual/target-lakitu/target-lakitu-1.5.ebuild
+++ b/project-lakitu/virtual/target-lakitu/target-lakitu-1.5.ebuild
@@ -10,7 +10,7 @@
LICENSE="BSD-Google"
SLOT="0"
KEYWORDS="*"
-IUSE="bootchart +crash_reporting +pam readahead systemd watchdog apparmor criu uefi_bootloaders module_sign lockdown lakitu_kdump update_engine +npd +toolbox +kubernetes +cri_tools iscsi_initiator +xemu"
+IUSE="bootchart +crash_reporting +pam readahead systemd watchdog apparmor criu uefi_bootloaders module_sign lockdown lakitu_kdump update_engine +npd +toolbox +kubernetes +cri_tools iscsi_initiator +xemu tpu"
LAKITU_RDEPEND="
bootchart? ( app-benchmarks/bootchart )
@@ -77,6 +77,7 @@
sys-apps/ethtool
>=sys-apps/iproute2-3.19.0
sys-apps/loadpin-trigger
+ tpu? ( sys-apps/tpu-drivers )
xemu? ( sys-apps/xemu )
iscsi_initiator? ( sys-block/open-iscsi )
module_sign? ( sys-apps/keyutils )