!3 [sync] PR-1: Marvell FC driver for OE 20.03 LTS SP3 and OE 22.03

From: @openeuler-sync-bot 
Reviewed-by: @lovelijunyi 
Signed-off-by: @lovelijunyi
This commit is contained in:
openeuler-ci-bot 2022-11-11 03:49:37 +00:00 committed by Gitee
commit 6874ed9e8a
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
9 changed files with 565 additions and 59 deletions

6
99-qla2xxx.rules Normal file
View File

@ -0,0 +1,6 @@
#
# RULES FILE: located in /etc/udev/rules.d/
#
# qla2xxx driver
SUBSYSTEM=="pci", ENV{DRIVER}=="qla2xxx", ACTION=="change", RUN+="/lib/udev/qla2xxx_udev.sh"

View File

@ -1,36 +1,31 @@
# qla2xxx
# marvelldriver
#### Description
provide Marvell QLogic FC HBA adapter qla2xxx driver for openEuler LTS version.
## Introduction
provide Marvell QLogic FC HBA adapter driver for openEuler LTS version.
#### Software Architecture
Software architecture description
## Driver info
QLogic driver package for openEuler system.
#### Installation
1. xxxx
2. xxxx
3. xxxx
#### Instructions
1. xxxx
2. xxxx
3. xxxx
#### Contribution
1. Fork the repository
2. Create Feat_xxx branch
3. Commit your code
4. Create Pull Request
FC HBA driver is from [Marvell/QLogic webisite](https://www.marvell.com/support/downloads.html)
#### Gitee Feature
1. You can use Readme\_XXX.md to support different languages, such as Readme\_en.md, Readme\_zh.md
2. Gitee blog [blog.gitee.com](https://blog.gitee.com)
3. Explore open source project [https://gitee.com/explore](https://gitee.com/explore)
4. The most valuable open source project [GVP](https://gitee.com/gvp)
5. The manual of Gitee [https://gitee.com/help](https://gitee.com/help)
6. The most popular members [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)
### FC HBA driver
> qla2xxx-x.y.z.
## Installation
### QLogic FC HBA driver
1. This repository is for building qla2xxx KMOD RPM package.
2. this qla2xxx driver supports openEuler 20.03 LTS SP3 and openEuler 22.03 LTS version.
3. this qla2xxx driver supports ARM64 and X64 platform.
4. this qla2xxx driver supports Kunpeng and Phytium CPU platform.

View File

@ -1,37 +1,28 @@
# qla2xxx
# marvelldriver
#### 介绍
provide Marvell QLogic FC HBA adapter qla2xxx driver for openEuler LTS version.
## 介绍
provide Marvell QLogic FC HBA adapter driver for openEuler LTS version.
#### 软件架构
软件架构说明
Ethernet NIC driver and SAS/SATA driver will provide in other repository.
## 软件架构
QLogic driver package for openEuler system.
FC HBA driver is from [Marvell/QLogic webisite](https://www.marvell.com/support/downloads.html)
#### 安装教程
1. xxxx
2. xxxx
3. xxxx
#### 使用说明
1. xxxx
2. xxxx
3. xxxx
#### 参与贡献
1. Fork 本仓库
2. 新建 Feat_xxx 分支
3. 提交代码
4. 新建 Pull Request
### FC HBA driver
> qla2xxx-x.y.z
#### 特技
1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md
2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com)
3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目
4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目
5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help)
6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)
## 安装教程
### QLogic FC HBA driver
1. 本仓库用于生成openEuler 版本的KMOD 驱动RPM 安装包。
2. 支持 openEuler 20.03 LTS SP3 及 openEuler 22.03 LTS 版本。
3. 支持 ARM64 及 X64 平台。
4. 支持国产CPU。

1
dracut.qla2xxx.conf Normal file
View File

@ -0,0 +1 @@
add_drivers+=" tcm_qla2xxx qla2xxx "

327
kmodtool-nvme.8.x.sh Normal file
View File

@ -0,0 +1,327 @@
#!/bin/bash
# kmodtool - Helper script for building kernel module RPMs
# An original version appeared in Fedora. This version is
# generally called only by the %kernel_module_package RPM macro
# during the process of building Driver Update Packages (which
# are also known as "kmods" in the Fedora community).
#
# Copyright (c) 2003-2010 Ville Skyttä <ville.skytta@iki.fi>,
# Thorsten Leemhuis <fedora@leemhuis.info>
# Jon Masters <jcm@redhat.com>
# Copyright (c) 2012-2013 Jiri Benc <jbenc@redhat.com>
#
# 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.
# Changelog:
#
# 2010/07/28 - Add fixes for filelists in line with LF standard
# - Remove now defunct "framepointer" kernel variant
# - Change version to "rhel6-rh2" as a consequence.
#
# 2010/01/10 - Simplified for RHEL6. We are working on upstream
# moving to a newer format and in any case do not
# need to retain support for really old systems.
shopt -s extglob
myprog="kmodtool"
myver="0.10.10_kmp2"
knownvariants=@(debug|kdump)
kmod_name=
kver=
verrel=
variant=
get_kernel_release ()
{
if [[ -z $1 ]]; then
uname -r
return
fi
local arch=$(arch)
local verrel=${1%.$arch}
local verprefix=${verrel%.*}
local versuffix=${verrel#$verprefix}
verrel=$(ls -Ud /usr/src/kernels/$verprefix*$versuffix.$arch | sort -V | tail -n 1)
verrel=${verrel##*/}
[[ -z $verrel ]] && verrel=$1.$arch
echo "$verrel"
}
get_verrel ()
{
verrel=$(get_kernel_release "$1")
verrel=${verrel/%.$knownvariants/}
}
print_verrel ()
{
get_verrel $@
echo "${verrel}"
}
get_verrel_for_deps ()
{
verrel_dep=${1:-$(uname -r)}
verrel_dep=${verrel_dep/%.$knownvariants/}
}
get_variant ()
{
get_verrel $@
variant=$(get_kernel_release "$1")
variant=${variant/#$verrel?(.)/}
variant=${variant:-'""'}
}
print_variant ()
{
get_variant $@
echo "${variant}"
}
get_filelist() {
local IFS=$'\n'
filelist=($(cat))
if [ ${#filelist[@]} -gt 0 ];
then
for ((n = 0; n < ${#filelist[@]}; n++));
do
line="${filelist[n]}"
line=$(echo "$line" \
| sed -e "s/%verrel/$verrel/g" \
| sed -e "s/%variant/$variant/g" \
| sed -e "s/%dashvariant/$dashvariant/g" \
| sed -e "s/%dotvariant/$dotvariant/g" \
| sed -e "s/\.%1/$dotvariant/g" \
| sed -e "s/\-%1/$dotvariant/g" \
| sed -e "s/%2/$verrel/g")
echo "$line"
done
else
echo "%defattr(644,root,root,755)"
echo "/lib/modules/${verrel}${dotvariant}"
fi
}
get_rpmtemplate ()
{
local variant="${1}"
local dashvariant="${variant:+-${variant}}"
local dotvariant="${variant:+.${variant}}"
echo "%package -n kmod-${kmod_name}${dashvariant}"
if [ -z "$kmod_provides_summary" ]; then
echo "Summary: ${kmod_name} kernel module(s)"
fi
if [ -z "$kmod_provides_group" ]; then
echo "Group: System Environment/Kernel"
fi
if [ ! -z "$kmod_version" ]; then
echo "Version: %{kmod_version}"
fi
if [ ! -z "$kmod_release" ]; then
echo "Release: %{kmod_release}"
fi
# Turn of the internal dep generator so we will use the kmod scripts.
echo "%global _use_internal_dependency_generator 0"
cat <<EOF
Provides: kernel-modules >= ${verrel_dep}${dotvariant}
Provides: ${kmod_name}-kmod = %{?epoch:%{epoch}:}%{version}-%{release}
Requires(post): /usr/sbin/depmod
Requires(postun): /usr/sbin/depmod
Obsoletes: kmod-hpqlgc-%{driver_name}
Obsoletes: kmod-%{driver_name}
Conflicts: kmod-hpqlgc-%{driver_name}
EOF
if [ "yes" != "$nobuildreqs" ]
then
echo "BuildRequires: kernel${dashvariant}-devel"
fi
if [ "" != "$override_preamble" ]
then
cat "$override_preamble"
fi
cat <<EOF
%description -n kmod-${kmod_name}${dashvariant}
This package provides the ${kmod_name} kernel modules built for
the Linux kernel ${verrel}${dotvariant} for the %{_target_cpu}
family of processors.
Public key available at http://ldriver.qlogic.com/RPM-public-key/
SRPMS available at http://ldriver.qlogic.com/driver-srpms/
EOF
##############################################################################
## The following are not part of this script directly, they are scripts ##
## that will be executed by RPM during various stages of package processing ##
##############################################################################
cat <<EOF
%post -n kmod-${kmod_name}${dashvariant}
if [ -e "/boot/System.map-${verrel}${dotvariant}" ]; then
/usr/sbin/depmod -aeF "/boot/System.map-${verrel}${dotvariant}" "${verrel}${dotvariant}" > /dev/null || :
fi
modules=( \$(find /lib/modules/${verrel}${dotvariant}/extra/${kmod_name} | grep '\.ko$') )
if [ -x "/sbin/weak-modules" ]; then
printf '%s\n' "\${modules[@]}" \
| /sbin/weak-modules --add-modules
fi
if [ ! -e /boot/initramfs-`uname -r`.img.ql.bkup ]; then
cp -p /boot/initramfs-`uname -r`.img /boot/initramfs-`uname -r`.img.ql.bkup
fi
dracut -f
EOF
cat <<EOF
%preun -n kmod-${kmod_name}${dashvariant}
rpm -ql kmod-${kmod_name}${dashvariant}-%{kmod_version}-%{kmod_release}.$(arch) | grep '\.ko$' > /var/run/rpm-kmod-${kmod_name}${dashvariant}-modules
EOF
cat <<EOF
%postun -n kmod-${kmod_name}${dashvariant}
if [ -e "/boot/System.map-${verrel}${dotvariant}" ]; then
/usr/sbin/depmod -aeF "/boot/System.map-${verrel}${dotvariant}" "${verrel}${dotvariant}" > /dev/null || :
fi
modules=( \$(cat /var/run/rpm-kmod-${kmod_name}${dashvariant}-modules) )
rm /var/run/rpm-kmod-${kmod_name}${dashvariant}-modules
if [ -x "/sbin/weak-modules" ]; then
printf '%s\n' "\${modules[@]}" \
| /sbin/weak-modules --remove-modules
fi
EOF
echo "%files -n kmod-${kmod_name}${dashvariant}"
if [ "" == "$override_filelist" ];
then
echo "%defattr(644,root,root,755)"
echo "/lib/modules/${verrel}${dotvariant}"
echo "%config /etc/depmod.d/${kmod_module}.conf"
echo "/etc/dracut.conf.d/qla2xxx.conf"
echo "/etc/depmod.d/qla2xxx.conf"
else
cat "$override_filelist" | get_filelist
fi
}
print_rpmtemplate ()
{
kmod_name="${1}"
kmod_module=`echo $kmod_name | cut -d"-" -f2`
shift
kver="${1}"
get_verrel "${1}"
get_verrel_for_deps "${1}"
[[ -z $kver ]] && kver=$verrel
shift
if [ -z "${kmod_name}" ] ; then
echo "Please provide the kmodule-name as first parameter." >&2
exit 2
elif [ -z "${kver}" ] ; then
echo "Please provide the kver as second parameter." >&2
exit 2
elif [ -z "${verrel}" ] ; then
echo "Couldn't find out the verrel." >&2
exit 2
fi
for variant in "$@" ; do
if [ "default" == "$variant" ];
then
get_rpmtemplate ""
else
get_rpmtemplate "${variant}"
fi
done
}
usage ()
{
cat <<EOF
You called: ${invocation}
Usage: ${myprog} <command> <option>+
Commands:
verrel <uname>
- Get "base" version-release.
variant <uname>
- Get variant from uname.
rpmtemplate <mainpgkname> <uname> <variants>
- Return a template for use in a source RPM
version
- Output version number and exit.
EOF
}
invocation="$(basename ${0}) $@"
while [ "${1}" ] ; do
case "${1}" in
verrel)
shift
print_verrel $@
exit $?
;;
variant)
shift
print_variant $@
exit $?
;;
rpmtemplate)
shift
print_rpmtemplate "$@"
exit $?
;;
version)
echo "${myprog} ${myver}"
exit 0
;;
*)
echo "Error: Unknown option '${1}'." >&2
usage >&2
exit 2
;;
esac
done
# Local variables:
# mode: sh
# sh-indentation: 2
# indent-tabs-mode: nil
# End:
# ex: ts=2 sw=2 et

Binary file not shown.

125
qla2xxx.spec Normal file
View File

@ -0,0 +1,125 @@
%define dvendor qlgc
%define vendor %{dvendor}
%define driver_name qla2xxx
%define dist_version 10.02.08.00.a7-k
%define dist_str openEuler
%define version 10.02.08.00.a7
%define release 1
%define BUILD_KERNEL_SPEC %( if [ -z "${BUILD_KERNEL}" ]; then BUILD_KERNEL=` rpm -q kernel-devel |sed 's/.*devel-//g' `; fi; echo "${BUILD_KERNEL}" | cut -d "-" -f -2 )
%define mod_sign_files /home/sign
%define module_key %{mod_sign_files}/qlgc_module_signing_key-202x.priv
%define module_cer %{mod_sign_files}/qlgc_module-202x.der
%define gpginfo "RPM public key available at http://ldriver.qlogic.com/RPM-public-key/ and Module public key available at http://ldriver.qlogic.com/Module-public-key/"
Name: %{vendor}-%{driver_name}
Version: %{version}
Release: %{release}
Summary: QLogic qlaxxx FC Driver Update Program package
Group: System/Kernel
License: GPLv2
Vendor: QLogic Corp.
Packager: QLogic Corp.
URL: http://www.qlogic.com
Source0: qla2xxx-src-v10.02.08.00.a7-k.tar.gz
Source1: kmodtool-nvme.8.x.sh
Source2: dracut.qla2xxx.conf
Source3: 99-qla2xxx.rules
Source4: qla2xxx_udev.sh
BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-src-%{dist_version}-%{release}-XXXXXX)
BuildRequires: kernel-rpm-macros
BuildRequires: kernel-devel
BuildRequires: hostname
BuildRequires: procps-ng
BuildRequires: systemd-udev
%global debug_package %{nil}
%description
OE Driver Update package for QLogic FC Adapter.
Public key available at http://ldriver.qlogic.com/RPM-public-key/
SRPMS available at http://ldriver.qlogic.com/driver-srpms/
%prep
%setup -n %{driver_name}-%{dist_version}
set -- *
mkdir source
mv "$@" source/
mkdir obj
echo "override %{driver_name} * weak-updates/%{dvendor}-%{driver_name}" > %{driver_name}.conf
%build
for flavor in 'default'; do
rm -rf obj/$flavor
cp -r source obj/$flavor
cd obj/$flavor
make -C /lib/modules/` rpm -q kernel-devel |sed 's/.*devel-//g' `/build M=`pwd` modules
done
%install
export INSTALL_MOD_PATH=$RPM_BUILD_ROOT
export INSTALL_MOD_DIR=extra/%{name}
for flavor in %flavors_to_build ; do
if [ -f %{module_key} ] && [ -f %{module_cer} ]; then
/usr/src/kernels/` rpm -q kernel-devel |sed 's/.*devel-//g' `/scripts/sign-file sha256 %{module_key} %{module_cer} $PWD/obj/$flavor/%{driver_name}.ko
fi
dest_dir=${RPM_BUILD_ROOT}/lib/modules/` rpm -q kernel-devel |sed 's/.*devel-//g' `/extra/%{name}/
mkdir -p $dest_dir
install -m 444 obj/default/qla2xxx.ko $dest_dir
# Cleanup unnecessary kernel-generated module dependency files.
find $INSTALL_MOD_PATH/lib/modules -iname 'modules.*' -exec rm {} \;
done
%{__install} -d $RPM_BUILD_ROOT%{_sysconfdir}/depmod.d/
%{__install} %{driver_name}.conf $RPM_BUILD_ROOT%{_sysconfdir}/depmod.d/
mkdir -p $RPM_BUILD_ROOT/etc/dracut.conf.d
%{__install} -m 755 %{S:2} $RPM_BUILD_ROOT/etc/dracut.conf.d/qla2xxx.conf
mkdir -p $RPM_BUILD_ROOT/etc/udev/rules.d/
%{__install} -m 644 %{S:3} $RPM_BUILD_ROOT/etc/udev/rules.d/
mkdir -p $RPM_BUILD_ROOT/lib/udev
%{__install} -m 744 %{S:4} $RPM_BUILD_ROOT/lib/udev/
#systemctl enable qla2xxx-nvmefc-boot-connection.service
# which udevadm 1>/dev/null 2>&1
# if [ $? -eq 0 ]; then
# udevadm control -R
# else
# udevcontrol reload_rules
# fi
%files
%defattr(644,root,root,755)
/lib/modules/
/etc/depmod.d/qla2xxx.conf
/etc/dracut.conf.d/qla2xxx.conf
/etc/udev/rules.d/99-qla2xxx.rules
/lib/udev/qla2xxx_udev.sh
%clean
rm -rf $RPM_BUILD_ROOT
%changelog
* Tue Sep 27 2022 QLogic Corp <support@qlogic.com> - 10.02.08.00.a7-1
- package init
- DESC: 10.02.08.00.a7-k XL 09/27/2022. Fisrt version for OE community.

4
qla2xxx.yaml Normal file
View File

@ -0,0 +1,4 @@
version_control: Marvell
src_repo: Marvell official website
tag_prefix: ^v
seperator: .

57
qla2xxx_udev.sh Normal file
View File

@ -0,0 +1,57 @@
#!/bin/sh -e
#
# ACTION FILE: located in /lib/udev/
#
err() {
echo "$@" >&2
if [ -x /bin/logger ]; then
/bin/logger -t "${0##*/}[$$]" "$@"
elif [ -x /usr/bin/logger ]; then
/usr//bin/logger -t "${0##*/}[$$]" "$@"
fi
}
SYSFS=/sys
HOST=${FW_DUMP}
QFWD=${SYSFS}/class/fc_host/host${HOST}/device/fw_dump
DFILE_PATH=/opt/QLogic_Corporation/FW_Dumps
DFILE=${DFILE_PATH}/qla2xxx_fw_dump_${HOST}_`eval date +%Y%m%d_%H%M%S`.txt
MDFILE=${DFILE_PATH}/qla2xxx_mpi_fw_dump_${HOST}_`eval date +%Y%m%d_%H%M%S`.txt
# Verify fw_dump binary-attribute file
if ! test -f ${QFWD} ; then
err "qla2xxx: no firmware dump file at host $HOST!!!"
exit 1
fi
# Go with dump
mkdir -p ${DFILE_PATH}
# MPI dump
echo 9 > ${QFWD}
cat ${QFWD} > ${MDFILE}
echo 8 > ${QFWD}
if ! test -s "${MDFILE}" ; then
rm ${MDFILE}
else
gzip ${MDFILE}
err "qla2xxx: MPI firmware dump saved to file ${MDFILE}.gz."
exit 0
fi
# FW dump
echo 1 > ${QFWD}
cat ${QFWD} > ${DFILE}
echo 0 > ${QFWD}
if ! test -s "${DFILE}" ; then
err "qla2xxx: no firmware dump file at host ${HOST}!!!"
rm ${DFILE}
exit 1
fi
gzip ${DFILE}
err "qla2xxx: firmware dump saved to file ${DFILE}.gz."
exit 0