Changeset 47086


Ignore:
Timestamp:
2015-10-02T12:49:16+02:00 (2 years ago)
Author:
blogic
Message:

ramips: make the early_printk code detect which uart is used

only tested on mt7628

Signed-off-by: John Crispin <blogic@…>

Backport of r46950

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/chaos_calmer/target/linux/ramips/patches-3.18/0015-MIPS-ralink-cleanup-early_printk.patch

    r44349 r47086  
    1414--- a/arch/mips/ralink/early_printk.c 
    1515+++ b/arch/mips/ralink/early_printk.c 
    16 @@ -12,21 +12,24 @@ 
     16@@ -12,21 +12,26 @@ 
    1717 #include <asm/addrspace.h> 
    1818  
     
    4141+ 
    4242+#define UART_REG_TX            0x04 
     43+#define UART_REG_LCR           0x0c 
    4344+#define UART_REG_LSR           0x14 
    4445+#define UART_REG_LSR_RT2880    0x1c 
     
    4647 static __iomem void *uart_membase = (__iomem void *) KSEG1ADDR(EARLY_UART_BASE); 
    4748+static __iomem void *chipid_membase = (__iomem void *) KSEG1ADDR(CHIPID_BASE); 
     49+static int init_complete; 
    4850  
    4951 static inline void uart_w32(u32 val, unsigned reg) 
    5052 { 
    51 @@ -38,11 +41,23 @@ static inline u32 uart_r32(unsigned reg) 
     53@@ -38,11 +43,46 @@ 
    5254        return __raw_readl(uart_membase + reg); 
    5355 } 
     
    5961+} 
    6062+ 
     63+static inline void find_uart_base(void) 
     64+{ 
     65+       int i; 
     66+ 
     67+       if (!soc_is_mt7628()) 
     68+               return; 
     69+ 
     70+       for (i = 0; i < 3; i++) { 
     71+               u32 reg = uart_r32(UART_REG_LCR + (0x100 * i)); 
     72+ 
     73+               if (!reg) 
     74+                       continue; 
     75+ 
     76+               uart_membase = (__iomem void *) KSEG1ADDR(EARLY_UART_BASE + (0x100 * i)); 
     77+               break; 
     78+       } 
     79+} 
     80+ 
    6181 void prom_putchar(unsigned char ch) 
    6282 { 
     
    6686-       while ((uart_r32(UART_REG_LSR) & UART_LSR_THRE) == 0) 
    6787-               ; 
     88+       if (!init_complete) { 
     89+               find_uart_base(); 
     90+               init_complete = 1; 
     91+       } 
     92+ 
    6893+       if (IS_ENABLED(CONFIG_SOC_MT7621) || soc_is_mt7628()) { 
    6994+               uart_w32(ch, UART_TX); 
Note: See TracChangeset for help on using the changeset viewer.