Automatic import for version 5.16.17-1

This commit is contained in:
ABF 2022-03-25 07:05:23 +00:00
commit ba5a80a89f
42 changed files with 91035 additions and 0 deletions

3
.abf.yml Normal file
View file

@ -0,0 +1,3 @@
sources:
"linux-5.16.tar.xz": fd1d61124af4f76980eeef7257f625c0366eb70a
"patch-5.16.17.xz": 8448a863da8566a06b24ca0dbb1b75df76fbc7d5

37920
0001-Apply-AUFS-5.patch Normal file

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,37 @@
From 36dc5cf3039c0751fe95370a247ca1c23c06571c Mon Sep 17 00:00:00 2001
From: Mikhail Novosyolov <m.novosyolov@rosalinux.ru>
Date: Mon, 10 Aug 2020 10:38:20 +0300
Subject: [PATCH] ROSA: ima: allow to off modules signature check dynamically
Allow module.sig_enforce=0 kernel cmdline, not only module.sig_enforce=1
It allows to keep CONFIG_MODULE_SIG_FORCE=y, but disable it when really needed
without recompiling the kernel (it may be impossible, e.g. in certified systems).
GRUB or another bootloader is password-protected when needed,
so I am not afraid much that someone will be able to turn it off when not needed.
ROSA-specific patch.
This violates requirements of "secure boot", but currently we do not have secure boot in ROSA.
Signed-off-by: Mikhail Novosyolov <m.novosyolov@rosalinux.ru>
---
kernel/module.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/kernel/module.c b/kernel/module.c
index 6baa1080c..118d8ee60 100644
--- a/kernel/module.c
+++ b/kernel/module.c
@@ -274,7 +274,7 @@
#ifdef CONFIG_MODULE_SIG
static bool sig_enforce = IS_ENABLED(CONFIG_MODULE_SIG_FORCE);
-module_param(sig_enforce, bool_enable_only, 0644);
+module_param(sig_enforce, bool, 0644);
void set_module_sig_enforced(void)
{
--
2.17.1

View file

@ -0,0 +1,40 @@
From 6af124938e319e736cc09a621de907d4328b70e0 Mon Sep 17 00:00:00 2001
From: Mikhail Novosyolov <m.novosyolov@rosalinux.ru>
Date: Thu, 18 Jun 2020 18:29:39 +0300
Subject: [PATCH] Remove RPM-illegal chars from module version
$ modinfo aacraid.ko | grep ^version:
version: 1.2.1[50877]-custom
kmod-deps.sh from rpm-openmandriva-setup is an RPM generator of Provides, it generates:
"kmod(aacraid) = 1.2.1[50877]_custom"
'[' and ']' are illegal characters in RPM
I have no idea how to deal with it in kmod-deps.sh and do not want to drop this/these provide(s),
so let me just patch the module version inside the kernel.
Converting from '1.2.1[50877]-custom' to '1.2.1_50877-custom'
No idea if any external scripts rely on parsing this version, hope that no.
Upstreamized: not needed
Signed-off-by: Mikhail Novosyolov <m.novosyolov@rosalinux.ru>
---
drivers/scsi/aacraid/linit.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c
index 4a858789e6c5..fbded922a52e 100644
--- a/drivers/scsi/aacraid/linit.c
+++ b/drivers/scsi/aacraid/linit.c
@@ -53,7 +53,7 @@
#ifdef AAC_DRIVER_BUILD
#define _str(x) #x
#define str(x) _str(x)
-#define AAC_DRIVER_FULL_VERSION AAC_DRIVER_VERSION "[" str(AAC_DRIVER_BUILD) "]" AAC_DRIVER_BRANCH
+#define AAC_DRIVER_FULL_VERSION AAC_DRIVER_VERSION "_" str(AAC_DRIVER_BUILD) AAC_DRIVER_BRANCH
#else
#define AAC_DRIVER_FULL_VERSION AAC_DRIVER_VERSION AAC_DRIVER_BRANCH
#endif
--
2.25.1

View file

@ -0,0 +1,30 @@
Subject: [PATCH] Revert "kallsyms: unexport kallsyms_lookup_name() and
kallsyms_on_each_symbol()"
This reverts commit 0bd476e6c67190b5eb7b6e105c8db8ff61103281.
https://lwn.net/Articles/813350/
anbox kernel modules require kallsyms_lookup_name(), they are not propietary stuff like e.g. Nvidia, I want it to work more than trying to fight with violations of GPL where I do not have enough power.
Update for 5.15.28
diff --git a/kernel/kallsyms.c b/kernel/kallsyms.c
--- a/kernel/kallsyms.c
+++ b/kernel/kallsyms.c
@@ -203,6 +203,7 @@
}
return module_kallsyms_lookup_name(name);
}
+EXPORT_SYMBOL_GPL(kallsyms_lookup_name);
#ifdef CONFIG_LIVEPATCH
/*
@@ -226,6 +227,7 @@
}
return 0;
}
+EXPORT_SYMBOL_GPL(kallsyms_on_each_symbol);
#endif /* CONFIG_LIVEPATCH */
static unsigned long get_symbol_pos(unsigned long addr,

1175
0001-altha.patch Normal file

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,34 @@
From edce12c92c0d1e02a6f41344290ee7adee745ef4 Mon Sep 17 00:00:00 2001
From: Evgenii Shatokhin <eugene.shatokhin@rosalab.ru>
Date: Wed, 11 Dec 2019 21:10:42 +0300
Subject: [PATCH] audit: make it less verbose
It seems, if audit itself is not installed and therefore nothing listens
to the messages from the kernel's audit subsystem, the latter spams the
kernel log with such messages.
Let us make them debug-level and thus invisible by default.
http://bugs.rosalinux.ru/show_bug.cgi?id=6235
http://bugs.rosalinux.ru/show_bug.cgi?id=6459
Signed-off-by: Mikhail Novosyolov <m.novosyolov@rosalinux.ru>
---
kernel/audit.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/kernel/audit.c b/kernel/audit.c
index 68cee3bc8cfe..805633090ea5 100644
--- a/kernel/audit.c
+++ b/kernel/audit.c
@@ -535,7 +535,7 @@ static void kauditd_printk_skb(struct sk_buff *skb)
char *data = nlmsg_data(nlh);
if (nlh->nlmsg_type != AUDIT_EOE && printk_ratelimit())
- pr_notice("type=%d %s\n", nlh->nlmsg_type, data);
+ pr_debug("type=%d %s\n", nlh->nlmsg_type, data);
}
/**
--
2.25.1

View file

@ -0,0 +1,39 @@
Subject: [PATCH] crypto: support loading GOST-signed kernel modules
Support loading kernel modules signed with:
* 1.2.643.7.1.1.1.1 id-tc26-gost3410-12-256
* 1.2.643.7.1.1.1.2 id-tc26-gost3410-12-512
Update for 5.15.28
diff --git a/crypto/asymmetric_keys/pkcs7_parser.c b/crypto/asymmetric_keys/pkcs7_parser.c
--- a/crypto/asymmetric_keys/pkcs7_parser.c
+++ b/crypto/asymmetric_keys/pkcs7_parser.c
@@ -248,6 +248,12 @@
case OID_sha224:
ctx->sinfo->sig->hash_algo = "sha224";
break;
+ case OID_gost2012Digest256:
+ ctx->sinfo->sig->hash_algo = "streebog256";
+ break;
+ case OID_gost2012Digest512:
+ ctx->sinfo->sig->hash_algo = "streebog512";
+ break;
default:
printk("Unsupported digest algo: %u\n", ctx->last_oid);
return -ENOPKG;
@@ -277,6 +283,11 @@
ctx->sinfo->sig->pkey_algo = "ecdsa";
ctx->sinfo->sig->encoding = "x962";
break;
+ case OID_gost2012PKey256:
+ case OID_gost2012PKey512:
+ ctx->sinfo->sig->pkey_algo = "ecrdsa";
+ ctx->sinfo->sig->encoding = "raw";
+ break;
default:
printk("Unsupported pkey algo: %u\n", ctx->last_oid);
return -ENOPKG;
--
2.17.1

View file

@ -0,0 +1,102 @@
Subject: [PATCH] disable mrproper prepare scripts configs in devel rpms
This is for disabling *config, mrproper, prepare, scripts on -devel rpms
Needed, because otherwise the -devel won't build correctly.
Update for 5.15.28
diff --git a/Makefile b/Makefile
--- a/Makefile
+++ b/Makefile
@@ -1199,8 +1199,7 @@
# Carefully list dependencies so we do not try to build scripts twice
# in parallel
PHONY += scripts
-scripts: scripts_basic scripts_dtc
- $(Q)$(MAKE) $(build)=$(@)
+scripts:
# Things we need to do before we recursively start building the kernel
# or the modules are listed in "prepare".
@@ -1219,7 +1218,7 @@
$(Q)$(MAKE) $(build)=.
# All the preparing..
-prepare: prepare0
+prepare:
PHONY += remove-stale-files
remove-stale-files:
@@ -1520,15 +1519,7 @@
compile_commands.json .thinlto-cache
# Directories & files removed with 'make mrproper'
-MRPROPER_FILES += include/config include/generated \
- arch/$(SRCARCH)/include/generated .tmp_objdiff \
- debian snap tar-install \
- .config .config.old .version \
- Module.symvers \
- certs/signing_key.pem certs/signing_key.x509 \
- certs/x509.genkey \
- vmlinux-gdb.py \
- *.spec
+MRPROPER_FILES += ""
# clean - Delete most, but leave enough to build external modules
#
@@ -1545,13 +1536,10 @@
# mrproper - Delete all generated files, including .config
#
mrproper: rm-files := $(wildcard $(MRPROPER_FILES))
-mrproper-dirs := $(addprefix _mrproper_,scripts)
-PHONY += $(mrproper-dirs) mrproper
-$(mrproper-dirs):
- $(Q)$(MAKE) $(clean)=$(patsubst _mrproper_%,%,$@)
+PHONY += mrproper
-mrproper: clean $(mrproper-dirs)
+mrproper: clean
$(call cmd,rmfiles)
# distclean
diff --git a/scripts/kconfig/Makefile b/scripts/kconfig/Makefile
--- a/scripts/kconfig/Makefile
+++ b/scripts/kconfig/Makefile
@@ -54,11 +54,9 @@
cmp -s .tmp.config .config || \
(mv -f .config .config.old.1; \
mv -f .tmp.config .config; \
- $< $(silent) --oldconfig $(Kconfig); \
mv -f .config.old.1 .config.old) \
else \
mv -f .tmp.config .config; \
- $< $(silent) --oldconfig $(Kconfig); \
fi
$(Q)rm -f .tmp.config
@@ -74,24 +72,14 @@
PHONY += $(simple-targets)
$(simple-targets): $(obj)/conf
- $(Q)$< $(silent) --$@ $(Kconfig)
PHONY += savedefconfig defconfig
savedefconfig: $(obj)/conf
- $(Q)$< $(silent) --$@=defconfig $(Kconfig)
defconfig: $(obj)/conf
-ifneq ($(wildcard $(srctree)/arch/$(SRCARCH)/configs/$(KBUILD_DEFCONFIG)),)
- @$(kecho) "*** Default configuration is based on '$(KBUILD_DEFCONFIG)'"
- $(Q)$< $(silent) --defconfig=arch/$(SRCARCH)/configs/$(KBUILD_DEFCONFIG) $(Kconfig)
-else
- @$(kecho) "*** Default configuration is based on target '$(KBUILD_DEFCONFIG)'"
- $(Q)$(MAKE) -f $(srctree)/Makefile $(KBUILD_DEFCONFIG)
-endif
%_defconfig: $(obj)/conf
- $(Q)$< $(silent) --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig)
configfiles=$(wildcard $(srctree)/kernel/configs/$@ $(srctree)/arch/$(SRCARCH)/configs/$@)

View file

@ -0,0 +1,30 @@
From 8d376cb0241182ae4859db3aa7f790996054ae75 Mon Sep 17 00:00:00 2001
From: Evgenii Shatokhin <eugene.shatokhin@rosalab.ru>
Date: Wed, 11 Dec 2019 21:12:06 +0300
Subject: [PATCH] perf: skip xmlto validation
Perf docs are built after all the kernels. To validate the xml files
generated during that process, xmlto tries to get DTD files from the Net.
If it fails, the whole build fails, which is unfortunate. Let us avoid this.
Signed-off-by: Mikhail Novosyolov <m.novosyolov@rosalinux.ru>
---
tools/perf/Documentation/Makefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tools/perf/Documentation/Makefile b/tools/perf/Documentation/Makefile
index 6e54979c2124..ccbc7a68769d 100644
--- a/tools/perf/Documentation/Makefile
+++ b/tools/perf/Documentation/Makefile
@@ -51,7 +51,7 @@ ASCIIDOC=asciidoc
ASCIIDOC_EXTRA += --unsafe -f asciidoc.conf
ASCIIDOC_HTML = xhtml11
MANPAGE_XSL = manpage-normal.xsl
-XMLTO_EXTRA =
+XMLTO_EXTRA = --skip-validation
INSTALL?=install
RM ?= rm -f
DOC_REF = origin/man
--
2.25.1

View file

@ -0,0 +1,47 @@
From 7fac9b5a88bf45574b92cc3ad74fac32f3bacbcc Mon Sep 17 00:00:00 2001
From: Mikhail Novosyolov <m.novosyolov@rosalinux.ru>
Date: Thu, 19 Mar 2020 00:15:41 +0300
Subject: [PATCH] sign-file: full functionality with modern LibreSSL
Current pre-release version of LibreSSL has enabled CMS support,
and now sign-file is fully functional with it.
See https://github.com/libressl-portable/openbsd/commits/master
To test buildability with LibreSSL:
~$ git clone https://github.com/libressl-portable/portable.git
~$ cd portable && ./autogen.sh
~$ ./configure --prefix=/opt/libressl
~$ make
~# make install
Go to the kernel source tree and:
~$ gcc -I/opt/libressl/include -L /opt/libressl/lib -lcrypto -Wl,-rpath,/opt/libressl/lib scripts/sign-file.c -o scripts/sign-file
Fixes: f8688017 ("sign-file: fix build error in sign-file.c with libressl")
Signed-off-by: Mikhail Novosyolov <m.novosyolov@rosalinux.ru>
---
scripts/sign-file.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/scripts/sign-file.c b/scripts/sign-file.c
index fbd34b8e8f57..fd4d7c31d1bf 100644
--- a/scripts/sign-file.c
+++ b/scripts/sign-file.c
@@ -41,9 +41,10 @@
* signing with anything other than SHA1 - so we're stuck with that if such is
* the case.
*/
-#if defined(LIBRESSL_VERSION_NUMBER) || \
- OPENSSL_VERSION_NUMBER < 0x10000000L || \
- defined(OPENSSL_NO_CMS)
+#if defined(OPENSSL_NO_CMS) || \
+ ( defined(LIBRESSL_VERSION_NUMBER) \
+ && (LIBRESSL_VERSION_NUMBER < 0x3010000fL) ) || \
+ OPENSSL_VERSION_NUMBER < 0x10000000L
#define USE_PKCS7
#endif
#ifndef USE_PKCS7
--
2.20.1

