You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
86 lines
2.5 KiB
86 lines
2.5 KiB
From patchwork Wed Apr 2 19:38:31 2014
|
|
Content-Type: text/plain; charset="utf-8"
|
|
MIME-Version: 1.0
|
|
Content-Transfer-Encoding: 7bit
|
|
Subject: [OpenWrt-Devel,
|
|
3/7] lantiq: BT Home Hub 2B support - nand driver locking
|
|
Date: Wed, 02 Apr 2014 18:38:31 -0000
|
|
From: Ben Mulvihill <ben.mulvihill@gmail.com>
|
|
X-Patchwork-Id: 5112
|
|
Message-Id: <1396467511.31327.41.camel@merveille.lan>
|
|
To: openwrt-devel@lists.openwrt.org
|
|
|
|
As a result of changeset 40310, the xway nand driver
|
|
now acquires ebu_lock in the chip select function, and
|
|
holds it for the entire duration of an operation until
|
|
the chip is deselected. There is surely no longer any
|
|
need therefore also to acquire the lock in each separate
|
|
read or write function. This patch removes that code.
|
|
|
|
Signed-off-by: Ben Mulvihill <ben.mulvihill@gmail.com>
|
|
|
|
---
|
|
|
|
|
|
--- a/drivers/mtd/nand/xway_nand.c
|
|
+++ b/drivers/mtd/nand/xway_nand.c
|
|
@@ -102,7 +102,6 @@ static void xway_cmd_ctrl(struct mtd_inf
|
|
{
|
|
struct nand_chip *this = mtd->priv;
|
|
unsigned long nandaddr = (unsigned long) this->IO_ADDR_W;
|
|
- unsigned long flags;
|
|
|
|
if (ctrl & NAND_CTRL_CHANGE) {
|
|
if (ctrl & NAND_CLE)
|
|
@@ -112,11 +111,9 @@ static void xway_cmd_ctrl(struct mtd_inf
|
|
}
|
|
|
|
if (cmd != NAND_CMD_NONE) {
|
|
- spin_lock_irqsave(&ebu_lock, flags);
|
|
writeb(cmd, (void __iomem *) (nandaddr | xway_latchcmd));
|
|
while ((ltq_ebu_r32(EBU_NAND_WAIT) & NAND_WAIT_WR_C) == 0)
|
|
;
|
|
- spin_unlock_irqrestore(&ebu_lock, flags);
|
|
}
|
|
}
|
|
|
|
@@ -129,12 +126,9 @@ static unsigned char xway_read_byte(stru
|
|
{
|
|
struct nand_chip *this = mtd->priv;
|
|
unsigned long nandaddr = (unsigned long) this->IO_ADDR_R;
|
|
- unsigned long flags;
|
|
int ret;
|
|
|
|
- spin_lock_irqsave(&ebu_lock, flags);
|
|
ret = ltq_r8((void __iomem *)(nandaddr | NAND_READ_DATA));
|
|
- spin_unlock_irqrestore(&ebu_lock, flags);
|
|
|
|
return ret;
|
|
}
|
|
@@ -143,26 +137,20 @@ static void xway_read_buf(struct mtd_inf
|
|
{
|
|
struct nand_chip *this = mtd->priv;
|
|
unsigned long nandaddr = (unsigned long) this->IO_ADDR_R;
|
|
- unsigned long flags;
|
|
int i;
|
|
|
|
- spin_lock_irqsave(&ebu_lock, flags);
|
|
for (i = 0; i < len; i++)
|
|
buf[i] = ltq_r8((void __iomem *)(nandaddr | NAND_READ_DATA));
|
|
- spin_unlock_irqrestore(&ebu_lock, flags);
|
|
}
|
|
|
|
static void xway_write_buf(struct mtd_info *mtd, const u_char *buf, int len)
|
|
{
|
|
struct nand_chip *this = mtd->priv;
|
|
unsigned long nandaddr = (unsigned long) this->IO_ADDR_W;
|
|
- unsigned long flags;
|
|
int i;
|
|
|
|
- spin_lock_irqsave(&ebu_lock, flags);
|
|
for (i = 0; i < len; i++)
|
|
ltq_w8(buf[i], (void __iomem *)nandaddr);
|
|
- spin_unlock_irqrestore(&ebu_lock, flags);
|
|
}
|
|
|
|
static int xway_nand_probe(struct platform_device *pdev)
|
|
|