All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stefano Brivio <stefano.brivio@polimi.it>
To: netdev@vger.kernel.org
Cc: Edgar Hucek <hostmaster@ed-soft.at>,
	Matthew Garrett <mjg59@srcf.ucam.org>,
	Louis E Garcia II <louisg00@bellsouth.net>,
	Stefano Brivio <stefano.brivio@polimi.it>
Subject: [patch 02/10] [RFT] bcm43xx: functions for access to PCI-E registers and PCI-E MDIO
Date: Fri, 19 May 2006 00:00:02 +0200	[thread overview]
Message-ID: <20060519155630.586019000@polimi.it> (raw)
In-Reply-To: 20060519154451.042749000@polimi.it

[-- Attachment #1: bcm43xx-pcie_core_rw.diff --]
[-- Type: text/plain, Size: 2778 bytes --]

Add read and write functions for PCI-E registers
Add write function for MDIO slaves.

Signed-off-by: Stefano Brivio <stefano.brivio@polimi.it>

Index: wireless-dev/drivers/net/wireless/bcm43xx/bcm43xx_main.c
===================================================================
--- wireless-dev.orig/drivers/net/wireless/bcm43xx/bcm43xx_main.c
+++ wireless-dev/drivers/net/wireless/bcm43xx/bcm43xx_main.c
@@ -2973,6 +2973,45 @@ out:
 	return err;
 }
 
+static u32 bcm43xx_pcie_reg_read(struct bcm43xx_private *bcm, u32 address)
+{
+	bcm43xx_write32(bcm, BCM43xx_PCIECORE_REG_ADDR, address);
+	return bcm43xx_read32(bcm, BCM43xx_PCIECORE_REG_DATA);
+}
+
+static void bcm43xx_pcie_reg_write(struct bcm43xx_private *bcm, u32 address,
+				   u32 data)
+{
+	bcm43xx_write32(bcm, BCM43xx_PCIECORE_REG_ADDR, address);
+	bcm43xx_write32(bcm, BCM43xx_PCIECORE_REG_DATA, data);
+}
+
+static int bcm43xx_pcie_mdio_write(struct bcm43xx_private *bcm, u8 dev, u8 reg,
+				   u16 data)
+{
+	int i;
+
+	bcm43xx_write32(bcm, BCM43xx_PCIECORE_MDIO_CTL, 0x0082);
+	bcm43xx_write32(bcm, BCM43xx_PCIECORE_MDIO_DATA, BCM43xx_PCIE_MDIO_ST |
+			BCM43xx_PCIE_MDIO_WT | (dev << BCM43xx_PCIE_MDIO_DEV) |
+			(reg << BCM43xx_PCIE_MDIO_REG) | BCM43xx_PCIE_MDIO_TA |
+			data);
+	udelay(10);
+
+	for (i = 0; i < 10; i++) {
+		if (bcm43xx_read32(bcm, BCM43xx_PCIECORE_MDIO_CTL) &
+		    BCM43xx_PCIE_MDIO_TC)
+			return 0;
+		udelay(1000);
+	}
+	if (bcm43xx_read32(bcm, BCM43xx_PCIECORE_MDIO_CTL) &
+	    BCM43xx_PCIE_MDIO_TC)
+		return 0;
+
+	printk(KERN_ERR PFX "Error: MDIO transaction failed\n");
+	return -EIO;
+}
+
 /* Make an I/O Core usable. "core_mask" is the bitmask of the cores to enable.
  * To enable core 0, pass a core_mask of 1<<0
  */
Index: wireless-dev/drivers/net/wireless/bcm43xx/bcm43xx.h
===================================================================
--- wireless-dev.orig/drivers/net/wireless/bcm43xx/bcm43xx.h
+++ wireless-dev/drivers/net/wireless/bcm43xx/bcm43xx.h
@@ -154,6 +154,24 @@
 #define BCM43xx_SBTOPCI2_PREFETCH	0x4
 #define BCM43xx_SBTOPCI2_BURST		0x8
 
+/* PCI-E core registers. */
+#define BCM43xx_PCIECORE_REG_ADDR	0x0130
+#define BCM43xx_PCIECORE_REG_DATA	0x0134
+#define BCM43xx_PCIECORE_MDIO_CTL	0x0128
+#define BCM43xx_PCIECORE_MDIO_DATA	0x012C
+
+/* PCI-E registers. */
+#define BCM43xx_PCIE_TLP_WORKAROUND	0x0004
+#define BCM43xx_PCIE_DLLP_LINKCTL	0x0100
+
+/* PCI-E MDIO bits. */
+#define BCM43xx_PCIE_MDIO_ST	0x40000000
+#define BCM43xx_PCIE_MDIO_WT	0x10000000
+#define BCM43xx_PCIE_MDIO_DEV	22
+#define BCM43xx_PCIE_MDIO_REG	18
+#define BCM43xx_PCIE_MDIO_TA	0x00020000
+#define BCM43xx_PCIE_MDIO_TC	0x0100
+
 /* Chipcommon capabilities. */
 #define BCM43xx_CAPABILITIES_PCTL		0x00040000
 #define BCM43xx_CAPABILITIES_PLLMASK		0x00030000

--
Ciao
Stefano

  parent reply	other threads:[~2006-05-19 15:56 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-05-19 15:44 [patch 00/10] [RFT] bcm43xx: support for PCI-E devices Stefano Brivio
2006-05-18 22:00 ` [patch 01/10] [RFT] bcm43xx: add core ID for PCI-E core Stefano Brivio
2006-05-18 22:00 ` Stefano Brivio [this message]
2006-05-18 22:00 ` [patch 03/10] [RFT] bcm43xx: fix reading core ID and revision from sb_id_hi Stefano Brivio
2006-05-18 22:00 ` [patch 04/10] [RFT] bcm43xx: use PCI-E core as a PCI core, allow wireless core with rev 10 Stefano Brivio
2006-05-18 22:00 ` [patch 05/10] [RFT] bcm43xx: wireless core initialization for PCI-E devices Stefano Brivio
2006-05-18 22:00 ` [patch 06/10] [RFT] bcm43xx: fix bcm43xx_wireless_core_mark_inactive Stefano Brivio
2006-05-18 22:00 ` [patch 07/10] [RFT] bcm43xx: allow PHY revision 8, dont give up on unknown phy_rev Stefano Brivio
2006-05-18 22:00 ` [patch 08/10] [RFT] bcm43xx: powercontrol support for PCI-E devices Stefano Brivio
2006-05-18 22:00 ` [patch 09/10] [RFT] bcm43xx: backplane setup for PCI-E devices and devices with PCI core ID > 10 Stefano Brivio
2006-05-18 22:00 ` [patch 10/10] [RFT] bcm43xx: add PCI ID for bcm4311 Stefano Brivio

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=20060519155630.586019000@polimi.it \
    --to=stefano.brivio@polimi.it \
    --cc=hostmaster@ed-soft.at \
    --cc=louisg00@bellsouth.net \
    --cc=mjg59@srcf.ucam.org \
    --cc=netdev@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.