-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
yaml --- r: 62674 b: refs/heads/master c: a14a26a h: refs/heads/master v: v3
- Loading branch information
Ben Dooks
authored and
Russell King
committed
Jul 22, 2007
1 parent
984ca80
commit d3c8ee0
Showing
3 changed files
with
167 additions
and
132 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,2 @@ | ||
--- | ||
refs/heads/master: 3ec20520ddfb654b1e60f51ff5e4769afde51b36 | ||
refs/heads/master: a14a26aca610bbd09fb62fb9fd5dbf6b41321972 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,155 @@ | ||
/* linux/include/asm-arm/plat-s3c/uncompress.h | ||
* | ||
* Copyright 2003, 2007 Simtec Electronics | ||
* http://armlinux.simtec.co.uk/ | ||
* Ben Dooks <ben@simtec.co.uk> | ||
* | ||
* S3C - uncompress code | ||
* | ||
* This program is free software; you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License version 2 as | ||
* published by the Free Software Foundation. | ||
*/ | ||
|
||
#ifndef __ASM_PLAT_UNCOMPRESS_H | ||
#define __ASM_PLAT_UNCOMPRESS_H | ||
|
||
typedef unsigned int upf_t; /* cannot include linux/serial_core.h */ | ||
|
||
/* uart setup */ | ||
|
||
static unsigned int fifo_mask; | ||
static unsigned int fifo_max; | ||
|
||
/* forward declerations */ | ||
|
||
static void arch_detect_cpu(void); | ||
|
||
/* defines for UART registers */ | ||
|
||
#include "asm/plat-s3c/regs-serial.h" | ||
#include "asm/plat-s3c/regs-watchdog.h" | ||
|
||
/* working in physical space... */ | ||
#undef S3C2410_WDOGREG | ||
#define S3C2410_WDOGREG(x) ((S3C24XX_PA_WATCHDOG + (x))) | ||
|
||
/* how many bytes we allow into the FIFO at a time in FIFO mode */ | ||
#define FIFO_MAX (14) | ||
|
||
#define uart_base S3C24XX_PA_UART + (0x4000*CONFIG_S3C_LOWLEVEL_UART_PORT) | ||
|
||
static __inline__ void | ||
uart_wr(unsigned int reg, unsigned int val) | ||
{ | ||
volatile unsigned int *ptr; | ||
|
||
ptr = (volatile unsigned int *)(reg + uart_base); | ||
*ptr = val; | ||
} | ||
|
||
static __inline__ unsigned int | ||
uart_rd(unsigned int reg) | ||
{ | ||
volatile unsigned int *ptr; | ||
|
||
ptr = (volatile unsigned int *)(reg + uart_base); | ||
return *ptr; | ||
} | ||
|
||
/* we can deal with the case the UARTs are being run | ||
* in FIFO mode, so that we don't hold up our execution | ||
* waiting for tx to happen... | ||
*/ | ||
|
||
static void putc(int ch) | ||
{ | ||
if (uart_rd(S3C2410_UFCON) & S3C2410_UFCON_FIFOMODE) { | ||
int level; | ||
|
||
while (1) { | ||
level = uart_rd(S3C2410_UFSTAT); | ||
level &= fifo_mask; | ||
|
||
if (level < fifo_max) | ||
break; | ||
} | ||
|
||
} else { | ||
/* not using fifos */ | ||
|
||
while ((uart_rd(S3C2410_UTRSTAT) & S3C2410_UTRSTAT_TXE) != S3C2410_UTRSTAT_TXE) | ||
barrier(); | ||
} | ||
|
||
/* write byte to transmission register */ | ||
uart_wr(S3C2410_UTXH, ch); | ||
} | ||
|
||
static inline void flush(void) | ||
{ | ||
} | ||
|
||
#define __raw_writel(d,ad) do { *((volatile unsigned int *)(ad)) = (d); } while(0) | ||
|
||
/* CONFIG_S3C2410_BOOT_WATCHDOG | ||
* | ||
* Simple boot-time watchdog setup, to reboot the system if there is | ||
* any problem with the boot process | ||
*/ | ||
|
||
#ifdef CONFIG_S3C2410_BOOT_WATCHDOG | ||
|
||
#define WDOG_COUNT (0xff00) | ||
|
||
static inline void arch_decomp_wdog(void) | ||
{ | ||
__raw_writel(WDOG_COUNT, S3C2410_WTCNT); | ||
} | ||
|
||
static void arch_decomp_wdog_start(void) | ||
{ | ||
__raw_writel(WDOG_COUNT, S3C2410_WTDAT); | ||
__raw_writel(WDOG_COUNT, S3C2410_WTCNT); | ||
__raw_writel(S3C2410_WTCON_ENABLE | S3C2410_WTCON_DIV128 | S3C2410_WTCON_RSTEN | S3C2410_WTCON_PRESCALE(0x80), S3C2410_WTCON); | ||
} | ||
|
||
#else | ||
#define arch_decomp_wdog_start() | ||
#define arch_decomp_wdog() | ||
#endif | ||
|
||
#ifdef CONFIG_S3C2410_BOOT_ERROR_RESET | ||
|
||
static void arch_decomp_error(const char *x) | ||
{ | ||
putstr("\n\n"); | ||
putstr(x); | ||
putstr("\n\n -- System resetting\n"); | ||
|
||
__raw_writel(0x4000, S3C2410_WTDAT); | ||
__raw_writel(0x4000, S3C2410_WTCNT); | ||
__raw_writel(S3C2410_WTCON_ENABLE | S3C2410_WTCON_DIV128 | S3C2410_WTCON_RSTEN | S3C2410_WTCON_PRESCALE(0x40), S3C2410_WTCON); | ||
|
||
while(1); | ||
} | ||
|
||
#define arch_error arch_decomp_error | ||
#endif | ||
|
||
static void error(char *err); | ||
|
||
static void | ||
arch_decomp_setup(void) | ||
{ | ||
/* we may need to setup the uart(s) here if we are not running | ||
* on an BAST... the BAST will have left the uarts configured | ||
* after calling linux. | ||
*/ | ||
|
||
arch_detect_cpu(); | ||
arch_decomp_wdog_start(); | ||
} | ||
|
||
|
||
#endif /* __ASM_PLAT_UNCOMPRESS_H */ |