Hi,

I'm trying to get the second UART working on a WR841N v8.
The AR9341 SoC does have a AR9330 and a 8250 style UART,
which is normally the console.

I'm facing some problems to get it working. Does anybody
tried to get similar working ?

AFAIK the only difference between the AR934x high speed Uart and
the AR9330 Uart is the FIFO size (only 4 instead of 16 bytes)
and the missing DMA capability, which isn't used.

The existing AR9330-uart code in the kernel should provide
all necessary routines. To debug the code I'm using it as
module (please find attached code) with some light modifications
providing the necessary mods.

Here is the snpippet of the init code:

#define AR71XX_APB_BASE         0x18000000
#define AR71XX_UART_SIZE        0x100
#define AR934X_UART1_BASE      (AR71XX_APB_BASE + 0x00500000)
#define AR934X_UART1_FIFO_SIZE  4

static struct resource ar933x_uart_resources[] = {
        {
                .start  = AR934X_UART1_BASE,
                .end    = AR934X_UART1_BASE + AR71XX_UART_SIZE - 1,
                .flags  = IORESOURCE_MEM,
        },
        {
                .start  = ATH79_MISC_IRQ(6),
                .end    = ATH79_MISC_IRQ(6),
                .flags  = IORESOURCE_IRQ,
        },
};

static struct platform_device ar933x_uart_device = {
        .name           = DRIVER_NAME,
        .id             = -1,
        .resource       = ar933x_uart_resources,
        .num_resources  = ARRAY_SIZE(ar933x_uart_resources),
};

....
   platform_device_register(&ar933x_uart_device);

Before loading the module, I see this:

root@OpenWrt:~# find /sys/ -name ar9*art
/sys/bus/platform/drivers/ar933x-uart
root@OpenWrt:~#
root@OpenWrt:~# show-gpio | head -4
   JP2 pin 9 GPIO00 O - UART1_TD
   JP2 pin 3 GPIO01 I l GPIO
   JP2 pin 5 GPIO02 O h GPIO
   JP2 pin 7 GPIO03 I - UART1_RD
root@OpenWrt:~# find /sys/ -name ar9*art
/sys/bus/platform/drivers/ar933x-uart

root@OpenWrt:~# ls -l /dev/ttyATH*
ls: /dev/ttyATH*: No such file or directory

root@OpenWrt:~# io -4 -l 0x14 0x18500000
18500000:  00000266 00000200 00000000 00000282
18500010:  00000000

Loading the module:

root@OpenWrt:~# modprobe ar934x_uart
root@OpenWrt:~# dmesg | tail -1
[ 1343.780000] ar934x-uart: ttyATH0 at MMIO 0x18500000 (irq = 14) is a AR933X 
UART

root@OpenWrt:~# find /sys/ -name ar9*art
/sys/bus/platform/devices/ar934x-uart
/sys/bus/platform/drivers/ar933x-uart
/sys/bus/platform/drivers/ar934x-uart
/sys/bus/platform/drivers/ar934x-uart/ar934x-uart
/sys/devices/platform/ar934x-uart
/sys/module/ar934x_uart

root@OpenWrt:~# io -4 -l 0x14 0x18500000
18500000:  00000266 00000200 00000000 00000282
18500010:  00000000
root@OpenWrt:~# ls -l /dev/ttyATH0
crw-rw-rw-    1 root     root      253,   0 Nov 15 20:43 /dev/ttyATH0

ttyATH0 was dynamicly generated. Reading the setup of ttyATH0 stty seems to
setup the registers.

root@OpenWrt:~# stty -a -F /dev/ttyATH0
speed 9600 baud;stty: /dev/ttyATH0
 line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = 
<undef>; swtch =
<undef>;
start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = 
^O; min = 1; time = 0;
-parenb -parodd cs8 hupcl -cstopb cread clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff 
-iuclc -ixany -imaxbel
-iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt 
echoctl echoke
root@OpenWrt:~# io -4 -l 0x14 0x18500000
18500000:  00000355 0000a008 004e0f88 00000383
18500010:  00000000

but a simple 'cat /dev/ttyATH0' doesn't show any data (there is a PIC MCU 
connected, which sends
a 0x55 and 0x66 every second). A put a printk just before a the tty is fed:

static void ar933x_uart_rx_chars(struct ar933x_uart_port *up)
{
   ...
   if ((up->port.ignore_status_mask & AR933X_DUMMY_STATUS_RD) == 0)
                        printk(KERN_INFO "%s send 0x%02X to tty\n", __func__, 
ch);
                        tty_insert_flip_char(port, ch, TTY_NORMAL);

which show some data coming:

[ 2051.000000] ar933x_uart_rx_chars send 0x55 to tty
[ 2052.000000] ar933x_uart_rx_chars send 0x66 to tty
[ 2053.000000] ar933x_uart_rx_chars send 0x55 to tty
[ 2054.000000] ar933x_uart_rx_chars send 0x66 to tty

root@OpenWrt:~# cat /proc/interrupts
           CPU0
  4:          0      MIPS  eth0
  5:       3724      MIPS  eth1
  7:     274415      MIPS  timer
 11:         62      MISC  serial
 14:         32      MISC
 47:          0     dummy  ath9k
ERR:          0

but no output on 'cat /dev/ttyATH0'. The questions is : Why is there no data 
printed ?
There seems to be something missing in the tty_port setup. Does anybody have a 
hint ?

Regards

Gerd

Attachment: ar934x_uart.c
Description: Binary data

_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel

Reply via email to