From 75e7972ebf7fdb611b4d6f66847c70e804c042ee Mon Sep 17 00:00:00 2001 From: schulz Date: Sun, 22 Mar 2015 13:29:41 +0000 Subject: [PATCH] Support dynamic ARM_PERIIOBASE as requred by rpi2 git-svn-id: https://svn.aros.org/svn/aros/trunk/AROS@50227 fb15a70f-31f2-0310-bbcc-cdcc74a49acc --- arch/arm-raspi/kernel/intr.c | 6 +++++- arch/arm-raspi/kernel/kernel_cpu.c | 6 +++++- arch/arm-raspi/kernel/kernel_debug.c | 4 ++++ arch/arm-raspi/kernel/kernel_startup.c | 26 ++++++++++++++++++++++++-- arch/arm-raspi/kernel/kernel_systimer.c | 6 +++++- arch/arm-raspi/kernel/maygetchar.c | 7 ++++++- arch/arm-raspi/kernel/platform_init.c | 6 +++++- 7 files changed, 54 insertions(+), 7 deletions(-) diff --git a/arch/arm-raspi/kernel/intr.c b/arch/arm-raspi/kernel/intr.c index 2965254189..ac63302b15 100644 --- a/arch/arm-raspi/kernel/intr.c +++ b/arch/arm-raspi/kernel/intr.c @@ -1,5 +1,5 @@ /* - Copyright © 2013, The AROS Development Team. All rights reserved. + Copyright � 2013, The AROS Development Team. All rights reserved. $Id$ */ @@ -19,6 +19,10 @@ #include "kernel_interrupts.h" #include "kernel_intr.h" +#undef ARM_PERIIOBASE +extern uint32_t __arm_periiobase; +#define ARM_PERIIOBASE (__arm_periiobase) + #define BOOT_STACK_SIZE (256 << 2) #define BOOT_TAGS_SIZE (128 << 3) diff --git a/arch/arm-raspi/kernel/kernel_cpu.c b/arch/arm-raspi/kernel/kernel_cpu.c index 3b91cefe17..277b9d9a37 100644 --- a/arch/arm-raspi/kernel/kernel_cpu.c +++ b/arch/arm-raspi/kernel/kernel_cpu.c @@ -1,5 +1,5 @@ /* - Copyright © 1995-2014, The AROS Development Team. All rights reserved. + Copyright � 1995-2014, The AROS Development Team. All rights reserved. $Id$ */ @@ -28,6 +28,10 @@ #define D(x) #define DREGS(x) +#undef ARM_PERIIOBASE +extern uint32_t __arm_periiobase; +#define ARM_PERIIOBASE (__arm_periiobase) + extern struct Task *sysIdleTask; void cpu_Switch(regs_t *regs) diff --git a/arch/arm-raspi/kernel/kernel_debug.c b/arch/arm-raspi/kernel/kernel_debug.c index f7a8193b62..4d9b5411a7 100644 --- a/arch/arm-raspi/kernel/kernel_debug.c +++ b/arch/arm-raspi/kernel/kernel_debug.c @@ -12,6 +12,10 @@ #include #include +#undef ARM_PERIIOBASE +extern uint32_t __arm_periiobase; +#define ARM_PERIIOBASE (__arm_periiobase) + void (*_KrnPutC)(char) = NULL; inline void krnWaitSerOut() diff --git a/arch/arm-raspi/kernel/kernel_startup.c b/arch/arm-raspi/kernel/kernel_startup.c index 469b0af6e3..6527600009 100644 --- a/arch/arm-raspi/kernel/kernel_startup.c +++ b/arch/arm-raspi/kernel/kernel_startup.c @@ -1,5 +1,5 @@ /* - Copyright © 2013, The AROS Development Team. All rights reserved. + Copyright � 2013, The AROS Development Team. All rights reserved. $Id$ */ @@ -27,6 +27,9 @@ #include "kernel_fb.h" #include "kernel_romtags.h" +#undef ARM_PERIIOBASE +#define ARM_PERIIOBASE (__arm_periiobase) + extern void krnCreateMemHeader(CONST_STRPTR name, BYTE pri, APTR start, IPTR size, ULONG flags); void __attribute__((used)) kernel_cstart(struct TagItem *msg); @@ -107,6 +110,8 @@ static void __attribute__((used)) __clear_bss(struct TagItem *msg) } } +uint32_t __arm_periiobase = 0; + void __attribute__((used)) kernel_cstart(struct TagItem *msg) { UWORD *ranges[3]; @@ -117,11 +122,28 @@ void __attribute__((used)) kernel_cstart(struct TagItem *msg) unsigned int delay; BootMsg = msg; register unsigned int fpuflags; + uint32_t tmp; + + /* Guess the cpu type and adjust __arm_periiobase accordingly */ + asm volatile ("mrc p15, 0, %0, c0, c0, 0" : "=r" (tmp)); + if ((tmp & 0xfff0) == 0xc070) /* armv7, also RaspberryPi 2 */ + { + __arm_periiobase = BCM2836_PERIPHYSBASE; + + /* Power LED back on */ + *(volatile unsigned int *)GPSET1 = (1 << (35-32)); // Power LED ON + } + else + { + __arm_periiobase = BCM2835_PERIPHYSBASE; + /* Need to detect the plus board here in order to control LEDs properly */ + + *(volatile unsigned int *)GPCLR0 = (1 << 16); // Activity LED ON + } /* NB: the bootstrap has conveniently setup the framebuffer and initialised the serial port and led for us */ - *(volatile unsigned int *)GPCLR0 = (1 << 16); // LED ON core_SetupMMU(); diff --git a/arch/arm-raspi/kernel/kernel_systimer.c b/arch/arm-raspi/kernel/kernel_systimer.c index b3ad130ead..fe5694a3d2 100644 --- a/arch/arm-raspi/kernel/kernel_systimer.c +++ b/arch/arm-raspi/kernel/kernel_systimer.c @@ -1,5 +1,5 @@ /* - Copyright © 2013, The AROS Development Team. All rights reserved. + Copyright � 2013, The AROS Development Team. All rights reserved. $Id$ */ @@ -17,6 +17,10 @@ #include "kernel_intern.h" +#undef ARM_PERIIOBASE +extern uint32_t __arm_periiobase; +#define ARM_PERIIOBASE (__arm_periiobase) + /* We use own implementation of bug(), so we don't need aros/debug.h */ #define DIRQ(x) #define D(x) diff --git a/arch/arm-raspi/kernel/maygetchar.c b/arch/arm-raspi/kernel/maygetchar.c index 79d8c80969..aeb598c5a7 100644 --- a/arch/arm-raspi/kernel/maygetchar.c +++ b/arch/arm-raspi/kernel/maygetchar.c @@ -1,5 +1,5 @@ /* - Copyright © 2013-2015, The AROS Development Team. All rights reserved. + Copyright � 2013-2015, The AROS Development Team. All rights reserved. $Id$ */ @@ -12,6 +12,11 @@ #include #include +#include + +#undef ARM_PERIIOBASE +extern uint32_t __arm_periiobase; +#define ARM_PERIIOBASE (__arm_periiobase) /* See rom/kernel/maygetchar.c for documentation */ diff --git a/arch/arm-raspi/kernel/platform_init.c b/arch/arm-raspi/kernel/platform_init.c index 80e8deca7d..d4a43a08a3 100644 --- a/arch/arm-raspi/kernel/platform_init.c +++ b/arch/arm-raspi/kernel/platform_init.c @@ -1,5 +1,5 @@ /* - Copyright © 2013, The AROS Development Team. All rights reserved. + Copyright � 2013, The AROS Development Team. All rights reserved. $Id$ */ @@ -24,6 +24,10 @@ #include "kernel_arch.h" #include "kernel_romtags.h" +#undef ARM_PERIIOBASE +extern uint32_t __arm_periiobase; +#define ARM_PERIIOBASE (__arm_periiobase) + void *(*__AllocMem)(); #define ExecAllocMem(bytesize, requirements) \ -- 2.11.4.GIT