Changeset 27055


Ignore:
Timestamp:
2011-06-01T00:53:27+02:00 (7 years ago)
Author:
juhosg
Message:

ar71xx: add AR933x specific early_printk support

Location:
trunk/target/linux/ar71xx/files/arch/mips
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/ar71xx/files/arch/mips/ar71xx/early_printk.c

    r23976 r27055  
    11/* 
    2  *  Atheros AR71xx SoC early printk support 
     2 *  Atheros AR7xxx/AR9xxx SoC early printk support 
    33 * 
    4  *  Copyright (C) 2008-2009 Gabor Juhos <juhosg@openwrt.org> 
     4 *  Copyright (C) 2008-2011 Gabor Juhos <juhosg@openwrt.org> 
    55 *  Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org> 
    66 * 
     
    1010 */ 
    1111 
     12#include <linux/errno.h> 
    1213#include <linux/io.h> 
    1314#include <linux/serial_reg.h> 
     
    1617#include <asm/mach-ar71xx/ar71xx.h> 
    1718 
     19static void __iomem *prom_uart_base; 
     20static void (*_putchar)(unsigned char); 
     21 
    1822#define UART_READ(r) \ 
    19         __raw_readl((void __iomem *)(KSEG1ADDR(AR71XX_UART_BASE) + 4 * (r))) 
     23        __raw_readl(prom_uart_base + 4 * (r)) 
    2024 
    2125#define UART_WRITE(r, v) \ 
    22         __raw_writel((v), (void __iomem *)(KSEG1ADDR(AR71XX_UART_BASE) + 4*(r))) 
     26        __raw_writel((v), prom_uart_base + 4 * (r)) 
    2327 
    24 void prom_putchar(unsigned char ch) 
     28static void prom_putchar_ar71xx(unsigned char ch) 
    2529{ 
    2630        while (((UART_READ(UART_LSR)) & UART_LSR_THRE) == 0) 
     
    3135} 
    3236 
     37static void prom_putchar_ar933x(unsigned char ch) 
     38{ 
     39        while (((UART_READ(0)) & 0x200) == 0) 
     40                ; 
     41        UART_WRITE(0, 0x200 | ch); 
     42        while (((UART_READ(0)) & 0x200) == 0) 
     43                ; 
     44} 
     45 
     46static int prom_putchar_init(void) 
     47{ 
     48        if (_putchar) 
     49                return 0; 
     50 
     51        switch(ar71xx_soc) { 
     52        case AR71XX_SOC_AR7130: 
     53        case AR71XX_SOC_AR7141: 
     54        case AR71XX_SOC_AR7161: 
     55        case AR71XX_SOC_AR7240: 
     56        case AR71XX_SOC_AR7241: 
     57        case AR71XX_SOC_AR7242: 
     58        case AR71XX_SOC_AR9130: 
     59        case AR71XX_SOC_AR9132: 
     60        case AR71XX_SOC_AR9341: 
     61        case AR71XX_SOC_AR9342: 
     62        case AR71XX_SOC_AR9344: 
     63                prom_uart_base = (void __iomem *) KSEG1ADDR(AR71XX_UART_BASE); 
     64                _putchar = prom_putchar_ar71xx; 
     65                break; 
     66 
     67        case AR71XX_SOC_AR9330: 
     68        case AR71XX_SOC_AR9331: 
     69                prom_uart_base = (void __iomem *) KSEG1ADDR(AR933X_UART_BASE); 
     70                _putchar = prom_putchar_ar933x; 
     71                break; 
     72 
     73        default: 
     74                return -ENODEV; 
     75        } 
     76 
     77        return 0; 
     78} 
     79 
     80void prom_putchar(unsigned char ch) 
     81{ 
     82        if (prom_putchar_init()) 
     83                return; 
     84 
     85        _putchar(ch); 
     86} 
  • trunk/target/linux/ar71xx/files/arch/mips/include/asm/mach-ar71xx/ar71xx.h

    r27054 r27055  
    7171#define AR91XX_WMAC_SIZE        0x30000 
    7272 
     73#define AR933X_UART_BASE        (AR71XX_APB_BASE + 0x00020000) 
     74#define AR933X_UART_SIZE        0x14 
     75 
    7376#define AR934X_WMAC_BASE        (AR71XX_APB_BASE + 0x00100000) 
    7477#define AR934X_WMAC_SIZE        0x20000 
Note: See TracChangeset for help on using the changeset viewer.