From 11876d7e4d01c2d49a3c9e53a5a5951762002e44 Mon Sep 17 00:00:00 2001 From: Hao Zhang Date: Mon, 24 Jul 2023 17:20:46 +0800 Subject: [PATCH 1/3] Microchip smartpqi driver for SmartRAID/SmartHBA controllers Init files commit Driver download link: https://download.adaptec.com/raid/aac/linux/smartpqi_linux_drivers_v2.1.22-040.tgz Signed-off-by: Hao Zhang --- Module.supported | 1 + smartpqi-2.1.22-040.tar.bz2 | Bin 0 -> 61765 bytes smartpqi-fromsrc.conf | 1 + smartpqi-src.spec | 214 ++++++++++++++++++++++++++++++++++++ 4 files changed, 216 insertions(+) create mode 100644 Module.supported create mode 100644 smartpqi-2.1.22-040.tar.bz2 create mode 100644 smartpqi-fromsrc.conf create mode 100644 smartpqi-src.spec diff --git a/Module.supported b/Module.supported new file mode 100644 index 0000000..2bf848c --- /dev/null +++ b/Module.supported @@ -0,0 +1 @@ +smartpqi.ko external diff --git a/smartpqi-2.1.22-040.tar.bz2 b/smartpqi-2.1.22-040.tar.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..e1de81a0481a55f35750cfc03c159a0aea67fe0c GIT binary patch literal 61765 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 z‎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∨*TwGe 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 Oi@744C`f+mo6dkSxre?0 literal 0 HcmV?d00001 diff --git a/smartpqi-fromsrc.conf b/smartpqi-fromsrc.conf new file mode 100644 index 0000000..e786baf --- /dev/null +++ b/smartpqi-fromsrc.conf @@ -0,0 +1 @@ +add_drivers+=" smartpqi " diff --git a/smartpqi-src.spec b/smartpqi-src.spec new file mode 100644 index 0000000..7c07385 --- /dev/null +++ b/smartpqi-src.spec @@ -0,0 +1,214 @@ +%define name smartpqi +%define version 2.1.22 +%define release 040 +%define kernel `uname -r` +Summary: Microchip smartpqi driver for SmartRAID/SmartHBA controllers +Name: %{name} +Version: %{version} +Release: %{release} +Vendor: Microchip Technology Inc. +License: GPLv2 +Group: System Environment/Kernel +Source0: %{name}-%{version}-%{release}.tar.bz2 +Source1: Module.supported +Source2: %{name}-fromsrc.conf +URL: http://www.microchip.com +Distribution: Microchip Technology Inc. +BuildRoot: /var/tmp/%{name}-buildroot + +%define debug_package %{nil} + +%description +Driver for Microchip Technology SmartRAID and SmartHBA controllers + +# prep ######################################################################### +%prep +echo prep %{version}-%{release} +%setup -c -b 0 +cp %_sourcedir/Module.supported src/Module.supported + + +# build ######################################################################## +%build +echo build %{version}-%{release} +make build KERNEL=%{kernel}; + +# install ###################################################################### +%install +echo install %{version}-%{release} +echo "%defattr(-,root,root)" > $RPM_BUILD_DIR/file.list.%{name} + +SMARTPQI_IPATH=/lib/modules/%{kernel}/weak-updates/smartpqi + +if modinfo smartpqi -n |xargs file |grep -c "compressed" >> /dev/null; then + driver_bin="smartpqi.ko.xz" +elif [ $(find /lib/modules/%{kernel}/ -name smartpqi.ko.xz*) ]; then + driver_bin="smartpqi.ko.xz" +else + driver_bin="smartpqi.ko" +fi + +mkdir -p $RPM_BUILD_ROOT/lib/modules/%{kernel}/weak-updates/smartpqi + +# create the file list used in %files to indicate which files are in package +echo "$SMARTPQI_IPATH/${driver_bin}.new" >> $RPM_BUILD_DIR/file.list.%{name} +echo "/etc/dracut.conf.d/smartpqi-fromsrc.conf" >> $RPM_BUILD_DIR/file.list.%{name} + +make install PREFIX=$RPM_BUILD_ROOT KERNEL=%{kernel} +if [ ${driver_bin} == "smartpqi.ko.xz" ]; then + xz $RPM_BUILD_ROOT/$SMARTPQI_IPATH/smartpqi.ko +fi +mv -f $RPM_BUILD_ROOT/$SMARTPQI_IPATH/${driver_bin} \ + $RPM_BUILD_ROOT/$SMARTPQI_IPATH/${driver_bin}.new +install -m 644 -D %{SOURCE2} $RPM_BUILD_ROOT/etc/dracut.conf.d/smartpqi-fromsrc.conf + +# pre ######################################################################### +%pre +echo pre %{version}-%{release} +system_arch=`uname -m` +if [ %{_target_cpu} != ${system_arch} ]; then + echo "ERROR: Failed installing this rpm!!!!" + echo "This rpm is intended for %{_target_cpu} platform. It seems your system is ${system_arch}."; + exit 1; +fi; + +# post ######################################################################### +%post +echo post %{version}-%{release} + +if modinfo smartpqi -n |xargs file |grep -c "compressed" >> /dev/null; then + driver_bin="smartpqi.ko.xz" +elif [ $(find /lib/modules/%{kernel}/ -name smartpqi.ko.xz*) ]; then + driver_bin="smartpqi.ko.xz" +else + driver_bin="smartpqi.ko" +fi + +if [ ! -e /boot/vmlinuz-%{kernel} ] && [ ! -e /boot/vmlinux-%{kernel} ]; then + continue; +fi; + +SMARTPQI_IPATH=/lib/modules/%{kernel}/weak-updates/smartpqi +if [ ! -e $SMARTPQI_IPATH/${driver_bin}.new ]; then + continue; +fi; + +SMARTPQI_ORIG_IPATH=/lib/modules/%{kernel}/kernel/drivers/scsi/smartpqi +echo "The smartpqi driver for kernel %{kernel} is now version %{version}-%{release}"; +cp -f $SMARTPQI_IPATH/${driver_bin}.new $SMARTPQI_IPATH/${driver_bin} + +# Remake the initrd image +SMARTPQI_IPATH=/lib/modules/%{kernel}/kernel/drivers/scsi/smartpqi +if [ -e $SMARTPQI_IPATH/${driver_bin} ]; then + mv $SMARTPQI_IPATH/${driver_bin} \ + $SMARTPQI_IPATH/${driver_bin}.orig +fi; + +SMARTPQI_IPATH=/lib/modules/%{kernel}/updates +if [ -e $SMARTPQI_IPATH/${driver_bin} ]; then + mv $SMARTPQI_IPATH/${driver_bin} \ + $SMARTPQI_IPATH/${driver_bin}.orig +fi; + +SMARTPQI_IPATH=/lib/modules/%{kernel}/extra/smartpqi +if [ -e $SMARTPQI_IPATH/${driver_bin} ]; then + mv $SMARTPQI_IPATH/${driver_bin} \ + $SMARTPQI_IPATH/${driver_bin}.orig +fi; + +bootpart=/boot; +depmod -v %{kernel} > /dev/null 2>&1; + + + +if which mkinitrd |grep -c "mkinitrd" >> /dev/null; then + if which mkinitrd |grep -c "no mkinitrd" >> /dev/null ; then + module_init_tool="unknown" + else + module_init_tool="mkinitrd" + #SuSE + if [ -h /boot/initrd ] ; then + mkinitrd -f /boot/initrd-%{kernel} %{kernel} + else + mkinitrd -f /boot/initramfs-%{kernel}.img %{kernel} + fi + echo -e "${module_init_tool} post Install Done." + exit 0; + fi +fi + +echo -e "post Install Done." + +# postun ####################################################################### +%postun +echo postun %{version}-%{release} + +if modinfo smartpqi -n |xargs file |grep -c "compressed" >> /dev/null; then + driver_bin="smartpqi.ko.xz" +elif [ $(find /lib/modules/%{kernel}/ -name smartpqi.ko.xz*) ]; then + driver_bin="smartpqi.ko.xz" +else + driver_bin="smartpqi.ko" +fi + +SMARTPQI_IPATH=/lib/modules/%{kernel}/weak-updates/smartpqi +if [ ! -e $SMARTPQI_IPATH/${driver_bin}.new ] && \ + [ -e $SMARTPQI_IPATH/${driver_bin} ]; then + + rm -rf $SMARTPQI_IPATH; + + SMARTPQI_IPATH=/lib/modules/%{kernel}/kernel/drivers/scsi/smartpqi + if [ -e $SMARTPQI_IPATH/${driver_bin}.orig ]; then + mv $SMARTPQI_IPATH/${driver_bin}.orig \ + $SMARTPQI_IPATH/${driver_bin} + fi; + + SMARTPQI_IPATH=/lib/modules/%{kernel}/updates + if [ -e $SMARTPQI_IPATH/${driver_bin}.orig ]; then + mv $SMARTPQI_IPATH/${driver_bin}.orig \ + $SMARTPQI_IPATH/${driver_bin} + fi; + + SMARTPQI_IPATH=/lib/modules/%{kernel}/extra/smartpqi + if [ -e $SMARTPQI_IPATH/${driver_bin}.orig ]; then + mv $SMARTPQI_IPATH/${driver_bin}.orig \ + $SMARTPQI_IPATH/${driver_bin} + fi; +fi; + +bootpart=/boot; + +if [ ! -f /lib/modules/%{kernel}/kernel/drivers/scsi/smartpqi/${driver_bin} ] && \ + [ ! -f /lib/modules/%{kernel}/udpates/${driver_bin} ] && \ + [ ! -f /lib/modules/%{kernel}/weak-updates/smartpqi/${driver_bin} ] && \ + [ ! -f /lib/modules/%{kernel}/extra/smartpqi/${driver_bin} ]; then + sed -e '/smartpqi/d' /etc/modprobe.conf > modprobe.edit; + mv -f modprobe.edit /etc/modprobe.conf; +fi; + +depmod -v %{kernel} > /dev/null 2>&1; + + +if which mkinitrd |grep -c "mkinitrd" >> /dev/null; then + if which mkinitrd |grep -c "no mkinitrd" >> /dev/null ; then + module_init_tool="unknown" + else + module_init_tool="mkinitrd" + #SuSE + if [ -h /boot/initrd ] ; then + mkinitrd -f /boot/initrd-%{kernel} %{kernel} + else + mkinitrd -f /boot/initramfs-%{kernel}.img %{kernel} + fi + echo -e "${module_init_tool} Uninstall Done." + exit 0; + fi +fi + +echo -e "Uninstall Done." + +# files ######################################################################## +%files -f ../file.list.%{name} + +# changelog ################################################################### +%changelog -- Gitee From dffeeb9bd0ab64edde13f824a023e4f1a2b6e0b5 Mon Sep 17 00:00:00 2001 From: Hao Zhang Date: Thu, 27 Jul 2023 14:26:37 +0800 Subject: [PATCH 2/3] Microchip smartpqi driver 2.1.22-040 update patch This patch is used to support OpenEuler-2203 version. Signed-off-by: Hao Zhang --- ...driver-build-for-OpenEuler-2203-vers.patch | 30 +++++++++++++++++++ smartpqi-src.spec | 3 ++ 2 files changed, 33 insertions(+) create mode 100644 0001-Support-PMC8222-driver-build-for-OpenEuler-2203-vers.patch diff --git a/0001-Support-PMC8222-driver-build-for-OpenEuler-2203-vers.patch b/0001-Support-PMC8222-driver-build-for-OpenEuler-2203-vers.patch new file mode 100644 index 0000000..91b94d7 --- /dev/null +++ b/0001-Support-PMC8222-driver-build-for-OpenEuler-2203-vers.patch @@ -0,0 +1,30 @@ +From aecfa96b98be1bdc9562cf912c7497dd241cd9b8 Mon Sep 17 00:00:00 2001 +From: Hao Zhang +Date: Mon, 24 Jul 2023 15:58:03 +0800 +Subject: [PATCH] Support PMC8222 driver build for OpenEuler-2203 version. + +This patch is referred from src/Makefile.alt. + +Signed-off-by: Hao Zhang +--- + Makefile | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/Makefile b/Makefile +index 8e7196c..3c4cadb 100644 +--- a/Makefile ++++ b/Makefile +@@ -103,6 +103,10 @@ OSVENDOR := $(shell \ + $(KVER_SHORT) = "4.19" ]; \ + then \ + echo "OEULER2003"; \ ++ elif [ -n "`grep 'release 22.03' /etc/openEuler-release`" -a \ ++ $(KVER_SHORT) = "5.10" ]; \ ++ then \ ++ echo "OEULER2203"; \ + fi; \ + elif [ -f /etc/os-release ]; \ + then \ +-- +2.33.0 + diff --git a/smartpqi-src.spec b/smartpqi-src.spec index 7c07385..dc1bf86 100644 --- a/smartpqi-src.spec +++ b/smartpqi-src.spec @@ -18,6 +18,8 @@ BuildRoot: /var/tmp/%{name}-buildroot %define debug_package %{nil} +Patch0: 0001-Support-PMC8222-driver-build-for-OpenEuler-2203-vers.patch + %description Driver for Microchip Technology SmartRAID and SmartHBA controllers @@ -25,6 +27,7 @@ Driver for Microchip Technology SmartRAID and SmartHBA controllers %prep echo prep %{version}-%{release} %setup -c -b 0 +%patch0 -p1 -b 0001-Support-PMC8222-driver-build-for-OpenEuler-2203-vers.patch cp %_sourcedir/Module.supported src/Module.supported -- Gitee From 6c53c5973c5e975d71217770d7d47fb651720492 Mon Sep 17 00:00:00 2001 From: Siyu Zhang Date: Thu, 27 Jul 2023 16:12:52 +0800 Subject: [PATCH 3/3] Modify the spec file Rename the spec file since the ci_check request it is same with the git repo. Add changelog. The mkdinitrd is not used in many new project. Add dracut to support updating the initramfs. The kernel version is different with kernel-devel on obs. We use the kernel-devel version to build the driver. Signed-off-by: Siyu Zhang --- ...i-src.spec => SmartHBA-2100-8i-driver.spec | 28 ++++++++++++++----- 1 file changed, 21 insertions(+), 7 deletions(-) rename smartpqi-src.spec => SmartHBA-2100-8i-driver.spec (88%) diff --git a/smartpqi-src.spec b/SmartHBA-2100-8i-driver.spec similarity index 88% rename from smartpqi-src.spec rename to SmartHBA-2100-8i-driver.spec index dc1bf86..d64b201 100644 --- a/smartpqi-src.spec +++ b/SmartHBA-2100-8i-driver.spec @@ -1,20 +1,21 @@ %define name smartpqi %define version 2.1.22 %define release 040 -%define kernel `uname -r` -Summary: Microchip smartpqi driver for SmartRAID/SmartHBA controllers +%define kernel `rpm -q kernel-devel|cut -d - -f 3,4` +Summary: Microchip smartpqi driver for SmartRAID/SmartHBA controllers Name: %{name} Version: %{version} Release: %{release} Vendor: Microchip Technology Inc. License: GPLv2 Group: System Environment/Kernel -Source0: %{name}-%{version}-%{release}.tar.bz2 +Source0: %{name}-%{version}-040.tar.bz2 Source1: Module.supported Source2: %{name}-fromsrc.conf URL: http://www.microchip.com Distribution: Microchip Technology Inc. BuildRoot: /var/tmp/%{name}-buildroot +BuildRequires: gcc make kernel-devel kernel-headers %define debug_package %{nil} @@ -34,7 +35,7 @@ cp %_sourcedir/Module.supported src/Module.supported # build ######################################################################## %build echo build %{version}-%{release} -make build KERNEL=%{kernel}; +make build KERNEL=%{kernel} KVER=`rpm -q kernel-devel|cut -d - -f 3,4`; # install ###################################################################### %install @@ -57,12 +58,13 @@ mkdir -p $RPM_BUILD_ROOT/lib/modules/%{kernel}/weak-updates/smartpqi echo "$SMARTPQI_IPATH/${driver_bin}.new" >> $RPM_BUILD_DIR/file.list.%{name} echo "/etc/dracut.conf.d/smartpqi-fromsrc.conf" >> $RPM_BUILD_DIR/file.list.%{name} -make install PREFIX=$RPM_BUILD_ROOT KERNEL=%{kernel} +make install PREFIX=$RPM_BUILD_ROOT KERNEL=%{kernel} KVER=`rpm -q kernel-devel|cut -d - -f 3,4` if [ ${driver_bin} == "smartpqi.ko.xz" ]; then xz $RPM_BUILD_ROOT/$SMARTPQI_IPATH/smartpqi.ko fi mv -f $RPM_BUILD_ROOT/$SMARTPQI_IPATH/${driver_bin} \ $RPM_BUILD_ROOT/$SMARTPQI_IPATH/${driver_bin}.new +chmod 644 $RPM_BUILD_ROOT/$SMARTPQI_IPATH/${driver_bin}.new install -m 644 -D %{SOURCE2} $RPM_BUILD_ROOT/etc/dracut.conf.d/smartpqi-fromsrc.conf # pre ######################################################################### @@ -139,7 +141,12 @@ if which mkinitrd |grep -c "mkinitrd" >> /dev/null; then exit 0; fi fi - + +if which dracut |grep -c "dracut" >> /dev/null; then + dracut -f /boot/initramfs-%{kernel}.img %{kernel}; + echo -e "Install Driver InitramFS Updated."; +fi; + echo -e "post Install Done." # postun ####################################################################### @@ -206,7 +213,12 @@ if which mkinitrd |grep -c "mkinitrd" >> /dev/null; then echo -e "${module_init_tool} Uninstall Done." exit 0; fi -fi +fi; + +if which dracut |grep -c "dracut" >> /dev/null; then + dracut -f /boot/initramfs-%{kernel}.img %{kernel}; + echo -e "Uninstall Driver InitramFS Updated."; +fi; echo -e "Uninstall Done." @@ -215,3 +227,5 @@ echo -e "Uninstall Done." # changelog ################################################################### %changelog +* Thu Jul 27 2023 Siyu Zhang - 2.1.22-040 +- Port the PMC RAID driver to openeuler. -- Gitee