All of lore.kernel.org
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	stable@vger.kernel.org, Max Filippov <jcmvbkbc@gmail.com>
Subject: [PATCH 3.10 46/65] xtensa: xtfpga: fix hardware lockup caused by LCD driver
Date: Sat,  2 May 2015 21:04:16 +0200	[thread overview]
Message-ID: <20150502190117.991842320@linuxfoundation.org> (raw)
In-Reply-To: <20150502190114.555225285@linuxfoundation.org>

3.10-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Max Filippov <jcmvbkbc@gmail.com>

commit 4949009eb8d40a441dcddcd96e101e77d31cf1b2 upstream.

LCD driver is always built for the XTFPGA platform, but its base address
is not configurable, and is wrong for ML605/KC705. Its initialization
locks up KC705 board hardware.

Make the whole driver optional, and its base address and bus width
configurable. Implement 4-bit bus access method.

Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 arch/xtensa/Kconfig                                      |   30 ++++++++
 arch/xtensa/platforms/xtfpga/Makefile                    |    3 
 arch/xtensa/platforms/xtfpga/include/platform/hardware.h |    3 
 arch/xtensa/platforms/xtfpga/include/platform/lcd.h      |   15 ++++
 arch/xtensa/platforms/xtfpga/lcd.c                       |   55 +++++++++------
 5 files changed, 81 insertions(+), 25 deletions(-)

--- a/arch/xtensa/Kconfig
+++ b/arch/xtensa/Kconfig
@@ -287,6 +287,36 @@ menu "Executable file formats"
 
 source "fs/Kconfig.binfmt"
 
+config XTFPGA_LCD
+	bool "Enable XTFPGA LCD driver"
+	depends on XTENSA_PLATFORM_XTFPGA
+	default n
+	help
+	  There's a 2x16 LCD on most of XTFPGA boards, kernel may output
+	  progress messages there during bootup/shutdown. It may be useful
+	  during board bringup.
+
+	  If unsure, say N.
+
+config XTFPGA_LCD_BASE_ADDR
+	hex "XTFPGA LCD base address"
+	depends on XTFPGA_LCD
+	default "0x0d0c0000"
+	help
+	  Base address of the LCD controller inside KIO region.
+	  Different boards from XTFPGA family have LCD controller at different
+	  addresses. Please consult prototyping user guide for your board for
+	  the correct address. Wrong address here may lead to hardware lockup.
+
+config XTFPGA_LCD_8BIT_ACCESS
+	bool "Use 8-bit access to XTFPGA LCD"
+	depends on XTFPGA_LCD
+	default n
+	help
+	  LCD may be connected with 4- or 8-bit interface, 8-bit access may
+	  only be used with 8-bit interface. Please consult prototyping user
+	  guide for your board for the correct interface width.
+
 endmenu
 
 source "net/Kconfig"
--- a/arch/xtensa/platforms/xtfpga/Makefile
+++ b/arch/xtensa/platforms/xtfpga/Makefile
@@ -6,4 +6,5 @@
 #
 # Note 2! The CFLAGS definitions are in the main makefile...
 
-obj-y			= setup.o lcd.o
+obj-y			+= setup.o
+obj-$(CONFIG_XTFPGA_LCD) += lcd.o
--- a/arch/xtensa/platforms/xtfpga/include/platform/hardware.h
+++ b/arch/xtensa/platforms/xtfpga/include/platform/hardware.h
@@ -44,9 +44,6 @@
 
 /* UART */
 #define DUART16552_PADDR	(XCHAL_KIO_PADDR + 0x0D050020)
-/* LCD instruction and data addresses. */
-#define LCD_INSTR_ADDR		((char *)IOADDR(0x0D040000))
-#define LCD_DATA_ADDR		((char *)IOADDR(0x0D040004))
 
 /* Misc. */
 #define XTFPGA_FPGAREGS_VADDR	IOADDR(0x0D020000)
--- a/arch/xtensa/platforms/xtfpga/include/platform/lcd.h
+++ b/arch/xtensa/platforms/xtfpga/include/platform/lcd.h
@@ -11,10 +11,25 @@
 #ifndef __XTENSA_XTAVNET_LCD_H
 #define __XTENSA_XTAVNET_LCD_H
 
