$ git diff --patch-with-stat --summary 0e10554979e83835aacdcb61b66d20304a69fd20..8b71359564ed514682b6057824394ec385a64627
.abf.yml | 2 +-
7a8b64d17e35810dc3176fe61208b45c15d25402.patch | 77 ++++++++++++++++++++++
9d55bebd9816903b821a403a69a94190442ac043.patch | 68 +++++++++++++++++++
arm64-common.config | 6 ++
common.config | 3 +-
...l-5.7-fewer-conditions-for-ARM64_PTR_AUTH.patch | 27 ++++++++
...l-5.8-nouveau-write-combining-only-on-x86.patch | 72 ++++++++++++++++++++
kernel-release.spec | 23 ++++++-
8 files changed, 273 insertions(+), 5 deletions(-)
create mode 100644 7a8b64d17e35810dc3176fe61208b45c15d25402.patch
create mode 100644 9d55bebd9816903b821a403a69a94190442ac043.patch
create mode 100644 kernel-5.7-fewer-conditions-for-ARM64_PTR_AUTH.patch
create mode 100644 kernel-5.8-nouveau-write-combining-only-on-x86.patch
diff --git a/.abf.yml b/.abf.yml
index fc4608a..cef6999 100644
--- a/.abf.yml
+++ b/.abf.yml
@@ -3,4 +3,4 @@ sources:
saa716x-driver.tar.xz: f9b6ef1cd6f1f71f53d9a8aadfba2cf6b5c3d7b6
linux-5.7.tar.xz: 07e40057b78f1c9dd2b042056325d99fcf9f8a08
linux-5.7.tar.sign: 9bdcc9e48ee0eca0baa8118b9a10ba2eda64363e
- patch-5.7.10.xz: 35ee89c00fc7ee52c12f6d8003c503a906d504dd
+ patch-5.7.11.xz: 22e11d00f94d641f0167db08f61a8feb2f231a25
diff --git a/7a8b64d17e35810dc3176fe61208b45c15d25402.patch b/7a8b64d17e35810dc3176fe61208b45c15d25402.patch
new file mode 100644
index 0000000..efa63b9
--- /dev/null
+++ b/7a8b64d17e35810dc3176fe61208b45c15d25402.patch
@@ -0,0 +1,77 @@
+commit 7a8b64d17e35810dc3176fe61208b45c15d25402
+Author: Rob Herring <robh@kernel.org>
+Date: Thu Feb 6 14:02:30 2020 +0000
+
+ of/address: use range parser for of_dma_get_range
+
+ of_dma_get_range() does the same ranges parsing as
+ of_pci_range_parser_one(), so let's refactor of_dma_get_range() to use
+ it instead.
+
+ This commit is no functional change. Subsequent commits will parse more
+ than the 1st dma-ranges entry.
+
+ Signed-off-by: Rob Herring <robh@kernel.org>
+
+diff --git a/drivers/of/address.c b/drivers/of/address.c
+index 6d33f849f11440..a2c45812a50e52 100644
+--- a/drivers/of/address.c
++++ b/drivers/of/address.c
+@@ -939,10 +939,11 @@ int of_dma_get_range(struct device_node *np, u64 *dma_addr, u64 *paddr, u64 *siz
+ {
+ struct device_node *node = of_node_get(np);
+ const __be32 *ranges = NULL;
+- int len, naddr, nsize, pna;
++ int len;
+ int ret = 0;
+ bool found_dma_ranges = false;
+- u64 dmaaddr;
++ struct of_range_parser parser;
++ struct of_range range;
+
+ while (node) {
+ ranges = of_get_property(node, "dma-ranges", &len);
+@@ -967,33 +968,20 @@ int of_dma_get_range(struct device_node *np, u64 *dma_addr, u64 *paddr, u64 *siz
+ goto out;
+ }
+
+- naddr = of_bus_n_addr_cells(node);
+- nsize = of_bus_n_size_cells(node);
+- pna = of_n_addr_cells(node);
+- if ((len / sizeof(__be32)) % (pna + naddr + nsize)) {
+- ret = -EINVAL;
+- goto out;
+- }
++ of_dma_range_parser_init(&parser, node);
++
++ for_each_of_range(&parser, &range) {
++ pr_debug("dma_addr(%llx) cpu_addr(%llx) size(%llx)\n",
++ range.bus_addr, range.cpu_addr, range.size);
++
++ *dma_addr = range.bus_addr;
++ *paddr = range.cpu_addr;
++ *size = range.size;
+
+- /* dma-ranges format:
+- * DMA addr : naddr cells
+- * CPU addr : pna cells
+- * size : nsize cells
+- */
+- dmaaddr = of_read_number(ranges, naddr);
+- *paddr = of_translate_dma_address(node, ranges + naddr);
+- if (*paddr == OF_BAD_ADDR) {
+- pr_err("translation of DMA address(%llx) to CPU address failed node(%pOF)\n",
+- dmaaddr, np);
+- ret = -EINVAL;
+ goto out;
+ }
+- *dma_addr = dmaaddr;
+-
+- *size = of_read_number(ranges + naddr + pna, nsize);
+
+- pr_debug("dma_addr(%llx) cpu_addr(%llx) size(%llx)\n",
+- *dma_addr, *paddr, *size);
++ pr_err("translation of DMA ranges failed on node(%pOF)\n", np);
+
+ out:
+ of_node_put(node);
diff --git a/9d55bebd9816903b821a403a69a94190442ac043.patch b/9d55bebd9816903b821a403a69a94190442ac043.patch
new file mode 100644
index 0000000..b3ead93
--- /dev/null
+++ b/9d55bebd9816903b821a403a69a94190442ac043.patch
@@ -0,0 +1,68 @@
+commit 9d55bebd9816903b821a403a69a94190442ac043
+Author: Rob Herring <robh@kernel.org>
+Date: Thu Feb 6 14:26:40 2020 +0000
+
+ of/address: Support multiple 'dma-ranges' entries
+
+ Currently, the DMA offset and mask for a device are set based only on the
+ first 'dma-ranges' entry. We should really be using all the entries. The
+ kernel doesn't yet support multiple offsets and sizes, so the best we can
+ do is to find the biggest size for a single offset. The algorithm is
+ copied from acpi_dma_get_range().
+
+ If there's different offsets from the first entry, then we warn and
+ continue. It really should be an error, but this will likely break
+ existing DTs.
+
+ Signed-off-by: Rob Herring <robh@kernel.org>
+
+diff --git a/drivers/of/address.c b/drivers/of/address.c
+index a2c45812a50e52..8eea3f6e29a441 100644
+--- a/drivers/of/address.c
++++ b/drivers/of/address.c
+@@ -944,6 +944,7 @@ int of_dma_get_range(struct device_node *np, u64 *dma_addr, u64 *paddr, u64 *siz
+ bool found_dma_ranges = false;
+ struct of_range_parser parser;
+ struct of_range range;
++ u64 dma_start = U64_MAX, dma_end = 0, dma_offset = 0;
+
+ while (node) {
+ ranges = of_get_property(node, "dma-ranges", &len);
+@@ -974,14 +975,33 @@ int of_dma_get_range(struct device_node *np, u64 *dma_addr, u64 *paddr, u64 *siz
+ pr_debug("dma_addr(%llx) cpu_addr(%llx) size(%llx)\n",
+ range.bus_addr, range.cpu_addr, range.size);
+
+- *dma_addr = range.bus_addr;
+- *paddr = range.cpu_addr;
+- *size = range.size;
++ if (dma_offset && range.cpu_addr - range.bus_addr != dma_offset) {
++ pr_warn("Can't handle multiple dma-ranges with different offsets on node(%pOF)\n", node);
++ /* Don't error out as we'd break some existing DTs */
++ continue;
++ }
++ dma_offset = range.cpu_addr - range.bus_addr;
++
++ /* Take lower and upper limits */
++ if (range.bus_addr < dma_start)
++ dma_start = range.bus_addr;
++ if (range.bus_addr + range.size > dma_end)
++ dma_end = range.bus_addr + range.size;
++ }
+
++ if (dma_start >= dma_end) {
++ ret = -EINVAL;
++ pr_debug("Invalid DMA ranges configuration on node(%pOF)\n",
++ node);
+ goto out;
+ }
+
+- pr_err("translation of DMA ranges failed on node(%pOF)\n", np);
++ *dma_addr = dma_start;
++ *size = dma_end - dma_start;
++ *paddr = dma_start + dma_offset;
++
++ pr_debug("final: dma_addr(%llx) cpu_addr(%llx) size(%llx)\n",
++ *dma_addr, *paddr, *size);
+
+ out:
+ of_node_put(node);
diff --git a/arm64-common.config b/arm64-common.config
index c444a48..3a6539a 100644
--- a/arm64-common.config
+++ b/arm64-common.config
@@ -1029,3 +1029,9 @@ CONFIG_OF_RECONFIG_NOTIFIER_ERROR_INJECT=m
CONFIG_ARM64_PTDUMP_CORE=y
CONFIG_ARM64_PTDUMP_DEBUGFS=y
CONFIG_ARM64_RELOC_TEST=m
+CONFIG_GOOGLE_FIRMWARE=y
+CONFIG_GOOGLE_COREBOOT_TABLE=m
+CONFIG_GOOGLE_FRAMEBUFFER_COREBOOT=m
+CONFIG_GOOGLE_MEMCONSOLE_COREBOOT=m
+CONFIG_GOOGLE_VPD=m
+CONFIG_IMX_DSP=m
diff --git a/common.config b/common.config
index ca23a50..28c1ebe 100644
--- a/common.config
+++ b/common.config
@@ -132,6 +132,7 @@ CONFIG_ACPI_PCI_SLOT=y
CONFIG_ACPI_HOTPLUG_MEMORY=y
CONFIG_ACPI_CUSTOM_METHOD=m
CONFIG_ACPI_NFIT=m
+CONFIG_ACPI_HMAT=m
CONFIG_DPTF_POWER=m
CONFIG_ACPI_WATCHDOG=y
CONFIG_ACPI_EXTLOG=m
@@ -221,7 +222,7 @@ CONFIG_FW_CFG_SYSFS=m
CONFIG_FW_CFG_SYSFS_CMDLINE=y
CONFIG_FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER=y
CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-# CONFIG_EFI_VARS is not set
+CONFIG_EFI_VARS=m
CONFIG_EFI_CAPSULE_LOADER=m
CONFIG_EFI_TEST=m
CONFIG_APPLE_PROPERTIES=y
diff --git a/kernel-5.7-fewer-conditions-for-ARM64_PTR_AUTH.patch b/kernel-5.7-fewer-conditions-for-ARM64_PTR_AUTH.patch
new file mode 100644
index 0000000..63ed69a
--- /dev/null
+++ b/kernel-5.7-fewer-conditions-for-ARM64_PTR_AUTH.patch
@@ -0,0 +1,27 @@
+This is wrong and should never go upstream.
+
+It is needed nevertheless: Without this patch, the config builder doesn't emit
+any value for ARM64_PTR_AUTH because the preconditions aren't met.
+Then on "real" make, it knows more about the toolchain, sees it can be
+enabled, and "make syncconfig" hangs prompting for the value.
+
+Given our toolchain is known good (we'll always have binutils >= 2.33.1 and
+current versions of gcc and clang), inside our package disabling those
+preconditions doesn't do any harm.
+
+diff -up linux-5.7/arch/arm64/Kconfig.omv~ linux-5.7/arch/arm64/Kconfig
+--- linux-5.7/arch/arm64/Kconfig.omv~ 2020-07-25 23:31:02.229462957 +0000
++++ linux-5.7/arch/arm64/Kconfig 2020-07-25 23:31:12.161907200 +0000
+@@ -1502,12 +1502,6 @@ config ARM64_PTR_AUTH
+ bool "Enable support for pointer authentication"
+ default y
+ depends on !KVM || ARM64_VHE
+- depends on (CC_HAS_SIGN_RETURN_ADDRESS || CC_HAS_BRANCH_PROT_PAC_RET) && AS_HAS_PAC
+- # GCC 9.1 and later inserts a .note.gnu.property section note for PAC
+- # which is only understood by binutils starting with version 2.33.1.
+- depends on !CC_IS_GCC || GCC_VERSION < 90100 || LD_VERSION >= 233010000
+- depends on !CC_IS_CLANG || AS_HAS_CFI_NEGATE_RA_STATE
+- depends on (!FUNCTION_GRAPH_TRACER || DYNAMIC_FTRACE_WITH_REGS)
+ help
+ Pointer authentication (part of the ARMv8.3 Extensions) provides
+ instructions for signing and authenticating pointers against secret
diff --git a/kernel-5.8-nouveau-write-combining-only-on-x86.patch b/kernel-5.8-nouveau-write-combining-only-on-x86.patch
new file mode 100644
index 0000000..41aa007
--- /dev/null
+++ b/kernel-5.8-nouveau-write-combining-only-on-x86.patch
@@ -0,0 +1,72 @@
+commit bb14834cef399ae99771f0f33fe6b57a68165370
+Author: Bernhard Rosenkränzer <bero@lindev.ch>
+Date: Tue Jul 21 15:45:49 2020 +0200
+
+ nouveau: avoid write-combine mappings for VRAM and IO space
+
+ NOUPSTREAM
+
+ Author: Ard Biesheuvel <ard.biesheuvel@linaro.org>
+ Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
+ Signed-off-by: Graeme Gregory <graeme.gregory@linaro.org>
+ Signed-off-by: Bernhard Rosenkränzer <bero@lindev.ch>
+ [daniel.thompson@linaro.org:
+ Updated to undo changes to the bar2 mapping in v4.15-rc1, see
+ dfcbd5506817 ("drm/nouveau/imem/nv50: map bar2 write-combined")
+ and b807270cbd87 ("drm/nouveau/imem/nv40: map bar2
+ write-combined") for more details]
+ Signed-off-by: Daniel Thompson <daniel.thompson@linaro.org>
+
+diff --git a/drivers/gpu/drm/nouveau/nouveau_bo.c b/drivers/gpu/drm/nouveau/nouveau_bo.c
+index c40f127de3d0b2..525b2dc1ed91af 100644
+--- a/drivers/gpu/drm/nouveau/nouveau_bo.c
++++ b/drivers/gpu/drm/nouveau/nouveau_bo.c
+@@ -662,9 +662,14 @@ nouveau_bo_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
+ case TTM_PL_VRAM:
+ man->flags = TTM_MEMTYPE_FLAG_FIXED |
+ TTM_MEMTYPE_FLAG_MAPPABLE;
++#ifdef CONFIG_X86
+ man->available_caching = TTM_PL_FLAG_UNCACHED |
+ TTM_PL_FLAG_WC;
+ man->default_caching = TTM_PL_FLAG_WC;
++#else
++ man->available_caching = TTM_PL_FLAG_UNCACHED;
++ man->default_caching = TTM_PL_FLAG_UNCACHED;
++#endif
+
+ if (drm->client.device.info.family >= NV_DEVICE_INFO_V0_TESLA) {
+ /* Some BARs do not support being ioremapped WC */
+diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv40.c b/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv40.c
+index 086c118488ef5f..d7e4c0e325afb1 100644
+--- a/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv40.c
++++ b/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv40.c
+@@ -253,8 +253,13 @@ nv40_instmem_new(struct nvkm_device *device, int index,
+ else
+ bar = 3;
+
++#ifdef CONFIG_X86
+ imem->iomem = ioremap_wc(device->func->resource_addr(device, bar),
+ device->func->resource_size(device, bar));
++#else
++ imem->iomem = ioremap(device->func->resource_addr(device, bar),
++ device->func->resource_size(device, bar));
++#endif
+ if (!imem->iomem) {
+ nvkm_error(&imem->base.subdev, "unable to map PRAMIN BAR\n");
+ return -EFAULT;
+diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv50.c b/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv50.c
+index 02c4eb28cef44d..80a28164c15041 100644
+--- a/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv50.c
++++ b/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv50.c
+@@ -171,7 +171,11 @@ nv50_instobj_kmap(struct nv50_instobj *iobj, struct nvkm_vmm *vmm)
+
+ /* Make the mapping visible to the host. */
+ iobj->bar = bar;
++#ifdef CONFIG_X86
+ iobj->map = ioremap_wc(device->func->resource_addr(device, 3) +
++#else
++ iobj->map = ioremap(device->func->resource_addr(device, 3) +
++#endif
+ (u32)iobj->bar->addr, size);
+ if (!iobj->map) {
+ nvkm_warn(subdev, "PRAMIN ioremap failed\n");
diff --git a/kernel-release.spec b/kernel-release.spec
index bfa5971..fe33307 100644
--- a/kernel-release.spec
+++ b/kernel-release.spec
@@ -18,7 +18,7 @@
# compose tar.xz name and release
%define kernelversion 5
%define patchlevel 7
-%define sublevel 10
+%define sublevel 11
%define relc %{nil}
# Only ever wrong on x.0 releases...
%define previous %{kernelversion}.%(echo $((%{patchlevel}-1)))
@@ -32,7 +32,7 @@
%define rpmrel 0.rc%{relc}.1
%define tar_ver %{kernelversion}.%{patchlevel}-rc%{relc}
%else
-%define rpmrel 1
+%define rpmrel 2
%define tar_ver %{kernelversion}.%{patchlevel}
%endif
%define buildrpmrel %{rpmrel}%{rpmtag}
@@ -238,6 +238,17 @@ Patch6: linux-5.2.9-riscv-compile.patch
Patch7: aacraid-dont-freak-out-dependency-generator.patch
# Make uClibc-ng happy
Patch8: socket.h-include-bitsperlong.h.patch
+# Make Nouveau work on SynQuacer (and probably all other non-x86 boards)
+Patch9: kernel-5.8-nouveau-write-combining-only-on-x86.patch
+Patch10: kernel-5.7-fewer-conditions-for-ARM64_PTR_AUTH.patch
+
+# FIXME git bisect shows upstream commit
+# 7a8b64d17e35810dc3176fe61208b45c15d25402 breaks
+# booting SynQuacer from USB flash drives.
+# 9d55bebd9816903b821a403a69a94190442ac043 builds on
+# 7a8b64d17e35810dc3176fe61208b45c15d25402.
+Source100: 7a8b64d17e35810dc3176fe61208b45c15d25402.patch
+Source101: 9d55bebd9816903b821a403a69a94190442ac043.patch
# Patches to VirtualBox and other external modules are
# pulled in as Source: rather than Patch: because it's arch specific
@@ -834,6 +845,12 @@ rm -rf .git
%endif
%autopatch -p1
+%ifarch %{aarch64}
+# FIXME SynQuacer workaround
+patch -p1 -R <%{S:101}
+patch -p1 -R <%{S:100}
+%endif
+
# merge SAA716x DVB driver from extra tarball
sed -i -e '/saa7164/isource "drivers/media/pci/saa716x/Kconfig"' drivers/media/pci/Kconfig
sed -i -e '/saa7164/iobj-$(CONFIG_SAA716X_CORE) += saa716x/' drivers/media/pci/Makefile
@@ -1478,7 +1495,7 @@ chmod +x tools/power/cpupower/utils/version-gen.sh
%kmake -C tools/lib/bpf CC=clang libbpf.a libbpf.pc libbpf.so.0.0.8
cd tools/bpf/bpftool
-make CC=clang bpftool
+%kmake CC=clang bpftool
cd -
############################################################