12453
0601-baikalm.patch Normal file

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,27 @@
From 33a36bf1bf71c1bffdb0631a09856a24ba3d8165 Mon Sep 17 00:00:00 2001
From: Alexey Sheplyakov <asheplyakov@altlinux.org>
Date: Fri, 20 Mar 2020 17:14:36 +0400
Subject: [PATCH 604/625] efi/arm-runtime: print EFI mapping
(cherry picked from commit 652f76ffabc0e987169934d924d9e34b99b4cca9)
---
drivers/firmware/efi/arm-runtime.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/firmware/efi/arm-runtime.c b/drivers/firmware/efi/arm-runtime.c
index 3359ae2adf24..5028cd1605f3 100644
--- a/drivers/firmware/efi/arm-runtime.c
+++ b/drivers/firmware/efi/arm-runtime.c
@@ -71,6 +71,9 @@ static bool __init efi_virtmap_init(void)
pr_warn(" EFI remap %pa: failed to create mapping (%d)\n",
&phys, ret);
return false;
+ } else {
+ pr_info(" EFI remap %pa => %llx\n",
+ &phys, (unsigned long long)md->virt_addr);
}
}
--
2.31.1

View file

@ -0,0 +1,161 @@
Subject: [PATCH 608/625] Baikal-M: USB driver
Update for 5.15.105
diff --git a/drivers/usb/dwc3/Kconfig b/drivers/usb/dwc3/Kconfig
--- a/drivers/usb/dwc3/Kconfig
+++ b/drivers/usb/dwc3/Kconfig
@@ -158,4 +158,13 @@
This driver handles both ZynqMP and Versal SoC operations.
Say 'Y' or 'M' if you have one such device.
+config USB_DWC3_BAIKAL
+ tristate "Baikal Electronics Platforms"
+ depends on OF
+ default USB_DWC3
+ help
+ Baikal Electronics SoCs with one DesignWare Core USB3 IP
+ inside.
+ Say 'Y' or 'M' if you have one such device.
+
endif
diff --git a/drivers/usb/dwc3/Makefile b/drivers/usb/dwc3/Makefile
--- a/drivers/usb/dwc3/Makefile
+++ b/drivers/usb/dwc3/Makefile
@@ -53,3 +53,4 @@
obj-$(CONFIG_USB_DWC3_QCOM) += dwc3-qcom.o
obj-$(CONFIG_USB_DWC3_IMX8MP) += dwc3-imx8mp.o
obj-$(CONFIG_USB_DWC3_XILINX) += dwc3-xilinx.o
+obj-$(CONFIG_USB_DWC3_BAIKAL) += dwc3-baikal.o
diff --git a/drivers/usb/dwc3/dwc3-baikal.c b/drivers/usb/dwc3/dwc3-baikal.c
new file mode 100644
index 000000000000..2426dc49bd79
--- /dev/null
+++ b/drivers/usb/dwc3/dwc3-baikal.c
@@ -0,0 +1,126 @@
+/**
+ * dwc3-baikal.c - Baikal Electronics SoCs Specific Glue layer
+ *
+ * Copyright (C) 2015 Baikal Electronics JSC - http://www.baikalelectronics.ru
+ *
+ * Author: Dmitry Dunaev <dmitry.dunaev@baikalelectronics.ru>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 of
+ * the License 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.
+ */
+
+#include <linux/clk.h>
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/interrupt.h>
+#include <linux/platform_device.h>
+#include <linux/dma-mapping.h>
+#include <linux/usb/usb_phy_generic.h>
+#include <linux/io.h>
+#include <linux/of_platform.h>
+
+struct dwc3_baikal {
+ struct device *dev;
+ struct clk *clk;
+};
+
+static int be_dwc3_probe(struct platform_device *pdev)
+{
+ struct device *dev = &pdev->dev;
+ struct device_node *node = pdev->dev.of_node;
+ struct dwc3_baikal *dwc;
+ int ret;
+
+ dwc = devm_kzalloc(dev, sizeof(*dwc), GFP_KERNEL);
+ if (!dwc)
+ return -ENOMEM;
+
+ ret = dma_coerce_mask_and_coherent(dev, DMA_BIT_MASK(64));
+ if (ret) {
+ dev_err(dev, "DMA mask error %d\n", ret);
+ return ret;
+ }
+
+ platform_set_drvdata(pdev, dwc);
+ dwc->dev = dev;
+
+ dwc->clk = devm_clk_get(dwc->dev, "usb");
+ if (IS_ERR(dwc->clk)) {
+ dev_err(dev, "no interface clk specified\n");
+ return -EINVAL;
+ }
+
+ ret = clk_prepare_enable(dwc->clk);
+ if (ret < 0) {
+ dev_err(dwc->dev, "unable to enable usb clock\n");
+ return ret;
+ }
+
+ if (node) {
+ ret = of_platform_populate(node, NULL, NULL, dev);
+ if (ret) {
+ dev_err(&pdev->dev, "failed to create dwc3 core\n");
+ goto __error;
+ }
+ } else {
+ dev_err(dev, "no device node, failed to add dwc3 core\n");
+ ret = -ENODEV;
+ goto __error;
+ }
+
+ return 0;
+
+__error:
+ clk_disable_unprepare(dwc->clk);
+
+ return ret;
+}
+
+static int be_dwc3_remove_core(struct device *dev, void *c)
+{
+ struct platform_device *pdev = to_platform_device(dev);
+
+ platform_device_unregister(pdev);
+
+ return 0;
+}
+
+static int be_dwc3_remove(struct platform_device *pdev)
+{
+ struct dwc3_baikal *dwc = platform_get_drvdata(pdev);
+
+ device_for_each_child(&pdev->dev, NULL, be_dwc3_remove_core);
+ clk_disable_unprepare(dwc->clk);
+
+ platform_set_drvdata(pdev, NULL);
+
+ return 0;
+}
+
+static const struct of_device_id be_dwc3_of_match[] = {
+ { .compatible = "be,baikal-dwc3", },
+ {},
+};
+MODULE_DEVICE_TABLE(of, be_dwc3_of_match);
+
+static struct platform_driver be_dwc3_driver = {
+ .probe = be_dwc3_probe,
+ .remove = be_dwc3_remove,
+ .driver = {
+ .name = "baikal-dwc3",
+ .of_match_table = be_dwc3_of_match,
+ },
+};
+
+module_platform_driver(be_dwc3_driver);
+
+MODULE_ALIAS("platform:baikal-dwc3");
+MODULE_AUTHOR("Dmitry Dunaev <dmitry.dunaev@baikalelectronics.ru>");
+MODULE_LICENSE("GPL v2");
+MODULE_DESCRIPTION("DesignWare USB3 Baikal SoCs Glue Layer");

View file

