at91sam9x5: uart (not usart) broken
Between lk 3.10.0 and lk 3.11.0-rc4 the uarts (not usarts) have been broken in the at91sam9x5 family. The DT files have been re-factored for uarts but look correct.
So suspicion moves to the atmel_serial driver which enjoyed a lot of changes in June.
Tested on a at91sam9g25 (Aria G25) which is a member of the at91sam9x5 family with two uarts (four usarts and a debug serial port). The failure looks like this in dmesg:
console [ttyS0] enabled
f801c000.serial: ttyS1 at MMIO 0xf801c000 (irq = 23) is a ATMEL_SERIAL f8020000.serial: ttyS2 at MMIO 0xf8020000 (irq = 24) is a ATMEL_SERIAL f8024000.serial: ttyS3 at MMIO 0xf8024000 (irq = 25) is a ATMEL_SERIAL
atmel_usart: probe of f8040000.serial failed with error -2 f8028000.serial: ttyS4 at MMIO 0xf8028000 (irq = 32) is a ATMEL_SERIAL
The device at 0xf8040000 is uart0 . My DT file was trying to bring up uart0 but not uart1.
Doug Gilbert
Hello Doug,
Quoted 7 lines · Douglas Gilbert
Between lk 3.10.0 and lk 3.11.0-rc4 the uarts (not usarts) have been broken in the at91sam9x5 family. The DT files have been re-factored for uarts but look correct.
So suspicion moves to the
atmel_serialdriver which enjoyed a lot of changes in June.
My patch (the last one in log history) is adding error checks on clk_get and clk_enable (clk_prepare_enable) calls.
I think the issue you're having comes from these new checks, and the fact that uart clks DT entries are missing.
The previous version was just silently ignoring these errors. It may work if these clks (uart clks) are already enabled by bootstrap or bootloader.
Anyway, I think the cleaner way for resolving this issue is to apply the patch
I joined in attachment.
Could you test it (I don't have any sam9x5 boards), and if this works I'll submit
it.
Best Regards,
Boris
Quoted 11 lines
Tested on a at91sam9g25 (Aria G25) which is a member of the at91sam9x5 family with two uarts (four usarts and a debug serial port). The failure looks like this in dmesg:
console [ttyS0] enabled
f801c000.serial: ttyS1 at MMIO0xf801c000(irq = 23) is aATMEL_SERIALf8020000.serial: ttyS2 at MMIO0xf8020000(irq = 24) is aATMEL_SERIALf8024000.serial: ttyS3 at MMIO0xf8024000(irq = 25) is aATMEL_SERIAL
atmel_usart: probe of f8040000.serial failed with error -2 f8028000.serial: ttyS4 at MMIO0xf8028000(irq = 32) is aATMEL_SERIAL
Quoted 4 lines
The device at
0xf8040000is uart0 . My DT file was trying to bring up uart0 but not uart1.Doug Gilbert
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-ARM-at91-add-missing-uart-clocks-DT-entries.patch
Type: text/x-patch
Size: 1172 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20130807/4f82ce04/attachment.bin>
Quoted 20 lines · boris brezillon
Hello Doug,
Quoted 7 lines · Douglas Gilbert
Between lk 3.10.0 and lk 3.11.0-rc4 the uarts (not usarts) have been broken in the at91sam9x5 family. The DT files have been re-factored for uarts but look correct.
So suspicion moves to the
atmel_serialdriver which enjoyed a lot of changes in June.My patch (the last one in log history) is adding error checks on
clk_getandclk_enable(clk_prepare_enable) calls.
I think the issue you're having comes from these new checks, and the fact that uart clks DT entries are missing.The previous version was just silently ignoring these errors. It may work if these clks (uart clks) are already enabled by bootstrap or bootloader.
Quoted 5 lines
Anyway, I think the cleaner way for resolving this issue is to apply the patch I joined in attachment.
Could you test it (I don't have any sam9x5 boards), and if this works I'll submit it.
Hi Boris,
Yes, your patch works with lk 3.11.0-rc4 on a at91sam9g25 (aria G25). So please apply to the current rc series.
Also since in the lk 3.10 series this is silently broken and/or works by accident (e.g. when a boot loader sets the uart clocks) then perhaps this fix should be sent to Greg K-H for inclusion in the lk 3.10.x stable series.
Doug Gilbert
Quoted 16 lines
Quoted 15 lines
Tested on a at91sam9g25 (Aria G25) which is a member of the at91sam9x5 family with two uarts (four usarts and a debug serial port). The failure looks like this in dmesg:
console [ttyS0] enabled
f801c000.serial: ttyS1 at MMIO0xf801c000(irq = 23) is aATMEL_SERIALf8020000.serial: ttyS2 at MMIO0xf8020000(irq = 24) is aATMEL_SERIALf8024000.serial: ttyS3 at MMIO0xf8024000(irq = 25) is aATMEL_SERIAL
atmel_usart: probe of f8040000.serial failed with error -2 f8028000.serial: ttyS4 at MMIO0xf8028000(irq = 32) is aATMEL_SERIALThe device at
0xf8040000is uart0 . My DT file was trying to bring up uart0 but not uart1.Doug Gilbert