arm: sleep: Get the entry point of kernel from SPARE4 register
PATCH 1/1 arm: sleep: Get the entry point of kernel from SPARE4 register
For LS1021A Secure Boot, SPARE2 register is used and modified by the IBR. To avoid the conflict, SPARE4 is used instead of SPARE2 to store the entry point of kernel. This patch is to get the entry point of kernel from SPARE4 instead of SPARE2.
--- board/freescale/common/arm_sleep.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
board/freescale/common/arm_sleep.c +1 -1
@@ -88,7 +88,7 @@ int fsl_dp_resume(void)dp_resume_prepare ();/* Get the entry address and jump to kernel */ - start_addr =in_le32 (&scfg->sparecr[1 ]); + start_addr =in_le32 (&scfg->sparecr[3 ]);debug ("Entry address is 0x%08x\n" , start_addr); kernel_resume = (void (*)(void ))start_addr;secure_ram_addr (_do_nonsec_entry)(kernel_resume,0 ,0 ,0 );
Signature · 1 line
2.1.0.27.g96db324
PATCH 1/1 arm: sleep: Get the entry point of kernel from SPARE4 register
Quoted 16 lines · Alison Wang
For LS1021A Secure Boot, SPARE2 register is used and modified by the IBR. To avoid the conflict, SPARE4 is used instead of SPARE2 to store the entry point of kernel. This patch is to get the entry point of kernel from SPARE4 instead of SPARE2.
Signed-off-by Alison Wang <[email protected]>--- board/freescale/common/arm_sleep.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)board/freescale/common/arm_sleep.c +0
-0
board/freescale/common/arm_sleep.c int fsl_dp_resume(void) · line 94
Quoted 8 lines
board/freescale/common/arm_sleep.c +1
-1@@ -88,7 +88,7 @@ int fsl_dp_resume(void)dp_resume_prepare ();/* Get the entry address and jump to kernel */ - start_addr =in_le32 (&scfg->sparecr[1 ]); + start_addr =in_le32 (&scfg->sparecr[3 ]);debug ("Entry address is 0x%08x\n" , start_addr); kernel_resume = (void (*)(void ))start_addr;secure_ram_addr (_do_nonsec_entry)(kernel_resume,0 ,0 ,0 );
Alison,
Does this change need to be in sync with Kernel change?
York
PATCH 1/1 arm: sleep: Get the entry point of kernel from SPARE4 register
In reply to Alison WangQuoted 16 lines · Alison Wang
For LS1021A Secure Boot, SPARE2 register is used and modified by the IBR. To avoid the conflict, SPARE4 is used instead of SPARE2 to store the entry point of kernel. This patch is to get the entry point of kernel from SPARE4 instead of SPARE2.
Signed-off-by Alison Wang <[email protected]>--- board/freescale/common/arm_sleep.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)board/freescale/common/arm_sleep.c +0
-0
board/freescale/common/arm_sleep.c int fsl_dp_resume(void) · line 94
Quoted 8 lines
board/freescale/common/arm_sleep.c +1
-1@@ -88,7 +88,7 @@ int fsl_dp_resume(void)dp_resume_prepare ();/* Get the entry address and jump to kernel */ - start_addr =in_le32 (&scfg->sparecr[1 ]); + start_addr =in_le32 (&scfg->sparecr[3 ]);debug ("Entry address is 0x%08x\n" , start_addr); kernel_resume = (void (*)(void ))start_addr;secure_ram_addr (_do_nonsec_entry)(kernel_resume,0 ,0 ,0 );
Where does this get written?
-Scott
PATCH 1/1 arm: sleep: Get the entry point of kernel from SPARE4 register
Hi, York and Scott,
Quoted 28 lines · Alison Wang
Quoted 17 lines
For LS1021A Secure Boot, SPARE2 register is used and modified by the IBR. To avoid the conflict, SPARE4 is used instead of SPARE2 to store the entry point of kernel. This patch is to get the entry point of kernel from SPARE4 instead of SPARE2.
Signed-off-by Alison Wang <[email protected]>--- board/freescale/common/arm_sleep.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)board/freescale/common/arm_sleep.c +0
-0board/freescale/common/arm_sleep.c int fsl_dp_resume(void) · line 94
Quoted 8 lines
board/freescale/common/arm_sleep.c +1
-1@@ -88,7 +88,7 @@ int fsl_dp_resume(void)dp_resume_prepare ();/* Get the entry address and jump to kernel */ - start_addr =in_le32 (&scfg->sparecr[1 ]); + start_addr =in_le32 (&scfg->sparecr[3 ]);debug ("Entry address is 0x%08x\n" , start_addr); kernel_resume = (void (*)(void ))start_addr;secure_ram_addr (_do_nonsec_entry)(kernel_resume,0 ,0 ,0 );Alison,
Quoted 7 lines
Does this change need to be in sync with Kernel change?
York
Where does this get written?
-Scott
[Alison Wang] Thanks for your replies. Your concerns are right. SPARE4 register needs to be written in kernel.
This is an issue about deep sleep in LS1021A Secure Boot. It is found in SDK2.0. The corresponding patch for kernel is sent in SDK2.0.
Well, deep sleep uses an old way in SDK2.0. For upstream, deep sleep patches haven't been sent out as it will use PSCI and there are some issues about PSCI. So the corresponding patch for kernel can't be sent out now.
Best Regards,
Alison Wang
PATCH 1/1 arm: sleep: Get the entry point of kernel from SPARE4 register
Quoted 40 lines · Huan Wang
Hi, York and Scott,
Quoted 28 lines · Alison Wang
Quoted 17 lines
For LS1021A Secure Boot, SPARE2 register is used and modified by the IBR. To avoid the conflict, SPARE4 is used instead of SPARE2 to store the entry point of kernel. This patch is to get the entry point of kernel from SPARE4 instead of SPARE2.
Signed-off-by Alison Wang <[email protected]>--- board/freescale/common/arm_sleep.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)board/freescale/common/arm_sleep.c +0
-0board/freescale/common/arm_sleep.c int fsl_dp_resume(void) · line 94
Quoted 8 lines
board/freescale/common/arm_sleep.c +1
-1@@ -88,7 +88,7 @@ int fsl_dp_resume(void)dp_resume_prepare ();/* Get the entry address and jump to kernel */ - start_addr =in_le32 (&scfg->sparecr[1 ]); + start_addr =in_le32 (&scfg->sparecr[3 ]);debug ("Entry address is 0x%08x\n" , start_addr); kernel_resume = (void (*)(void ))start_addr;secure_ram_addr (_do_nonsec_entry)(kernel_resume,0 ,0 ,0 );Alison,
Quoted 7 lines
Does this change need to be in sync with Kernel change?
York
Where does this get written?
-Scott
[Alison Wang] Thanks for your replies. Your concerns are right. SPARE4 register needs to be written in kernel.
Quoted 7 lines
This is an issue about deep sleep in LS1021A Secure Boot. It is found in SDK2.0. The corresponding patch for kernel is sent in SDK2.0.
Well, deep sleep uses an old way in SDK2.0. For upstream, deep sleep patches haven't been sent out as it will use PSCI and there are some issues about PSCI. So the corresponding patch for kernel can't be sent out now.
It's not about when the patch is sent. It's about managing compatibility. There needs to be some way to communicate what the expectations are between Linux and U-Boot, or to limit the change to chips where this feature has never worked before. We can't introduce regressions when the kernel is updated but not U-Boot, and regressions when U-Boot is updated but not the kernel are almost as bad.
-Scott
PATCH 1/1 arm: sleep: Get the entry point of kernel from SPARE4 register
Hi, Scott,
Quoted 49 lines · Huan Wang
Quoted 40 lines
Hi, York and Scott,
Quoted 28 lines · Alison Wang
Quoted 17 lines
For LS1021A Secure Boot, SPARE2 register is used and modified by the IBR. To avoid the conflict, SPARE4 is used instead of SPARE2 to store the entry point of kernel. This patch is to get the entry point of kernel from SPARE4 instead of SPARE2.
Signed-off-by Alison Wang <[email protected]>--- board/freescale/common/arm_sleep.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)board/freescale/common/arm_sleep.c +0
-0board/freescale/common/arm_sleep.c int fsl_dp_resume(void) · line 94
Quoted 8 lines
board/freescale/common/arm_sleep.c +1
-1@@ -88,7 +88,7 @@ int fsl_dp_resume(void)dp_resume_prepare ();/* Get the entry address and jump to kernel */ - start_addr =in_le32 (&scfg->sparecr[1 ]); + start_addr =in_le32 (&scfg->sparecr[3 ]);debug ("Entry address is 0x%08x\n" , start_addr); kernel_resume = (void (*)(void ))start_addr;secure_ram_addr (_do_nonsec_entry)(kernel_resume,0 ,0 ,0 );Alison,
Quoted 7 lines
Does this change need to be in sync with Kernel change?
York
Where does this get written?
-Scott
[Alison Wang] Thanks for your replies. Your concerns are right. SPARE4 register needs to be written in kernel.
Quoted 7 lines
This is an issue about deep sleep in LS1021A Secure Boot. It is found in SDK2.0. The corresponding patch for kernel is sent in SDK2.0.
Well, deep sleep uses an old way in SDK2.0. For upstream, deep sleep patches haven't been sent out as it will use PSCI and there are some issues about PSCI. So the corresponding patch for kernel can't be sent out now.
Quoted 8 lines
It's not about when the patch is sent. It's about managing compatibility. There needs to be some way to communicate what the expectations are between Linux and U-Boot, or to limit the change to chips where this feature has never worked before. We can't introduce regressions when the kernel is updated but not U-Boot, and regressions when U-Boot is updated but not the kernel are almost as bad.
-Scott
[Alison Wang] Thanks for your advice. What you said is right. I will give up this patch in upstream now. Later, when the deep sleep patches for kernel is ready, I will fix the issue in U-Boot and kernel simultaneously. So there isn't any problem about the compatibility between U-Boot and kernel.
Best Regards,
Alison Wang
PATCH 1/1 arm: sleep: Get the entry point of kernel from SPARE4 register
Quoted 58 lines · Huan Wang
Hi, Scott,
Quoted 56 lines · Huan Wang
Quoted 40 lines
Hi, York and Scott,
Quoted 28 lines · Alison Wang
Quoted 17 lines
For LS1021A Secure Boot, SPARE2 register is used and modified by the IBR. To avoid the conflict, SPARE4 is used instead of SPARE2 to store the entry point of kernel. This patch is to get the entry point of kernel from SPARE4 instead of SPARE2.
Signed-off-by Alison Wang <[email protected]>--- board/freescale/common/arm_sleep.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)board/freescale/common/arm_sleep.c +0
-0board/freescale/common/arm_sleep.c int fsl_dp_resume(void) · line 94
Quoted 8 lines
board/freescale/common/arm_sleep.c +1
-1@@ -88,7 +88,7 @@ int fsl_dp_resume(void)dp_resume_prepare ();/* Get the entry address and jump to kernel */ - start_addr =in_le32 (&scfg->sparecr[1 ]); + start_addr =in_le32 (&scfg->sparecr[3 ]);debug ("Entry address is 0x%08x\n" , start_addr); kernel_resume = (void (*)(void ))start_addr;secure_ram_addr (_do_nonsec_entry)(kernel_resume,0 ,0 ,0 );Alison,
Quoted 7 lines
Does this change need to be in sync with Kernel change?
York
Where does this get written?
-Scott
[Alison Wang] Thanks for your replies. Your concerns are right. SPARE4 register needs to be written in kernel.
Quoted 7 lines
This is an issue about deep sleep in LS1021A Secure Boot. It is found in SDK2.0. The corresponding patch for kernel is sent in SDK2.0.
Well, deep sleep uses an old way in SDK2.0. For upstream, deep sleep patches haven't been sent out as it will use PSCI and there are some issues about PSCI. So the corresponding patch for kernel can't be sent out now.
It's not about when the patch is sent. It's about managing compatibility. There needs to be some way to communicate what the expectations are between Linux and U-Boot, or to limit the change to chips where this feature has never worked before. We can't introduce regressions when the kernel is updated but not U-Boot, and regressions when U-Boot is updated but not the kernel are almost as bad.
Quoted 5 lines
Quoted 1 line
-Scott
[Alison Wang] Thanks for your advice. What you said is right. I will give up this patch in upstream now. Later, when the deep sleep patches for kernel is ready, I will fix the issue in U-Boot and kernel simultaneously. So there isn't any problem about the compatibility between U-Boot and kernel.
Please reread what I wrote. Fixing them simultaneously doesn't solve the problem because there's no guarantee that users update simultaneously. For a particularly bad example, consider someone bisecting the kernel. It would be terrible to require that the boot firmware be reflashed every time the kernel crosses this boundary.
-Scott