mirror of
https://abf.rosa.ru/djam/kernel-5.15.git
synced 2025-02-23 10:32:54 +00:00
Automatic import for version 5.15.28-1
This commit is contained in:
commit
3b0cfa3809
42 changed files with 101615 additions and 0 deletions
3
.abf.yml
Normal file
3
.abf.yml
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
sources:
|
||||||
|
"linux-5.15.tar.xz": ac61f2459040c09af1d5abd4ed100c3d316b443e
|
||||||
|
"patch-5.15.28.xz": 20337719e70d8bd465f2ffbccd84cd8c3b2b274b
|
37932
0001-Apply-AUFS-5.patch
Normal file
37932
0001-Apply-AUFS-5.patch
Normal file
File diff suppressed because it is too large
Load diff
|
@ -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
|
||||||
|
|
40
0001-Remove-RPM-illegal-chars-from-module-version.patch
Normal file
40
0001-Remove-RPM-illegal-chars-from-module-version.patch
Normal 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
|
||||||
|
|
|
@ -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,
|
||||||
|
|
1172
0001-altha.patch
Normal file
1172
0001-altha.patch
Normal file
File diff suppressed because it is too large
Load diff
34
0001-audit-make-it-less-verbose.patch
Normal file
34
0001-audit-make-it-less-verbose.patch
Normal 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
|
||||||
|
|
39
0001-crypto-support-loading-GOST-signed-kernel-modules.patch
Normal file
39
0001-crypto-support-loading-GOST-signed-kernel-modules.patch
Normal 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
|
||||||
|
|
102
0001-disable-mrproper-prepare-scripts-configs-in-devel-rp.patch
Normal file
102
0001-disable-mrproper-prepare-scripts-configs-in-devel-rp.patch
Normal 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/$@)
|
||||||
|
|
30
0001-perf-skip-xmlto-validation.patch
Normal file
30
0001-perf-skip-xmlto-validation.patch
Normal 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
|
||||||
|
|
47
0001-sign-file-full-functionality-with-modern-LibreSSL.patch
Normal file
47
0001-sign-file-full-functionality-with-modern-LibreSSL.patch
Normal 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
|
||||||
|
|
23032
0601-baikalm.patch
Normal file
23032
0601-baikalm.patch
Normal file
File diff suppressed because it is too large
Load diff
27
0604-efi-arm-runtime-print-EFI-mapping.patch
Normal file
27
0604-efi-arm-runtime-print-EFI-mapping.patch
Normal 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
|
||||||
|
|
161
0608-Baikal-M-USB-driver.patch
Normal file
161
0608-Baikal-M-USB-driver.patch
Normal 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");
|
103
0609-Baikal-M-video-unit-driver.patch
Normal file
103
0609-Baikal-M-video-unit-driver.patch
Normal 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);
|
||||||
|
+}
|
1210
0616-Baikal-M-PCIe-driver-from-SDK-M-4.3.patch
Normal file
1210
0616-Baikal-M-PCIe-driver-from-SDK-M-4.3.patch
Normal file
File diff suppressed because it is too large
Load diff
850
0617-Baikal-M-PCIe-driver-from-SDK-M-4.4.patch
Normal file
850
0617-Baikal-M-PCIe-driver-from-SDK-M-4.4.patch
Normal 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, ®);
|
||||||
|
+ 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");
|
|
@ -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
47
cpupower-start.sh
Normal 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
7
cpupower.config
Normal 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
9
cpupower.path
Normal 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
14
cpupower.service
Normal 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
|
12
kernel-5.10.93-fix-perf-build.patch
Normal file
12
kernel-5.10.93-fix-perf-build.patch
Normal 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
12517
kernel-arm64.config
Normal file
File diff suppressed because it is too large
Load diff
10880
kernel-i586.config
Normal file
10880
kernel-i586.config
Normal file
File diff suppressed because it is too large
Load diff
10959
kernel-x86_64.config
Normal file
10959
kernel-x86_64.config
Normal file
File diff suppressed because it is too large
Load diff
39
kernel.rpmlintrc
Normal file
39
kernel.rpmlintrc
Normal 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")
|
1797
kernel.spec
Normal file
1797
kernel.spec
Normal file
File diff suppressed because it is too large
Load diff
189
le9pf.diff
Normal file
189
le9pf.diff
Normal 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
40
macros.ksobirator
Normal 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
17
public_key_GOST_1.pem
Normal 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
17
public_key_GOST_2.pem
Normal 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
17
public_key_GOST_3.pem
Normal 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
17
public_key_GOST_4.pem
Normal 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
17
public_key_GOST_5.pem
Normal 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
17
public_key_GOST_6.pem
Normal 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
22
public_key_RSA_10.pem
Normal 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
22
public_key_RSA_11.pem
Normal 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
22
public_key_RSA_12.pem
Normal 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
22
public_key_RSA_7.pem
Normal 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
22
public_key_RSA_8.pem
Normal 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
22
public_key_RSA_9.pem
Normal 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-----
|
Loading…
Add table
Reference in a new issue