+#ifdef CONFIG_XTFPGA_LCD
 /* Display string STR at position POS on the LCD. */
 void lcd_disp_at_pos(char *str, unsigned char pos);
 
 /* Shift the contents of the LCD display left or right. */
 void lcd_shiftleft(void);
 void lcd_shiftright(void);
+#else
+static inline void lcd_disp_at_pos(char *str, unsigned char pos)
+{
+}
+
+static inline void lcd_shiftleft(void)
+{
+}
+
+static inline void lcd_shiftright(void)
+{
+}
+#endif
+
 #endif
--- a/arch/xtensa/platforms/xtfpga/lcd.c
+++ b/arch/xtensa/platforms/xtfpga/lcd.c
@@ -1,50 +1,63 @@
 /*
- * Driver for the LCD display on the Tensilica LX60 Board.
+ * Driver for the LCD display on the Tensilica XTFPGA board family.
+ * http://www.mytechcorp.com/cfdata/productFile/File1/MOC-16216B-B-A0A04.pdf
  *
  * This file is subject to the terms and conditions of the GNU General Public
  * License.  See the file "COPYING" in the main directory of this archive
  * for more details.
  *
  * Copyright (C) 2001, 2006 Tensilica Inc.
+ * Copyright (C) 2015 Cadence Design Systems Inc.
  */
 
-/*
- *
- * FIXME: this code is from the examples from the LX60 user guide.
- *
- * The lcd_pause function does busy waiting, which is probably not
- * great. Maybe the code could be changed to use kernel timers, or
- * change the hardware to not need to wait.
- */
-
+#include <linux/delay.h>
 #include <linux/init.h>
 #include <linux/io.h>
 
 #include <platform/hardware.h>
 #include <platform/lcd.h>
-#include <linux/delay.h>
 
-#define LCD_PAUSE_ITERATIONS	4000
+/* LCD instruction and data addresses. */
+#define LCD_INSTR_ADDR		((char *)IOADDR(CONFIG_XTFPGA_LCD_BASE_ADDR))
+#define LCD_DATA_ADDR		(LCD_INSTR_ADDR + 4)
+
 #define LCD_CLEAR		0x1
 #define LCD_DISPLAY_ON		0xc
 
 /* 8bit and 2 lines display */
 #define LCD_DISPLAY_MODE8BIT	0x38
+#define LCD_DISPLAY_MODE4BIT	0x28
 #define LCD_DISPLAY_POS		0x80
 #define LCD_SHIFT_LEFT		0x18
 #define LCD_SHIFT_RIGHT		0x1c
 
