안녕하세요

첨 글을 남겨 봅니다.

 

혹 이글을 읽으신후 경헙이 있으신 분들이 계시면 도움을 부탁드립니다.

 

S5PV210 의 SROM 부분에서 Xm0CSn0 와 Xm0CSn1 을 CS 로 사용 하여 74HC138 을 사용 4채널 확장 UART ( TL16C554APN ) 두개에 4 개의 CS 를 분할 하여 넣었습니다.

 

 Xm0CSn0  Base Address 는 ( V210 USER Data Sheet 30 page : SROM Bank 0 ) 0x80000000  을 사용 하였고

 Xm0CSn1 Base Address 는 ( V210 USER Data Sheet 30 page : SROM Bank 1) 0x8800000  을 사용 하였습니다.

 

 74HC138 의 A0 , A1, A3 에는 MA6, MA7, MA8 을 연결 하였고

 

#define MYUART_XM0NCS0  0x80000000
#define MYUART_XM0NCS1  0x88000000

 

#ifdef CONFIG_MYUART_16BIT

#define MYUART_MADDR6   0x80

#define MYUART_MADDR7   0x100

#define MYUART_MADDR8   0x200

#else

#define MYUART_MADDR6   0x40
#define MYUART_MADDR7   0x80
#define MYUART_MADDR8   0x100

#endif

 

#define MYUART_CS0Y0 (MYUART_XM0NCS0)
#define MYUART_CS0Y1 (MYUART_XM0NCS0+MYUART_MADDR6)
#define MYUART_CS0Y2 (MYUART_XM0NCS0+MYUART_MADDR7)
#define MYUART_CS0Y3 (MYUART_XM0NCS0+MYUART_MADDR6+EXUART_MADDR7)

#define MYUART_CS1Y0 (MYUART_XM0NCS1)
#define MYUART_CS1Y1 (MYUART_XM0NCS1+MYUART_MADDR6)
#define MYUART_CS1Y2 (MYUART_XM0NCS1+MYUART_MADDR7)
#define MYUART_CS1Y3 (MYUART_XM0NCS1+MYUART_MADDR6+MYUART_MADDR7)

 

선언을 하였으며,  CONFIG_SERIAL_SAMSUNG_UARTS=12 로 변경 하고

 

driver\serial\samsung.c 에서

 

static struct s3c24xx_uart_port s3c24xx_serial_ports[CONFIG_SERIAL_SAMSUNG_UARTS] = {
 [0] = {
  .port = {
   .lock  = __SPIN_LOCK_UNLOCKED(s3c24xx_serial_ports[0].port.lock),
   .iotype  = UPIO_MEM,
   .irq  = IRQ_S3CUART_RX0,
   .uartclk = 0,
   .fifosize = 16,
   .ops  = &s3c24xx_serial_ops,
   .flags  = UPF_BOOT_AUTOCONF,
   .line  = 0,
  }
 },
 [1] = {
  .port = {
   .lock  = __SPIN_LOCK_UNLOCKED(s3c24xx_serial_ports[1].port.lock),
   .iotype  = UPIO_MEM,
   .irq  = IRQ_S3CUART_RX1,
   .uartclk = 0,
   .fifosize = 16,
   .ops  = &s3c24xx_serial_ops,
   .flags  = UPF_BOOT_AUTOCONF,
   .line  = 1,
  }
 },
#if CONFIG_SERIAL_SAMSUNG_UARTS > 2

