ar8216.c 54 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313
  1. /*
  2. * ar8216.c: AR8216 switch driver
  3. *
  4. * Copyright (C) 2009 Felix Fietkau <[email protected]>
  5. * Copyright (C) 2011-2012 Gabor Juhos <[email protected]>
  6. *
  7. * This program is free software; you can redistribute it and/or
  8. * modify it under the terms of the GNU General Public License
  9. * as published by the Free Software Foundation; either version 2
  10. * of the License, or (at your option) any later version.
  11. *
  12. * This program is distributed in the hope that it will be useful,
  13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  15. * GNU General Public License for more details.
  16. */
  17. #include <linux/if.h>
  18. #include <linux/module.h>
  19. #include <linux/init.h>
  20. #include <linux/list.h>
  21. #include <linux/if_ether.h>
  22. #include <linux/skbuff.h>
  23. #include <linux/netdevice.h>
  24. #include <linux/netlink.h>
  25. #include <linux/bitops.h>
  26. #include <net/genetlink.h>
  27. #include <linux/switch.h>
  28. #include <linux/delay.h>
  29. #include <linux/phy.h>
  30. #include <linux/netdevice.h>
  31. #include <linux/etherdevice.h>
  32. #include <linux/lockdep.h>
  33. #include <linux/ar8216_platform.h>
  34. #include <linux/workqueue.h>
  35. #include <linux/version.h>
  36. #include "ar8216.h"
  37. extern const struct ar8xxx_chip ar8327_chip;
  38. extern const struct ar8xxx_chip ar8337_chip;
  39. #define AR8XXX_MIB_WORK_DELAY 2000 /* msecs */
  40. #define MIB_DESC(_s , _o, _n) \
  41. { \
  42. .size = (_s), \
  43. .offset = (_o), \
  44. .name = (_n), \
  45. }
  46. static const struct ar8xxx_mib_desc ar8216_mibs[] = {
  47. MIB_DESC(1, AR8216_STATS_RXBROAD, "RxBroad"),
  48. MIB_DESC(1, AR8216_STATS_RXPAUSE, "RxPause"),
  49. MIB_DESC(1, AR8216_STATS_RXMULTI, "RxMulti"),
  50. MIB_DESC(1, AR8216_STATS_RXFCSERR, "RxFcsErr"),
  51. MIB_DESC(1, AR8216_STATS_RXALIGNERR, "RxAlignErr"),
  52. MIB_DESC(1, AR8216_STATS_RXRUNT, "RxRunt"),
  53. MIB_DESC(1, AR8216_STATS_RXFRAGMENT, "RxFragment"),
  54. MIB_DESC(1, AR8216_STATS_RX64BYTE, "Rx64Byte"),
  55. MIB_DESC(1, AR8216_STATS_RX128BYTE, "Rx128Byte"),
  56. MIB_DESC(1, AR8216_STATS_RX256BYTE, "Rx256Byte"),
  57. MIB_DESC(1, AR8216_STATS_RX512BYTE, "Rx512Byte"),
  58. MIB_DESC(1, AR8216_STATS_RX1024BYTE, "Rx1024Byte"),
  59. MIB_DESC(1, AR8216_STATS_RXMAXBYTE, "RxMaxByte"),
  60. MIB_DESC(1, AR8216_STATS_RXTOOLONG, "RxTooLong"),
  61. MIB_DESC(2, AR8216_STATS_RXGOODBYTE, "RxGoodByte"),
  62. MIB_DESC(2, AR8216_STATS_RXBADBYTE, "RxBadByte"),
  63. MIB_DESC(1, AR8216_STATS_RXOVERFLOW, "RxOverFlow"),
  64. MIB_DESC(1, AR8216_STATS_FILTERED, "Filtered"),
  65. MIB_DESC(1, AR8216_STATS_TXBROAD, "TxBroad"),
  66. MIB_DESC(1, AR8216_STATS_TXPAUSE, "TxPause"),
  67. MIB_DESC(1, AR8216_STATS_TXMULTI, "TxMulti"),
  68. MIB_DESC(1, AR8216_STATS_TXUNDERRUN, "TxUnderRun"),
  69. MIB_DESC(1, AR8216_STATS_TX64BYTE, "Tx64Byte"),
  70. MIB_DESC(1, AR8216_STATS_TX128BYTE, "Tx128Byte"),
  71. MIB_DESC(1, AR8216_STATS_TX256BYTE, "Tx256Byte"),
  72. MIB_DESC(1, AR8216_STATS_TX512BYTE, "Tx512Byte"),
  73. MIB_DESC(1, AR8216_STATS_TX1024BYTE, "Tx1024Byte"),
  74. MIB_DESC(1, AR8216_STATS_TXMAXBYTE, "TxMaxByte"),
  75. MIB_DESC(1, AR8216_STATS_TXOVERSIZE, "TxOverSize"),
  76. MIB_DESC(2, AR8216_STATS_TXBYTE, "TxByte"),
  77. MIB_DESC(1, AR8216_STATS_TXCOLLISION, "TxCollision"),
  78. MIB_DESC(1, AR8216_STATS_TXABORTCOL, "TxAbortCol"),
  79. MIB_DESC(1, AR8216_STATS_TXMULTICOL, "TxMultiCol"),
  80. MIB_DESC(1, AR8216_STATS_TXSINGLECOL, "TxSingleCol"),
  81. MIB_DESC(1, AR8216_STATS_TXEXCDEFER, "TxExcDefer"),
  82. MIB_DESC(1, AR8216_STATS_TXDEFER, "TxDefer"),
  83. MIB_DESC(1, AR8216_STATS_TXLATECOL, "TxLateCol"),
  84. };
  85. const struct ar8xxx_mib_desc ar8236_mibs[39] = {
  86. MIB_DESC(1, AR8236_STATS_RXBROAD, "RxBroad"),
  87. MIB_DESC(1, AR8236_STATS_RXPAUSE, "RxPause"),
  88. MIB_DESC(1, AR8236_STATS_RXMULTI, "RxMulti"),
  89. MIB_DESC(1, AR8236_STATS_RXFCSERR, "RxFcsErr"),
  90. MIB_DESC(1, AR8236_STATS_RXALIGNERR, "RxAlignErr"),
  91. MIB_DESC(1, AR8236_STATS_RXRUNT, "RxRunt"),
  92. MIB_DESC(1, AR8236_STATS_RXFRAGMENT, "RxFragment"),
  93. MIB_DESC(1, AR8236_STATS_RX64BYTE, "Rx64Byte"),
  94. MIB_DESC(1, AR8236_STATS_RX128BYTE, "Rx128Byte"),
  95. MIB_DESC(1, AR8236_STATS_RX256BYTE, "Rx256Byte"),
  96. MIB_DESC(1, AR8236_STATS_RX512BYTE, "Rx512Byte"),
  97. MIB_DESC(1, AR8236_STATS_RX1024BYTE, "Rx1024Byte"),
  98. MIB_DESC(1, AR8236_STATS_RX1518BYTE, "Rx1518Byte"),
  99. MIB_DESC(1, AR8236_STATS_RXMAXBYTE, "RxMaxByte"),
  100. MIB_DESC(1, AR8236_STATS_RXTOOLONG, "RxTooLong"),
  101. MIB_DESC(2, AR8236_STATS_RXGOODBYTE, "RxGoodByte"),
  102. MIB_DESC(2, AR8236_STATS_RXBADBYTE, "RxBadByte"),
  103. MIB_DESC(1, AR8236_STATS_RXOVERFLOW, "RxOverFlow"),
  104. MIB_DESC(1, AR8236_STATS_FILTERED, "Filtered"),
  105. MIB_DESC(1, AR8236_STATS_TXBROAD, "TxBroad"),
  106. MIB_DESC(1, AR8236_STATS_TXPAUSE, "TxPause"),
  107. MIB_DESC(1, AR8236_STATS_TXMULTI, "TxMulti"),
  108. MIB_DESC(1, AR8236_STATS_TXUNDERRUN, "TxUnderRun"),
  109. MIB_DESC(1, AR8236_STATS_TX64BYTE, "Tx64Byte"),
  110. MIB_DESC(1, AR8236_STATS_TX128BYTE, "Tx128Byte"),
  111. MIB_DESC(1, AR8236_STATS_TX256BYTE, "Tx256Byte"),
  112. MIB_DESC(1, AR8236_STATS_TX512BYTE, "Tx512Byte"),
  113. MIB_DESC(1, AR8236_STATS_TX1024BYTE, "Tx1024Byte"),
  114. MIB_DESC(1, AR8236_STATS_TX1518BYTE, "Tx1518Byte"),
  115. MIB_DESC(1, AR8236_STATS_TXMAXBYTE, "TxMaxByte"),
  116. MIB_DESC(1, AR8236_STATS_TXOVERSIZE, "TxOverSize"),
  117. MIB_DESC(2, AR8236_STATS_TXBYTE, "TxByte"),
  118. MIB_DESC(1, AR8236_STATS_TXCOLLISION, "TxCollision"),
  119. MIB_DESC(1, AR8236_STATS_TXABORTCOL, "TxAbortCol"),
  120. MIB_DESC(1, AR8236_STATS_TXMULTICOL, "TxMultiCol"),
  121. MIB_DESC(1, AR8236_STATS_TXSINGLECOL, "TxSingleCol"),
  122. MIB_DESC(1, AR8236_STATS_TXEXCDEFER, "TxExcDefer"),
  123. MIB_DESC(1, AR8236_STATS_TXDEFER, "TxDefer"),
  124. MIB_DESC(1, AR8236_STATS_TXLATECOL, "TxLateCol"),
  125. };
  126. static DEFINE_MUTEX(ar8xxx_dev_list_lock);
  127. static LIST_HEAD(ar8xxx_dev_list);
  128. /* inspired by phy_poll_reset in drivers/net/phy/phy_device.c */
  129. static int
  130. ar8xxx_phy_poll_reset(struct mii_bus *bus)
  131. {
  132. unsigned int sleep_msecs = 20;
  133. int ret, elapsed, i;
  134. for (elapsed = sleep_msecs; elapsed <= 600;
  135. elapsed += sleep_msecs) {
  136. msleep(sleep_msecs);
  137. for (i = 0; i < AR8XXX_NUM_PHYS; i++) {
  138. ret = mdiobus_read(bus, i, MII_BMCR);
  139. if (ret < 0)
  140. return ret;
  141. if (ret & BMCR_RESET)
  142. break;
  143. if (i == AR8XXX_NUM_PHYS - 1) {
  144. usleep_range(1000, 2000);
  145. return 0;
  146. }
  147. }
  148. }
  149. return -ETIMEDOUT;
  150. }
  151. static int
  152. ar8xxx_phy_check_aneg(struct phy_device *phydev)
  153. {
  154. int ret;
  155. if (phydev->autoneg != AUTONEG_ENABLE)
  156. return 0;
  157. /*
  158. * BMCR_ANENABLE might have been cleared
  159. * by phy_init_hw in certain kernel versions
  160. * therefore check for it
  161. */
  162. ret = phy_read(phydev, MII_BMCR);
  163. if (ret < 0)
  164. return ret;
  165. if (ret & BMCR_ANENABLE)
  166. return 0;
  167. dev_info(&phydev->mdio.dev, "ANEG disabled, re-enabling ...\n");
  168. ret |= BMCR_ANENABLE | BMCR_ANRESTART;
  169. return phy_write(phydev, MII_BMCR, ret);
  170. }
  171. void
  172. ar8xxx_phy_init(struct ar8xxx_priv *priv)
  173. {
  174. int i;
  175. struct mii_bus *bus;
  176. bus = priv->mii_bus;
  177. for (i = 0; i < AR8XXX_NUM_PHYS; i++) {
  178. if (priv->chip->phy_fixup)
  179. priv->chip->phy_fixup(priv, i);
  180. /* initialize the port itself */
  181. mdiobus_write(bus, i, MII_ADVERTISE,
  182. ADVERTISE_ALL | ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM);
  183. if (ar8xxx_has_gige(priv))
  184. mdiobus_write(bus, i, MII_CTRL1000, ADVERTISE_1000FULL);
  185. mdiobus_write(bus, i, MII_BMCR, BMCR_RESET | BMCR_ANENABLE);
  186. }
  187. ar8xxx_phy_poll_reset(bus);
  188. }
  189. u32
  190. ar8xxx_mii_read32(struct ar8xxx_priv *priv, int phy_id, int regnum)
  191. {
  192. struct mii_bus *bus = priv->mii_bus;
  193. u16 lo, hi;
  194. lo = bus->read(bus, phy_id, regnum);
  195. hi = bus->read(bus, phy_id, regnum + 1);
  196. return (hi << 16) | lo;
  197. }
  198. void
  199. ar8xxx_mii_write32(struct ar8xxx_priv *priv, int phy_id, int regnum, u32 val)
  200. {
  201. struct mii_bus *bus = priv->mii_bus;
  202. u16 lo, hi;
  203. lo = val & 0xffff;
  204. hi = (u16) (val >> 16);
  205. if (priv->chip->mii_lo_first)
  206. {
  207. bus->write(bus, phy_id, regnum, lo);
  208. bus->write(bus, phy_id, regnum + 1, hi);
  209. } else {
  210. bus->write(bus, phy_id, regnum + 1, hi);
  211. bus->write(bus, phy_id, regnum, lo);
  212. }
  213. }
  214. u32
  215. ar8xxx_read(struct ar8xxx_priv *priv, int reg)
  216. {
  217. struct mii_bus *bus = priv->mii_bus;
  218. u16 r1, r2, page;
  219. u32 val;
  220. split_addr((u32) reg, &r1, &r2, &page);
  221. mutex_lock(&bus->mdio_lock);
  222. bus->write(bus, 0x18, 0, page);
  223. wait_for_page_switch();
  224. val = ar8xxx_mii_read32(priv, 0x10 | r2, r1);
  225. mutex_unlock(&bus->mdio_lock);
  226. return val;
  227. }
  228. void
  229. ar8xxx_write(struct ar8xxx_priv *priv, int reg, u32 val)
  230. {
  231. struct mii_bus *bus = priv->mii_bus;
  232. u16 r1, r2, page;
  233. split_addr((u32) reg, &r1, &r2, &page);
  234. mutex_lock(&bus->mdio_lock);
  235. bus->write(bus, 0x18, 0, page);
  236. wait_for_page_switch();
  237. ar8xxx_mii_write32(priv, 0x10 | r2, r1, val);
  238. mutex_unlock(&bus->mdio_lock);
  239. }
  240. u32
  241. ar8xxx_rmw(struct ar8xxx_priv *priv, int reg, u32 mask, u32 val)
  242. {
  243. struct mii_bus *bus = priv->mii_bus;
  244. u16 r1, r2, page;
  245. u32 ret;
  246. split_addr((u32) reg, &r1, &r2, &page);
  247. mutex_lock(&bus->mdio_lock);
  248. bus->write(bus, 0x18, 0, page);
  249. wait_for_page_switch();
  250. ret = ar8xxx_mii_read32(priv, 0x10 | r2, r1);
  251. ret &= ~mask;
  252. ret |= val;
  253. ar8xxx_mii_write32(priv, 0x10 | r2, r1, ret);
  254. mutex_unlock(&bus->mdio_lock);
  255. return ret;
  256. }
  257. void
  258. ar8xxx_phy_dbg_write(struct ar8xxx_priv *priv, int phy_addr,
  259. u16 dbg_addr, u16 dbg_data)
  260. {
  261. struct mii_bus *bus = priv->mii_bus;
  262. mutex_lock(&bus->mdio_lock);
  263. bus->write(bus, phy_addr, MII_ATH_DBG_ADDR, dbg_addr);
  264. bus->write(bus, phy_addr, MII_ATH_DBG_DATA, dbg_data);
  265. mutex_unlock(&bus->mdio_lock);
  266. }
  267. static inline void
  268. ar8xxx_phy_mmd_prep(struct mii_bus *bus, int phy_addr, u16 addr, u16 reg)
  269. {
  270. bus->write(bus, phy_addr, MII_ATH_MMD_ADDR, addr);
  271. bus->write(bus, phy_addr, MII_ATH_MMD_DATA, reg);
  272. bus->write(bus, phy_addr, MII_ATH_MMD_ADDR, addr | 0x4000);
  273. }
  274. void
  275. ar8xxx_phy_mmd_write(struct ar8xxx_priv *priv, int phy_addr, u16 addr, u16 reg, u16 data)
  276. {
  277. struct mii_bus *bus = priv->mii_bus;
  278. mutex_lock(&bus->mdio_lock);
  279. ar8xxx_phy_mmd_prep(bus, phy_addr, addr, reg);
  280. bus->write(bus, phy_addr, MII_ATH_MMD_DATA, data);
  281. mutex_unlock(&bus->mdio_lock);
  282. }
  283. u16
  284. ar8xxx_phy_mmd_read(struct ar8xxx_priv *priv, int phy_addr, u16 addr, u16 reg)
  285. {
  286. struct mii_bus *bus = priv->mii_bus;
  287. u16 data;
  288. mutex_lock(&bus->mdio_lock);
  289. ar8xxx_phy_mmd_prep(bus, phy_addr, addr, reg);
  290. data = bus->read(bus, phy_addr, MII_ATH_MMD_DATA);
  291. mutex_unlock(&bus->mdio_lock);
  292. return data;
  293. }
  294. static int
  295. ar8xxx_reg_wait(struct ar8xxx_priv *priv, u32 reg, u32 mask, u32 val,
  296. unsigned timeout)
  297. {
  298. int i;
  299. for (i = 0; i < timeout; i++) {
  300. u32 t;
  301. t = ar8xxx_read(priv, reg);
  302. if ((t & mask) == val)
  303. return 0;
  304. usleep_range(1000, 2000);
  305. cond_resched();
  306. }
  307. return -ETIMEDOUT;
  308. }
  309. static int
  310. ar8xxx_mib_op(struct ar8xxx_priv *priv, u32 op)
  311. {
  312. unsigned mib_func = priv->chip->mib_func;
  313. int ret;
  314. lockdep_assert_held(&priv->mib_lock);
  315. /* Capture the hardware statistics for all ports */
  316. ar8xxx_rmw(priv, mib_func, AR8216_MIB_FUNC, (op << AR8216_MIB_FUNC_S));
  317. /* Wait for the capturing to complete. */
  318. ret = ar8xxx_reg_wait(priv, mib_func, AR8216_MIB_BUSY, 0, 10);
  319. if (ret)
  320. goto out;
  321. ret = 0;
  322. out:
  323. return ret;
  324. }
  325. static int
  326. ar8xxx_mib_capture(struct ar8xxx_priv *priv)
  327. {
  328. return ar8xxx_mib_op(priv, AR8216_MIB_FUNC_CAPTURE);
  329. }
  330. static int
  331. ar8xxx_mib_flush(struct ar8xxx_priv *priv)
  332. {
  333. return ar8xxx_mib_op(priv, AR8216_MIB_FUNC_FLUSH);
  334. }
  335. static void
  336. ar8xxx_mib_fetch_port_stat(struct ar8xxx_priv *priv, int port, bool flush)
  337. {
  338. unsigned int base;
  339. u64 *mib_stats;
  340. int i;
  341. WARN_ON(port >= priv->dev.ports);
  342. lockdep_assert_held(&priv->mib_lock);
  343. base = priv->chip->reg_port_stats_start +
  344. priv->chip->reg_port_stats_length * port;
  345. mib_stats = &priv->mib_stats[port * priv->chip->num_mibs];
  346. for (i = 0; i < priv->chip->num_mibs; i++) {
  347. const struct ar8xxx_mib_desc *mib;
  348. u64 t;
  349. mib = &priv->chip->mib_decs[i];
  350. t = ar8xxx_read(priv, base + mib->offset);
  351. if (mib->size == 2) {
  352. u64 hi;
  353. hi = ar8xxx_read(priv, base + mib->offset + 4);
  354. t |= hi << 32;
  355. }
  356. if (flush)
  357. mib_stats[i] = 0;
  358. else
  359. mib_stats[i] += t;
  360. cond_resched();
  361. }
  362. }
  363. static void
  364. ar8216_read_port_link(struct ar8xxx_priv *priv, int port,
  365. struct switch_port_link *link)
  366. {
  367. u32 status;
  368. u32 speed;
  369. memset(link, '\0', sizeof(*link));
  370. status = priv->chip->read_port_status(priv, port);
  371. link->aneg = !!(status & AR8216_PORT_STATUS_LINK_AUTO);
  372. if (link->aneg) {
  373. link->link = !!(status & AR8216_PORT_STATUS_LINK_UP);
  374. } else {
  375. link->link = true;
  376. if (priv->get_port_link) {
  377. int err;
  378. err = priv->get_port_link(port);
  379. if (err >= 0)
  380. link->link = !!err;
  381. }
  382. }
  383. if (!link->link)
  384. return;
  385. link->duplex = !!(status & AR8216_PORT_STATUS_DUPLEX);
  386. link->tx_flow = !!(status & AR8216_PORT_STATUS_TXFLOW);
  387. link->rx_flow = !!(status & AR8216_PORT_STATUS_RXFLOW);
  388. if (link->aneg && link->duplex && priv->chip->read_port_eee_status)
  389. link->eee = priv->chip->read_port_eee_status(priv, port);
  390. speed = (status & AR8216_PORT_STATUS_SPEED) >>
  391. AR8216_PORT_STATUS_SPEED_S;
  392. switch (speed) {
  393. case AR8216_PORT_SPEED_10M:
  394. link->speed = SWITCH_PORT_SPEED_10;
  395. break;
  396. case AR8216_PORT_SPEED_100M:
  397. link->speed = SWITCH_PORT_SPEED_100;
  398. break;
  399. case AR8216_PORT_SPEED_1000M:
  400. link->speed = SWITCH_PORT_SPEED_1000;
  401. break;
  402. default:
  403. link->speed = SWITCH_PORT_SPEED_UNKNOWN;
  404. break;
  405. }
  406. }
  407. static struct sk_buff *
  408. ar8216_mangle_tx(struct net_device *dev, struct sk_buff *skb)
  409. {
  410. struct ar8xxx_priv *priv = dev->phy_ptr;
  411. unsigned char *buf;
  412. if (unlikely(!priv))
  413. goto error;
  414. if (!priv->vlan)
  415. goto send;
  416. if (unlikely(skb_headroom(skb) < 2)) {
  417. if (pskb_expand_head(skb, 2, 0, GFP_ATOMIC) < 0)
  418. goto error;
  419. }
  420. buf = skb_push(skb, 2);
  421. buf[0] = 0x10;
  422. buf[1] = 0x80;
  423. send:
  424. return skb;
  425. error:
  426. dev_kfree_skb_any(skb);
  427. return NULL;
  428. }
  429. static void
  430. ar8216_mangle_rx(struct net_device *dev, struct sk_buff *skb)
  431. {
  432. struct ar8xxx_priv *priv;
  433. unsigned char *buf;
  434. int port, vlan;
  435. priv = dev->phy_ptr;
  436. if (!priv)
  437. return;
  438. /* don't strip the header if vlan mode is disabled */
  439. if (!priv->vlan)
  440. return;
  441. /* strip header, get vlan id */
  442. buf = skb->data;
  443. skb_pull(skb, 2);
  444. /* check for vlan header presence */
  445. if ((buf[12 + 2] != 0x81) || (buf[13 + 2] != 0x00))
  446. return;
  447. port = buf[0] & 0x7;
  448. /* no need to fix up packets coming from a tagged source */
  449. if (priv->vlan_tagged & (1 << port))
  450. return;
  451. /* lookup port vid from local table, the switch passes an invalid vlan id */
  452. vlan = priv->vlan_id[priv->pvid[port]];
  453. buf[14 + 2] &= 0xf0;
  454. buf[14 + 2] |= vlan >> 8;
  455. buf[15 + 2] = vlan & 0xff;
  456. }
  457. int
  458. ar8216_wait_bit(struct ar8xxx_priv *priv, int reg, u32 mask, u32 val)
  459. {
  460. int timeout = 20;
  461. u32 t = 0;
  462. while (1) {
  463. t = ar8xxx_read(priv, reg);
  464. if ((t & mask) == val)
  465. return 0;
  466. if (timeout-- <= 0)
  467. break;
  468. udelay(10);
  469. cond_resched();
  470. }
  471. pr_err("ar8216: timeout on reg %08x: %08x & %08x != %08x\n",
  472. (unsigned int) reg, t, mask, val);
  473. return -ETIMEDOUT;
  474. }
  475. static void
  476. ar8216_vtu_op(struct ar8xxx_priv *priv, u32 op, u32 val)
  477. {
  478. if (ar8216_wait_bit(priv, AR8216_REG_VTU, AR8216_VTU_ACTIVE, 0))
  479. return;
  480. if ((op & AR8216_VTU_OP) == AR8216_VTU_OP_LOAD) {
  481. val &= AR8216_VTUDATA_MEMBER;
  482. val |= AR8216_VTUDATA_VALID;
  483. ar8xxx_write(priv, AR8216_REG_VTU_DATA, val);
  484. }
  485. op |= AR8216_VTU_ACTIVE;
  486. ar8xxx_write(priv, AR8216_REG_VTU, op);
  487. }
  488. static void
  489. ar8216_vtu_flush(struct ar8xxx_priv *priv)
  490. {
  491. ar8216_vtu_op(priv, AR8216_VTU_OP_FLUSH, 0);
  492. }
  493. static void
  494. ar8216_vtu_load_vlan(struct ar8xxx_priv *priv, u32 vid, u32 port_mask)
  495. {
  496. u32 op;
  497. op = AR8216_VTU_OP_LOAD | (vid << AR8216_VTU_VID_S);
  498. ar8216_vtu_op(priv, op, port_mask);
  499. }
  500. static int
  501. ar8216_atu_flush(struct ar8xxx_priv *priv)
  502. {
  503. int ret;
  504. ret = ar8216_wait_bit(priv, AR8216_REG_ATU_FUNC0, AR8216_ATU_ACTIVE, 0);
  505. if (!ret)
  506. ar8xxx_write(priv, AR8216_REG_ATU_FUNC0, AR8216_ATU_OP_FLUSH |
  507. AR8216_ATU_ACTIVE);
  508. return ret;
  509. }
  510. static int
  511. ar8216_atu_flush_port(struct ar8xxx_priv *priv, int port)
  512. {
  513. u32 t;
  514. int ret;
  515. ret = ar8216_wait_bit(priv, AR8216_REG_ATU_FUNC0, AR8216_ATU_ACTIVE, 0);
  516. if (!ret) {
  517. t = (port << AR8216_ATU_PORT_NUM_S) | AR8216_ATU_OP_FLUSH_PORT;
  518. t |= AR8216_ATU_ACTIVE;
  519. ar8xxx_write(priv, AR8216_REG_ATU_FUNC0, t);
  520. }
  521. return ret;
  522. }
  523. static u32
  524. ar8216_read_port_status(struct ar8xxx_priv *priv, int port)
  525. {
  526. return ar8xxx_read(priv, AR8216_REG_PORT_STATUS(port));
  527. }
  528. static void
  529. ar8216_setup_port(struct ar8xxx_priv *priv, int port, u32 members)
  530. {
  531. u32 header;
  532. u32 egress, ingress;
  533. u32 pvid;
  534. if (priv->vlan) {
  535. pvid = priv->vlan_id[priv->pvid[port]];
  536. if (priv->vlan_tagged & (1 << port))
  537. egress = AR8216_OUT_ADD_VLAN;
  538. else
  539. egress = AR8216_OUT_STRIP_VLAN;
  540. ingress = AR8216_IN_SECURE;
  541. } else {
  542. pvid = port;
  543. egress = AR8216_OUT_KEEP;
  544. ingress = AR8216_IN_PORT_ONLY;
  545. }
  546. if (chip_is_ar8216(priv) && priv->vlan && port == AR8216_PORT_CPU)
  547. header = AR8216_PORT_CTRL_HEADER;
  548. else
  549. header = 0;
  550. ar8xxx_rmw(priv, AR8216_REG_PORT_CTRL(port),
  551. AR8216_PORT_CTRL_LEARN | AR8216_PORT_CTRL_VLAN_MODE |
  552. AR8216_PORT_CTRL_SINGLE_VLAN | AR8216_PORT_CTRL_STATE |
  553. AR8216_PORT_CTRL_HEADER | AR8216_PORT_CTRL_LEARN_LOCK,
  554. AR8216_PORT_CTRL_LEARN | header |
  555. (egress << AR8216_PORT_CTRL_VLAN_MODE_S) |
  556. (AR8216_PORT_STATE_FORWARD << AR8216_PORT_CTRL_STATE_S));
  557. ar8xxx_rmw(priv, AR8216_REG_PORT_VLAN(port),
  558. AR8216_PORT_VLAN_DEST_PORTS | AR8216_PORT_VLAN_MODE |
  559. AR8216_PORT_VLAN_DEFAULT_ID,
  560. (members << AR8216_PORT_VLAN_DEST_PORTS_S) |
  561. (ingress << AR8216_PORT_VLAN_MODE_S) |
  562. (pvid << AR8216_PORT_VLAN_DEFAULT_ID_S));
  563. }
  564. static int
  565. ar8216_hw_init(struct ar8xxx_priv *priv)
  566. {
  567. if (priv->initialized)
  568. return 0;
  569. ar8xxx_phy_init(priv);
  570. priv->initialized = true;
  571. return 0;
  572. }
  573. static void
  574. ar8216_init_globals(struct ar8xxx_priv *priv)
  575. {
  576. /* standard atheros magic */
  577. ar8xxx_write(priv, 0x38, 0xc000050e);
  578. ar8xxx_rmw(priv, AR8216_REG_GLOBAL_CTRL,
  579. AR8216_GCTRL_MTU, 1518 + 8 + 2);
  580. }
  581. static void
  582. ar8216_init_port(struct ar8xxx_priv *priv, int port)
  583. {
  584. /* Enable port learning and tx */
  585. ar8xxx_write(priv, AR8216_REG_PORT_CTRL(port),
  586. AR8216_PORT_CTRL_LEARN |
  587. (4 << AR8216_PORT_CTRL_STATE_S));
  588. ar8xxx_write(priv, AR8216_REG_PORT_VLAN(port), 0);
  589. if (port == AR8216_PORT_CPU) {
  590. ar8xxx_write(priv, AR8216_REG_PORT_STATUS(port),
  591. AR8216_PORT_STATUS_LINK_UP |
  592. (ar8xxx_has_gige(priv) ?
  593. AR8216_PORT_SPEED_1000M : AR8216_PORT_SPEED_100M) |
  594. AR8216_PORT_STATUS_TXMAC |
  595. AR8216_PORT_STATUS_RXMAC |
  596. (chip_is_ar8316(priv) ? AR8216_PORT_STATUS_RXFLOW : 0) |
  597. (chip_is_ar8316(priv) ? AR8216_PORT_STATUS_TXFLOW : 0) |
  598. AR8216_PORT_STATUS_DUPLEX);
  599. } else {
  600. ar8xxx_write(priv, AR8216_REG_PORT_STATUS(port),
  601. AR8216_PORT_STATUS_LINK_AUTO);
  602. }
  603. }
  604. static void
  605. ar8216_wait_atu_ready(struct ar8xxx_priv *priv, u16 r2, u16 r1)
  606. {
  607. int timeout = 20;
  608. while (ar8xxx_mii_read32(priv, r2, r1) & AR8216_ATU_ACTIVE && --timeout) {
  609. udelay(10);
  610. cond_resched();
  611. }
  612. if (!timeout)
  613. pr_err("ar8216: timeout waiting for atu to become ready\n");
  614. }
  615. static void ar8216_get_arl_entry(struct ar8xxx_priv *priv,
  616. struct arl_entry *a, u32 *status, enum arl_op op)
  617. {
  618. struct mii_bus *bus = priv->mii_bus;
  619. u16 r2, page;
  620. u16 r1_func0, r1_func1, r1_func2;
  621. u32 t, val0, val1, val2;
  622. int i;
  623. split_addr(AR8216_REG_ATU_FUNC0, &r1_func0, &r2, &page);
  624. r2 |= 0x10;
  625. r1_func1 = (AR8216_REG_ATU_FUNC1 >> 1) & 0x1e;
  626. r1_func2 = (AR8216_REG_ATU_FUNC2 >> 1) & 0x1e;
  627. switch (op) {
  628. case AR8XXX_ARL_INITIALIZE:
  629. /* all ATU registers are on the same page
  630. * therefore set page only once
  631. */
  632. bus->write(bus, 0x18, 0, page);
  633. wait_for_page_switch();
  634. ar8216_wait_atu_ready(priv, r2, r1_func0);
  635. ar8xxx_mii_write32(priv, r2, r1_func0, AR8216_ATU_OP_GET_NEXT);
  636. ar8xxx_mii_write32(priv, r2, r1_func1, 0);
  637. ar8xxx_mii_write32(priv, r2, r1_func2, 0);
  638. break;
  639. case AR8XXX_ARL_GET_NEXT:
  640. t = ar8xxx_mii_read32(priv, r2, r1_func0);
  641. t |= AR8216_ATU_ACTIVE;
  642. ar8xxx_mii_write32(priv, r2, r1_func0, t);
  643. ar8216_wait_atu_ready(priv, r2, r1_func0);
  644. val0 = ar8xxx_mii_read32(priv, r2, r1_func0);
  645. val1 = ar8xxx_mii_read32(priv, r2, r1_func1);
  646. val2 = ar8xxx_mii_read32(priv, r2, r1_func2);
  647. *status = (val2 & AR8216_ATU_STATUS) >> AR8216_ATU_STATUS_S;
  648. if (!*status)
  649. break;
  650. i = 0;
  651. t = AR8216_ATU_PORT0;
  652. while (!(val2 & t) && ++i < priv->dev.ports)
  653. t <<= 1;
  654. a->port = i;
  655. a->mac[0] = (val0 & AR8216_ATU_ADDR5) >> AR8216_ATU_ADDR5_S;
  656. a->mac[1] = (val0 & AR8216_ATU_ADDR4) >> AR8216_ATU_ADDR4_S;
  657. a->mac[2] = (val1 & AR8216_ATU_ADDR3) >> AR8216_ATU_ADDR3_S;
  658. a->mac[3] = (val1 & AR8216_ATU_ADDR2) >> AR8216_ATU_ADDR2_S;
  659. a->mac[4] = (val1 & AR8216_ATU_ADDR1) >> AR8216_ATU_ADDR1_S;
  660. a->mac[5] = (val1 & AR8216_ATU_ADDR0) >> AR8216_ATU_ADDR0_S;
  661. break;
  662. }
  663. }
  664. static void
  665. ar8236_setup_port(struct ar8xxx_priv *priv, int port, u32 members)
  666. {
  667. u32 egress, ingress;
  668. u32 pvid;
  669. if (priv->vlan) {
  670. pvid = priv->vlan_id[priv->pvid[port]];
  671. if (priv->vlan_tagged & (1 << port))
  672. egress = AR8216_OUT_ADD_VLAN;
  673. else
  674. egress = AR8216_OUT_STRIP_VLAN;
  675. ingress = AR8216_IN_SECURE;
  676. } else {
  677. pvid = port;
  678. egress = AR8216_OUT_KEEP;
  679. ingress = AR8216_IN_PORT_ONLY;
  680. }
  681. ar8xxx_rmw(priv, AR8216_REG_PORT_CTRL(port),
  682. AR8216_PORT_CTRL_LEARN | AR8216_PORT_CTRL_VLAN_MODE |
  683. AR8216_PORT_CTRL_SINGLE_VLAN | AR8216_PORT_CTRL_STATE |
  684. AR8216_PORT_CTRL_HEADER | AR8216_PORT_CTRL_LEARN_LOCK,
  685. AR8216_PORT_CTRL_LEARN |
  686. (egress << AR8216_PORT_CTRL_VLAN_MODE_S) |
  687. (AR8216_PORT_STATE_FORWARD << AR8216_PORT_CTRL_STATE_S));
  688. ar8xxx_rmw(priv, AR8236_REG_PORT_VLAN(port),
  689. AR8236_PORT_VLAN_DEFAULT_ID,
  690. (pvid << AR8236_PORT_VLAN_DEFAULT_ID_S));
  691. ar8xxx_rmw(priv, AR8236_REG_PORT_VLAN2(port),
  692. AR8236_PORT_VLAN2_VLAN_MODE |
  693. AR8236_PORT_VLAN2_MEMBER,
  694. (ingress << AR8236_PORT_VLAN2_VLAN_MODE_S) |
  695. (members << AR8236_PORT_VLAN2_MEMBER_S));
  696. }
  697. static void
  698. ar8236_init_globals(struct ar8xxx_priv *priv)
  699. {
  700. /* enable jumbo frames */
  701. ar8xxx_rmw(priv, AR8216_REG_GLOBAL_CTRL,
  702. AR8316_GCTRL_MTU, 9018 + 8 + 2);
  703. /* enable cpu port to receive arp frames */
  704. ar8xxx_reg_set(priv, AR8216_REG_ATU_CTRL,
  705. AR8236_ATU_CTRL_RES);
  706. /* enable cpu port to receive multicast and broadcast frames */
  707. ar8xxx_reg_set(priv, AR8216_REG_FLOOD_MASK,
  708. AR8236_FM_CPU_BROADCAST_EN | AR8236_FM_CPU_BCAST_FWD_EN);
  709. /* Enable MIB counters */
  710. ar8xxx_rmw(priv, AR8216_REG_MIB_FUNC, AR8216_MIB_FUNC | AR8236_MIB_EN,
  711. (AR8216_MIB_FUNC_NO_OP << AR8216_MIB_FUNC_S) |
  712. AR8236_MIB_EN);
  713. }
  714. static int
  715. ar8316_hw_init(struct ar8xxx_priv *priv)
  716. {
  717. u32 val, newval;
  718. val = ar8xxx_read(priv, AR8316_REG_POSTRIP);
  719. if (priv->phy->interface == PHY_INTERFACE_MODE_RGMII) {
  720. if (priv->port4_phy) {
  721. /* value taken from Ubiquiti RouterStation Pro */
  722. newval = 0x81461bea;
  723. pr_info("ar8316: Using port 4 as PHY\n");
  724. } else {
  725. newval = 0x01261be2;
  726. pr_info("ar8316: Using port 4 as switch port\n");
  727. }
  728. } else if (priv->phy->interface == PHY_INTERFACE_MODE_GMII) {
  729. /* value taken from AVM Fritz!Box 7390 sources */
  730. newval = 0x010e5b71;
  731. } else {
  732. /* no known value for phy interface */
  733. pr_err("ar8316: unsupported mii mode: %d.\n",
  734. priv->phy->interface);
  735. return -EINVAL;
  736. }
  737. if (val == newval)
  738. goto out;
  739. ar8xxx_write(priv, AR8316_REG_POSTRIP, newval);
  740. if (priv->port4_phy &&
  741. priv->phy->interface == PHY_INTERFACE_MODE_RGMII) {
  742. /* work around for phy4 rgmii mode */
  743. ar8xxx_phy_dbg_write(priv, 4, 0x12, 0x480c);
  744. /* rx delay */
  745. ar8xxx_phy_dbg_write(priv, 4, 0x0, 0x824e);
  746. /* tx delay */
  747. ar8xxx_phy_dbg_write(priv, 4, 0x5, 0x3d47);
  748. msleep(1000);
  749. }
  750. ar8xxx_phy_init(priv);
  751. out:
  752. priv->initialized = true;
  753. return 0;
  754. }
  755. static void
  756. ar8316_init_globals(struct ar8xxx_priv *priv)
  757. {
  758. /* standard atheros magic */
  759. ar8xxx_write(priv, 0x38, 0xc000050e);
  760. /* enable cpu port to receive multicast and broadcast frames */
  761. ar8xxx_write(priv, AR8216_REG_FLOOD_MASK, 0x003f003f);
  762. /* enable jumbo frames */
  763. ar8xxx_rmw(priv, AR8216_REG_GLOBAL_CTRL,
  764. AR8316_GCTRL_MTU, 9018 + 8 + 2);
  765. /* Enable MIB counters */
  766. ar8xxx_rmw(priv, AR8216_REG_MIB_FUNC, AR8216_MIB_FUNC | AR8236_MIB_EN,
  767. (AR8216_MIB_FUNC_NO_OP << AR8216_MIB_FUNC_S) |
  768. AR8236_MIB_EN);
  769. }
  770. int
  771. ar8xxx_sw_set_vlan(struct switch_dev *dev, const struct switch_attr *attr,
  772. struct switch_val *val)
  773. {
  774. struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
  775. priv->vlan = !!val->value.i;
  776. return 0;
  777. }
  778. int
  779. ar8xxx_sw_get_vlan(struct switch_dev *dev, const struct switch_attr *attr,
  780. struct switch_val *val)
  781. {
  782. struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
  783. val->value.i = priv->vlan;
  784. return 0;
  785. }
  786. int
  787. ar8xxx_sw_set_pvid(struct switch_dev *dev, int port, int vlan)
  788. {
  789. struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
  790. /* make sure no invalid PVIDs get set */
  791. if (vlan < 0 || vlan >= dev->vlans ||
  792. port < 0 || port >= AR8X16_MAX_PORTS)
  793. return -EINVAL;
  794. priv->pvid[port] = vlan;
  795. return 0;
  796. }
  797. int
  798. ar8xxx_sw_get_pvid(struct switch_dev *dev, int port, int *vlan)
  799. {
  800. struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
  801. if (port < 0 || port >= AR8X16_MAX_PORTS)
  802. return -EINVAL;
  803. *vlan = priv->pvid[port];
  804. return 0;
  805. }
  806. static int
  807. ar8xxx_sw_set_vid(struct switch_dev *dev, const struct switch_attr *attr,
  808. struct switch_val *val)
  809. {
  810. struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
  811. if (val->port_vlan >= AR8X16_MAX_VLANS)
  812. return -EINVAL;
  813. priv->vlan_id[val->port_vlan] = val->value.i;
  814. return 0;
  815. }
  816. static int
  817. ar8xxx_sw_get_vid(struct switch_dev *dev, const struct switch_attr *attr,
  818. struct switch_val *val)
  819. {
  820. struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
  821. val->value.i = priv->vlan_id[val->port_vlan];
  822. return 0;
  823. }
  824. int
  825. ar8xxx_sw_get_port_link(struct switch_dev *dev, int port,
  826. struct switch_port_link *link)
  827. {
  828. struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
  829. ar8216_read_port_link(priv, port, link);
  830. return 0;
  831. }
  832. static int
  833. ar8xxx_sw_get_ports(struct switch_dev *dev, struct switch_val *val)
  834. {
  835. struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
  836. u8 ports;
  837. int i;
  838. if (val->port_vlan >= AR8X16_MAX_VLANS)
  839. return -EINVAL;
  840. ports = priv->vlan_table[val->port_vlan];
  841. val->len = 0;
  842. for (i = 0; i < dev->ports; i++) {
  843. struct switch_port *p;
  844. if (!(ports & (1 << i)))
  845. continue;
  846. p = &val->value.ports[val->len++];
  847. p->id = i;
  848. if (priv->vlan_tagged & (1 << i))
  849. p->flags = (1 << SWITCH_PORT_FLAG_TAGGED);
  850. else
  851. p->flags = 0;
  852. }
  853. return 0;
  854. }
  855. static int
  856. ar8xxx_sw_set_ports(struct switch_dev *dev, struct switch_val *val)
  857. {
  858. struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
  859. u8 *vt = &priv->vlan_table[val->port_vlan];
  860. int i, j;
  861. *vt = 0;
  862. for (i = 0; i < val->len; i++) {
  863. struct switch_port *p = &val->value.ports[i];
  864. if (p->flags & (1 << SWITCH_PORT_FLAG_TAGGED)) {
  865. priv->vlan_tagged |= (1 << p->id);
  866. } else {
  867. priv->vlan_tagged &= ~(1 << p->id);
  868. priv->pvid[p->id] = val->port_vlan;
  869. /* make sure that an untagged port does not
  870. * appear in other vlans */
  871. for (j = 0; j < AR8X16_MAX_VLANS; j++) {
  872. if (j == val->port_vlan)
  873. continue;
  874. priv->vlan_table[j] &= ~(1 << p->id);
  875. }
  876. }
  877. *vt |= 1 << p->id;
  878. }
  879. return 0;
  880. }
  881. static void
  882. ar8216_set_mirror_regs(struct ar8xxx_priv *priv)
  883. {
  884. int port;
  885. /* reset all mirror registers */
  886. ar8xxx_rmw(priv, AR8216_REG_GLOBAL_CPUPORT,
  887. AR8216_GLOBAL_CPUPORT_MIRROR_PORT,
  888. (0xF << AR8216_GLOBAL_CPUPORT_MIRROR_PORT_S));
  889. for (port = 0; port < AR8216_NUM_PORTS; port++) {
  890. ar8xxx_reg_clear(priv, AR8216_REG_PORT_CTRL(port),
  891. AR8216_PORT_CTRL_MIRROR_RX);
  892. ar8xxx_reg_clear(priv, AR8216_REG_PORT_CTRL(port),
  893. AR8216_PORT_CTRL_MIRROR_TX);
  894. }
  895. /* now enable mirroring if necessary */
  896. if (priv->source_port >= AR8216_NUM_PORTS ||
  897. priv->monitor_port >= AR8216_NUM_PORTS ||
  898. priv->source_port == priv->monitor_port) {
  899. return;
  900. }
  901. ar8xxx_rmw(priv, AR8216_REG_GLOBAL_CPUPORT,
  902. AR8216_GLOBAL_CPUPORT_MIRROR_PORT,
  903. (priv->monitor_port << AR8216_GLOBAL_CPUPORT_MIRROR_PORT_S));
  904. if (priv->mirror_rx)
  905. ar8xxx_reg_set(priv, AR8216_REG_PORT_CTRL(priv->source_port),
  906. AR8216_PORT_CTRL_MIRROR_RX);
  907. if (priv->mirror_tx)
  908. ar8xxx_reg_set(priv, AR8216_REG_PORT_CTRL(priv->source_port),
  909. AR8216_PORT_CTRL_MIRROR_TX);
  910. }
  911. static inline u32
  912. ar8xxx_age_time_val(int age_time)
  913. {
  914. return (age_time + AR8XXX_REG_ARL_CTRL_AGE_TIME_SECS / 2) /
  915. AR8XXX_REG_ARL_CTRL_AGE_TIME_SECS;
  916. }
  917. static inline void
  918. ar8xxx_set_age_time(struct ar8xxx_priv *priv, int reg)
  919. {
  920. u32 age_time = ar8xxx_age_time_val(priv->arl_age_time);
  921. ar8xxx_rmw(priv, reg, AR8216_ATU_CTRL_AGE_TIME, age_time << AR8216_ATU_CTRL_AGE_TIME_S);
  922. }
  923. int
  924. ar8xxx_sw_hw_apply(struct switch_dev *dev)
  925. {
  926. struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
  927. const struct ar8xxx_chip *chip = priv->chip;
  928. u8 portmask[AR8X16_MAX_PORTS];
  929. int i, j;
  930. mutex_lock(&priv->reg_mutex);
  931. /* flush all vlan translation unit entries */
  932. priv->chip->vtu_flush(priv);
  933. memset(portmask, 0, sizeof(portmask));
  934. if (!priv->init) {
  935. /* calculate the port destination masks and load vlans
  936. * into the vlan translation unit */
  937. for (j = 0; j < AR8X16_MAX_VLANS; j++) {
  938. u8 vp = priv->vlan_table[j];
  939. if (!vp)
  940. continue;
  941. for (i = 0; i < dev->ports; i++) {
  942. u8 mask = (1 << i);
  943. if (vp & mask)
  944. portmask[i] |= vp & ~mask;
  945. }
  946. chip->vtu_load_vlan(priv, priv->vlan_id[j],
  947. priv->vlan_table[j]);
  948. }
  949. } else {
  950. /* vlan disabled:
  951. * isolate all ports, but connect them to the cpu port */
  952. for (i = 0; i < dev->ports; i++) {
  953. if (i == AR8216_PORT_CPU)
  954. continue;
  955. portmask[i] = 1 << AR8216_PORT_CPU;
  956. portmask[AR8216_PORT_CPU] |= (1 << i);
  957. }
  958. }
  959. /* update the port destination mask registers and tag settings */
  960. for (i = 0; i < dev->ports; i++) {
  961. chip->setup_port(priv, i, portmask[i]);
  962. }
  963. chip->set_mirror_regs(priv);
  964. /* set age time */
  965. if (chip->reg_arl_ctrl)
  966. ar8xxx_set_age_time(priv, chip->reg_arl_ctrl);
  967. mutex_unlock(&priv->reg_mutex);
  968. return 0;
  969. }
  970. int
  971. ar8xxx_sw_reset_switch(struct switch_dev *dev)
  972. {
  973. struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
  974. const struct ar8xxx_chip *chip = priv->chip;
  975. int i;
  976. mutex_lock(&priv->reg_mutex);
  977. memset(&priv->vlan, 0, sizeof(struct ar8xxx_priv) -
  978. offsetof(struct ar8xxx_priv, vlan));
  979. for (i = 0; i < AR8X16_MAX_VLANS; i++)
  980. priv->vlan_id[i] = i;
  981. /* Configure all ports */
  982. for (i = 0; i < dev->ports; i++)
  983. chip->init_port(priv, i);
  984. priv->mirror_rx = false;
  985. priv->mirror_tx = false;
  986. priv->source_port = 0;
  987. priv->monitor_port = 0;
  988. priv->arl_age_time = AR8XXX_DEFAULT_ARL_AGE_TIME;
  989. chip->init_globals(priv);
  990. chip->atu_flush(priv);
  991. mutex_unlock(&priv->reg_mutex);
  992. return chip->sw_hw_apply(dev);
  993. }
  994. int
  995. ar8xxx_sw_set_reset_mibs(struct switch_dev *dev,
  996. const struct switch_attr *attr,
  997. struct switch_val *val)
  998. {
  999. struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
  1000. unsigned int len;
  1001. int ret;
  1002. if (!ar8xxx_has_mib_counters(priv))
  1003. return -EOPNOTSUPP;
  1004. mutex_lock(&priv->mib_lock);
  1005. len = priv->dev.ports * priv->chip->num_mibs *
  1006. sizeof(*priv->mib_stats);
  1007. memset(priv->mib_stats, '\0', len);
  1008. ret = ar8xxx_mib_flush(priv);
  1009. if (ret)
  1010. goto unlock;
  1011. ret = 0;
  1012. unlock:
  1013. mutex_unlock(&priv->mib_lock);
  1014. return ret;
  1015. }
  1016. int
  1017. ar8xxx_sw_set_mirror_rx_enable(struct switch_dev *dev,
  1018. const struct switch_attr *attr,
  1019. struct switch_val *val)
  1020. {
  1021. struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
  1022. mutex_lock(&priv->reg_mutex);
  1023. priv->mirror_rx = !!val->value.i;
  1024. priv->chip->set_mirror_regs(priv);
  1025. mutex_unlock(&priv->reg_mutex);
  1026. return 0;
  1027. }
  1028. int
  1029. ar8xxx_sw_get_mirror_rx_enable(struct switch_dev *dev,
  1030. const struct switch_attr *attr,
  1031. struct switch_val *val)
  1032. {
  1033. struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
  1034. val->value.i = priv->mirror_rx;
  1035. return 0;
  1036. }
  1037. int
  1038. ar8xxx_sw_set_mirror_tx_enable(struct switch_dev *dev,
  1039. const struct switch_attr *attr,
  1040. struct switch_val *val)
  1041. {
  1042. struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
  1043. mutex_lock(&priv->reg_mutex);
  1044. priv->mirror_tx = !!val->value.i;
  1045. priv->chip->set_mirror_regs(priv);
  1046. mutex_unlock(&priv->reg_mutex);
  1047. return 0;
  1048. }
  1049. int
  1050. ar8xxx_sw_get_mirror_tx_enable(struct switch_dev *dev,
  1051. const struct switch_attr *attr,
  1052. struct switch_val *val)
  1053. {
  1054. struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
  1055. val->value.i = priv->mirror_tx;
  1056. return 0;
  1057. }
  1058. int
  1059. ar8xxx_sw_set_mirror_monitor_port(struct switch_dev *dev,
  1060. const struct switch_attr *attr,
  1061. struct switch_val *val)
  1062. {
  1063. struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
  1064. mutex_lock(&priv->reg_mutex);
  1065. priv->monitor_port = val->value.i;
  1066. priv->chip->set_mirror_regs(priv);
  1067. mutex_unlock(&priv->reg_mutex);
  1068. return 0;
  1069. }
  1070. int
  1071. ar8xxx_sw_get_mirror_monitor_port(struct switch_dev *dev,
  1072. const struct switch_attr *attr,
  1073. struct switch_val *val)
  1074. {
  1075. struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
  1076. val->value.i = priv->monitor_port;
  1077. return 0;
  1078. }
  1079. int
  1080. ar8xxx_sw_set_mirror_source_port(struct switch_dev *dev,
  1081. const struct switch_attr *attr,
  1082. struct switch_val *val)
  1083. {
  1084. struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
  1085. mutex_lock(&priv->reg_mutex);
  1086. priv->source_port = val->value.i;
  1087. priv->chip->set_mirror_regs(priv);
  1088. mutex_unlock(&priv->reg_mutex);
  1089. return 0;
  1090. }
  1091. int
  1092. ar8xxx_sw_get_mirror_source_port(struct switch_dev *dev,
  1093. const struct switch_attr *attr,
  1094. struct switch_val *val)
  1095. {
  1096. struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
  1097. val->value.i = priv->source_port;
  1098. return 0;
  1099. }
  1100. int
  1101. ar8xxx_sw_set_port_reset_mib(struct switch_dev *dev,
  1102. const struct switch_attr *attr,
  1103. struct switch_val *val)
  1104. {
  1105. struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
  1106. int port;
  1107. int ret;
  1108. if (!ar8xxx_has_mib_counters(priv))
  1109. return -EOPNOTSUPP;
  1110. port = val->port_vlan;
  1111. if (port >= dev->ports)
  1112. return -EINVAL;
  1113. mutex_lock(&priv->mib_lock);
  1114. ret = ar8xxx_mib_capture(priv);
  1115. if (ret)
  1116. goto unlock;
  1117. ar8xxx_mib_fetch_port_stat(priv, port, true);
  1118. ret = 0;
  1119. unlock:
  1120. mutex_unlock(&priv->mib_lock);
  1121. return ret;
  1122. }
  1123. static void
  1124. ar8xxx_byte_to_str(char *buf, int len, u64 byte)
  1125. {
  1126. unsigned long b;
  1127. const char *unit;
  1128. if (byte >= 0x40000000) { /* 1 GiB */
  1129. b = byte * 10 / 0x40000000;
  1130. unit = "GiB";
  1131. } else if (byte >= 0x100000) { /* 1 MiB */
  1132. b = byte * 10 / 0x100000;
  1133. unit = "MiB";
  1134. } else if (byte >= 0x400) { /* 1 KiB */
  1135. b = byte * 10 / 0x400;
  1136. unit = "KiB";
  1137. } else {
  1138. b = byte;
  1139. unit = "Byte";
  1140. }
  1141. if (strcmp(unit, "Byte"))
  1142. snprintf(buf, len, "%lu.%lu %s", b / 10, b % 10, unit);
  1143. else
  1144. snprintf(buf, len, "%lu %s", b, unit);
  1145. }
  1146. int
  1147. ar8xxx_sw_get_port_mib(struct switch_dev *dev,
  1148. const struct switch_attr *attr,
  1149. struct switch_val *val)
  1150. {
  1151. struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
  1152. const struct ar8xxx_chip *chip = priv->chip;
  1153. u64 *mib_stats, mib_data;
  1154. unsigned int port;
  1155. int ret;
  1156. char *buf = priv->buf;
  1157. char buf1[64];
  1158. const char *mib_name;
  1159. int i, len = 0;
  1160. bool mib_stats_empty = true;
  1161. if (!ar8xxx_has_mib_counters(priv))
  1162. return -EOPNOTSUPP;
  1163. port = val->port_vlan;
  1164. if (port >= dev->ports)
  1165. return -EINVAL;
  1166. mutex_lock(&priv->mib_lock);
  1167. ret = ar8xxx_mib_capture(priv);
  1168. if (ret)
  1169. goto unlock;
  1170. ar8xxx_mib_fetch_port_stat(priv, port, false);
  1171. len += snprintf(buf + len, sizeof(priv->buf) - len,
  1172. "MIB counters\n");
  1173. mib_stats = &priv->mib_stats[port * chip->num_mibs];
  1174. for (i = 0; i < chip->num_mibs; i++) {
  1175. mib_name = chip->mib_decs[i].name;
  1176. mib_data = mib_stats[i];
  1177. len += snprintf(buf + len, sizeof(priv->buf) - len,
  1178. "%-12s: %llu\n", mib_name, mib_data);
  1179. if ((!strcmp(mib_name, "TxByte") ||
  1180. !strcmp(mib_name, "RxGoodByte")) &&
  1181. mib_data >= 1024) {
  1182. ar8xxx_byte_to_str(buf1, sizeof(buf1), mib_data);
  1183. --len; /* discard newline at the end of buf */
  1184. len += snprintf(buf + len, sizeof(priv->buf) - len,
  1185. " (%s)\n", buf1);
  1186. }
  1187. if (mib_stats_empty && mib_data)
  1188. mib_stats_empty = false;
  1189. }
  1190. if (mib_stats_empty)
  1191. len = snprintf(buf, sizeof(priv->buf), "No MIB data");
  1192. val->value.s = buf;
  1193. val->len = len;
  1194. ret = 0;
  1195. unlock:
  1196. mutex_unlock(&priv->mib_lock);
  1197. return ret;
  1198. }
  1199. int
  1200. ar8xxx_sw_set_arl_age_time(struct switch_dev *dev, const struct switch_attr *attr,
  1201. struct switch_val *val)
  1202. {
  1203. struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
  1204. int age_time = val->value.i;
  1205. u32 age_time_val;
  1206. if (age_time < 0)
  1207. return -EINVAL;
  1208. age_time_val = ar8xxx_age_time_val(age_time);
  1209. if (age_time_val == 0 || age_time_val > 0xffff)
  1210. return -EINVAL;
  1211. priv->arl_age_time = age_time;
  1212. return 0;
  1213. }
  1214. int
  1215. ar8xxx_sw_get_arl_age_time(struct switch_dev *dev, const struct switch_attr *attr,
  1216. struct switch_val *val)
  1217. {
  1218. struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
  1219. val->value.i = priv->arl_age_time;
  1220. return 0;
  1221. }
  1222. int
  1223. ar8xxx_sw_get_arl_table(struct switch_dev *dev,
  1224. const struct switch_attr *attr,
  1225. struct switch_val *val)
  1226. {
  1227. struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
  1228. struct mii_bus *bus = priv->mii_bus;
  1229. const struct ar8xxx_chip *chip = priv->chip;
  1230. char *buf = priv->arl_buf;
  1231. int i, j, k, len = 0;
  1232. struct arl_entry *a, *a1;
  1233. u32 status;
  1234. if (!chip->get_arl_entry)
  1235. return -EOPNOTSUPP;
  1236. mutex_lock(&priv->reg_mutex);
  1237. mutex_lock(&bus->mdio_lock);
  1238. chip->get_arl_entry(priv, NULL, NULL, AR8XXX_ARL_INITIALIZE);
  1239. for(i = 0; i < AR8XXX_NUM_ARL_RECORDS; ++i) {
  1240. a = &priv->arl_table[i];
  1241. duplicate:
  1242. chip->get_arl_entry(priv, a, &status, AR8XXX_ARL_GET_NEXT);
  1243. if (!status)
  1244. break;
  1245. /* avoid duplicates
  1246. * ARL table can include multiple valid entries
  1247. * per MAC, just with differing status codes
  1248. */
  1249. for (j = 0; j < i; ++j) {
  1250. a1 = &priv->arl_table[j];
  1251. if (a->port == a1->port && !memcmp(a->mac, a1->mac, sizeof(a->mac)))
  1252. goto duplicate;
  1253. }
  1254. }
  1255. mutex_unlock(&bus->mdio_lock);
  1256. len += snprintf(buf + len, sizeof(priv->arl_buf) - len,
  1257. "address resolution table\n");
  1258. if (i == AR8XXX_NUM_ARL_RECORDS)
  1259. len += snprintf(buf + len, sizeof(priv->arl_buf) - len,
  1260. "Too many entries found, displaying the first %d only!\n",
  1261. AR8XXX_NUM_ARL_RECORDS);
  1262. for (j = 0; j < priv->dev.ports; ++j) {
  1263. for (k = 0; k < i; ++k) {
  1264. a = &priv->arl_table[k];
  1265. if (a->port != j)
  1266. continue;
  1267. len += snprintf(buf + len, sizeof(priv->arl_buf) - len,
  1268. "Port %d: MAC %02x:%02x:%02x:%02x:%02x:%02x\n",
  1269. j,
  1270. a->mac[5], a->mac[4], a->mac[3],
  1271. a->mac[2], a->mac[1], a->mac[0]);
  1272. }
  1273. }
  1274. val->value.s = buf;
  1275. val->len = len;
  1276. mutex_unlock(&priv->reg_mutex);
  1277. return 0;
  1278. }
  1279. int
  1280. ar8xxx_sw_set_flush_arl_table(struct switch_dev *dev,
  1281. const struct switch_attr *attr,
  1282. struct switch_val *val)
  1283. {
  1284. struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
  1285. int ret;
  1286. mutex_lock(&priv->reg_mutex);
  1287. ret = priv->chip->atu_flush(priv);
  1288. mutex_unlock(&priv->reg_mutex);
  1289. return ret;
  1290. }
  1291. int
  1292. ar8xxx_sw_set_flush_port_arl_table(struct switch_dev *dev,
  1293. const struct switch_attr *attr,
  1294. struct switch_val *val)
  1295. {
  1296. struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
  1297. int port, ret;
  1298. port = val->port_vlan;
  1299. if (port >= dev->ports)
  1300. return -EINVAL;
  1301. mutex_lock(&priv->reg_mutex);
  1302. ret = priv->chip->atu_flush_port(priv, port);
  1303. mutex_unlock(&priv->reg_mutex);
  1304. return ret;
  1305. }
  1306. static const struct switch_attr ar8xxx_sw_attr_globals[] = {
  1307. {
  1308. .type = SWITCH_TYPE_INT,
  1309. .name = "enable_vlan",
  1310. .description = "Enable VLAN mode",
  1311. .set = ar8xxx_sw_set_vlan,
  1312. .get = ar8xxx_sw_get_vlan,
  1313. .max = 1
  1314. },
  1315. {
  1316. .type = SWITCH_TYPE_NOVAL,
  1317. .name = "reset_mibs",
  1318. .description = "Reset all MIB counters",
  1319. .set = ar8xxx_sw_set_reset_mibs,
  1320. },
  1321. {
  1322. .type = SWITCH_TYPE_INT,
  1323. .name = "enable_mirror_rx",
  1324. .description = "Enable mirroring of RX packets",
  1325. .set = ar8xxx_sw_set_mirror_rx_enable,
  1326. .get = ar8xxx_sw_get_mirror_rx_enable,
  1327. .max = 1
  1328. },
  1329. {
  1330. .type = SWITCH_TYPE_INT,
  1331. .name = "enable_mirror_tx",
  1332. .description = "Enable mirroring of TX packets",
  1333. .set = ar8xxx_sw_set_mirror_tx_enable,
  1334. .get = ar8xxx_sw_get_mirror_tx_enable,
  1335. .max = 1
  1336. },
  1337. {
  1338. .type = SWITCH_TYPE_INT,
  1339. .name = "mirror_monitor_port",
  1340. .description = "Mirror monitor port",
  1341. .set = ar8xxx_sw_set_mirror_monitor_port,
  1342. .get = ar8xxx_sw_get_mirror_monitor_port,
  1343. .max = AR8216_NUM_PORTS - 1
  1344. },
  1345. {
  1346. .type = SWITCH_TYPE_INT,
  1347. .name = "mirror_source_port",
  1348. .description = "Mirror source port",
  1349. .set = ar8xxx_sw_set_mirror_source_port,
  1350. .get = ar8xxx_sw_get_mirror_source_port,
  1351. .max = AR8216_NUM_PORTS - 1
  1352. },
  1353. {
  1354. .type = SWITCH_TYPE_STRING,
  1355. .name = "arl_table",
  1356. .description = "Get ARL table",
  1357. .set = NULL,
  1358. .get = ar8xxx_sw_get_arl_table,
  1359. },
  1360. {
  1361. .type = SWITCH_TYPE_NOVAL,
  1362. .name = "flush_arl_table",
  1363. .description = "Flush ARL table",
  1364. .set = ar8xxx_sw_set_flush_arl_table,
  1365. },
  1366. };
  1367. const struct switch_attr ar8xxx_sw_attr_port[] = {
  1368. {
  1369. .type = SWITCH_TYPE_NOVAL,
  1370. .name = "reset_mib",
  1371. .description = "Reset single port MIB counters",
  1372. .set = ar8xxx_sw_set_port_reset_mib,
  1373. },
  1374. {
  1375. .type = SWITCH_TYPE_STRING,
  1376. .name = "mib",
  1377. .description = "Get port's MIB counters",
  1378. .set = NULL,
  1379. .get = ar8xxx_sw_get_port_mib,
  1380. },
  1381. {
  1382. .type = SWITCH_TYPE_NOVAL,
  1383. .name = "flush_arl_table",
  1384. .description = "Flush port's ARL table entries",
  1385. .set = ar8xxx_sw_set_flush_port_arl_table,
  1386. },
  1387. };
  1388. const struct switch_attr ar8xxx_sw_attr_vlan[1] = {
  1389. {
  1390. .type = SWITCH_TYPE_INT,
  1391. .name = "vid",
  1392. .description = "VLAN ID (0-4094)",
  1393. .set = ar8xxx_sw_set_vid,
  1394. .get = ar8xxx_sw_get_vid,
  1395. .max = 4094,
  1396. },
  1397. };
  1398. static const struct switch_dev_ops ar8xxx_sw_ops = {
  1399. .attr_global = {
  1400. .attr = ar8xxx_sw_attr_globals,
  1401. .n_attr = ARRAY_SIZE(ar8xxx_sw_attr_globals),
  1402. },
  1403. .attr_port = {
  1404. .attr = ar8xxx_sw_attr_port,
  1405. .n_attr = ARRAY_SIZE(ar8xxx_sw_attr_port),
  1406. },
  1407. .attr_vlan = {
  1408. .attr = ar8xxx_sw_attr_vlan,
  1409. .n_attr = ARRAY_SIZE(ar8xxx_sw_attr_vlan),
  1410. },
  1411. .get_port_pvid = ar8xxx_sw_get_pvid,
  1412. .set_port_pvid = ar8xxx_sw_set_pvid,
  1413. .get_vlan_ports = ar8xxx_sw_get_ports,
  1414. .set_vlan_ports = ar8xxx_sw_set_ports,
  1415. .apply_config = ar8xxx_sw_hw_apply,
  1416. .reset_switch = ar8xxx_sw_reset_switch,
  1417. .get_port_link = ar8xxx_sw_get_port_link,
  1418. /* The following op is disabled as it hogs the CPU and degrades performance.
  1419. An implementation has been attempted in 4d8a66d but reading MIB data is slow
  1420. on ar8xxx switches.
  1421. The high CPU load has been traced down to the ar8xxx_reg_wait() call in
  1422. ar8xxx_mib_op(), which has to usleep_range() till the MIB busy flag set by
  1423. the request to update the MIB counter is cleared. */
  1424. #if 0
  1425. .get_port_stats = ar8xxx_sw_get_port_stats,
  1426. #endif
  1427. };
  1428. static const struct ar8xxx_chip ar8216_chip = {
  1429. .caps = AR8XXX_CAP_MIB_COUNTERS,
  1430. .reg_port_stats_start = 0x19000,
  1431. .reg_port_stats_length = 0xa0,
  1432. .reg_arl_ctrl = AR8216_REG_ATU_CTRL,
  1433. .name = "Atheros AR8216",
  1434. .ports = AR8216_NUM_PORTS,
  1435. .vlans = AR8216_NUM_VLANS,
  1436. .swops = &ar8xxx_sw_ops,
  1437. .hw_init = ar8216_hw_init,
  1438. .init_globals = ar8216_init_globals,
  1439. .init_port = ar8216_init_port,
  1440. .setup_port = ar8216_setup_port,
  1441. .read_port_status = ar8216_read_port_status,
  1442. .atu_flush = ar8216_atu_flush,
  1443. .atu_flush_port = ar8216_atu_flush_port,
  1444. .vtu_flush = ar8216_vtu_flush,
  1445. .vtu_load_vlan = ar8216_vtu_load_vlan,
  1446. .set_mirror_regs = ar8216_set_mirror_regs,
  1447. .get_arl_entry = ar8216_get_arl_entry,
  1448. .sw_hw_apply = ar8xxx_sw_hw_apply,
  1449. .num_mibs = ARRAY_SIZE(ar8216_mibs),
  1450. .mib_decs = ar8216_mibs,
  1451. .mib_func = AR8216_REG_MIB_FUNC
  1452. };
  1453. static const struct ar8xxx_chip ar8236_chip = {
  1454. .caps = AR8XXX_CAP_MIB_COUNTERS,
  1455. .reg_port_stats_start = 0x20000,
  1456. .reg_port_stats_length = 0x100,
  1457. .reg_arl_ctrl = AR8216_REG_ATU_CTRL,
  1458. .name = "Atheros AR8236",
  1459. .ports = AR8216_NUM_PORTS,
  1460. .vlans = AR8216_NUM_VLANS,
  1461. .swops = &ar8xxx_sw_ops,
  1462. .hw_init = ar8216_hw_init,
  1463. .init_globals = ar8236_init_globals,
  1464. .init_port = ar8216_init_port,
  1465. .setup_port = ar8236_setup_port,
  1466. .read_port_status = ar8216_read_port_status,
  1467. .atu_flush = ar8216_atu_flush,
  1468. .atu_flush_port = ar8216_atu_flush_port,
  1469. .vtu_flush = ar8216_vtu_flush,
  1470. .vtu_load_vlan = ar8216_vtu_load_vlan,
  1471. .set_mirror_regs = ar8216_set_mirror_regs,
  1472. .get_arl_entry = ar8216_get_arl_entry,
  1473. .sw_hw_apply = ar8xxx_sw_hw_apply,
  1474. .num_mibs = ARRAY_SIZE(ar8236_mibs),
  1475. .mib_decs = ar8236_mibs,
  1476. .mib_func = AR8216_REG_MIB_FUNC
  1477. };
  1478. static const struct ar8xxx_chip ar8316_chip = {
  1479. .caps = AR8XXX_CAP_GIGE | AR8XXX_CAP_MIB_COUNTERS,
  1480. .reg_port_stats_start = 0x20000,
  1481. .reg_port_stats_length = 0x100,
  1482. .reg_arl_ctrl = AR8216_REG_ATU_CTRL,
  1483. .name = "Atheros AR8316",
  1484. .ports = AR8216_NUM_PORTS,
  1485. .vlans = AR8X16_MAX_VLANS,
  1486. .swops = &ar8xxx_sw_ops,
  1487. .hw_init = ar8316_hw_init,
  1488. .init_globals = ar8316_init_globals,
  1489. .init_port = ar8216_init_port,
  1490. .setup_port = ar8216_setup_port,
  1491. .read_port_status = ar8216_read_port_status,
  1492. .atu_flush = ar8216_atu_flush,
  1493. .atu_flush_port = ar8216_atu_flush_port,
  1494. .vtu_flush = ar8216_vtu_flush,
  1495. .vtu_load_vlan = ar8216_vtu_load_vlan,
  1496. .set_mirror_regs = ar8216_set_mirror_regs,
  1497. .get_arl_entry = ar8216_get_arl_entry,
  1498. .sw_hw_apply = ar8xxx_sw_hw_apply,
  1499. .num_mibs = ARRAY_SIZE(ar8236_mibs),
  1500. .mib_decs = ar8236_mibs,
  1501. .mib_func = AR8216_REG_MIB_FUNC
  1502. };
  1503. static int
  1504. ar8xxx_id_chip(struct ar8xxx_priv *priv)
  1505. {
  1506. u32 val;
  1507. u16 id;
  1508. int i;
  1509. val = ar8xxx_read(priv, AR8216_REG_CTRL);
  1510. if (val == ~0)
  1511. return -ENODEV;
  1512. id = val & (AR8216_CTRL_REVISION | AR8216_CTRL_VERSION);
  1513. for (i = 0; i < AR8X16_PROBE_RETRIES; i++) {
  1514. u16 t;
  1515. val = ar8xxx_read(priv, AR8216_REG_CTRL);
  1516. if (val == ~0)
  1517. return -ENODEV;
  1518. t = val & (AR8216_CTRL_REVISION | AR8216_CTRL_VERSION);
  1519. if (t != id)
  1520. return -ENODEV;
  1521. }
  1522. priv->chip_ver = (id & AR8216_CTRL_VERSION) >> AR8216_CTRL_VERSION_S;
  1523. priv->chip_rev = (id & AR8216_CTRL_REVISION);
  1524. switch (priv->chip_ver) {
  1525. case AR8XXX_VER_AR8216:
  1526. priv->chip = &ar8216_chip;
  1527. break;
  1528. case AR8XXX_VER_AR8236:
  1529. priv->chip = &ar8236_chip;
  1530. break;
  1531. case AR8XXX_VER_AR8316:
  1532. priv->chip = &ar8316_chip;
  1533. break;
  1534. case AR8XXX_VER_AR8327:
  1535. priv->chip = &ar8327_chip;
  1536. break;
  1537. case AR8XXX_VER_AR8337:
  1538. priv->chip = &ar8337_chip;
  1539. break;
  1540. default:
  1541. pr_err("ar8216: Unknown Atheros device [ver=%d, rev=%d]\n",
  1542. priv->chip_ver, priv->chip_rev);
  1543. return -ENODEV;
  1544. }
  1545. return 0;
  1546. }
  1547. static void
  1548. ar8xxx_mib_work_func(struct work_struct *work)
  1549. {
  1550. struct ar8xxx_priv *priv;
  1551. int err;
  1552. priv = container_of(work, struct ar8xxx_priv, mib_work.work);
  1553. mutex_lock(&priv->mib_lock);
  1554. err = ar8xxx_mib_capture(priv);
  1555. if (err)
  1556. goto next_port;
  1557. ar8xxx_mib_fetch_port_stat(priv, priv->mib_next_port, false);
  1558. next_port:
  1559. priv->mib_next_port++;
  1560. if (priv->mib_next_port >= priv->dev.ports)
  1561. priv->mib_next_port = 0;
  1562. mutex_unlock(&priv->mib_lock);
  1563. schedule_delayed_work(&priv->mib_work,
  1564. msecs_to_jiffies(AR8XXX_MIB_WORK_DELAY));
  1565. }
  1566. static int
  1567. ar8xxx_mib_init(struct ar8xxx_priv *priv)
  1568. {
  1569. unsigned int len;
  1570. if (!ar8xxx_has_mib_counters(priv))
  1571. return 0;
  1572. BUG_ON(!priv->chip->mib_decs || !priv->chip->num_mibs);
  1573. len = priv->dev.ports * priv->chip->num_mibs *
  1574. sizeof(*priv->mib_stats);
  1575. priv->mib_stats = kzalloc(len, GFP_KERNEL);
  1576. if (!priv->mib_stats)
  1577. return -ENOMEM;
  1578. return 0;
  1579. }
  1580. static void
  1581. ar8xxx_mib_start(struct ar8xxx_priv *priv)
  1582. {
  1583. if (!ar8xxx_has_mib_counters(priv))
  1584. return;
  1585. schedule_delayed_work(&priv->mib_work,
  1586. msecs_to_jiffies(AR8XXX_MIB_WORK_DELAY));
  1587. }
  1588. static void
  1589. ar8xxx_mib_stop(struct ar8xxx_priv *priv)
  1590. {
  1591. if (!ar8xxx_has_mib_counters(priv))
  1592. return;
  1593. cancel_delayed_work_sync(&priv->mib_work);
  1594. }
  1595. static struct ar8xxx_priv *
  1596. ar8xxx_create(void)
  1597. {
  1598. struct ar8xxx_priv *priv;
  1599. priv = kzalloc(sizeof(struct ar8xxx_priv), GFP_KERNEL);
  1600. if (priv == NULL)
  1601. return NULL;
  1602. mutex_init(&priv->reg_mutex);
  1603. mutex_init(&priv->mib_lock);
  1604. INIT_DELAYED_WORK(&priv->mib_work, ar8xxx_mib_work_func);
  1605. return priv;
  1606. }
  1607. static void
  1608. ar8xxx_free(struct ar8xxx_priv *priv)
  1609. {
  1610. if (priv->chip && priv->chip->cleanup)
  1611. priv->chip->cleanup(priv);
  1612. kfree(priv->chip_data);
  1613. kfree(priv->mib_stats);
  1614. kfree(priv);
  1615. }
  1616. static int
  1617. ar8xxx_probe_switch(struct ar8xxx_priv *priv)
  1618. {
  1619. const struct ar8xxx_chip *chip;
  1620. struct switch_dev *swdev;
  1621. int ret;
  1622. ret = ar8xxx_id_chip(priv);
  1623. if (ret)
  1624. return ret;
  1625. chip = priv->chip;
  1626. swdev = &priv->dev;
  1627. swdev->cpu_port = AR8216_PORT_CPU;
  1628. swdev->name = chip->name;
  1629. swdev->vlans = chip->vlans;
  1630. swdev->ports = chip->ports;
  1631. swdev->ops = chip->swops;
  1632. ret = ar8xxx_mib_init(priv);
  1633. if (ret)
  1634. return ret;
  1635. return 0;
  1636. }
  1637. static int
  1638. ar8xxx_start(struct ar8xxx_priv *priv)
  1639. {
  1640. int ret;
  1641. priv->init = true;
  1642. ret = priv->chip->hw_init(priv);
  1643. if (ret)
  1644. return ret;
  1645. ret = ar8xxx_sw_reset_switch(&priv->dev);
  1646. if (ret)
  1647. return ret;
  1648. priv->init = false;
  1649. ar8xxx_mib_start(priv);
  1650. return 0;
  1651. }
  1652. static int
  1653. ar8xxx_phy_config_init(struct phy_device *phydev)
  1654. {
  1655. struct ar8xxx_priv *priv = phydev->priv;
  1656. struct net_device *dev = phydev->attached_dev;
  1657. int ret;
  1658. if (WARN_ON(!priv))
  1659. return -ENODEV;
  1660. if (priv->chip->config_at_probe)
  1661. return ar8xxx_phy_check_aneg(phydev);
  1662. priv->phy = phydev;
  1663. if (phydev->mdio.addr != 0) {
  1664. if (chip_is_ar8316(priv)) {
  1665. /* switch device has been initialized, reinit */
  1666. priv->dev.ports = (AR8216_NUM_PORTS - 1);
  1667. priv->initialized = false;
  1668. priv->port4_phy = true;
  1669. ar8316_hw_init(priv);
  1670. return 0;
  1671. }
  1672. return 0;
  1673. }
  1674. ret = ar8xxx_start(priv);
  1675. if (ret)
  1676. return ret;
  1677. /* VID fixup only needed on ar8216 */
  1678. if (chip_is_ar8216(priv)) {
  1679. dev->phy_ptr = priv;
  1680. dev->priv_flags |= IFF_NO_IP_ALIGN;
  1681. dev->eth_mangle_rx = ar8216_mangle_rx;
  1682. dev->eth_mangle_tx = ar8216_mangle_tx;
  1683. }
  1684. return 0;
  1685. }
  1686. static bool
  1687. ar8xxx_check_link_states(struct ar8xxx_priv *priv)
  1688. {
  1689. bool link_new, changed = false;
  1690. u32 status;
  1691. int i;
  1692. mutex_lock(&priv->reg_mutex);
  1693. for (i = 0; i < priv->dev.ports; i++) {
  1694. status = priv->chip->read_port_status(priv, i);
  1695. link_new = !!(status & AR8216_PORT_STATUS_LINK_UP);
  1696. if (link_new == priv->link_up[i])
  1697. continue;
  1698. priv->link_up[i] = link_new;
  1699. changed = true;
  1700. /* flush ARL entries for this port if it went down*/
  1701. if (!link_new)
  1702. priv->chip->atu_flush_port(priv, i);
  1703. dev_info(&priv->phy->mdio.dev, "Port %d is %s\n",
  1704. i, link_new ? "up" : "down");
  1705. }
  1706. mutex_unlock(&priv->reg_mutex);
  1707. return changed;
  1708. }
  1709. static int
  1710. ar8xxx_phy_read_status(struct phy_device *phydev)
  1711. {
  1712. struct ar8xxx_priv *priv = phydev->priv;
  1713. struct switch_port_link link;
  1714. /* check for switch port link changes */
  1715. if (phydev->state == PHY_CHANGELINK)
  1716. ar8xxx_check_link_states(priv);
  1717. if (phydev->mdio.addr != 0)
  1718. return genphy_read_status(phydev);
  1719. ar8216_read_port_link(priv, phydev->mdio.addr, &link);
  1720. phydev->link = !!link.link;
  1721. if (!phydev->link)
  1722. return 0;
  1723. switch (link.speed) {
  1724. case SWITCH_PORT_SPEED_10:
  1725. phydev->speed = SPEED_10;
  1726. break;
  1727. case SWITCH_PORT_SPEED_100:
  1728. phydev->speed = SPEED_100;
  1729. break;
  1730. case SWITCH_PORT_SPEED_1000:
  1731. phydev->speed = SPEED_1000;
  1732. break;
  1733. default:
  1734. phydev->speed = 0;
  1735. }
  1736. phydev->duplex = link.duplex ? DUPLEX_FULL : DUPLEX_HALF;
  1737. phydev->state = PHY_RUNNING;
  1738. netif_carrier_on(phydev->attached_dev);
  1739. phydev->adjust_link(phydev->attached_dev);
  1740. return 0;
  1741. }
  1742. static int
  1743. ar8xxx_phy_config_aneg(struct phy_device *phydev)
  1744. {
  1745. if (phydev->mdio.addr == 0)
  1746. return 0;
  1747. return genphy_config_aneg(phydev);
  1748. }
  1749. static const u32 ar8xxx_phy_ids[] = {
  1750. 0x004dd033,
  1751. 0x004dd034, /* AR8327 */
  1752. 0x004dd036, /* AR8337 */
  1753. 0x004dd041,
  1754. 0x004dd042,
  1755. 0x004dd043, /* AR8236 */
  1756. };
  1757. static bool
  1758. ar8xxx_phy_match(u32 phy_id)
  1759. {
  1760. int i;
  1761. for (i = 0; i < ARRAY_SIZE(ar8xxx_phy_ids); i++)
  1762. if (phy_id == ar8xxx_phy_ids[i])
  1763. return true;
  1764. return false;
  1765. }
  1766. static bool
  1767. ar8xxx_is_possible(struct mii_bus *bus)
  1768. {
  1769. unsigned int i, found_phys = 0;
  1770. for (i = 0; i < 5; i++) {
  1771. u32 phy_id;
  1772. phy_id = mdiobus_read(bus, i, MII_PHYSID1) << 16;
  1773. phy_id |= mdiobus_read(bus, i, MII_PHYSID2);
  1774. if (ar8xxx_phy_match(phy_id)) {
  1775. found_phys++;
  1776. } else if (phy_id) {
  1777. pr_debug("ar8xxx: unknown PHY at %s:%02x id:%08x\n",
  1778. dev_name(&bus->dev), i, phy_id);
  1779. }
  1780. }
  1781. return !!found_phys;
  1782. }
  1783. static int
  1784. ar8xxx_phy_probe(struct phy_device *phydev)
  1785. {
  1786. struct ar8xxx_priv *priv;
  1787. struct switch_dev *swdev;
  1788. int ret;
  1789. /* skip PHYs at unused adresses */
  1790. if (phydev->mdio.addr != 0 && phydev->mdio.addr != 4)
  1791. return -ENODEV;
  1792. if (!ar8xxx_is_possible(phydev->mdio.bus))
  1793. return -ENODEV;
  1794. mutex_lock(&ar8xxx_dev_list_lock);
  1795. list_for_each_entry(priv, &ar8xxx_dev_list, list)
  1796. if (priv->mii_bus == phydev->mdio.bus)
  1797. goto found;
  1798. priv = ar8xxx_create();
  1799. if (priv == NULL) {
  1800. ret = -ENOMEM;
  1801. goto unlock;
  1802. }
  1803. priv->mii_bus = phydev->mdio.bus;
  1804. ret = ar8xxx_probe_switch(priv);
  1805. if (ret)
  1806. goto free_priv;
  1807. swdev = &priv->dev;
  1808. swdev->alias = dev_name(&priv->mii_bus->dev);
  1809. ret = register_switch(swdev, NULL);
  1810. if (ret)
  1811. goto free_priv;
  1812. pr_info("%s: %s rev. %u switch registered on %s\n",
  1813. swdev->devname, swdev->name, priv->chip_rev,
  1814. dev_name(&priv->mii_bus->dev));
  1815. list_add(&priv->list, &ar8xxx_dev_list);
  1816. found:
  1817. priv->use_count++;
  1818. if (phydev->mdio.addr == 0) {
  1819. if (ar8xxx_has_gige(priv)) {
  1820. phydev->supported = SUPPORTED_1000baseT_Full;
  1821. phydev->advertising = ADVERTISED_1000baseT_Full;
  1822. } else {
  1823. phydev->supported = SUPPORTED_100baseT_Full;
  1824. phydev->advertising = ADVERTISED_100baseT_Full;
  1825. }
  1826. if (priv->chip->config_at_probe) {
  1827. priv->phy = phydev;
  1828. ret = ar8xxx_start(priv);
  1829. if (ret)
  1830. goto err_unregister_switch;
  1831. }
  1832. } else {
  1833. if (ar8xxx_has_gige(priv)) {
  1834. phydev->supported |= SUPPORTED_1000baseT_Full;
  1835. phydev->advertising |= ADVERTISED_1000baseT_Full;
  1836. }
  1837. }
  1838. phydev->priv = priv;
  1839. mutex_unlock(&ar8xxx_dev_list_lock);
  1840. return 0;
  1841. err_unregister_switch:
  1842. if (--priv->use_count)
  1843. goto unlock;
  1844. unregister_switch(&priv->dev);
  1845. free_priv:
  1846. ar8xxx_free(priv);
  1847. unlock:
  1848. mutex_unlock(&ar8xxx_dev_list_lock);
  1849. return ret;
  1850. }
  1851. static void
  1852. ar8xxx_phy_detach(struct phy_device *phydev)
  1853. {
  1854. struct net_device *dev = phydev->attached_dev;
  1855. if (!dev)
  1856. return;
  1857. dev->phy_ptr = NULL;
  1858. dev->priv_flags &= ~IFF_NO_IP_ALIGN;
  1859. dev->eth_mangle_rx = NULL;
  1860. dev->eth_mangle_tx = NULL;
  1861. }
  1862. static void
  1863. ar8xxx_phy_remove(struct phy_device *phydev)
  1864. {
  1865. struct ar8xxx_priv *priv = phydev->priv;
  1866. if (WARN_ON(!priv))
  1867. return;
  1868. phydev->priv = NULL;
  1869. mutex_lock(&ar8xxx_dev_list_lock);
  1870. if (--priv->use_count > 0) {
  1871. mutex_unlock(&ar8xxx_dev_list_lock);
  1872. return;
  1873. }
  1874. list_del(&priv->list);
  1875. mutex_unlock(&ar8xxx_dev_list_lock);
  1876. unregister_switch(&priv->dev);
  1877. ar8xxx_mib_stop(priv);
  1878. ar8xxx_free(priv);
  1879. }
  1880. static int
  1881. ar8xxx_phy_soft_reset(struct phy_device *phydev)
  1882. {
  1883. /* we don't need an extra reset */
  1884. return 0;
  1885. }
  1886. static struct phy_driver ar8xxx_phy_driver[] = {
  1887. {
  1888. .phy_id = 0x004d0000,
  1889. .name = "Atheros AR8216/AR8236/AR8316",
  1890. .phy_id_mask = 0xffff0000,
  1891. .features = PHY_BASIC_FEATURES,
  1892. .probe = ar8xxx_phy_probe,
  1893. .remove = ar8xxx_phy_remove,
  1894. .detach = ar8xxx_phy_detach,
  1895. .config_init = ar8xxx_phy_config_init,
  1896. .config_aneg = ar8xxx_phy_config_aneg,
  1897. .read_status = ar8xxx_phy_read_status,
  1898. .soft_reset = ar8xxx_phy_soft_reset,
  1899. }
  1900. };
  1901. module_phy_driver(ar8xxx_phy_driver);
  1902. MODULE_LICENSE("GPL");