"Mark A. Greer" <[email protected]> writes: > From: Mark A. Greer <[email protected]> > > The davinci pre-kernel boot code assumes that all platforms use > the same UART base address for the console. That assumption > is not longer valid with some newer SoCs so determine the console > UART base address from the machine number passed in from u-boot. > > Signed-off-by: Mark A. Greer <[email protected]> > --- > Many thanks to Kevin who essentially wrote this for me.
Signed-off-by: Kevin Hilman <[email protected]> Mark, any objections to me pulling this one into DaVinci git now? Or did you have some other changes you wanted here? Kevin > arch/arm/boot/compressed/Makefile | 4 +++ > arch/arm/boot/compressed/head-davinci.S | 19 ++++++++++++++++++ > arch/arm/mach-davinci/include/mach/uncompress.h | 24 +++++++++++++++++++++- > 3 files changed, 45 insertions(+), 2 deletions(-) > create mode 100644 arch/arm/boot/compressed/head-davinci.S > > diff --git a/arch/arm/boot/compressed/Makefile > b/arch/arm/boot/compressed/Makefile > index b0d7771..dc73717 100644 > --- a/arch/arm/boot/compressed/Makefile > +++ b/arch/arm/boot/compressed/Makefile > @@ -48,6 +48,10 @@ else > endif > endif > > +ifeq ($(CONFIG_MACH_DAVINCI_EVM),y) > +OBJS += head-davinci.o > +endif > + > # > # We now have a PIC decompressor implementation. Decompressors running > # from RAM should not define ZTEXTADDR. Decompressors running directly > diff --git a/arch/arm/boot/compressed/head-davinci.S > b/arch/arm/boot/compressed/head-davinci.S > new file mode 100644 > index 0000000..4a269e9 > --- /dev/null > +++ b/arch/arm/boot/compressed/head-davinci.S > @@ -0,0 +1,19 @@ > +/* > + * DaVinci (and relatives) specific tweaks. > + * This is merged into head.S by the linker. > + */ > + > +#include <linux/linkage.h> > +#include <asm/mach-types.h> > + > + .section ".start", "ax" > + > +__davinci_start: > + /* Save machine number for later conditional code */ > + adr r0, davinci_machine_no > + str r7, [r0] > + > + .text > + .globl davinci_machine_no > +davinci_machine_no: > + .word 0x00000000 > diff --git a/arch/arm/mach-davinci/include/mach/uncompress.h > b/arch/arm/mach-davinci/include/mach/uncompress.h > index 8c165de..28198f9 100644 > --- a/arch/arm/mach-davinci/include/mach/uncompress.h > +++ b/arch/arm/mach-davinci/include/mach/uncompress.h > @@ -13,11 +13,27 @@ > #include <linux/serial_reg.h> > #include <mach/serial.h> > > +#include <asm/mach-types.h> > + > +extern u32 davinci_machine_no; > + > +static u8 first_time = 1; > +static u32 *uart; > + > +static u32 *get_uart_base(void) > +{ > + /* Add logic here for new platforms */ > + return (u32 *)DAVINCI_UART0_BASE; > +} > + > /* PORT_16C550A, in polled non-fifo mode */ > > static void putc(char c) > { > - volatile u32 *uart = (volatile void *) DAVINCI_UART0_BASE; > + if (first_time) { > + uart = get_uart_base(); > + first_time = 0; > + } > > while (!(uart[UART_LSR] & UART_LSR_THRE)) > barrier(); > @@ -26,7 +42,11 @@ static void putc(char c) > > static inline void flush(void) > { > - volatile u32 *uart = (volatile void *) DAVINCI_UART0_BASE; > + if (first_time) { > + uart = get_uart_base(); > + first_time = 0; > + } > + > while (!(uart[UART_LSR] & UART_LSR_THRE)) > barrier(); > } > -- > 1.6.0.3 > > > _______________________________________________ > Davinci-linux-open-source mailing list > [email protected] > http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source _______________________________________________ Davinci-linux-open-source mailing list [email protected] http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source
