update athn(4) ar9485 initvals (please test on any athn(4))

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

update athn(4) ar9485 initvals (please test on any athn(4))

Stefan Sperling-8
The init values athn(4) has for the ar9485 are for version 1.0 of
this chip, which according to Atheros Linux developers was never sold:
http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=commitdiff;h=903946e6e21ef4dd678acafb8881cabde9182caf

This diff updates the initvals to what the Linux driver is using
for the 1.1 generation of the ar9485.

Because the serdes values are written to different registers on the
ar9485 I had to tweak code for other athn(4) devices, too. So please
test this on any athn(4) to make sure there are no regressions. Thanks!

Index: ar5416reg.h
===================================================================
RCS file: /cvs/src/sys/dev/ic/ar5416reg.h,v
retrieving revision 1.4
diff -u -p -r1.4 ar5416reg.h
--- ar5416reg.h 10 Jun 2012 21:23:36 -0000 1.4
+++ ar5416reg.h 7 Oct 2012 16:05:08 -0000
@@ -811,6 +811,20 @@ static const uint32_t ar5416_bank6_vals[
 /*
  * Serializer/Deserializer programming.
  */
+
+static const uint32_t ar5416_serdes_regs[] = {
+ AR_PCIE_SERDES,
+ AR_PCIE_SERDES,
+ AR_PCIE_SERDES,
+ AR_PCIE_SERDES,
+ AR_PCIE_SERDES,
+ AR_PCIE_SERDES,
+ AR_PCIE_SERDES,
+ AR_PCIE_SERDES,
+ AR_PCIE_SERDES,
+ AR_PCIE_SERDES2
+};
+
 static const uint32_t ar5416_serdes_vals[] = {
  0x9248fc00,
  0x24924924,
@@ -821,10 +835,12 @@ static const uint32_t ar5416_serdes_vals
  0x001defff,
  0x1aaabe40,
  0xbe105554,
- 0x000e3007
+ 0x000e3007,
+ 0x00000000
 };
 
 static const struct athn_serdes ar5416_serdes = {
  nitems(ar5416_serdes_vals),
- ar5416_serdes_vals
+ ar5416_serdes_regs,
+ ar5416_serdes_vals,
 };
Index: ar9280reg.h
===================================================================
RCS file: /cvs/src/sys/dev/ic/ar9280reg.h,v
retrieving revision 1.5
diff -u -p -r1.5 ar9280reg.h
--- ar9280reg.h 10 Jun 2012 21:23:36 -0000 1.5
+++ ar9280reg.h 7 Oct 2012 16:05:08 -0000
@@ -586,6 +586,21 @@ static const struct athn_gain ar9280_2_0
 /*
  * Serializer/Deserializer programming.
  */
+
+static const uint32_t ar9280_2_0_serdes_regs[] = {
+ AR_PCIE_SERDES,
+ AR_PCIE_SERDES,
+ AR_PCIE_SERDES,
+ AR_PCIE_SERDES,
+ AR_PCIE_SERDES,
+ AR_PCIE_SERDES,
+ AR_PCIE_SERDES,
+ AR_PCIE_SERDES,
+ AR_PCIE_SERDES,
+ AR_PCIE_SERDES,
+ AR_PCIE_SERDES2,
+};
+
 static const uint32_t ar9280_2_0_serdes_vals[] = {
  0x9248fd00,
  0x24924924,
@@ -599,10 +614,12 @@ static const uint32_t ar9280_2_0_serdes_
 #endif
  0x1aaabe41,
  0xbe105554,
- 0x00043007
+ 0x00043007,
+ 0x00000000
 };
 
 static const struct athn_serdes ar9280_2_0_serdes = {
  nitems(ar9280_2_0_serdes_vals),
+ ar9280_2_0_serdes_regs,
  ar9280_2_0_serdes_vals
 };
Index: ar9380.c
===================================================================
RCS file: /cvs/src/sys/dev/ic/ar9380.c,v
retrieving revision 1.15
diff -u -p -r1.15 ar9380.c
--- ar9380.c 10 Jun 2012 21:23:36 -0000 1.15
+++ ar9380.c 7 Oct 2012 16:05:08 -0000
@@ -117,11 +117,13 @@ ar9380_attach(struct athn_softc *sc)
  sc->cca_max_2g = AR9380_PHY_CCA_MAX_GOOD_VAL_2GHZ;
  sc->cca_min_5g = AR9380_PHY_CCA_MIN_GOOD_VAL_5GHZ;
  sc->cca_max_5g = AR9380_PHY_CCA_MAX_GOOD_VAL_5GHZ;
- if (AR_SREV_9485(sc))
- sc->ini = &ar9485_1_0_ini;
- else
+ if (AR_SREV_9485(sc)) {
+ sc->ini = &ar9485_1_1_ini;
+ sc->serdes = &ar9485_1_1_serdes;
+ } else {
  sc->ini = &ar9380_2_2_ini;
- sc->serdes = &ar9380_2_2_serdes;
+ sc->serdes = &ar9380_2_2_serdes;
+ }
 
  return (ar9003_attach(sc));
 }
@@ -179,7 +181,7 @@ ar9380_setup(struct athn_softc *sc)
  else
  sc->rx_gain = &ar9380_2_2_rx_gain;
  } else
- sc->rx_gain = &ar9485_1_0_rx_gain;
+ sc->rx_gain = &ar9485_1_1_rx_gain;
 
  /* Select initialization values based on ROM. */
  type = MS(eep->baseEepHeader.txrxgain, AR_EEP_TX_GAIN);
@@ -193,7 +195,7 @@ ar9380_setup(struct athn_softc *sc)
  else
  sc->tx_gain = &ar9380_2_2_tx_gain;
  } else
- sc->tx_gain = &ar9485_1_0_tx_gain;
+ sc->tx_gain = &ar9485_1_1_tx_gain;
 }
 
 const uint8_t *
Index: ar9380reg.h
===================================================================
RCS file: /cvs/src/sys/dev/ic/ar9380reg.h,v
retrieving revision 1.17
diff -u -p -r1.17 ar9380reg.h
--- ar9380reg.h 10 Jun 2012 21:23:36 -0000 1.17
+++ ar9380reg.h 7 Oct 2012 16:05:08 -0000
@@ -1107,12 +1107,12 @@ static const struct athn_ini ar9380_2_2_
 };
 
 /*
- * AR9485 1.0 programming.
+ * AR9485 1.1 programming.
  */
