* [PATCH v1 0/5] add support for Apalis iMX8 1300MHz version
@ 2024-12-11 12:18 Stefan Eichenberger
2024-12-11 12:18 ` [PATCH v1 1/5] toradex: tdx-cfg-block: set apalis imx8dxp to always disabled Stefan Eichenberger
` (6 more replies)
0 siblings, 7 replies; 8+ messages in thread
From: Stefan Eichenberger @ 2024-12-11 12:18 UTC (permalink / raw)
To: sbabic, festevam, uboot-imx, trini, francesco.dolcini,
stefan.eichenberger, peng.fan, emanuele.ghidoli, joao.goncalves,
vitor.soares, igor.opaniuk
Cc: u-boot
This patch series adds support for the Apalis iMX8, which utilizes the
industrial 1300MHz version of the iMX8 SoC. Additionally, it includes
minor cleanups that do not affect functionality.
First, the series adds support for the new Product IDs (PIDs) found in
the configuration block of the Apalis iMX8. The primary difference is
that this version uses the industrial SoC, which features lower CPU and
GPU frequencies compared to the automotive variant we used before.
Second, the series extends support to this new SoC. During testing, we
observed that the cpufreq driver did not account for the reduced CPU
frequencies, despite enforcement by the System Controller Firmware
(SCFW). This mismatch led to discrepancies between the frequencies
reported by the cpufreq driver and those actually set. We have also
updated the GPU to operate at the correct frequencies, as the SCFW does
not enforce these limits. Previously, this caused the GPU to overclock
to an unsupported frequency, as documented in the datasheet "i.MX
8QuadMax Industrial Applications Processors" (IMX8QMIEC).
This patch series depends on the following patch and should be merged
only after it has been applied:
https://lore.kernel.org/u-boot/20241125174911.70723-1-ivitro@gmail.com/
Stefan Eichenberger (5):
toradex: tdx-cfg-block: set apalis imx8dxp to always disabled
toradex: tdx-cfg-block: increase indentation for longer defines
toradex: tdx-cfg-block: add new apalis imx8 pids
toradex: apalis-imx8: simplify module version handling
imx: mach: imx8: fdt: set correct frequencies for the industrial SoC
arch/arm/mach-imx/imx8/fdt.c | 132 +++++++++++++++++
board/toradex/apalis-imx8/apalis-imx8.c | 19 ++-
board/toradex/common/tdx-cfg-block.c | 183 ++++++++++++------------
board/toradex/common/tdx-cfg-block.h | 5 +
4 files changed, 239 insertions(+), 100 deletions(-)
--
2.45.2
^ permalink raw reply [flat|nested] 8+ messages in thread* [PATCH v1 1/5] toradex: tdx-cfg-block: set apalis imx8dxp to always disabled 2024-12-11 12:18 [PATCH v1 0/5] add support for Apalis iMX8 1300MHz version Stefan Eichenberger @ 2024-12-11 12:18 ` Stefan Eichenberger 2024-12-11 12:18 ` [PATCH v1 2/5] toradex: tdx-cfg-block: increase indentation for longer defines Stefan Eichenberger ` (5 subsequent siblings) 6 siblings, 0 replies; 8+ messages in thread From: Stefan Eichenberger @ 2024-12-11 12:18 UTC (permalink / raw) To: sbabic, festevam, uboot-imx, trini, francesco.dolcini, stefan.eichenberger, peng.fan, emanuele.ghidoli, joao.goncalves, vitor.soares, igor.opaniuk Cc: u-boot From: Stefan Eichenberger <stefan.eichenberger@toradex.com> Apalis iMX8DXP 1GB is currently set to enable when compiling for Apalis iMX8. This is a mistake the Apalis iMX8DXP 1GB was never released and is not compatible to the Apalis iMX8 series. Signed-off-by: Stefan Eichenberger <stefan.eichenberger@toradex.com> --- board/toradex/common/tdx-cfg-block.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/board/toradex/common/tdx-cfg-block.c b/board/toradex/common/tdx-cfg-block.c index 0fb49fcdfbf..4ef71c721f1 100644 --- a/board/toradex/common/tdx-cfg-block.c +++ b/board/toradex/common/tdx-cfg-block.c @@ -122,7 +122,7 @@ const struct toradex_som toradex_modules[] = { { COLIBRI_IMX8DX_WIFI_BT, "Colibri iMX8DX 1GB WB", TARGET_IS_ENABLED(COLIBRI_IMX8X) }, { COLIBRI_IMX8DX, "Colibri iMX8DX 1GB", TARGET_IS_ENABLED(COLIBRI_IMX8X) }, { APALIS_IMX8QXP, "Apalis iMX8QXP 2GB ECC IT", 0 }, - { APALIS_IMX8DXP, "Apalis iMX8DXP 1GB", TARGET_IS_ENABLED(APALIS_IMX8) }, + { APALIS_IMX8DXP, "Apalis iMX8DXP 1GB", 0 }, { VERDIN_IMX8MMQ_WIFI_BT_IT, "Verdin iMX8M Mini Quad 2GB WB IT", TARGET_IS_ENABLED(VERDIN_IMX8MM) }, { VERDIN_IMX8MNQ_WIFI_BT, "Verdin iMX8M Nano Quad 1GB WB", 0 }, { VERDIN_IMX8MMDL, "Verdin iMX8M Mini DualLite 1GB", TARGET_IS_ENABLED(VERDIN_IMX8MM) }, -- 2.45.2 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v1 2/5] toradex: tdx-cfg-block: increase indentation for longer defines 2024-12-11 12:18 [PATCH v1 0/5] add support for Apalis iMX8 1300MHz version Stefan Eichenberger 2024-12-11 12:18 ` [PATCH v1 1/5] toradex: tdx-cfg-block: set apalis imx8dxp to always disabled Stefan Eichenberger @ 2024-12-11 12:18 ` Stefan Eichenberger 2024-12-11 12:18 ` [PATCH v1 3/5] toradex: tdx-cfg-block: add new apalis imx8 pids Stefan Eichenberger ` (4 subsequent siblings) 6 siblings, 0 replies; 8+ messages in thread From: Stefan Eichenberger @ 2024-12-11 12:18 UTC (permalink / raw) To: sbabic, festevam, uboot-imx, trini, francesco.dolcini, stefan.eichenberger, peng.fan, emanuele.ghidoli, joao.goncalves, vitor.soares, igor.opaniuk Cc: u-boot From: Stefan Eichenberger <stefan.eichenberger@toradex.com> This preparation step ensures that the first column has sufficient space to handle longer defines. This is necessary for the new Apalis iMX8 defines. Signed-off-by: Stefan Eichenberger <stefan.eichenberger@toradex.com> --- board/toradex/common/tdx-cfg-block.c | 178 +++++++++++++-------------- 1 file changed, 89 insertions(+), 89 deletions(-) diff --git a/board/toradex/common/tdx-cfg-block.c b/board/toradex/common/tdx-cfg-block.c index 4ef71c721f1..6508fe8108a 100644 --- a/board/toradex/common/tdx-cfg-block.c +++ b/board/toradex/common/tdx-cfg-block.c @@ -70,95 +70,95 @@ struct toradex_hw tdx_car_hw_tag; #define TARGET_IS_ENABLED(x) IS_ENABLED(CONFIG_TARGET_ ## x) const struct toradex_som toradex_modules[] = { - { 0, "UNKNOWN MODULE", 0 }, - { COLIBRI_PXA270_V1_312MHZ, "Colibri PXA270 312MHz", 0 }, - { COLIBRI_PXA270_V1_520MHZ, "Colibri PXA270 520MHz", 0 }, - { COLIBRI_PXA320, "Colibri PXA320 806MHz", 0 }, - { COLIBRI_PXA300, "Colibri PXA300 208MHz", 0 }, - { COLIBRI_PXA310, "Colibri PXA310 624MHz", 0 }, - { COLIBRI_PXA320_IT, "Colibri PXA320IT 806MHz", 0 }, - { COLIBRI_PXA300_XT, "Colibri PXA300 208MHz XT", 0 }, - { COLIBRI_PXA270_312MHZ, "Colibri PXA270 312MHz", 0 }, - { COLIBRI_PXA270_520MHZ, "Colibri PXA270 520MHz", 0 }, - { COLIBRI_VF50, "Colibri VF50 128MB", TARGET_IS_ENABLED(COLIBRI_VF) }, - { COLIBRI_VF61, "Colibri VF61 256MB", TARGET_IS_ENABLED(COLIBRI_VF) }, - { COLIBRI_VF61_IT, "Colibri VF61 256MB IT", TARGET_IS_ENABLED(COLIBRI_VF) }, - { COLIBRI_VF50_IT, "Colibri VF50 128MB IT", TARGET_IS_ENABLED(COLIBRI_VF) }, - { COLIBRI_IMX6S, "Colibri iMX6S 256MB", TARGET_IS_ENABLED(COLIBRI_IMX6) }, - { COLIBRI_IMX6DL, "Colibri iMX6DL 512MB", TARGET_IS_ENABLED(COLIBRI_IMX6) }, - { COLIBRI_IMX6S_IT, "Colibri iMX6S 256MB IT", TARGET_IS_ENABLED(COLIBRI_IMX6) }, - { COLIBRI_IMX6DL_IT, "Colibri iMX6DL 512MB IT", TARGET_IS_ENABLED(COLIBRI_IMX6) }, - { COLIBRI_T20_256MB, "Colibri T20 256MB", TARGET_IS_ENABLED(COLIBRI_T20) }, - { COLIBRI_T20_512MB, "Colibri T20 512MB", TARGET_IS_ENABLED(COLIBRI_T20) }, - { COLIBRI_T20_512MB_IT, "Colibri T20 512MB IT", TARGET_IS_ENABLED(COLIBRI_T20) }, - { COLIBRI_T30, "Colibri T30 1GB", TARGET_IS_ENABLED(COLIBRI_T30) }, - { COLIBRI_T20_256MB_IT, "Colibri T20 256MB IT", TARGET_IS_ENABLED(COLIBRI_T20) }, - { APALIS_T30_2GB, "Apalis T30 2GB", TARGET_IS_ENABLED(APALIS_T30) }, - { APALIS_T30_1GB, "Apalis T30 1GB", TARGET_IS_ENABLED(APALIS_T30) }, - { APALIS_IMX6Q, "Apalis iMX6Q 1GB", TARGET_IS_ENABLED(APALIS_IMX6) }, - { APALIS_IMX6Q_IT, "Apalis iMX6Q 2GB IT", TARGET_IS_ENABLED(APALIS_IMX6) }, - { APALIS_IMX6D, "Apalis iMX6D 512MB", TARGET_IS_ENABLED(APALIS_IMX6) }, - { COLIBRI_T30_IT, "Colibri T30 1GB IT", TARGET_IS_ENABLED(COLIBRI_T30) }, - { APALIS_T30_IT, "Apalis T30 1GB IT", TARGET_IS_ENABLED(APALIS_T30) }, - { COLIBRI_IMX7S, "Colibri iMX7S 256MB", TARGET_IS_ENABLED(COLIBRI_IMX7) }, - { COLIBRI_IMX7D, "Colibri iMX7D 512MB", TARGET_IS_ENABLED(COLIBRI_IMX7) }, - { APALIS_TK1_2GB, "Apalis TK1 2GB", TARGET_IS_ENABLED(APALIS_TK1) }, - { APALIS_IMX6D_IT, "Apalis iMX6D 1GB IT", TARGET_IS_ENABLED(APALIS_IMX6) }, - { COLIBRI_IMX6ULL, "Colibri iMX6ULL 256MB", TARGET_IS_ENABLED(COLIBRI_IMX6ULL) }, - { APALIS_IMX8QM_WIFI_BT_IT, "Apalis iMX8QM 4GB WB IT", TARGET_IS_ENABLED(APALIS_IMX8) }, - { COLIBRI_IMX8QXP_WIFI_BT_IT, "Colibri iMX8QXP 2GB WB IT", TARGET_IS_ENABLED(COLIBRI_IMX8X) }, - { COLIBRI_IMX7D_EMMC, "Colibri iMX7D 1GB", TARGET_IS_ENABLED(COLIBRI_IMX7) }, - { COLIBRI_IMX6ULL_WIFI_BT_IT, "Colibri iMX6ULL 512MB WB IT", TARGET_IS_ENABLED(COLIBRI_IMX6ULL) }, - { COLIBRI_IMX7D_EPDC, "Colibri iMX7D 512MB EPDC", TARGET_IS_ENABLED(COLIBRI_IMX7) }, - { APALIS_TK1_4GB, "Apalis TK1 4GB", TARGET_IS_ENABLED(APALIS_TK1) }, - { COLIBRI_T20_512MB_IT_SETEK, "Colibri T20 512MB IT SETEK", TARGET_IS_ENABLED(COLIBRI_T20) }, - { COLIBRI_IMX6ULL_IT, "Colibri iMX6ULL 512MB IT", TARGET_IS_ENABLED(COLIBRI_IMX6ULL) }, - { COLIBRI_IMX6ULL_WIFI_BT, "Colibri iMX6ULL 512MB WB", TARGET_IS_ENABLED(COLIBRI_IMX6ULL) }, - { APALIS_IMX8QXP_WIFI_BT_IT, "Apalis iMX8QXP 2GB WB IT", 0 }, - { APALIS_IMX8QM_IT, "Apalis iMX8QM 4GB IT", TARGET_IS_ENABLED(APALIS_IMX8) }, - { APALIS_IMX8QP_WIFI_BT, "Apalis iMX8QP 2GB WB", TARGET_IS_ENABLED(APALIS_IMX8) }, - { APALIS_IMX8QP, "Apalis iMX8QP 2GB", TARGET_IS_ENABLED(APALIS_IMX8) }, - { COLIBRI_IMX8QXP_IT, "Colibri iMX8QXP 2GB IT", TARGET_IS_ENABLED(COLIBRI_IMX8X) }, - { COLIBRI_IMX8DX_WIFI_BT, "Colibri iMX8DX 1GB WB", TARGET_IS_ENABLED(COLIBRI_IMX8X) }, - { COLIBRI_IMX8DX, "Colibri iMX8DX 1GB", TARGET_IS_ENABLED(COLIBRI_IMX8X) }, - { APALIS_IMX8QXP, "Apalis iMX8QXP 2GB ECC IT", 0 }, - { APALIS_IMX8DXP, "Apalis iMX8DXP 1GB", 0 }, - { VERDIN_IMX8MMQ_WIFI_BT_IT, "Verdin iMX8M Mini Quad 2GB WB IT", TARGET_IS_ENABLED(VERDIN_IMX8MM) }, - { VERDIN_IMX8MNQ_WIFI_BT, "Verdin iMX8M Nano Quad 1GB WB", 0 }, - { VERDIN_IMX8MMDL, "Verdin iMX8M Mini DualLite 1GB", TARGET_IS_ENABLED(VERDIN_IMX8MM) }, - { VERDIN_IMX8MPQ_WIFI_BT_IT, "Verdin iMX8M Plus Quad 4GB WB IT", TARGET_IS_ENABLED(VERDIN_IMX8MP) }, - { VERDIN_IMX8MMQ_IT, "Verdin iMX8M Mini Quad 2GB IT", TARGET_IS_ENABLED(VERDIN_IMX8MM) }, - { VERDIN_IMX8MMDL_WIFI_BT_IT, "Verdin iMX8M Mini DualLite 1GB WB IT", TARGET_IS_ENABLED(VERDIN_IMX8MM) }, - { VERDIN_IMX8MPQ, "Verdin iMX8M Plus Quad 2GB", TARGET_IS_ENABLED(VERDIN_IMX8MP) }, - { COLIBRI_IMX6ULL_IT_EMMC, "Colibri iMX6ULL 1GB IT", TARGET_IS_ENABLED(COLIBRI_IMX6ULL) }, - { VERDIN_IMX8MPQ_IT, "Verdin iMX8M Plus Quad 4GB IT", TARGET_IS_ENABLED(VERDIN_IMX8MP) }, - { VERDIN_IMX8MPQ_2GB_WIFI_BT_IT, "Verdin iMX8M Plus Quad 2GB WB IT", TARGET_IS_ENABLED(VERDIN_IMX8MP) }, - { VERDIN_IMX8MPQL_IT, "Verdin iMX8M Plus QuadLite 1GB IT", TARGET_IS_ENABLED(VERDIN_IMX8MP) }, - { VERDIN_IMX8MPQ_8GB_WIFI_BT, "Verdin iMX8M Plus Quad 8GB WB", TARGET_IS_ENABLED(VERDIN_IMX8MP) }, - { APALIS_IMX8QM_8GB_WIFI_BT_IT, "Apalis iMX8QM 8GB WB IT", TARGET_IS_ENABLED(APALIS_IMX8) }, - { VERDIN_IMX8MMQ_WIFI_BT_IT_NO_CAN, "Verdin iMX8M Mini Quad 2GB WB IT", TARGET_IS_ENABLED(VERDIN_IMX8MM) }, - { VERDIN_AM62Q_WIFI_BT_IT, "Verdin AM62 Quad 1GB WB IT", TARGET_IS_ENABLED(VERDIN_AM62_A53) }, - { VERDIN_IMX8MPQ_8GB_WIFI_BT_IT, "Verdin iMX8M Plus Quad 8GB WB IT", TARGET_IS_ENABLED(VERDIN_IMX8MP) }, - { VERDIN_AM62S_512MB, "Verdin AM62 Solo 512MB", TARGET_IS_ENABLED(VERDIN_AM62_A53) }, - { VERDIN_AM62S_512MB_WIFI_BT_IT, "Verdin AM62 Solo 512MB WB IT", TARGET_IS_ENABLED(VERDIN_AM62_A53) }, - { VERDIN_AM62D_1G_ET, "Verdin AM62 Dual 1GB ET", TARGET_IS_ENABLED(VERDIN_AM62_A53) }, - { VERDIN_AM62D_1G_IT, "Verdin AM62 Dual 1GB IT", TARGET_IS_ENABLED(VERDIN_AM62_A53) }, - { VERDIN_AM62D_1G_WIFI_BT_IT, "Verdin AM62 Dual 1GB WB IT", TARGET_IS_ENABLED(VERDIN_AM62_A53) }, - { VERDIN_AM62Q_2G_WIFI_BT_IT, "Verdin AM62 Quad 2GB WB IT", TARGET_IS_ENABLED(VERDIN_AM62_A53) }, - { COLIBRI_IMX6S_NOWINCE, "Colibri iMX6S 256MB", TARGET_IS_ENABLED(COLIBRI_IMX6) }, - { COLIBRI_IMX6S_IT_NOWINCE, "Colibri iMX6S 256MB IT", TARGET_IS_ENABLED(COLIBRI_IMX6) }, - { COLIBRI_IMX6DL_NOWINCE, "Colibri iMX6DL 512MB", TARGET_IS_ENABLED(COLIBRI_IMX6) }, - { COLIBRI_IMX6DL_IT_NOWINCE, "Colibri iMX6DL 512MB IT", TARGET_IS_ENABLED(COLIBRI_IMX6) }, - { COLIBRI_IMX7D_NOWINCE, "Colibri iMX7D 512MB", TARGET_IS_ENABLED(COLIBRI_IMX7) }, - { APALIS_IMX6D_NOWINCE, "Apalis iMX6D 512MB", TARGET_IS_ENABLED(APALIS_IMX6) }, - { APALIS_IMX6Q_NOWINCE, "Apalis iMX6Q 1GB", TARGET_IS_ENABLED(APALIS_IMX6) }, - { APALIS_IMX6D_IT_NOWINCE, "Apalis iMX6D 1GB IT", TARGET_IS_ENABLED(APALIS_IMX6) }, - { APALIS_IMX6Q_IT_NOWINCE, "Apalis iMX6Q 2GB IT", TARGET_IS_ENABLED(APALIS_IMX6) }, - { VERDIN_IMX8MMDL_2G_IT, "Verdin iMX8M Mini DualLite 2GB IT", TARGET_IS_ENABLED(VERDIN_IMX8MM) }, - { VERDIN_IMX8MMQ_2G_IT_NO_CAN, "Verdin iMX8M Mini Quad 2GB IT", TARGET_IS_ENABLED(VERDIN_IMX8MM) }, - { AQUILA_AM69O_32G_WIFI_BT_IT, "Aquila AM69 Octa 32GB WB IT", TARGET_IS_ENABLED(AQUILA_AM69_A72) }, - { VERDIN_IMX95H_16G_WIFI_BT_IT, "Verdin iMX95 Hexa 16GB WB IT", TARGET_IS_ENABLED(VERDIN_IMX95) }, - { VERDIN_IMX8MMQ_4G_WIFI_BT_ET, "Verdin iMX8M Mini Quad 4GB WB ET", TARGET_IS_ENABLED(VERDIN_IMX8MM) }, + { 0, "UNKNOWN MODULE", 0 }, + { COLIBRI_PXA270_V1_312MHZ, "Colibri PXA270 312MHz", 0 }, + { COLIBRI_PXA270_V1_520MHZ, "Colibri PXA270 520MHz", 0 }, + { COLIBRI_PXA320, "Colibri PXA320 806MHz", 0 }, + { COLIBRI_PXA300, "Colibri PXA300 208MHz", 0 }, + { COLIBRI_PXA310, "Colibri PXA310 624MHz", 0 }, + { COLIBRI_PXA320_IT, "Colibri PXA320IT 806MHz", 0 }, + { COLIBRI_PXA300_XT, "Colibri PXA300 208MHz XT", 0 }, + { COLIBRI_PXA270_312MHZ, "Colibri PXA270 312MHz", 0 }, + { COLIBRI_PXA270_520MHZ, "Colibri PXA270 520MHz", 0 }, + { COLIBRI_VF50, "Colibri VF50 128MB", TARGET_IS_ENABLED(COLIBRI_VF) }, + { COLIBRI_VF61, "Colibri VF61 256MB", TARGET_IS_ENABLED(COLIBRI_VF) }, + { COLIBRI_VF61_IT, "Colibri VF61 256MB IT", TARGET_IS_ENABLED(COLIBRI_VF) }, + { COLIBRI_VF50_IT, "Colibri VF50 128MB IT", TARGET_IS_ENABLED(COLIBRI_VF) }, + { COLIBRI_IMX6S, "Colibri iMX6S 256MB", TARGET_IS_ENABLED(COLIBRI_IMX6) }, + { COLIBRI_IMX6DL, "Colibri iMX6DL 512MB", TARGET_IS_ENABLED(COLIBRI_IMX6) }, + { COLIBRI_IMX6S_IT, "Colibri iMX6S 256MB IT", TARGET_IS_ENABLED(COLIBRI_IMX6) }, + { COLIBRI_IMX6DL_IT, "Colibri iMX6DL 512MB IT", TARGET_IS_ENABLED(COLIBRI_IMX6) }, + { COLIBRI_T20_256MB, "Colibri T20 256MB", TARGET_IS_ENABLED(COLIBRI_T20) }, + { COLIBRI_T20_512MB, "Colibri T20 512MB", TARGET_IS_ENABLED(COLIBRI_T20) }, + { COLIBRI_T20_512MB_IT, "Colibri T20 512MB IT", TARGET_IS_ENABLED(COLIBRI_T20) }, + { COLIBRI_T30, "Colibri T30 1GB", TARGET_IS_ENABLED(COLIBRI_T30) }, + { COLIBRI_T20_256MB_IT, "Colibri T20 256MB IT", TARGET_IS_ENABLED(COLIBRI_T20) }, + { APALIS_T30_2GB, "Apalis T30 2GB", TARGET_IS_ENABLED(APALIS_T30) }, + { APALIS_T30_1GB, "Apalis T30 1GB", TARGET_IS_ENABLED(APALIS_T30) }, + { APALIS_IMX6Q, "Apalis iMX6Q 1GB", TARGET_IS_ENABLED(APALIS_IMX6) }, + { APALIS_IMX6Q_IT, "Apalis iMX6Q 2GB IT", TARGET_IS_ENABLED(APALIS_IMX6) }, + { APALIS_IMX6D, "Apalis iMX6D 512MB", TARGET_IS_ENABLED(APALIS_IMX6) }, + { COLIBRI_T30_IT, "Colibri T30 1GB IT", TARGET_IS_ENABLED(COLIBRI_T30) }, + { APALIS_T30_IT, "Apalis T30 1GB IT", TARGET_IS_ENABLED(APALIS_T30) }, + { COLIBRI_IMX7S, "Colibri iMX7S 256MB", TARGET_IS_ENABLED(COLIBRI_IMX7) }, + { COLIBRI_IMX7D, "Colibri iMX7D 512MB", TARGET_IS_ENABLED(COLIBRI_IMX7) }, + { APALIS_TK1_2GB, "Apalis TK1 2GB", TARGET_IS_ENABLED(APALIS_TK1) }, + { APALIS_IMX6D_IT, "Apalis iMX6D 1GB IT", TARGET_IS_ENABLED(APALIS_IMX6) }, + { COLIBRI_IMX6ULL, "Colibri iMX6ULL 256MB", TARGET_IS_ENABLED(COLIBRI_IMX6ULL) }, + { APALIS_IMX8QM_WIFI_BT_IT, "Apalis iMX8QM 4GB WB IT", TARGET_IS_ENABLED(APALIS_IMX8) }, + { COLIBRI_IMX8QXP_WIFI_BT_IT, "Colibri iMX8QXP 2GB WB IT", TARGET_IS_ENABLED(COLIBRI_IMX8X) }, + { COLIBRI_IMX7D_EMMC, "Colibri iMX7D 1GB", TARGET_IS_ENABLED(COLIBRI_IMX7) }, + { COLIBRI_IMX6ULL_WIFI_BT_IT, "Colibri iMX6ULL 512MB WB IT", TARGET_IS_ENABLED(COLIBRI_IMX6ULL) }, + { COLIBRI_IMX7D_EPDC, "Colibri iMX7D 512MB EPDC", TARGET_IS_ENABLED(COLIBRI_IMX7) }, + { APALIS_TK1_4GB, "Apalis TK1 4GB", TARGET_IS_ENABLED(APALIS_TK1) }, + { COLIBRI_T20_512MB_IT_SETEK, "Colibri T20 512MB IT SETEK", TARGET_IS_ENABLED(COLIBRI_T20) }, + { COLIBRI_IMX6ULL_IT, "Colibri iMX6ULL 512MB IT", TARGET_IS_ENABLED(COLIBRI_IMX6ULL) }, + { COLIBRI_IMX6ULL_WIFI_BT, "Colibri iMX6ULL 512MB WB", TARGET_IS_ENABLED(COLIBRI_IMX6ULL) }, + { APALIS_IMX8QXP_WIFI_BT_IT, "Apalis iMX8QXP 2GB WB IT", 0 }, + { APALIS_IMX8QM_IT, "Apalis iMX8QM 4GB IT", TARGET_IS_ENABLED(APALIS_IMX8) }, + { APALIS_IMX8QP_WIFI_BT, "Apalis iMX8QP 2GB WB", TARGET_IS_ENABLED(APALIS_IMX8) }, + { APALIS_IMX8QP, "Apalis iMX8QP 2GB", TARGET_IS_ENABLED(APALIS_IMX8) }, + { COLIBRI_IMX8QXP_IT, "Colibri iMX8QXP 2GB IT", TARGET_IS_ENABLED(COLIBRI_IMX8X) }, + { COLIBRI_IMX8DX_WIFI_BT, "Colibri iMX8DX 1GB WB", TARGET_IS_ENABLED(COLIBRI_IMX8X) }, + { COLIBRI_IMX8DX, "Colibri iMX8DX 1GB", TARGET_IS_ENABLED(COLIBRI_IMX8X) }, + { APALIS_IMX8QXP, "Apalis iMX8QXP 2GB ECC IT", 0 }, + { APALIS_IMX8DXP, "Apalis iMX8DXP 1GB", 0 }, + { VERDIN_IMX8MMQ_WIFI_BT_IT, "Verdin iMX8M Mini Quad 2GB WB IT", TARGET_IS_ENABLED(VERDIN_IMX8MM) }, + { VERDIN_IMX8MNQ_WIFI_BT, "Verdin iMX8M Nano Quad 1GB WB", 0 }, + { VERDIN_IMX8MMDL, "Verdin iMX8M Mini DualLite 1GB", TARGET_IS_ENABLED(VERDIN_IMX8MM) }, + { VERDIN_IMX8MPQ_WIFI_BT_IT, "Verdin iMX8M Plus Quad 4GB WB IT", TARGET_IS_ENABLED(VERDIN_IMX8MP) }, + { VERDIN_IMX8MMQ_IT, "Verdin iMX8M Mini Quad 2GB IT", TARGET_IS_ENABLED(VERDIN_IMX8MM) }, + { VERDIN_IMX8MMDL_WIFI_BT_IT, "Verdin iMX8M Mini DualLite 1GB WB IT", TARGET_IS_ENABLED(VERDIN_IMX8MM) }, + { VERDIN_IMX8MPQ, "Verdin iMX8M Plus Quad 2GB", TARGET_IS_ENABLED(VERDIN_IMX8MP) }, + { COLIBRI_IMX6ULL_IT_EMMC, "Colibri iMX6ULL 1GB IT", TARGET_IS_ENABLED(COLIBRI_IMX6ULL) }, + { VERDIN_IMX8MPQ_IT, "Verdin iMX8M Plus Quad 4GB IT", TARGET_IS_ENABLED(VERDIN_IMX8MP) }, + { VERDIN_IMX8MPQ_2GB_WIFI_BT_IT, "Verdin iMX8M Plus Quad 2GB WB IT", TARGET_IS_ENABLED(VERDIN_IMX8MP) }, + { VERDIN_IMX8MPQL_IT, "Verdin iMX8M Plus QuadLite 1GB IT", TARGET_IS_ENABLED(VERDIN_IMX8MP) }, + { VERDIN_IMX8MPQ_8GB_WIFI_BT, "Verdin iMX8M Plus Quad 8GB WB", TARGET_IS_ENABLED(VERDIN_IMX8MP) }, + { APALIS_IMX8QM_8GB_WIFI_BT_IT, "Apalis iMX8QM 8GB WB IT", TARGET_IS_ENABLED(APALIS_IMX8) }, + { VERDIN_IMX8MMQ_WIFI_BT_IT_NO_CAN, "Verdin iMX8M Mini Quad 2GB WB IT", TARGET_IS_ENABLED(VERDIN_IMX8MM) }, + { VERDIN_AM62Q_WIFI_BT_IT, "Verdin AM62 Quad 1GB WB IT", TARGET_IS_ENABLED(VERDIN_AM62_A53) }, + { VERDIN_IMX8MPQ_8GB_WIFI_BT_IT, "Verdin iMX8M Plus Quad 8GB WB IT", TARGET_IS_ENABLED(VERDIN_IMX8MP) }, + { VERDIN_AM62S_512MB, "Verdin AM62 Solo 512MB", TARGET_IS_ENABLED(VERDIN_AM62_A53) }, + { VERDIN_AM62S_512MB_WIFI_BT_IT, "Verdin AM62 Solo 512MB WB IT", TARGET_IS_ENABLED(VERDIN_AM62_A53) }, + { VERDIN_AM62D_1G_ET, "Verdin AM62 Dual 1GB ET", TARGET_IS_ENABLED(VERDIN_AM62_A53) }, + { VERDIN_AM62D_1G_IT, "Verdin AM62 Dual 1GB IT", TARGET_IS_ENABLED(VERDIN_AM62_A53) }, + { VERDIN_AM62D_1G_WIFI_BT_IT, "Verdin AM62 Dual 1GB WB IT", TARGET_IS_ENABLED(VERDIN_AM62_A53) }, + { VERDIN_AM62Q_2G_WIFI_BT_IT, "Verdin AM62 Quad 2GB WB IT", TARGET_IS_ENABLED(VERDIN_AM62_A53) }, + { COLIBRI_IMX6S_NOWINCE, "Colibri iMX6S 256MB", TARGET_IS_ENABLED(COLIBRI_IMX6) }, + { COLIBRI_IMX6S_IT_NOWINCE, "Colibri iMX6S 256MB IT", TARGET_IS_ENABLED(COLIBRI_IMX6) }, + { COLIBRI_IMX6DL_NOWINCE, "Colibri iMX6DL 512MB", TARGET_IS_ENABLED(COLIBRI_IMX6) }, + { COLIBRI_IMX6DL_IT_NOWINCE, "Colibri iMX6DL 512MB IT", TARGET_IS_ENABLED(COLIBRI_IMX6) }, + { COLIBRI_IMX7D_NOWINCE, "Colibri iMX7D 512MB", TARGET_IS_ENABLED(COLIBRI_IMX7) }, + { APALIS_IMX6D_NOWINCE, "Apalis iMX6D 512MB", TARGET_IS_ENABLED(APALIS_IMX6) }, + { APALIS_IMX6Q_NOWINCE, "Apalis iMX6Q 1GB", TARGET_IS_ENABLED(APALIS_IMX6) }, + { APALIS_IMX6D_IT_NOWINCE, "Apalis iMX6D 1GB IT", TARGET_IS_ENABLED(APALIS_IMX6) }, + { APALIS_IMX6Q_IT_NOWINCE, "Apalis iMX6Q 2GB IT", TARGET_IS_ENABLED(APALIS_IMX6) }, + { VERDIN_IMX8MMDL_2G_IT, "Verdin iMX8M Mini DualLite 2GB IT", TARGET_IS_ENABLED(VERDIN_IMX8MM) }, + { VERDIN_IMX8MMQ_2G_IT_NO_CAN, "Verdin iMX8M Mini Quad 2GB IT", TARGET_IS_ENABLED(VERDIN_IMX8MM) }, + { AQUILA_AM69O_32G_WIFI_BT_IT, "Aquila AM69 Octa 32GB WB IT", TARGET_IS_ENABLED(AQUILA_AM69_A72) }, + { VERDIN_IMX95H_16G_WIFI_BT_IT, "Verdin iMX95 Hexa 16GB WB IT", TARGET_IS_ENABLED(VERDIN_IMX95) }, + { VERDIN_IMX8MMQ_4G_WIFI_BT_ET, "Verdin iMX8M Mini Quad 4GB WB ET", TARGET_IS_ENABLED(VERDIN_IMX8MM) }, }; struct pid4list { -- 2.45.2 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v1 3/5] toradex: tdx-cfg-block: add new apalis imx8 pids 2024-12-11 12:18 [PATCH v1 0/5] add support for Apalis iMX8 1300MHz version Stefan Eichenberger 2024-12-11 12:18 ` [PATCH v1 1/5] toradex: tdx-cfg-block: set apalis imx8dxp to always disabled Stefan Eichenberger 2024-12-11 12:18 ` [PATCH v1 2/5] toradex: tdx-cfg-block: increase indentation for longer defines Stefan Eichenberger @ 2024-12-11 12:18 ` Stefan Eichenberger 2024-12-11 12:18 ` [PATCH v1 4/5] toradex: apalis-imx8: simplify module version handling Stefan Eichenberger ` (3 subsequent siblings) 6 siblings, 0 replies; 8+ messages in thread From: Stefan Eichenberger @ 2024-12-11 12:18 UTC (permalink / raw) To: sbabic, festevam, uboot-imx, trini, francesco.dolcini, stefan.eichenberger, peng.fan, emanuele.ghidoli, joao.goncalves, vitor.soares, igor.opaniuk Cc: u-boot From: Stefan Eichenberger <stefan.eichenberger@toradex.com> Add new PIDs for the Apalis iMX8 modules featuring the industrial variant of the SoC, which supports a maximum CPU frequency of 1300 MHz. Signed-off-by: Stefan Eichenberger <stefan.eichenberger@toradex.com> --- board/toradex/apalis-imx8/apalis-imx8.c | 5 +++++ board/toradex/common/tdx-cfg-block.c | 5 +++++ board/toradex/common/tdx-cfg-block.h | 5 +++++ 3 files changed, 15 insertions(+) diff --git a/board/toradex/apalis-imx8/apalis-imx8.c b/board/toradex/apalis-imx8/apalis-imx8.c index 570bf2a27d4..1dc9483f022 100644 --- a/board/toradex/apalis-imx8/apalis-imx8.c +++ b/board/toradex/apalis-imx8/apalis-imx8.c @@ -251,12 +251,17 @@ static void select_dt_from_module_version(void) case APALIS_IMX8QM_IT: case APALIS_IMX8QM_WIFI_BT_IT: case APALIS_IMX8QM_8GB_WIFI_BT_IT: + case APALIS_IMX8QM_IT_1300MHZ: + case APALIS_IMX8QM_WIFI_BT_IT_1300MHZ: + case APALIS_IMX8QM_8GB_WIFI_BT_IT_1300MHZ: if (get_pcb_revision() == PCB_VERSION_1_0) env_set("variant", ""); break; /* Select Apalis iMX8QP device trees */ case APALIS_IMX8QP_WIFI_BT: case APALIS_IMX8QP: + case APALIS_IMX8QP_WIFI_BT_1300MHZ: + case APALIS_IMX8QP_1300MHZ: env_set("soc", "imx8qp"); break; default: diff --git a/board/toradex/common/tdx-cfg-block.c b/board/toradex/common/tdx-cfg-block.c index 6508fe8108a..3855e15b83b 100644 --- a/board/toradex/common/tdx-cfg-block.c +++ b/board/toradex/common/tdx-cfg-block.c @@ -159,6 +159,11 @@ const struct toradex_som toradex_modules[] = { { AQUILA_AM69O_32G_WIFI_BT_IT, "Aquila AM69 Octa 32GB WB IT", TARGET_IS_ENABLED(AQUILA_AM69_A72) }, { VERDIN_IMX95H_16G_WIFI_BT_IT, "Verdin iMX95 Hexa 16GB WB IT", TARGET_IS_ENABLED(VERDIN_IMX95) }, { VERDIN_IMX8MMQ_4G_WIFI_BT_ET, "Verdin iMX8M Mini Quad 4GB WB ET", TARGET_IS_ENABLED(VERDIN_IMX8MM) }, + { APALIS_IMX8QM_WIFI_BT_IT_1300MHZ, "Apalis iMX8QM 4GB WB IT", TARGET_IS_ENABLED(APALIS_IMX8) }, + { APALIS_IMX8QM_IT_1300MHZ, "Apalis iMX8QM 4GB IT", TARGET_IS_ENABLED(APALIS_IMX8) }, + { APALIS_IMX8QP_WIFI_BT_1300MHZ, "Apalis iMX8QP 2GB WB", TARGET_IS_ENABLED(APALIS_IMX8) }, + { APALIS_IMX8QP_1300MHZ, "Apalis iMX8QP 2GB", TARGET_IS_ENABLED(APALIS_IMX8) }, + { APALIS_IMX8QM_8GB_WIFI_BT_IT_1300MHZ, "Apalis iMX8QM 8GB WB IT", TARGET_IS_ENABLED(APALIS_IMX8) }, }; struct pid4list { diff --git a/board/toradex/common/tdx-cfg-block.h b/board/toradex/common/tdx-cfg-block.h index 937e84c3199..eaa52ed24f7 100644 --- a/board/toradex/common/tdx-cfg-block.h +++ b/board/toradex/common/tdx-cfg-block.h @@ -117,6 +117,11 @@ enum { AQUILA_AM69O_32G_WIFI_BT_IT, VERDIN_IMX95H_16G_WIFI_BT_IT, VERDIN_IMX8MMQ_4G_WIFI_BT_ET, /* 90 */ + APALIS_IMX8QM_WIFI_BT_IT_1300MHZ, + APALIS_IMX8QM_IT_1300MHZ, + APALIS_IMX8QP_WIFI_BT_1300MHZ, + APALIS_IMX8QP_1300MHZ, + APALIS_IMX8QM_8GB_WIFI_BT_IT_1300MHZ, /* 95 */ }; enum { -- 2.45.2 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v1 4/5] toradex: apalis-imx8: simplify module version handling 2024-12-11 12:18 [PATCH v1 0/5] add support for Apalis iMX8 1300MHz version Stefan Eichenberger ` (2 preceding siblings ...) 2024-12-11 12:18 ` [PATCH v1 3/5] toradex: tdx-cfg-block: add new apalis imx8 pids Stefan Eichenberger @ 2024-12-11 12:18 ` Stefan Eichenberger 2024-12-11 12:18 ` [PATCH v1 5/5] imx: mach: imx8: fdt: set correct frequencies for the industrial SoC Stefan Eichenberger ` (2 subsequent siblings) 6 siblings, 0 replies; 8+ messages in thread From: Stefan Eichenberger @ 2024-12-11 12:18 UTC (permalink / raw) To: sbabic, festevam, uboot-imx, trini, francesco.dolcini, stefan.eichenberger, peng.fan, emanuele.ghidoli, joao.goncalves, vitor.soares, igor.opaniuk Cc: u-boot From: Stefan Eichenberger <stefan.eichenberger@toradex.com> Simplify module version handling by removing the special case for the Apalis iMX8QM. The Apalis iMX8QM has been treated as a special case in module version handling, but was always the default. By removing this special handling, the code is simplified and easier to maintain. We will not print the message "Unknown Apalis iMX8 module" anymore. However, we still handle this because if the config block is missing we show "MISSING TORADEX CONFIG BLOCK" and if the serial number is unknown we show "Model: Toradex 0000 UNKNOWN MODULE V1.1A". Therefore, it is still possible to detect such issues. Signed-off-by: Stefan Eichenberger <stefan.eichenberger@toradex.com> --- board/toradex/apalis-imx8/apalis-imx8.c | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/board/toradex/apalis-imx8/apalis-imx8.c b/board/toradex/apalis-imx8/apalis-imx8.c index 1dc9483f022..a8c38208693 100644 --- a/board/toradex/apalis-imx8/apalis-imx8.c +++ b/board/toradex/apalis-imx8/apalis-imx8.c @@ -243,20 +243,12 @@ static enum pcb_rev_t get_pcb_revision(void) static void select_dt_from_module_version(void) { - env_set("soc", "imx8qm"); - env_set("variant", "-v1.1"); + if (get_pcb_revision() == PCB_VERSION_1_0) + env_set("variant", ""); + else + env_set("variant", "-v1.1"); switch (tdx_hw_tag.prodid) { - /* Select Apalis iMX8QM device trees */ - case APALIS_IMX8QM_IT: - case APALIS_IMX8QM_WIFI_BT_IT: - case APALIS_IMX8QM_8GB_WIFI_BT_IT: - case APALIS_IMX8QM_IT_1300MHZ: - case APALIS_IMX8QM_WIFI_BT_IT_1300MHZ: - case APALIS_IMX8QM_8GB_WIFI_BT_IT_1300MHZ: - if (get_pcb_revision() == PCB_VERSION_1_0) - env_set("variant", ""); - break; /* Select Apalis iMX8QP device trees */ case APALIS_IMX8QP_WIFI_BT: case APALIS_IMX8QP: @@ -265,8 +257,8 @@ static void select_dt_from_module_version(void) env_set("soc", "imx8qp"); break; default: - printf("Unknown Apalis iMX8 module\n"); - return; + env_set("soc", "imx8qm"); + break; } } -- 2.45.2 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v1 5/5] imx: mach: imx8: fdt: set correct frequencies for the industrial SoC 2024-12-11 12:18 [PATCH v1 0/5] add support for Apalis iMX8 1300MHz version Stefan Eichenberger ` (3 preceding siblings ...) 2024-12-11 12:18 ` [PATCH v1 4/5] toradex: apalis-imx8: simplify module version handling Stefan Eichenberger @ 2024-12-11 12:18 ` Stefan Eichenberger 2024-12-11 17:39 ` [PATCH v1 0/5] add support for Apalis iMX8 1300MHz version Francesco Dolcini 2024-12-17 10:55 ` Fabio Estevam 6 siblings, 0 replies; 8+ messages in thread From: Stefan Eichenberger @ 2024-12-11 12:18 UTC (permalink / raw) To: sbabic, festevam, uboot-imx, trini, francesco.dolcini, stefan.eichenberger, peng.fan, emanuele.ghidoli, joao.goncalves, vitor.soares, igor.opaniuk Cc: u-boot From: Stefan Eichenberger <stefan.eichenberger@toradex.com> Set correct CPU and GPU frequencies for the industrial i.MX8 SoC variant. Ensure that the CPU and GPU frequencies are properly configured for the industrial variant of the SoC. According to the "i.MX 8QuadMax Industrial Applications Processors" datasheet, the frequency limits for this variant are as follows: - Cortex-A72: 1.296 GHz - Cortex-A53: 1.104 GHz - GPU core: 625 MHz - GPU shader: 625 MHz The CPU clock is enforced by the System Controller Firmware (SCFW), but the cpufreq driver is unaware of this enforcement. By removing unsupported frequencies from the operating points, we ensure that the cpufreq driver aligns correctly with the SCFW's settings. The GPU frequency, on the other hand, is not enforced by the SCFW. As a result, the GPU could potentially be overclocked. To prevent this, we set the correct clock frequency and update the operating points accordingly, ensuring compliance with the datasheet specifications. Signed-off-by: Stefan Eichenberger <stefan.eichenberger@toradex.com> --- arch/arm/mach-imx/imx8/fdt.c | 132 +++++++++++++++++++++++++++++++++++ 1 file changed, 132 insertions(+) diff --git a/arch/arm/mach-imx/imx8/fdt.c b/arch/arm/mach-imx/imx8/fdt.c index 6d0585f5cc6..ce78c8ce919 100644 --- a/arch/arm/mach-imx/imx8/fdt.c +++ b/arch/arm/mach-imx/imx8/fdt.c @@ -11,6 +11,8 @@ #include <fdt_support.h> #include <linux/libfdt.h> #include <linux/printk.h> +#include <cpu.h> +#include <dm.h> DECLARE_GLOBAL_DATA_PTR; @@ -279,6 +281,134 @@ static int ft_add_optee_node(void *fdt, struct bd_info *bd) return 0; } +static int delete_node(void *blob, const char *node) +{ + int nodeoffset; + int err; + + nodeoffset = fdt_path_offset(blob, node); + if (nodeoffset < 0) + return -ENXIO; + + err = fdt_del_node(blob, nodeoffset); + if (err) + return -EINVAL; + + return 0; +} + +static int change_property(void *blob, const char *node, const char *property, + const void *value, int len) +{ + int nodeoffset; + int err; + + nodeoffset = fdt_path_offset(blob, node); + if (nodeoffset < 0) + return -ENXIO; + + err = fdt_setprop(blob, nodeoffset, property, value, len); + if (err) + return -EINVAL; + + return 0; +} + +static void update_fdt_gpu_industrial_frequencies(void *blob) +{ + u32 gpu_opp_table[6]; + u32 gpu_assigned_clocks[2]; + int err; + + gpu_opp_table[0] = cpu_to_fdt32(625000); /* Normal Core Clock */ + gpu_opp_table[1] = cpu_to_fdt32(0); + gpu_opp_table[2] = cpu_to_fdt32(625000); /* Normal Shader Clock */ + gpu_opp_table[3] = cpu_to_fdt32(0); + gpu_opp_table[4] = cpu_to_fdt32(400000); /* Low Shader and Core Clock */ + gpu_opp_table[5] = cpu_to_fdt32(0); + + gpu_assigned_clocks[0] = cpu_to_fdt32(625000000); /* Core Clock */ + gpu_assigned_clocks[1] = cpu_to_fdt32(625000000); /* Shader Clock */ + + err = change_property(blob, "/bus@53100000/gpu@53100000", + "assigned-clock-rates", gpu_assigned_clocks, + sizeof(gpu_assigned_clocks)); + if (err && err != ENXIO) + printf("Failed to set assigned-clock-rates for GPU0: %s\n", + fdt_strerror(err)); + + err = change_property(blob, "/bus@54100000/gpu@54100000", + "assigned-clock-rates", gpu_assigned_clocks, + sizeof(gpu_assigned_clocks)); + if (err && err != ENXIO) + printf("Failed to set assigned-clock-rates for GPU1: %s\n", + fdt_strerror(err)); + + err = change_property(blob, "/bus@54100000/imx8_gpu1_ss@80000000", + "operating-points", &gpu_opp_table, + sizeof(gpu_opp_table)); + if (err && err != ENXIO) + printf("Failed to set operating-points for GPU: %s\n", + fdt_strerror(err)); +} + +static void update_fdt_cpu_industrial_frequencies(void *blob) +{ + int err; + + err = delete_node(blob, "/opp-table-0/opp-1200000000"); + if (err && err != -ENXIO) + printf("Failed to delete 1.2 GHz node on A53: %s\n", + fdt_strerror(err)); + + err = delete_node(blob, "/opp-table-1/opp-1596000000"); + if (err && err != -ENXIO) + printf("Failed to delete 1.596 GHz node on A72: %s\n", + fdt_strerror(err)); +} + +static void update_fdt_frequencies(void *blob) +{ + struct cpu_info cpu; + struct udevice *dev; + int err; + + uclass_first_device(UCLASS_CPU, &dev); + + err = cpu_get_info(dev, &cpu); + if (err) { + printf("Failed to get CPU info\n"); + return; + } + + /* + * Differentiate between the automotive and industrial variants of the + * i.MX8. The difference of these two CPUs is the maximum frequencies + * for the CPU and GPU. + * Core Automotive [max. MHz] Industrial [max. MHz] + * A53 1200 1104 + * A72 1596 1296 + * GPU Core 800 625 + * GPU Shader 1000 625 + * + * While the SCFW enforces these limits for the CPU, the OS cpufreq + * driver remains unaware, causing a mismatch between reported and + * actual frequencies. This is resolved by removing the unsupprted + * frequencies from the device tree. + * + * The GPU frequencies are not enforced by the SCFW, therefore without + * updating the device tree we overclock the GPU. + * + * Using the cpu_freq variable is the only know way to differentiate + * between the automotive and industrial variants of the i.MX8. + */ + if (cpu.cpu_freq != 1104000000) + return; + + update_fdt_cpu_industrial_frequencies(blob); + update_fdt_gpu_industrial_frequencies(blob); +} + int ft_system_setup(void *blob, struct bd_info *bd) { int ret; @@ -294,6 +424,8 @@ int ft_system_setup(void *blob, struct bd_info *bd) update_fdt_with_owned_resources(blob); + update_fdt_frequencies(blob); + if (is_imx8qm()) { ret = config_smmu_fdt(blob); if (ret) -- 2.45.2 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v1 0/5] add support for Apalis iMX8 1300MHz version 2024-12-11 12:18 [PATCH v1 0/5] add support for Apalis iMX8 1300MHz version Stefan Eichenberger ` (4 preceding siblings ...) 2024-12-11 12:18 ` [PATCH v1 5/5] imx: mach: imx8: fdt: set correct frequencies for the industrial SoC Stefan Eichenberger @ 2024-12-11 17:39 ` Francesco Dolcini 2024-12-17 10:55 ` Fabio Estevam 6 siblings, 0 replies; 8+ messages in thread From: Francesco Dolcini @ 2024-12-11 17:39 UTC (permalink / raw) To: Stefan Eichenberger Cc: sbabic, festevam, uboot-imx, trini, francesco.dolcini, stefan.eichenberger, peng.fan, emanuele.ghidoli, joao.goncalves, vitor.soares, igor.opaniuk, u-boot On Wed, Dec 11, 2024 at 01:18:50PM +0100, Stefan Eichenberger wrote: > This patch series adds support for the Apalis iMX8, which utilizes the > industrial 1300MHz version of the iMX8 SoC. Additionally, it includes > minor cleanups that do not affect functionality. ... > arch/arm/mach-imx/imx8/fdt.c | 132 +++++++++++++++++ > board/toradex/apalis-imx8/apalis-imx8.c | 19 ++- > board/toradex/common/tdx-cfg-block.c | 183 ++++++++++++------------ > board/toradex/common/tdx-cfg-block.h | 5 + > 4 files changed, 239 insertions(+), 100 deletions(-) For the whole series, Reviewed-by: Francesco Dolcini <francesco.dolcini@toradex.com> ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v1 0/5] add support for Apalis iMX8 1300MHz version 2024-12-11 12:18 [PATCH v1 0/5] add support for Apalis iMX8 1300MHz version Stefan Eichenberger ` (5 preceding siblings ...) 2024-12-11 17:39 ` [PATCH v1 0/5] add support for Apalis iMX8 1300MHz version Francesco Dolcini @ 2024-12-17 10:55 ` Fabio Estevam 6 siblings, 0 replies; 8+ messages in thread From: Fabio Estevam @ 2024-12-17 10:55 UTC (permalink / raw) To: Stefan Eichenberger Cc: sbabic, uboot-imx, trini, francesco.dolcini, stefan.eichenberger, peng.fan, emanuele.ghidoli, joao.goncalves, vitor.soares, igor.opaniuk, u-boot On Wed, Dec 11, 2024 at 9:20 AM Stefan Eichenberger <eichest@gmail.com> wrote: > > This patch series adds support for the Apalis iMX8, which utilizes the > industrial 1300MHz version of the iMX8 SoC. Additionally, it includes > minor cleanups that do not affect functionality. > > First, the series adds support for the new Product IDs (PIDs) found in > the configuration block of the Apalis iMX8. The primary difference is > that this version uses the industrial SoC, which features lower CPU and > GPU frequencies compared to the automotive variant we used before. > > Second, the series extends support to this new SoC. During testing, we > observed that the cpufreq driver did not account for the reduced CPU > frequencies, despite enforcement by the System Controller Firmware > (SCFW). This mismatch led to discrepancies between the frequencies > reported by the cpufreq driver and those actually set. We have also > updated the GPU to operate at the correct frequencies, as the SCFW does > not enforce these limits. Previously, this caused the GPU to overclock > to an unsupported frequency, as documented in the datasheet "i.MX > 8QuadMax Industrial Applications Processors" (IMX8QMIEC). > > This patch series depends on the following patch and should be merged > only after it has been applied: > https://lore.kernel.org/u-boot/20241125174911.70723-1-ivitro@gmail.com/ > > Stefan Eichenberger (5): > toradex: tdx-cfg-block: set apalis imx8dxp to always disabled > toradex: tdx-cfg-block: increase indentation for longer defines > toradex: tdx-cfg-block: add new apalis imx8 pids > toradex: apalis-imx8: simplify module version handling > imx: mach: imx8: fdt: set correct frequencies for the industrial SoC Applied all, thanks. ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2024-12-17 10:56 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2024-12-11 12:18 [PATCH v1 0/5] add support for Apalis iMX8 1300MHz version Stefan Eichenberger 2024-12-11 12:18 ` [PATCH v1 1/5] toradex: tdx-cfg-block: set apalis imx8dxp to always disabled Stefan Eichenberger 2024-12-11 12:18 ` [PATCH v1 2/5] toradex: tdx-cfg-block: increase indentation for longer defines Stefan Eichenberger 2024-12-11 12:18 ` [PATCH v1 3/5] toradex: tdx-cfg-block: add new apalis imx8 pids Stefan Eichenberger 2024-12-11 12:18 ` [PATCH v1 4/5] toradex: apalis-imx8: simplify module version handling Stefan Eichenberger 2024-12-11 12:18 ` [PATCH v1 5/5] imx: mach: imx8: fdt: set correct frequencies for the industrial SoC Stefan Eichenberger 2024-12-11 17:39 ` [PATCH v1 0/5] add support for Apalis iMX8 1300MHz version Francesco Dolcini 2024-12-17 10:55 ` Fabio Estevam
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.