@ -0,0 +1,103 @@
Subject: [PATCH 609/625] Baikal-M: video unit driver
Update for 5.15.28
diff --git a/drivers/gpu/drm/baikal/baikal_vdu_encoder.c b/drivers/gpu/drm/baikal/baikal_vdu_encoder.c
new file mode 100644
--- /dev/null
+++ b/drivers/gpu/drm/baikal/baikal_vdu_encoder.c
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2019-2020 Baikal Electronics JSC
+ *
+ * Author: Pavel Parkhomenko <Pavel.Parkhomenko@baikalelectronics.ru>
+ *
+ * Parts of this file were based on sources as follows:
+ *
+ * Copyright (c) 2006-2008 Intel Corporation
+ * Copyright (c) 2007 Dave Airlie <airlied@linux.ie>
+ * Copyright (C) 2011 Texas Instruments
+ * (C) COPYRIGHT 2012-2013 ARM Limited. All rights reserved.
+ *
+ * This program is free software and is provided to you under the terms of the
+ * GNU General Public License version 2 as published by the Free Software
+ * Foundation, and any use by you of this program is subject to the terms of
+ * such GNU licence.
+ *
+ */
+
+/**
+ * baikal_vdu_encoder.c
+ * Implementation of the encoder functions for Baikal Electronics BE-M1000 VDU driver
+ */
+#include <linux/version.h>
+#include <linux/shmem_fs.h>
+#include <linux/dma-buf.h>
+
+#include <drm/drm_crtc_helper.h>
+
+#include "baikal_vdu_drm.h"
+
+const struct drm_encoder_funcs baikal_vdu_encoder_funcs = {
+ .destroy = drm_encoder_cleanup,
+};
+
+int baikal_vdu_encoder_init(struct drm_device *dev)
+{
+ struct baikal_vdu_private *priv = dev->dev_private;
+ struct drm_encoder *encoder = &priv->encoder;
+ int ret;
+
+ ret = drm_encoder_init(dev, encoder, &baikal_vdu_encoder_funcs,
+ DRM_MODE_ENCODER_NONE, NULL);
+ if (ret)
+ return ret;
+
+ encoder->crtc = &priv->crtc;
+ encoder->possible_crtcs = BIT(drm_crtc_index(encoder->crtc));
+
+ return 0;
+}
diff --git a/drivers/gpu/drm/baikal/baikal_vdu_gem.c b/drivers/gpu/drm/baikal/baikal_vdu_gem.c
new file mode 100644
index 000000000000..b07566caf12c
--- /dev/null
+++ b/drivers/gpu/drm/baikal/baikal_vdu_gem.c
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2019-2020 Baikal Electronics JSC
+ *
+ * Author: Pavel Parkhomenko <Pavel.Parkhomenko@baikalelectronics.ru>
+ *
+ * Parts of this file were based on sources as follows:
+ *
+ * Copyright (c) 2006-2008 Intel Corporation
+ * Copyright (c) 2007 Dave Airlie <airlied@linux.ie>
+ * Copyright (C) 2011 Texas Instruments
+ * (C) COPYRIGHT 2012-2013 ARM Limited. All rights reserved.
+ *
+ * This program is free software and is provided to you under the terms of the
+ * GNU General Public License version 2 as published by the Free Software
+ * Foundation, and any use by you of this program is subject to the terms of
+ * such GNU licence.
+ *
+ */
+
+/**
+ * baikal_vdu_gem.c
+ * Implementation of the GEM functions for Baikal Electronics BE-M1000 VDU driver
+ */
+#include <linux/version.h>
+#include <linux/shmem_fs.h>
+#include <linux/dma-buf.h>
+#include <drm/drm_crtc_helper.h>
+#include <drm/drm_gem_cma_helper.h>
+#include "baikal_vdu_drm.h"
+
+int baikal_vdu_dumb_create(struct drm_file *file_priv,
+ struct drm_device *dev, struct drm_mode_create_dumb *args)
+{
+ args->pitch = DIV_ROUND_UP(args->width * args->bpp, 8);
+
+ return drm_gem_cma_dumb_create_internal(file_priv, dev, args);
+}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,850 @@
Subject: [PATCH 617/625] Baikal-M: PCIe driver from SDK-M 4.4
Appears to successfully probe the hardware, lspci -vv output
looks good. No other testing has been done yet.
Update for 5.15.28
diff --git a/drivers/pci/controller/dwc/Makefile b/drivers/pci/controller/dwc/Makefile
--- a/drivers/pci/controller/dwc/Makefile
+++ b/drivers/pci/controller/dwc/Makefile
@@ -24,7 +24,7 @@
obj-$(CONFIG_PCIE_UNIPHIER) += pcie-uniphier.o
obj-$(CONFIG_PCIE_UNIPHIER_EP) += pcie-uniphier-ep.o
obj-$(CONFIG_PCIE_VISCONTI_HOST) += pcie-visconti.o
-obj-$(CONFIG_PCI_BAIKAL) += pcie-baikal.o
+obj-$(CONFIG_PCI_BAIKAL) += pcie-baikal.o pcie-baikal-v44.o
# The following drivers are for devices that use the generic ACPI
# pci_root.c driver but don't support standard ECAM config access.
diff --git a/drivers/pci/controller/dwc/pcie-baikal-v44.c b/drivers/pci/controller/dwc/pcie-baikal-v44.c
new file mode 100644
--- /dev/null
+++ b/drivers/pci/controller/dwc/pcie-baikal-v44.c
@@ -0,0 +1,826 @@
+/*
+ * PCIe root complex driver for Baikal SoCs
+ *
+ * Copyright (C) 2019-2020 Baikal Electronics, JSC
+ * Authors: Pavel Parkhomenko <pavel.parkhomenko@baikalelectronics.ru>
+ * Mikhail Ivanov <michail.ivanov@baikalelectronics.ru>
+ *
+ * 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.
+ */
+
+#include <linux/interrupt.h>
+#include <linux/module.h>
+#include <linux/irqchip/arm-gic-v3.h>
+#include <linux/mfd/baikal/lcru-pcie.h>
+#include <linux/mfd/syscon.h>
+#include <linux/of_address.h>
+#include <linux/of_device.h>
+#include <linux/of_gpio.h>
+#include <linux/pci.h>
+#include <linux/phy/phy.h>
+
+#include "pcie-designware.h"
+
+#ifdef CONFIG_PCI_DEBUG
+#define DEBUG
+#endif
+
+struct baikal_pcie {
+ struct dw_pcie pp;
+ unsigned bus_nr;
+ struct regmap *lcru;
+ struct gpio_desc *reset_gpio;
+ unsigned reset_active_low;
+ char reset_name[32];
+ unsigned retrained;
+ unsigned num_lanes;
+};
+
+#define to_baikal_pcie(x) container_of((x), struct baikal_pcie, pp)
+
+#define PCIE_DEVICE_CONTROL_DEVICE_STATUS_REG 0x78
+#define PCIE_CAP_CORR_ERR_REPORT_EN BIT(0)
+#define PCIE_CAP_NON_FATAL_ERR_REPORT_EN BIT(1)
+#define PCIE_CAP_FATAL_ERR_REPORT_EN BIT(2)
+#define PCIE_CAP_UNSUPPORT_REQ_REP_EN BIT(3)
+
+#define PCIE_LINK_CAPABILITIES_REG 0x7c
+#define PCIE_CAP_MAX_LINK_WIDTH_MASK 0x3f0
+#define PCIE_CAP_MAX_LINK_WIDTH_SHIFT 4
+
+#define PCIE_LINK_CONTROL_LINK_STATUS_REG 0x80
+#define PCIE_CAP_LINK_SPEED_MASK 0xf0000
+#define PCIE_CAP_LINK_SPEED_SHIFT 16
+#define PCIE_CAP_NEGO_LINK_WIDTH_MASK 0x3f00000
+#define PCIE_CAP_NEGO_LINK_WIDTH_SHIFT 20
+#define PCIE_CAP_LINK_TRAINING BIT(27)
+
+#define PCIE_ROOT_CONTROL_ROOT_CAPABILITIES_REG 0x8c
+#define PCIE_CAP_SYS_ERR_ON_CORR_ERR_EN BIT(0)
+#define PCIE_CAP_SYS_ERR_ON_NON_FATAL_ERR_EN BIT(1)
+#define PCIE_CAP_SYS_ERR_ON_FATAL_ERR_EN BIT(2)
+#define PCIE_CAP_PME_INT_EN BIT(3)
+
+#define PCIE_LINK_CONTROL2_LINK_STATUS2_REG 0xa0
+#define PCIE_CAP_TARGET_LINK_SPEED_MASK 0xf
+
+#define PCIE_UNCORR_ERR_STATUS_REG 0x104
+#define PCIE_CORR_ERR_STATUS_REG 0x110
+
+#define PCIE_ROOT_ERR_CMD_REG 0x12c
+#define PCIE_CORR_ERR_REPORTING_EN BIT(0)
+#define PCIE_NON_FATAL_ERR_REPORTING_EN BIT(1)
+#define PCIE_FATAL_ERR_REPORTING_EN BIT(2)
+
+#define PCIE_ROOT_ERR_STATUS_REG 0x130
+
+#define PCIE_GEN2_CTRL_REG 0x80c
+#define PCIE_DIRECT_SPEED_CHANGE BIT(17)
+
+#define PCIE_MSI_CTRL_ADDR_LO_REG 0x820
+#define PCIE_MSI_CTRL_ADDR_HI_REG 0x824
+
+#define PCIE_MISC_CONTROL_1_REG 0x8bc
+#define PCIE_DBI_RO_RW_EN BIT(0)
+
+#define PCIE_IATU_VIEWPORT_REG 0x900
+#define PCIE_IATU_REGION_INBOUND BIT(31)
+#define PCIE_IATU_REGION_OUTBOUND 0
+#define PCIE_IATU_REGION_CTRL_2_REG 0x908
+
+static const struct of_device_id of_baikal_pcie_match[] = {
+ { .compatible = "baikal,pcie-m", },
+ {},
+};
+
+static unsigned baikal_pcie_link_is_training(struct dw_pcie *pp)
+{
+ unsigned long reg;
+ reg = dw_pcie_readl_dbi(pp, PCIE_LINK_CONTROL_LINK_STATUS_REG);
+ return reg & PCIE_CAP_LINK_TRAINING;
+}
+
+static bool baikal_wait_pcie_link_training_done(struct dw_pcie *pp)
+{
+ unsigned long start_jiffies = jiffies;
+ while (baikal_pcie_link_is_training(pp)) {
+ if (time_after(jiffies, start_jiffies + HZ)) {
+ pr_err("%s: link retrained for too long, timeout occured\n", __func__);
+ return false;
+ }
+ udelay(100);
+ }
+ return true;
+}
+
+static void baikal_print_link_status(struct dw_pcie *pp)
+{
+ unsigned long reg;
+ unsigned speed, width;
+
+ reg = dw_pcie_readl_dbi(pp, PCIE_LINK_CONTROL_LINK_STATUS_REG);
+ speed = (reg & PCIE_CAP_LINK_SPEED_MASK) >> PCIE_CAP_LINK_SPEED_SHIFT;
+ width = (reg & PCIE_CAP_NEGO_LINK_WIDTH_MASK) >>
+ PCIE_CAP_NEGO_LINK_WIDTH_SHIFT;
+
+ dev_info(pp->dev, "link status is Gen%u, x%u\n", speed, width);
+}
+
+static void baikal_pcie_link_retrain(struct dw_pcie *pp, int target_speed)
+{
+ unsigned long reg;
+ unsigned long start_jiffies;
+
+ dev_info(pp->dev, "retrain link to Gen%u\n", target_speed);
+
+ /* In case link is already training wait for training to complete */
+ baikal_wait_pcie_link_training_done(pp);
+
+ /* Set desired speed */
+ reg = dw_pcie_readl_dbi(pp, PCIE_LINK_CONTROL2_LINK_STATUS2_REG);
+ reg &= ~PCIE_CAP_TARGET_LINK_SPEED_MASK;
+ reg |= target_speed;
+ dw_pcie_writel_dbi(pp, PCIE_LINK_CONTROL2_LINK_STATUS2_REG, reg);
+
+ /* Set DIRECT_SPEED_CHANGE bit */
+ reg = dw_pcie_readl_dbi(pp, PCIE_GEN2_CTRL_REG);
+ reg &= ~PCIE_DIRECT_SPEED_CHANGE;
+ dw_pcie_writel_dbi(pp, PCIE_GEN2_CTRL_REG, reg);
+ reg |= PCIE_DIRECT_SPEED_CHANGE;
+ dw_pcie_writel_dbi(pp, PCIE_GEN2_CTRL_REG, reg);
+
+ /* Wait for link training begin */
+ start_jiffies = jiffies;
+ while (baikal_pcie_link_is_training(pp) == 0) {
+ if (time_after(jiffies, start_jiffies + HZ)) {
+ pr_err("%s: link retrained for too long, timeout occured\n", __func__);
+ break;
+ }
+ udelay(100);
+ }
+
+ /* Wait for link training end */
+ baikal_wait_pcie_link_training_done(pp);
+
+ if (dw_pcie_wait_for_link(pp) == 0) {
+ baikal_print_link_status(pp);
+ }
+}
+
+static void baikal_pcie_link_speed_fixup(struct pci_dev *pdev)
+{
+ struct pcie_port *portp = pdev->bus->sysdata;
+ struct dw_pcie *pp = to_dw_pcie_from_pp(portp);
+ struct baikal_pcie *pcie = to_baikal_pcie(pp);
+ unsigned dev_lnkcap_speed;
+ unsigned dev_lnkcap_width;
+ unsigned rc_lnkcap_speed;
+ unsigned rc_lnksta_speed;
+ unsigned rc_target_speed;
+ u32 reg;
+
+ /* Skip Root Bridge */
+ if (!pdev->bus->self) {
+ return;
+ }
+
+ /* Skip any devices not directly connected to the RC */
+ if (pdev->bus->self->bus->number != portp->bridge->bus->number) {
+ return;
+ }
+
+ /* Skip if the bus has already been retrained */
+ if (pcie->retrained) {
+ return;
+ }
+
+ reg = dw_pcie_readl_dbi(pp, PCIE_LINK_CAPABILITIES_REG);
+ rc_lnkcap_speed = reg & PCI_EXP_LNKCAP_SLS;
+
+ reg = dw_pcie_readl_dbi(pp, PCIE_LINK_CONTROL_LINK_STATUS_REG);
+ rc_lnksta_speed = (reg & PCIE_CAP_LINK_SPEED_MASK) >>
+ PCIE_CAP_LINK_SPEED_SHIFT;
+
+ rc_target_speed = rc_lnksta_speed < 3? rc_lnksta_speed + 1 : 3;
+
+ pcie_capability_read_dword(pdev, PCI_EXP_LNKCAP, &reg);
+ dev_lnkcap_speed = (reg & PCI_EXP_LNKCAP_SLS);
+ dev_lnkcap_width = (reg & PCI_EXP_LNKCAP_MLW) >> PCI_EXP_LNKSTA_NLW_SHIFT;
+
+ baikal_print_link_status(pp);
+ dev_info(&pdev->dev, "device link capability is Gen%u, x%u\n",
+ dev_lnkcap_speed, dev_lnkcap_width);
+
+ while (rc_target_speed > rc_lnksta_speed &&
+ rc_target_speed <= rc_lnkcap_speed &&
+ rc_target_speed <= dev_lnkcap_speed) {
+ /* Try to change link speed */
+ baikal_pcie_link_retrain(pp, rc_target_speed);
+ reg = dw_pcie_readl_dbi(pp, PCIE_LINK_CONTROL_LINK_STATUS_REG);
+ rc_lnksta_speed = (reg & PCIE_CAP_LINK_SPEED_MASK) >>
+ PCIE_CAP_LINK_SPEED_SHIFT;
+
+ /* Check if the targeted speed has not been reached */
+ if (rc_lnksta_speed < rc_target_speed) {
+ /* Check if the retraining has led to speed regression */
+ if (rc_lnksta_speed < (rc_target_speed - 1)) {
+ /* Fall back to the previous speed */
+ --rc_target_speed;
+ baikal_pcie_link_retrain(pp, rc_target_speed);
+ }
+
+ break;
+ }
+
+ ++rc_target_speed;
+ }
+
+ pcie->retrained = 1;
+}
+
+static void baikal_pcie_retrain_links(const struct pci_bus *bus)
+{
+ struct pci_dev *dev;
+ struct pci_bus *child;
+
+ list_for_each_entry(dev, &bus->devices, bus_list)
+ baikal_pcie_link_speed_fixup(dev);
+
+ list_for_each_entry(dev, &bus->devices, bus_list) {
+ child = dev->subordinate;
+ if (child)
+ baikal_pcie_retrain_links(child);
+ }
+}
+
+static int baikal_pcie_link_up(struct dw_pcie *pp)
+{
+ struct baikal_pcie *pcie = to_baikal_pcie(pp);
+ unsigned long reg;
+
+ reg = baikal_pcie_lcru_readl(pcie->lcru,
+ BAIKAL_LCRU_PCIE_GEN_CTL(pcie->bus_nr));
+
+ if ((reg & BAIKAL_PCIE_LTSSM_ENABLE) == 0) {
+ return 0;
+ }
+
+ reg = baikal_pcie_lcru_readl(pcie->lcru,
+ BAIKAL_LCRU_PCIE_STATUS(pcie->bus_nr));
+
+ return (reg & BAIKAL_PCIE_SMLH_LINKUP) &&
+ (reg & BAIKAL_PCIE_RDLH_LINKUP);
+}
+
+static int baikal_pcie_get_msi(struct baikal_pcie *pcie,
+ struct device_node *msi_node,
+ u64 *msi_addr)
+{
+ struct device *dev = pcie->pp.dev;
+ int ret;
+ struct resource res;
+
+ /*
+ * Check if 'msi-parent' points to ARM GICv3 ITS, which is the only
+ * supported MSI controller.
+ */
+ if (!of_device_is_compatible(msi_node, "arm,gic-v3-its")) {
+ dev_err(dev, "unable to find compatible MSI controller\n");
+ return -ENODEV;
+ }
+
+ /* Derive GITS_TRANSLATER address from GICv3 */
+ ret = of_address_to_resource(msi_node, 0, &res);
+ if (ret < 0) {
+ dev_err(dev, "unable to obtain MSI controller resources\n");
+ return ret;
+ }
+
+ *msi_addr = res.start + GITS_TRANSLATER;
+ return 0;
+}
+
+static int baikal_pcie_msi_steer(struct baikal_pcie *pcie,
+ struct device_node *msi_node)
+{
+ struct dw_pcie *pp = &pcie->pp;
+ struct device *dev = pp->dev;
+ int ret;
+ u64 msi_addr;
+
+ ret = baikal_pcie_get_msi(pcie, msi_node, &msi_addr);
+ if (ret < 0) {
+ dev_err(dev, "MSI steering failed\n");
+ return ret;
+ }
+
+ /* Program the msi_data */
+ dw_pcie_write(pp->dbi_base + PCIE_MSI_CTRL_ADDR_LO_REG, 4,
+ lower_32_bits(msi_addr));
+ dw_pcie_write(pp->dbi_base + PCIE_MSI_CTRL_ADDR_HI_REG, 4,
+ upper_32_bits(msi_addr));
+ return 0;
+}
+
+static int baikal_pcie_msi_enable(struct baikal_pcie *pcie)
+{
+ struct device *dev = pcie->pp.dev;
+ struct device_node *msi_node;
+ int ret;
+
+ /*
+ * The "msi-parent" phandle needs to exist
+ * for us to obtain the MSI node.
+ */
+ msi_node = of_parse_phandle(dev->of_node, "msi-parent", 0);
+ if (!msi_node) {
+ dev_err(dev, "failed to read msi-parent node from FDT\n");
+ return -ENODEV;
+ }
+
+ ret = baikal_pcie_msi_steer(pcie, msi_node);
+ if (ret) {
+ goto out_put_node;
+ }
+
+out_put_node:
+ of_node_put(msi_node);
+ return ret;
+}
+
+static irqreturn_t baikal_pcie_err_irq_handler(int irq, void *priv)
+{
+ struct baikal_pcie *pcie = priv;
+ struct device *dev = pcie->pp.dev;
+ unsigned long corr_err_status;
+ unsigned long dev_ctrl_dev_status;
+ unsigned long root_err_status;
+ unsigned long uncorr_err_status;
+
+ uncorr_err_status = dw_pcie_readl_dbi(&pcie->pp,
+ PCIE_UNCORR_ERR_STATUS_REG);
+ corr_err_status = dw_pcie_readl_dbi(&pcie->pp,
+ PCIE_CORR_ERR_STATUS_REG);
+ root_err_status = dw_pcie_readl_dbi(&pcie->pp,
+ PCIE_ROOT_ERR_STATUS_REG);
+ dev_ctrl_dev_status = dw_pcie_readl_dbi(&pcie->pp,
+ PCIE_DEVICE_CONTROL_DEVICE_STATUS_REG);
+ dev_err(dev,
+ "dev_err:0x%lx root_err:0x%lx uncorr_err:0x%lx corr_err:0x%lx\n",
+ (dev_ctrl_dev_status & 0xf0000) >> 16,
+ root_err_status, uncorr_err_status, corr_err_status);
+
+ dw_pcie_writel_dbi(&pcie->pp,
+ PCIE_UNCORR_ERR_STATUS_REG, uncorr_err_status);
+ dw_pcie_writel_dbi(&pcie->pp,
+ PCIE_CORR_ERR_STATUS_REG, corr_err_status);
+ dw_pcie_writel_dbi(&pcie->pp,
+ PCIE_ROOT_ERR_STATUS_REG, root_err_status);
+ dw_pcie_writel_dbi(&pcie->pp,
+ PCIE_DEVICE_CONTROL_DEVICE_STATUS_REG, dev_ctrl_dev_status);
+
+ return IRQ_HANDLED;
+}
+
+static int baikal_pcie_host_init(struct pcie_port *port)
+{
+ struct dw_pcie* pp = to_dw_pcie_from_pp(port);
+ struct device *dev = pp->dev;
+ struct baikal_pcie *pcie = to_baikal_pcie(pp);
+ int err;
+ int linkup;
+ unsigned idx;
+ unsigned long reg;
+
+ /* Disable access to PHY registers and DBI2 mode */
+ reg = baikal_pcie_lcru_readl(pcie->lcru,
+ BAIKAL_LCRU_PCIE_GEN_CTL(pcie->bus_nr));
+
+ reg &= ~(BAIKAL_PCIE_PHY_MGMT_ENABLE |
+ BAIKAL_PCIE_DBI2_MODE);
+
+ baikal_pcie_lcru_writel(pcie->lcru,
+ BAIKAL_LCRU_PCIE_GEN_CTL(pcie->bus_nr), reg);
+
+ pcie->retrained = 0;
+ linkup = baikal_pcie_link_up(pp);
+
+ /* If link is not established yet, reset the RC */
+ if (!linkup) {
+ /* Disable link training */
+ reg = baikal_pcie_lcru_readl(pcie->lcru,
+ BAIKAL_LCRU_PCIE_GEN_CTL(pcie->bus_nr));
+
+ reg &= ~BAIKAL_PCIE_LTSSM_ENABLE;
+ baikal_pcie_lcru_writel(pcie->lcru,
+ BAIKAL_LCRU_PCIE_GEN_CTL(pcie->bus_nr), reg);
+
+ /* Assert PERST pin */
+ if (pcie->reset_gpio != NULL) {
+ unsigned long gpio_flags;
+
+ if (pcie->reset_active_low) {
+ gpio_flags = GPIOF_ACTIVE_LOW |
+ GPIOF_OUT_INIT_LOW;
+ } else {
+ gpio_flags = GPIOF_OUT_INIT_HIGH;
+ }
+
+ err = devm_gpio_request_one(dev,
+ desc_to_gpio(pcie->reset_gpio),
+ gpio_flags, pcie->reset_name);
+
+ if (err) {
+ dev_err(dev, "request GPIO failed (%d)\n", err);
+ return -ENODEV;
+ }
+ }
+
+ /* Reset the RC */
+ reg = baikal_pcie_lcru_readl(pcie->lcru,
+ BAIKAL_LCRU_PCIE_RESET(pcie->bus_nr));
+
+ reg |= BAIKAL_PCIE_NONSTICKY_RST |
+ BAIKAL_PCIE_STICKY_RST |
+ BAIKAL_PCIE_PWR_RST |
+ BAIKAL_PCIE_CORE_RST |
+ BAIKAL_PCIE_PHY_RESET;
+
+ /* If the RC is PCIe x8, reset PIPE0 and PIPE1 */
+ if (pcie->bus_nr == 2) {
+ reg |= BAIKAL_PCIE_PIPE0_RESET |
+ BAIKAL_PCIE_PIPE1_RESET;
+ } else {
+ reg |= BAIKAL_PCIE_PIPE_RESET;
+ }
+
+ baikal_pcie_lcru_writel(pcie->lcru,
+ BAIKAL_LCRU_PCIE_RESET(pcie->bus_nr), reg);
+
+ usleep_range(20000, 30000);
+
+ if (pcie->reset_gpio != NULL) {
+ /* Deassert PERST pin */
+ gpiod_set_value_cansleep(pcie->reset_gpio, 0);
+ }
+
+ /* Deassert PHY reset */
+ reg = baikal_pcie_lcru_readl(pcie->lcru,
+ BAIKAL_LCRU_PCIE_RESET(pcie->bus_nr));
+
+ reg &= ~BAIKAL_PCIE_PHY_RESET;
+ baikal_pcie_lcru_writel(pcie->lcru,
+ BAIKAL_LCRU_PCIE_RESET(pcie->bus_nr), reg);
+
+ /* Deassert all software controlled resets */
+ reg = baikal_pcie_lcru_readl(pcie->lcru,
+ BAIKAL_LCRU_PCIE_RESET(pcie->bus_nr));
+
+ reg &= ~(BAIKAL_PCIE_ADB_PWRDWN |
+ BAIKAL_PCIE_HOT_RESET |
+ BAIKAL_PCIE_NONSTICKY_RST |
+ BAIKAL_PCIE_STICKY_RST |
+ BAIKAL_PCIE_PWR_RST |
+ BAIKAL_PCIE_CORE_RST |
+ BAIKAL_PCIE_PHY_RESET);
+
+ if (pcie->bus_nr == 2) {
+ reg &= ~(BAIKAL_PCIE_PIPE0_RESET |
+ BAIKAL_PCIE_PIPE1_RESET);
+ } else {
+ reg &= ~BAIKAL_PCIE_PIPE_RESET;
+ }
+
+ baikal_pcie_lcru_writel(pcie->lcru,
+ BAIKAL_LCRU_PCIE_RESET(pcie->bus_nr), reg);
+ }
+
+ /* Deinitialise all iATU regions */
+// for (idx = 0; idx < pp->num_viewport; ++idx) {
+// dw_pcie_writel_dbi(pp, PCIE_IATU_VIEWPORT_REG,
+// PCIE_IATU_REGION_OUTBOUND | idx);
+// dw_pcie_writel_dbi(pp, PCIE_IATU_REGION_CTRL_2_REG, 0);
+// }
+
+ /*
+ * Enable writing to config regs. This is required as the DW driver
+ * changes the class code. That register needs DBI write enable.
+ */
+ reg = dw_pcie_readl_dbi(pp, PCIE_MISC_CONTROL_1_REG);
+ reg |= PCIE_DBI_RO_RW_EN;
+ dw_pcie_writel_dbi(pp, PCIE_MISC_CONTROL_1_REG, reg);
+
+ dw_pcie_setup_rc(port);
+
+ /* Set prog-if = 1 */
+ reg = dw_pcie_readl_dbi(pp, PCI_CLASS_REVISION);
+ reg = (1 << 8) | (reg & 0xffff00ff);
+ dw_pcie_writel_dbi(pp, PCI_CLASS_REVISION, reg);
+
+ /* Set max link width in accordance with 'num-lanes' value */
+ reg = dw_pcie_readl_dbi(pp, PCIE_LINK_CAPABILITIES_REG);
+ reg &= ~PCIE_CAP_MAX_LINK_WIDTH_MASK;
+ reg |= (pcie->num_lanes) << PCIE_CAP_MAX_LINK_WIDTH_SHIFT;
+ dw_pcie_writel_dbi(pp, PCIE_LINK_CAPABILITIES_REG, reg);
+
+ /* Disable writing to config regs */
+ reg = dw_pcie_readl_dbi(pp, PCIE_MISC_CONTROL_1_REG);
+ reg &= ~PCIE_DBI_RO_RW_EN;
+ dw_pcie_writel_dbi(pp, PCIE_MISC_CONTROL_1_REG, reg);
+
+ if (IS_ENABLED(CONFIG_PCI_MSI)) {
+ err = baikal_pcie_msi_enable(pcie);
+ if (err) {
+ dev_err(pp->dev, "failed to initialize MSI\n");
+ return -EIO;
+ }
+ }
+
+ /* Enable error reporting */
+ reg = dw_pcie_readl_dbi(pp, PCIE_ROOT_ERR_CMD_REG);
+ reg |= PCIE_CORR_ERR_REPORTING_EN |
+ PCIE_NON_FATAL_ERR_REPORTING_EN |
+ PCIE_FATAL_ERR_REPORTING_EN;
+ dw_pcie_writel_dbi(pp, PCIE_ROOT_ERR_CMD_REG, reg);
+
+ reg = dw_pcie_readl_dbi(pp, PCIE_DEVICE_CONTROL_DEVICE_STATUS_REG);
+ reg |= PCIE_CAP_CORR_ERR_REPORT_EN |
+ PCIE_CAP_NON_FATAL_ERR_REPORT_EN |
+ PCIE_CAP_FATAL_ERR_REPORT_EN |
+ PCIE_CAP_UNSUPPORT_REQ_REP_EN;
+ dw_pcie_writel_dbi(pp, PCIE_DEVICE_CONTROL_DEVICE_STATUS_REG, reg);
+
+ reg = dw_pcie_readl_dbi(pp, PCIE_ROOT_CONTROL_ROOT_CAPABILITIES_REG);
+ reg |= PCIE_CAP_SYS_ERR_ON_CORR_ERR_EN |
+ PCIE_CAP_SYS_ERR_ON_NON_FATAL_ERR_EN |
+ PCIE_CAP_SYS_ERR_ON_FATAL_ERR_EN |
+ PCIE_CAP_PME_INT_EN;
+ dw_pcie_writel_dbi(pp, PCIE_ROOT_CONTROL_ROOT_CAPABILITIES_REG, reg);
+
+ if (linkup) {
+ dev_info(dev, "link is already up\n");
+ return 0;
+ }
+
+ /* Use Gen1 mode for link establishing */
+ reg = dw_pcie_readl_dbi(pp, PCIE_LINK_CONTROL2_LINK_STATUS2_REG);
+ reg &= ~PCIE_CAP_TARGET_LINK_SPEED_MASK;
+ reg |= 1;
+ dw_pcie_writel_dbi(pp, PCIE_LINK_CONTROL2_LINK_STATUS2_REG, reg);
+
+ /*
+ * Clear DIRECT_SPEED_CHANGE bit. It has been set by dw_pcie_setup_rc.
+ * This bit causes link retraining. However, link retraining should be
+ * performed later by calling a speed fixup function.
+ */
+ reg = dw_pcie_readl_dbi(pp, PCIE_GEN2_CTRL_REG);
+ reg &= ~PCIE_DIRECT_SPEED_CHANGE;
+ dw_pcie_writel_dbi(pp, PCIE_GEN2_CTRL_REG, reg);
+
+ /* Establish link */
+ reg = baikal_pcie_lcru_readl(pcie->lcru,
+ BAIKAL_LCRU_PCIE_GEN_CTL(pcie->bus_nr));
+
+ reg |= BAIKAL_PCIE_LTSSM_ENABLE;
+ baikal_pcie_lcru_writel(pcie->lcru,
+ BAIKAL_LCRU_PCIE_GEN_CTL(pcie->bus_nr), reg);
+
+ dw_pcie_wait_for_link(pp);
+ /* XXX:
+ * - return OK even if the link is down
+ * - on error dw_pcie_wait_for_link prints a warning on its own,
+ * there's no need to print more messages here
+ */
+ return 0;
+}
+
+static int baikal_pcie_msi_host_init(struct pcie_port *pp)
+{
+ struct dw_pcie* pcie = to_dw_pcie_from_pp(pp);
+ struct device *dev = pcie->dev;
+ struct device_node *np = dev->of_node;
+ struct device_node *msi_node;
+
+ /*
+ * The MSI domain is set by the generic of_msi_configure(). This
+ * .msi_host_init() function keeps us from doing the default MSI domain
+ * setup in dw_pcie_host_init() and also enforces the requirement that
+ * "msi-parent" exists.
+ */
+ msi_node = of_parse_phandle(np, "msi-parent", 0);
+ if (!msi_node) {
+ dev_err(dev, "failed to find msi-parent\n");
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
+static const struct dw_pcie_host_ops baikal_pcie_host_ops = {
+ .host_init = baikal_pcie_host_init,
+ .msi_host_init = baikal_pcie_msi_host_init,
+};
+
+static const struct dw_pcie_ops baikal_pcie_ops = {
+ .link_up = baikal_pcie_link_up,
+};
+
+static int baikal_add_pcie_port(struct baikal_pcie *pcie,
+ struct platform_device *pdev)
+{
+ struct dw_pcie *dw_pci = &pcie->pp;
+ struct pcie_port *pp = &dw_pci->pp;
+ struct resource *res;
+ int irq;
+ int ret;
+
+ dw_pci->dev = &pdev->dev;
+
+ res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "dbi");
+ if (res) {
+ devm_request_resource(dw_pci->dev, &iomem_resource, res);
+ dw_pci->dbi_base = devm_ioremap_resource(dw_pci->dev, res);
+ if (IS_ERR(dw_pci->dbi_base)) {
+ dev_err(dw_pci->dev, "error with ioremap\n");
+ return -ENOMEM;
+ }
+ } else {
+ dev_err(dw_pci->dev, "missing *dbi* reg space\n");
+ return -EINVAL;
+ }
+
+ irq = platform_get_irq(pdev, 0);
+ if (irq < 0) {
+ dev_err(dw_pci->dev, "missing IRQ resource: %d\n", irq);
+ return irq;
+ }
+
+ ret = devm_request_irq(dw_pci->dev, irq, baikal_pcie_err_irq_handler,
+ IRQF_SHARED | IRQF_NO_THREAD,
+ "baikal-pcie-error-irq", pcie);
+ if (ret) {
+ dev_err(dw_pci->dev, "failed to request IRQ\n");
+ return ret;
+ }
+
+ pp->ops = &baikal_pcie_host_ops;
+ ret = dw_pcie_host_init(pp);
+ if (ret) {
+ dev_err(dw_pci->dev, "failed to initialize host\n");
+ return ret;
+ }
+ baikal_pcie_retrain_links(pp->bridge->bus);
+
+ return 0;
+}
+
+static bool has_incompat_firmware(void) {
+ bool gotcha = false;
+ struct device_node *np = NULL;
+ np = of_find_node_by_path("/soc");
+ if (np) {
+ of_node_put(np);
+ } else {
+ gotcha = true;
+ }
+ return gotcha;
+}
+
+static int baikal_pcie_probe(struct platform_device *pdev)
+{
+ struct device *dev = &pdev->dev;
+ struct baikal_pcie *pcie;
+ int err;
+ u32 index[2];
+ enum of_gpio_flags gpio_flags;
+ int reset_gpio;
+
+ if (has_incompat_firmware()) {
+ dev_err(dev, "detected incompatible firmware, bailing out\n");
+ return -EINVAL;
+ }
+ if (!of_match_device(of_baikal_pcie_match, dev)) {
+ return -EINVAL;
+ }
+
+ pcie = devm_kzalloc(dev, sizeof(*pcie), GFP_KERNEL);
+ if (!pcie) {
+ return -ENOMEM;
+ }
+ pcie->pp.dev = dev;
+ pcie->pp.ops = &baikal_pcie_ops;
+
+ err = of_property_read_u32(dev->of_node, "num-lanes", &pcie->num_lanes);
+ if (err) {
+ dev_err(dev, "property num-lanes isn't found\n");
+ return -EINVAL;
+ }
+ pcie->lcru = syscon_regmap_lookup_by_phandle(dev->of_node,
+ "baikal,pcie-lcru");
+ if (IS_ERR(pcie->lcru)) {
+ dev_err(dev, "No LCRU phandle specified\n");
+ pcie->lcru = NULL;
+ return -EINVAL;
+ }
+
+ if (of_property_read_u32_array(dev->of_node, "baikal,pcie-lcru", index, 2)) {
+ pcie->lcru = NULL;
+ return -EINVAL;
+ }
+
+ pcie->bus_nr = index[1];
+
+ pm_runtime_enable(dev);
+ err = pm_runtime_get_sync(dev);
+ if (err < 0) {
+ dev_err(dev, "pm_runtime_get_sync failed\n");
+ goto err_pm_disable;
+ }
+
+ reset_gpio = of_get_named_gpio_flags(dev->of_node, "reset-gpios", 0,
+ &gpio_flags);
+ if (gpio_is_valid(reset_gpio)) {
+ pcie->reset_gpio = gpio_to_desc(reset_gpio);
+ pcie->reset_active_low = gpio_flags & OF_GPIO_ACTIVE_LOW;
+ snprintf(pcie->reset_name, sizeof pcie->reset_name,
+ "pcie%u-reset", pcie->bus_nr);
+ } else {
+ pcie->reset_gpio = NULL;
+ }
+
+ err = baikal_add_pcie_port(pcie, pdev);
+ if (err < 0) {
+ goto err_pm_put;
+ }
+
+ platform_set_drvdata(pdev, pcie);
+ return 0;
+
+err_pm_put:
+ pm_runtime_put(dev);
+
+err_pm_disable:
+ pm_runtime_disable(dev);
+
+ return err;
+}
+
+#ifdef CONFIG_PM_SLEEP
+static int baikal_pcie_suspend(struct device *dev)
+{
+ struct baikal_pcie *pcie = dev_get_drvdata(dev);
+ struct dw_pcie *pp = &pcie->pp;
+ u32 val;
+
+ /* Clear Memory Space Enable (MSE) bit */
+ val = dw_pcie_readl_dbi(pp, PCI_COMMAND);
+ val &= ~PCI_COMMAND_MEMORY;
+ dw_pcie_writel_dbi(pp, PCI_COMMAND, val);
+ return 0;
+}
+
+static int baikal_pcie_resume(struct device *dev)
+{
+ struct baikal_pcie *pcie = dev_get_drvdata(dev);
+ struct dw_pcie *pp = &pcie->pp;
+ u32 val;
+
+ /* Set Memory Space Enable (MSE) bit */
+ val = dw_pcie_readl_dbi(pp, PCI_COMMAND);
+ val |= PCI_COMMAND_MEMORY;
+ dw_pcie_writel_dbi(pp, PCI_COMMAND, val);
+ return 0;
+}
+
+static int baikal_pcie_suspend_noirq(struct device *dev)
+{
+ return 0;
+}
+
+static int baikal_pcie_resume_noirq(struct device *dev)
+{
+ return 0;
+}
+#endif
+
+static const struct dev_pm_ops baikal_pcie_pm_ops = {
+ SET_SYSTEM_SLEEP_PM_OPS(baikal_pcie_suspend, baikal_pcie_resume)
+ SET_NOIRQ_SYSTEM_SLEEP_PM_OPS(baikal_pcie_suspend_noirq,
+ baikal_pcie_resume_noirq)
+};
+
+static struct platform_driver baikal_pcie_driver = {
+ .driver = {
+ .name = "baikal-pcie-v2",
+ .of_match_table = of_baikal_pcie_match,
+ .suppress_bind_attrs = true,
+ .pm = &baikal_pcie_pm_ops,
+ },
+ .probe = baikal_pcie_probe,
+};
+
+MODULE_DEVICE_TABLE(of, of_baikal_pcie_match);
+module_platform_driver(baikal_pcie_driver);
+MODULE_LICENSE("GPL v2");

View file

@ -0,0 +1,22 @@
Subject: [PATCH 619/625] panfrost: compatibility with Baikal-M firmware from
SDK-M 4.3
Added .compatible string so the driver can be used on Baikal-M
systems with firmware from SDK-M 4.3.
Note: the driver should be explicitly enabled with
enable_broken_machines=y module parameter
Update for 5.15.28
diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c b/drivers/gpu/drm/panfrost/panfrost_drv.c
--- a/drivers/gpu/drm/panfrost/panfrost_drv.c
+++ b/drivers/gpu/drm/panfrost/panfrost_drv.c
@@ -655,6 +655,7 @@
{ .compatible = "arm,mali-t880", .data = &default_data, },
{ .compatible = "arm,mali-bifrost", .data = &default_data, },
{ .compatible = "mediatek,mt8183-mali", .data = &mediatek_mt8183_data },
+ { .compatible = "arm,mali-midgard", .data = &default_data, },
{}
};
MODULE_DEVICE_TABLE(of, dt_match);