+static void lcd_put_byte(u8 *addr, u8 data)
+{
+#ifdef CONFIG_XTFPGA_LCD_8BIT_ACCESS
+	ACCESS_ONCE(*addr) = data;
+#else
+	ACCESS_ONCE(*addr) = data & 0xf0;
+	ACCESS_ONCE(*addr) = (data << 4) & 0xf0;
+#endif
+}
+
 static int __init lcd_init(void)
 {
-	*LCD_INSTR_ADDR = LCD_DISPLAY_MODE8BIT;
+	ACCESS_ONCE(*LCD_INSTR_ADDR) = LCD_DISPLAY_MODE8BIT;
 	mdelay(5);
-	*LCD_INSTR_ADDR = LCD_DISPLAY_MODE8BIT;
+	ACCESS_ONCE(*LCD_INSTR_ADDR) = LCD_DISPLAY_MODE8BIT;
 	udelay(200);
-	*LCD_INSTR_ADDR = LCD_DISPLAY_MODE8BIT;
+	ACCESS_ONCE(*LCD_INSTR_ADDR) = LCD_DISPLAY_MODE8BIT;
+	udelay(50);
+#ifndef CONFIG_XTFPGA_LCD_8BIT_ACCESS
+	ACCESS_ONCE(*LCD_INSTR_ADDR) = LCD_DISPLAY_MODE4BIT;
+	udelay(50);
+	lcd_put_byte(LCD_INSTR_ADDR, LCD_DISPLAY_MODE4BIT);
 	udelay(50);
-	*LCD_INSTR_ADDR = LCD_DISPLAY_ON;
+#endif
+	lcd_put_byte(LCD_INSTR_ADDR, LCD_DISPLAY_ON);
 	udelay(50);
-	*LCD_INSTR_ADDR = LCD_CLEAR;
+	lcd_put_byte(LCD_INSTR_ADDR, LCD_CLEAR);
 	mdelay(10);
 	lcd_disp_at_pos("XTENSA LINUX", 0);
 	return 0;
@@ -52,10 +65,10 @@ static int __init lcd_init(void)
 
 void lcd_disp_at_pos(char *str, unsigned char pos)
 {
-	*LCD_INSTR_ADDR = LCD_DISPLAY_POS | pos;
+	lcd_put_byte(LCD_INSTR_ADDR, LCD_DISPLAY_POS | pos);
 	udelay(100);
 	while (*str != 0) {
-		*LCD_DATA_ADDR = *str;
+		lcd_put_byte(LCD_DATA_ADDR, *str);
 		udelay(200);
 		str++;
 	}
@@ -63,13 +76,13 @@ void lcd_disp_at_pos(char *str, unsigned
 
 void lcd_shiftleft(void)
 {
-	*LCD_INSTR_ADDR = LCD_SHIFT_LEFT;
+	lcd_put_byte(LCD_INSTR_ADDR, LCD_SHIFT_LEFT);
 	udelay(50);
 }
 
 void lcd_shiftright(void)
 {
-	*LCD_INSTR_ADDR = LCD_SHIFT_RIGHT;
+	lcd_put_byte(LCD_INSTR_ADDR, LCD_SHIFT_RIGHT);
 	udelay(50);
 }
 



  parent reply	other threads:[~2015-05-02 19:52 UTC|newest]

Thread overview: 87+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-05-02 19:03 [PATCH 3.10 00/65] 3.10.77-stable review Greg Kroah-Hartman
2015-05-02 19:03 ` [PATCH 3.10 01/65] ip_forward: Drop frames with attached skb->sk Greg Kroah-Hartman
2015-05-02 19:03 ` [PATCH 3.10 02/65] tcp: fix possible deadlock in tcp_send_fin() Greg Kroah-Hartman
2015-05-02 19:03 ` [PATCH 3.10 03/65] tcp: avoid looping " Greg Kroah-Hartman
2015-05-02 19:03 ` [PATCH 3.10 04/65] Btrfs: fix log tree corruption when fs mounted with -o discard Greg Kroah-Hartman
2015-05-02 19:03 ` [PATCH 3.10 05/65] Btrfs: fix inode eviction infinite loop after cloning into it Greg Kroah-Hartman
2015-05-02 19:03 ` [PATCH 3.10 06/65] sched/idle/x86: Restore mwait_idle() to fix boot hangs, to improve power savings and to improve performance Greg Kroah-Hartman
2015-05-02 19:03 ` [PATCH 3.10 07/65] usb: gadget: composite: enable BESL support Greg Kroah-Hartman
2015-05-02 19:03 ` [PATCH 3.10 08/65] KVM: s390: Zero out current VMDB of STSI before including level3 data Greg Kroah-Hartman
2015-05-02 19:03 ` [PATCH 3.10 09/65] s390/hibernate: fix save and restore of kernel text section Greg Kroah-Hartman
2015-05-02 19:03 ` [PATCH 3.10 11/65] MIPS: Hibernate: flush TLB entries earlier Greg Kroah-Hartman
2015-05-02 19:03 ` [PATCH 3.10 12/65] cdc-wdm: fix endianness bug in debug statements Greg Kroah-Hartman
2015-05-02 19:03 ` [PATCH 3.10 13/65] spi: spidev: fix possible arithmetic overflow for multi-transfer message Greg Kroah-Hartman
2015-05-02 19:03 ` [PATCH 3.10 14/65] ring-buffer: Replace this_cpu_*() with __this_cpu_*() Greg Kroah-Hartman
2015-05-02 19:03 ` [PATCH 3.10 15/65] power_supply: lp8788-charger: Fix leaked power supply on probe fail Greg Kroah-Hartman
2015-05-02 19:03 ` [PATCH 3.10 16/65] ARM: 8320/1: fix integer overflow in ELF_ET_DYN_BASE Greg Kroah-Hartman
2015-05-02 19:03 ` [PATCH 3.10 17/65] ARM: S3C64XX: Use fixed IRQ bases to avoid conflicts on Cragganmore Greg Kroah-Hartman
2015-05-02 19:03 ` [PATCH 3.10 18/65] usb: phy: Find the right match in devm_usb_phy_match Greg Kroah-Hartman
2015-05-02 19:03 ` [PATCH 3.10 19/65] usb: define a generic USB_RESUME_TIMEOUT macro Greg Kroah-Hartman
2015-05-02 19:03 ` [PATCH 3.10 20/65] usb: host: r8a66597: use new USB_RESUME_TIMEOUT Greg Kroah-Hartman
2015-05-02 19:03 ` [PATCH 3.10 21/65] usb: host: isp116x: " Greg Kroah-Hartman
2015-05-02 19:03 ` [PATCH 3.10 22/65] usb: host: xhci: " Greg Kroah-Hartman
2015-05-02 19:03 ` [PATCH 3.10 23/65] usb: host: sl811: " Greg Kroah-Hartman
2015-05-02 19:03 ` [PATCH 3.10 24/65] usb: core: hub: " Greg Kroah-Hartman
2015-05-02 19:03 ` [PATCH 3.10 25/65] ALSA: emu10k1: dont deadlock in proc-functions Greg Kroah-Hartman
2015-05-02 19:03 ` [PATCH 3.10 26/65] Input: elantech - fix absolute mode setting on some ASUS laptops Greg Kroah-Hartman
2015-05-02 19:03 ` [PATCH 3.10 27/65] fs/binfmt_elf.c: fix bug in loading of PIE binaries Greg Kroah-Hartman
2015-05-02 19:03 ` [PATCH 3.10 28/65] ptrace: fix race between ptrace_resume() and wait_task_stopped() Greg Kroah-Hartman
2015-05-02 19:03 ` [PATCH 3.10 29/65] rtlwifi: rtl8192cu: Add new USB ID Greg Kroah-Hartman
2015-05-02 19:04 ` [PATCH 3.10 30/65] rtlwifi: rtl8192cu: Add new device ID Greg Kroah-Hartman
2015-05-02 19:04 ` [PATCH 3.10 31/65] parport: disable PC-style parallel port support on cris Greg Kroah-Hartman
2015-05-02 19:04 ` [PATCH 3.10 32/65] drivers: parport: Kconfig: exclude h8300 for PARPORT_PC Greg Kroah-Hartman
2015-05-02 19:04 ` [PATCH 3.10 33/65] console: Disable VGA text console support on cris Greg Kroah-Hartman
2015-05-02 19:04 ` [PATCH 3.10 34/65] video: vgacon: Dont build on arm64 Greg Kroah-Hartman
2015-05-02 19:04 ` [PATCH 3.10 35/65] arm64: kernel: compiling issue, need delete read_current_timer() Greg Kroah-Hartman
2015-05-02 19:04 ` [PATCH 3.10 36/65] ext4: make fsync to sync parent dir in no-journal for real this time Greg Kroah-Hartman
2015-05-02 19:04 ` [PATCH 3.10 37/65] powerpc/perf: Cap 64bit userspace backtraces to PERF_MAX_STACK_DEPTH Greg Kroah-Hartman
2015-05-02 19:04 ` [PATCH 3.10 38/65] tools/power turbostat: Use $(CURDIR) instead of $(PWD) and add support for O= option in Makefile Greg Kroah-Hartman
2015-05-02 19:04 ` [PATCH 3.10 39/65] UBI: account for bitflips in both the VID header and data Greg Kroah-Hartman
2015-05-02 19:04 ` [PATCH 3.10 40/65] UBI: fix out of bounds write Greg Kroah-Hartman
2015-05-02 19:04 ` [PATCH 3.10 41/65] UBI: initialize LEB number variable Greg Kroah-Hartman
2015-05-02 19:04 ` [PATCH 3.10 42/65] UBI: fix check for "too many bytes" Greg Kroah-Hartman
2015-05-02 19:04 ` [PATCH 3.10 43/65] scsi: storvsc: Fix a bug in copy_from_bounce_buffer() Greg Kroah-Hartman
2015-05-02 19:04 ` [PATCH 3.10 44/65] drivers: parport: Kconfig: exclude arm64 for PARPORT_PC Greg Kroah-Hartman
2015-05-02 19:04 ` [PATCH 3.10 45/65] ACPICA: Utilities: split IO address types from data type models Greg Kroah-Hartman
2015-05-02 19:04 ` Greg Kroah-Hartman [this message]
2015-05-02 19:04 ` [PATCH 3.10 47/65] xtensa: provide __NR_sync_file_range2 instead of __NR_sync_file_range Greg Kroah-Hartman
2015-05-02 19:04 ` [PATCH 3.10 48/65] gpio: mvebu: Fix mask/unmask managment per irq chip type Greg Kroah-Hartman
2015-05-03  8:20   ` Christoph Biedl
2015-05-04 21:41     ` Greg Kroah-Hartman
2015-05-06 18:06       ` Christoph Biedl
2015-05-02 19:04 ` [PATCH 3.10 49/65] Drivers: hv: vmbus: Fix a bug in the error path in vmbus_open() Greg Kroah-Hartman
2015-05-02 19:04 ` [PATCH 3.10 50/65] mvsas: fix panic on expander attached SATA devices Greg Kroah-Hartman
2015-05-02 19:04 ` [PATCH 3.10 51/65] [media] stk1160: Make sure current buffer is released Greg Kroah-Hartman
2015-05-02 19:04 ` [PATCH 3.10 52/65] IB/core: disallow registering 0-sized memory region Greg Kroah-Hartman
2015-05-02 19:04 ` [PATCH 3.10 53/65] IB/core: dont disallow registering region starting at 0x0 Greg Kroah-Hartman
2015-05-02 19:04 ` [PATCH 3.10 54/65] IB/mlx4: Fix WQE LSO segment calculation Greg Kroah-Hartman
2015-05-02 19:04 ` [PATCH 3.10 55/65] tracing: Handle ftrace_dump() atomic context in graph_trace_open() Greg Kroah-Hartman
2015-05-02 19:04 ` [PATCH 3.10 56/65] i2c: core: Export bus recovery functions Greg Kroah-Hartman
2015-05-02 19:04 ` [PATCH 3.10 57/65] drm/radeon: fix doublescan modes (v2) Greg Kroah-Hartman
2015-05-02 19:04 ` [PATCH 3.10 58/65] drm/i915: cope with large i2c transfers Greg Kroah-Hartman
2015-05-02 19:04 ` [PATCH 3.10 59/65] RCU pathwalk breakage when running into a symlink overmounting something Greg Kroah-Hartman
2015-05-02 19:04 ` [PATCH 3.10 60/65] ksoftirqd: Enable IRQs and call cond_resched() before poking RCU Greg Kroah-Hartman
2015-05-02 19:04 ` [PATCH 3.10 61/65] e1000: add dummy allocator to fix race condition between mtu change and netpoll Greg Kroah-Hartman
2015-05-02 19:04 ` [PATCH 3.10 62/65] lib: memzero_explicit: use barrier instead of OPTIMIZER_HIDE_VAR Greg Kroah-Hartman
2015-05-02 19:04 ` [PATCH 3.10 63/65] wl18xx: show rx_frames_per_rates as an array as it really is Greg Kroah-Hartman
2015-05-02 19:04 ` [PATCH 3.10 64/65] C6x: time: Ensure consistency in __init Greg Kroah-Hartman
2015-05-02 19:04 ` [PATCH 3.10 65/65] memstick: mspro_block: add missing curly braces Greg Kroah-Hartman
2015-05-03 19:49 ` [PATCH 3.10 00/65] 3.10.77-stable review Guenter Roeck
2015-05-04  4:40   ` Guenter Roeck
2015-05-04  8:09     ` Heiko Carstens
2015-05-04  9:54       ` Jiri Slaby
2015-05-04 10:40         ` Heiko Carstens
2015-05-04 21:38           ` Greg Kroah-Hartman
2015-05-04 18:51       ` Guenter Roeck
2015-05-05  4:42     ` Guenter Roeck
2015-05-05 21:59       ` Greg Kroah-Hartman
2015-05-05 22:01       ` Patch "s390: Fix build error" has been added to the 3.10-stable tree gregkh
2015-05-04 21:40   ` [PATCH 3.10 00/65] 3.10.77-stable review Greg Kroah-Hartman
2015-05-04 16:16 ` Shuah Khan
2015-05-04 21:42   ` Greg Kroah-Hartman
2015-05-04 22:13 ` Shuah Khan
2015-05-04 22:24   ` Guenter Roeck
2015-05-05 21:58   ` Greg Kroah-Hartman
2015-05-05 22:05 ` Greg Kroah-Hartman
2015-05-06  3:31   ` Guenter Roeck
2015-05-06 16:01   ` Shuah Khan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20150502190117.991842320@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=jcmvbkbc@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=stable@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.