[U-Boot,v2] rockchip: rk3188: enable remap function
diff mbox

Message ID 20170405221936.6316-1-heiko@sntech.de
State Accepted
Commit 008a610b4cb1a3e55369c6c1f1060c892a81422c
Delegated to: Simon Glass
Headers show

Commit Message

Heiko Stuebner April 5, 2017, 10:19 p.m. UTC
Most Rockchip socs have the ability to either map the bootrom or a sram
area to the starting address of the cpu by flipping a bit in the GRF.

Newer socs leave this untouched and mapped to the bootrom but the legacy
loaders on rk3188 and before enabled the remap functionality and the
current smp implementation in the Linux kernel also requires it to be
enabled, to bring up secondary cpus.

So to keep smp working in the kernel, mimic the behaviour of the legacy
bootloaders and enable the remap functionality.

Signed-off-by: Heiko Stuebner <heiko@sntech.de>
---
changes in v2:
- drop the rk_board_late_init weak function
  If boards need even more specialized init we can worry
  about that later.

 arch/arm/mach-rockchip/Kconfig        |  1 +
 arch/arm/mach-rockchip/rk3188-board.c | 18 ++++++++++++++++++
 2 files changed, 19 insertions(+)

Comments

Simon Glass April 9, 2017, 7:27 p.m. UTC | #1
On 5 April 2017 at 16:19, Heiko Stuebner <heiko@sntech.de> wrote:
> Most Rockchip socs have the ability to either map the bootrom or a sram
> area to the starting address of the cpu by flipping a bit in the GRF.
>
> Newer socs leave this untouched and mapped to the bootrom but the legacy
> loaders on rk3188 and before enabled the remap functionality and the
> current smp implementation in the Linux kernel also requires it to be
> enabled, to bring up secondary cpus.
>
> So to keep smp working in the kernel, mimic the behaviour of the legacy
> bootloaders and enable the remap functionality.
>
> Signed-off-by: Heiko Stuebner <heiko@sntech.de>
> ---
> changes in v2:
> - drop the rk_board_late_init weak function
>   If boards need even more specialized init we can worry
>   about that later.
>
>  arch/arm/mach-rockchip/Kconfig        |  1 +
>  arch/arm/mach-rockchip/rk3188-board.c | 18 ++++++++++++++++++
>  2 files changed, 19 insertions(+)

Acked-by: Simon Glass <sjg@chromium.org>
Simon Glass April 14, 2017, 10:15 a.m. UTC | #2
On 9 April 2017 at 13:27, Simon Glass <sjg@chromium.org> wrote:
> On 5 April 2017 at 16:19, Heiko Stuebner <heiko@sntech.de> wrote:
>> Most Rockchip socs have the ability to either map the bootrom or a sram
>> area to the starting address of the cpu by flipping a bit in the GRF.
>>
>> Newer socs leave this untouched and mapped to the bootrom but the legacy
>> loaders on rk3188 and before enabled the remap functionality and the
>> current smp implementation in the Linux kernel also requires it to be
>> enabled, to bring up secondary cpus.
>>
>> So to keep smp working in the kernel, mimic the behaviour of the legacy
>> bootloaders and enable the remap functionality.
>>
>> Signed-off-by: Heiko Stuebner <heiko@sntech.de>
>> ---
>> changes in v2:
>> - drop the rk_board_late_init weak function
>>   If boards need even more specialized init we can worry
>>   about that later.
>>
>>  arch/arm/mach-rockchip/Kconfig        |  1 +
>>  arch/arm/mach-rockchip/rk3188-board.c | 18 ++++++++++++++++++
>>  2 files changed, 19 insertions(+)
>
> Acked-by: Simon Glass <sjg@chromium.org>

Applied to u-boot-rockchip, thanks!

Patch
diff mbox

diff --git a/arch/arm/mach-rockchip/Kconfig b/arch/arm/mach-rockchip/Kconfig
index af0796d1d0..5b4caec953 100644
--- a/arch/arm/mach-rockchip/Kconfig
+++ b/arch/arm/mach-rockchip/Kconfig
@@ -18,6 +18,7 @@  config ROCKCHIP_RK3188
 	select SUPPORT_TPL
 	select SPL
 	select TPL
+	select BOARD_LATE_INIT
 	select ROCKCHIP_BROM_HELPER
 	help
 	  The Rockchip RK3188 is a ARM-based SoC with a quad-core Cortex-A9
diff --git a/arch/arm/mach-rockchip/rk3188-board.c b/arch/arm/mach-rockchip/rk3188-board.c
index c370156e4c..4be711e441 100644
--- a/arch/arm/mach-rockchip/rk3188-board.c
+++ b/arch/arm/mach-rockchip/rk3188-board.c
@@ -11,6 +11,7 @@ 
 #include <syscon.h>
 #include <asm/io.h>
 #include <asm/arch/clock.h>
+#include <asm/arch/grf_rk3188.h>
 #include <asm/arch/periph.h>
 #include <asm/arch/pmu_rk3288.h>
 #include <asm/arch/boot_mode.h>
@@ -19,6 +20,23 @@ 
 
 DECLARE_GLOBAL_DATA_PTR;
 
+int board_late_init(void)
+{
+	struct rk3188_grf *grf;
+
+	grf = syscon_get_first_range(ROCKCHIP_SYSCON_GRF);
+	if (IS_ERR(grf)) {
+		error("grf syscon returned %ld\n", PTR_ERR(grf));
+	} else {
+		/* enable noc remap to mimic legacy loaders */
+		rk_clrsetreg(&grf->soc_con0,
+			NOC_REMAP_MASK << NOC_REMAP_SHIFT,
+			NOC_REMAP_MASK << NOC_REMAP_SHIFT);
+	}
+
+	return 0;
+}
+
 int board_init(void)
 {
 #if defined(CONFIG_ROCKCHIP_SPL_BACK_TO_BROM)