fsl_lpuart/VF610: Division by zero.
Bill Pringlemeir
bpringlemeir at nbsps.com
Mon Jul 28 15:38:39 PDT 2014
On 26 Jul 2014, stefan at agner.ch wrote:
> Hi Bill,
>
> Am 2014-07-26 00:36, schrieb Bill Pringlemeir:
>> On 25 Jul 2014, bpringlemeir at nbsps.com wrote:
>
>>> I looked at the vmlinux objdump and it is here,
>>>
>>> static int lpuart_dma_rx_request(struct uart_port *port)
>>> {
>>> ...
>>> sport->dma_rx_timeout = (sport->port.timeout - HZ / 50) *
>>> FSL_UART_RX_DMA_BUFFER_SIZE * 3 /
>>> sport->rxfifo_size / 2;
>>>
>>> The variable 'sport->rxfifo_size' is set in lpuart_setup_watermark()
>>> and this is called after lpuart_dma_rx_request() in
>>> lpuart_startup().
> I observed this division by zero too, I recently sent a patch for
> that.
> http://lists.infradead.org/pipermail/linux-arm-kernel/2014-July/268772.html
> Greg already added that to his tty-next tree:
> https://git.kernel.org/cgit/linux/kernel/git/gregkh/tty.git/tree/drivers/tty/serial/fsl_lpuart.c?h=tty-next#n1309
> I also observed that DMA did not work yet, hence I a created a second
> patch:
> http://lists.infradead.org/pipermail/linux-arm-kernel/2014-July/268773.html
>
> But eDMA in general was broken too, this patch solved that, hence you
> might want apply that patch too:
> http://lists.infradead.org/pipermail/linux-arm-kernel/2014-July/268199.html
>
> All patches are lined up for 3.17, so things should be smooth from
> that release on.
Thanks, I applied all three patches to the arm-soc 'for-next' and now
the serial ports seems to be working. I am using the Tower board and
they have a 'TWR-SER2' card.
http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=TWR-SER2
Unfortunately, the IOMUX conflicts with the Audio daughter-board in
vf610-twr.dts. The I/O conflicts are,
VF610_PAD_PTB6__FTM0_CH6
VF610_PAD_PTB7__FTM0_CH7
versus
VF610_PAD_PTB6__UART2_TX
VF610_PAD_PTB7__UART2_RX
Below are the DT changes to get two 'ttyLP' working with the Tower
System which probably will never apply cleanly, but are just meant for
reference.
--- a/arch/arm/boot/dts/vf610-twr.dts
+++ b/arch/arm/boot/dts/vf610-twr.dts
@@ -58,7 +59,7 @@
regulator-max-microvolt = <3300000>;
};
};
-
+/*
sound {
compatible = "simple-audio-card";
simple-audio-card,format = "i2s";
@@ -87,6 +88,7 @@
bitclock-master;
};
};
+*/
};
&adc0 {
@@ -241,7 +243,7 @@
};
-
+/*
pinctrl_pwm0: pwm0grp {
fsl,pins = <
VF610_PAD_PTB0__FTM0_CH0 0x1582
@@ -252,7 +254,7 @@
VF610_PAD_PTB7__FTM0_CH7 0x1582
>;
};
-
+*/
pinctrl_sai2: sai2grp {
fsl,pins = <
VF610_PAD_PTA16__SAI2_TX_BCLK 0x02ed
@@ -271,6 +273,13 @@
VF610_PAD_PTB5__UART1_RX 0x21a1
>;
};
+
+ pinctrl_uart2: uart2grp {
+ fsl,pins = <
+ VF610_PAD_PTB6__UART2_TX 0x21a2
+ VF610_PAD_PTB7__UART2_RX 0x21a1
+ >;
+ };
};
};
@@ -284,21 +293,31 @@
status = "okay";
};
+/*
&pwm0 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_pwm0>;
status = "okay";
};
-
&sai2 {
#sound-dai-cells = <0>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_sai2>;
status = "okay";
};
-
+*/
+&uart2 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_uart2>;
+ status = "okay";
+};
The standard jumpers on the Tower will either route ttyLP1 to the 'USB'
or to the 'serial board'; ttyLP2 will be the opposite with the 'serial
board' or the 'USB'.
Thanks again. I should have read the linux-arm list more diligently.
Bill Pringlemeir.
More information about the linux-arm-kernel
mailing list