47
cpupower-start.sh Normal file
View file

@ -0,0 +1,47 @@
#!/bin/bash
# A wrapper for cpupower to set the appropriate governor for frequency
# scaling. Sets 'ondemand', 'powersave' or 'performance' if available
# (checks availablility in this order).
# The user can override this behaviour by specifying the governor in
# CPUPOWER_GOVERNOR variable.
#
# CPUPOWER_OTHER_ARGS can be used to provide additional arguments to
# cpupower.
AVAIL_FILE=/sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
USE_GOVERNOR=""
if ! test -e "${AVAIL_FILE}"; then
printf "CPU frequency scaling is not supported.\n"
exit 1
fi
if test -n "${CPUPOWER_GOVERNOR}"; then
if grep "${CPUPOWER_GOVERNOR}" "${AVAIL_FILE}" >/dev/null 2>&1; then
USE_GOVERNOR="${CPUPOWER_GOVERNOR}"
else
printf "Unknown governor: ${CPUPOWER_GOVERNOR}.\n"
printf "Available governors: "
cat "${AVAIL_FILE}"
printf "\n"
exit 1
fi
elif grep "ondemand" "${AVAIL_FILE}" >/dev/null 2>&1; then
USE_GOVERNOR=ondemand
elif grep "powersave" "${AVAIL_FILE}" >/dev/null 2>&1; then
USE_GOVERNOR=powersave
elif grep "performance" "${AVAIL_FILE}" >/dev/null 2>&1; then
USE_GOVERNOR=performance
else
printf "Failed to select the governor automatically, "
printf "please specify it explicitly in CPUPOWER_GOVERNOR variable.\n"
printf "Available governors: "
cat "${AVAIL_FILE}"
printf "\n"
exit 1
fi
# Set the governor at last.
printf "Using \"${USE_GOVERNOR}\" governor.\n"
/usr/bin/cpupower frequency-set -g ${USE_GOVERNOR} ${CPUPOWER_OTHER_ARGS}

