aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/arm/mach-at91rm9200/devices.c1
-rw-r--r--arch/avr32/mach-at32ap/at32ap7000.c33
-rw-r--r--drivers/serial/atmel_serial.c5
-rw-r--r--include/asm-arm/arch-at91rm9200/board.h1
-rw-r--r--include/asm-avr32/arch-at32ap/board.h5
5 files changed, 37 insertions, 8 deletions
diff --git a/arch/arm/mach-at91rm9200/devices.c b/arch/arm/mach-at91rm9200/devices.c
index 5a3919f09d4d..059824376629 100644
--- a/arch/arm/mach-at91rm9200/devices.c
+++ b/arch/arm/mach-at91rm9200/devices.c
@@ -561,6 +561,7 @@ static struct resource dbgu_resources[] = {
561static struct atmel_uart_data dbgu_data = { 561static struct atmel_uart_data dbgu_data = {
562 .use_dma_tx = 0, 562 .use_dma_tx = 0,
563 .use_dma_rx = 0, /* DBGU not capable of receive DMA */ 563 .use_dma_rx = 0, /* DBGU not capable of receive DMA */
564 .regs = (void __iomem *)(AT91_VA_BASE_SYS + AT91_DBGU),
564}; 565};
565 566
566static struct platform_device at91rm9200_dbgu_device = { 567static struct platform_device at91rm9200_dbgu_device = {
diff --git a/arch/avr32/mach-at32ap/at32ap7000.c b/arch/avr32/mach-at32ap/at32ap7000.c
index 05d1296bd7b2..3dd305875087 100644
--- a/arch/avr32/mach-at32ap/at32ap7000.c
+++ b/arch/avr32/mach-at32ap/at32ap7000.c
@@ -523,32 +523,48 @@ void __init at32_add_system_devices(void)
523 * USART 523 * USART
524 * -------------------------------------------------------------------- */ 524 * -------------------------------------------------------------------- */
525 525
526static struct atmel_uart_data atmel_usart0_data = {
527 .use_dma_tx = 1,
528 .use_dma_rx = 1,
529};
526static struct resource atmel_usart0_resource[] = { 530static struct resource atmel_usart0_resource[] = {
527 PBMEM(0xffe00c00), 531 PBMEM(0xffe00c00),
528 IRQ(7), 532 IRQ(7),
529}; 533};
530DEFINE_DEV(atmel_usart, 0); 534DEFINE_DEV_DATA(atmel_usart, 0);
531DEV_CLK(usart, atmel_usart0, pba, 4); 535DEV_CLK(usart, atmel_usart0, pba, 4);
532 536
537static struct atmel_uart_data atmel_usart1_data = {
538 .use_dma_tx = 1,
539 .use_dma_rx = 1,
540};
533static struct resource atmel_usart1_resource[] = { 541static struct resource atmel_usart1_resource[] = {
534 PBMEM(0xffe01000), 542 PBMEM(0xffe01000),
535 IRQ(7), 543 IRQ(7),
536}; 544};
537DEFINE_DEV(atmel_usart, 1); 545DEFINE_DEV_DATA(atmel_usart, 1);
538DEV_CLK(usart, atmel_usart1, pba, 4); 546DEV_CLK(usart, atmel_usart1, pba, 4);
539 547
548static struct atmel_uart_data atmel_usart2_data = {
549 .use_dma_tx = 1,
550 .use_dma_rx = 1,
551};
540static struct resource atmel_usart2_resource[] = { 552static struct resource atmel_usart2_resource[] = {
541 PBMEM(0xffe01400), 553 PBMEM(0xffe01400),
542 IRQ(8), 554 IRQ(8),
543}; 555};
544DEFINE_DEV(atmel_usart, 2); 556DEFINE_DEV_DATA(atmel_usart, 2);
545DEV_CLK(usart, atmel_usart2, pba, 5); 557DEV_CLK(usart, atmel_usart2, pba, 5);
546 558
559static struct atmel_uart_data atmel_usart3_data = {
560 .use_dma_tx = 1,
561 .use_dma_rx = 1,
562};
547static struct resource atmel_usart3_resource[] = { 563static struct resource atmel_usart3_resource[] = {
548 PBMEM(0xffe01800), 564 PBMEM(0xffe01800),
549 IRQ(9), 565 IRQ(9),
550}; 566};
551DEFINE_DEV(atmel_usart, 3); 567DEFINE_DEV_DATA(atmel_usart, 3);
552DEV_CLK(usart, atmel_usart3, pba, 6); 568DEV_CLK(usart, atmel_usart3, pba, 6);
553 569
554static inline void configure_usart0_pins(void) 570static inline void configure_usart0_pins(void)
@@ -597,8 +613,13 @@ static struct platform_device *setup_usart(unsigned int id)
597 configure_usart3_pins(); 613 configure_usart3_pins();
598 break; 614 break;
599 default: 615 default:
600 pdev = NULL; 616 return NULL;
601 break; 617 }
618
619 if (PXSEG(pdev->resource[0].start) == P4SEG) {
620 /* Addresses in the P4 segment are permanently mapped 1:1 */
621 struct atmel_uart_data *data = pdev->dev.platform_data;
622 data->regs = (void __iomem *)pdev->resource[0].start;
602 } 623 }
603 624
604 return pdev; 625 return pdev;
diff --git a/drivers/serial/atmel_serial.c b/drivers/serial/atmel_serial.c
index 2f9d99bb9587..34212df39800 100644
--- a/drivers/serial/atmel_serial.c
+++ b/drivers/serial/atmel_serial.c
@@ -694,8 +694,9 @@ static void __devinit atmel_init_port(struct atmel_uart_port *atmel_port, struct
694 port->mapbase = pdev->resource[0].start; 694 port->mapbase = pdev->resource[0].start;
695 port->irq = pdev->resource[1].start; 695 port->irq = pdev->resource[1].start;
696 696
697 if (port->mapbase == AT91_VA_BASE_SYS + AT91_DBGU) /* Part of system perpherals - already mapped */ 697 if (data->regs)
698 port->membase = (void __iomem *) port->mapbase; 698 /* Already mapped by setup code */
699 port->membase = data->regs;
699 else { 700 else {
700 port->flags |= UPF_IOREMAP; 701 port->flags |= UPF_IOREMAP;
701 port->membase = NULL; 702 port->membase = NULL;
diff --git a/include/asm-arm/arch-at91rm9200/board.h b/include/asm-arm/arch-at91rm9200/board.h
index d56527055c9d..3cc9aec80f9d 100644
--- a/include/asm-arm/arch-at91rm9200/board.h
+++ b/include/asm-arm/arch-at91rm9200/board.h
@@ -103,6 +103,7 @@ extern void __init at91_init_serial(struct at91_uart_config *config);
103struct atmel_uart_data { 103struct atmel_uart_data {
104 short use_dma_tx; /* use transmit DMA? */ 104 short use_dma_tx; /* use transmit DMA? */
105 short use_dma_rx; /* use receive DMA? */ 105 short use_dma_rx; /* use receive DMA? */
106 void __iomem *regs; /* virtual base address, if any */
106}; 107};
107extern void __init at91_add_device_serial(void); 108extern void __init at91_add_device_serial(void);
108 109
diff --git a/include/asm-avr32/arch-at32ap/board.h b/include/asm-avr32/arch-at32ap/board.h
index 82e5404d2f48..435507281f89 100644
--- a/include/asm-avr32/arch-at32ap/board.h
+++ b/include/asm-avr32/arch-at32ap/board.h
@@ -12,6 +12,11 @@ void at32_add_system_devices(void);
12#define ATMEL_MAX_UART 4 12#define ATMEL_MAX_UART 4
13extern struct platform_device *atmel_default_console_device; 13extern struct platform_device *atmel_default_console_device;
14 14
15struct atmel_uart_data {
16 short use_dma_tx; /* use transmit DMA? */
17 short use_dma_rx; /* use receive DMA? */
18 void __iomem *regs; /* virtual base address, if any */
19};
15struct platform_device *at32_add_device_usart(unsigned int id); 20struct platform_device *at32_add_device_usart(unsigned int id);
16 21
17struct eth_platform_data { 22struct eth_platform_data {