diff options
| author | Linus Walleij <linus.walleij@linaro.org> | 2012-03-21 15:15:18 -0400 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2012-04-22 19:21:41 -0400 |
| commit | c1f341206d1098b9348d38b51ecd02261e9589ea (patch) | |
| tree | d8e8f91547b300485e054350660e908e916fcfa2 /drivers/tty | |
| parent | 7aea005ad193b72ad3681b0a8919774a86a4c65c (diff) | |
serial: PL011: move interrupt clearing
commit c3d8b76f61586714cdc5f219ba45592a54caaa55 upstream.
Commit 360f748b204275229f8398cb2f9f53955db1503b
"serial: PL011: clear pending interrupts"
attempts to clear interrupts by writing to a
yet-unassigned memory address. This fixes the issue.
The breaking patch is marked for stable so should be
carried along with the other patch.
Cc: Shreshtha Kumar Sahu <shreshthakumar.sahu@stericsson.com>
Cc: Russell King <linux@arm.linux.org.uk>
Cc: Nicolas Pitre <nico@fluxnic.net>
Reported-by: Viresh Kumar <viresh.kumar@st.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Tested-by: Grant Likely <grant.likely@secretlab.ca>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/tty')
| -rw-r--r-- | drivers/tty/serial/amba-pl011.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/drivers/tty/serial/amba-pl011.c b/drivers/tty/serial/amba-pl011.c index 6867599f549..21dc4b761ed 100644 --- a/drivers/tty/serial/amba-pl011.c +++ b/drivers/tty/serial/amba-pl011.c | |||
| @@ -1907,10 +1907,6 @@ static int pl011_probe(struct amba_device *dev, const struct amba_id *id) | |||
| 1907 | goto unmap; | 1907 | goto unmap; |
| 1908 | } | 1908 | } |
| 1909 | 1909 | ||
| 1910 | /* Ensure interrupts from this UART are masked and cleared */ | ||
| 1911 | writew(0, uap->port.membase + UART011_IMSC); | ||
| 1912 | writew(0xffff, uap->port.membase + UART011_ICR); | ||
| 1913 | |||
| 1914 | uap->vendor = vendor; | 1910 | uap->vendor = vendor; |
| 1915 | uap->lcrh_rx = vendor->lcrh_rx; | 1911 | uap->lcrh_rx = vendor->lcrh_rx; |
| 1916 | uap->lcrh_tx = vendor->lcrh_tx; | 1912 | uap->lcrh_tx = vendor->lcrh_tx; |
| @@ -1927,6 +1923,10 @@ static int pl011_probe(struct amba_device *dev, const struct amba_id *id) | |||
| 1927 | uap->port.line = i; | 1923 | uap->port.line = i; |
| 1928 | pl011_dma_probe(uap); | 1924 | pl011_dma_probe(uap); |
| 1929 | 1925 | ||
| 1926 | /* Ensure interrupts from this UART are masked and cleared */ | ||
| 1927 | writew(0, uap->port.membase + UART011_IMSC); | ||
| 1928 | writew(0xffff, uap->port.membase + UART011_ICR); | ||
| 1929 | |||
| 1930 | snprintf(uap->type, sizeof(uap->type), "PL011 rev%u", amba_rev(dev)); | 1930 | snprintf(uap->type, sizeof(uap->type), "PL011 rev%u", amba_rev(dev)); |
| 1931 | 1931 | ||
| 1932 | amba_ports[i] = uap; | 1932 | amba_ports[i] = uap; |
