forked from openwrt/openwrt
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
ipq806x: 5:15: copy config and patch from 5.10
Copy config and patch from kernel 5.10 to kernel 5.15 Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
- Loading branch information
Showing
44 changed files
with
6,995 additions
and
0 deletions.
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
71 changes: 71 additions & 0 deletions
71
target/linux/ipq806x/patches-5.15/0001-dtbindings-qcom_adm-Fix-channel-specifiers.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,71 @@ | ||
From 28d0ed88f536dd639adf1b0c7c08e04be3c8f294 Mon Sep 17 00:00:00 2001 | ||
From: Thomas Pedersen <twp@codeaurora.org> | ||
Date: Mon, 16 May 2016 17:58:50 -0700 | ||
Subject: [PATCH 01/69] dtbindings: qcom_adm: Fix channel specifiers | ||
|
||
Original patch from Andy Gross. | ||
|
||
This patch removes the crci information from the dma | ||
channel property. At least one client device requires | ||
using more than one CRCI value for a channel. This does | ||
not match the current binding and the crci information | ||
needs to be removed. | ||
|
||
Instead, the client device will provide this information | ||
via other means. | ||
|
||
Signed-off-by: Andy Gross <agross@codeaurora.org> | ||
Signed-off-by: Thomas Pedersen <twp@codeaurora.org> | ||
--- | ||
Documentation/devicetree/bindings/dma/qcom_adm.txt | 16 ++++++---------- | ||
1 file changed, 6 insertions(+), 10 deletions(-) | ||
|
||
--- a/Documentation/devicetree/bindings/dma/qcom_adm.txt | ||
+++ b/Documentation/devicetree/bindings/dma/qcom_adm.txt | ||
@@ -4,8 +4,7 @@ Required properties: | ||
- compatible: must contain "qcom,adm" for IPQ/APQ8064 and MSM8960 | ||
- reg: Address range for DMA registers | ||
- interrupts: Should contain one interrupt shared by all channels | ||
-- #dma-cells: must be <2>. First cell denotes the channel number. Second cell | ||
- denotes CRCI (client rate control interface) flow control assignment. | ||
+- #dma-cells: must be <1>. First cell denotes the channel number. | ||
- clocks: Should contain the core clock and interface clock. | ||
- clock-names: Must contain "core" for the core clock and "iface" for the | ||
interface clock. | ||
@@ -22,7 +21,7 @@ Example: | ||
compatible = "qcom,adm"; | ||
reg = <0x18300000 0x100000>; | ||
interrupts = <0 170 0>; | ||
- #dma-cells = <2>; | ||
+ #dma-cells = <1>; | ||
|
||
clocks = <&gcc ADM0_CLK>, <&gcc ADM0_PBUS_CLK>; | ||
clock-names = "core", "iface"; | ||
@@ -35,15 +34,12 @@ Example: | ||
qcom,ee = <0>; | ||
}; | ||
|
||
-DMA clients must use the format descripted in the dma.txt file, using a three | ||
+DMA clients must use the format descripted in the dma.txt file, using a two | ||
cell specifier for each channel. | ||
|
||
-Each dmas request consists of 3 cells: | ||
+Each dmas request consists of two cells: | ||
1. phandle pointing to the DMA controller | ||
2. channel number | ||
- 3. CRCI assignment, if applicable. If no CRCI flow control is required, use 0. | ||
- The CRCI is used for flow control. It identifies the peripheral device that | ||
- is the source/destination for the transferred data. | ||
|
||
Example: | ||
|
||
@@ -55,7 +51,7 @@ Example: | ||
|
||
cs-gpios = <&qcom_pinmux 20 0>; | ||
|
||
- dmas = <&adm_dma 6 9>, | ||
- <&adm_dma 5 10>; | ||
+ dmas = <&adm_dma 6>, | ||
+ <&adm_dma 5>; | ||
dma-names = "rx", "tx"; | ||
}; |
29 changes: 29 additions & 0 deletions
29
...inux/ipq806x/patches-5.15/0033-ARM-qcom-automatically-select-PCI_DOMAINS-if-PCI-is-.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
From 48051ece78136e4235a2415a52797db56f8a4478 Mon Sep 17 00:00:00 2001 | ||
From: Mathieu Olivari <mathieu@codeaurora.org> | ||
Date: Tue, 21 Apr 2015 19:09:07 -0700 | ||
Subject: [PATCH 33/69] ARM: qcom: automatically select PCI_DOMAINS if PCI is | ||
enabled | ||
|
||
If multiple PCIe devices are present in the system, the kernel will | ||
panic at boot time when trying to scan the PCI buses. This happens on | ||
IPQ806x based platforms, which has 3 PCIe ports. | ||
|
||
Enabling this option allows the kernel to assign the pci-domains | ||
according to the device-tree content. This allows multiple PCIe | ||
controllers to coexist in the system. | ||
|
||
Signed-off-by: Mathieu Olivari <mathieu@codeaurora.org> | ||
--- | ||
arch/arm/mach-qcom/Kconfig | 1 + | ||
1 file changed, 1 insertion(+) | ||
|
||
--- a/arch/arm/mach-qcom/Kconfig | ||
+++ b/arch/arm/mach-qcom/Kconfig | ||
@@ -7,6 +7,7 @@ menuconfig ARCH_QCOM | ||
select ARM_AMBA | ||
select PINCTRL | ||
select QCOM_SCM if SMP | ||
+ select PCI_DOMAINS if PCI | ||
help | ||
Support for Qualcomm's devicetree based systems. | ||
|
62 changes: 62 additions & 0 deletions
62
target/linux/ipq806x/patches-5.15/0060-HACK-arch-arm-force-ZRELADDR-on-arch-qcom.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,62 @@ | ||
From fa71139b55e114aa8c3c4823ff8ee7d49ee810d4 Mon Sep 17 00:00:00 2001 | ||
From: Mathieu Olivari <mathieu@codeaurora.org> | ||
Date: Wed, 29 Apr 2015 15:21:46 -0700 | ||
Subject: [PATCH 60/69] HACK: arch: arm: force ZRELADDR on arch-qcom | ||
|
||
ARCH_QCOM is using the ARCH_MULTIPLATFORM option, as now recommended | ||
on most ARM architectures. This automatically calculate ZRELADDR by | ||
masking PHYS_OFFSET with 0xf8000000. | ||
|
||
However, on IPQ806x, the first ~20MB of RAM is reserved for the hardware | ||
network accelerators, and the bootloader removes this section from the | ||
layout passed from the ATAGS (when used). | ||
|
||
For newer bootloader, when DT is used, this is not a problem, we just | ||
reserve this memory in the device tree. But if the bootloader doesn't | ||
have DT support, then ATAGS have to be used. In this case, the ARM | ||
decompressor will position the kernel in this low mem, which will not be | ||
in the RAM section mapped by the bootloader, which means the kernel will | ||
freeze in the middle of the boot process trying to map the memory. | ||
|
||
As a work around, this patch allows disabling AUTO_ZRELADDR when | ||
ARCH_QCOM is selected. It makes the zImage usage possible on bootloaders | ||
which don't support device-tree, which is the case on certain early | ||
IPQ806x based designs. | ||
|
||
Signed-off-by: Mathieu Olivari <mathieu@codeaurora.org> | ||
--- | ||
arch/arm/Kconfig | 2 +- | ||
arch/arm/Makefile | 2 ++ | ||
arch/arm/mach-qcom/Makefile.boot | 1 + | ||
3 files changed, 4 insertions(+), 1 deletion(-) | ||
create mode 100644 arch/arm/mach-qcom/Makefile.boot | ||
|
||
--- a/arch/arm/Kconfig | ||
+++ b/arch/arm/Kconfig | ||
@@ -322,7 +322,7 @@ config ARCH_MULTIPLATFORM | ||
select ARCH_SELECT_MEMORY_MODEL | ||
select ARM_HAS_SG_CHAIN | ||
select ARM_PATCH_PHYS_VIRT | ||
- select AUTO_ZRELADDR | ||
+ select AUTO_ZRELADDR if !ARCH_QCOM | ||
select TIMER_OF | ||
select COMMON_CLK | ||
select GENERIC_CLOCKEVENTS | ||
--- a/arch/arm/Makefile | ||
+++ b/arch/arm/Makefile | ||
@@ -251,9 +251,11 @@ MACHINE := arch/arm/mach-$(word 1,$(mac | ||
else | ||
MACHINE := | ||
endif | ||
+ifeq ($(CONFIG_ARCH_QCOM),) | ||
ifeq ($(CONFIG_ARCH_MULTIPLATFORM),y) | ||
MACHINE := | ||
endif | ||
+endif | ||
|
||
machdirs := $(patsubst %,arch/arm/mach-%/,$(machine-y)) | ||
platdirs := $(patsubst %,arch/arm/plat-%/,$(sort $(plat-y))) | ||
--- /dev/null | ||
+++ b/arch/arm/mach-qcom/Makefile.boot | ||
@@ -0,0 +1 @@ | ||
+zreladdr-y+= 0x42208000 |
21 changes: 21 additions & 0 deletions
21
target/linux/ipq806x/patches-5.15/0065-arm-override-compiler-flags.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
From 4d8e29642661397a339ac3485f212c6360445421 Mon Sep 17 00:00:00 2001 | ||
From: John Crispin <john@phrozen.org> | ||
Date: Thu, 9 Mar 2017 09:33:32 +0100 | ||
Subject: [PATCH 65/69] arm: override compiler flags | ||
|
||
Signed-off-by: John Crispin <john@phrozen.org> | ||
--- | ||
arch/arm/Makefile | 2 +- | ||
1 file changed, 1 insertion(+), 1 deletion(-) | ||
|
||
--- a/arch/arm/Makefile | ||
+++ b/arch/arm/Makefile | ||
@@ -61,7 +61,7 @@ KBUILD_CFLAGS += $(call cc-option,-fno-i | ||
# macro, but instead defines a whole series of macros which makes | ||
# testing for a specific architecture or later rather impossible. | ||
arch-$(CONFIG_CPU_32v7M) =-D__LINUX_ARM_ARCH__=7 -march=armv7-m | ||
-arch-$(CONFIG_CPU_32v7) =-D__LINUX_ARM_ARCH__=7 -march=armv7-a | ||
+arch-$(CONFIG_CPU_32v7) =-D__LINUX_ARM_ARCH__=7 -mcpu=cortex-a15 | ||
arch-$(CONFIG_CPU_32v6) =-D__LINUX_ARM_ARCH__=6 -march=armv6 | ||
# Only override the compiler option if ARMv6. The ARMv6K extensions are | ||
# always available in ARMv7 |
210 changes: 210 additions & 0 deletions
210
target/linux/ipq806x/patches-5.15/0067-generic-Mangle-bootloader-s-kernel-arguments.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,210 @@ | ||
From 71270226b14733a4b1f2cde58ea9265caa50b38d Mon Sep 17 00:00:00 2001 | ||
From: Adrian Panella <ianchi74@outlook.com> | ||
Date: Thu, 9 Mar 2017 09:37:17 +0100 | ||
Subject: [PATCH 67/69] generic: Mangle bootloader's kernel arguments | ||
|
||
The command-line arguments provided by the boot loader will be | ||
appended to a new device tree property: bootloader-args. | ||
If there is a property "append-rootblock" in DT under /chosen | ||
and a root= option in bootloaders command line it will be parsed | ||
and added to DT bootargs with the form: <append-rootblock>XX. | ||
Only command line ATAG will be processed, the rest of the ATAGs | ||
sent by bootloader will be ignored. | ||
This is usefull in dual boot systems, to get the current root partition | ||
without afecting the rest of the system. | ||
|
||
Signed-off-by: Adrian Panella <ianchi74@outlook.com> | ||
--- | ||
arch/arm/Kconfig | 11 +++++ | ||
arch/arm/boot/compressed/atags_to_fdt.c | 72 ++++++++++++++++++++++++++++++++- | ||
init/main.c | 16 ++++++++ | ||
3 files changed, 98 insertions(+), 1 deletion(-) | ||
|
||
--- a/arch/arm/Kconfig | ||
+++ b/arch/arm/Kconfig | ||
@@ -1781,6 +1781,17 @@ config ARM_ATAG_DTB_COMPAT_CMDLINE_EXTEN | ||
The command-line arguments provided by the boot loader will be | ||
appended to the the device tree bootargs property. | ||
|
||
+config ARM_ATAG_DTB_COMPAT_CMDLINE_MANGLE | ||
+ bool "Append rootblock parsing bootloader's kernel arguments" | ||
+ help | ||
+ The command-line arguments provided by the boot loader will be | ||
+ appended to a new device tree property: bootloader-args. | ||
+ If there is a property "append-rootblock" in DT under /chosen | ||
+ and a root= option in bootloaders command line it will be parsed | ||
+ and added to DT bootargs with the form: <append-rootblock>XX. | ||
+ Only command line ATAG will be processed, the rest of the ATAGs | ||
+ sent by bootloader will be ignored. | ||
+ | ||
endchoice | ||
|
||
config CMDLINE | ||
--- a/arch/arm/boot/compressed/atags_to_fdt.c | ||
+++ b/arch/arm/boot/compressed/atags_to_fdt.c | ||
@@ -5,6 +5,8 @@ | ||
|
||
#if defined(CONFIG_ARM_ATAG_DTB_COMPAT_CMDLINE_EXTEND) | ||
#define do_extend_cmdline 1 | ||
+#elif defined(CONFIG_ARM_ATAG_DTB_COMPAT_CMDLINE_MANGLE) | ||
+#define do_extend_cmdline 1 | ||
#else | ||
#define do_extend_cmdline 0 | ||
#endif | ||
@@ -69,6 +71,80 @@ static uint32_t get_cell_size(const void | ||
return cell_size; | ||
} | ||
|
||
+#if defined(CONFIG_ARM_ATAG_DTB_COMPAT_CMDLINE_MANGLE) | ||
+/** | ||
+ * taken from arch/x86/boot/string.c | ||
+ * local_strstr - Find the first substring in a %NUL terminated string | ||
+ * @s1: The string to be searched | ||
+ * @s2: The string to search for | ||
+ */ | ||
+static char *local_strstr(const char *s1, const char *s2) | ||
+{ | ||
+ size_t l1, l2; | ||
+ | ||
+ l2 = strlen(s2); | ||
+ if (!l2) | ||
+ return (char *)s1; | ||
+ l1 = strlen(s1); | ||
+ while (l1 >= l2) { | ||
+ l1--; | ||
+ if (!memcmp(s1, s2, l2)) | ||
+ return (char *)s1; | ||
+ s1++; | ||
+ } | ||
+ return NULL; | ||
+} | ||
+ | ||
+static char *append_rootblock(char *dest, const char *str, int len, void *fdt) | ||
+{ | ||
+ char *ptr, *end, *tmp; | ||
+ char *root="root="; | ||
+ char *find_rootblock; | ||
+ int i, l; | ||
+ const char *rootblock; | ||
+ | ||
+ find_rootblock = getprop(fdt, "/chosen", "find-rootblock", &l); | ||
+ if(!find_rootblock) | ||
+ find_rootblock = root; | ||
+ | ||
+ //ARM doesn't have __HAVE_ARCH_STRSTR, so it was copied from x86 | ||
+ ptr = local_strstr(str, find_rootblock); | ||
+ | ||
+ if(!ptr) | ||
+ return dest; | ||
+ | ||
+ end = strchr(ptr, ' '); | ||
+ end = end ? (end - 1) : (strchr(ptr, 0) - 1); | ||
+ | ||
+ // Some boards ubi.mtd=XX,ZZZZ, so let's check for '," too. | ||
+ tmp = strchr(ptr, ','); | ||
+ | ||
+ if(tmp) | ||
+ end = end < tmp ? end : tmp - 1; | ||
+ | ||
+ //find partition number (assumes format root=/dev/mtdXX | /dev/mtdblockXX | yy:XX | ubi.mtd=XX,ZZZZ ) | ||
+ for( i = 0; end >= ptr && *end >= '0' && *end <= '9'; end--, i++); | ||
+ ptr = end + 1; | ||
+ | ||
+ /* if append-rootblock property is set use it to append to command line */ | ||
+ rootblock = getprop(fdt, "/chosen", "append-rootblock", &l); | ||
+ if(rootblock != NULL) { | ||
+ if(*dest != ' ') { | ||
+ *dest = ' '; | ||
+ dest++; | ||
+ len++; | ||
+ } | ||
+ if (len + l + i <= COMMAND_LINE_SIZE) { | ||
+ memcpy(dest, rootblock, l); | ||
+ dest += l - 1; | ||
+ memcpy(dest, ptr, i); | ||
+ dest += i; | ||
+ } | ||
+ } | ||
+ return dest; | ||
+} | ||
+#endif | ||
+ | ||
static void merge_fdt_bootargs(void *fdt, const char *fdt_cmdline) | ||
{ | ||
char cmdline[COMMAND_LINE_SIZE]; | ||
@@ -88,12 +164,21 @@ static void merge_fdt_bootargs(void *fdt | ||
|
||
/* and append the ATAG_CMDLINE */ | ||
if (fdt_cmdline) { | ||
+ | ||
+#if defined(CONFIG_ARM_ATAG_DTB_COMPAT_CMDLINE_MANGLE) | ||
+ //save original bootloader args | ||
+ //and append ubi.mtd with root partition number to current cmdline | ||
+ setprop_string(fdt, "/chosen", "bootloader-args", fdt_cmdline); | ||
+ ptr = append_rootblock(ptr, fdt_cmdline, len, fdt); | ||
+ | ||
+#else | ||
len = strlen(fdt_cmdline); | ||
if (ptr - cmdline + len + 2 < COMMAND_LINE_SIZE) { | ||
*ptr++ = ' '; | ||
memcpy(ptr, fdt_cmdline, len); | ||
ptr += len; | ||
} | ||
+#endif | ||
} | ||
*ptr = '\0'; | ||
|
||
@@ -168,7 +253,9 @@ int atags_to_fdt(void *atag_list, void * | ||
else | ||
setprop_string(fdt, "/chosen", "bootargs", | ||
atag->u.cmdline.cmdline); | ||
- } else if (atag->hdr.tag == ATAG_MEM) { | ||
+ } | ||
+#ifndef CONFIG_ARM_ATAG_DTB_COMPAT_CMDLINE_MANGLE | ||
+ else if (atag->hdr.tag == ATAG_MEM) { | ||
if (memcount >= sizeof(mem_reg_property)/4) | ||
continue; | ||
if (!atag->u.mem.size) | ||
@@ -212,6 +299,10 @@ int atags_to_fdt(void *atag_list, void * | ||
setprop(fdt, "/memory", "reg", mem_reg_property, | ||
4 * memcount * memsize); | ||
} | ||
+#else | ||
+ | ||
+ } | ||
+#endif | ||
|
||
return fdt_pack(fdt); | ||
} | ||
--- a/init/main.c | ||
+++ b/init/main.c | ||
@@ -110,6 +110,10 @@ | ||
|
||
#include <kunit/test.h> | ||
|
||
+#if defined(CONFIG_ARM_ATAG_DTB_COMPAT_CMDLINE_MANGLE) | ||
+#include <linux/of.h> | ||
+#endif | ||
+ | ||
static int kernel_init(void *); | ||
|
||
extern void init_IRQ(void); | ||
@@ -906,6 +910,18 @@ asmlinkage __visible void __init __no_sa | ||
pr_notice("Kernel command line: %s\n", saved_command_line); | ||
/* parameters may set static keys */ | ||
jump_label_init(); | ||
+ | ||
+#if defined(CONFIG_ARM_ATAG_DTB_COMPAT_CMDLINE_MANGLE) | ||
+ //Show bootloader's original command line for reference | ||
+ if(of_chosen) { | ||
+ const char *prop = of_get_property(of_chosen, "bootloader-args", NULL); | ||
+ if(prop) | ||
+ pr_notice("Bootloader command line (ignored): %s\n", prop); | ||
+ else | ||
+ pr_notice("Bootloader command line not present\n"); | ||
+ } | ||
+#endif | ||
+ | ||
parse_early_param(); | ||
after_dashes = parse_args("Booting kernel", | ||
static_command_line, __start___param, |
Oops, something went wrong.