Changeset 8280


Ignore:
Timestamp:
2007-07-31T17:52:06+02:00 (11 years ago)
Author:
florian
Message:

Register the second uart on tnetd7300 and fix the watchdog register for 7200/7300, thanks to DerAgo (#2149)

Location:
trunk/target/linux/ar7-2.6/files
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/ar7-2.6/files/arch/mips/ar7/platform.c

    r8189 r8280  
    253253 */ 
    254254#if !defined(CONFIG_SERIAL_8250) 
     255 
     256static struct plat_serial8250_port uart0_data = 
     257{ 
     258        .mapbase = AR7_REGS_UART0, 
     259        .irq = AR7_IRQ_UART0, 
     260        .regshift = 2, 
     261        .iotype = UPIO_MEM, 
     262        .flags = UPF_BOOT_AUTOCONF | UPF_IOREMAP, 
     263}; 
     264 
     265static struct plat_serial8250_port uart1_data = 
     266{ 
     267        .mapbase = UR8_REGS_UART1, 
     268        .irq = AR7_IRQ_UART1, 
     269        .regshift = 2, 
     270        .iotype = UPIO_MEM, 
     271        .flags = UPF_BOOT_AUTOCONF | UPF_IOREMAP, 
     272}; 
     273 
    255274static struct plat_serial8250_port uart_data[] = { 
    256         { 
    257                 .mapbase = AR7_REGS_UART0, 
    258                 .irq = AR7_IRQ_UART0, 
    259                 .regshift = 2, 
    260                 .iotype = UPIO_MEM, 
    261                 .flags = UPF_BOOT_AUTOCONF | UPF_IOREMAP, 
    262         }, 
    263         { 
    264                 .mapbase = AR7_REGS_UART1, 
    265                 .irq = AR7_IRQ_UART1, 
    266                 .regshift = 2, 
    267                 .iotype = UPIO_MEM, 
    268                 .flags = UPF_BOOT_AUTOCONF | UPF_IOREMAP, 
    269         }, 
    270         { 
    271                 .flags = 0, 
    272         }, 
     275    uart0_data, 
     276    uart1_data, 
     277        { .flags = 0 } 
     278}; 
     279 
     280static struct plat_serial8250_port uart_data_single[] = { 
     281    uart0_data, 
     282        { .flags = 0 } 
    273283}; 
    274284 
     
    276286        .id = 0, 
    277287        .name = "serial8250", 
    278         .dev.platform_data = uart_data, 
     288        .dev.platform_data = uart_data_single 
    279289}; 
    280290#endif 
     
    318328        int res; 
    319329 
    320 #if defined(CONFIG_SERIAL_8250) 
     330#ifdef CONFIG_SERIAL_8250 
     331 
    321332        static struct uart_port uart_port[2]; 
    322333 
     
    335346                return res; 
    336347 
    337         uart_port[1].type = PORT_AR7; 
    338         uart_port[1].line = 1; 
    339         uart_port[1].irq = AR7_IRQ_UART1; 
    340         uart_port[1].uartclk = ar7_bus_freq() / 2; 
    341         uart_port[1].iotype = UPIO_MEM; 
    342         uart_port[1].mapbase = AR7_REGS_UART1; 
    343         uart_port[1].membase = ioremap(uart_port[1].mapbase, 256); 
    344         uart_port[1].regshift = 2; 
    345         res = early_serial_setup(&uart_port[1]); 
    346         if (res) 
    347                 return res; 
    348 #else 
     348 
     349    // Only TNETD73xx have a second serial port 
     350    if (ar7_has_second_uart()) { 
     351        uart_port[1].type = PORT_AR7; 
     352        uart_port[1].line = 1; 
     353        uart_port[1].irq = AR7_IRQ_UART1; 
     354        uart_port[1].uartclk = ar7_bus_freq() / 2; 
     355        uart_port[1].iotype = UPIO_MEM; 
     356        uart_port[1].mapbase = UR8_REGS_UART1; 
     357        uart_port[1].membase = ioremap(uart_port[1].mapbase, 256); 
     358        uart_port[1].regshift = 2; 
     359        res = early_serial_setup(&uart_port[1]); 
     360        if (res) 
     361                return res; 
     362    } 
     363     
     364#else // !CONFIG_SERIAL_8250 
     365 
    349366        uart_data[0].uartclk = ar7_bus_freq() / 2; 
    350367        uart_data[1].uartclk = uart_data[0].uartclk; 
     368 
     369    // Only TNETD73xx have a second serial port 
     370    if (ar7_has_second_uart()) { 
     371        uart.dev.platform_data = uart_data; 
     372    } 
     373 
    351374        res = platform_device_register(&uart); 
    352375        if (res) 
    353376                return res; 
    354 #endif 
     377         
     378#endif // CONFIG_SERIAL_8250 
     379 
    355380        res = platform_device_register(&physmap_flash); 
    356381        if (res) 
  • trunk/target/linux/ar7-2.6/files/drivers/char/watchdog/ar7_wdt.c

    r6693 r8280  
    7474#define prescale_value 0xFFFF 
    7575 
     76// Offset of the WDT registers 
     77static unsigned long ar7_regs_wdt; 
     78// Pointer to the remapped WDT IO space 
     79static ar7_wdt_t *ar7_wdt; 
     80static void ar7_wdt_get_regs(void) 
     81{ 
     82    u16 chip_id = ar7_chip_id(); 
     83    switch (chip_id) 
     84    { 
     85    case AR7_CHIP_7100: 
     86    case AR7_CHIP_7200: 
     87        ar7_regs_wdt = AR7_REGS_WDT; 
     88        break; 
     89    default: 
     90        ar7_regs_wdt = UR8_REGS_WDT; 
     91        break; 
     92    } 
     93} 
     94                      
    7695static void ar7_wdt_kick(u32 value) 
    7796{ 
    78         volatile ar7_wdt_t *ar7_wdt = (ar7_wdt_t *)ioremap(AR7_REGS_WDT, sizeof(ar7_wdt_t)); 
    79  
    8097        ar7_wdt->kick_lock = 0x5555; 
    8198        if ((ar7_wdt->kick_lock & 3) == 1) { 
     
    91108static void ar7_wdt_prescale(u32 value) 
    92109{ 
    93         volatile ar7_wdt_t *ar7_wdt = (ar7_wdt_t *)ioremap(AR7_REGS_WDT, sizeof(ar7_wdt_t)); 
    94  
    95110        ar7_wdt->prescale_lock = 0x5A5A; 
    96111        if ((ar7_wdt->prescale_lock & 3) == 1) { 
     
    106121static void ar7_wdt_change(u32 value) 
    107122{ 
    108         volatile ar7_wdt_t *ar7_wdt = (ar7_wdt_t *)ioremap(AR7_REGS_WDT, sizeof(ar7_wdt_t)); 
    109  
    110123        ar7_wdt->change_lock = 0x6666; 
    111124        if ((ar7_wdt->change_lock & 3) == 1) { 
     
    121134static void ar7_wdt_disable(u32 value) 
    122135{ 
    123         volatile ar7_wdt_t *ar7_wdt = (ar7_wdt_t *)ioremap(AR7_REGS_WDT, sizeof(ar7_wdt_t)); 
    124  
    125136        ar7_wdt->disable_lock = 0x7777; 
    126137        if ((ar7_wdt->disable_lock & 3) == 1) { 
     
    286297{ 
    287298        int rc; 
    288  
    289         if (!request_mem_region(AR7_REGS_WDT, sizeof(ar7_wdt_t), LONGNAME)) { 
     299     
     300    ar7_wdt_get_regs(); 
     301 
     302        if (!request_mem_region(ar7_regs_wdt, sizeof(ar7_wdt_t), LONGNAME)) { 
    290303                printk(KERN_WARNING DRVNAME ": watchdog I/O region busy\n"); 
    291304                return -EBUSY; 
    292305        } 
     306 
     307        ar7_wdt = (ar7_wdt_t *)ioremap(ar7_regs_wdt, sizeof(ar7_wdt_t)); 
    293308 
    294309        ar7_wdt_disable_wdt(); 
     
    314329        misc_deregister(&ar7_wdt_miscdev); 
    315330out_alloc: 
    316         release_mem_region(AR7_REGS_WDT, sizeof(ar7_wdt_t)); 
     331        release_mem_region(ar7_regs_wdt, sizeof(ar7_wdt_t)); 
    317332out: 
    318333        return rc; 
     
    323338        unregister_reboot_notifier(&ar7_wdt_notifier); 
    324339        misc_deregister(&ar7_wdt_miscdev); 
    325         release_mem_region(AR7_REGS_WDT, sizeof(ar7_wdt_t)); 
     340    iounmap(ar7_wdt); 
     341        release_mem_region(ar7_regs_wdt, sizeof(ar7_wdt_t)); 
    326342} 
    327343 
  • trunk/target/linux/ar7-2.6/files/include/asm-mips/ar7/ar7.h

    r8190 r8280  
    2929 
    3030#define AR7_REGS_MAC0   (AR7_REGS_BASE + 0x0000) 
    31 #define AR7_REGS_EMIF   (AR7_REGS_BASE + 0x0800) 
    3231#define AR7_REGS_GPIO   (AR7_REGS_BASE + 0x0900) 
    33 #define AR7_REGS_POWER  (AR7_REGS_BASE + 0x0a00) 
    34 #define AR7_REGS_WDT    (AR7_REGS_BASE + 0x0b00) 
    35 #define AR7_REGS_TIMER0 (AR7_REGS_BASE + 0x0c00) 
    36 #define AR7_REGS_TIMER1 (AR7_REGS_BASE + 0x0d00) 
     32#define AR7_REGS_POWER  (AR7_REGS_BASE + 0x0a00) // 0x08610A00 - 0x08610BFF (512 bytes, 128 bytes / clock) 
    3733#define AR7_REGS_UART0  (AR7_REGS_BASE + 0x0e00) 
    38 #define AR7_REGS_UART1  (AR7_REGS_BASE + 0x0f00) 
    39 #define AR7_REGS_I2C    (AR7_REGS_BASE + 0x1000) 
    40 #define AR7_REGS_USB    (AR7_REGS_BASE + 0x1200) 
    41 #define AR7_REGS_DMA    (AR7_REGS_BASE + 0x1400) 
    4234#define AR7_REGS_RESET  (AR7_REGS_BASE + 0x1600) 
    43 #define AR7_REGS_BIST   (AR7_REGS_BASE + 0x1700) 
    4435#define AR7_REGS_VLYNQ0 (AR7_REGS_BASE + 0x1800) 
    4536#define AR7_REGS_DCL    (AR7_REGS_BASE + 0x1A00) 
    4637#define AR7_REGS_VLYNQ1 (AR7_REGS_BASE + 0x1C00) 
    4738#define AR7_REGS_MDIO   (AR7_REGS_BASE + 0x1E00) 
    48 #define AR7_REGS_FSER   (AR7_REGS_BASE + 0x2000) 
    4939#define AR7_REGS_IRQ    (AR7_REGS_BASE + 0x2400) 
    5040#define AR7_REGS_MAC1   (AR7_REGS_BASE + 0x2800) 
     41 
     42#define AR7_REGS_WDT    (AR7_REGS_BASE + 0x1f00) 
     43#define UR8_REGS_WDT    (AR7_REGS_BASE + 0x0b00) 
     44#define UR8_REGS_UART1  (AR7_REGS_BASE + 0x0f00) 
    5145 
    5246#define  AR7_RESET_PEREPHERIAL 0x0 
     
    6458#define  AR7_GPIO_DIR    0x8 
    6559#define  AR7_GPIO_ENABLE 0xC 
    66  
    67 #define AR7_GPIO_BIT_STATUS_LED   8 
    6860 
    6961#define AR7_CHIP_7100 0x18 
     
    132124} 
    133125#define ar7_has_high_vlynq ar7_has_high_cpmac 
     126#define ar7_has_second_uart ar7_has_high_cpmac 
    134127 
    135128static inline void ar7_device_enable(u32 bit) 
Note: See TracChangeset for help on using the changeset viewer.