ARM: s5p64x0: Use common uncompress.h part for plat-samsung
Subsystems (3)
PATCH 1/1 ARM: s5p64x0: Use common uncompress.h part for plat-samsung
Since uart_base can be set dynamically in arch_detect_cpu(), there is no need to have a copy of all code locally, just to override UART base address.
This patch removes any duplicate code in uncompress.h variant of s5p64x0 and implements proper arch_detect_cpu() function to initialize UART with SoC-specific parameters.
--- arch/arm/mach-s5p64x0/include/mach/uncompress.h | 155 +----------------------- 1 file changed, 5 insertions(+), 150 deletions(-)
arch/arm/mach-s5p64x0/include/mach/uncompress.h +5 -150
@@ -15,37 +15,11 @@#include <mach/map.h> -/* -* cannot use commonly <plat/uncompress.h> -* because uart base of S5P6440 and S5P6450 is different -*/ - -typedef unsigned int upf_t ;/* cannot include linux/serial_core.h */ - -/* uart setup */ - -unsigned int fifo_mask; -unsigned int fifo_max; - -/* forward declerations */ - -static void arch_detect_cpu (void ); - -/* defines for UART registers */ - -#include <plat/regs-serial.h> -#include <plat/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) -unsigned long uart_base; -static __inline__void get_uart_base (void ) +#include <plat/uncompress.h> + +static void arch_detect_cpu (void ) {unsigned int chipid;
@@ -57,128 +31,9 @@ static __inline__ void get_uart_base(void) uart_base +=0xEC800000 ; else uart_base += 0xEC000000; -} - -static __inline__void uart_wr (unsigned int reg,unsigned int val) -{ -volatile unsigned int *ptr; -get_uart_base (); - ptr = (volatile unsigned int *)(reg + uart_base); - *ptr = val; -} - -static __inline__unsigned int uart_rd (unsigned int reg) -{ -volatile unsigned int *ptr; - -get_uart_base (); - 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 __force *)(ad)) = (d); \ - } while (0) - - -#ifdef CONFIG_S3C_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 - -#ifdef CONFIG_S3C_BOOT_UART_FORCE_FIFO -static inline void arch_enable_uart_fifo (void ) -{ -u32 fifocon =uart_rd (S3C2410_UFCON ); - -if (!(fifocon &S3C2410_UFCON_FIFOMODE )) { - fifocon |=S3C2410_UFCON_RESETBOTH ; -uart_wr (S3C2410_UFCON , fifocon); - -/* wait for fifo reset to complete */ -while (1 ) { - fifocon =uart_rd (S3C2410_UFCON ); -if (!(fifocon &S3C2410_UFCON_RESETBOTH )) -break ; - } - } -} -#else -#define arch_enable_uart_fifo () do { } while(0) -#endif - -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 (); - -/* -* Enable the UART FIFOs if they where not enabled and our -* configuration says we should turn them on. -*/ - -arch_enable_uart_fifo (); -} - - - -static void arch_detect_cpu (void ) -{ -/* we do not need to do any cpu detection here@the moment. */ + fifo_mask =S3C2440_UFSTAT_TXMASK ; + fifo_max = 63 << S3C2440_UFSTAT_TXSHIFT; }#endif /* __ASM_ARCH_UNCOMPRESS_H */
Signature · 1 line
1.8.2.1
PATCH 1/1 ARM: s5p64x0: Use common uncompress.h part for plat-samsung
Quoted 4 lines · Tomasz Figa
Since
uart_basecan be set dynamically inarch_detect_cpu(), there is no need to have a copy of all code locally, just to override UART base address.
Quoted 9 lines
This patch removes any duplicate code in
uncompress.hvariant of s5p64x0 and implements properarch_detect_cpu()function to initialize UART with SoC-specific parameters.Signed-off-by Tomasz Figa <[email protected]>--- arch/arm/mach-s5p64x0/include/mach/uncompress.h | 155 +----------------------- 1 file changed, 5 insertions(+), 150 deletions(-)
This patch (with a minor modification) has been included in the patchset[1] to consolidate uncompress subroutine for Samsung platforms.
[1] [PATCH v2 0/3] Consolidate uncompress code for Samsung platform
http://www.gossamer-threads.com/lists/linux/kernel/1723429
Signature · 1 line
Tushar Behera