All of lore.kernel.org
 help / color / mirror / Atom feed
From: Michael Buesch <mb@bu3sch.de>
To: John Linville <linville@tuxdriver.com>
Cc: bcm43xx-dev@lists.berlios.de, linux-wireless@vger.kernel.org
Subject: [PATCH] ssb-pcmcia: IRQ and DMA related fixes
Date: Fri, 28 Mar 2008 10:34:55 +0100	[thread overview]
Message-ID: <200803281034.55731.mb@bu3sch.de> (raw)

Here come some IRQ and DMA related fixes for the ssb PCMCIA-host code.
Not much to say, actually. I think the patch explains itself.

Signed-off-by: Michael Buesch <mb@bu3sch.de>

---

For 2.6.25

Index: wireless-testing/drivers/ssb/pcmcia.c
===================================================================
--- wireless-testing.orig/drivers/ssb/pcmcia.c	2008-03-28 10:23:09.000000000 +0100
+++ wireless-testing/drivers/ssb/pcmcia.c	2008-03-28 10:25:00.000000000 +0100
@@ -25,17 +25,12 @@
 
 /* Define the following to 1 to enable a printk on each coreswitch. */
 #define SSB_VERBOSE_PCMCIACORESWITCH_DEBUG		0
 
 
 /* PCMCIA configuration registers */
-#define SSB_PCMCIA_CORECTL		0x00
-#define  SSB_PCMCIA_CORECTL_RESET	0x80 /* Core reset */
-#define  SSB_PCMCIA_CORECTL_IRQEN	0x04 /* IRQ enable */
-#define  SSB_PCMCIA_CORECTL_FUNCEN	0x01 /* Function enable */
-#define SSB_PCMCIA_CORECTL2		0x80
 #define SSB_PCMCIA_ADDRESS0		0x2E
 #define SSB_PCMCIA_ADDRESS1		0x30
 #define SSB_PCMCIA_ADDRESS2		0x32
 #define SSB_PCMCIA_MEMSEG		0x34
 #define SSB_PCMCIA_SPROMCTL		0x36
 #define  SSB_PCMCIA_SPROMCTL_IDLE	0
@@ -668,42 +663,55 @@ static ssize_t ssb_pcmcia_attr_sprom_sto
 }
 
 static DEVICE_ATTR(ssb_sprom, 0600,
 		   ssb_pcmcia_attr_sprom_show,
 		   ssb_pcmcia_attr_sprom_store);
 
+static int ssb_pcmcia_cor_setup(struct ssb_bus *bus, u8 cor)
+{
+	u8 val;
+	int err;
+
+	err = ssb_pcmcia_cfg_read(bus, cor, &val);
+	if (err)
+		return err;
+	val &= ~COR_SOFT_RESET;
+	val |= COR_FUNC_ENA | COR_IREQ_ENA | COR_LEVEL_REQ;
+	err = ssb_pcmcia_cfg_write(bus, cor, val);
+	if (err)
+		return err;
+	msleep(40);
+
+	return 0;
+}
+
 void ssb_pcmcia_exit(struct ssb_bus *bus)
 {
 	if (bus->bustype != SSB_BUSTYPE_PCMCIA)
 		return;
 
 	device_remove_file(&bus->host_pcmcia->dev, &dev_attr_ssb_sprom);
 }
 
 int ssb_pcmcia_init(struct ssb_bus *bus)
 {
-	u8 val, offset;
 	int err;
 
 	if (bus->bustype != SSB_BUSTYPE_PCMCIA)
 		return 0;
 
 	/* Switch segment to a known state and sync
 	 * bus->mapped_pcmcia_seg with hardware state. */
 	ssb_pcmcia_switch_segment(bus, 0);
 
-	/* Init IRQ routing */
-	if (bus->chip_id == 0x4306)
-		offset = SSB_PCMCIA_CORECTL;
-	else
-		offset = SSB_PCMCIA_CORECTL2;
-	err = ssb_pcmcia_cfg_read(bus, offset, &val);
+	/* Init the COR register. */
+	err = ssb_pcmcia_cor_setup(bus, CISREG_COR);
 	if (err)
 		goto error;
-	val |= SSB_PCMCIA_CORECTL_IRQEN | SSB_PCMCIA_CORECTL_FUNCEN;
-	err = ssb_pcmcia_cfg_write(bus, offset, val);
+	/* Some cards also need this register to get poked. */
+	err = ssb_pcmcia_cor_setup(bus, CISREG_COR + 0x80);
 	if (err)
 		goto error;
 
 	bus->sprom_size = SSB_PCMCIA_SPROM_SIZE;
 	mutex_init(&bus->sprom_mutex);
 	err = device_create_file(&bus->host_pcmcia->dev, &dev_attr_ssb_sprom);
Index: wireless-testing/drivers/ssb/main.c
===================================================================
--- wireless-testing.orig/drivers/ssb/main.c	2008-03-28 10:23:21.000000000 +0100
+++ wireless-testing/drivers/ssb/main.c	2008-03-28 10:25:00.000000000 +0100
@@ -1061,15 +1061,15 @@ void ssb_device_disable(struct ssb_devic
 EXPORT_SYMBOL(ssb_device_disable);
 
 u32 ssb_dma_translation(struct ssb_device *dev)
 {
 	switch (dev->bus->bustype) {
 	case SSB_BUSTYPE_SSB:
+	case SSB_BUSTYPE_PCMCIA:
 		return 0;
 	case SSB_BUSTYPE_PCI:
-	case SSB_BUSTYPE_PCMCIA:
 		return SSB_PCI_DMA;
 	}
 	return 0;
 }
 EXPORT_SYMBOL(ssb_dma_translation);
 

             reply	other threads:[~2008-03-28  9:36 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-03-28  9:34 Michael Buesch [this message]
2008-04-01 19:27 ` [PATCH] ssb-pcmcia: IRQ and DMA related fixes John W. Linville
2008-04-02 13:47   ` Michael Buesch

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=200803281034.55731.mb@bu3sch.de \
    --to=mb@bu3sch.de \
    --cc=bcm43xx-dev@lists.berlios.de \
    --cc=linux-wireless@vger.kernel.org \
    --cc=linville@tuxdriver.com \
    /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.