-static const uint16_t ar9485_1_0_regs[] = {
+
+static const uint16_t ar9485_1_1_regs[] = {
  P(0x01030), P(0x01070), P(0x010b0), P(0x08014), P(0x0801c),
- P(0x08120), P(0x081d0), P(0x08318), P(0x1609c), P(0x160ac),
- P(0x160b0), P(0x1610c), P(0x16140), P(0x09810), P(0x09820),
+ P(0x08120), P(0x081d0), P(0x08318), P(0x09810), P(0x09820),
  P(0x09824), P(0x09828), P(0x0982c), P(0x09830), P(0x09c00),
  P(0x09e00), P(0x09e04), P(0x09e0c), P(0x09e10), P(0x09e14),
  P(0x09e18), P(0x09e1c), P(0x09e20), P(0x09e2c), P(0x09e3c),
@@ -1120,27 +1120,27 @@ static const uint16_t ar9485_1_0_regs[]
  P(0x0a230), P(0x0a234), P(0x0a238), P(0x0a250), P(0x0a254),
  P(0x0a258), P(0x0a25c), P(0x0a260), P(0x0a264), P(0x0a280),
  P(0x0a284), P(0x0a288), P(0x0a28c), P(0x0a2c4), P(0x0a2d0),
- P(0x0a2d8), P(0x0a358), P(0x0be04), P(0x0be18)
+ P(0x0a2d8), P(0x0a358), P(0x0be04), P(0x0be18), P(0x1609c),
+ P(0x160ac), P(0x160b0), P(0x1610c), P(0x16140)
 };
 
-static const uint32_t ar9485_1_0_vals_2g40[] = {
+static const uint32_t ar9485_1_1_vals_2g40[] = {
  0x000002c0, 0x00000318, 0x00007c70, 0x10801600, 0x12e00057,
- 0x08f04810, 0x0000320a, 0x00006880, 0x24611800, 0x03284f3e,
- 0x00170000, 0x10804008, 0x00000000, 0xd00a8005, 0x206a002e,
+ 0x08f04810, 0x0000320a, 0x00006880, 0xd00a8005, 0x206a002e,
  0x5ac640d0, 0x06903881, 0x05eea6d4, 0x0000059c, 0x00000044,
  0x037216a0, 0x00182020, 0x6d4000e2, 0x7ec80d2e, 0x3139605e,
  0x00000000, 0x00021f9c, 0x000003ce, 0x00000021, 0xcf946222,
  0x02282324, 0x50302010, 0x0001a000, 0x01303fc4, 0x00000004,
  0x00004016, 0x10000fff, 0xffb81018, 0x00000210, 0x00001130,
  0x02020002, 0x01000e0e, 0x3a021501, 0x00000e0e, 0x0000000b,
- 0x000002a0, 0x00000000, 0x00000000, 0x00158d18, 0x00071981,
- 0xf999a83a, 0x00000000, 0x00802020, 0x00000000
+ 0x000002a0, 0x00000000, 0x00000000, 0x00158d18, 0x00071982,
+ 0xf999a83a, 0x00000000, 0x00802020, 0x00000000, 0x0b283f31,
+ 0x24611800, 0x03284f3e, 0x00170000, 0x50804008
 };
 
-static const uint32_t ar9485_1_0_vals_2g20[] = {
+static const uint32_t ar9485_1_1_vals_2g20[] = {
  0x00000160, 0x0000018c, 0x00003e38, 0x08400b00, 0x12e0002b,
- 0x08f04810, 0x0000320a, 0x00003440, 0x000160b0, 0x0001610c,
- 0x00016140, 0x00000000, 0x00000000, 0xd00a8005, 0x206a002e,
+ 0x08f04810, 0x0000320a, 0x00003440, 0xd00a8005, 0x206a002e,
  0x5ac640d0, 0x06903881, 0x05eea6d4, 0x0000059c, 0x00000044,
  0x037216a0, 0x00182020, 0x6c4000e2, 0x7ec80d2e, 0x31395d5e,
  0x00000000, 0x00021f9c, 0x000003ce, 0x00000021, 0xcf946222,
@@ -1148,173 +1148,180 @@ static const uint32_t ar9485_1_0_vals_2g
  0x0000400b, 0x10000fff, 0xffb81018, 0x00000108, 0x00000898,
  0x02020002, 0x01000e0e, 0x3a021501, 0x00000e0e, 0x0000000b,
  0x000002a0, 0x00000000, 0x00000000, 0x00158d18, 0x00071982,
- 0xf999a83a, 0x00000000, 0x00802020, 0x00000000
+ 0xf999a83a, 0x00000000, 0x00802020, 0x00000000, 0x0b283f31,
+ 0x24611800, 0x03284f3e, 0x00170000, 0x50804008
 };
 
-static const uint16_t ar9485_1_0_cm_regs[] = {
- P(0x040a4), P(0x07048), P(0x00008), P(0x00030), P(0x00034),
- P(0x00040), P(0x00044), P(0x00048), P(0x0004c), P(0x00050),
- P(0x01040), P(0x01044), P(0x01048), P(0x0104c), P(0x01050),
- P(0x01054), P(0x01058), P(0x0105c), P(0x01060), P(0x01064),
- P(0x010f0), P(0x01270), P(0x012b0), P(0x012f0), P(0x0143c),
- P(0x0147c), P(0x08000), P(0x08004), P(0x08008), P(0x0800c),
- P(0x08018), P(0x08020), P(0x08038), P(0x0803c), P(0x08040),
- P(0x08044), P(0x08048), P(0x0804c), P(0x08054), P(0x08058),
- P(0x0805c), P(0x08060), P(0x08064), P(0x08070), P(0x08074),
- P(0x08078), P(0x0809c), P(0x080a0), P(0x080a4), P(0x080a8),
- P(0x080ac), P(0x080b0), P(0x080b4), P(0x080b8), P(0x080bc),
- P(0x080c0), P(0x080c4), P(0x080c8), P(0x080cc), P(0x080d0),
- P(0x080d4), P(0x080d8), P(0x080dc), P(0x080e0), P(0x080e4),
- P(0x080e8), P(0x080ec), P(0x080f0), P(0x080f4), P(0x080fc),
- P(0x08100), P(0x08108), P(0x0810c), P(0x08110), P(0x08114),
- P(0x08118), P(0x0811c), P(0x08124), P(0x08128), P(0x0812c),
- P(0x08130), P(0x08134), P(0x08138), P(0x0813c), P(0x08144),
- P(0x08168), P(0x0816c), P(0x08170), P(0x08174), P(0x08178),
- P(0x0817c), P(0x081c0), P(0x081c4), P(0x081c8), P(0x081cc),
- P(0x081d4), P(0x081ec), P(0x081f0), P(0x081f4), P(0x081f8),
- P(0x081fc), P(0x08240), P(0x08244), P(0x08248), P(0x0824c),
- P(0x08250), P(0x08254), P(0x08258), P(0x0825c), P(0x08260),
- P(0x08264), P(0x08268), P(0x0826c), P(0x08270), P(0x08274),
- P(0x08278), P(0x0827c), P(0x08284), P(0x08288), P(0x0828c),
- P(0x08294), P(0x08298), P(0x0829c), P(0x08300), P(0x08314),
- P(0x0831c), P(0x08328), P(0x0832c), P(0x08330), P(0x08334),
- P(0x08338), P(0x0833c), P(0x08340), P(0x08344), P(0x08348),
- P(0x0835c), P(0x08360), P(0x08364), P(0x08368), P(0x08370),
- P(0x08374), P(0x08378), P(0x0837c), P(0x08380), P(0x08384),
- P(0x08390), P(0x08394), P(0x08398), P(0x0839c), P(0x083a0),
- P(0x083a4), P(0x083a8), P(0x083ac), P(0x083b0), P(0x083b4),
- P(0x083b8), P(0x083bc), P(0x083c0), P(0x083c4), P(0x083c8),
- P(0x083cc), P(0x083d0), P(0x09800), P(0x09804), P(0x09808),
- P(0x0980c), P(0x09814), P(0x09818), P(0x0981c), P(0x09834),
- P(0x09838), P(0x0983c), P(0x09880), P(0x09884), P(0x098a4),
- P(0x098b0), P(0x098bc), P(0x098d0), P(0x098d4), P(0x098dc),
- P(0x098f0), P(0x098f4), P(0x09c04), P(0x09c08), P(0x09c0c),
- P(0x09c10), P(0x09c14), P(0x09c18), P(0x09c1c), P(0x09d00),
- P(0x09d04), P(0x09d08), P(0x09d0c), P(0x09d10), P(0x09d14),
- P(0x09d18), P(0x09d1c), P(0x09e08), P(0x09e24), P(0x09e28),
- P(0x09e30), P(0x09e34), P(0x09e38), P(0x09e40), P(0x09e4c),
- P(0x09e50), P(0x09fc0), P(0x09fc4), P(0x09fcc), P(0x0a20c),
- P(0x0a210), P(0x0a220), P(0x0a224), P(0x0a228), P(0x0a23c),
- P(0x0a244), P(0x0a2a0), P(0x0a2c0), P(0x0a2c8), P(0x0a2cc),
- P(0x0a2d4), P(0x0a2dc), P(0x0a2e0), P(0x0a2e4), P(0x0a2e8),
- P(0x0a2ec), P(0x0a2f0), P(0x0a2f4), P(0x0a2f8), P(0x0a344),
- P(0x0a34c), P(0x0a350), P(0x0a364), P(0x0a370), P(0x0a390),
- P(0x0a394), P(0x0a398), P(0x0a39c), P(0x0a3a0), P(0x0a3a4),
- P(0x0a3a8), P(0x0a3ac), P(0x0a3c0), P(0x0a3c4), P(0x0a3c8),
- P(0x0a3cc), P(0x0a3d0), P(0x0a3d4), P(0x0a3d8), P(0x0a3dc),
- P(0x0a3e0), P(0x0a3e4), P(0x0a3e8), P(0x0a3ec), P(0x0a3f0),
- P(0x0a3f4), P(0x0a3f8), P(0x0a3fc), P(0x0a400), P(0x0a404),
- P(0x0a408), P(0x0a40c), P(0x0a414), P(0x0a418), P(0x0a41c),
- P(0x0a420), P(0x0a424), P(0x0a428), P(0x0a42c), P(0x0a430),
- P(0x0a434), P(0x0a438), P(0x0a43c), P(0x0a440), P(0x0a444),
- P(0x0a448), P(0x0a44c), P(0x0a450), P(0x0a458), P(0x0a5c4),
+static const uint16_t ar9485_1_1_cm_regs[] = {
+ P(0x00008), P(0x00030), P(0x00034), P(0x00040), P(0x00044),
+ P(0x00048), P(0x0004c), P(0x00050), P(0x01040), P(0x01044),
+ P(0x01048), P(0x0104c), P(0x01050), P(0x01054), P(0x01058),
+ P(0x0105c), P(0x01060), P(0x01064), P(0x010f0), P(0x01270),
+ P(0x012b0), P(0x012f0), P(0x0143c), P(0x0147c), P(0x08000),
+ P(0x08004), P(0x08008), P(0x0800c), P(0x08018), P(0x08020),
+ P(0x08038), P(0x0803c), P(0x08040), P(0x08044), P(0x08048),
+ P(0x0804c), P(0x08054), P(0x08058), P(0x0805c), P(0x08060),
+ P(0x08064), P(0x08070), P(0x08074), P(0x08078), P(0x0809c),
+ P(0x080a0), P(0x080a4), P(0x080a8), P(0x080ac), P(0x080b0),
+ P(0x080b4), P(0x080b8), P(0x080bc), P(0x080c0), P(0x080c4),
+ P(0x080c8), P(0x080cc), P(0x080d0), P(0x080d4), P(0x080d8),
+ P(0x080dc), P(0x080e0), P(0x080e4), P(0x080e8), P(0x080ec),
+ P(0x080f0), P(0x080f4), P(0x080fc), P(0x08100), P(0x08108),
+ P(0x0810c), P(0x08110), P(0x08114), P(0x08118), P(0x0811c),
+ P(0x08124), P(0x08128), P(0x0812c), P(0x08130), P(0x08134),
+ P(0x08138), P(0x0813c), P(0x08144), P(0x08168), P(0x0816c),
+ P(0x08170), P(0x08174), P(0x08178), P(0x0817c), P(0x081c0),
+ P(0x081c4), P(0x081d4), P(0x081ec), P(0x081f0), P(0x081f4),
+ P(0x081f8), P(0x081fc), P(0x08240), P(0x08244), P(0x08248),
+ P(0x0824c), P(0x08250), P(0x08254), P(0x08258), P(0x0825c),
+ P(0x08260), P(0x08264), P(0x08268), P(0x0826c), P(0x08270),
+ P(0x08274), P(0x08278), P(0x0827c), P(0x08284), P(0x08288),
+ P(0x0828c), P(0x08294), P(0x08298), P(0x0829c), P(0x08300),
+ P(0x08314), P(0x0831c), P(0x08328), P(0x0832c), P(0x08330),
+ P(0x08334), P(0x08338), P(0x0833c), P(0x08340), P(0x08344),
+ P(0x08348), P(0x0835c), P(0x08360), P(0x08364), P(0x08368),
+ P(0x08370), P(0x08374), P(0x08378), P(0x0837c), P(0x08380),
+ P(0x08384), P(0x08390), P(0x08394), P(0x08398), P(0x0839c),
+ P(0x083a0), P(0x083a4), P(0x083a8), P(0x083ac), P(0x083b0),
+ P(0x083b4), P(0x083b8), P(0x083bc), P(0x083c0), P(0x083c4),
+ P(0x083c8), P(0x083cc), P(0x083d0), P(0x0a580), P(0x0a584),
+ P(0x0a588), P(0x0a58c), P(0x0a590), P(0x0a594), P(0x0a598),
+ P(0x0a59c), P(0x0a5a0), P(0x0a5a4), P(0x0a5a8), P(0x0a5ac),
+ P(0x0a5b0), P(0x0a5b4), P(0x0a5b8), P(0x0a5bc), P(0x09800),
+ P(0x09804), P(0x09808), P(0x0980c), P(0x09814), P(0x09818),
+ P(0x0981c), P(0x09834), P(0x09838), P(0x0983c), P(0x09880),
+ P(0x09884), P(0x098a4), P(0x098b0), P(0x098d0), P(0x098d4),
+ P(0x098dc), P(0x098f0), P(0x098f4), P(0x09c04), P(0x09c08),
+ P(0x09c0c), P(0x09c10), P(0x09c14), P(0x09c18), P(0x09c1c),
+ P(0x09d00), P(0x09d04), P(0x09d08), P(0x09d0c), P(0x09d10),
+ P(0x09d14), P(0x09d18), P(0x09d1c), P(0x09e08), P(0x09e24),
+ P(0x09e28), P(0x09e30), P(0x09e34), P(0x09e38), P(0x09e40),
+ P(0x09e4c), P(0x09e50), P(0x09fc0), P(0x09fc4), P(0x09fcc),
+ P(0x0a20c), P(0x0a210), P(0x0a220), P(0x0a224), P(0x0a228),
+ P(0x0a23c), P(0x0a244), P(0x0a2a0), P(0x0a2c0), P(0x0a2c8),
+ P(0x0a2cc), P(0x0a2d4), P(0x0a2dc), P(0x0a2e0), P(0x0a2e4),
+ P(0x0a2e8), P(0x0a2ec), P(0x0a2f0), P(0x0a2f4), P(0x0a2f8),
+ P(0x0a344), P(0x0a34c), P(0x0a350), P(0x0a364), P(0x0a370),
+ P(0x0a390), P(0x0a394), P(0x0a398), P(0x0a39c), P(0x0a3a0),
+ P(0x0a3a4), P(0x0a3a8), P(0x0a3ac), P(0x0a3c0), P(0x0a3c4),
+ P(0x0a3c8), P(0x0a3cc), P(0x0a3d0), P(0x0a3d4), P(0x0a3d8),
+ P(0x0a3dc), P(0x0a3e0), P(0x0a3e4), P(0x0a3e8), P(0x0a3ec),
+ P(0x0a3f0), P(0x0a3f4), P(0x0a3f8), P(0x0a3fc), P(0x0a400),
+ P(0x0a404), P(0x0a408), P(0x0a40c), P(0x0a414), P(0x0a418),
+ P(0x0a41c), P(0x0a420), P(0x0a424), P(0x0a428), P(0x0a42c),
+ P(0x0a430), P(0x0a434), P(0x0a438), P(0x0a43c), P(0x0a440),
+ P(0x0a444), P(0x0a448), P(0x0a44c), P(0x0a450), P(0x0a5c4),
  P(0x0a5c8), P(0x0a5cc), P(0x0a760), P(0x0a764), P(0x0a768),
  P(0x0a76c), P(0x0a770), P(0x0a774), P(0x0a778), P(0x0a780),
  P(0x0a7c0), P(0x0a7c4), P(0x0a7c8), P(0x0a7cc), P(0x0a7d0),
  P(0x0a7d4), P(0x0a7dc), P(0x16000), P(0x16004), P(0x16008),
- P(0x1600c), P(0x16040), P(0x16048), P(0x1604c), P(0x16050),
- P(0x16054), P(0x16080), P(0x16084), P(0x16088), P(0x1608c),
- P(0x16090), P(0x16098), P(0x160a0), P(0x160a4), P(0x160a8),
- P(0x160b4), P(0x160c0), P(0x160c4), P(0x160c8), P(0x160cc),
- P(0x160d0), P(0x16100), P(0x16104), P(0x16108), P(0x16144),
- P(0x16148), P(0x16180), P(0x16184), P(0x16188), P(0x1618c),
+ P(0x1600c), P(0x16040), P(0x1604c), P(0x16050), P(0x16054),
+ P(0x16080), P(0x16084), P(0x16088), P(0x1608c), P(0x16090),
+ P(0x16098), P(0x160a0), P(0x160a4), P(0x160a8), P(0x160b4),
+ P(0x160c0), P(0x160c4), P(0x160c8), P(0x160cc), P(0x160d0),
+ P(0x16100), P(0x16104), P(0x16108), P(0x16144), P(0x16148),
  P(0x16240), P(0x16244), P(0x16248), P(0x1624c), P(0x16280),
  P(0x16284), P(0x16288), P(0x1628c), P(0x16290), P(0x16380),
  P(0x16384), P(0x16388), P(0x1638c), P(0x16390), P(0x16394),
  P(0x16398), P(0x1639c), P(0x163a0), P(0x163a4), P(0x163a8),
  P(0x163ac), P(0x163b0), P(0x163b4), P(0x163b8), P(0x163bc),
  P(0x163c0), P(0x163c4), P(0x163c8), P(0x163cc), P(0x163d0),
- P(0x163d4), P(0x16c40), P(0x16c44)
+ P(0x163d4), P(0x16c40), P(0x16c44), P(0x04014), P(0x04090),
+ P(0x040a4), P(0x07010), P(0x07020), P(0x07034), P(0x07038),
+ P(0x07048)
 };
 
-static const uint32_t ar9485_1_0_cm_vals[] = {
- 0x00a0c9c9, 0x00000004, 0x00000000, 0x00020085, 0x00000005,
- 0x00000000, 0x00000000, 0x00000008, 0x00000010, 0x00000000,
- 0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x002ffc0f,
+static const uint32_t ar9485_1_1_cm_vals[] = {
+ 0x00000000, 0x00020085, 0x00000005, 0x00000000, 0x00000000,
+ 0x00000008, 0x00000010, 0x00000000, 0x002ffc0f, 0x002ffc0f,
  0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x002ffc0f,
- 0x00000100, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x00000100, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0xffffffff, 0x00000000, 0x00000000, 0x000fc78f, 0x0000000f,
+ 0x00000000, 0x00000310, 0x00000020, 0x00000000, 0x0000000f,
+ 0x00000000, 0x02ff0000, 0x0e070605, 0x0000000d, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x2a800000, 0x06900168,
+ 0x13881c22, 0x01f40000, 0x00252500, 0x00a00000, 0x00400000,
+ 0x00000000, 0xffffffff, 0x0000ffff, 0x3f3f3f3f, 0x00000000,
+ 0x00000000, 0x00000000, 0x00020000, 0x00000000, 0x00000052,
+ 0x00000000, 0x00000000, 0x000007ff, 0x000000aa, 0x00003210,
  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000,
- 0x000fc78f, 0x0000000f, 0x00000000, 0x00000310, 0x00000020,
- 0x00000000, 0x0000000f, 0x00000000, 0x02ff0000, 0x0e070605,
- 0x0000000d, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x2a800000, 0x06900168, 0x13881c20, 0x01f40000, 0x00252500,
- 0x00a00000, 0x00400000, 0x00000000, 0xffffffff, 0x0000ffff,
- 0x3f3f3f3f, 0x00000000, 0x00000000, 0x00000000, 0x00020000,
- 0x00000000, 0x00000052, 0x00000000, 0x00000000, 0x000007ff,
- 0x000000aa, 0x00003210, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x0000ffff, 0xffffffff,
- 0x00000000, 0x00000000, 0x18486200, 0x33332210, 0x00000000,
- 0x00020000, 0x00000000, 0x33332210, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00100000, 0x0010f400, 0x00000800, 0x0001e800,
- 0x00000000, 0x00000000, 0x00000000, 0x40000000, 0x00080922,
- 0x9ca00010, 0xffffffff, 0x0000ffff, 0x00000000, 0x40000000,
- 0x003e4180, 0x00000004, 0x0000002c, 0x0000002c, 0x000000ff,
- 0x00000000, 0x00000000, 0x00000000, 0x00000140, 0x00000000,
- 0x0000010d, 0x00000000, 0x00000007, 0x00000302, 0x00000700,
- 0x00ff0000, 0x02400000, 0x000107ff, 0xa248105b, 0x008f0000,
- 0x00000000, 0xffffffff, 0xffffffff, 0x00000000, 0x00000000,
- 0x000000ff, 0x00000000, 0x00000000, 0xffffffff, 0xffffffff,
- 0xffffffff, 0xffffffff, 0x00000000, 0x00000000, 0x00000000,
- 0x0000fa14, 0x000f0c00, 0x33332210, 0x33332210, 0x33332210,
+ 0x00000000, 0x0000ffff, 0xffffffff, 0x00000000, 0x00000000,
+ 0x18486200, 0x33332210, 0x00000000, 0x00020000, 0x00000000,
  0x33332210, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000200, 0x000301ff, 0xafe68e30, 0xfd14e000, 0x9c0a8f6b,
- 0x04800000, 0x9280c00a, 0x00000000, 0x00020028, 0x5f3ca3de,
- 0x0108ecff, 0x14750600, 0x201fff00, 0x00001042, 0x00200400,
- 0x52440bbe, 0x00000002, 0x004b6a8e, 0x00000820, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x03200000, 0x00000000,
- 0x00000000, 0x00046384, 0x05b6b440, 0x00b6b440, 0xc080a333,
- 0x40206c10, 0x009c4060, 0x1883800a, 0x01834061, 0x00c00400,
- 0x00000000, 0x00000000, 0x0038233c, 0x990bb515, 0x0a6f0000,
- 0x06336f77, 0x6af6532f, 0x0cc80c00, 0x0d261820, 0x00001004,
- 0x00ff03f1, 0x80be4788, 0x0001efb5, 0x40000014, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x10002310, 0x00000000,
- 0x0c000000, 0x00000001, 0x00000001, 0x00000000, 0x18c43433,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x0000a000, 0x00000000, 0x00000000, 0x00000001,
- 0x00000444, 0x001f0e0f, 0x0075393f, 0xb79f6427, 0x00000000,
- 0xaaaaaaaa, 0x3c466478, 0x20202020, 0x22222220, 0x20200020,
+ 0x00000000, 0x00000000, 0x00100000, 0x0010f400, 0x00000800,
+ 0x0001e800, 0x00000000, 0x00000000, 0x00000000, 0x40000000,
+ 0x00080922, 0x9ca00010, 0xffffffff, 0x0000ffff, 0x00000000,
+ 0x40000000, 0x003e4180, 0x00000004, 0x0000002c, 0x0000002c,
+ 0x000000ff, 0x00000000, 0x00000000, 0x00000000, 0x00000140,
+ 0x00000000, 0x0000010d, 0x00000000, 0x00000007, 0x00000302,
+ 0x00000700, 0x00ff0000, 0x02400000, 0x000107ff, 0xa248105b,
+ 0x008f0000, 0x00000000, 0xffffffff, 0xffffffff, 0x00000000,
+ 0x00000000, 0x000000ff, 0x00000000, 0x00000000, 0xffffffff,
+ 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, 0x00000000,
+ 0x00000000, 0x0000fa14, 0x000f0c00, 0x33332210, 0x33332210,
+ 0x33332210, 0x33332210, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000200, 0x000301ff, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xafe68e30,
+ 0xfd14e000, 0x9c0a8f6b, 0x04800000, 0x9280c00a, 0x00000000,
+ 0x00020028, 0x5f3ca3de, 0x0108ecff, 0x14750600, 0x201fff00,
+ 0x00001042, 0x00200400, 0x52440bbe, 0x004b6a8e, 0x00000820,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03200000,
+ 0x00000000, 0x00000000, 0x00046384, 0x05b6b440, 0x00b6b440,
+ 0xc080a333, 0x40206c10, 0x009c4060, 0x1883800a, 0x01834061,
+ 0x00c00400, 0x00000000, 0x00000000, 0x0038233c, 0x9927b515,
+ 0x12ef0200, 0x06336f77, 0x6af6532f, 0x0cc80c00, 0x0d261820,
+ 0x00001004, 0x00ff03f1, 0x80be4788, 0x0001efb5, 0x40000014,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10002310,
+ 0x00000000, 0x0c000000, 0x00000001, 0x00000001, 0x00000000,
+ 0x18c43433, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x0000a000, 0x00000000, 0x00000000,
+ 0x00000001, 0x00000444, 0x001f0e0f, 0x0075393f, 0xb79f6427,
+ 0x000000ff, 0x3b3b3b3b, 0x2f2f2f2f, 0x20202020, 0x22222220,
+ 0x20200020, 0x20202020, 0x20202020, 0x20202020, 0x20202020,
  0x20202020, 0x20202020, 0x20202020, 0x20202020, 0x20202020,
- 0x20202020, 0x20202020, 0x20202020, 0x20202020, 0x00000000,
- 0x00000006, 0x0cdbd380, 0x000f0f01, 0x8fa91f01, 0x00000000,
- 0x0e79e5c6, 0x00820820, 0x1ce739ce, 0x2d0011ce, 0x1ce739ce,
- 0x000001ce, 0x1ce739ce, 0x000001ce, 0x1ce739ce, 0x1ce739ce,
- 0x00000000, 0x00001801, 0x00000000, 0x00000000, 0x00000000,
- 0x04000000, 0x00000001, 0x00010000, 0x00000000, 0x3fad9d74,
+ 0x00000000, 0x00000006, 0x0cdbd380, 0x000f0f01, 0x8fa91f01,
+ 0x00000000, 0x0e79e5c6, 0x00820820, 0x1ce739cf, 0x2d0019ce,
+ 0x1ce739ce, 0x000001ce, 0x1ce739ce, 0x000001ce, 0x1ce739ce,
+ 0x1ce739ce, 0x00000000, 0x00001801, 0x00000000, 0x00000000,
+ 0x00000000, 0x04000000, 0x00000001, 0x00010000, 0xbfad9d74,
  0x0048060a, 0x00000637, 0x03020100, 0x09080504, 0x0d0c0b0a,
  0x13121110, 0x31301514, 0x35343332, 0x00000036, 0x00000838,
  0x00000000, 0xfffffffc, 0x00000000, 0x00000000, 0x00000000,
- 0x00000004, 0x00000001, 0x36db6db6, 0x6db6db40, 0x73800000,
- 0x00000000, 0x7f80fff8, 0x6c92426e, 0x000f0278, 0x6db6db6c,
- 0x6db60000, 0x00080000, 0x0e48048c, 0x14214514, 0x119f081e,
- 0x24926490, 0xd28b3330, 0xc2108ffe, 0x812fc370, 0x423c8000,
- 0x92480040, 0x006db6db, 0x0186db60, 0x6db6db6c, 0x6de6fbe0,
- 0xf7dfcf3c, 0x04cb0001, 0xfff80015, 0x00080010, 0x01884080,
- 0x00008040, 0x08453333, 0x18e82f01, 0x00000000, 0x00000000,
+ 0x00000004, 0x00000000, 0x36db6db6, 0x6db6db40, 0x73800000,
+ 0x00000000, 0x7f80fff8, 0x000f0278, 0x4db6db8c, 0x6db60000,
+ 0x00080000, 0x0e48048c, 0x14214514, 0x119f081e, 0x24926490,
+ 0xd28b3330, 0xc2108ffe, 0x812fc370, 0x423c8000, 0x92480040,
+ 0x006db6db, 0x0186db60, 0x6db6db6c, 0x6de6fbe0, 0xf7dfcf3c,
+ 0x04cb0001, 0xfff80015, 0x00080010, 0x01884080, 0x00008040,
  0x08400000, 0x1bf90f00, 0x00000000, 0x00000000, 0x01000015,
  0x00d30000, 0x00318000, 0x50000000, 0x4b96210f, 0x00000000,
  0x00000000, 0x00800700, 0x00800700, 0x00800700, 0x00000000,
  0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000000,
  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  0x000000a0, 0x000c0000, 0x14021402, 0x00001402, 0x00000000,
- 0x00000000, 0x1319c178, 0x10000000
+ 0x00000000, 0x13188278, 0x12000000, 0xba280400, 0x00aa10aa,
+ 0x00a0c9c9, 0x00000022, 0x00000000, 0x00000002, 0x000004c2,
+ 0x00000002
 };
 
-static const struct athn_ini ar9485_1_0_ini = {
- nitems(ar9485_1_0_regs),
- ar9485_1_0_regs,
+static const struct athn_ini ar9485_1_1_ini = {
+ nitems(ar9485_1_1_regs),
+ ar9485_1_1_regs,
  NULL, /* 2GHz only. */
 #ifndef IEEE80211_NO_HT
  NULL, /* 2GHz only. */
- ar9485_1_0_vals_2g40,
+ ar9485_1_1_vals_2g40,
 #endif
- ar9485_1_0_vals_2g20,
- nitems(ar9485_1_0_cm_regs),
- ar9485_1_0_cm_regs,
- ar9485_1_0_cm_vals
+ ar9485_1_1_vals_2g20,
+ nitems(ar9485_1_1_cm_regs),
+ ar9485_1_1_cm_regs,
+ ar9485_1_1_cm_vals
 };
 
 /*
@@ -1574,33 +1581,47 @@ static const struct athn_gain ar9380_2_2
 };
 
 /*
- * AR9485 1.0 Tx gains.
+ * AR9485 1.1 Tx gains.
  */
-static const uint16_t ar9485_1_0_tx_gain_regs[] = {
- P(0x0a410), P(0x0a500), P(0x0a504), P(0x0a508), P(0x0a50c),
- P(0x0a510), P(0x0a514), P(0x0a518), P(0x0a51c), P(0x0a520),
- P(0x0a524), P(0x0a528), P(0x0a52c), P(0x0a530), P(0x0a534),
- P(0x0a538), P(0x0a53c), P(0x0a540), P(0x0a544), P(0x0a548),
- P(0x0a54c), P(0x0a550), P(0x0a554), P(0x0a558), P(0x0a55c),
- P(0x0a560), P(0x0a564), P(0x0a568), P(0x0a56c), P(0x0a570),
- P(0x0a574), P(0x0a578), P(0x0a57c), P(0x16044)
-};
-
-static const uint32_t ar9485_1_0_tx_gain_vals_2g[] = {
- 0x000050d8, 0x00000000, 0x04000002, 0x08000004, 0x0d000200,
- 0x11000202, 0x15000400, 0x19000402, 0x1d000404, 0x21000603,
- 0x25000605, 0x2a000a03, 0x2c000a04, 0x2e000a20, 0x34000e20,
- 0x38000e22, 0x3c000e24, 0x40000e26, 0x43001640, 0x46001660,
- 0x49001861, 0x4c001a81, 0x4f001a83, 0x54001c85, 0x58001ce5,
- 0x5b001ce9, 0x60001eeb, 0x60001eeb, 0x60001eeb, 0x60001eeb,
- 0x60001eeb, 0x60001eeb, 0x60001eeb, 0x05b6b2db
-};
-
-static const struct athn_gain ar9485_1_0_tx_gain = {
- nitems(ar9485_1_0_tx_gain_regs),
- ar9485_1_0_tx_gain_regs,
+static const uint16_t ar9485_1_1_tx_gain_regs[] = {
+ P(0x098bc), P(0x0a410), P(0x0a458), P(0x0a500), P(0x0a504),
+ P(0x0a508), P(0x0a50c), P(0x0a510), P(0x0a514), P(0x0a518),
+ P(0x0a51c), P(0x0a520), P(0x0a524), P(0x0a528), P(0x0a52c),
+ P(0x0a530), P(0x0a534), P(0x0a538), P(0x0a53c), P(0x0a540),
+ P(0x0a544), P(0x0a548), P(0x0a54c), P(0x0a550), P(0x0a554),
+ P(0x0a558), P(0x0a55c), P(0x0a560), P(0x0a564), P(0x0a568),
+ P(0x0a56c), P(0x0a570), P(0x0a574), P(0x0a578), P(0x0a57c),
+ P(0x0b500), P(0x0b504), P(0x0b508), P(0x0b50c), P(0x0b510),
+ P(0x0b514), P(0x0b518), P(0x0b51c), P(0x0b520), P(0x0b524),
+ P(0x0b528), P(0x0b52c), P(0x0b530), P(0x0b534), P(0x0b538),
+ P(0x0b53c), P(0x0b540), P(0x0b544), P(0x0b548), P(0x0b54c),
+ P(0x0b550), P(0x0b554), P(0x0b558), P(0x0b55c), P(0x0b560),
+ P(0x0b564), P(0x0b568), P(0x0b56c), P(0x0b570), P(0x0b574),
+ P(0x0b578), P(0x0b57c), P(0x16044), P(0x16048),
+};
+
+static const uint32_t ar9485_1_1_tx_gain_vals_2g[] = {
+ 0x00000002, 0x000050d8, 0x00000000, 0x00000000, 0x04000002,
+ 0x08000004, 0x0d000200, 0x11000202, 0x15000400, 0x19000402,
+ 0x1d000404, 0x21000603, 0x25000605, 0x2a000a03, 0x2c000a04,
+ 0x34000e20, 0x35000e21, 0x43000e62, 0x45000e63, 0x49000e65,
+ 0x4b000e66, 0x4d001645, 0x51001865, 0x55001a86, 0x57001ce9,
+ 0x5a001ceb, 0x5e001eeb, 0x5e001eeb, 0x5e001eeb, 0x5e001eeb,
+ 0x5e001eeb, 0x5e001eeb, 0x5e001eeb, 0x5e001eeb, 0x5e001eeb,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x05d6b2db, 0x6c924260
+};
+
+static const struct athn_gain ar9485_1_1_tx_gain = {
+ nitems(ar9485_1_1_tx_gain_regs),
+ ar9485_1_1_tx_gain_regs,
  NULL, /* 2GHz only. */
- ar9485_1_0_tx_gain_vals_2g
+ ar9485_1_1_tx_gain_vals_2g
 };
 
 /*
@@ -1789,9 +1810,9 @@ static const struct athn_gain ar9380_2_2
 };
 
 /*
- * AR9485 1.0 Rx gains.
+ * AR9485 1.1 Rx gains.
  */
-static const uint16_t ar9485_1_0_rx_gain_regs[] = {
+static const uint16_t ar9485_1_1_rx_gain_regs[] = {
  P(0x0a000), P(0x0a004), P(0x0a008), P(0x0a00c), P(0x0a010),
  P(0x0a014), P(0x0a018), P(0x0a01c), P(0x0a020), P(0x0a024),
  P(0x0a028), P(0x0a02c), P(0x0a030), P(0x0a034), P(0x0a038),
@@ -1820,20 +1841,20 @@ static const uint16_t ar9485_1_0_rx_gain
  P(0x0a1f4), P(0x0a1f8), P(0x0a1fc)
 };
 
-static const uint32_t ar9485_1_0_rx_gain_vals[] = {
- 0x00010000, 0x00030002, 0x00050004, 0x00810080, 0x01800082,
- 0x01820181, 0x01840183, 0x01880185, 0x018a0189, 0x02850284,
- 0x02890288, 0x03850384, 0x03890388, 0x038b038a, 0x038d038c,
+static const uint32_t ar9485_1_1_rx_gain_vals[] = {
+ 0x00060005, 0x00810080, 0x00830082, 0x00850084, 0x01820181,
+ 0x01840183, 0x01880185, 0x018a0189, 0x02850284, 0x02890288,
+ 0x028b028a, 0x03850384, 0x03890388, 0x038b038a, 0x038d038c,
  0x03910390, 0x03930392, 0x03950394, 0x00000396, 0x00000000,
  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  0x00000000, 0x00000000, 0x28282828, 0x28282828, 0x28282828,
- 0x28282828, 0x28282828, 0x21212128, 0x171c1c1c, 0x02020212,
- 0x00000202, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x001f0000, 0x111f1100,
- 0x111d111e, 0x111b111c, 0x22032204, 0x22012202, 0x221f2200,
- 0x221d221e, 0x33013302, 0x331f3300, 0x4402331e, 0x44004401,
- 0x441e441f, 0x55015502, 0x551f5500, 0x6602551e, 0x66006601,
+ 0x28282828, 0x28282828, 0x24242428, 0x171e1e1e, 0x02020b0b,
+ 0x02020202, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x22072208, 0x22052206,
+ 0x22032204, 0x22012202, 0x221f2200, 0x221d221e, 0x33023303,
+ 0x33003301, 0x331e331f, 0x4402331d, 0x44004401, 0x441e441f,
+ 0x55025503, 0x55005501, 0x551e551f, 0x6602551d, 0x66006601,
  0x661e661f, 0x7703661d, 0x77017702, 0x00007700, 0x00000000,
  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
@@ -1849,22 +1870,49 @@ static const uint32_t ar9485_1_0_rx_gain
  0x00000396, 0x00000396, 0x00000296
 };
 
-static const struct athn_gain ar9485_1_0_rx_gain = {
- nitems(ar9485_1_0_rx_gain_regs),
- ar9485_1_0_rx_gain_regs,
+static const struct athn_gain ar9485_1_1_rx_gain = {
+ nitems(ar9485_1_1_rx_gain_regs),
+ ar9485_1_1_rx_gain_regs,
  NULL, /* 2GHz only. */
- ar9485_1_0_rx_gain_vals
+ ar9485_1_1_rx_gain_vals
 };
 
 /*
  * Serializer/Deserializer programming.
  */
+
+static const uint32_t ar9380_2_2_serdes_regs[] = {
+ AR_PCIE_SERDES,
+ AR_PCIE_SERDES,
+ AR_PCIE_SERDES2
+};
+
 static const uint32_t ar9380_2_2_serdes_vals[] = {
  0x08212e5e,
- 0x0008003b
+ 0x0008003b,
+ 0x00000000
 };
 
 static const struct athn_serdes ar9380_2_2_serdes = {
  nitems(ar9380_2_2_serdes_vals),
+ ar9380_2_2_serdes_regs,
  ar9380_2_2_serdes_vals
+};
+
+static const uint32_t ar9485_1_1_serdes_regs[] = {
+ 0x00018c00,
+ 0x00018c04,
+ 0x00018c08
+};
+
+static const uint32_t ar9485_1_1_serdes_vals[] = {
+ 0x18013e5e,
+ 0x000801d8,
+ 0x0000080c
+};
+
+static const struct athn_serdes ar9485_1_1_serdes = {
+ nitems(ar9485_1_1_serdes_vals),
+ ar9485_1_1_serdes_regs,
+ ar9485_1_1_serdes_vals
 };
Index: athn.c
===================================================================
RCS file: /cvs/src/sys/dev/ic/athn.c,v
retrieving revision 1.73
diff -u -p -r1.73 athn.c
--- athn.c 25 Aug 2012 12:14:31 -0000 1.73
+++ athn.c 7 Oct 2012 16:05:08 -0000
@@ -782,8 +782,7 @@ athn_write_serdes(struct athn_softc *sc,
 
  /* Write sequence to Serializer/Deserializer. */
  for (i = 0; i < serdes->nvals; i++)
- AR_WRITE(sc, AR_PCIE_SERDES, serdes->vals[i]);
- AR_WRITE(sc, AR_PCIE_SERDES2, 0);
+ AR_WRITE(sc, serdes->regs[i], serdes->vals[i]);
  AR_WRITE_BARRIER(sc);
 }
 
Index: athnvar.h
===================================================================
RCS file: /cvs/src/sys/dev/ic/athnvar.h,v
retrieving revision 1.32
diff -u -p -r1.32 athnvar.h
--- athnvar.h 25 Aug 2012 12:14:31 -0000 1.32
+++ athnvar.h 7 Oct 2012 16:05:08 -0000
@@ -208,6 +208,7 @@ struct athn_addac {
 
 struct athn_serdes {
  int nvals;
+ const uint32_t *regs;
  const uint32_t *vals;
 };

Reply | Threaded
Open this post in threaded view
|

Re: update athn(4) ar9485 initvals (please test on any athn(4))

Stefan Sperling-8
On Sun, Oct 07, 2012 at 06:24:39PM +0200, Stefan Sperling wrote:

> The init values athn(4) has for the ar9485 are for version 1.0 of
> this chip, which according to Atheros Linux developers was never sold:
> http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=commitdiff;h=903946e6e21ef4dd678acafb8881cabde9182caf
>
> This diff updates the initvals to what the Linux driver is using
> for the 1.1 generation of the ar9485.
>
> Because the serdes values are written to different registers on the
> ar9485 I had to tweak code for other athn(4) devices, too. So please
> test this on any athn(4) to make sure there are no regressions. Thanks!

krw@ reported that the prior diff crashed his machine because I
overlooked the serdes values table for non-pcie devices.

Here's a hopefully fixed diff. Again, please test for regressions.

Index: ar5416reg.h
===================================================================
RCS file: /cvs/src/sys/dev/ic/ar5416reg.h,v
retrieving revision 1.4
diff -u -p -r1.4 ar5416reg.h
--- ar5416reg.h 10 Jun 2012 21:23:36 -0000 1.4
+++ ar5416reg.h 13 Oct 2012 17:20:50 -0000
@@ -811,6 +811,20 @@ static const uint32_t ar5416_bank6_vals[
 /*
  * Serializer/Deserializer programming.
  */
+
+static const uint32_t ar5416_serdes_regs[] = {
+ AR_PCIE_SERDES,
+ AR_PCIE_SERDES,
+ AR_PCIE_SERDES,
+ AR_PCIE_SERDES,
+ AR_PCIE_SERDES,
+ AR_PCIE_SERDES,
+ AR_PCIE_SERDES,
+ AR_PCIE_SERDES,
+ AR_PCIE_SERDES,
+ AR_PCIE_SERDES2
+};
+
 static const uint32_t ar5416_serdes_vals[] = {
  0x9248fc00,
  0x24924924,
@@ -821,10 +835,12 @@ static const uint32_t ar5416_serdes_vals
  0x001defff,
  0x1aaabe40,
  0xbe105554,
- 0x000e3007
+ 0x000e3007,
+ 0x00000000
 };
 
 static const struct athn_serdes ar5416_serdes = {
  nitems(ar5416_serdes_vals),
- ar5416_serdes_vals
+ ar5416_serdes_regs,
+ ar5416_serdes_vals,
 };
Index: ar9280reg.h
===================================================================
RCS file: /cvs/src/sys/dev/ic/ar9280reg.h,v
retrieving revision 1.5
diff -u -p -r1.5 ar9280reg.h
--- ar9280reg.h 10 Jun 2012 21:23:36 -0000 1.5
+++ ar9280reg.h 13 Oct 2012 17:20:50 -0000
@@ -586,6 +586,20 @@ static const struct athn_gain ar9280_2_0
 /*
  * Serializer/Deserializer programming.
  */
+
+static const uint32_t ar9280_2_0_serdes_regs[] = {
+ AR_PCIE_SERDES,
+ AR_PCIE_SERDES,
+ AR_PCIE_SERDES,
+ AR_PCIE_SERDES,
+ AR_PCIE_SERDES,
+ AR_PCIE_SERDES,
+ AR_PCIE_SERDES,
+ AR_PCIE_SERDES,
+ AR_PCIE_SERDES,
+ AR_PCIE_SERDES2,
+};
+
 static const uint32_t ar9280_2_0_serdes_vals[] = {
  0x9248fd00,
  0x24924924,
@@ -599,10 +613,12 @@ static const uint32_t ar9280_2_0_serdes_
 #endif
  0x1aaabe41,
  0xbe105554,
- 0x00043007
+ 0x00043007,
+ 0x00000000
 };
 
 static const struct athn_serdes ar9280_2_0_serdes = {
  nitems(ar9280_2_0_serdes_vals),
+ ar9280_2_0_serdes_regs,
  ar9280_2_0_serdes_vals
 };
Index: ar9380.c
===================================================================
RCS file: /cvs/src/sys/dev/ic/ar9380.c,v
retrieving revision 1.15
diff -u -p -r1.15 ar9380.c
--- ar9380.c 10 Jun 2012 21:23:36 -0000 1.15
+++ ar9380.c 13 Oct 2012 17:20:50 -0000
@@ -117,11 +117,13 @@ ar9380_attach(struct athn_softc *sc)
  sc->cca_max_2g = AR9380_PHY_CCA_MAX_GOOD_VAL_2GHZ;
  sc->cca_min_5g = AR9380_PHY_CCA_MIN_GOOD_VAL_5GHZ;
  sc->cca_max_5g = AR9380_PHY_CCA_MAX_GOOD_VAL_5GHZ;
- if (AR_SREV_9485(sc))
- sc->ini = &ar9485_1_0_ini;
- else
+ if (AR_SREV_9485(sc)) {
+ sc->ini = &ar9485_1_1_ini;
+ sc->serdes = &ar9485_1_1_serdes;
+ } else {
  sc->ini = &ar9380_2_2_ini;
- sc->serdes = &ar9380_2_2_serdes;
+ sc->serdes = &ar9380_2_2_serdes;
+ }
 
  return (ar9003_attach(sc));
 }
@@ -179,7 +181,7 @@ ar9380_setup(struct athn_softc *sc)
  else
  sc->rx_gain = &ar9380_2_2_rx_gain;
  } else
- sc->rx_gain = &ar9485_1_0_rx_gain;
+ sc->rx_gain = &ar9485_1_1_rx_gain;
 
  /* Select initialization values based on ROM. */
  type = MS(eep->baseEepHeader.txrxgain, AR_EEP_TX_GAIN);
@@ -193,7 +195,7 @@ ar9380_setup(struct athn_softc *sc)
  else
  sc->tx_gain = &ar9380_2_2_tx_gain;
  } else
- sc->tx_gain = &ar9485_1_0_tx_gain;
+ sc->tx_gain = &ar9485_1_1_tx_gain;
 }
 
 const uint8_t *
Index: ar9380reg.h
===================================================================
RCS file: /cvs/src/sys/dev/ic/ar9380reg.h,v
retrieving revision 1.17
diff -u -p -r1.17 ar9380reg.h
--- ar9380reg.h 10 Jun 2012 21:23:36 -0000 1.17
+++ ar9380reg.h 13 Oct 2012 17:20:50 -0000
@@ -1107,12 +1107,12 @@ static const struct athn_ini ar9380_2_2_
 };
 
 /*
- * AR9485 1.0 programming.
+ * AR9485 1.1 programming.
  */
-static const uint16_t ar9485_1_0_regs[] = {
+
+static const uint16_t ar9485_1_1_regs[] = {
  P(0x01030), P(0x01070), P(0x010b0), P(0x08014), P(0x0801c),
- P(0x08120), P(0x081d0), P(0x08318), P(0x1609c), P(0x160ac),
- P(0x160b0), P(0x1610c), P(0x16140), P(0x09810), P(0x09820),
+ P(0x08120), P(0x081d0), P(0x08318), P(0x09810), P(0x09820),
  P(0x09824), P(0x09828), P(0x0982c), P(0x09830), P(0x09c00),
  P(0x09e00), P(0x09e04), P(0x09e0c), P(0x09e10), P(0x09e14),
  P(0x09e18), P(0x09e1c), P(0x09e20), P(0x09e2c), P(0x09e3c),
@@ -1120,27 +1120,27 @@ static const uint16_t ar9485_1_0_regs[]
  P(0x0a230), P(0x0a234), P(0x0a238), P(0x0a250), P(0x0a254),
  P(0x0a258), P(0x0a25c), P(0x0a260), P(0x0a264), P(0x0a280),
  P(0x0a284), P(0x0a288), P(0x0a28c), P(0x0a2c4), P(0x0a2d0),
- P(0x0a2d8), P(0x0a358), P(0x0be04), P(0x0be18)
+ P(0x0a2d8), P(0x0a358), P(0x0be04), P(0x0be18), P(0x1609c),
+ P(0x160ac), P(0x160b0), P(0x1610c), P(0x16140)
 };
 
-static const uint32_t ar9485_1_0_vals_2g40[] = {
+static const uint32_t ar9485_1_1_vals_2g40[] = {
  0x000002c0, 0x00000318, 0x00007c70, 0x10801600, 0x12e00057,
- 0x08f04810, 0x0000320a, 0x00006880, 0x24611800, 0x03284f3e,
- 0x00170000, 0x10804008, 0x00000000, 0xd00a8005, 0x206a002e,
+ 0x08f04810, 0x0000320a, 0x00006880, 0xd00a8005, 0x206a002e,
  0x5ac640d0, 0x06903881, 0x05eea6d4, 0x0000059c, 0x00000044,
  0x037216a0, 0x00182020, 0x6d4000e2, 0x7ec80d2e, 0x3139605e,
  0x00000000, 0x00021f9c, 0x000003ce, 0x00000021, 0xcf946222,
  0x02282324, 0x50302010, 0x0001a000, 0x01303fc4, 0x00000004,
  0x00004016, 0x10000fff, 0xffb81018, 0x00000210, 0x00001130,
  0x02020002, 0x01000e0e, 0x3a021501, 0x00000e0e, 0x0000000b,
- 0x000002a0, 0x00000000, 0x00000000, 0x00158d18, 0x00071981,
- 0xf999a83a, 0x00000000, 0x00802020, 0x00000000
+ 0x000002a0, 0x00000000, 0x00000000, 0x00158d18, 0x00071982,
+ 0xf999a83a, 0x00000000, 0x00802020, 0x00000000, 0x0b283f31,
+ 0x24611800, 0x03284f3e, 0x00170000, 0x50804008
 };
 
-static const uint32_t ar9485_1_0_vals_2g20[] = {
+static const uint32_t ar9485_1_1_vals_2g20[] = {
  0x00000160, 0x0000018c, 0x00003e38, 0x08400b00, 0x12e0002b,
- 0x08f04810, 0x0000320a, 0x00003440, 0x000160b0, 0x0001610c,
- 0x00016140, 0x00000000, 0x00000000, 0xd00a8005, 0x206a002e,
+ 0x08f04810, 0x0000320a, 0x00003440, 0xd00a8005, 0x206a002e,
  0x5ac640d0, 0x06903881, 0x05eea6d4, 0x0000059c, 0x00000044,
  0x037216a0, 0x00182020, 0x6c4000e2, 0x7ec80d2e, 0x31395d5e,
  0x00000000, 0x00021f9c, 0x000003ce, 0x00000021, 0xcf946222,
@@ -1148,173 +1148,180 @@ static const uint32_t ar9485_1_0_vals_2g
  0x0000400b, 0x10000fff, 0xffb81018, 0x00000108, 0x00000898,
  0x02020002, 0x01000e0e, 0x3a021501, 0x00000e0e, 0x0000000b,
  0x000002a0, 0x00000000, 0x00000000, 0x00158d18, 0x00071982,
- 0xf999a83a, 0x00000000, 0x00802020, 0x00000000
+ 0xf999a83a, 0x00000000, 0x00802020, 0x00000000, 0x0b283f31,
+ 0x24611800, 0x03284f3e, 0x00170000, 0x50804008
 };
 
-static const uint16_t ar9485_1_0_cm_regs[] = {
- P(0x040a4), P(0x07048), P(0x00008), P(0x00030), P(0x00034),
- P(0x00040), P(0x00044), P(0x00048), P(0x0004c), P(0x00050),
- P(0x01040), P(0x01044), P(0x01048), P(0x0104c), P(0x01050),
- P(0x01054), P(0x01058), P(0x0105c), P(0x01060), P(0x01064),
- P(0x010f0), P(0x01270), P(0x012b0), P(0x012f0), P(0x0143c),
- P(0x0147c), P(0x08000), P(0x08004), P(0x08008), P(0x0800c),
- P(0x08018), P(0x08020), P(0x08038), P(0x0803c), P(0x08040),
- P(0x08044), P(0x08048), P(0x0804c), P(0x08054), P(0x08058),
- P(0x0805c), P(0x08060), P(0x08064), P(0x08070), P(0x08074),
- P(0x08078), P(0x0809c), P(0x080a0), P(0x080a4), P(0x080a8),
- P(0x080ac), P(0x080b0), P(0x080b4), P(0x080b8), P(0x080bc),
- P(0x080c0), P(0x080c4), P(0x080c8), P(0x080cc), P(0x080d0),
- P(0x080d4), P(0x080d8), P(0x080dc), P(0x080e0), P(0x080e4),
- P(0x080e8), P(0x080ec), P(0x080f0), P(0x080f4), P(0x080fc),
- P(0x08100), P(0x08108), P(0x0810c), P(0x08110), P(0x08114),
- P(0x08118), P(0x0811c), P(0x08124), P(0x08128), P(0x0812c),
- P(0x08130), P(0x08134), P(0x08138), P(0x0813c), P(0x08144),
- P(0x08168), P(0x0816c), P(0x08170), P(0x08174), P(0x08178),
- P(0x0817c), P(0x081c0), P(0x081c4), P(0x081c8), P(0x081cc),
- P(0x081d4), P(0x081ec), P(0x081f0), P(0x081f4), P(0x081f8),
- P(0x081fc), P(0x08240), P(0x08244), P(0x08248), P(0x0824c),
- P(0x08250), P(0x08254), P(0x08258), P(0x0825c), P(0x08260),
- P(0x08264), P(0x08268), P(0x0826c), P(0x08270), P(0x08274),
- P(0x08278), P(0x0827c), P(0x08284), P(0x08288), P(0x0828c),
- P(0x08294), P(0x08298), P(0x0829c), P(0x08300), P(0x08314),
- P(0x0831c), P(0x08328), P(0x0832c), P(0x08330), P(0x08334),
- P(0x08338), P(0x0833c), P(0x08340), P(0x08344), P(0x08348),
- P(0x0835c), P(0x08360), P(0x08364), P(0x08368), P(0x08370),
- P(0x08374), P(0x08378), P(0x0837c), P(0x08380), P(0x08384),
- P(0x08390), P(0x08394), P(0x08398), P(0x0839c), P(0x083a0),
- P(0x083a4), P(0x083a8), P(0x083ac), P(0x083b0), P(0x083b4),
- P(0x083b8), P(0x083bc), P(0x083c0), P(0x083c4), P(0x083c8),
- P(0x083cc), P(0x083d0), P(0x09800), P(0x09804), P(0x09808),
- P(0x0980c), P(0x09814), P(0x09818), P(0x0981c), P(0x09834),
- P(0x09838), P(0x0983c), P(0x09880), P(0x09884), P(0x098a4),
- P(0x098b0), P(0x098bc), P(0x098d0), P(0x098d4), P(0x098dc),
- P(0x098f0), P(0x098f4), P(0x09c04), P(0x09c08), P(0x09c0c),
- P(0x09c10), P(0x09c14), P(0x09c18), P(0x09c1c), P(0x09d00),
- P(0x09d04), P(0x09d08), P(0x09d0c), P(0x09d10), P(0x09d14),
- P(0x09d18), P(0x09d1c), P(0x09e08), P(0x09e24), P(0x09e28),
- P(0x09e30), P(0x09e34), P(0x09e38), P(0x09e40), P(0x09e4c),
- P(0x09e50), P(0x09fc0), P(0x09fc4), P(0x09fcc), P(0x0a20c),
- P(0x0a210), P(0x0a220), P(0x0a224), P(0x0a228), P(0x0a23c),
- P(0x0a244), P(0x0a2a0), P(0x0a2c0), P(0x0a2c8), P(0x0a2cc),
- P(0x0a2d4), P(0x0a2dc), P(0x0a2e0), P(0x0a2e4), P(0x0a2e8),
- P(0x0a2ec), P(0x0a2f0), P(0x0a2f4), P(0x0a2f8), P(0x0a344),
- P(0x0a34c), P(0x0a350), P(0x0a364), P(0x0a370), P(0x0a390),
- P(0x0a394), P(0x0a398), P(0x0a39c), P(0x0a3a0), P(0x0a3a4),
- P(0x0a3a8), P(0x0a3ac), P(0x0a3c0), P(0x0a3c4), P(0x0a3c8),
- P(0x0a3cc), P(0x0a3d0), P(0x0a3d4), P(0x0a3d8), P(0x0a3dc),
- P(0x0a3e0), P(0x0a3e4), P(0x0a3e8), P(0x0a3ec), P(0x0a3f0),
- P(0x0a3f4), P(0x0a3f8), P(0x0a3fc), P(0x0a400), P(0x0a404),
- P(0x0a408), P(0x0a40c), P(0x0a414), P(0x0a418), P(0x0a41c),
- P(0x0a420), P(0x0a424), P(0x0a428), P(0x0a42c), P(0x0a430),
- P(0x0a434), P(0x0a438), P(0x0a43c), P(0x0a440), P(0x0a444),
- P(0x0a448), P(0x0a44c), P(0x0a450), P(0x0a458), P(0x0a5c4),
+static const uint16_t ar9485_1_1_cm_regs[] = {
+ P(0x00008), P(0x00030), P(0x00034), P(0x00040), P(0x00044),
+ P(0x00048), P(0x0004c), P(0x00050), P(0x01040), P(0x01044),
+ P(0x01048), P(0x0104c), P(0x01050), P(0x01054), P(0x01058),
+ P(0x0105c), P(0x01060), P(0x01064), P(0x010f0), P(0x01270),
+ P(0x012b0), P(0x012f0), P(0x0143c), P(0x0147c), P(0x08000),
+ P(0x08004), P(0x08008), P(0x0800c), P(0x08018), P(0x08020),
+ P(0x08038), P(0x0803c), P(0x08040), P(0x08044), P(0x08048),
+ P(0x0804c), P(0x08054), P(0x08058), P(0x0805c), P(0x08060),
+ P(0x08064), P(0x08070), P(0x08074), P(0x08078), P(0x0809c),
+ P(0x080a0), P(0x080a4), P(0x080a8), P(0x080ac), P(0x080b0),
+ P(0x080b4), P(0x080b8), P(0x080bc), P(0x080c0), P(0x080c4),
+ P(0x080c8), P(0x080cc), P(0x080d0), P(0x080d4), P(0x080d8),
+ P(0x080dc), P(0x080e0), P(0x080e4), P(0x080e8), P(0x080ec),
+ P(0x080f0), P(0x080f4), P(0x080fc), P(0x08100), P(0x08108),
+ P(0x0810c), P(0x08110), P(0x08114), P(0x08118), P(0x0811c),
+ P(0x08124), P(0x08128), P(0x0812c), P(0x08130), P(0x08134),
+ P(0x08138), P(0x0813c), P(0x08144), P(0x08168), P(0x0816c),
+ P(0x08170), P(0x08174), P(0x08178), P(0x0817c), P(0x081c0),
+ P(0x081c4), P(0x081d4), P(0x081ec), P(0x081f0), P(0x081f4),
+ P(0x081f8), P(0x081fc), P(0x08240), P(0x08244), P(0x08248),
+ P(0x0824c), P(0x08250), P(0x08254), P(0x08258), P(0x0825c),
+ P(0x08260), P(0x08264), P(0x08268), P(0x0826c), P(0x08270),
+ P(0x08274), P(0x08278), P(0x0827c), P(0x08284), P(0x08288),
+ P(0x0828c), P(0x08294), P(0x08298), P(0x0829c), P(0x08300),
+ P(0x08314), P(0x0831c), P(0x08328), P(0x0832c), P(0x08330),
+ P(0x08334), P(0x08338), P(0x0833c), P(0x08340), P(0x08344),
+ P(0x08348), P(0x0835c), P(0x08360), P(0x08364), P(0x08368),
+ P(0x08370), P(0x08374), P(0x08378), P(0x0837c), P(0x08380),
+ P(0x08384), P(0x08390), P(0x08394), P(0x08398), P(0x0839c),
+ P(0x083a0), P(0x083a4), P(0x083a8), P(0x083ac), P(0x083b0),
+ P(0x083b4), P(0x083b8), P(0x083bc), P(0x083c0), P(0x083c4),
+ P(0x083c8), P(0x083cc), P(0x083d0), P(0x0a580), P(0x0a584),
+ P(0x0a588), P(0x0a58c), P(0x0a590), P(0x0a594), P(0x0a598),
+ P(0x0a59c), P(0x0a5a0), P(0x0a5a4), P(0x0a5a8), P(0x0a5ac),
+ P(0x0a5b0), P(0x0a5b4), P(0x0a5b8), P(0x0a5bc), P(0x09800),
+ P(0x09804), P(0x09808), P(0x0980c), P(0x09814), P(0x09818),
+ P(0x0981c), P(0x09834), P(0x09838), P(0x0983c), P(0x09880),
+ P(0x09884), P(0x098a4), P(0x098b0), P(0x098d0), P(0x098d4),
+ P(0x098dc), P(0x098f0), P(0x098f4), P(0x09c04), P(0x09c08),
+ P(0x09c0c), P(0x09c10), P(0x09c14), P(0x09c18), P(0x09c1c),
+ P(0x09d00), P(0x09d04), P(0x09d08), P(0x09d0c), P(0x09d10),
+ P(0x09d14), P(0x09d18), P(0x09d1c), P(0x09e08), P(0x09e24),
+ P(0x09e28), P(0x09e30), P(0x09e34), P(0x09e38), P(0x09e40),
+ P(0x09e4c), P(0x09e50), P(0x09fc0), P(0x09fc4), P(0x09fcc),
+ P(0x0a20c), P(0x0a210), P(0x0a220), P(0x0a224), P(0x0a228),
+ P(0x0a23c), P(0x0a244), P(0x0a2a0), P(0x0a2c0), P(0x0a2c8),
+ P(0x0a2cc), P(0x0a2d4), P(0x0a2dc), P(0x0a2e0), P(0x0a2e4),
+ P(0x0a2e8), P(0x0a2ec), P(0x0a2f0), P(0x0a2f4), P(0x0a2f8),
+ P(0x0a344), P(0x0a34c), P(0x0a350), P(0x0a364), P(0x0a370),
+ P(0x0a390), P(0x0a394), P(0x0a398), P(0x0a39c), P(0x0a3a0),
+ P(0x0a3a4), P(0x0a3a8), P(0x0a3ac), P(0x0a3c0), P(0x0a3c4),
+ P(0x0a3c8), P(0x0a3cc), P(0x0a3d0), P(0x0a3d4), P(0x0a3d8),
+ P(0x0a3dc), P(0x0a3e0), P(0x0a3e4), P(0x0a3e8), P(0x0a3ec),
+ P(0x0a3f0), P(0x0a3f4), P(0x0a3f8), P(0x0a3fc), P(0x0a400),
+ P(0x0a404), P(0x0a408), P(0x0a40c), P(0x0a414), P(0x0a418),
+ P(0x0a41c), P(0x0a420), P(0x0a424), P(0x0a428), P(0x0a42c),
+ P(0x0a430), P(0x0a434), P(0x0a438), P(0x0a43c), P(0x0a440),
+ P(0x0a444), P(0x0a448), P(0x0a44c), P(0x0a450), P(0x0a5c4),
  P(0x0a5c8), P(0x0a5cc), P(0x0a760), P(0x0a764), P(0x0a768),
  P(0x0a76c), P(0x0a770), P(0x0a774), P(0x0a778), P(0x0a780),
  P(0x0a7c0), P(0x0a7c4), P(0x0a7c8), P(0x0a7cc), P(0x0a7d0),
  P(0x0a7d4), P(0x0a7dc), P(0x16000), P(0x16004), P(0x16008),
- P(0x1600c), P(0x16040), P(0x16048), P(0x1604c), P(0x16050),
- P(0x16054), P(0x16080), P(0x16084), P(0x16088), P(0x1608c),
- P(0x16090), P(0x16098), P(0x160a0), P(0x160a4), P(0x160a8),
- P(0x160b4), P(0x160c0), P(0x160c4), P(0x160c8), P(0x160cc),
- P(0x160d0), P(0x16100), P(0x16104), P(0x16108), P(0x16144),
- P(0x16148), P(0x16180), P(0x16184), P(0x16188), P(0x1618c),
+ P(0x1600c), P(0x16040), P(0x1604c), P(0x16050), P(0x16054),
+ P(0x16080), P(0x16084), P(0x16088), P(0x1608c), P(0x16090),
+ P(0x16098), P(0x160a0), P(0x160a4), P(0x160a8), P(0x160b4),
+ P(0x160c0), P(0x160c4), P(0x160c8), P(0x160cc), P(0x160d0),
+ P(0x16100), P(0x16104), P(0x16108), P(0x16144), P(0x16148),
  P(0x16240), P(0x16244), P(0x16248), P(0x1624c), P(0x16280),
  P(0x16284), P(0x16288), P(0x1628c), P(0x16290), P(0x16380),
  P(0x16384), P(0x16388), P(0x1638c), P(0x16390), P(0x16394),
  P(0x16398), P(0x1639c), P(0x163a0), P(0x163a4), P(0x163a8),
  P(0x163ac), P(0x163b0), P(0x163b4), P(0x163b8), P(0x163bc),
  P(0x163c0), P(0x163c4), P(0x163c8), P(0x163cc), P(0x163d0),
- P(0x163d4), P(0x16c40), P(0x16c44)
+ P(0x163d4), P(0x16c40), P(0x16c44), P(0x04014), P(0x04090),
+ P(0x040a4), P(0x07010), P(0x07020), P(0x07034), P(0x07038),
+ P(0x07048)
 };
 
-static const uint32_t ar9485_1_0_cm_vals[] = {
- 0x00a0c9c9, 0x00000004, 0x00000000, 0x00020085, 0x00000005,
- 0x00000000, 0x00000000, 0x00000008, 0x00000010, 0x00000000,
- 0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x002ffc0f,
+static const uint32_t ar9485_1_1_cm_vals[] = {
+ 0x00000000, 0x00020085, 0x00000005, 0x00000000, 0x00000000,
+ 0x00000008, 0x00000010, 0x00000000, 0x002ffc0f, 0x002ffc0f,
  0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x002ffc0f,
- 0x00000100, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x00000100, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0xffffffff, 0x00000000, 0x00000000, 0x000fc78f, 0x0000000f,
+ 0x00000000, 0x00000310, 0x00000020, 0x00000000, 0x0000000f,
+ 0x00000000, 0x02ff0000, 0x0e070605, 0x0000000d, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x2a800000, 0x06900168,
+ 0x13881c22, 0x01f40000, 0x00252500, 0x00a00000, 0x00400000,
+ 0x00000000, 0xffffffff, 0x0000ffff, 0x3f3f3f3f, 0x00000000,
+ 0x00000000, 0x00000000, 0x00020000, 0x00000000, 0x00000052,
+ 0x00000000, 0x00000000, 0x000007ff, 0x000000aa, 0x00003210,
  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000,
- 0x000fc78f, 0x0000000f, 0x00000000, 0x00000310, 0x00000020,
- 0x00000000, 0x0000000f, 0x00000000, 0x02ff0000, 0x0e070605,
- 0x0000000d, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x2a800000, 0x06900168, 0x13881c20, 0x01f40000, 0x00252500,
- 0x00a00000, 0x00400000, 0x00000000, 0xffffffff, 0x0000ffff,
- 0x3f3f3f3f, 0x00000000, 0x00000000, 0x00000000, 0x00020000,
- 0x00000000, 0x00000052, 0x00000000, 0x00000000, 0x000007ff,
- 0x000000aa, 0x00003210, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x0000ffff, 0xffffffff,
- 0x00000000, 0x00000000, 0x18486200, 0x33332210, 0x00000000,
- 0x00020000, 0x00000000, 0x33332210, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00100000, 0x0010f400, 0x00000800, 0x0001e800,
- 0x00000000, 0x00000000, 0x00000000, 0x40000000, 0x00080922,
- 0x9ca00010, 0xffffffff, 0x0000ffff, 0x00000000, 0x40000000,
- 0x003e4180, 0x00000004, 0x0000002c, 0x0000002c, 0x000000ff,
- 0x00000000, 0x00000000, 0x00000000, 0x00000140, 0x00000000,
- 0x0000010d, 0x00000000, 0x00000007, 0x00000302, 0x00000700,
- 0x00ff0000, 0x02400000, 0x000107ff, 0xa248105b, 0x008f0000,
- 0x00000000, 0xffffffff, 0xffffffff, 0x00000000, 0x00000000,
- 0x000000ff, 0x00000000, 0x00000000, 0xffffffff, 0xffffffff,
- 0xffffffff, 0xffffffff, 0x00000000, 0x00000000, 0x00000000,
- 0x0000fa14, 0x000f0c00, 0x33332210, 0x33332210, 0x33332210,
+ 0x00000000, 0x0000ffff, 0xffffffff, 0x00000000, 0x00000000,
+ 0x18486200, 0x33332210, 0x00000000, 0x00020000, 0x00000000,
  0x33332210, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000200, 0x000301ff, 0xafe68e30, 0xfd14e000, 0x9c0a8f6b,
- 0x04800000, 0x9280c00a, 0x00000000, 0x00020028, 0x5f3ca3de,
- 0x0108ecff, 0x14750600, 0x201fff00, 0x00001042, 0x00200400,
- 0x52440bbe, 0x00000002, 0x004b6a8e, 0x00000820, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x03200000, 0x00000000,
- 0x00000000, 0x00046384, 0x05b6b440, 0x00b6b440, 0xc080a333,
- 0x40206c10, 0x009c4060, 0x1883800a, 0x01834061, 0x00c00400,
- 0x00000000, 0x00000000, 0x0038233c, 0x990bb515, 0x0a6f0000,
- 0x06336f77, 0x6af6532f, 0x0cc80c00, 0x0d261820, 0x00001004,
- 0x00ff03f1, 0x80be4788, 0x0001efb5, 0x40000014, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x10002310, 0x00000000,
- 0x0c000000, 0x00000001, 0x00000001, 0x00000000, 0x18c43433,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x0000a000, 0x00000000, 0x00000000, 0x00000001,
- 0x00000444, 0x001f0e0f, 0x0075393f, 0xb79f6427, 0x00000000,
- 0xaaaaaaaa, 0x3c466478, 0x20202020, 0x22222220, 0x20200020,
+ 0x00000000, 0x00000000, 0x00100000, 0x0010f400, 0x00000800,
+ 0x0001e800, 0x00000000, 0x00000000, 0x00000000, 0x40000000,
+ 0x00080922, 0x9ca00010, 0xffffffff, 0x0000ffff, 0x00000000,
+ 0x40000000, 0x003e4180, 0x00000004, 0x0000002c, 0x0000002c,
+ 0x000000ff, 0x00000000, 0x00000000, 0x00000000, 0x00000140,
+ 0x00000000, 0x0000010d, 0x00000000, 0x00000007, 0x00000302,
+ 0x00000700, 0x00ff0000, 0x02400000, 0x000107ff, 0xa248105b,
+ 0x008f0000, 0x00000000, 0xffffffff, 0xffffffff, 0x00000000,
+ 0x00000000, 0x000000ff, 0x00000000, 0x00000000, 0xffffffff,
+ 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, 0x00000000,
+ 0x00000000, 0x0000fa14, 0x000f0c00, 0x33332210, 0x33332210,
+ 0x33332210, 0x33332210, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000200, 0x000301ff, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xafe68e30,
+ 0xfd14e000, 0x9c0a8f6b, 0x04800000, 0x9280c00a, 0x00000000,
+ 0x00020028, 0x5f3ca3de, 0x0108ecff, 0x14750600, 0x201fff00,
+ 0x00001042, 0x00200400, 0x52440bbe, 0x004b6a8e, 0x00000820,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03200000,
+ 0x00000000, 0x00000000, 0x00046384, 0x05b6b440, 0x00b6b440,
+ 0xc080a333, 0x40206c10, 0x009c4060, 0x1883800a, 0x01834061,
+ 0x00c00400, 0x00000000, 0x00000000, 0x0038233c, 0x9927b515,
+ 0x12ef0200, 0x06336f77, 0x6af6532f, 0x0cc80c00, 0x0d261820,
+ 0x00001004, 0x00ff03f1, 0x80be4788, 0x0001efb5, 0x40000014,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10002310,
+ 0x00000000, 0x0c000000, 0x00000001, 0x00000001, 0x00000000,
+ 0x18c43433, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x0000a000, 0x00000000, 0x00000000,
+ 0x00000001, 0x00000444, 0x001f0e0f, 0x0075393f, 0xb79f6427,
+ 0x000000ff, 0x3b3b3b3b, 0x2f2f2f2f, 0x20202020, 0x22222220,
+ 0x20200020, 0x20202020, 0x20202020, 0x20202020, 0x20202020,
  0x20202020, 0x20202020, 0x20202020, 0x20202020, 0x20202020,
- 0x20202020, 0x20202020, 0x20202020, 0x20202020, 0x00000000,
- 0x00000006, 0x0cdbd380, 0x000f0f01, 0x8fa91f01, 0x00000000,
- 0x0e79e5c6, 0x00820820, 0x1ce739ce, 0x2d0011ce, 0x1ce739ce,
- 0x000001ce, 0x1ce739ce, 0x000001ce, 0x1ce739ce, 0x1ce739ce,
- 0x00000000, 0x00001801, 0x00000000, 0x00000000, 0x00000000,
- 0x04000000, 0x00000001, 0x00010000, 0x00000000, 0x3fad9d74,
+ 0x00000000, 0x00000006, 0x0cdbd380, 0x000f0f01, 0x8fa91f01,
+ 0x00000000, 0x0e79e5c6, 0x00820820, 0x1ce739cf, 0x2d0019ce,
+ 0x1ce739ce, 0x000001ce, 0x1ce739ce, 0x000001ce, 0x1ce739ce,
+ 0x1ce739ce, 0x00000000, 0x00001801, 0x00000000, 0x00000000,
+ 0x00000000, 0x04000000, 0x00000001, 0x00010000, 0xbfad9d74,
  0x0048060a, 0x00000637, 0x03020100, 0x09080504, 0x0d0c0b0a,
  0x13121110, 0x31301514, 0x35343332, 0x00000036, 0x00000838,
  0x00000000, 0xfffffffc, 0x00000000, 0x00000000, 0x00000000,
- 0x00000004, 0x00000001, 0x36db6db6, 0x6db6db40, 0x73800000,
- 0x00000000, 0x7f80fff8, 0x6c92426e, 0x000f0278, 0x6db6db6c,
- 0x6db60000, 0x00080000, 0x0e48048c, 0x14214514, 0x119f081e,
- 0x24926490, 0xd28b3330, 0xc2108ffe, 0x812fc370, 0x423c8000,
- 0x92480040, 0x006db6db, 0x0186db60, 0x6db6db6c, 0x6de6fbe0,
- 0xf7dfcf3c, 0x04cb0001, 0xfff80015, 0x00080010, 0x01884080,
- 0x00008040, 0x08453333, 0x18e82f01, 0x00000000, 0x00000000,
+ 0x00000004, 0x00000000, 0x36db6db6, 0x6db6db40, 0x73800000,
+ 0x00000000, 0x7f80fff8, 0x000f0278, 0x4db6db8c, 0x6db60000,
+ 0x00080000, 0x0e48048c, 0x14214514, 0x119f081e, 0x24926490,
+ 0xd28b3330, 0xc2108ffe, 0x812fc370, 0x423c8000, 0x92480040,
+ 0x006db6db, 0x0186db60, 0x6db6db6c, 0x6de6fbe0, 0xf7dfcf3c,
+ 0x04cb0001, 0xfff80015, 0x00080010, 0x01884080, 0x00008040,
  0x08400000, 0x1bf90f00, 0x00000000, 0x00000000, 0x01000015,
  0x00d30000, 0x00318000, 0x50000000, 0x4b96210f, 0x00000000,
  0x00000000, 0x00800700, 0x00800700, 0x00800700, 0x00000000,
  0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000000,
  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  0x000000a0, 0x000c0000, 0x14021402, 0x00001402, 0x00000000,
- 0x00000000, 0x1319c178, 0x10000000
+ 0x00000000, 0x13188278, 0x12000000, 0xba280400, 0x00aa10aa,
+ 0x00a0c9c9, 0x00000022, 0x00000000, 0x00000002, 0x000004c2,
+ 0x00000002
 };
 
-static const struct athn_ini ar9485_1_0_ini = {
- nitems(ar9485_1_0_regs),
- ar9485_1_0_regs,
+static const struct athn_ini ar9485_1_1_ini = {
+ nitems(ar9485_1_1_regs),
+ ar9485_1_1_regs,
  NULL, /* 2GHz only. */
 #ifndef IEEE80211_NO_HT
  NULL, /* 2GHz only. */
- ar9485_1_0_vals_2g40,
+ ar9485_1_1_vals_2g40,
 #endif
- ar9485_1_0_vals_2g20,
- nitems(ar9485_1_0_cm_regs),
- ar9485_1_0_cm_regs,
- ar9485_1_0_cm_vals
+ ar9485_1_1_vals_2g20,
+ nitems(ar9485_1_1_cm_regs),
+ ar9485_1_1_cm_regs,
+ ar9485_1_1_cm_vals
 };
 
 /*
@@ -1574,33 +1581,47 @@ static const struct athn_gain ar9380_2_2
 };
 
 /*
- * AR9485 1.0 Tx gains.
+ * AR9485 1.1 Tx gains.
  */
-static const uint16_t ar9485_1_0_tx_gain_regs[] = {
- P(0x0a410), P(0x0a500), P(0x0a504), P(0x0a508), P(0x0a50c),
- P(0x0a510), P(0x0a514), P(0x0a518), P(0x0a51c), P(0x0a520),
- P(0x0a524), P(0x0a528), P(0x0a52c), P(0x0a530), P(0x0a534),
- P(0x0a538), P(0x0a53c), P(0x0a540), P(0x0a544), P(0x0a548),
- P(0x0a54c), P(0x0a550), P(0x0a554), P(0x0a558), P(0x0a55c),
- P(0x0a560), P(0x0a564), P(0x0a568), P(0x0a56c), P(0x0a570),
- P(0x0a574), P(0x0a578), P(0x0a57c), P(0x16044)
-};
-
-static const uint32_t ar9485_1_0_tx_gain_vals_2g[] = {
- 0x000050d8, 0x00000000, 0x04000002, 0x08000004, 0x0d000200,
- 0x11000202, 0x15000400, 0x19000402, 0x1d000404, 0x21000603,
- 0x25000605, 0x2a000a03, 0x2c000a04, 0x2e000a20, 0x34000e20,
- 0x38000e22, 0x3c000e24, 0x40000e26, 0x43001640, 0x46001660,
- 0x49001861, 0x4c001a81, 0x4f001a83, 0x54001c85, 0x58001ce5,
- 0x5b001ce9, 0x60001eeb, 0x60001eeb, 0x60001eeb, 0x60001eeb,
- 0x60001eeb, 0x60001eeb, 0x60001eeb, 0x05b6b2db
-};
-
-static const struct athn_gain ar9485_1_0_tx_gain = {
- nitems(ar9485_1_0_tx_gain_regs),
- ar9485_1_0_tx_gain_regs,
+static const uint16_t ar9485_1_1_tx_gain_regs[] = {
+ P(0x098bc), P(0x0a410), P(0x0a458), P(0x0a500), P(0x0a504),
+ P(0x0a508), P(0x0a50c), P(0x0a510), P(0x0a514), P(0x0a518),
+ P(0x0a51c), P(0x0a520), P(0x0a524), P(0x0a528), P(0x0a52c),
+ P(0x0a530), P(0x0a534), P(0x0a538), P(0x0a53c), P(0x0a540),
+ P(0x0a544), P(0x0a548), P(0x0a54c), P(0x0a550), P(0x0a554),
+ P(0x0a558), P(0x0a55c), P(0x0a560), P(0x0a564), P(0x0a568),
+ P(0x0a56c), P(0x0a570), P(0x0a574), P(0x0a578), P(0x0a57c),
+ P(0x0b500), P(0x0b504), P(0x0b508), P(0x0b50c), P(0x0b510),
+ P(0x0b514), P(0x0b518), P(0x0b51c), P(0x0b520), P(0x0b524),
+ P(0x0b528), P(0x0b52c), P(0x0b530), P(0x0b534), P(0x0b538),
+ P(0x0b53c), P(0x0b540), P(0x0b544), P(0x0b548), P(0x0b54c),
+ P(0x0b550), P(0x0b554), P(0x0b558), P(0x0b55c), P(0x0b560),
+ P(0x0b564), P(0x0b568), P(0x0b56c), P(0x0b570), P(0x0b574),
+ P(0x0b578), P(0x0b57c), P(0x16044), P(0x16048),
+};
+
+static const uint32_t ar9485_1_1_tx_gain_vals_2g[] = {
+ 0x00000002, 0x000050d8, 0x00000000, 0x00000000, 0x04000002,
+ 0x08000004, 0x0d000200, 0x11000202, 0x15000400, 0x19000402,
+ 0x1d000404, 0x21000603, 0x25000605, 0x2a000a03, 0x2c000a04,
+ 0x34000e20, 0x35000e21, 0x43000e62, 0x45000e63, 0x49000e65,
+ 0x4b000e66, 0x4d001645, 0x51001865, 0x55001a86, 0x57001ce9,
+ 0x5a001ceb, 0x5e001eeb, 0x5e001eeb, 0x5e001eeb, 0x5e001eeb,
+ 0x5e001eeb, 0x5e001eeb, 0x5e001eeb, 0x5e001eeb, 0x5e001eeb,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x05d6b2db, 0x6c924260
+};
+
+static const struct athn_gain ar9485_1_1_tx_gain = {
+ nitems(ar9485_1_1_tx_gain_regs),
+ ar9485_1_1_tx_gain_regs,
  NULL, /* 2GHz only. */
- ar9485_1_0_tx_gain_vals_2g
+ ar9485_1_1_tx_gain_vals_2g
 };
 
 /*
@@ -1789,9 +1810,9 @@ static const struct athn_gain ar9380_2_2
 };
 
 /*
- * AR9485 1.0 Rx gains.
+ * AR9485 1.1 Rx gains.
  */
-static const uint16_t ar9485_1_0_rx_gain_regs[] = {
+static const uint16_t ar9485_1_1_rx_gain_regs[] = {
  P(0x0a000), P(0x0a004), P(0x0a008), P(0x0a00c), P(0x0a010),
  P(0x0a014), P(0x0a018), P(0x0a01c), P(0x0a020), P(0x0a024),
  P(0x0a028), P(0x0a02c), P(0x0a030), P(0x0a034), P(0x0a038),
@@ -1820,20 +1841,20 @@ static const uint16_t ar9485_1_0_rx_gain
  P(0x0a1f4), P(0x0a1f8), P(0x0a1fc)
 };
 
-static const uint32_t ar9485_1_0_rx_gain_vals[] = {
- 0x00010000, 0x00030002, 0x00050004, 0x00810080, 0x01800082,
- 0x01820181, 0x01840183, 0x01880185, 0x018a0189, 0x02850284,
- 0x02890288, 0x03850384, 0x03890388, 0x038b038a, 0x038d038c,
+static const uint32_t ar9485_1_1_rx_gain_vals[] = {
+ 0x00060005, 0x00810080, 0x00830082, 0x00850084, 0x01820181,
+ 0x01840183, 0x01880185, 0x018a0189, 0x02850284, 0x02890288,
+ 0x028b028a, 0x03850384, 0x03890388, 0x038b038a, 0x038d038c,
  0x03910390, 0x03930392, 0x03950394, 0x00000396, 0x00000000,
  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  0x00000000, 0x00000000, 0x28282828, 0x28282828, 0x28282828,
- 0x28282828, 0x28282828, 0x21212128, 0x171c1c1c, 0x02020212,
- 0x00000202, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x001f0000, 0x111f1100,
- 0x111d111e, 0x111b111c, 0x22032204, 0x22012202, 0x221f2200,
- 0x221d221e, 0x33013302, 0x331f3300, 0x4402331e, 0x44004401,
- 0x441e441f, 0x55015502, 0x551f5500, 0x6602551e, 0x66006601,
+ 0x28282828, 0x28282828, 0x24242428, 0x171e1e1e, 0x02020b0b,
+ 0x02020202, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x22072208, 0x22052206,
+ 0x22032204, 0x22012202, 0x221f2200, 0x221d221e, 0x33023303,
+ 0x33003301, 0x331e331f, 0x4402331d, 0x44004401, 0x441e441f,
+ 0x55025503, 0x55005501, 0x551e551f, 0x6602551d, 0x66006601,
  0x661e661f, 0x7703661d, 0x77017702, 0x00007700, 0x00000000,
  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
@@ -1849,22 +1870,49 @@ static const uint32_t ar9485_1_0_rx_gain
  0x00000396, 0x00000396, 0x00000296
 };
 
-static const struct athn_gain ar9485_1_0_rx_gain = {
- nitems(ar9485_1_0_rx_gain_regs),
- ar9485_1_0_rx_gain_regs,
+static const struct athn_gain ar9485_1_1_rx_gain = {
+ nitems(ar9485_1_1_rx_gain_regs),
+ ar9485_1_1_rx_gain_regs,
  NULL, /* 2GHz only. */
- ar9485_1_0_rx_gain_vals
+ ar9485_1_1_rx_gain_vals
 };
 
 /*
  * Serializer/Deserializer programming.
  */
+
+static const uint32_t ar9380_2_2_serdes_regs[] = {
+ AR_PCIE_SERDES,
+ AR_PCIE_SERDES,
+ AR_PCIE_SERDES2
+};
+
 static const uint32_t ar9380_2_2_serdes_vals[] = {
  0x08212e5e,
- 0x0008003b
+ 0x0008003b,
+ 0x00000000
 };
 
 static const struct athn_serdes ar9380_2_2_serdes = {
  nitems(ar9380_2_2_serdes_vals),
+ ar9380_2_2_serdes_regs,
  ar9380_2_2_serdes_vals
+};
+
+static const uint32_t ar9485_1_1_serdes_regs[] = {
+ 0x00018c00,
+ 0x00018c04,
+ 0x00018c08
+};
+
+static const uint32_t ar9485_1_1_serdes_vals[] = {
+ 0x18013e5e,
+ 0x000801d8,
+ 0x0000080c
+};
+
+static const struct athn_serdes ar9485_1_1_serdes = {
+ nitems(ar9485_1_1_serdes_vals),
+ ar9485_1_1_serdes_regs,
+ ar9485_1_1_serdes_vals
 };
Index: athn.c
===================================================================
RCS file: /cvs/src/sys/dev/ic/athn.c,v
retrieving revision 1.73
diff -u -p -r1.73 athn.c
--- athn.c 25 Aug 2012 12:14:31 -0000 1.73
+++ athn.c 13 Oct 2012 17:20:50 -0000
@@ -782,8 +782,7 @@ athn_write_serdes(struct athn_softc *sc,
 
  /* Write sequence to Serializer/Deserializer. */
  for (i = 0; i < serdes->nvals; i++)
- AR_WRITE(sc, AR_PCIE_SERDES, serdes->vals[i]);
- AR_WRITE(sc, AR_PCIE_SERDES2, 0);
+ AR_WRITE(sc, serdes->regs[i], serdes->vals[i]);
  AR_WRITE_BARRIER(sc);
 }
 
@@ -808,6 +807,19 @@ athn_config_pcie(struct athn_softc *sc)
 /*
  * Serializer/Deserializer programming for non-PCIe devices.
  */
+static const uint32_t ar_nonpcie_serdes_regs[] = {
+ AR_PCIE_SERDES,
+ AR_PCIE_SERDES,
+ AR_PCIE_SERDES,
+ AR_PCIE_SERDES,
+ AR_PCIE_SERDES,
+ AR_PCIE_SERDES,
+ AR_PCIE_SERDES,
+ AR_PCIE_SERDES,
+ AR_PCIE_SERDES,
+ AR_PCIE_SERDES2,
+};
+
 static const uint32_t ar_nonpcie_serdes_vals[] = {
  0x9248fc00,
  0x24924924,
@@ -817,11 +829,13 @@ static const uint32_t ar_nonpcie_serdes_
  0x00000000,
  0x1aaabe40,
  0xbe105554,
- 0x000e1007
+ 0x000e1007,
+ 0x00000000
 };
 
 static const struct athn_serdes ar_nonpcie_serdes = {
  nitems(ar_nonpcie_serdes_vals),
+ ar_nonpcie_serdes_regs,
  ar_nonpcie_serdes_vals
 };
 
Index: athnvar.h
===================================================================
RCS file: /cvs/src/sys/dev/ic/athnvar.h,v
retrieving revision 1.32
diff -u -p -r1.32 athnvar.h
--- athnvar.h 25 Aug 2012 12:14:31 -0000 1.32
+++ athnvar.h 13 Oct 2012 17:20:50 -0000
@@ -208,6 +208,7 @@ struct athn_addac {
 
 struct athn_serdes {
  int nvals;
+ const uint32_t *regs;
  const uint32_t *vals;
 };

Reply | Threaded
Open this post in threaded view
|

Re: update athn(4) ar9485 initvals (please test on any athn(4))

Kenneth R Westerback
On Sat, Oct 13, 2012 at 07:26:30PM +0200, Stefan Sperling wrote:

> On Sun, Oct 07, 2012 at 06:24:39PM +0200, Stefan Sperling wrote:
> > The init values athn(4) has for the ar9485 are for version 1.0 of
> > this chip, which according to Atheros Linux developers was never sold:
> > http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=commitdiff;h=903946e6e21ef4dd678acafb8881cabde9182caf
> >
> > This diff updates the initvals to what the Linux driver is using
> > for the 1.1 generation of the ar9485.
> >
> > Because the serdes values are written to different registers on the
> > ar9485 I had to tweak code for other athn(4) devices, too. So please
> > test this on any athn(4) to make sure there are no regressions. Thanks!
>
> krw@ reported that the prior diff crashed his machine because I
> overlooked the serdes values table for non-pcie devices.
>
> Here's a hopefully fixed diff. Again, please test for regressions.

This one does *not* blow up athn0 machine. :-)

No regressions noted so far.

.... Ken

>
> Index: ar5416reg.h
> ===================================================================
> RCS file: /cvs/src/sys/dev/ic/ar5416reg.h,v
> retrieving revision 1.4
> diff -u -p -r1.4 ar5416reg.h
> --- ar5416reg.h 10 Jun 2012 21:23:36 -0000 1.4
> +++ ar5416reg.h 13 Oct 2012 17:20:50 -0000
> @@ -811,6 +811,20 @@ static const uint32_t ar5416_bank6_vals[
>  /*
>   * Serializer/Deserializer programming.
>   */
> +
> +static const uint32_t ar5416_serdes_regs[] = {
> + AR_PCIE_SERDES,
> + AR_PCIE_SERDES,
> + AR_PCIE_SERDES,
> + AR_PCIE_SERDES,
> + AR_PCIE_SERDES,
> + AR_PCIE_SERDES,
> + AR_PCIE_SERDES,
> + AR_PCIE_SERDES,
> + AR_PCIE_SERDES,
> + AR_PCIE_SERDES2
> +};
> +
>  static const uint32_t ar5416_serdes_vals[] = {
>   0x9248fc00,
>   0x24924924,
> @@ -821,10 +835,12 @@ static const uint32_t ar5416_serdes_vals
>   0x001defff,
>   0x1aaabe40,
>   0xbe105554,
> - 0x000e3007
> + 0x000e3007,
> + 0x00000000
>  };
>  
>  static const struct athn_serdes ar5416_serdes = {
>   nitems(ar5416_serdes_vals),
> - ar5416_serdes_vals
> + ar5416_serdes_regs,
> + ar5416_serdes_vals,
>  };
> Index: ar9280reg.h
> ===================================================================
> RCS file: /cvs/src/sys/dev/ic/ar9280reg.h,v
> retrieving revision 1.5
> diff -u -p -r1.5 ar9280reg.h
> --- ar9280reg.h 10 Jun 2012 21:23:36 -0000 1.5
> +++ ar9280reg.h 13 Oct 2012 17:20:50 -0000
> @@ -586,6 +586,20 @@ static const struct athn_gain ar9280_2_0
>  /*
>   * Serializer/Deserializer programming.
>   */
> +
> +static const uint32_t ar9280_2_0_serdes_regs[] = {
> + AR_PCIE_SERDES,
> + AR_PCIE_SERDES,
> + AR_PCIE_SERDES,
> + AR_PCIE_SERDES,
> + AR_PCIE_SERDES,
> + AR_PCIE_SERDES,
> + AR_PCIE_SERDES,
> + AR_PCIE_SERDES,
> + AR_PCIE_SERDES,
> + AR_PCIE_SERDES2,
> +};
> +
>  static const uint32_t ar9280_2_0_serdes_vals[] = {
>   0x9248fd00,
>   0x24924924,
> @@ -599,10 +613,12 @@ static const uint32_t ar9280_2_0_serdes_
>  #endif
>   0x1aaabe41,
>   0xbe105554,
> - 0x00043007
> + 0x00043007,
> + 0x00000000
>  };
>  
>  static const struct athn_serdes ar9280_2_0_serdes = {
>   nitems(ar9280_2_0_serdes_vals),
> + ar9280_2_0_serdes_regs,
>   ar9280_2_0_serdes_vals
>  };
> Index: ar9380.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/ic/ar9380.c,v
> retrieving revision 1.15
> diff -u -p -r1.15 ar9380.c
> --- ar9380.c 10 Jun 2012 21:23:36 -0000 1.15
> +++ ar9380.c 13 Oct 2012 17:20:50 -0000
> @@ -117,11 +117,13 @@ ar9380_attach(struct athn_softc *sc)
>   sc->cca_max_2g = AR9380_PHY_CCA_MAX_GOOD_VAL_2GHZ;
>   sc->cca_min_5g = AR9380_PHY_CCA_MIN_GOOD_VAL_5GHZ;
>   sc->cca_max_5g = AR9380_PHY_CCA_MAX_GOOD_VAL_5GHZ;
> - if (AR_SREV_9485(sc))
> - sc->ini = &ar9485_1_0_ini;
> - else
> + if (AR_SREV_9485(sc)) {
> + sc->ini = &ar9485_1_1_ini;
> + sc->serdes = &ar9485_1_1_serdes;
> + } else {
>   sc->ini = &ar9380_2_2_ini;
> - sc->serdes = &ar9380_2_2_serdes;
> + sc->serdes = &ar9380_2_2_serdes;
> + }
>  
>   return (ar9003_attach(sc));
>  }
> @@ -179,7 +181,7 @@ ar9380_setup(struct athn_softc *sc)
>   else
>   sc->rx_gain = &ar9380_2_2_rx_gain;
>   } else
> - sc->rx_gain = &ar9485_1_0_rx_gain;
> + sc->rx_gain = &ar9485_1_1_rx_gain;
>  
>   /* Select initialization values based on ROM. */
>   type = MS(eep->baseEepHeader.txrxgain, AR_EEP_TX_GAIN);
> @@ -193,7 +195,7 @@ ar9380_setup(struct athn_softc *sc)
>   else
>   sc->tx_gain = &ar9380_2_2_tx_gain;
>   } else
> - sc->tx_gain = &ar9485_1_0_tx_gain;
> + sc->tx_gain = &ar9485_1_1_tx_gain;
>  }
>  
>  const uint8_t *
> Index: ar9380reg.h
> ===================================================================
> RCS file: /cvs/src/sys/dev/ic/ar9380reg.h,v
> retrieving revision 1.17
> diff -u -p -r1.17 ar9380reg.h
> --- ar9380reg.h 10 Jun 2012 21:23:36 -0000 1.17
> +++ ar9380reg.h 13 Oct 2012 17:20:50 -0000
> @@ -1107,12 +1107,12 @@ static const struct athn_ini ar9380_2_2_
>  };
>  
>  /*
> - * AR9485 1.0 programming.
> + * AR9485 1.1 programming.
>   */
> -static const uint16_t ar9485_1_0_regs[] = {
> +
> +static const uint16_t ar9485_1_1_regs[] = {
>   P(0x01030), P(0x01070), P(0x010b0), P(0x08014), P(0x0801c),
> - P(0x08120), P(0x081d0), P(0x08318), P(0x1609c), P(0x160ac),
> - P(0x160b0), P(0x1610c), P(0x16140), P(0x09810), P(0x09820),
> + P(0x08120), P(0x081d0), P(0x08318), P(0x09810), P(0x09820),
>   P(0x09824), P(0x09828), P(0x0982c), P(0x09830), P(0x09c00),
>   P(0x09e00), P(0x09e04), P(0x09e0c), P(0x09e10), P(0x09e14),
>   P(0x09e18), P(0x09e1c), P(0x09e20), P(0x09e2c), P(0x09e3c),
> @@ -1120,27 +1120,27 @@ static const uint16_t ar9485_1_0_regs[]
>   P(0x0a230), P(0x0a234), P(0x0a238), P(0x0a250), P(0x0a254),
>   P(0x0a258), P(0x0a25c), P(0x0a260), P(0x0a264), P(0x0a280),
>   P(0x0a284), P(0x0a288), P(0x0a28c), P(0x0a2c4), P(0x0a2d0),
> - P(0x0a2d8), P(0x0a358), P(0x0be04), P(0x0be18)
> + P(0x0a2d8), P(0x0a358), P(0x0be04), P(0x0be18), P(0x1609c),
> + P(0x160ac), P(0x160b0), P(0x1610c), P(0x16140)
>  };
>  
> -static const uint32_t ar9485_1_0_vals_2g40[] = {
> +static const uint32_t ar9485_1_1_vals_2g40[] = {
>   0x000002c0, 0x00000318, 0x00007c70, 0x10801600, 0x12e00057,
> - 0x08f04810, 0x0000320a, 0x00006880, 0x24611800, 0x03284f3e,
> - 0x00170000, 0x10804008, 0x00000000, 0xd00a8005, 0x206a002e,
> + 0x08f04810, 0x0000320a, 0x00006880, 0xd00a8005, 0x206a002e,
>   0x5ac640d0, 0x06903881, 0x05eea6d4, 0x0000059c, 0x00000044,
>   0x037216a0, 0x00182020, 0x6d4000e2, 0x7ec80d2e, 0x3139605e,
>   0x00000000, 0x00021f9c, 0x000003ce, 0x00000021, 0xcf946222,
>   0x02282324, 0x50302010, 0x0001a000, 0x01303fc4, 0x00000004,
>   0x00004016, 0x10000fff, 0xffb81018, 0x00000210, 0x00001130,
>   0x02020002, 0x01000e0e, 0x3a021501, 0x00000e0e, 0x0000000b,
> - 0x000002a0, 0x00000000, 0x00000000, 0x00158d18, 0x00071981,
> - 0xf999a83a, 0x00000000, 0x00802020, 0x00000000
> + 0x000002a0, 0x00000000, 0x00000000, 0x00158d18, 0x00071982,
> + 0xf999a83a, 0x00000000, 0x00802020, 0x00000000, 0x0b283f31,
> + 0x24611800, 0x03284f3e, 0x00170000, 0x50804008
>  };
>  
> -static const uint32_t ar9485_1_0_vals_2g20[] = {
> +static const uint32_t ar9485_1_1_vals_2g20[] = {
>   0x00000160, 0x0000018c, 0x00003e38, 0x08400b00, 0x12e0002b,
> - 0x08f04810, 0x0000320a, 0x00003440, 0x000160b0, 0x0001610c,
> - 0x00016140, 0x00000000, 0x00000000, 0xd00a8005, 0x206a002e,
> + 0x08f04810, 0x0000320a, 0x00003440, 0xd00a8005, 0x206a002e,
>   0x5ac640d0, 0x06903881, 0x05eea6d4, 0x0000059c, 0x00000044,
>   0x037216a0, 0x00182020, 0x6c4000e2, 0x7ec80d2e, 0x31395d5e,
>   0x00000000, 0x00021f9c, 0x000003ce, 0x00000021, 0xcf946222,
> @@ -1148,173 +1148,180 @@ static const uint32_t ar9485_1_0_vals_2g
>   0x0000400b, 0x10000fff, 0xffb81018, 0x00000108, 0x00000898,
>   0x02020002, 0x01000e0e, 0x3a021501, 0x00000e0e, 0x0000000b,
>   0x000002a0, 0x00000000, 0x00000000, 0x00158d18, 0x00071982,
> - 0xf999a83a, 0x00000000, 0x00802020, 0x00000000
> + 0xf999a83a, 0x00000000, 0x00802020, 0x00000000, 0x0b283f31,
> + 0x24611800, 0x03284f3e, 0x00170000, 0x50804008
>  };
>  
> -static const uint16_t ar9485_1_0_cm_regs[] = {
> - P(0x040a4), P(0x07048), P(0x00008), P(0x00030), P(0x00034),
> - P(0x00040), P(0x00044), P(0x00048), P(0x0004c), P(0x00050),
> - P(0x01040), P(0x01044), P(0x01048), P(0x0104c), P(0x01050),
> - P(0x01054), P(0x01058), P(0x0105c), P(0x01060), P(0x01064),
> - P(0x010f0), P(0x01270), P(0x012b0), P(0x012f0), P(0x0143c),
> - P(0x0147c), P(0x08000), P(0x08004), P(0x08008), P(0x0800c),
> - P(0x08018), P(0x08020), P(0x08038), P(0x0803c), P(0x08040),
> - P(0x08044), P(0x08048), P(0x0804c), P(0x08054), P(0x08058),
> - P(0x0805c), P(0x08060), P(0x08064), P(0x08070), P(0x08074),
> - P(0x08078), P(0x0809c), P(0x080a0), P(0x080a4), P(0x080a8),
> - P(0x080ac), P(0x080b0), P(0x080b4), P(0x080b8), P(0x080bc),
> - P(0x080c0), P(0x080c4), P(0x080c8), P(0x080cc), P(0x080d0),
> - P(0x080d4), P(0x080d8), P(0x080dc), P(0x080e0), P(0x080e4),
> - P(0x080e8), P(0x080ec), P(0x080f0), P(0x080f4), P(0x080fc),
> - P(0x08100), P(0x08108), P(0x0810c), P(0x08110), P(0x08114),
> - P(0x08118), P(0x0811c), P(0x08124), P(0x08128), P(0x0812c),
> - P(0x08130), P(0x08134), P(0x08138), P(0x0813c), P(0x08144),
> - P(0x08168), P(0x0816c), P(0x08170), P(0x08174), P(0x08178),
> - P(0x0817c), P(0x081c0), P(0x081c4), P(0x081c8), P(0x081cc),
> - P(0x081d4), P(0x081ec), P(0x081f0), P(0x081f4), P(0x081f8),
> - P(0x081fc), P(0x08240), P(0x08244), P(0x08248), P(0x0824c),
> - P(0x08250), P(0x08254), P(0x08258), P(0x0825c), P(0x08260),
> - P(0x08264), P(0x08268), P(0x0826c), P(0x08270), P(0x08274),
> - P(0x08278), P(0x0827c), P(0x08284), P(0x08288), P(0x0828c),
> - P(0x08294), P(0x08298), P(0x0829c), P(0x08300), P(0x08314),
> - P(0x0831c), P(0x08328), P(0x0832c), P(0x08330), P(0x08334),
> - P(0x08338), P(0x0833c), P(0x08340), P(0x08344), P(0x08348),
> - P(0x0835c), P(0x08360), P(0x08364), P(0x08368), P(0x08370),
> - P(0x08374), P(0x08378), P(0x0837c), P(0x08380), P(0x08384),
> - P(0x08390), P(0x08394), P(0x08398), P(0x0839c), P(0x083a0),
> - P(0x083a4), P(0x083a8), P(0x083ac), P(0x083b0), P(0x083b4),
> - P(0x083b8), P(0x083bc), P(0x083c0), P(0x083c4), P(0x083c8),
> - P(0x083cc), P(0x083d0), P(0x09800), P(0x09804), P(0x09808),
> - P(0x0980c), P(0x09814), P(0x09818), P(0x0981c), P(0x09834),
> - P(0x09838), P(0x0983c), P(0x09880), P(0x09884), P(0x098a4),
> - P(0x098b0), P(0x098bc), P(0x098d0), P(0x098d4), P(0x098dc),
> - P(0x098f0), P(0x098f4), P(0x09c04), P(0x09c08), P(0x09c0c),
> - P(0x09c10), P(0x09c14), P(0x09c18), P(0x09c1c), P(0x09d00),
> - P(0x09d04), P(0x09d08), P(0x09d0c), P(0x09d10), P(0x09d14),
> - P(0x09d18), P(0x09d1c), P(0x09e08), P(0x09e24), P(0x09e28),
> - P(0x09e30), P(0x09e34), P(0x09e38), P(0x09e40), P(0x09e4c),
> - P(0x09e50), P(0x09fc0), P(0x09fc4), P(0x09fcc), P(0x0a20c),
> - P(0x0a210), P(0x0a220), P(0x0a224), P(0x0a228), P(0x0a23c),
> - P(0x0a244), P(0x0a2a0), P(0x0a2c0), P(0x0a2c8), P(0x0a2cc),
> - P(0x0a2d4), P(0x0a2dc), P(0x0a2e0), P(0x0a2e4), P(0x0a2e8),
> - P(0x0a2ec), P(0x0a2f0), P(0x0a2f4), P(0x0a2f8), P(0x0a344),
> - P(0x0a34c), P(0x0a350), P(0x0a364), P(0x0a370), P(0x0a390),
> - P(0x0a394), P(0x0a398), P(0x0a39c), P(0x0a3a0), P(0x0a3a4),
> - P(0x0a3a8), P(0x0a3ac), P(0x0a3c0), P(0x0a3c4), P(0x0a3c8),
> - P(0x0a3cc), P(0x0a3d0), P(0x0a3d4), P(0x0a3d8), P(0x0a3dc),
> - P(0x0a3e0), P(0x0a3e4), P(0x0a3e8), P(0x0a3ec), P(0x0a3f0),
> - P(0x0a3f4), P(0x0a3f8), P(0x0a3fc), P(0x0a400), P(0x0a404),
> - P(0x0a408), P(0x0a40c), P(0x0a414), P(0x0a418), P(0x0a41c),
> - P(0x0a420), P(0x0a424), P(0x0a428), P(0x0a42c), P(0x0a430),
> - P(0x0a434), P(0x0a438), P(0x0a43c), P(0x0a440), P(0x0a444),
> - P(0x0a448), P(0x0a44c), P(0x0a450), P(0x0a458), P(0x0a5c4),
> +static const uint16_t ar9485_1_1_cm_regs[] = {
> + P(0x00008), P(0x00030), P(0x00034), P(0x00040), P(0x00044),
> + P(0x00048), P(0x0004c), P(0x00050), P(0x01040), P(0x01044),
> + P(0x01048), P(0x0104c), P(0x01050), P(0x01054), P(0x01058),
> + P(0x0105c), P(0x01060), P(0x01064), P(0x010f0), P(0x01270),
> + P(0x012b0), P(0x012f0), P(0x0143c), P(0x0147c), P(0x08000),
> + P(0x08004), P(0x08008), P(0x0800c), P(0x08018), P(0x08020),
> + P(0x08038), P(0x0803c), P(0x08040), P(0x08044), P(0x08048),
> + P(0x0804c), P(0x08054), P(0x08058), P(0x0805c), P(0x08060),
> + P(0x08064), P(0x08070), P(0x08074), P(0x08078), P(0x0809c),
> + P(0x080a0), P(0x080a4), P(0x080a8), P(0x080ac), P(0x080b0),
> + P(0x080b4), P(0x080b8), P(0x080bc), P(0x080c0), P(0x080c4),
> + P(0x080c8), P(0x080cc), P(0x080d0), P(0x080d4), P(0x080d8),
> + P(0x080dc), P(0x080e0), P(0x080e4), P(0x080e8), P(0x080ec),
> + P(0x080f0), P(0x080f4), P(0x080fc), P(0x08100), P(0x08108),
> + P(0x0810c), P(0x08110), P(0x08114), P(0x08118), P(0x0811c),
> + P(0x08124), P(0x08128), P(0x0812c), P(0x08130), P(0x08134),
> + P(0x08138), P(0x0813c), P(0x08144), P(0x08168), P(0x0816c),
> + P(0x08170), P(0x08174), P(0x08178), P(0x0817c), P(0x081c0),
> + P(0x081c4), P(0x081d4), P(0x081ec), P(0x081f0), P(0x081f4),
> + P(0x081f8), P(0x081fc), P(0x08240), P(0x08244), P(0x08248),
> + P(0x0824c), P(0x08250), P(0x08254), P(0x08258), P(0x0825c),
> + P(0x08260), P(0x08264), P(0x08268), P(0x0826c), P(0x08270),
> + P(0x08274), P(0x08278), P(0x0827c), P(0x08284), P(0x08288),
> + P(0x0828c), P(0x08294), P(0x08298), P(0x0829c), P(0x08300),
> + P(0x08314), P(0x0831c), P(0x08328), P(0x0832c), P(0x08330),
> + P(0x08334), P(0x08338), P(0x0833c), P(0x08340), P(0x08344),
> + P(0x08348), P(0x0835c), P(0x08360), P(0x08364), P(0x08368),
> + P(0x08370), P(0x08374), P(0x08378), P(0x0837c), P(0x08380),
> + P(0x08384), P(0x08390), P(0x08394), P(0x08398), P(0x0839c),
> + P(0x083a0), P(0x083a4), P(0x083a8), P(0x083ac), P(0x083b0),
> + P(0x083b4), P(0x083b8), P(0x083bc), P(0x083c0), P(0x083c4),
> + P(0x083c8), P(0x083cc), P(0x083d0), P(0x0a580), P(0x0a584),
> + P(0x0a588), P(0x0a58c), P(0x0a590), P(0x0a594), P(0x0a598),
> + P(0x0a59c), P(0x0a5a0), P(0x0a5a4), P(0x0a5a8), P(0x0a5ac),
> + P(0x0a5b0), P(0x0a5b4), P(0x0a5b8), P(0x0a5bc), P(0x09800),
> + P(0x09804), P(0x09808), P(0x0980c), P(0x09814), P(0x09818),
> + P(0x0981c), P(0x09834), P(0x09838), P(0x0983c), P(0x09880),
> + P(0x09884), P(0x098a4), P(0x098b0), P(0x098d0), P(0x098d4),
> + P(0x098dc), P(0x098f0), P(0x098f4), P(0x09c04), P(0x09c08),
> + P(0x09c0c), P(0x09c10), P(0x09c14), P(0x09c18), P(0x09c1c),
> + P(0x09d00), P(0x09d04), P(0x09d08), P(0x09d0c), P(0x09d10),
> + P(0x09d14), P(0x09d18), P(0x09d1c), P(0x09e08), P(0x09e24),
> + P(0x09e28), P(0x09e30), P(0x09e34), P(0x09e38), P(0x09e40),
> + P(0x09e4c), P(0x09e50), P(0x09fc0), P(0x09fc4), P(0x09fcc),
> + P(0x0a20c), P(0x0a210), P(0x0a220), P(0x0a224), P(0x0a228),
> + P(0x0a23c), P(0x0a244), P(0x0a2a0), P(0x0a2c0), P(0x0a2c8),
> + P(0x0a2cc), P(0x0a2d4), P(0x0a2dc), P(0x0a2e0), P(0x0a2e4),
> + P(0x0a2e8), P(0x0a2ec), P(0x0a2f0), P(0x0a2f4), P(0x0a2f8),
> + P(0x0a344), P(0x0a34c), P(0x0a350), P(0x0a364), P(0x0a370),
> + P(0x0a390), P(0x0a394), P(0x0a398), P(0x0a39c), P(0x0a3a0),
> + P(0x0a3a4), P(0x0a3a8), P(0x0a3ac), P(0x0a3c0), P(0x0a3c4),
> + P(0x0a3c8), P(0x0a3cc), P(0x0a3d0), P(0x0a3d4), P(0x0a3d8),
> + P(0x0a3dc), P(0x0a3e0), P(0x0a3e4), P(0x0a3e8), P(0x0a3ec),
> + P(0x0a3f0), P(0x0a3f4), P(0x0a3f8), P(0x0a3fc), P(0x0a400),
> + P(0x0a404), P(0x0a408), P(0x0a40c), P(0x0a414), P(0x0a418),
> + P(0x0a41c), P(0x0a420), P(0x0a424), P(0x0a428), P(0x0a42c),
> + P(0x0a430), P(0x0a434), P(0x0a438), P(0x0a43c), P(0x0a440),
> + P(0x0a444), P(0x0a448), P(0x0a44c), P(0x0a450), P(0x0a5c4),
>   P(0x0a5c8), P(0x0a5cc), P(0x0a760), P(0x0a764), P(0x0a768),
>   P(0x0a76c), P(0x0a770), P(0x0a774), P(0x0a778), P(0x0a780),
>   P(0x0a7c0), P(0x0a7c4), P(0x0a7c8), P(0x0a7cc), P(0x0a7d0),
>   P(0x0a7d4), P(0x0a7dc), P(0x16000), P(0x16004), P(0x16008),
> - P(0x1600c), P(0x16040), P(0x16048), P(0x1604c), P(0x16050),
> - P(0x16054), P(0x16080), P(0x16084), P(0x16088), P(0x1608c),
> - P(0x16090), P(0x16098), P(0x160a0), P(0x160a4), P(0x160a8),
> - P(0x160b4), P(0x160c0), P(0x160c4), P(0x160c8), P(0x160cc),
> - P(0x160d0), P(0x16100), P(0x16104), P(0x16108), P(0x16144),
> - P(0x16148), P(0x16180), P(0x16184), P(0x16188), P(0x1618c),
> + P(0x1600c), P(0x16040), P(0x1604c), P(0x16050), P(0x16054),
> + P(0x16080), P(0x16084), P(0x16088), P(0x1608c), P(0x16090),
> + P(0x16098), P(0x160a0), P(0x160a4), P(0x160a8), P(0x160b4),
> + P(0x160c0), P(0x160c4), P(0x160c8), P(0x160cc), P(0x160d0),
> + P(0x16100), P(0x16104), P(0x16108), P(0x16144), P(0x16148),
>   P(0x16240), P(0x16244), P(0x16248), P(0x1624c), P(0x16280),
>   P(0x16284), P(0x16288), P(0x1628c), P(0x16290), P(0x16380),
>   P(0x16384), P(0x16388), P(0x1638c), P(0x16390), P(0x16394),
>   P(0x16398), P(0x1639c), P(0x163a0), P(0x163a4), P(0x163a8),
>   P(0x163ac), P(0x163b0), P(0x163b4), P(0x163b8), P(0x163bc),
>   P(0x163c0), P(0x163c4), P(0x163c8), P(0x163cc), P(0x163d0),
> - P(0x163d4), P(0x16c40), P(0x16c44)
> + P(0x163d4), P(0x16c40), P(0x16c44), P(0x04014), P(0x04090),
> + P(0x040a4), P(0x07010), P(0x07020), P(0x07034), P(0x07038),
> + P(0x07048)
>  };
>  
> -static const uint32_t ar9485_1_0_cm_vals[] = {
> - 0x00a0c9c9, 0x00000004, 0x00000000, 0x00020085, 0x00000005,
> - 0x00000000, 0x00000000, 0x00000008, 0x00000010, 0x00000000,
> - 0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x002ffc0f,
> +static const uint32_t ar9485_1_1_cm_vals[] = {
> + 0x00000000, 0x00020085, 0x00000005, 0x00000000, 0x00000000,
> + 0x00000008, 0x00000010, 0x00000000, 0x002ffc0f, 0x002ffc0f,
>   0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x002ffc0f,
> - 0x00000100, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
> + 0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x00000100, 0x00000000,
> + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
> + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
>   0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
> + 0xffffffff, 0x00000000, 0x00000000, 0x000fc78f, 0x0000000f,
> + 0x00000000, 0x00000310, 0x00000020, 0x00000000, 0x0000000f,
> + 0x00000000, 0x02ff0000, 0x0e070605, 0x0000000d, 0x00000000,
> + 0x00000000, 0x00000000, 0x00000000, 0x2a800000, 0x06900168,
> + 0x13881c22, 0x01f40000, 0x00252500, 0x00a00000, 0x00400000,
> + 0x00000000, 0xffffffff, 0x0000ffff, 0x3f3f3f3f, 0x00000000,
> + 0x00000000, 0x00000000, 0x00020000, 0x00000000, 0x00000052,
> + 0x00000000, 0x00000000, 0x000007ff, 0x000000aa, 0x00003210,
>   0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
> - 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000,
> - 0x000fc78f, 0x0000000f, 0x00000000, 0x00000310, 0x00000020,
> - 0x00000000, 0x0000000f, 0x00000000, 0x02ff0000, 0x0e070605,
> - 0x0000000d, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
> - 0x2a800000, 0x06900168, 0x13881c20, 0x01f40000, 0x00252500,
> - 0x00a00000, 0x00400000, 0x00000000, 0xffffffff, 0x0000ffff,
> - 0x3f3f3f3f, 0x00000000, 0x00000000, 0x00000000, 0x00020000,
> - 0x00000000, 0x00000052, 0x00000000, 0x00000000, 0x000007ff,
> - 0x000000aa, 0x00003210, 0x00000000, 0x00000000, 0x00000000,
> - 0x00000000, 0x00000000, 0x00000000, 0x0000ffff, 0xffffffff,
> - 0x00000000, 0x00000000, 0x18486200, 0x33332210, 0x00000000,
> - 0x00020000, 0x00000000, 0x33332210, 0x00000000, 0x00000000,
> - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
> - 0x00000000, 0x00100000, 0x0010f400, 0x00000800, 0x0001e800,
> - 0x00000000, 0x00000000, 0x00000000, 0x40000000, 0x00080922,
> - 0x9ca00010, 0xffffffff, 0x0000ffff, 0x00000000, 0x40000000,
> - 0x003e4180, 0x00000004, 0x0000002c, 0x0000002c, 0x000000ff,
> - 0x00000000, 0x00000000, 0x00000000, 0x00000140, 0x00000000,
> - 0x0000010d, 0x00000000, 0x00000007, 0x00000302, 0x00000700,
> - 0x00ff0000, 0x02400000, 0x000107ff, 0xa248105b, 0x008f0000,
> - 0x00000000, 0xffffffff, 0xffffffff, 0x00000000, 0x00000000,
> - 0x000000ff, 0x00000000, 0x00000000, 0xffffffff, 0xffffffff,
> - 0xffffffff, 0xffffffff, 0x00000000, 0x00000000, 0x00000000,
> - 0x0000fa14, 0x000f0c00, 0x33332210, 0x33332210, 0x33332210,
> + 0x00000000, 0x0000ffff, 0xffffffff, 0x00000000, 0x00000000,
> + 0x18486200, 0x33332210, 0x00000000, 0x00020000, 0x00000000,
>   0x33332210, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
> - 0x00000200, 0x000301ff, 0xafe68e30, 0xfd14e000, 0x9c0a8f6b,
> - 0x04800000, 0x9280c00a, 0x00000000, 0x00020028, 0x5f3ca3de,
> - 0x0108ecff, 0x14750600, 0x201fff00, 0x00001042, 0x00200400,
> - 0x52440bbe, 0x00000002, 0x004b6a8e, 0x00000820, 0x00000000,
> - 0x00000000, 0x00000000, 0x00000000, 0x03200000, 0x00000000,
> - 0x00000000, 0x00046384, 0x05b6b440, 0x00b6b440, 0xc080a333,
> - 0x40206c10, 0x009c4060, 0x1883800a, 0x01834061, 0x00c00400,
> - 0x00000000, 0x00000000, 0x0038233c, 0x990bb515, 0x0a6f0000,
> - 0x06336f77, 0x6af6532f, 0x0cc80c00, 0x0d261820, 0x00001004,
> - 0x00ff03f1, 0x80be4788, 0x0001efb5, 0x40000014, 0x00000000,
> - 0x00000000, 0x00000000, 0x00000000, 0x10002310, 0x00000000,
> - 0x0c000000, 0x00000001, 0x00000001, 0x00000000, 0x18c43433,
> - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
> - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
> - 0x00000000, 0x0000a000, 0x00000000, 0x00000000, 0x00000001,
> - 0x00000444, 0x001f0e0f, 0x0075393f, 0xb79f6427, 0x00000000,
> - 0xaaaaaaaa, 0x3c466478, 0x20202020, 0x22222220, 0x20200020,
> + 0x00000000, 0x00000000, 0x00100000, 0x0010f400, 0x00000800,
> + 0x0001e800, 0x00000000, 0x00000000, 0x00000000, 0x40000000,
> + 0x00080922, 0x9ca00010, 0xffffffff, 0x0000ffff, 0x00000000,
> + 0x40000000, 0x003e4180, 0x00000004, 0x0000002c, 0x0000002c,
> + 0x000000ff, 0x00000000, 0x00000000, 0x00000000, 0x00000140,
> + 0x00000000, 0x0000010d, 0x00000000, 0x00000007, 0x00000302,
> + 0x00000700, 0x00ff0000, 0x02400000, 0x000107ff, 0xa248105b,
> + 0x008f0000, 0x00000000, 0xffffffff, 0xffffffff, 0x00000000,
> + 0x00000000, 0x000000ff, 0x00000000, 0x00000000, 0xffffffff,
> + 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, 0x00000000,
> + 0x00000000, 0x0000fa14, 0x000f0c00, 0x33332210, 0x33332210,
> + 0x33332210, 0x33332210, 0x00000000, 0x00000000, 0x00000000,
> + 0x00000000, 0x00000200, 0x000301ff, 0x00000000, 0x00000000,
> + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
> + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
> + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xafe68e30,
> + 0xfd14e000, 0x9c0a8f6b, 0x04800000, 0x9280c00a, 0x00000000,
> + 0x00020028, 0x5f3ca3de, 0x0108ecff, 0x14750600, 0x201fff00,
> + 0x00001042, 0x00200400, 0x52440bbe, 0x004b6a8e, 0x00000820,
> + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03200000,
> + 0x00000000, 0x00000000, 0x00046384, 0x05b6b440, 0x00b6b440,
> + 0xc080a333, 0x40206c10, 0x009c4060, 0x1883800a, 0x01834061,
> + 0x00c00400, 0x00000000, 0x00000000, 0x0038233c, 0x9927b515,
> + 0x12ef0200, 0x06336f77, 0x6af6532f, 0x0cc80c00, 0x0d261820,
> + 0x00001004, 0x00ff03f1, 0x80be4788, 0x0001efb5, 0x40000014,
> + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10002310,
> + 0x00000000, 0x0c000000, 0x00000001, 0x00000001, 0x00000000,
> + 0x18c43433, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
> + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
> + 0x00000000, 0x00000000, 0x0000a000, 0x00000000, 0x00000000,
> + 0x00000001, 0x00000444, 0x001f0e0f, 0x0075393f, 0xb79f6427,
> + 0x000000ff, 0x3b3b3b3b, 0x2f2f2f2f, 0x20202020, 0x22222220,
> + 0x20200020, 0x20202020, 0x20202020, 0x20202020, 0x20202020,
>   0x20202020, 0x20202020, 0x20202020, 0x20202020, 0x20202020,
> - 0x20202020, 0x20202020, 0x20202020, 0x20202020, 0x00000000,
> - 0x00000006, 0x0cdbd380, 0x000f0f01, 0x8fa91f01, 0x00000000,
> - 0x0e79e5c6, 0x00820820, 0x1ce739ce, 0x2d0011ce, 0x1ce739ce,
> - 0x000001ce, 0x1ce739ce, 0x000001ce, 0x1ce739ce, 0x1ce739ce,
> - 0x00000000, 0x00001801, 0x00000000, 0x00000000, 0x00000000,
> - 0x04000000, 0x00000001, 0x00010000, 0x00000000, 0x3fad9d74,
> + 0x00000000, 0x00000006, 0x0cdbd380, 0x000f0f01, 0x8fa91f01,
> + 0x00000000, 0x0e79e5c6, 0x00820820, 0x1ce739cf, 0x2d0019ce,
> + 0x1ce739ce, 0x000001ce, 0x1ce739ce, 0x000001ce, 0x1ce739ce,
> + 0x1ce739ce, 0x00000000, 0x00001801, 0x00000000, 0x00000000,
> + 0x00000000, 0x04000000, 0x00000001, 0x00010000, 0xbfad9d74,
>   0x0048060a, 0x00000637, 0x03020100, 0x09080504, 0x0d0c0b0a,
>   0x13121110, 0x31301514, 0x35343332, 0x00000036, 0x00000838,
>   0x00000000, 0xfffffffc, 0x00000000, 0x00000000, 0x00000000,
> - 0x00000004, 0x00000001, 0x36db6db6, 0x6db6db40, 0x73800000,
> - 0x00000000, 0x7f80fff8, 0x6c92426e, 0x000f0278, 0x6db6db6c,
> - 0x6db60000, 0x00080000, 0x0e48048c, 0x14214514, 0x119f081e,
> - 0x24926490, 0xd28b3330, 0xc2108ffe, 0x812fc370, 0x423c8000,
> - 0x92480040, 0x006db6db, 0x0186db60, 0x6db6db6c, 0x6de6fbe0,
> - 0xf7dfcf3c, 0x04cb0001, 0xfff80015, 0x00080010, 0x01884080,
> - 0x00008040, 0x08453333, 0x18e82f01, 0x00000000, 0x00000000,
> + 0x00000004, 0x00000000, 0x36db6db6, 0x6db6db40, 0x73800000,
> + 0x00000000, 0x7f80fff8, 0x000f0278, 0x4db6db8c, 0x6db60000,
> + 0x00080000, 0x0e48048c, 0x14214514, 0x119f081e, 0x24926490,
> + 0xd28b3330, 0xc2108ffe, 0x812fc370, 0x423c8000, 0x92480040,
> + 0x006db6db, 0x0186db60, 0x6db6db6c, 0x6de6fbe0, 0xf7dfcf3c,
> + 0x04cb0001, 0xfff80015, 0x00080010, 0x01884080, 0x00008040,
>   0x08400000, 0x1bf90f00, 0x00000000, 0x00000000, 0x01000015,
>   0x00d30000, 0x00318000, 0x50000000, 0x4b96210f, 0x00000000,
>   0x00000000, 0x00800700, 0x00800700, 0x00800700, 0x00000000,
>   0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000000,
>   0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
>   0x000000a0, 0x000c0000, 0x14021402, 0x00001402, 0x00000000,
> - 0x00000000, 0x1319c178, 0x10000000
> + 0x00000000, 0x13188278, 0x12000000, 0xba280400, 0x00aa10aa,
> + 0x00a0c9c9, 0x00000022, 0x00000000, 0x00000002, 0x000004c2,
> + 0x00000002
>  };
>  
> -static const struct athn_ini ar9485_1_0_ini = {
> - nitems(ar9485_1_0_regs),
> - ar9485_1_0_regs,
> +static const struct athn_ini ar9485_1_1_ini = {
> + nitems(ar9485_1_1_regs),
> + ar9485_1_1_regs,
>   NULL, /* 2GHz only. */
>  #ifndef IEEE80211_NO_HT
>   NULL, /* 2GHz only. */
> - ar9485_1_0_vals_2g40,
> + ar9485_1_1_vals_2g40,
>  #endif
> - ar9485_1_0_vals_2g20,
> - nitems(ar9485_1_0_cm_regs),
> - ar9485_1_0_cm_regs,
> - ar9485_1_0_cm_vals
> + ar9485_1_1_vals_2g20,
> + nitems(ar9485_1_1_cm_regs),
> + ar9485_1_1_cm_regs,
> + ar9485_1_1_cm_vals
>  };
>  
>  /*
> @@ -1574,33 +1581,47 @@ static const struct athn_gain ar9380_2_2
>  };
>  
>  /*
> - * AR9485 1.0 Tx gains.
> + * AR9485 1.1 Tx gains.
>   */
> -static const uint16_t ar9485_1_0_tx_gain_regs[] = {
> - P(0x0a410), P(0x0a500), P(0x0a504), P(0x0a508), P(0x0a50c),
> - P(0x0a510), P(0x0a514), P(0x0a518), P(0x0a51c), P(0x0a520),
> - P(0x0a524), P(0x0a528), P(0x0a52c), P(0x0a530), P(0x0a534),
> - P(0x0a538), P(0x0a53c), P(0x0a540), P(0x0a544), P(0x0a548),
> - P(0x0a54c), P(0x0a550), P(0x0a554), P(0x0a558), P(0x0a55c),
> - P(0x0a560), P(0x0a564), P(0x0a568), P(0x0a56c), P(0x0a570),
> - P(0x0a574), P(0x0a578), P(0x0a57c), P(0x16044)
> -};
> -
> -static const uint32_t ar9485_1_0_tx_gain_vals_2g[] = {
> - 0x000050d8, 0x00000000, 0x04000002, 0x08000004, 0x0d000200,
> - 0x11000202, 0x15000400, 0x19000402, 0x1d000404, 0x21000603,
> - 0x25000605, 0x2a000a03, 0x2c000a04, 0x2e000a20, 0x34000e20,
> - 0x38000e22, 0x3c000e24, 0x40000e26, 0x43001640, 0x46001660,
> - 0x49001861, 0x4c001a81, 0x4f001a83, 0x54001c85, 0x58001ce5,
> - 0x5b001ce9, 0x60001eeb, 0x60001eeb, 0x60001eeb, 0x60001eeb,
> - 0x60001eeb, 0x60001eeb, 0x60001eeb, 0x05b6b2db
> -};
> -
> -static const struct athn_gain ar9485_1_0_tx_gain = {
> - nitems(ar9485_1_0_tx_gain_regs),
> - ar9485_1_0_tx_gain_regs,
> +static const uint16_t ar9485_1_1_tx_gain_regs[] = {
> + P(0x098bc), P(0x0a410), P(0x0a458), P(0x0a500), P(0x0a504),
> + P(0x0a508), P(0x0a50c), P(0x0a510), P(0x0a514), P(0x0a518),
> + P(0x0a51c), P(0x0a520), P(0x0a524), P(0x0a528), P(0x0a52c),
> + P(0x0a530), P(0x0a534), P(0x0a538), P(0x0a53c), P(0x0a540),
> + P(0x0a544), P(0x0a548), P(0x0a54c), P(0x0a550), P(0x0a554),
> + P(0x0a558), P(0x0a55c), P(0x0a560), P(0x0a564), P(0x0a568),
> + P(0x0a56c), P(0x0a570), P(0x0a574), P(0x0a578), P(0x0a57c),
> + P(0x0b500), P(0x0b504), P(0x0b508), P(0x0b50c), P(0x0b510),
> + P(0x0b514), P(0x0b518), P(0x0b51c), P(0x0b520), P(0x0b524),
> + P(0x0b528), P(0x0b52c), P(0x0b530), P(0x0b534), P(0x0b538),
> + P(0x0b53c), P(0x0b540), P(0x0b544), P(0x0b548), P(0x0b54c),
> + P(0x0b550), P(0x0b554), P(0x0b558), P(0x0b55c), P(0x0b560),
> + P(0x0b564), P(0x0b568), P(0x0b56c), P(0x0b570), P(0x0b574),
> + P(0x0b578), P(0x0b57c), P(0x16044), P(0x16048),
> +};
> +
> +static const uint32_t ar9485_1_1_tx_gain_vals_2g[] = {
> + 0x00000002, 0x000050d8, 0x00000000, 0x00000000, 0x04000002,
> + 0x08000004, 0x0d000200, 0x11000202, 0x15000400, 0x19000402,
> + 0x1d000404, 0x21000603, 0x25000605, 0x2a000a03, 0x2c000a04,
> + 0x34000e20, 0x35000e21, 0x43000e62, 0x45000e63, 0x49000e65,
> + 0x4b000e66, 0x4d001645, 0x51001865, 0x55001a86, 0x57001ce9,
> + 0x5a001ceb, 0x5e001eeb, 0x5e001eeb, 0x5e001eeb, 0x5e001eeb,
> + 0x5e001eeb, 0x5e001eeb, 0x5e001eeb, 0x5e001eeb, 0x5e001eeb,
> + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
> + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
> + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
> + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
> + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
> + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
> + 0x00000000, 0x00000000, 0x05d6b2db, 0x6c924260
> +};
> +
> +static const struct athn_gain ar9485_1_1_tx_gain = {
> + nitems(ar9485_1_1_tx_gain_regs),
> + ar9485_1_1_tx_gain_regs,
>   NULL, /* 2GHz only. */
> - ar9485_1_0_tx_gain_vals_2g
> + ar9485_1_1_tx_gain_vals_2g
>  };
>  
>  /*
> @@ -1789,9 +1810,9 @@ static const struct athn_gain ar9380_2_2
>  };
>  
>  /*
> - * AR9485 1.0 Rx gains.
> + * AR9485 1.1 Rx gains.
>   */
> -static const uint16_t ar9485_1_0_rx_gain_regs[] = {
> +static const uint16_t ar9485_1_1_rx_gain_regs[] = {
>   P(0x0a000), P(0x0a004), P(0x0a008), P(0x0a00c), P(0x0a010),
>   P(0x0a014), P(0x0a018), P(0x0a01c), P(0x0a020), P(0x0a024),
>   P(0x0a028), P(0x0a02c), P(0x0a030), P(0x0a034), P(0x0a038),
> @@ -1820,20 +1841,20 @@ static const uint16_t ar9485_1_0_rx_gain
>   P(0x0a1f4), P(0x0a1f8), P(0x0a1fc)
>  };
>  
> -static const uint32_t ar9485_1_0_rx_gain_vals[] = {
> - 0x00010000, 0x00030002, 0x00050004, 0x00810080, 0x01800082,
> - 0x01820181, 0x01840183, 0x01880185, 0x018a0189, 0x02850284,
> - 0x02890288, 0x03850384, 0x03890388, 0x038b038a, 0x038d038c,
> +static const uint32_t ar9485_1_1_rx_gain_vals[] = {
> + 0x00060005, 0x00810080, 0x00830082, 0x00850084, 0x01820181,
> + 0x01840183, 0x01880185, 0x018a0189, 0x02850284, 0x02890288,
> + 0x028b028a, 0x03850384, 0x03890388, 0x038b038a, 0x038d038c,
>   0x03910390, 0x03930392, 0x03950394, 0x00000396, 0x00000000,
>   0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
>   0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
>   0x00000000, 0x00000000, 0x28282828, 0x28282828, 0x28282828,
> - 0x28282828, 0x28282828, 0x21212128, 0x171c1c1c, 0x02020212,
> - 0x00000202, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
> - 0x00000000, 0x00000000, 0x00000000, 0x001f0000, 0x111f1100,
> - 0x111d111e, 0x111b111c, 0x22032204, 0x22012202, 0x221f2200,
> - 0x221d221e, 0x33013302, 0x331f3300, 0x4402331e, 0x44004401,
> - 0x441e441f, 0x55015502, 0x551f5500, 0x6602551e, 0x66006601,
> + 0x28282828, 0x28282828, 0x24242428, 0x171e1e1e, 0x02020b0b,
> + 0x02020202, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
> + 0x00000000, 0x00000000, 0x00000000, 0x22072208, 0x22052206,
> + 0x22032204, 0x22012202, 0x221f2200, 0x221d221e, 0x33023303,
> + 0x33003301, 0x331e331f, 0x4402331d, 0x44004401, 0x441e441f,
> + 0x55025503, 0x55005501, 0x551e551f, 0x6602551d, 0x66006601,
>   0x661e661f, 0x7703661d, 0x77017702, 0x00007700, 0x00000000,
>   0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
>   0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
> @@ -1849,22 +1870,49 @@ static const uint32_t ar9485_1_0_rx_gain
>   0x00000396, 0x00000396, 0x00000296
>  };
>  
> -static const struct athn_gain ar9485_1_0_rx_gain = {
> - nitems(ar9485_1_0_rx_gain_regs),
> - ar9485_1_0_rx_gain_regs,
> +static const struct athn_gain ar9485_1_1_rx_gain = {
> + nitems(ar9485_1_1_rx_gain_regs),
> + ar9485_1_1_rx_gain_regs,
>   NULL, /* 2GHz only. */
> - ar9485_1_0_rx_gain_vals
> + ar9485_1_1_rx_gain_vals
>  };
>  
>  /*
>   * Serializer/Deserializer programming.
>   */
> +
> +static const uint32_t ar9380_2_2_serdes_regs[] = {
> + AR_PCIE_SERDES,
> + AR_PCIE_SERDES,
> + AR_PCIE_SERDES2
> +};
> +
>  static const uint32_t ar9380_2_2_serdes_vals[] = {
>   0x08212e5e,
> - 0x0008003b
> + 0x0008003b,
> + 0x00000000
>  };
>  
>  static const struct athn_serdes ar9380_2_2_serdes = {
>   nitems(ar9380_2_2_serdes_vals),
> + ar9380_2_2_serdes_regs,
>   ar9380_2_2_serdes_vals
> +};
> +
> +static const uint32_t ar9485_1_1_serdes_regs[] = {
> + 0x00018c00,
> + 0x00018c04,
> + 0x00018c08
> +};
> +
> +static const uint32_t ar9485_1_1_serdes_vals[] = {
> + 0x18013e5e,
> + 0x000801d8,
> + 0x0000080c
> +};
> +
> +static const struct athn_serdes ar9485_1_1_serdes = {
> + nitems(ar9485_1_1_serdes_vals),
> + ar9485_1_1_serdes_regs,
> + ar9485_1_1_serdes_vals
>  };
> Index: athn.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/ic/athn.c,v
> retrieving revision 1.73
> diff -u -p -r1.73 athn.c
> --- athn.c 25 Aug 2012 12:14:31 -0000 1.73
> +++ athn.c 13 Oct 2012 17:20:50 -0000
> @@ -782,8 +782,7 @@ athn_write_serdes(struct athn_softc *sc,
>  
>   /* Write sequence to Serializer/Deserializer. */
>   for (i = 0; i < serdes->nvals; i++)
> - AR_WRITE(sc, AR_PCIE_SERDES, serdes->vals[i]);
> - AR_WRITE(sc, AR_PCIE_SERDES2, 0);
> + AR_WRITE(sc, serdes->regs[i], serdes->vals[i]);
>   AR_WRITE_BARRIER(sc);
>  }
>  
> @@ -808,6 +807,19 @@ athn_config_pcie(struct athn_softc *sc)
>  /*
>   * Serializer/Deserializer programming for non-PCIe devices.
>   */
> +static const uint32_t ar_nonpcie_serdes_regs[] = {
> + AR_PCIE_SERDES,
> + AR_PCIE_SERDES,
> + AR_PCIE_SERDES,
> + AR_PCIE_SERDES,
> + AR_PCIE_SERDES,
> + AR_PCIE_SERDES,
> + AR_PCIE_SERDES,
> + AR_PCIE_SERDES,
> + AR_PCIE_SERDES,
> + AR_PCIE_SERDES2,
> +};
> +
>  static const uint32_t ar_nonpcie_serdes_vals[] = {
>   0x9248fc00,
>   0x24924924,
> @@ -817,11 +829,13 @@ static const uint32_t ar_nonpcie_serdes_
>   0x00000000,
>   0x1aaabe40,
>   0xbe105554,
> - 0x000e1007
> + 0x000e1007,
> + 0x00000000
>  };
>  
>  static const struct athn_serdes ar_nonpcie_serdes = {
>   nitems(ar_nonpcie_serdes_vals),
> + ar_nonpcie_serdes_regs,
>   ar_nonpcie_serdes_vals
>  };
>  
> Index: athnvar.h
> ===================================================================
> RCS file: /cvs/src/sys/dev/ic/athnvar.h,v
> retrieving revision 1.32
> diff -u -p -r1.32 athnvar.h
> --- athnvar.h 25 Aug 2012 12:14:31 -0000 1.32
> +++ athnvar.h 13 Oct 2012 17:20:50 -0000
> @@ -208,6 +208,7 @@ struct athn_addac {
>  
>  struct athn_serdes {
>   int nvals;
> + const uint32_t *regs;
>   const uint32_t *vals;
>  };