From d442790bbffa019cd68dd84c180bcb8d3f185097 Mon Sep 17 00:00:00 2001 From: Robert Marko Date: Wed, 7 Jun 2023 13:12:26 +0200 Subject: [PATCH 01/10] generic: 6.1: backport Qualcomm CPUFreq NVMEM changes Currently, IPQ807x is using CPUFreq NVMEM for dealing with different SoC SKU-s having different frequency limits, and we are keeping the patches for it in ipq807x target. However, we managed to upstream a big cleanup of the driver in order to make it possible for other SMEM based targets to be added to CPUFreq NVMEM. IPQ806x will be using CPUFreq NVMEM and depends on these changes as well, so lets put them in generic backport to avoid code duplication. This replaces the older patches in ipq807x. Signed-off-by: Robert Marko --- ...move-SMEM-item-struct-and-defines-t.patch} | 5 +- ...com-smem-Switch-to-EXPORT_SYMBOL_GPL.patch | 55 ++++++++++++++ ...-smem-introduce-qcom_smem_get_soc_id.patch | 70 +++++++++++++++++ ...om-nvmem-use-SoC-ID-s-from-bindings.patch} | 21 ++++-- ...nvmem-use-helper-to-get-SMEM-SoC-ID.patch} | 75 ++++++++++--------- 5 files changed, 181 insertions(+), 45 deletions(-) rename target/linux/{ipq807x/patches-6.1/0124-soc-qcom-socinfo-move-SMEM-item-struct-and-defines-t.patch => generic/backport-6.1/830-01-v6.5-soc-qcom-socinfo-move-SMEM-item-struct-and-defines-t.patch} (94%) create mode 100644 target/linux/generic/backport-6.1/830-02-v6.5-soc-qcom-smem-Switch-to-EXPORT_SYMBOL_GPL.patch create mode 100644 target/linux/generic/backport-6.1/830-03-v6.5-soc-qcom-smem-introduce-qcom_smem_get_soc_id.patch rename target/linux/{ipq807x/patches-6.1/0126-cpufreq-qcom-nvmem-use-SoC-ID-s-from-bindings.patch => generic/backport-6.1/830-04-v6.5-cpufreq-qcom-nvmem-use-SoC-ID-s-from-bindings.patch} (62%) rename target/linux/{ipq807x/patches-6.1/0127-cpufreq-qcom-nvmem-make-qcom_cpufreq_get_msm_id-retu.patch => generic/backport-6.1/830-05-v6.5-cpufreq-qcom-nvmem-use-helper-to-get-SMEM-SoC-ID.patch} (53%) diff --git a/target/linux/ipq807x/patches-6.1/0124-soc-qcom-socinfo-move-SMEM-item-struct-and-defines-t.patch b/target/linux/generic/backport-6.1/830-01-v6.5-soc-qcom-socinfo-move-SMEM-item-struct-and-defines-t.patch similarity index 94% rename from target/linux/ipq807x/patches-6.1/0124-soc-qcom-socinfo-move-SMEM-item-struct-and-defines-t.patch rename to target/linux/generic/backport-6.1/830-01-v6.5-soc-qcom-socinfo-move-SMEM-item-struct-and-defines-t.patch index 4a744490cf..394087a27a 100644 --- a/target/linux/ipq807x/patches-6.1/0124-soc-qcom-socinfo-move-SMEM-item-struct-and-defines-t.patch +++ b/target/linux/generic/backport-6.1/830-01-v6.5-soc-qcom-socinfo-move-SMEM-item-struct-and-defines-t.patch @@ -1,4 +1,4 @@ -From 97505f4c049fa2e8c86a53411a9e599033898533 Mon Sep 17 00:00:00 2001 +From 7cbff3c3f867ff3b24de674f44ca03f54e416a37 Mon Sep 17 00:00:00 2001 From: Robert Marko Date: Sat, 31 Dec 2022 00:27:42 +0100 Subject: [PATCH] soc: qcom: socinfo: move SMEM item struct and defines to a @@ -9,6 +9,9 @@ to reuse them in the Qualcomm NVMEM CPUFreq driver instead of duplicating them. Signed-off-by: Robert Marko +Reviewed-by: Konrad Dybcio +Signed-off-by: Bjorn Andersson +Link: https://lore.kernel.org/r/20230526204802.3081168-1-robimarko@gmail.com --- drivers/soc/qcom/socinfo.c | 58 +-------------------------- include/linux/soc/qcom/socinfo.h | 67 ++++++++++++++++++++++++++++++++ diff --git a/target/linux/generic/backport-6.1/830-02-v6.5-soc-qcom-smem-Switch-to-EXPORT_SYMBOL_GPL.patch b/target/linux/generic/backport-6.1/830-02-v6.5-soc-qcom-smem-Switch-to-EXPORT_SYMBOL_GPL.patch new file mode 100644 index 0000000000..7c7c3f3635 --- /dev/null +++ b/target/linux/generic/backport-6.1/830-02-v6.5-soc-qcom-smem-Switch-to-EXPORT_SYMBOL_GPL.patch @@ -0,0 +1,55 @@ +From 9f1bbff157a69db7684f5da2f73b2325c638a90e Mon Sep 17 00:00:00 2001 +From: Robert Marko +Date: Fri, 26 May 2023 22:47:59 +0200 +Subject: [PATCH] soc: qcom: smem: Switch to EXPORT_SYMBOL_GPL() + +SMEM has been GPL licensed from the start, and there is no reason to use +EXPORT_SYMBOL() so switch to the GPL version. + +Signed-off-by: Robert Marko +Reviewed-by: Konrad Dybcio +Reviewed-by: Trilok Soni +Signed-off-by: Bjorn Andersson +Link: https://lore.kernel.org/r/20230526204802.3081168-2-robimarko@gmail.com +--- + drivers/soc/qcom/smem.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +--- a/drivers/soc/qcom/smem.c ++++ b/drivers/soc/qcom/smem.c +@@ -500,7 +500,7 @@ int qcom_smem_alloc(unsigned host, unsig + + return ret; + } +-EXPORT_SYMBOL(qcom_smem_alloc); ++EXPORT_SYMBOL_GPL(qcom_smem_alloc); + + static void *qcom_smem_get_global(struct qcom_smem *smem, + unsigned item, +@@ -674,7 +674,7 @@ void *qcom_smem_get(unsigned host, unsig + return ptr; + + } +-EXPORT_SYMBOL(qcom_smem_get); ++EXPORT_SYMBOL_GPL(qcom_smem_get); + + /** + * qcom_smem_get_free_space() - retrieve amount of free space in a partition +@@ -719,7 +719,7 @@ int qcom_smem_get_free_space(unsigned ho + + return ret; + } +-EXPORT_SYMBOL(qcom_smem_get_free_space); ++EXPORT_SYMBOL_GPL(qcom_smem_get_free_space); + + static bool addr_in_range(void __iomem *base, size_t size, void *addr) + { +@@ -770,7 +770,7 @@ phys_addr_t qcom_smem_virt_to_phys(void + + return 0; + } +-EXPORT_SYMBOL(qcom_smem_virt_to_phys); ++EXPORT_SYMBOL_GPL(qcom_smem_virt_to_phys); + + static int qcom_smem_get_sbl_version(struct qcom_smem *smem) + { diff --git a/target/linux/generic/backport-6.1/830-03-v6.5-soc-qcom-smem-introduce-qcom_smem_get_soc_id.patch b/target/linux/generic/backport-6.1/830-03-v6.5-soc-qcom-smem-introduce-qcom_smem_get_soc_id.patch new file mode 100644 index 0000000000..4a816bb0f9 --- /dev/null +++ b/target/linux/generic/backport-6.1/830-03-v6.5-soc-qcom-smem-introduce-qcom_smem_get_soc_id.patch @@ -0,0 +1,70 @@ +From c3ecf2602a32d9b9e5fc997076c0d2836495c085 Mon Sep 17 00:00:00 2001 +From: Robert Marko +Date: Fri, 26 May 2023 22:48:00 +0200 +Subject: [PATCH] soc: qcom: smem: introduce qcom_smem_get_soc_id() + +Introduce a helper to return the SoC SMEM ID, which is used to identify the +exact SoC model as there may be differences in the same SoC family. + +Currently, cpufreq-nvmem does this completely in the driver and there has +been more interest expresed for other drivers to use this information so +lets expose a common helper to prevent redoing it in individual drivers +since this field is present on every SMEM table version. + +Signed-off-by: Robert Marko +Reviewed-by: Konrad Dybcio +Signed-off-by: Bjorn Andersson +Link: https://lore.kernel.org/r/20230526204802.3081168-3-robimarko@gmail.com +--- + drivers/soc/qcom/smem.c | 23 +++++++++++++++++++++++ + include/linux/soc/qcom/smem.h | 2 ++ + 2 files changed, 25 insertions(+) + +--- a/drivers/soc/qcom/smem.c ++++ b/drivers/soc/qcom/smem.c +@@ -14,6 +14,7 @@ + #include + #include + #include ++#include + + /* + * The Qualcomm shared memory system is a allocate only heap structure that +@@ -772,6 +773,28 @@ phys_addr_t qcom_smem_virt_to_phys(void + } + EXPORT_SYMBOL_GPL(qcom_smem_virt_to_phys); + ++/** ++ * qcom_smem_get_soc_id() - return the SoC ID ++ * @id: On success, we return the SoC ID here. ++ * ++ * Look up SoC ID from HW/SW build ID and return it. ++ * ++ * Return: 0 on success, negative errno on failure. ++ */ ++int qcom_smem_get_soc_id(u32 *id) ++{ ++ struct socinfo *info; ++ ++ info = qcom_smem_get(QCOM_SMEM_HOST_ANY, SMEM_HW_SW_BUILD_ID, NULL); ++ if (IS_ERR(info)) ++ return PTR_ERR(info); ++ ++ *id = __le32_to_cpu(info->id); ++ ++ return 0; ++} ++EXPORT_SYMBOL_GPL(qcom_smem_get_soc_id); ++ + static int qcom_smem_get_sbl_version(struct qcom_smem *smem) + { + struct smem_header *header; +--- a/include/linux/soc/qcom/smem.h ++++ b/include/linux/soc/qcom/smem.h +@@ -11,4 +11,6 @@ int qcom_smem_get_free_space(unsigned ho + + phys_addr_t qcom_smem_virt_to_phys(void *p); + ++int qcom_smem_get_soc_id(u32 *id); ++ + #endif diff --git a/target/linux/ipq807x/patches-6.1/0126-cpufreq-qcom-nvmem-use-SoC-ID-s-from-bindings.patch b/target/linux/generic/backport-6.1/830-04-v6.5-cpufreq-qcom-nvmem-use-SoC-ID-s-from-bindings.patch similarity index 62% rename from target/linux/ipq807x/patches-6.1/0126-cpufreq-qcom-nvmem-use-SoC-ID-s-from-bindings.patch rename to target/linux/generic/backport-6.1/830-04-v6.5-cpufreq-qcom-nvmem-use-SoC-ID-s-from-bindings.patch index bdac41a028..9560122ccd 100644 --- a/target/linux/ipq807x/patches-6.1/0126-cpufreq-qcom-nvmem-use-SoC-ID-s-from-bindings.patch +++ b/target/linux/generic/backport-6.1/830-04-v6.5-cpufreq-qcom-nvmem-use-SoC-ID-s-from-bindings.patch @@ -1,21 +1,26 @@ -From 132b2f15b8ae3f848b3e6f2962f409cfab0ca759 Mon Sep 17 00:00:00 2001 +From 2b8634d1468ff498cc91b6adf993c27ae6fa079d Mon Sep 17 00:00:00 2001 From: Robert Marko -Date: Fri, 30 Dec 2022 23:33:47 +0100 +Date: Fri, 26 May 2023 22:48:01 +0200 Subject: [PATCH] cpufreq: qcom-nvmem: use SoC ID-s from bindings SMEM SoC ID-s are now stored in DT bindings so lets use those instead of defining them in the driver again. Signed-off-by: Robert Marko +Reviewed-by: Konrad Dybcio +Reviewed-by: Bjorn Andersson +Acked-by: Viresh Kumar +Signed-off-by: Bjorn Andersson +Link: https://lore.kernel.org/r/20230526204802.3081168-4-robimarko@gmail.com --- drivers/cpufreq/qcom-cpufreq-nvmem.c | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) --- a/drivers/cpufreq/qcom-cpufreq-nvmem.c +++ b/drivers/cpufreq/qcom-cpufreq-nvmem.c -@@ -30,12 +30,7 @@ - #include - #include +@@ -31,12 +31,7 @@ + + #define MSM_ID_SMEM 137 -enum _msm_id { - MSM8996V3 = 0xF6ul, @@ -27,10 +32,10 @@ Signed-off-by: Robert Marko enum _msm8996_version { MSM8996_V3, -@@ -150,12 +145,12 @@ static enum _msm8996_version qcom_cpufre - return NUM_OF_MSM8996_VERSIONS; +@@ -154,12 +149,12 @@ static enum _msm8996_version qcom_cpufre + msm_id++; - switch (info->id) { + switch ((enum _msm_id)*msm_id) { - case MSM8996V3: - case APQ8096V3: + case QCOM_ID_MSM8996: diff --git a/target/linux/ipq807x/patches-6.1/0127-cpufreq-qcom-nvmem-make-qcom_cpufreq_get_msm_id-retu.patch b/target/linux/generic/backport-6.1/830-05-v6.5-cpufreq-qcom-nvmem-use-helper-to-get-SMEM-SoC-ID.patch similarity index 53% rename from target/linux/ipq807x/patches-6.1/0127-cpufreq-qcom-nvmem-make-qcom_cpufreq_get_msm_id-retu.patch rename to target/linux/generic/backport-6.1/830-05-v6.5-cpufreq-qcom-nvmem-use-helper-to-get-SMEM-SoC-ID.patch index 0a33c5c66d..4f37d672ba 100644 --- a/target/linux/ipq807x/patches-6.1/0127-cpufreq-qcom-nvmem-make-qcom_cpufreq_get_msm_id-retu.patch +++ b/target/linux/generic/backport-6.1/830-05-v6.5-cpufreq-qcom-nvmem-use-helper-to-get-SMEM-SoC-ID.patch @@ -1,29 +1,30 @@ -From 85bf71b130ab0e939f53ec9cf1131d67d148bc9a Mon Sep 17 00:00:00 2001 +From e7992615acacc27baeec310197108143afc77337 Mon Sep 17 00:00:00 2001 From: Robert Marko -Date: Sat, 31 Dec 2022 12:45:31 +0100 -Subject: [PATCH] cpufreq: qcom-nvmem: make qcom_cpufreq_get_msm_id() return - the SoC ID +Date: Fri, 26 May 2023 22:48:02 +0200 +Subject: [PATCH] cpufreq: qcom-nvmem: use helper to get SMEM SoC ID -Currently, qcom_cpufreq_get_msm_id() does not simply return the SoC ID -after getting it via SMEM call but instead uses an enum to encode the -matched SMEM ID to 2 variants of MSM8996 which are then used in -qcom_cpufreq_kryo_name_version() to set the supported version. - -This prevents qcom_cpufreq_get_msm_id() from being universal and its doing -more than its name suggests, so lets make it just return the SoC ID -directly which allows matching directly on the SoC ID and removes the need -for msm8996_version enum which simplifies the driver. -It also allows reusing the qcom_cpufreq_get_msm_id() for new SoC-s. +Now that SMEM exports a helper to get the SMEM SoC ID lets utilize it. +Currently qcom_cpufreq_get_msm_id() is encoding the returned SMEM SoC ID +into an enum, however there is no reason to do so and we can just match +directly on the SMEM SoC ID as returned by qcom_smem_get_soc_id(). Signed-off-by: Robert Marko +Acked-by: Viresh Kumar +Reviewed-by: Konrad Dybcio +Signed-off-by: Bjorn Andersson +Link: https://lore.kernel.org/r/20230526204802.3081168-5-robimarko@gmail.com --- - drivers/cpufreq/qcom-cpufreq-nvmem.c | 44 ++++++++-------------------- - 1 file changed, 12 insertions(+), 32 deletions(-) + drivers/cpufreq/qcom-cpufreq-nvmem.c | 56 +++++----------------------- + 1 file changed, 10 insertions(+), 46 deletions(-) --- a/drivers/cpufreq/qcom-cpufreq-nvmem.c +++ b/drivers/cpufreq/qcom-cpufreq-nvmem.c -@@ -32,12 +32,6 @@ +@@ -29,16 +29,8 @@ + #include + #include +-#define MSM_ID_SMEM 137 +- #include -enum _msm8996_version { @@ -35,22 +36,24 @@ Signed-off-by: Robert Marko struct qcom_cpufreq_drv; struct qcom_cpufreq_match_data { -@@ -134,30 +128,16 @@ static void get_krait_bin_format_b(struc +@@ -135,60 +127,32 @@ static void get_krait_bin_format_b(struc dev_dbg(cpu_dev, "PVS version: %d\n", *pvs_ver); } -static enum _msm8996_version qcom_cpufreq_get_msm_id(void) -+static int qcom_cpufreq_get_msm_id(void) - { - size_t len; - struct socinfo *info; +-{ +- size_t len; +- u32 *msm_id; - enum _msm8996_version version; - - info = qcom_smem_get(QCOM_SMEM_HOST_ANY, SMEM_HW_SW_BUILD_ID, &len); - if (IS_ERR(info)) +- +- msm_id = qcom_smem_get(QCOM_SMEM_HOST_ANY, MSM_ID_SMEM, &len); +- if (IS_ERR(msm_id)) - return NUM_OF_MSM8996_VERSIONS; - -- switch (info->id) { +- /* The first 4 bytes are format, next to them is the actual msm-id */ +- msm_id++; +- +- switch ((enum _msm_id)*msm_id) { - case QCOM_ID_MSM8996: - case QCOM_ID_APQ8096: - version = MSM8996_V3; @@ -62,20 +65,20 @@ Signed-off-by: Robert Marko - default: - version = NUM_OF_MSM8996_VERSIONS; - } -+ return PTR_ERR(info); - +- - return version; -+ return info->id; - } - +-} +- static int qcom_cpufreq_kryo_name_version(struct device *cpu_dev, -@@ -166,25 +146,25 @@ static int qcom_cpufreq_kryo_name_versio + struct nvmem_cell *speedbin_nvmem, + char **pvs_name, struct qcom_cpufreq_drv *drv) { size_t len; -+ int msm_id; ++ u32 msm_id; u8 *speedbin; - enum _msm8996_version msm8996_version; ++ int ret; *pvs_name = NULL; - msm8996_version = qcom_cpufreq_get_msm_id(); @@ -83,9 +86,9 @@ Signed-off-by: Robert Marko - dev_err(cpu_dev, "Not Snapdragon 820/821!"); - return -ENODEV; - } -+ msm_id = qcom_cpufreq_get_msm_id(); -+ if (msm_id < 0) -+ return msm_id; ++ ret = qcom_smem_get_soc_id(&msm_id); ++ if (ret) ++ return ret; speedbin = nvmem_cell_read(speedbin_nvmem, &len); if (IS_ERR(speedbin)) From 86bc525d00a2714743cb24bdb45fc94cd8bba2e3 Mon Sep 17 00:00:00 2001 From: Robert Marko Date: Wed, 7 Jun 2023 13:16:32 +0200 Subject: [PATCH 02/10] ipq807x: use updated CPUFreq NVMEM support Most of the CPUFreq NVMEM patches have been upstreamed in an improved way. IPQ8074 support itself is being reviewed upstream currently. Upstreamed patches have been moved to generic backports so that ipq806x can use them as well, so lets just use the latest version of IPQ8074 support that is being reviewed upstream. Runtime tested on Qnap 301W (IPQ8072A) and Xiaomi AX3600 (IPQ8071A). Signed-off-by: Robert Marko --- ...nvmem-reuse-socinfo-SMEM-item-struct.patch | 50 ------------------- ...q-qcom-nvmem-add-support-for-IPQ8074.patch | 32 +++++++----- 2 files changed, 20 insertions(+), 62 deletions(-) delete mode 100644 target/linux/ipq807x/patches-6.1/0125-cpufreq-qcom-nvmem-reuse-socinfo-SMEM-item-struct.patch diff --git a/target/linux/ipq807x/patches-6.1/0125-cpufreq-qcom-nvmem-reuse-socinfo-SMEM-item-struct.patch b/target/linux/ipq807x/patches-6.1/0125-cpufreq-qcom-nvmem-reuse-socinfo-SMEM-item-struct.patch deleted file mode 100644 index 5776614463..0000000000 --- a/target/linux/ipq807x/patches-6.1/0125-cpufreq-qcom-nvmem-reuse-socinfo-SMEM-item-struct.patch +++ /dev/null @@ -1,50 +0,0 @@ -From b7b7ea3a0cab42d4f1d4c9ae9eb7c7a3d03e7982 Mon Sep 17 00:00:00 2001 -From: Robert Marko -Date: Fri, 30 Dec 2022 22:51:47 +0100 -Subject: [PATCH] cpufreq: qcom-nvmem: reuse socinfo SMEM item struct - -Now that socinfo SMEM item struct and defines have been moved to a header -so we can utilize that instead. - -Now the SMEM value can be accesed directly, there is no need for defining -the ID for the SMEM request as well. - -Signed-off-by: Robert Marko ---- - drivers/cpufreq/qcom-cpufreq-nvmem.c | 14 +++++--------- - 1 file changed, 5 insertions(+), 9 deletions(-) - ---- a/drivers/cpufreq/qcom-cpufreq-nvmem.c -+++ b/drivers/cpufreq/qcom-cpufreq-nvmem.c -@@ -28,8 +28,7 @@ - #include - #include - #include -- --#define MSM_ID_SMEM 137 -+#include - - enum _msm_id { - MSM8996V3 = 0xF6ul, -@@ -143,17 +142,14 @@ static void get_krait_bin_format_b(struc - static enum _msm8996_version qcom_cpufreq_get_msm_id(void) - { - size_t len; -- u32 *msm_id; -+ struct socinfo *info; - enum _msm8996_version version; - -- msm_id = qcom_smem_get(QCOM_SMEM_HOST_ANY, MSM_ID_SMEM, &len); -- if (IS_ERR(msm_id)) -+ info = qcom_smem_get(QCOM_SMEM_HOST_ANY, SMEM_HW_SW_BUILD_ID, &len); -+ if (IS_ERR(info)) - return NUM_OF_MSM8996_VERSIONS; - -- /* The first 4 bytes are format, next to them is the actual msm-id */ -- msm_id++; -- -- switch ((enum _msm_id)*msm_id) { -+ switch (info->id) { - case MSM8996V3: - case APQ8096V3: - version = MSM8996_V3; diff --git a/target/linux/ipq807x/patches-6.1/0128-cpufreq-qcom-nvmem-add-support-for-IPQ8074.patch b/target/linux/ipq807x/patches-6.1/0128-cpufreq-qcom-nvmem-add-support-for-IPQ8074.patch index d2653e52d6..09abbfa2e5 100644 --- a/target/linux/ipq807x/patches-6.1/0128-cpufreq-qcom-nvmem-add-support-for-IPQ8074.patch +++ b/target/linux/ipq807x/patches-6.1/0128-cpufreq-qcom-nvmem-add-support-for-IPQ8074.patch @@ -1,4 +1,4 @@ -From 813f2b5ad002e691b92154037f154b4444eedd54 Mon Sep 17 00:00:00 2001 +From 11592aa862e67f4477dee7e94d5c8244d893de1b Mon Sep 17 00:00:00 2001 From: Robert Marko Date: Sat, 31 Dec 2022 13:03:41 +0100 Subject: [PATCH] cpufreq: qcom-nvmem: add support for IPQ8074 @@ -14,10 +14,14 @@ IPQ8074 compatible is blacklisted from DT platdev as the cpufreq device will get created by NVMEM CPUFreq driver. Signed-off-by: Robert Marko +--- +Changes in v2: +* Print an error if SMEM ID is not part of the IPQ8074 family +and restrict the speed to Acorn variant (1.4GHz) --- drivers/cpufreq/cpufreq-dt-platdev.c | 1 + - drivers/cpufreq/qcom-cpufreq-nvmem.c | 39 ++++++++++++++++++++++++++++ - 2 files changed, 40 insertions(+) + drivers/cpufreq/qcom-cpufreq-nvmem.c | 43 ++++++++++++++++++++++++++++ + 2 files changed, 44 insertions(+) --- a/drivers/cpufreq/cpufreq-dt-platdev.c +++ b/drivers/cpufreq/cpufreq-dt-platdev.c @@ -31,7 +35,7 @@ Signed-off-by: Robert Marko { .compatible = "qcom,msm8960", }, --- a/drivers/cpufreq/qcom-cpufreq-nvmem.c +++ b/drivers/cpufreq/qcom-cpufreq-nvmem.c -@@ -32,6 +32,9 @@ +@@ -31,6 +31,9 @@ #include @@ -41,7 +45,7 @@ Signed-off-by: Robert Marko struct qcom_cpufreq_drv; struct qcom_cpufreq_match_data { -@@ -216,6 +219,37 @@ len_error: +@@ -204,6 +207,41 @@ len_error: return ret; } @@ -50,12 +54,13 @@ Signed-off-by: Robert Marko + char **pvs_name, + struct qcom_cpufreq_drv *drv) +{ -+ int msm_id; ++ u32 msm_id; ++ int ret; + *pvs_name = NULL; + -+ msm_id = qcom_cpufreq_get_msm_id(); -+ if (msm_id < 0) -+ return msm_id; ++ ret = qcom_smem_get_soc_id(&msm_id); ++ if (ret) ++ return ret; + + switch (msm_id) { + case QCOM_ID_IPQ8070A: @@ -69,7 +74,10 @@ Signed-off-by: Robert Marko + drv->versions = IPQ8074_HAWKEYE_VERSION; + break; + default: -+ BUG(); ++ dev_err(cpu_dev, ++ "SoC ID %u is not part of IPQ8074 family, limiting to 1.4GHz!\n", ++ msm_id); ++ drv->versions = IPQ8074_ACORN_VERSION; + break; + } + @@ -79,7 +87,7 @@ Signed-off-by: Robert Marko static const struct qcom_cpufreq_match_data match_data_kryo = { .get_version = qcom_cpufreq_kryo_name_version, }; -@@ -230,6 +264,10 @@ static const struct qcom_cpufreq_match_d +@@ -218,6 +256,10 @@ static const struct qcom_cpufreq_match_d .genpd_names = qcs404_genpd_names, }; @@ -90,7 +98,7 @@ Signed-off-by: Robert Marko static int qcom_cpufreq_probe(struct platform_device *pdev) { struct qcom_cpufreq_drv *drv; -@@ -375,6 +413,7 @@ static const struct of_device_id qcom_cp +@@ -363,6 +405,7 @@ static const struct of_device_id qcom_cp { .compatible = "qcom,msm8996", .data = &match_data_kryo }, { .compatible = "qcom,qcs404", .data = &match_data_qcs404 }, { .compatible = "qcom,ipq8064", .data = &match_data_krait }, From d955b41275eaf93b7600f8eb7d706f40302f26c2 Mon Sep 17 00:00:00 2001 From: Mikhail Zhilkin Date: Sat, 3 Jun 2023 08:37:54 +0000 Subject: [PATCH 03/10] ramips: enable LED button for TP-Link EC330-G5u v1 The device already has LED push button (KEY_LIGHTS_TOGGLE) and exported GPIO control "led-light". This commit adds button handler script for switching on/off all device LEDs. Signed-off-by: Mikhail Zhilkin Signed-off-by: Christian Lamparter --- .../base-files/etc/rc.button/lights_toggle | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100755 target/linux/ramips/mt7621/base-files/etc/rc.button/lights_toggle diff --git a/target/linux/ramips/mt7621/base-files/etc/rc.button/lights_toggle b/target/linux/ramips/mt7621/base-files/etc/rc.button/lights_toggle new file mode 100755 index 0000000000..c008b633a4 --- /dev/null +++ b/target/linux/ramips/mt7621/base-files/etc/rc.button/lights_toggle @@ -0,0 +1,16 @@ +#!/bin/sh + +[[ "${ACTION}" = "released" ]] || exit 0 + +. /lib/functions.sh + +case "$(board_name)" in +tplink,ec330-g5u-v1) + led_light="/sys/class/gpio/led-light/value" + echo "$((!$(cat $led_light)))" > "$led_light" +;; + *) +;; +esac + +return 0 From cc87f6629b8a120420075cd984a4e6ece6c669df Mon Sep 17 00:00:00 2001 From: Jitao Lu Date: Sun, 4 Jun 2023 13:54:01 +0800 Subject: [PATCH 04/10] oxnas: Enable CONFIG_CRYPTO_LZ4 Previously, CONFIG_LZ4_DECOMPRESS=y was selected by CONFIG_RD_LZ4 only. When building kernel for initramfs, CONFIG_RD_LZ4 will be unset by Kernel/SetInitramfs if the chosen compression method is not lz4, then CONFIG_LZ4_DECOMPRESS will become a *module* in the newly generated kernel config. However, the newly added module won't be built after 38c150612cc9be488527e342db92d5c74093213f, so packaging kmod-lib-lz4 fails due to missing lz4_decompress.ko. CONFIG_CRYPTO_LZ4=y makes CONFIG_LZ4_DECOMPRESS=y being selected w/o CONFIG_RD_LZ4, so that the modules of the default kernel and initramfs kernel are consistent. Fixes: #12766 Fixes: 38c150612cc ("build: revert 54070a1 (all kernels are >= 5.10)") Signed-off-by: Jitao Lu --- target/linux/oxnas/config-5.15 | 3 +++ 1 file changed, 3 insertions(+) diff --git a/target/linux/oxnas/config-5.15 b/target/linux/oxnas/config-5.15 index cdb762a2a0..9540a76774 100644 --- a/target/linux/oxnas/config-5.15 +++ b/target/linux/oxnas/config-5.15 @@ -77,6 +77,7 @@ CONFIG_CRC16=y CONFIG_CRC32_SLICEBY8=y CONFIG_CROSS_MEMORY_ATTACH=y CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y +CONFIG_CRYPTO_LZ4=y CONFIG_CRYPTO_RNG2=y CONFIG_DEBUG_ALIGN_RODATA=y CONFIG_DEBUG_BUGVERBOSE=y @@ -165,6 +166,7 @@ CONFIG_LEDS_TRIGGER_ONESHOT=y CONFIG_LIBFDT=y CONFIG_LOCALVERSION_AUTO=y CONFIG_LOCK_DEBUGGING_SUPPORT=y +CONFIG_LZ4_COMPRESS=y CONFIG_LZ4_DECOMPRESS=y CONFIG_LZO_DECOMPRESS=y # CONFIG_MACH_OX810SE is not set @@ -242,6 +244,7 @@ CONFIG_SERIAL_OF_PLATFORM=y CONFIG_SERIO=y CONFIG_SERIO_LIBPS2=y CONFIG_SERIO_SERPORT=y +CONFIG_SGL_ALLOC=y CONFIG_SLUB_DEBUG=y CONFIG_SOCK_DIAG=y CONFIG_SPARSE_IRQ=y From d69becd3071d560cd1c9ea655cbba26adce91f61 Mon Sep 17 00:00:00 2001 From: Aleksander Jan Bajkowski Date: Thu, 25 May 2023 22:20:15 +0200 Subject: [PATCH 05/10] kernel: use struct group to wipe psb6970 volatile priv data Instead of reference vlan and do strange subtraction, use the handy struct_group() to create a virtual struct of the same size of the members. This permits to have a more secure memset and fix compilation warning in 6.1 where additional checks are done. Fix compilation warning: | inlined from 'psb6970_reset_switch' at drivers/net/phy/psb6970.c:275:2: | ./include/linux/fortify-string.h:314:25: error: call to '__write_overflow_field' | declared with attribute warning: detected write beyond size of field | (1st parameter); maybe use struct_group()? [-Werror=attribute-warning] | 314 | __write_overflow_field(p_size_field, size); | | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |cc1: all warnings being treated as errors Signed-off-by: Aleksander Jan Bajkowski --- .../generic/files/drivers/net/phy/psb6970.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/target/linux/generic/files/drivers/net/phy/psb6970.c b/target/linux/generic/files/drivers/net/phy/psb6970.c index af64704b16..2587b99913 100644 --- a/target/linux/generic/files/drivers/net/phy/psb6970.c +++ b/target/linux/generic/files/drivers/net/phy/psb6970.c @@ -60,11 +60,13 @@ struct psb6970_priv { struct mutex reg_mutex; /* all fields below are cleared on reset */ - bool vlan; - u16 vlan_id[PSB6970_MAX_VLANS]; - u8 vlan_table[PSB6970_MAX_VLANS]; - u8 vlan_tagged; - u16 pvid[PSB6970_NUM_PORTS]; + struct_group(psb6970_priv_volatile, + bool vlan; + u16 vlan_id[PSB6970_MAX_VLANS]; + u8 vlan_table[PSB6970_MAX_VLANS]; + u8 vlan_tagged; + u16 pvid[PSB6970_NUM_PORTS]; + ); }; #define to_psb6970(_dev) container_of(_dev, struct psb6970_priv, dev) @@ -272,8 +274,8 @@ static int psb6970_reset_switch(struct switch_dev *dev) mutex_lock(&priv->reg_mutex); - memset(&priv->vlan, 0, sizeof(struct psb6970_priv) - - offsetof(struct psb6970_priv, vlan)); + memset(&priv->psb6970_priv_volatile, 0, + sizeof(priv->psb6970_priv_volatile)); for (i = 0; i < PSB6970_MAX_VLANS; i++) priv->vlan_id[i] = i; From 62338f41625074640a4de9e26e5e67b010fe0ebe Mon Sep 17 00:00:00 2001 From: Christian Marangi Date: Thu, 8 Jun 2023 03:23:53 +0200 Subject: [PATCH 06/10] generic: drop useless binfmt patch fixing compilation warning The compilation warning was triggered by wrongly set FRAME_WARN to 1024 even for 64bit. This was recently fix by correctly setting the FRAME_WARN to 2048 for 64bit systems. The compilation warning would still be triggered on 32bit system but the actual code is never reached as ARCH_USE_GNU_PROPERTY is only set on arm64 arch. Drop the patch as kmalloc cause perf regression as suggested by upstream maintainers. Fixes: fa79baf4a6e2 ("generic: copy backport, hack, pending patch and config from 5.15 to 6.1") Fixes: 5913ea1ba2fa ("generic: 5.15: add pending patch fixing binfmt compilation warning") Signed-off-by: Christian Marangi --- ...ically-allocate-note.data-in-parse_e.patch | 94 ------------------- ...ically-allocate-note.data-in-parse_e.patch | 94 ------------------- 2 files changed, 188 deletions(-) delete mode 100644 target/linux/generic/pending-5.15/130-binfmt_elf-dynamically-allocate-note.data-in-parse_e.patch delete mode 100644 target/linux/generic/pending-6.1/130-binfmt_elf-dynamically-allocate-note.data-in-parse_e.patch diff --git a/target/linux/generic/pending-5.15/130-binfmt_elf-dynamically-allocate-note.data-in-parse_e.patch b/target/linux/generic/pending-5.15/130-binfmt_elf-dynamically-allocate-note.data-in-parse_e.patch deleted file mode 100644 index f04007e982..0000000000 --- a/target/linux/generic/pending-5.15/130-binfmt_elf-dynamically-allocate-note.data-in-parse_e.patch +++ /dev/null @@ -1,94 +0,0 @@ -From ca71e00839fcdd26f122fb6d9e97903c9fe198f7 Mon Sep 17 00:00:00 2001 -From: Christian Marangi -Date: Sat, 6 May 2023 08:08:35 +0200 -Subject: [PATCH] binfmt_elf: dynamically allocate note.data in - parse_elf_properties - -Dynamically allocate note.data in parse_elf_properties to fix -compilation warning on some arch. - -On some arch note.data exceet the stack limit for a single function and -this cause the following compilation warning: -fs/binfmt_elf.c: In function 'parse_elf_properties.isra': -fs/binfmt_elf.c:821:1: error: the frame size of 1040 bytes is larger than 1024 bytes [-Werror=frame-larger-than=] - 821 | } - | ^ -cc1: all warnings being treated as errors - -Fix this by dynamically allocating the array. - -Fixes: 00e19ceec80b ("ELF: Add ELF program property parsing support") -Signed-off-by: Christian Marangi -Cc: stable@vger.kernel.org # v5.8+ ---- - fs/binfmt_elf.c | 32 +++++++++++++++++++++++--------- - 1 file changed, 23 insertions(+), 9 deletions(-) - ---- a/fs/binfmt_elf.c -+++ b/fs/binfmt_elf.c -@@ -768,7 +768,7 @@ static int parse_elf_properties(struct f - { - union { - struct elf_note nhdr; -- char data[NOTE_DATA_SZ]; -+ char *data; - } note; - loff_t pos; - ssize_t n; -@@ -788,26 +788,38 @@ static int parse_elf_properties(struct f - if (phdr->p_filesz > sizeof(note)) - return -ENOEXEC; - -+ note.data = kcalloc(NOTE_DATA_SZ, sizeof(*note.data), GFP_KERNEL); -+ if (!note.data) -+ return -ENOMEM; -+ - pos = phdr->p_offset; - n = kernel_read(f, ¬e, phdr->p_filesz, &pos); - - BUILD_BUG_ON(sizeof(note) < sizeof(note.nhdr) + NOTE_NAME_SZ); -- if (n < 0 || n < sizeof(note.nhdr) + NOTE_NAME_SZ) -- return -EIO; -+ if (n < 0 || n < sizeof(note.nhdr) + NOTE_NAME_SZ) { -+ ret = -EIO; -+ goto exit; -+ } - - if (note.nhdr.n_type != NT_GNU_PROPERTY_TYPE_0 || - note.nhdr.n_namesz != NOTE_NAME_SZ || - strncmp(note.data + sizeof(note.nhdr), -- GNU_PROPERTY_TYPE_0_NAME, n - sizeof(note.nhdr))) -- return -ENOEXEC; -+ GNU_PROPERTY_TYPE_0_NAME, n - sizeof(note.nhdr))) { -+ ret = -ENOEXEC; -+ goto exit; -+ } - - off = round_up(sizeof(note.nhdr) + NOTE_NAME_SZ, - ELF_GNU_PROPERTY_ALIGN); -- if (off > n) -- return -ENOEXEC; -- -- if (note.nhdr.n_descsz > n - off) -- return -ENOEXEC; -+ if (off > n) { -+ ret = -ENOEXEC; -+ goto exit; -+ } -+ -+ if (note.nhdr.n_descsz > n - off) { -+ ret = -ENOEXEC; -+ goto exit; -+ } - datasz = off + note.nhdr.n_descsz; - - have_prev_type = false; -@@ -817,6 +829,8 @@ static int parse_elf_properties(struct f - have_prev_type = true; - } while (!ret); - -+exit: -+ kfree(note.data); - return ret == -ENOENT ? 0 : ret; - } - diff --git a/target/linux/generic/pending-6.1/130-binfmt_elf-dynamically-allocate-note.data-in-parse_e.patch b/target/linux/generic/pending-6.1/130-binfmt_elf-dynamically-allocate-note.data-in-parse_e.patch deleted file mode 100644 index 8ec51a9977..0000000000 --- a/target/linux/generic/pending-6.1/130-binfmt_elf-dynamically-allocate-note.data-in-parse_e.patch +++ /dev/null @@ -1,94 +0,0 @@ -From ca71e00839fcdd26f122fb6d9e97903c9fe198f7 Mon Sep 17 00:00:00 2001 -From: Christian Marangi -Date: Sat, 6 May 2023 08:08:35 +0200 -Subject: [PATCH] binfmt_elf: dynamically allocate note.data in - parse_elf_properties - -Dynamically allocate note.data in parse_elf_properties to fix -compilation warning on some arch. - -On some arch note.data exceet the stack limit for a single function and -this cause the following compilation warning: -fs/binfmt_elf.c: In function 'parse_elf_properties.isra': -fs/binfmt_elf.c:821:1: error: the frame size of 1040 bytes is larger than 1024 bytes [-Werror=frame-larger-than=] - 821 | } - | ^ -cc1: all warnings being treated as errors - -Fix this by dynamically allocating the array. - -Fixes: 00e19ceec80b ("ELF: Add ELF program property parsing support") -Signed-off-by: Christian Marangi -Cc: stable@vger.kernel.org # v5.8+ ---- - fs/binfmt_elf.c | 32 +++++++++++++++++++++++--------- - 1 file changed, 23 insertions(+), 9 deletions(-) - ---- a/fs/binfmt_elf.c -+++ b/fs/binfmt_elf.c -@@ -769,7 +769,7 @@ static int parse_elf_properties(struct f - { - union { - struct elf_note nhdr; -- char data[NOTE_DATA_SZ]; -+ char *data; - } note; - loff_t pos; - ssize_t n; -@@ -789,26 +789,38 @@ static int parse_elf_properties(struct f - if (phdr->p_filesz > sizeof(note)) - return -ENOEXEC; - -+ note.data = kcalloc(NOTE_DATA_SZ, sizeof(*note.data), GFP_KERNEL); -+ if (!note.data) -+ return -ENOMEM; -+ - pos = phdr->p_offset; - n = kernel_read(f, ¬e, phdr->p_filesz, &pos); - - BUILD_BUG_ON(sizeof(note) < sizeof(note.nhdr) + NOTE_NAME_SZ); -- if (n < 0 || n < sizeof(note.nhdr) + NOTE_NAME_SZ) -- return -EIO; -+ if (n < 0 || n < sizeof(note.nhdr) + NOTE_NAME_SZ) { -+ ret = -EIO; -+ goto exit; -+ } - - if (note.nhdr.n_type != NT_GNU_PROPERTY_TYPE_0 || - note.nhdr.n_namesz != NOTE_NAME_SZ || - strncmp(note.data + sizeof(note.nhdr), -- GNU_PROPERTY_TYPE_0_NAME, n - sizeof(note.nhdr))) -- return -ENOEXEC; -+ GNU_PROPERTY_TYPE_0_NAME, n - sizeof(note.nhdr))) { -+ ret = -ENOEXEC; -+ goto exit; -+ } - - off = round_up(sizeof(note.nhdr) + NOTE_NAME_SZ, - ELF_GNU_PROPERTY_ALIGN); -- if (off > n) -- return -ENOEXEC; -- -- if (note.nhdr.n_descsz > n - off) -- return -ENOEXEC; -+ if (off > n) { -+ ret = -ENOEXEC; -+ goto exit; -+ } -+ -+ if (note.nhdr.n_descsz > n - off) { -+ ret = -ENOEXEC; -+ goto exit; -+ } - datasz = off + note.nhdr.n_descsz; - - have_prev_type = false; -@@ -818,6 +830,8 @@ static int parse_elf_properties(struct f - have_prev_type = true; - } while (!ret); - -+exit: -+ kfree(note.data); - return ret == -ENOENT ? 0 : ret; - } - From 12d6fe2f686635a3fbef02340a713ca1448ce1f1 Mon Sep 17 00:00:00 2001 From: Robert Marko Date: Wed, 7 Jun 2023 09:58:22 +0200 Subject: [PATCH 07/10] generic: 5.15: backport PPC VDSO executable stack fix Recent binutils will warn if there is no .note.GNU-stack section and will interpret that as that stack is executable. So, lets modify the upstream 6.1 fix as in 5.15 VDSO32 and VDSO64 are still separate but later they were merged to resolve: /external-toolchain/openwrt-toolchain-mpc85xx-p1020_gcc-12.3.0_musl.Linux-x86_64/toolchain-powerpc_8548_gcc-12.3.0_musl/bin/../lib/gcc/powerpc-openwrt-linux-musl/12.3.0/../../../../powerpc-openwrt-linux-musl/bin/ld: warning: arch/powerpc/kernel/vdso32/getcpu.o: missing .note.GNU-stack section implies executable stack /external-toolchain/openwrt-toolchain-mpc85xx-p1020_gcc-12.3.0_musl.Linux-x86_64/toolchain-powerpc_8548_gcc-12.3.0_musl/bin/../lib/gcc/powerpc-openwrt-linux-musl/12.3.0/../../../../powerpc-openwrt-linux-musl/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker Signed-off-by: Robert Marko --- ...powerpc-vdso-link-with-z-noexecstack.patch | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 target/linux/generic/backport-5.15/360-v6.1-powerpc-vdso-link-with-z-noexecstack.patch diff --git a/target/linux/generic/backport-5.15/360-v6.1-powerpc-vdso-link-with-z-noexecstack.patch b/target/linux/generic/backport-5.15/360-v6.1-powerpc-vdso-link-with-z-noexecstack.patch new file mode 100644 index 0000000000..82e712e20a --- /dev/null +++ b/target/linux/generic/backport-5.15/360-v6.1-powerpc-vdso-link-with-z-noexecstack.patch @@ -0,0 +1,49 @@ +From 78391fb5b1b5318900725c72f1db25b2ae92894f Mon Sep 17 00:00:00 2001 +From: Christophe Leroy +Date: Wed, 7 Jun 2023 09:50:52 +0200 +Subject: [PATCH] powerpc/vdso: link with -z noexecstack + +With recent binutils, the following warning appears: + + VDSO32L arch/powerpc/kernel/vdso/vdso32.so.dbg +/opt/gcc-12.2.0-nolibc/powerpc64-linux/bin/../lib/gcc/powerpc64-linux/12.2.0/../../../../powerpc64-linux/bin/ld: warning: arch/powerpc/kernel/vdso/getcpu-32.o: missing .note.GNU-stack section implies executable stack +/opt/gcc-12.2.0-nolibc/powerpc64-linux/bin/../lib/gcc/powerpc64-linux/12.2.0/../../../../powerpc64-linux/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker + +To avoid that, explicitly tell the linker we don't want executable +stack. + +For more explanations, see commit ffcf9c5700e4 ("x86: link vdso +and boot with -z noexecstack --no-warn-rwx-segments") + +Commit was adapted for 5.15 as VDSO32 and VDSO64 were merged later so it +does not directly apply. + +Signed-off-by: Christophe Leroy +Signed-off-by: Michael Ellerman +Link: https://lore.kernel.org/r/b95f2e3216a574837dd61208444e9515c3423da4.1662132312.git.christophe.leroy@csgroup.eu +Signed-off-by: Robert Marko +[Adapt to 5.15 as it has VDSO split for 32 and 64bit] +--- + arch/powerpc/kernel/vdso32/Makefile | 2 +- + arch/powerpc/kernel/vdso64/Makefile | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +--- a/arch/powerpc/kernel/vdso32/Makefile ++++ b/arch/powerpc/kernel/vdso32/Makefile +@@ -66,7 +66,7 @@ include/generated/vdso32-offsets.h: $(ob + + # actual build commands + quiet_cmd_vdso32ld_and_check = VDSO32L $@ +- cmd_vdso32ld_and_check = $(VDSOCC) $(c_flags) $(CC32FLAGS) -o $@ -Wl,-T$(filter %.lds,$^) $(filter %.o,$^) ; $(cmd_vdso_check) ++ cmd_vdso32ld_and_check = $(VDSOCC) $(c_flags) $(CC32FLAGS) -o $@ -Wl,-T$(filter %.lds,$^) $(filter %.o,$^) -z noexecstack ; $(cmd_vdso_check) + quiet_cmd_vdso32as = VDSO32A $@ + cmd_vdso32as = $(VDSOCC) $(a_flags) $(CC32FLAGS) -c -o $@ $< + quiet_cmd_vdso32cc = VDSO32C $@ +--- a/arch/powerpc/kernel/vdso64/Makefile ++++ b/arch/powerpc/kernel/vdso64/Makefile +@@ -53,4 +53,4 @@ include/generated/vdso64-offsets.h: $(ob + + # actual build commands + quiet_cmd_vdso64ld_and_check = VDSO64L $@ +- cmd_vdso64ld_and_check = $(CC) $(c_flags) -o $@ -Wl,-T$(filter %.lds,$^) $(filter %.o,$^); $(cmd_vdso_check) ++ cmd_vdso64ld_and_check = $(CC) $(c_flags) -o $@ -Wl,-T$(filter %.lds,$^) $(filter %.o,$^) -z noexecstack ; $(cmd_vdso_check) From 5af25331a354c5c5811cfa9c14bacc44b30abaa4 Mon Sep 17 00:00:00 2001 From: Robert Marko Date: Thu, 8 Jun 2023 18:03:05 +0200 Subject: [PATCH 08/10] generic: 6.1: move Qualcomm SoC ID bindings to generic Move the Qualcomm SoC ID bindings that are used by the CPUFreq NVMEM driver that was recently backported to generic from ipq807x as that series depends on SoC ID bindings but they were forgotten. Due to that IPQ806x builds would fail as the backport was still in ipq807x. Fixes: d44279 ("generic: 6.1: backport Qualcomm CPUFreq NVMEM changes") Signed-off-by: Robert Marko --- ....2-dt-bindings-arm-qcom-document-qcom-msm-id-and-qcom-b.patch} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename target/linux/{ipq807x/patches-6.1/0018-v6.2-dt-bindings-arm-qcom-document-qcom-msm-id-and-qcom-b.patch => generic/backport-6.1/830-00-v6.2-dt-bindings-arm-qcom-document-qcom-msm-id-and-qcom-b.patch} (100%) diff --git a/target/linux/ipq807x/patches-6.1/0018-v6.2-dt-bindings-arm-qcom-document-qcom-msm-id-and-qcom-b.patch b/target/linux/generic/backport-6.1/830-00-v6.2-dt-bindings-arm-qcom-document-qcom-msm-id-and-qcom-b.patch similarity index 100% rename from target/linux/ipq807x/patches-6.1/0018-v6.2-dt-bindings-arm-qcom-document-qcom-msm-id-and-qcom-b.patch rename to target/linux/generic/backport-6.1/830-00-v6.2-dt-bindings-arm-qcom-document-qcom-msm-id-and-qcom-b.patch From c4752e0a132732a979c3eda34a3d4275487e8ddf Mon Sep 17 00:00:00 2001 From: Robert Marko Date: Wed, 7 Jun 2023 20:49:47 +0200 Subject: [PATCH 09/10] ipq807x: add critical thermal trips to all thermal zones Kernel 6.1 has started actually enforcing the bindings requirment that thermal zones must have associated trips described as well, otherwise they will fail during probing with: [ 0.865494] thermal_sys: Failed to find 'trips' node [ 0.867254] thermal_sys: Failed to find trip points for thermal-sensor id=4 [ 0.872271] thermal_sys: Failed to find 'trips' node [ 0.878898] thermal_sys: Failed to find trip points for thermal-sensor id=5 [ 0.884222] thermal_sys: Failed to find 'trips' node [ 0.890775] thermal_sys: Failed to find trip points for thermal-sensor id=6 [ 0.896073] thermal_sys: Failed to find 'trips' node [ 0.902668] thermal_sys: Failed to find trip points for thermal-sensor id=7 [ 0.907964] thermal_sys: Failed to find 'trips' node [ 0.914569] thermal_sys: Failed to find trip points for thermal-sensor id=8 [ 0.921203] thermal_sys: Failed to find 'trips' node [ 0.926469] thermal_sys: Failed to find trip points for thermal-sensor id=14 [ 0.931759] thermal_sys: Failed to find 'trips' node [ 0.938703] thermal_sys: Failed to find trip points for thermal-sensor id=15 So, since CPUFreq support isnt yet upstream we can start by adding critical trips to all of the thermal zones to protect the devices against severely overheating. Qualcomm has set the overheat trip at 120 C but lets be conservative and set it at 110 C. This patch has been sent upstream as well. Signed-off-by: Robert Marko --- ...m-ipq8074-add-critical-thermal-trips.patch | 197 ++++++++++++++++++ 1 file changed, 197 insertions(+) create mode 100644 target/linux/ipq807x/patches-6.1/0134-arm64-dts-qcom-ipq8074-add-critical-thermal-trips.patch diff --git a/target/linux/ipq807x/patches-6.1/0134-arm64-dts-qcom-ipq8074-add-critical-thermal-trips.patch b/target/linux/ipq807x/patches-6.1/0134-arm64-dts-qcom-ipq8074-add-critical-thermal-trips.patch new file mode 100644 index 0000000000..6231d8afb7 --- /dev/null +++ b/target/linux/ipq807x/patches-6.1/0134-arm64-dts-qcom-ipq8074-add-critical-thermal-trips.patch @@ -0,0 +1,197 @@ +From 145bbf2b88990ef3ff00ee541bb7662008683c16 Mon Sep 17 00:00:00 2001 +From: Robert Marko +Date: Wed, 7 Jun 2023 20:26:26 +0200 +Subject: [PATCH] arm64: dts: qcom: ipq8074: add critical thermal trips + +According to bindings, thermal zones must have associated trips as well. +Since we currently dont have CPUFreq support and thus no passive cooling +lets start by defining critical trips to protect the devices against +severe overheating. + +Signed-off-by: Robert Marko +--- + arch/arm64/boot/dts/qcom/ipq8074.dtsi | 96 +++++++++++++++++++++++++++ + 1 file changed, 96 insertions(+) + +--- a/arch/arm64/boot/dts/qcom/ipq8074.dtsi ++++ b/arch/arm64/boot/dts/qcom/ipq8074.dtsi +@@ -1293,6 +1293,14 @@ + polling-delay = <1000>; + + thermal-sensors = <&tsens 4>; ++ ++ trips { ++ nss-top-crit { ++ temperature = <110000>; ++ hysteresis = <1000>; ++ type = "critical"; ++ }; ++ }; + }; + + nss0-thermal { +@@ -1300,6 +1308,14 @@ + polling-delay = <1000>; + + thermal-sensors = <&tsens 5>; ++ ++ trips { ++ nss-0-crit { ++ temperature = <110000>; ++ hysteresis = <1000>; ++ type = "critical"; ++ }; ++ }; + }; + + nss1-thermal { +@@ -1307,6 +1323,14 @@ + polling-delay = <1000>; + + thermal-sensors = <&tsens 6>; ++ ++ trips { ++ nss-1-crit { ++ temperature = <110000>; ++ hysteresis = <1000>; ++ type = "critical"; ++ }; ++ }; + }; + + wcss-phya0-thermal { +@@ -1314,6 +1338,14 @@ + polling-delay = <1000>; + + thermal-sensors = <&tsens 7>; ++ ++ trips { ++ wcss-phya0-crit { ++ temperature = <110000>; ++ hysteresis = <1000>; ++ type = "critical"; ++ }; ++ }; + }; + + wcss-phya1-thermal { +@@ -1321,6 +1353,14 @@ + polling-delay = <1000>; + + thermal-sensors = <&tsens 8>; ++ ++ trips { ++ wcss-phya1-crit { ++ temperature = <110000>; ++ hysteresis = <1000>; ++ type = "critical"; ++ }; ++ }; + }; + + cpu0_thermal: cpu0-thermal { +@@ -1328,6 +1368,14 @@ + polling-delay = <1000>; + + thermal-sensors = <&tsens 9>; ++ ++ trips { ++ cpu0-crit { ++ temperature = <110000>; ++ hysteresis = <1000>; ++ type = "critical"; ++ }; ++ }; + }; + + cpu1_thermal: cpu1-thermal { +@@ -1335,6 +1383,14 @@ + polling-delay = <1000>; + + thermal-sensors = <&tsens 10>; ++ ++ trips { ++ cpu1-crit { ++ temperature = <110000>; ++ hysteresis = <1000>; ++ type = "critical"; ++ }; ++ }; + }; + + cpu2_thermal: cpu2-thermal { +@@ -1342,6 +1398,14 @@ + polling-delay = <1000>; + + thermal-sensors = <&tsens 11>; ++ ++ trips { ++ cpu2-crit { ++ temperature = <110000>; ++ hysteresis = <1000>; ++ type = "critical"; ++ }; ++ }; + }; + + cpu3_thermal: cpu3-thermal { +@@ -1349,6 +1413,14 @@ + polling-delay = <1000>; + + thermal-sensors = <&tsens 12>; ++ ++ trips { ++ cpu3-crit { ++ temperature = <110000>; ++ hysteresis = <1000>; ++ type = "critical"; ++ }; ++ }; + }; + + cluster_thermal: cluster-thermal { +@@ -1356,6 +1428,14 @@ + polling-delay = <1000>; + + thermal-sensors = <&tsens 13>; ++ ++ trips { ++ cluster-crit { ++ temperature = <110000>; ++ hysteresis = <1000>; ++ type = "critical"; ++ }; ++ }; + }; + + wcss-phyb0-thermal { +@@ -1363,6 +1443,14 @@ + polling-delay = <1000>; + + thermal-sensors = <&tsens 14>; ++ ++ trips { ++ wcss-phyb0-crit { ++ temperature = <110000>; ++ hysteresis = <1000>; ++ type = "critical"; ++ }; ++ }; + }; + + wcss-phyb1-thermal { +@@ -1370,6 +1458,14 @@ + polling-delay = <1000>; + + thermal-sensors = <&tsens 15>; ++ ++ trips { ++ wcss-phyb1-crit { ++ temperature = <110000>; ++ hysteresis = <1000>; ++ type = "critical"; ++ }; ++ }; + }; + }; + }; From 75bf5b41a156badd0918d2b284d043d1c939f9bf Mon Sep 17 00:00:00 2001 From: Robert Marko Date: Wed, 7 Jun 2023 20:53:31 +0200 Subject: [PATCH 10/10] ipq807x: remove critical trips from AC/HK DTSI Now that critical trips are defined for all thermal zones in the SOC DTSI there is no need to duplicate them in AC and HK DTSI. Signed-off-by: Robert Marko --- .../arm64/boot/dts/qcom/ipq8074-ac-cpu.dtsi | 30 ------------------- .../arm64/boot/dts/qcom/ipq8074-hk-cpu.dtsi | 30 ------------------- 2 files changed, 60 deletions(-) diff --git a/target/linux/ipq807x/files/arch/arm64/boot/dts/qcom/ipq8074-ac-cpu.dtsi b/target/linux/ipq807x/files/arch/arm64/boot/dts/qcom/ipq8074-ac-cpu.dtsi index dbc9baa2b9..057d592031 100644 --- a/target/linux/ipq807x/files/arch/arm64/boot/dts/qcom/ipq8074-ac-cpu.dtsi +++ b/target/linux/ipq807x/files/arch/arm64/boot/dts/qcom/ipq8074-ac-cpu.dtsi @@ -29,12 +29,6 @@ hysteresis = <2000>; type = "passive"; }; - - cpu0_crit: cpu_crit { - temperature = <110000>; - hysteresis = <1000>; - type = "critical"; - }; }; cooling-maps { @@ -55,12 +49,6 @@ hysteresis = <2000>; type = "passive"; }; - - cpu1_crit: cpu_crit { - temperature = <110000>; - hysteresis = <1000>; - type = "critical"; - }; }; cooling-maps { @@ -81,12 +69,6 @@ hysteresis = <2000>; type = "passive"; }; - - cpu2_crit: cpu_crit { - temperature = <110000>; - hysteresis = <1000>; - type = "critical"; - }; }; cooling-maps { @@ -107,12 +89,6 @@ hysteresis = <2000>; type = "passive"; }; - - cpu3_crit: cpu_crit { - temperature = <110000>; - hysteresis = <1000>; - type = "critical"; - }; }; cooling-maps { @@ -133,12 +109,6 @@ hysteresis = <2000>; type = "passive"; }; - - cluster_crit: cluster_crit { - temperature = <110000>; - hysteresis = <1000>; - type = "critical"; - }; }; cooling-maps { diff --git a/target/linux/ipq807x/files/arch/arm64/boot/dts/qcom/ipq8074-hk-cpu.dtsi b/target/linux/ipq807x/files/arch/arm64/boot/dts/qcom/ipq8074-hk-cpu.dtsi index 8485814969..37af7bbc1f 100644 --- a/target/linux/ipq807x/files/arch/arm64/boot/dts/qcom/ipq8074-hk-cpu.dtsi +++ b/target/linux/ipq807x/files/arch/arm64/boot/dts/qcom/ipq8074-hk-cpu.dtsi @@ -35,12 +35,6 @@ hysteresis = <2000>; type = "passive"; }; - - cpu0_crit: cpu_crit { - temperature = <110000>; - hysteresis = <1000>; - type = "critical"; - }; }; cooling-maps { @@ -74,12 +68,6 @@ hysteresis = <2000>; type = "passive"; }; - - cpu1_crit: cpu_crit { - temperature = <110000>; - hysteresis = <1000>; - type = "critical"; - }; }; cooling-maps { @@ -113,12 +101,6 @@ hysteresis = <2000>; type = "passive"; }; - - cpu2_crit: cpu_crit { - temperature = <110000>; - hysteresis = <1000>; - type = "critical"; - }; }; cooling-maps { @@ -152,12 +134,6 @@ hysteresis = <2000>; type = "passive"; }; - - cpu3_crit: cpu_crit { - temperature = <110000>; - hysteresis = <1000>; - type = "critical"; - }; }; cooling-maps { @@ -191,12 +167,6 @@ hysteresis = <2000>; type = "passive"; }; - - cluster_crit: cluster_crit { - temperature = <110000>; - hysteresis = <1000>; - type = "critical"; - }; }; cooling-maps {