Messages in this thread Patch in this message | | | Date | Tue, 04 Feb 2014 17:05:59 -0600 | From | Larry Finger <> | Subject | Re: rtl8821ae. |
| |
On 02/04/2014 01:57 PM, Andrea Merello wrote: > Sorry, my fault.. you had already reported me the iowrite16 vs > iowrite8 for anaparam3 issue, but I forgot to fix it :( > > If you are reasonably sure that a 16bits-wide write is OK on the > rtl8187b hardware (In reference code I have here only 8bits are > written), then I agree applying your fix, and I will leave unchanged > my modifications. > Otherwise, if you are unsure, I will revert thing in the common > rtl818x struct (switching back to 8bit type) and I simply make a cast > on rtl8187se, or I will use an union if possible, so the rtl8187b > driver remains unchanged. > > On the other hand, for the remaining issues with changed names for > bitfield (the XXXX_SHIFT), I wil vote to fix the rtl8187 driver: > That names IMHO are wrong (misleading) and while fixing them should > help avoid future confusion, the fix is trivial enough that I'm really > confident not to broke anything. > > I had already sent a patch for it:
Somehow I missed this patch. Do you know if John Linville picked it up?
I'm not sure if the ANAPARAM3 register could handle a 16-bit write on an RTL8187B. To be cautious, I wrote and have tested the attached patch using a union. The patch includes a fix for an undefined symbol (RTL818X_TX_CONF_HW_SEQNUM). With this patch my RTL8187SE and RTL8187B devices both work.
Larry
Index: wireless-testing/drivers/net/wireless/rtl818x/rtl8187/dev.c =================================================================== --- wireless-testing.orig/drivers/net/wireless/rtl818x/rtl8187/dev.c +++ wireless-testing/drivers/net/wireless/rtl818x/rtl8187/dev.c @@ -592,7 +592,7 @@ static void rtl8187_set_anaparam(struct rtl818x_iowrite32(priv, &priv->map->ANAPARAM, anaparam); rtl818x_iowrite32(priv, &priv->map->ANAPARAM2, anaparam2); if (priv->is_rtl8187b) - rtl818x_iowrite8(priv, &priv->map->ANAPARAM3, anaparam3); + rtl818x_iowrite8(priv, &priv->map->ANAPARAM3A, anaparam3); reg &= ~RTL818X_CONFIG3_ANAPARAM_WRITE; rtl818x_iowrite8(priv, &priv->map->CONFIG3, reg); rtl818x_iowrite8(priv, &priv->map->EEPROM_CMD, @@ -949,7 +949,7 @@ static int rtl8187_start(struct ieee8021 rtl818x_iowrite8(priv, &priv->map->TX_AGC_CTL, reg); rtl818x_iowrite32(priv, &priv->map->TX_CONF, - RTL818X_TX_CONF_HW_SEQNUM | + RTL818X_TX_CONF_SW_SEQNUM | RTL818X_TX_CONF_DISREQQSIZE | (RETRY_COUNT << 8 /* short retry limit */) | (RETRY_COUNT << 0 /* long retry limit */) | Index: wireless-testing/drivers/net/wireless/rtl818x/rtl818x.h =================================================================== --- wireless-testing.orig/drivers/net/wireless/rtl818x/rtl818x.h +++ wireless-testing/drivers/net/wireless/rtl818x/rtl818x.h @@ -309,7 +309,10 @@ struct rtl818x_csr { __le32 RDSAR; /* 0xe4 */ __le16 TID_AC_MAP; /* 0xe8 */ u8 reserved_20[4]; - __le16 ANAPARAM3; /* 0xee */ + union { + __le16 ANAPARAM3; /* 0xee */ + u8 ANAPARAM3A; /* for rtl8187 */ + }; #define AC_PARAM_TXOP_LIMIT_SHIFT 16 #define AC_PARAM_ECW_MAX_SHIFT 12 | |