7
cpupower.config Normal file
View file

@ -0,0 +1,7 @@
# If you would like to use a particular CPU frequency scaling governor
# rather than the default one, specify it here.
# CPUPOWER_GOVERNOR=
# Other command-line arguments to cpupower.
# See 'cpupower help' and cpupower(1) for more info.
# CPUPOWER_OTHER_ARGS=

9
cpupower.path Normal file
View file

@ -0,0 +1,9 @@
[Unit]
Description=cpupower - wait for the list of frequency governors
After=syslog.target
[Path]
PathExists=/sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
[Install]
WantedBy=multi-user.target

14
cpupower.service Normal file
View file

@ -0,0 +1,14 @@
[Unit]
Description=Configure CPU frequency settings
After=syslog.target
ConditionPathExists=/sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
[Service]
Type=oneshot
RemainAfterExit=yes
EnvironmentFile=/etc/sysconfig/cpupower
ExecStart=/usr/bin/cpupower-start.sh
[Install]
WantedBy=multi-user.target
Also=cpupower.path

View file

@ -0,0 +1,12 @@
diff -rupN linux-5.10.old/tools/perf/ui/libslang.h linux-5.10/tools/perf/ui/libslang.h
--- linux-5.10.old/tools/perf/ui/libslang.h 2020-12-13 23:41:30.000000000 +0100
+++ linux-5.10/tools/perf/ui/libslang.h 2022-01-24 20:53:33.972152889 +0100
@@ -14,7 +14,7 @@
#ifdef HAVE_SLANG_INCLUDE_SUBDIR
#include <slang/slang.h>
#else
-#include <slang.h>
+#include <slang/slang.h>
#endif
#if SLANG_VERSION < 20104

12517
kernel-arm64.config Normal file

File diff suppressed because it is too large Load diff

10881
kernel-i586.config Normal file

File diff suppressed because it is too large Load diff

10960
kernel-x86_64.config Normal file

File diff suppressed because it is too large Load diff

39
kernel.rpmlintrc Normal file
View file

@ -0,0 +1,39 @@
# Too many false errors
addFilter("E: zero-length")
addFilter("E: incoherent-version-in-name")
addFilter("E: unstripped-binary-or-object")
addFilter("W: devel-file-in-non-devel-package")
addFilter("W: dangling-relative-symlink")
addFilter("W: non-executable-script")
addFilter("W: script-without-shebang")
# Perhaps OK?
addFilter("W: doc-file-dependency")
# Longer descriptions are allowed in rpm4 platforms
addFilter("E: description-line-too-long")
addFilter("E: useless-provides")
addFilter("E: hardcoded-library-path")
# libexec is OK now
addFilter("W: non-standard-dir-in-usr")
# rpmlint expects "kernel-%%{version}"
# but we really have "kernel-%%{version}-generic"
addFilter("E: invalid-spec-name")
# False positive: cpupower package is not a library
addFilter("E: non-versioned-file-in-library-package")
addFilter("E: executable-in-library-package")
# UML stuff is OK
addFilter("W: symlink-should-be-relative")
addFilter("W: executable-stack")
# Vmlinux is statically linked and has a peculiar internal structure
addFilter("E: missing-PT_GNU_STACK-section")
addFilter("W: statically-linked-binary")
# Kernel modules don't bother about joliet compatibility...
addFilter("W: filename-too-long-for-joliet")

1803
kernel.spec Normal file

File diff suppressed because it is too large Load diff

189
le9pf.diff Normal file
View file