 [2] = {
  .port = {
   .lock  = __SPIN_LOCK_UNLOCKED(s3c24xx_serial_ports[2].port.lock),
   .iotype  = UPIO_MEM,
   .irq  = IRQ_S3CUART_RX2,
   .uartclk = 0,
   .fifosize = 16,
   .ops  = &s3c24xx_serial_ops,
   .flags  = UPF_BOOT_AUTOCONF,
   .line  = 2,
  }
 },
#endif
#if CONFIG_SERIAL_SAMSUNG_UARTS > 3
 [3] = {
  .port = {
   .lock  = __SPIN_LOCK_UNLOCKED(s3c24xx_serial_ports[3].port.lock),
   .iotype  = UPIO_MEM,
   .irq  = IRQ_S3CUART_RX3,
   .uartclk = 0,
   .fifosize = 16,
   .ops  = &s3c24xx_serial_ops,
   .flags  = UPF_BOOT_AUTOCONF,
   .line  = 3,
  }
 }, //<---- ',' 2013.05.27 Hybus JAY Add for External UART
#endif

 

// TL16C554APN Add.
#if CONFIG_SERIAL_SAMSUNG_UARTS > 4
 [4] = {
  .port = {
   .type       = PORT_16550,
   .lock  = __SPIN_LOCK_UNLOCKED(s3c24xx_serial_ports[4].port.lock),
   .iotype  = UPIO_MEM,
   .irq  = IRQ_EINT2, //GPH0_2 (XEINT2)
   .membase = EXUART_74HC138_CS0_Y0,
   .uartclk = 3686400,
   .fifosize = 16,
   .ops  = &s3c24xx_serial_ops,
   .line  = 4,
  }
 },  
 [5] = {
  .port = {
   .type       = PORT_16550,
   .lock  = __SPIN_LOCK_UNLOCKED(s3c24xx_serial_ports[5].port.lock),
   .iotype  = UPIO_MEM,
   .irq  = IRQ_EINT3, //GPH0_3 (XEINT3)
   .membase = EXUART_74HC138_CS0_Y1,
   .uartclk = 3686400,
   .fifosize = 16,
   .ops  = &s3c24xx_serial_ops,
   .line  = 5,
  }
 },
 [6] = {
  .port = {
   .type       = PORT_16550,
   .lock  = __SPIN_LOCK_UNLOCKED(s3c24xx_serial_ports[6].port.lock),
   .iotype  = UPIO_MEM,
   .irq  = IRQ_EINT5, //GPH0_5 (XEINT5)
   .membase = EXUART_74HC138_CS0_Y2,
   .uartclk = 3686400,
   .fifosize = 16,
   .ops  = &s3c24xx_serial_ops,
   .line  = 6,
  }
 },
 [7] = {
  .port = {
   .type       = PORT_16550,
   .lock  = __SPIN_LOCK_UNLOCKED(s3c24xx_serial_ports[7].port.lock),
   .iotype  = UPIO_MEM,
   .irq  = IRQ_EINT6, //GPH0_6 (XEINT6)
   .membase = EXUART_74HC138_CS0_Y3,
   .uartclk = 3686400,
   .fifosize = 16,
   .ops  = &s3c24xx_serial_ops,
   .line  = 7,
  }
 },
 [8] = {
  .port = {
   .type       = PORT_16550,
   .lock  = __SPIN_LOCK_UNLOCKED(s3c24xx_serial_ports[8].port.lock),
   .iotype  = UPIO_MEM,
   .irq  = IRQ_EINT7, //GPH0_7 (XEINT7)
   .membase = EXUART_74HC138_CS1_Y0,
   .uartclk = 3686400,
   .fifosize = 16,
   .ops  = &s3c24xx_serial_ops,
   .line  = 8,
  }
 },  
 [9] = {
  .port = {
   .type       = PORT_16550,
   .lock  = __SPIN_LOCK_UNLOCKED(s3c24xx_serial_ports[9].port.lock),
   .iotype  = UPIO_MEM,
   .irq  = IRQ_EINT8, //GPH1_0 (XEINT8)
   .membase = EXUART_74HC138_CS1_Y1,
   .uartclk = 3686400,
   .fifosize = 16,
   .ops  = &s3c24xx_serial_ops,
   .line  = 9,
  }
 },
 [10] = {
  .port = {
   .type       = PORT_16550,
   .lock  = __SPIN_LOCK_UNLOCKED(s3c24xx_serial_ports[10].port.lock),
   .iotype  = UPIO_MEM,
   .irq  = IRQ_EINT9, //GPH1_1 (XEINT9)
   .membase = EXUART_74HC138_CS1_Y2,
   .uartclk = 3686400,
   .fifosize = 16,
   .ops  = &s3c24xx_serial_ops,
   .line  = 10,
  }
 },
 [11] = {
  .port = {
   .type       = PORT_16550,
   .lock  = __SPIN_LOCK_UNLOCKED(s3c24xx_serial_ports[11].port.lock),
   .iotype  = UPIO_MEM,
   .irq  = IRQ_EINT10, //GPH1_2 (XEINT10)
   .membase = EXUART_74HC138_CS1_Y3,
   .uartclk = 3686400,
   .fifosize = 16,
   .ops  = &s3c24xx_serial_ops,
   .line  = 11,
  }
 }
#endif

};

 

