From 286cc11437a8484330b6ad2cfcdf38d976237f14 Mon Sep 17 00:00:00 2001 From: Gaurav Jain Date: Mon, 17 May 2021 09:39:31 +0530 Subject: [PATCH] LFU-126-12 i.MX8: Moved Power on JR resource to jobring driver. u-boot power domain driver API is used to power on JR. so that u-boot framework will automatically power off JR resource before booting into kernel. Signed-off-by: Gaurav Jain Signed-off-by: Ye Li --- arch/arm/mach-imx/imx8/cpu.c | 4 ---- board/freescale/imx8dxl_phantom_mek/spl.c | 6 ------ board/freescale/imx8qm_mek/spl.c | 6 ------ board/freescale/imx8qxp_mek/spl.c | 5 ----- drivers/crypto/fsl/jr.c | 25 +++++++++++++++++++++++ 5 files changed, 25 insertions(+), 21 deletions(-) diff --git a/arch/arm/mach-imx/imx8/cpu.c b/arch/arm/mach-imx/imx8/cpu.c index 2eba5ebafc..4697c6ea66 100644 --- a/arch/arm/mach-imx/imx8/cpu.c +++ b/arch/arm/mach-imx/imx8/cpu.c @@ -109,10 +109,6 @@ int arch_misc_init(void) struct udevice *dev; int node, ret; - /* Request seco for JR2 access.JR0, JR1 will be assigned to seco for imx8 */ - sc_pm_set_resource_power_mode(-1, SC_R_CAAM_JR2, SC_PM_PW_MODE_ON); - sc_pm_set_resource_power_mode(-1, SC_R_CAAM_JR2_OUT, SC_PM_PW_MODE_ON); - node = fdt_node_offset_by_compatible(gd->fdt_blob, -1, "fsl,sec-v4.0"); ret = uclass_get_device_by_of_offset(UCLASS_MISC, node, &dev); diff --git a/board/freescale/imx8dxl_phantom_mek/spl.c b/board/freescale/imx8dxl_phantom_mek/spl.c index c14a24c5ff..7b78452c09 100644 --- a/board/freescale/imx8dxl_phantom_mek/spl.c +++ b/board/freescale/imx8dxl_phantom_mek/spl.c @@ -16,7 +16,6 @@ #include #include #include -#include DECLARE_GLOBAL_DATA_PTR; @@ -33,12 +32,7 @@ void spl_board_init(void) } device_probe(dev); - /* Request seco for JR2 access.JR0, JR1 will be assigned to seco for imx8 */ - sc_pm_set_resource_power_mode(-1, SC_R_CAAM_JR2, SC_PM_PW_MODE_ON); - sc_pm_set_resource_power_mode(-1, SC_R_CAAM_JR2_OUT, SC_PM_PW_MODE_ON); - uclass_find_first_device(UCLASS_MISC, &dev); - for (; dev; uclass_find_next_device(&dev)) { if (device_probe(dev)) continue; diff --git a/board/freescale/imx8qm_mek/spl.c b/board/freescale/imx8qm_mek/spl.c index a2c7b87872..adfe51178e 100644 --- a/board/freescale/imx8qm_mek/spl.c +++ b/board/freescale/imx8qm_mek/spl.c @@ -17,7 +17,6 @@ #include #include #include -#include DECLARE_GLOBAL_DATA_PTR; @@ -34,12 +33,7 @@ void spl_board_init(void) } device_probe(dev); - /* Request seco for JR2 access.JR0, JR1 will be assigned to seco for imx8 */ - sc_pm_set_resource_power_mode(-1, SC_R_CAAM_JR2, SC_PM_PW_MODE_ON); - sc_pm_set_resource_power_mode(-1, SC_R_CAAM_JR2_OUT, SC_PM_PW_MODE_ON); - uclass_find_first_device(UCLASS_MISC, &dev); - for (; dev; uclass_find_next_device(&dev)) { if (device_probe(dev)) continue; diff --git a/board/freescale/imx8qxp_mek/spl.c b/board/freescale/imx8qxp_mek/spl.c index 8be64fe021..1fdc3fc6dd 100644 --- a/board/freescale/imx8qxp_mek/spl.c +++ b/board/freescale/imx8qxp_mek/spl.c @@ -49,12 +49,7 @@ void spl_board_init(void) } device_probe(dev); - /* Request seco for JR2 access.JR0, JR1 will be assigned to seco for imx8 */ - sc_pm_set_resource_power_mode(-1, SC_R_CAAM_JR2, SC_PM_PW_MODE_ON); - sc_pm_set_resource_power_mode(-1, SC_R_CAAM_JR2_OUT, SC_PM_PW_MODE_ON); - uclass_find_first_device(UCLASS_MISC, &dev); - for (; dev; uclass_find_next_device(&dev)) { if (device_probe(dev)) continue; diff --git a/drivers/crypto/fsl/jr.c b/drivers/crypto/fsl/jr.c index b02e347164..bdbc7d443b 100644 --- a/drivers/crypto/fsl/jr.c +++ b/drivers/crypto/fsl/jr.c @@ -25,6 +25,7 @@ #include #include #include +#include #define CIRC_CNT(head, tail, size) (((head) - (tail)) & (size - 1)) #define CIRC_SPACE(head, tail, size) CIRC_CNT((tail), (head) + 1, (size)) @@ -778,6 +779,25 @@ int sec_init(void) return sec_init_idx(0); } +#ifdef CONFIG_ARCH_IMX8 +static int jr_power_on(int subnode) +{ +#if CONFIG_IS_ENABLED(POWER_DOMAIN) + struct udevice __maybe_unused jr_dev; + struct power_domain pd; + + dev_set_ofnode(&jr_dev, offset_to_ofnode(subnode)); + + /* Need to power on Job Ring before access it */ + if (!power_domain_get(&jr_dev, &pd)) { + if (power_domain_on(&pd)) + return -EINVAL; + } +#endif + return 0; +} +#endif + #if CONFIG_IS_ENABLED(DM) static int caam_jr_probe(struct udevice *dev) { @@ -810,6 +830,11 @@ static int caam_jr_probe(struct udevice *dev) jr_node = jr_node >> 4; } caam->jrid = jr_node - 1; +#ifdef CONFIG_ARCH_IMX8 + ret = jr_power_on(subnode); + if (ret) + return ret; +#endif break; } } -- 2.17.1