@ -0,0 +1,189 @@
diff --git a/Documentation/admin-guide/sysctl/vm.rst b/Documentation/admin-guide/sysctl/vm.rst
--- a/Documentation/admin-guide/sysctl/vm.rst
+++ b/Documentation/admin-guide/sysctl/vm.rst
@@ -68,6 +68,8 @@
- stat_refresh
- numa_stat
- swappiness
+- unevictable_activefile_kbytes_low
+- unevictable_activefile_kbytes_min
- unprivileged_userfaultfd
- user_reserve_kbytes
- vfs_cache_pressure
@@ -881,6 +883,31 @@
The default value is 0.
+unevictable_activefile_kbytes_low
+=================================
+
+Keep some active file pages still mapped under memory pressure to avoid
+potential disk thrashing that may occur due to evicting running executables
+code. This implements soft eviction throttling, and some file pages can still
+be discarded.
+
+Setting it to 0 effectively disables this feature.
+
+The default value is 512 MiB.
+
+
+unevictable_activefile_kbytes_min
+=================================
+
+Keep all active file pages still mapped under memory pressure to avoid
+potential disk thrashing that may occur due to evicting running executables
+code. This is the hard limit.
+
+Setting it to 0 effectively disables this feature.
+
+The default value is 256 MiB.
+
+
user_reserve_kbytes
===================
diff --git a/kernel/sysctl.c b/kernel/sysctl.c
index afad085960b8..8bb82cf5d74e 100644
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -113,6 +113,22 @@
static int sixty = 60;
#endif
+#if defined(CONFIG_UNEVICTABLE_ACTIVEFILE)
+#if CONFIG_UNEVICTABLE_ACTIVEFILE_KBYTES_LOW < 0
+#error "CONFIG_UNEVICTABLE_ACTIVEFILE_KBYTES_LOW should be >= 0"
+#endif
+#if CONFIG_UNEVICTABLE_ACTIVEFILE_KBYTES_MIN < 0
+#error "CONFIG_UNEVICTABLE_ACTIVEFILE_KBYTES_MIN should be >= 0"
+#endif
+#if CONFIG_UNEVICTABLE_ACTIVEFILE_KBYTES_LOW < CONFIG_UNEVICTABLE_ACTIVEFILE_KBYTES_MIN
+#error "CONFIG_UNEVICTABLE_ACTIVEFILE_KBYTES_LOW should be >= CONFIG_UNEVICTABLE_ACTIVEFILE_KBYTES_MIN"
+#endif
+unsigned long sysctl_unevictable_activefile_kbytes_low __read_mostly =
+ CONFIG_UNEVICTABLE_ACTIVEFILE_KBYTES_LOW;
+unsigned long sysctl_unevictable_activefile_kbytes_min __read_mostly =
+ CONFIG_UNEVICTABLE_ACTIVEFILE_KBYTES_MIN;
+#endif
+
static int __maybe_unused neg_one = -1;
static int __maybe_unused two = 2;
static int __maybe_unused four = 4;
@@ -3131,6 +3147,25 @@
.extra2 = SYSCTL_ONE,
},
#endif
+#if defined(CONFIG_UNEVICTABLE_ACTIVEFILE)
+ {
+ .procname = "unevictable_activefile_kbytes_low",
+ .data = &sysctl_unevictable_activefile_kbytes_low,
+ .maxlen = sizeof(sysctl_unevictable_activefile_kbytes_low),
+ .mode = 0644,
+ .proc_handler = proc_doulongvec_minmax,
+ .extra1 = &sysctl_unevictable_activefile_kbytes_min,
+ },
+ {
+ .procname = "unevictable_activefile_kbytes_min",
+ .data = &sysctl_unevictable_activefile_kbytes_min,
+ .maxlen = sizeof(sysctl_unevictable_activefile_kbytes_min),
+ .mode = 0644,
+ .proc_handler = proc_doulongvec_minmax,
+ .extra1 = &zero_ul,
+ .extra2 = &sysctl_unevictable_activefile_kbytes_low,
+ },
+#endif
{
.procname = "user_reserve_kbytes",
.data = &sysctl_user_reserve_kbytes,
diff --git a/mm/Kconfig b/mm/Kconfig
--- a/mm/Kconfig
+++ b/mm/Kconfig
@@ -47,6 +47,41 @@
endchoice
+config UNEVICTABLE_ACTIVEFILE
+ bool "Keep some active file pages under memory pressure"
+ depends on SYSCTL
+ def_bool y
+ help
+ Keep some active file pages still mapped under memory pressure to avoid
+ potential disk thrashing that may occur due to evicting running executables
+ code.
+
+ The UNEVICTABLE_ACTIVEFILE_KBYTES_LOW value defines a threshold to activate
+ file pages eviction throttling. The vm.unevictable_activefile_kbytes_low
+ sysctl knob is used to change the amount in the runtime (setting it to 0
+ effectively disables this feature).
+
+ Recommended value: 524288 for typical desktop workload.
+
+ The UNEVICTABLE_ACTIVEFILE_KBYTES_MIN value sets the amount of pages to keep
+ as a hard limit. The vm.unevictable_activefile_kbytes_min sysctl knob is used
+ to change the amount in the runtime (setting it to 0 effectively disables
+ this feature).
+
+ Recommended value: 262144 for typical desktop workload.
+
+ See also: Documentation/admin-guide/sysctl/vm.rst
+
+config UNEVICTABLE_ACTIVEFILE_KBYTES_LOW
+ int "Default value for vm.unevictable_activefile_kbytes_low"
+ depends on UNEVICTABLE_ACTIVEFILE
+ default "524288"
+
+config UNEVICTABLE_ACTIVEFILE_KBYTES_MIN
+ int "Default value for vm.unevictable_activefile_kbytes_min"
+ depends on UNEVICTABLE_ACTIVEFILE
+ default "262144"
+
config SPARSEMEM
def_bool y
depends on (!SELECT_MEMORY_MODEL && ARCH_SPARSEMEM_ENABLE) || SPARSEMEM_MANUAL
diff --git a/mm/vmscan.c b/mm/vmscan.c
index 7b4e31eac2cf..93760769d676 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -171,6 +171,11 @@
#define prefetchw_prev_lru_page(_page, _base, _field) do { } while (0)
#endif
+#if defined(CONFIG_UNEVICTABLE_ACTIVEFILE)
+extern unsigned long sysctl_unevictable_activefile_kbytes_low;
+extern unsigned long sysctl_unevictable_activefile_kbytes_min;
+#endif
+
/*
* From 0 .. 200. Higher means more swappy.
*/
@@ -2562,6 +2567,10 @@
SCAN_FILE,
};
+#if defined(CONFIG_UNEVICTABLE_ACTIVEFILE)
+#define K(x) ((x) << (PAGE_SHIFT - 10))
+#endif
+
/*
* Determine how aggressively the anon and file LRU lists should be
* scanned. The relative value of each set of LRU lists is determined
@@ -2764,6 +2773,19 @@
BUG();
}
+#if defined(CONFIG_UNEVICTABLE_ACTIVEFILE)
+ if (lru == LRU_ACTIVE_FILE) {
+ unsigned long activefile_kbytes_now = K(global_node_page_state(NR_ACTIVE_FILE));
+ unsigned long low_scan_granularity = SWAP_CLUSTER_MAX >> sc->priority;
+
+ if (activefile_kbytes_now < sysctl_unevictable_activefile_kbytes_low &&
+ activefile_kbytes_now > sysctl_unevictable_activefile_kbytes_min &&
+ scan > low_scan_granularity)
+ scan = low_scan_granularity;
+ else if (activefile_kbytes_now <= sysctl_unevictable_activefile_kbytes_min)
+ scan = 0;
+ }
+#endif
nr[lru] = scan;
}
}

40
macros.ksobirator Normal file
View file

@ -0,0 +1,40 @@
# ksobirator RPM macros
# For now they are bundled in the kernel package,
# in the future, after testing, ksobirator will become a separate package
# which will be BuildRequired from kernel packages
# TODO: define it somewhere else...
# TODO: avoid depending from %%flavour, %%buildrel etc ?!
# TODO: fail if needed macros are not defined
%ksob_kernel %{kernelversion}.%{patchlevel}-%{flavour}
# %%ksob_mk_module_pkg -n module name -s module section [ -r additional requires for this package ]
# Examples:
# %%ksob_mk_module_pkg -n shredder -s extra -r /usr/bin/wipe
# %%ksob_mk_module_pkg -n shredder -s extra
%ksob_mk_module_pkg(n:s:r:) \
\
%define module_name %{-n:%{-n*}}%{!-n:%{error:Module name not defined!}} \
%define pkg_main kernel-module-%{module_name}-%{ksob_kernel} \
%define module_section %{-s:%{-s*}}%{!-s:%{error:Module section (e.g. extra) not defined!}} \
\
%{expand: \
%package -n %{pkg_main} \
# TODO: convert long kernel name to one macro \
Summary: Binary module %{module_name} for kernel-%{ksob_kernel} \
Group: System/Kernel and hardware \
\
%{-r:Requires: %{-r*}} \
Requires: %{name}%{_isa} = %{EVRD} \
Provides: installonlypkg(kernel-module) = %{EVRD}.module.%{module_name} \
Obsoletes: kernel-module-%{module_name}-%{flavour}-%{kernelversion}.%{patchlevel}-latest < 5.10.34-2 \
\
%description -n %{pkg_main} \
Binary module %{module_name} for kernel-%{ksob_kernel} \
\
%files -n %{pkg_main} \
# XXX TODO: how to %%exclude these files from the main package automatically? \
%{_modulesdir}/%{kver_full}/kernel/%{module_section}/%{module_name}.ko%{kmod_suffix} \
\
%{nil} \
}

17
public_key_GOST_1.pem Normal file
View file

@ -0,0 +1,17 @@
-----BEGIN CERTIFICATE-----
MIICzDCCAjagAwIBAgIJAI8cep2XT4u+MAwGCCqFAwcBAQMDBQAwczETMBEGA1UE
CgwKUk9TQSBMaW51eDE3MDUGA1UEAwwuS2VybmVsIG1vZHVsZXMgc2lnbmluZyBH
T1NUIFIgMzQuMTAtMjAxMiBrZXkgMTEjMCEGCSqGSIb3DQEJARYUc3VwcG9ydEBy
b3NhbGludXgucnUwIBcNMjAwMzIxMDAzNDIxWhgPMjMyMDAxMDkwMDM0MjFaMHMx
EzARBgNVBAoMClJPU0EgTGludXgxNzA1BgNVBAMMLktlcm5lbCBtb2R1bGVzIHNp
Z25pbmcgR09TVCBSIDM0LjEwLTIwMTIga2V5IDExIzAhBgkqhkiG9w0BCQEWFHN1
cHBvcnRAcm9zYWxpbnV4LnJ1MIGqMCEGCCqFAwcBAQECMBUGCSqFAwcBAgECAQYI
KoUDBwEBAgMDgYQABIGABtytV0inkaWUk1lXsuqWV9QMr1uJhvGjZyiUvDcsJuYA
4QPIKi7d0JLrgiWlk0g0JKC7N3qgu1mFmlPB1D1fqvaFqqjaIe+sEnodUEQPHV8p
O6OC/yNZrfraXTI11LrUi/EC6iQZyxBtY3pYhULqWI0v+d0jM+4whb/EMxbvf2Gj
XTBbMAwGA1UdEwEB/wQCMAAwCwYDVR0PBAQDAgeAMB0GA1UdDgQWBBQ4nuHExlj9
76Ka9xqDDlK+rFHeYzAfBgNVHSMEGDAWgBQ4nuHExlj976Ka9xqDDlK+rFHeYzAM
BggqhQMHAQEDAwUAA4GBAA88NwbOXAkbjUPdfzvieiC7DuX4MLNlSWx2Idf08TjY
YJ3+5y7fRHh7gb8HOBMsu72sXaX/swM6hgunmx6HCUMn+49AbNqeIfKAaBDUwddR
wCxxvkYlUuhvUg8eIGLdGcE8HfKN1SW5na7xiXoE8vLiWsarZUbzTqhPtWVglfdp
-----END CERTIFICATE-----

17
public_key_GOST_2.pem Normal file
View file

@ -0,0 +1,17 @@
-----BEGIN CERTIFICATE-----
MIICzDCCAjagAwIBAgIJAPZeBkZdVWyfMAwGCCqFAwcBAQMDBQAwczETMBEGA1UE
CgwKUk9TQSBMaW51eDE3MDUGA1UEAwwuS2VybmVsIG1vZHVsZXMgc2lnbmluZyBH
T1NUIFIgMzQuMTAtMjAxMiBrZXkgMjEjMCEGCSqGSIb3DQEJARYUc3VwcG9ydEBy
b3NhbGludXgucnUwIBcNMjAwMzIxMDAzNDI1WhgPMjMyMDAxMDkwMDM0MjVaMHMx
EzARBgNVBAoMClJPU0EgTGludXgxNzA1BgNVBAMMLktlcm5lbCBtb2R1bGVzIHNp
Z25pbmcgR09TVCBSIDM0LjEwLTIwMTIga2V5IDIxIzAhBgkqhkiG9w0BCQEWFHN1
cHBvcnRAcm9zYWxpbnV4LnJ1MIGqMCEGCCqFAwcBAQECMBUGCSqFAwcBAgECAQYI
KoUDBwEBAgMDgYQABIGALLZJdYTyA3CmokRCR+ouwNrj3sCpuzB5JGlCiTobQFBG
NcQIWbkF/kirhp7u9sfFeoP3OUfU6xrgr/uP/b4l4EwNUloWLtNGyGP0ADupCnAi
/PmTNboG1geFlgnzXmngUOx5PRepvo8/1yok6fBLbAHtOUnSW6a7f5a4JDSmMjyj
XTBbMAwGA1UdEwEB/wQCMAAwCwYDVR0PBAQDAgeAMB0GA1UdDgQWBBStKuZzPiRo
38YyEsq5Ho9q/swclzAfBgNVHSMEGDAWgBStKuZzPiRo38YyEsq5Ho9q/swclzAM
BggqhQMHAQEDAwUAA4GBAFl+/1oJ4+rGL4ropENvSqbP4/dF2/18QYKHd6wdC5oG
ykhEuEuFiJ/aFYHiyU9OYtvWn3ZDbw5bU629I5VsTXzybhN5k4LH7HklpO074m4S
ij07TxRIhoFYE+8jrlHAxfnCN5LaI9hACtUoKOOgqfYZMJOJF7H9RpeTo1UKuHOT
-----END CERTIFICATE-----

17
public_key_GOST_3.pem Normal file
View file

@ -0,0 +1,17 @@
-----BEGIN CERTIFICATE-----
MIICzDCCAjagAwIBAgIJAObrVzbV1aBEMAwGCCqFAwcBAQMDBQAwczETMBEGA1UE
CgwKUk9TQSBMaW51eDE3MDUGA1UEAwwuS2VybmVsIG1vZHVsZXMgc2lnbmluZyBH
T1NUIFIgMzQuMTAtMjAxMiBrZXkgMzEjMCEGCSqGSIb3DQEJARYUc3VwcG9ydEBy
b3NhbGludXgucnUwIBcNMjAwMzIxMDAzNDI4WhgPMjMyMDAxMDkwMDM0MjhaMHMx
EzARBgNVBAoMClJPU0EgTGludXgxNzA1BgNVBAMMLktlcm5lbCBtb2R1bGVzIHNp
Z25pbmcgR09TVCBSIDM0LjEwLTIwMTIga2V5IDMxIzAhBgkqhkiG9w0BCQEWFHN1
cHBvcnRAcm9zYWxpbnV4LnJ1MIGqMCEGCCqFAwcBAQECMBUGCSqFAwcBAgECAQYI
KoUDBwEBAgMDgYQABIGAv1NFiiXbb/zGciTT7ebpmnj/bwoY9fU9uByYIZp3wb11
Vtil20ElxX0Kl4C6OG+SVxWNQVaSLoVTmeT0GlbB0hYpJ4HzATuKmYC8blT5jniL
98zcm7yHnbsgHnC5bktfu5Mp/vh0hOZ51k3imcqGuBjKfvs03NxgbRqu2eb1nVSj
XTBbMAwGA1UdEwEB/wQCMAAwCwYDVR0PBAQDAgeAMB0GA1UdDgQWBBSt8oT0+V/9
4nKRgFOTgexvZUt2ATAfBgNVHSMEGDAWgBSt8oT0+V/94nKRgFOTgexvZUt2ATAM
BggqhQMHAQEDAwUAA4GBALX4jEG2nVdfHLztK4kesvQQ4b8Sblhfm6BpvHbr6GdM
5UpR/hMT15XxLGGP4e9R8o7vT8R0VPouPk8UZZBaoM7yTAoUKi0SU7OFJWiiWq4M
cf3/72sSKsyzSBE8cfA+xuuBX5uf+UsBwBji4MnU9ihGQINt+vnns7Z8rdY4cM2C
-----END CERTIFICATE-----

17
public_key_GOST_4.pem Normal file
View file

@ -0,0 +1,17 @@
-----BEGIN CERTIFICATE-----
MIICzDCCAjagAwIBAgIJAIR1VQkhGLJSMAwGCCqFAwcBAQMDBQAwczETMBEGA1UE
CgwKUk9TQSBMaW51eDE3MDUGA1UEAwwuS2VybmVsIG1vZHVsZXMgc2lnbmluZyBH
T1NUIFIgMzQuMTAtMjAxMiBrZXkgNDEjMCEGCSqGSIb3DQEJARYUc3VwcG9ydEBy
b3NhbGludXgucnUwIBcNMjAwMzIxMDAzNDMyWhgPMjMyMDAxMDkwMDM0MzJaMHMx
EzARBgNVBAoMClJPU0EgTGludXgxNzA1BgNVBAMMLktlcm5lbCBtb2R1bGVzIHNp
Z25pbmcgR09TVCBSIDM0LjEwLTIwMTIga2V5IDQxIzAhBgkqhkiG9w0BCQEWFHN1
cHBvcnRAcm9zYWxpbnV4LnJ1MIGqMCEGCCqFAwcBAQECMBUGCSqFAwcBAgECAQYI
KoUDBwEBAgMDgYQABIGAAwR6SYW5kTyxGBII33kgp56BJevhFOHqbcgqnnkey00U
IS6bfa+qLRCF654gC+T9T4+631LUm42zVurjQ+KB4gRC89oQmMHkXgH3BKT7V+gG
aKztwJK1AIbQqQoWaV4G6bZVEPbaN9haA4t3RfqBLQGD/jAxKmbnuI+O1/RcY/uj
XTBbMAwGA1UdEwEB/wQCMAAwCwYDVR0PBAQDAgeAMB0GA1UdDgQWBBQawTxxjBIR
ZwE7SL4Qt/7HAKcqXzAfBgNVHSMEGDAWgBQawTxxjBIRZwE7SL4Qt/7HAKcqXzAM
BggqhQMHAQEDAwUAA4GBAAEzLbyG6HYsjI03cwxCUBrs+0jDWtbTdpiXE1WrtHuU
aU92ZTnRMaG1yyu7k/jb7dte9ajCD9U9BCgMHz6Xf4mLJOSbssZcvD9WPGW0U/Aw
GHYU62heaYF0BI/7xlKd6yxkZifTtBXdxFrVHY7iVyfCTqn7ppuX6nPNI8C7Ybqu
-----END CERTIFICATE-----

17
public_key_GOST_5.pem Normal file
View file

@ -0,0 +1,17 @@
-----BEGIN CERTIFICATE-----
MIICzDCCAjagAwIBAgIJAJrslYA53QhAMAwGCCqFAwcBAQMDBQAwczETMBEGA1UE
CgwKUk9TQSBMaW51eDE3MDUGA1UEAwwuS2VybmVsIG1vZHVsZXMgc2lnbmluZyBH
T1NUIFIgMzQuMTAtMjAxMiBrZXkgNTEjMCEGCSqGSIb3DQEJARYUc3VwcG9ydEBy
b3NhbGludXgucnUwIBcNMjAwMzIxMDAzNDM2WhgPMjMyMDAxMDkwMDM0MzZaMHMx
EzARBgNVBAoMClJPU0EgTGludXgxNzA1BgNVBAMMLktlcm5lbCBtb2R1bGVzIHNp
Z25pbmcgR09TVCBSIDM0LjEwLTIwMTIga2V5IDUxIzAhBgkqhkiG9w0BCQEWFHN1
cHBvcnRAcm9zYWxpbnV4LnJ1MIGqMCEGCCqFAwcBAQECMBUGCSqFAwcBAgECAQYI
KoUDBwEBAgMDgYQABIGA3OD2AVNwBdS7vkqQNdNhmVFiGRHpocswZ2mJE+7w75Ro
4sFDJAD/VZBU7/0xBgYthuRTadVx74oWqBhISOYbzz8uRHvEFdZDsTiHb6gJ6Quf
r9oNc8XQYDiQ5MIRwXOf72LveJuKyYl/esXHEotiNS0qRf4VQF57Tc4FiAniuAaj
XTBbMAwGA1UdEwEB/wQCMAAwCwYDVR0PBAQDAgeAMB0GA1UdDgQWBBRIMrnX3Zgs
R3GSILBZgE1qozy98jAfBgNVHSMEGDAWgBRIMrnX3ZgsR3GSILBZgE1qozy98jAM
BggqhQMHAQEDAwUAA4GBAP88jgnPKPpRMJFoyqkPesM327niOSIJtm7yFqnUY9Fi
8rn/UZt1yQ7IIEqUM3zq2XMm4dAdZEjUADLpIw98jwX/5/gSE2RV3HNrnlE58IVF
TdVra128aV02q2Ub8BAnug86rrpw3FmpKIWoSqqAGOt7Qq+Htour+fFviblj3mNi
-----END CERTIFICATE-----

17
public_key_GOST_6.pem Normal file
View file

@ -0,0 +1,17 @@
-----BEGIN CERTIFICATE-----
MIICzDCCAjagAwIBAgIJAIbNweUsG7B3MAwGCCqFAwcBAQMDBQAwczETMBEGA1UE
CgwKUk9TQSBMaW51eDE3MDUGA1UEAwwuS2VybmVsIG1vZHVsZXMgc2lnbmluZyBH
T1NUIFIgMzQuMTAtMjAxMiBrZXkgNjEjMCEGCSqGSIb3DQEJARYUc3VwcG9ydEBy
b3NhbGludXgucnUwIBcNMjAwMzIxMDAzNDM5WhgPMjMyMDAxMDkwMDM0MzlaMHMx
EzARBgNVBAoMClJPU0EgTGludXgxNzA1BgNVBAMMLktlcm5lbCBtb2R1bGVzIHNp
Z25pbmcgR09TVCBSIDM0LjEwLTIwMTIga2V5IDYxIzAhBgkqhkiG9w0BCQEWFHN1
cHBvcnRAcm9zYWxpbnV4LnJ1MIGqMCEGCCqFAwcBAQECMBUGCSqFAwcBAgECAQYI
KoUDBwEBAgMDgYQABIGAXM6XnswJ85Nqa01QRepI8YTfdW/Lgm0OFZUET6rmidpJ
rCmYOgiygxEjALuS2aTayOAbMpNK1fncAxsynaQaxDlg3iJ9o8R/V0/gI0Vnaf5b
HVhhmjjT0DqU+iyI6aOS3OHS4jDG+q2JW8xutYxACz6U5uESwvunLfxS44CNkuaj
XTBbMAwGA1UdEwEB/wQCMAAwCwYDVR0PBAQDAgeAMB0GA1UdDgQWBBQjl+g9t3t3
K4EYixH/CppnjjkCejAfBgNVHSMEGDAWgBQjl+g9t3t3K4EYixH/CppnjjkCejAM
BggqhQMHAQEDAwUAA4GBAD0XivGdQ3CP41jF0jr/awm98Q6pRJ40nXdyYNZ+YyR0
/Otggv18QmVs3qB7nBV5Zy00jaTAtqWKE8w3mfDyznR7n3EeUCpwU0TvvrmT/BPy
npyQgSvakovKcHp89Eo0KCfnGPp2Ci5NvIHq3VI9PFXDwiTIMpDssD4P7HFwQGSq
-----END CERTIFICATE-----

22
public_key_RSA_10.pem Normal file
View file

@ -0,0 +1,22 @@
-----BEGIN CERTIFICATE-----
MIIDrjCCApagAwIBAgIJAKnO6XWFV+jYMA0GCSqGSIb3DQEBCwUAMGYxEzARBgNV
BAoMClJPU0EgTGludXgxKjAoBgNVBAMMIUtlcm5lbCBtb2R1bGVzIHNpZ25pbmcg
UlNBIGtleSAxMDEjMCEGCSqGSIb3DQEJARYUc3VwcG9ydEByb3NhbGludXgucnUw
IBcNMjAwMzIxMDAzNDU5WhgPMjMyMDAxMDkwMDM0NTlaMGYxEzARBgNVBAoMClJP
U0EgTGludXgxKjAoBgNVBAMMIUtlcm5lbCBtb2R1bGVzIHNpZ25pbmcgUlNBIGtl
eSAxMDEjMCEGCSqGSIb3DQEJARYUc3VwcG9ydEByb3NhbGludXgucnUwggEiMA0G
CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC5JAA9CmjY9jXvWOLuyp2ll7r0T0f7
Nb28GphKb2Sz55ZlUA9TfaMCIwKYZ2DGv10vPrAHpLi11899lSVdwq2018GPtbvK
JEVVSxAk+3c2AnmN4rapavglF6I7gmRQOwUEcXoUqpsiQnMfvrR2rvNSZFW6xZ6D
yC4ofdXsmN6xW2Yde3JnrwlEpIxUUAO6pTgLy9HBtD6sqkCW75Sby7Y4Wbok1BRE
YZAxKRP5lBstQawIVYky8CcTk6+z8Y6iAusTN4n7SAEjBkXcg4Uu6ZMrIIaVNlj7
wUncgsbQE3xxw2O57/RtV2vGr5vmjbyHbMyifhgSjoAwD1ndcnf38XCrAgMBAAGj
XTBbMAwGA1UdEwEB/wQCMAAwCwYDVR0PBAQDAgeAMB0GA1UdDgQWBBRKFXAZZKg9
qa/M3vkCWagjcqwisTAfBgNVHSMEGDAWgBRKFXAZZKg9qa/M3vkCWagjcqwisTAN
BgkqhkiG9w0BAQsFAAOCAQEAHezs2AMc7IU0I4QjSAP0ivic8Tss9H9qgs0DjdWd
1nPjVJ8SFmfl1bG+jbwT6TF91Dq8qcqbRe6r6GPoYE9CpsVKeictXZjS0WSaPX3H
NJ/smdHFhv6a4m1ChxDoOpMO3MYPtSxOUPU9oLvPhs18sagUYDahfNJ85yJlFMQe
fW5aUf03r4ZEawAKygdBHAxjL0kOI91CyQjQtmGpMPJA5697Hhkn1pCQF5Rd9Oti
CmNafyqes98LeMNuuiRxttFix7O6Jl0kQhH6AkQ/VAQP9P2iPyYL6StsVsrdJDcm
+HZqMRduq8x9YCVh/WaQxoYg6zrQngRz70AImyghGxC1WQ==
-----END CERTIFICATE-----

22
public_key_RSA_11.pem Normal file
View file

@ -0,0 +1,22 @@
-----BEGIN CERTIFICATE-----
MIIDrjCCApagAwIBAgIJAMvmr3r/ClnRMA0GCSqGSIb3DQEBCwUAMGYxEzARBgNV
BAoMClJPU0EgTGludXgxKjAoBgNVBAMMIUtlcm5lbCBtb2R1bGVzIHNpZ25pbmcg
UlNBIGtleSAxMTEjMCEGCSqGSIb3DQEJARYUc3VwcG9ydEByb3NhbGludXgucnUw
IBcNMjAwMzIxMDAzNTA0WhgPMjMyMDAxMDkwMDM1MDRaMGYxEzARBgNVBAoMClJP
U0EgTGludXgxKjAoBgNVBAMMIUtlcm5lbCBtb2R1bGVzIHNpZ25pbmcgUlNBIGtl
eSAxMTEjMCEGCSqGSIb3DQEJARYUc3VwcG9ydEByb3NhbGludXgucnUwggEiMA0G
CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDC+MNxLje6ewUOuLoZGDth+Vaf2Kpy
u46BrSlvR8SS6ulbBofG5QnySK8s6I365gZbq+Hm60qKHvAYbffwBfh1mxoDhsh2
vDk+BuPO3DcCq+XEY64/1e7mYiGEhfOwe33lYtBKeRyL07fbO2heskCjcuAvVIrW
+3f9a1Ea373Tks/bfSUQI8OE3mFBIh18Awjv/4TW6PZpW4rSRNAKr4FptgzirJtv
F7fRPEbsKo3vqQhCh4VTSL/Jx6D8afV4twuY9kdT6qV2U0blyi9qVwjsh6Z1qBua
+j0fQHM6ibcsaTlUhcCjvdKkmTwuQUaHMzuX6jeNJ6+I6hbnDVq4TUCdAgMBAAGj
XTBbMAwGA1UdEwEB/wQCMAAwCwYDVR0PBAQDAgeAMB0GA1UdDgQWBBTvuU+VXyKJ
u69/sxcQz0VTuvnKnzAfBgNVHSMEGDAWgBTvuU+VXyKJu69/sxcQz0VTuvnKnzAN
BgkqhkiG9w0BAQsFAAOCAQEAaGdp3QKwIBrQaJXMvQyhIrq/Y1n8pk0o4+HoFSkE
o8RM4VvXllWgKo9uqPpyB3P05mJl1NgiqqSZ2m71CJ2wfz0l4JOq0kVM1WYjqZ4n
hjoHQTmqqc1+maIYURPhmA1ETjT+Rcxp6sOPn0RErLVGLqY1VBNIlLxpnT9Uu25u
VLfiqAzhyHkyydwg1zHS0K6PpkidxYq1frTagJrw8ZZTFLX+816eLiqBSmmjdXQv
ZQQPPtxn6n8OYsS03Qfk7CepTqGt1tnVCPg/St/brQfa/gDjcblAjaPQrNTbbG/P
ojaQQcq1qKBJpF1/mSSB1yEhfFKJt09YuzzOZfk5xY4C8w==
-----END CERTIFICATE-----

22
public_key_RSA_12.pem Normal file
View file

@ -0,0 +1,22 @@
-----BEGIN CERTIFICATE-----
MIIDrjCCApagAwIBAgIJAIdSvBK9tXaZMA0GCSqGSIb3DQEBCwUAMGYxEzARBgNV
BAoMClJPU0EgTGludXgxKjAoBgNVBAMMIUtlcm5lbCBtb2R1bGVzIHNpZ25pbmcg
UlNBIGtleSAxMjEjMCEGCSqGSIb3DQEJARYUc3VwcG9ydEByb3NhbGludXgucnUw
IBcNMjAwMzIxMDAzNTA3WhgPMjMyMDAxMDkwMDM1MDdaMGYxEzARBgNVBAoMClJP
U0EgTGludXgxKjAoBgNVBAMMIUtlcm5lbCBtb2R1bGVzIHNpZ25pbmcgUlNBIGtl
eSAxMjEjMCEGCSqGSIb3DQEJARYUc3VwcG9ydEByb3NhbGludXgucnUwggEiMA0G
CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDA5hpQ2yA0aiFXds2PI8EpNVbtIBn1
yPdsxk1FVu1o+2bsuURaFtrOmmLZnwJ+Sz8eskQASoLMXpDrAS1P4FvPV/fevTm/
o2dmwo+TCB/Befp2uenZekJa+b9b+BNmhIOljVX/tOUlqaXgnaptom3kCytK9v5J
G0ScRwFPBfcK2m+uVCxwBPaVvBI2CiXmpQsOAxfbU/9ltOUdI0MuEhz0JL0R4nbn
J2ve18SrwFtSg5GL7JKDpmG8akBpDGPTuUla7tSaKMrOj2wcxeOtXFa6v0t+XGF7
pqe1LPEkfoCIJl7AnOPV9aLfciKjm4KOgPVBYLToJM1G5JjYwwLsZ3ifAgMBAAGj
XTBbMAwGA1UdEwEB/wQCMAAwCwYDVR0PBAQDAgeAMB0GA1UdDgQWBBQA3yiQzv1o
S3YGRnILzKJSUBUnjjAfBgNVHSMEGDAWgBQA3yiQzv1oS3YGRnILzKJSUBUnjjAN
BgkqhkiG9w0BAQsFAAOCAQEArG+ebJ/pn5K/rHuVUkpHSfSxYYVUtdUlFPdCMGSc
zkmfOhpB9LT3RPqS6miHfWTCqkHCtm4MG0MkeDfyCUSYgMOKli3gqVM+tRQwJP80
WBpJSwZ5VbkmuvlYydeHJc8DsCj+3aH/O1trERt+3pgzlgmn9z9oJceCKG8X9JBT
OCrRileXJcXTGtnvh1PZ71LuM4wsPsXt7Y3/C3Mki6/SkpDSIcbk7GI3mwT0leWR
0UXgIXULNpgOufllpPV93plUGSOkgMABz3N69lQ2Hi14DoHhUGJwWPJkiUt9SGEI
gFiGExnbnoBSqXIPt1sJvBrIztKDvgNfoyJ8cEBJjI4uJA==
-----END CERTIFICATE-----

22
public_key_RSA_7.pem Normal file
View file

@ -0,0 +1,22 @@
-----BEGIN CERTIFICATE-----
MIIDrDCCApSgAwIBAgIJAMqfc8Cug/X0MA0GCSqGSIb3DQEBCwUAMGUxEzARBgNV
BAoMClJPU0EgTGludXgxKTAnBgNVBAMMIEtlcm5lbCBtb2R1bGVzIHNpZ25pbmcg
UlNBIGtleSA3MSMwIQYJKoZIhvcNAQkBFhRzdXBwb3J0QHJvc2FsaW51eC5ydTAg
Fw0yMDAzMjEwMDM0NDZaGA8yMzIwMDEwOTAwMzQ0NlowZTETMBEGA1UECgwKUk9T
QSBMaW51eDEpMCcGA1UEAwwgS2VybmVsIG1vZHVsZXMgc2lnbmluZyBSU0Ega2V5
IDcxIzAhBgkqhkiG9w0BCQEWFHN1cHBvcnRAcm9zYWxpbnV4LnJ1MIIBIjANBgkq
hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0kkJwvtt8mXXjmpEofjFdeL/cZnfmDd7
AUDGQfu2gluI/w3LhJPuaA09Np4wh6AaR11vFODRrwhYuG9Ea454pBEL6L+klh1O
VFQFkGCgtfJAn2odmjossBBzAubkF4XYMd3lkNnl/1Xs93aJQdiGKJBB5o0dSm6j
SjHiW1s8/GUhYvFLrFgSEvsiM80hABMhgcIJrfcEmvf7rEiLaKcMyESfi0Uw+5bU
SbrIboI9M8thyaPKS+slgj1M9Y66GgTtc0arQPJwYIPT0u8L2Kg9ljMattDNLNxE
LVWGdNOrjqt/P9xNGdzpkX+KqAqlx4876O2o64eef9Kz4HCB/ZMz7wIDAQABo10w
WzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIHgDAdBgNVHQ4EFgQUjuAdox5lu8X/
72aZYjbKUdfmXzMwHwYDVR0jBBgwFoAUjuAdox5lu8X/72aZYjbKUdfmXzMwDQYJ
KoZIhvcNAQELBQADggEBAKm6Ure4xkA5Geug2doneOJ2f4kJMsjejpWsJ30O2Org
Lf9rEiBpuMGNOs9ZpEPkUPJ3ubOEhO0Sqok5wfbqPTLehxymxWjrH08DFNDyjnkY
qXYjJa8p4A0w/rhKdc7xLOkfdgyMe/+VA/H/6BP9bhdByU7HjK5mvSFtq88Q4NcS
/oxkcGPqqq/189f3M364SU8wIzCa1xedBgnHoCUUgOdn0h3SonhdEBHn0zZAFju1
gmWH9fzjoJytmybaBpo4sbJlCV1BpZ3DPwlZd3viqwqubDpOom/KuM7rGxe6Mfn8
bySUi/xgKdAdU5PQn0ueErq56XoyprNXFNEDA2hT0JE=
-----END CERTIFICATE-----

22
public_key_RSA_8.pem Normal file
View file

@ -0,0 +1,22 @@
-----BEGIN CERTIFICATE-----
MIIDrDCCApSgAwIBAgIJAIpEFLnf/gz0MA0GCSqGSIb3DQEBCwUAMGUxEzARBgNV
BAoMClJPU0EgTGludXgxKTAnBgNVBAMMIEtlcm5lbCBtb2R1bGVzIHNpZ25pbmcg
UlNBIGtleSA4MSMwIQYJKoZIhvcNAQkBFhRzdXBwb3J0QHJvc2FsaW51eC5ydTAg
Fw0yMDAzMjEwMDM0NTFaGA8yMzIwMDEwOTAwMzQ1MVowZTETMBEGA1UECgwKUk9T
QSBMaW51eDEpMCcGA1UEAwwgS2VybmVsIG1vZHVsZXMgc2lnbmluZyBSU0Ega2V5
IDgxIzAhBgkqhkiG9w0BCQEWFHN1cHBvcnRAcm9zYWxpbnV4LnJ1MIIBIjANBgkq
hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqoC01OLXhXxecZxeQq2JDH4d1PyoqVCp
piGvEGim7Nu0VmxrBh5mEFwOwKNKJBIhcetxdjrIEUWN89mRZZUM+82X/voSxP4A
98opGgCDh5rv5tCThO/823lioeaHzwsVHLXtNmUHytPQjKbGSK647XHqd1aRRY+7
fPPQt8KNb9php3AhqcFQTj1xpi6xkosUcF4hieTa9VKQ4o4CXRofFaS25lo/QmGL
Y3n7s2OogezJviRRviSyWSOuRr0NtILRGjPPn+ZfZVBYovA+ToHzDX03R+FwviIb
N4dfxgJhZKmh00ODQSGLypLRy+qft9vbyirOUdCi99rBJ3nlcBd/LwIDAQABo10w
WzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIHgDAdBgNVHQ4EFgQUMw3AAGaYRxgB
tCWcYyoCusFyVCEwHwYDVR0jBBgwFoAUMw3AAGaYRxgBtCWcYyoCusFyVCEwDQYJ
KoZIhvcNAQELBQADggEBABrTJrCAHj0wBlH2mCcCLsXDOmxm5iqBPaLJxa7FUdV3
nrc6k5cNYgZPmIFY/SvONtpWVXq4bTeDP8NCCITpdRW2lzv71xE/xEBvdglVVjod
8KB+iHTlHbnw3+Glib2ad837oxlawoJJhridLFmdVj5lPScXWEeoGZflIcOx3tEK
MLQJey1MOQnWcFtNhhbLgiS/7ZvWfpcxX7PPyFxygs+8TSNKwIMcnvLZEewiA1vA
t3WXv9lfdym9vWA6Enp7Wy4417TPPEsq1aKq97rMrCyLNTZT5x0jxwmHfrgL/yG/
IhNkWaREmL6YptE0b4tJ6yNnCWJJMsgkdeOAYAhuVxQ=
-----END CERTIFICATE-----

22
public_key_RSA_9.pem Normal file
View file

@ -0,0 +1,22 @@
-----BEGIN CERTIFICATE-----
MIIDrDCCApSgAwIBAgIJAJ5Jnji5fl80MA0GCSqGSIb3DQEBCwUAMGUxEzARBgNV
BAoMClJPU0EgTGludXgxKTAnBgNVBAMMIEtlcm5lbCBtb2R1bGVzIHNpZ25pbmcg
UlNBIGtleSA5MSMwIQYJKoZIhvcNAQkBFhRzdXBwb3J0QHJvc2FsaW51eC5ydTAg
Fw0yMDAzMjEwMDM0NTRaGA8yMzIwMDEwOTAwMzQ1NFowZTETMBEGA1UECgwKUk9T
QSBMaW51eDEpMCcGA1UEAwwgS2VybmVsIG1vZHVsZXMgc2lnbmluZyBSU0Ega2V5
IDkxIzAhBgkqhkiG9w0BCQEWFHN1cHBvcnRAcm9zYWxpbnV4LnJ1MIIBIjANBgkq
hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApa3C5J/hBH3sTW3e+h1IOr8mSuo8ihBz
IW/aaK8W9lQb0QGnhIJrIkjSwxGy31IdFRHC4SAwRQ+jE42sIr5rdAsCNZdLMc7Z
+ADCuBBU9xBMR5fdgnmQrMjBzcY2fikW9SVvWZD2veZNfqXadkNq7O3eCRznosnE
rgkb9hyBvrsvfrscEJp/jXkhjWHinwM4yVgxObZjgKj2RNbTrrPDdJlSW08EgLst
SzuIZL6Yjp32KsLjGKM1qZsoTlnLSxb7JrysARdyPB4O9kc8ShQuXiaopZaBG9za
WylYZfxE0UZ4CrE02ln02J93TXguJrT7d+GO6WNvJPNwombSeaDiEQIDAQABo10w
WzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIHgDAdBgNVHQ4EFgQUZdHpFxVRiRlq
z1KGoV1CRe7fJkowHwYDVR0jBBgwFoAUZdHpFxVRiRlqz1KGoV1CRe7fJkowDQYJ
KoZIhvcNAQELBQADggEBAIMJfNc2dNrbX8jSKZVnd+Y5DbCgStj/oXL5RE0u+nTR
hTWmOufxptLK1wohe7fI8hZtUu/8Iq8deB9tYAJPiK8D+AvHME/1OZGD+c0KDLfr
84qltNqykyh1J0E586HcVzOX3vPuRkyOUDmLRFYKudYMd/D2zRWz3q0D/R/7Z/uN
ntFahoeKzh7T9wfz/fP8jk9tdCnl6OuHVqB1wxLnxHHzEcQg2wEtwZg09HcvIemi
TGgvCZAlOmRbKbGc5AXPB128Z7SzMpBeZAdmaJM/uhKH6BDA+zTfAsX04S401yaU
2xXLqncA0ggF4mjv2RGzljfg07EhBTerNkRAJZ7u3uE=
-----END CERTIFICATE-----