로 셋팅 하였습니다.

 

그리고 arch\arm\mach-s5pv210\mach-smdkv210.c 에서

 

static struct s3c2410_uartcfg smdkv210_uartcfgs[] __initdata = {
 [0] = {
  .hwport  = 0,
  .flags  = 0,
  .ucon  = S5PV210_UCON_DEFAULT,
  .ulcon  = S5PV210_ULCON_DEFAULT,
  .ufcon  = S5PV210_UFCON_DEFAULT,
 },
 [1] = {
  .hwport  = 1,
  .flags  = 0,
  .ucon  = S5PV210_UCON_DEFAULT,
  .ulcon  = S5PV210_ULCON_DEFAULT,
  .ufcon  = S5PV210_UFCON_DEFAULT,
 },
 [2] = {
  .hwport  = 2,
  .flags  = 0,
  .ucon  = S5PV210_UCON_DEFAULT,
  .ulcon  = S5PV210_ULCON_DEFAULT,
  .ufcon  = S5PV210_UFCON_DEFAULT,
 },
 [3] = {
  .hwport  = 3,
  .flags  = 0,
  .ucon  = S5PV210_UCON_DEFAULT,
  .ulcon  = S5PV210_ULCON_DEFAULT,
  .ufcon  = S5PV210_UFCON_DEFAULT,
 },
 
 //2013.05.28 Hybus jay TL16C554 Add.
 [4] = {
  .hwport  = 4,
  .flags  = 0,
  .ucon  = S5PV210_UCON_DEFAULT,
  .ulcon  = S5PV210_ULCON_DEFAULT,
  .ufcon  = S5PV210_UFCON_DEFAULT,
 },
 [5] = {
  .hwport  = 5,
  .flags  = 0,
  .ucon  = S5PV210_UCON_DEFAULT,
  .ulcon  = S5PV210_ULCON_DEFAULT,
  .ufcon  = S5PV210_UFCON_DEFAULT,
 },
 [6] = {
  .hwport  = 6,
  .flags  = 0,
  .ucon  = S5PV210_UCON_DEFAULT,
  .ulcon  = S5PV210_ULCON_DEFAULT,
  .ufcon  = S5PV210_UFCON_DEFAULT,
 },
 [7] = {
  .hwport  = 7,
  .flags  = 0,
  .ucon  = S5PV210_UCON_DEFAULT,
  .ulcon  = S5PV210_ULCON_DEFAULT,
  .ufcon  = S5PV210_UFCON_DEFAULT,
 },
 [8] = {
  .hwport  = 8,
  .flags  = 0,
  .ucon  = S5PV210_UCON_DEFAULT,
  .ulcon  = S5PV210_ULCON_DEFAULT,
  .ufcon  = S5PV210_UFCON_DEFAULT,
 },
 [9] = {
  .hwport  = 9,
  .flags  = 0,
  .ucon  = S5PV210_UCON_DEFAULT,
  .ulcon  = S5PV210_ULCON_DEFAULT,
  .ufcon  = S5PV210_UFCON_DEFAULT,
 },
 [10] = {
  .hwport  = 10,
  .flags  = 0,
  .ucon  = S5PV210_UCON_DEFAULT,
  .ulcon  = S5PV210_ULCON_DEFAULT,
  .ufcon  = S5PV210_UFCON_DEFAULT,
 },
 [11] = {
  .hwport  = 11,
  .flags  = 0,
  .ucon  = S5PV210_UCON_DEFAULT,
  .ulcon  = S5PV210_ULCON_DEFAULT,
  .ufcon  = S5PV210_UFCON_DEFAULT,
 },
};

위와 같이 수정 하였습니다. ( 위 부분의 셋팅은 확실 한 방법인지 ... ? )

 

그리고 파일시스템에 확장 UART 붙을수 있는 노드를 ttySAC4 ~ ttySAC11 까지 생성 해 두었습니다.

 

그런데 확장 UART 부분이 동작되지 않아 이렇게 경험이 있거나 지식이 있으신 분들께 도움을 요청 하여 봅니다.