keystone_net.c 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170
  1. // SPDX-License-Identifier: GPL-2.0+
  2. /*
  3. * Ethernet driver for TI K2HK EVM.
  4. *
  5. * (C) Copyright 2012-2014
  6. * Texas Instruments Incorporated, <www.ti.com>
  7. */
  8. #include <common.h>
  9. #include <command.h>
  10. #include <console.h>
  11. #include <dm.h>
  12. #include <dm/lists.h>
  13. #include <net.h>
  14. #include <phy.h>
  15. #include <errno.h>
  16. #include <miiphy.h>
  17. #include <malloc.h>
  18. #include <asm/ti-common/keystone_nav.h>
  19. #include <asm/ti-common/keystone_net.h>
  20. #include <asm/ti-common/keystone_serdes.h>
  21. #include <asm/arch/psc_defs.h>
  22. DECLARE_GLOBAL_DATA_PTR;
  23. #ifndef CONFIG_DM_ETH
  24. unsigned int emac_open;
  25. static struct mii_dev *mdio_bus;
  26. static unsigned int sys_has_mdio = 1;
  27. #endif
  28. #ifdef KEYSTONE2_EMAC_GIG_ENABLE
  29. #define emac_gigabit_enable(x) keystone2_eth_gigabit_enable(x)
  30. #else
  31. #define emac_gigabit_enable(x) /* no gigabit to enable */
  32. #endif
  33. #define RX_BUFF_NUMS 24
  34. #define RX_BUFF_LEN 1520
  35. #define MAX_SIZE_STREAM_BUFFER RX_BUFF_LEN
  36. #define SGMII_ANEG_TIMEOUT 4000
  37. static u8 rx_buffs[RX_BUFF_NUMS * RX_BUFF_LEN] __aligned(16);
  38. #ifndef CONFIG_DM_ETH
  39. struct rx_buff_desc net_rx_buffs = {
  40. .buff_ptr = rx_buffs,
  41. .num_buffs = RX_BUFF_NUMS,
  42. .buff_len = RX_BUFF_LEN,
  43. .rx_flow = 22,
  44. };
  45. #endif
  46. #ifdef CONFIG_DM_ETH
  47. enum link_type {
  48. LINK_TYPE_SGMII_MAC_TO_MAC_AUTO = 0,
  49. LINK_TYPE_SGMII_MAC_TO_PHY_MODE = 1,
  50. LINK_TYPE_SGMII_MAC_TO_MAC_FORCED_MODE = 2,
  51. LINK_TYPE_SGMII_MAC_TO_FIBRE_MODE = 3,
  52. LINK_TYPE_SGMII_MAC_TO_PHY_NO_MDIO_MODE = 4,
  53. LINK_TYPE_RGMII_LINK_MAC_PHY = 5,
  54. LINK_TYPE_RGMII_LINK_MAC_MAC_FORCED = 6,
  55. LINK_TYPE_RGMII_LINK_MAC_PHY_NO_MDIO = 7,
  56. LINK_TYPE_10G_MAC_TO_PHY_MODE = 10,
  57. LINK_TYPE_10G_MAC_TO_MAC_FORCED_MODE = 11,
  58. };
  59. #define mac_hi(mac) (((mac)[0] << 0) | ((mac)[1] << 8) | \
  60. ((mac)[2] << 16) | ((mac)[3] << 24))
  61. #define mac_lo(mac) (((mac)[4] << 0) | ((mac)[5] << 8))
  62. #ifdef CONFIG_KSNET_NETCP_V1_0
  63. #define EMAC_EMACSW_BASE_OFS 0x90800
  64. #define EMAC_EMACSW_PORT_BASE_OFS (EMAC_EMACSW_BASE_OFS + 0x60)
  65. /* CPSW Switch slave registers */
  66. #define CPGMACSL_REG_SA_LO 0x10
  67. #define CPGMACSL_REG_SA_HI 0x14
  68. #define DEVICE_EMACSW_BASE(base, x) ((base) + EMAC_EMACSW_PORT_BASE_OFS + \
  69. (x) * 0x30)
  70. #elif defined CONFIG_KSNET_NETCP_V1_5
  71. #define EMAC_EMACSW_PORT_BASE_OFS 0x222000
  72. /* CPSW Switch slave registers */
  73. #define CPGMACSL_REG_SA_LO 0x308
  74. #define CPGMACSL_REG_SA_HI 0x30c
  75. #define DEVICE_EMACSW_BASE(base, x) ((base) + EMAC_EMACSW_PORT_BASE_OFS + \
  76. (x) * 0x1000)
  77. #endif
  78. struct ks2_eth_priv {
  79. struct udevice *dev;
  80. struct phy_device *phydev;
  81. struct mii_dev *mdio_bus;
  82. int phy_addr;
  83. phy_interface_t phy_if;
  84. int sgmii_link_type;
  85. void *mdio_base;
  86. struct rx_buff_desc net_rx_buffs;
  87. struct pktdma_cfg *netcp_pktdma;
  88. void *hd;
  89. int slave_port;
  90. enum link_type link_type;
  91. bool emac_open;
  92. bool has_mdio;
  93. };
  94. #endif
  95. /* MDIO */
  96. static int keystone2_mdio_reset(struct mii_dev *bus)
  97. {
  98. u_int32_t clkdiv;
  99. struct mdio_regs *adap_mdio = bus->priv;
  100. clkdiv = (EMAC_MDIO_BUS_FREQ / EMAC_MDIO_CLOCK_FREQ) - 1;
  101. writel((clkdiv & 0xffff) | MDIO_CONTROL_ENABLE |
  102. MDIO_CONTROL_FAULT | MDIO_CONTROL_FAULT_ENABLE,
  103. &adap_mdio->control);
  104. while (readl(&adap_mdio->control) & MDIO_CONTROL_IDLE)
  105. ;
  106. return 0;
  107. }
  108. /**
  109. * keystone2_mdio_read - read a PHY register via MDIO interface.
  110. * Blocks until operation is complete.
  111. */
  112. static int keystone2_mdio_read(struct mii_dev *bus,
  113. int addr, int devad, int reg)
  114. {
  115. int tmp;
  116. struct mdio_regs *adap_mdio = bus->priv;
  117. while (readl(&adap_mdio->useraccess0) & MDIO_USERACCESS0_GO)
  118. ;
  119. writel(MDIO_USERACCESS0_GO | MDIO_USERACCESS0_WRITE_READ |
  120. ((reg & 0x1f) << 21) | ((addr & 0x1f) << 16),
  121. &adap_mdio->useraccess0);
  122. /* Wait for command to complete */
  123. while ((tmp = readl(&adap_mdio->useraccess0)) & MDIO_USERACCESS0_GO)
  124. ;
  125. if (tmp & MDIO_USERACCESS0_ACK)
  126. return tmp & 0xffff;
  127. return -1;
  128. }
  129. /**
  130. * keystone2_mdio_write - write to a PHY register via MDIO interface.
  131. * Blocks until operation is complete.
  132. */
  133. static int keystone2_mdio_write(struct mii_dev *bus,
  134. int addr, int devad, int reg, u16 val)
  135. {
  136. struct mdio_regs *adap_mdio = bus->priv;
  137. while (readl(&adap_mdio->useraccess0) & MDIO_USERACCESS0_GO)
  138. ;
  139. writel(MDIO_USERACCESS0_GO | MDIO_USERACCESS0_WRITE_WRITE |
  140. ((reg & 0x1f) << 21) | ((addr & 0x1f) << 16) |
  141. (val & 0xffff), &adap_mdio->useraccess0);
  142. /* Wait for command to complete */
  143. while (readl(&adap_mdio->useraccess0) & MDIO_USERACCESS0_GO)
  144. ;
  145. return 0;
  146. }
  147. #ifndef CONFIG_DM_ETH
  148. static void __attribute__((unused))
  149. keystone2_eth_gigabit_enable(struct eth_device *dev)
  150. {
  151. u_int16_t data;
  152. struct eth_priv_t *eth_priv = (struct eth_priv_t *)dev->priv;
  153. if (sys_has_mdio) {
  154. data = keystone2_mdio_read(mdio_bus, eth_priv->phy_addr,
  155. MDIO_DEVAD_NONE, 0);
  156. /* speed selection MSB */
  157. if (!(data & (1 << 6)))
  158. return;
  159. }
  160. /*
  161. * Check if link detected is giga-bit
  162. * If Gigabit mode detected, enable gigbit in MAC
  163. */
  164. writel(readl(DEVICE_EMACSL_BASE(eth_priv->slave_port - 1) +
  165. CPGMACSL_REG_CTL) |
  166. EMAC_MACCONTROL_GIGFORCE | EMAC_MACCONTROL_GIGABIT_ENABLE,
  167. DEVICE_EMACSL_BASE(eth_priv->slave_port - 1) + CPGMACSL_REG_CTL);
  168. }
  169. #else
  170. static void __attribute__((unused))
  171. keystone2_eth_gigabit_enable(struct udevice *dev)
  172. {
  173. struct ks2_eth_priv *priv = dev_get_priv(dev);
  174. u_int16_t data;
  175. if (priv->has_mdio) {
  176. data = keystone2_mdio_read(priv->mdio_bus, priv->phy_addr,
  177. MDIO_DEVAD_NONE, 0);
  178. /* speed selection MSB */
  179. if (!(data & (1 << 6)))
  180. return;
  181. }
  182. /*
  183. * Check if link detected is giga-bit
  184. * If Gigabit mode detected, enable gigbit in MAC
  185. */
  186. writel(readl(DEVICE_EMACSL_BASE(priv->slave_port - 1) +
  187. CPGMACSL_REG_CTL) |
  188. EMAC_MACCONTROL_GIGFORCE | EMAC_MACCONTROL_GIGABIT_ENABLE,
  189. DEVICE_EMACSL_BASE(priv->slave_port - 1) + CPGMACSL_REG_CTL);
  190. }
  191. #endif
  192. #ifdef CONFIG_SOC_K2G
  193. int keystone_rgmii_config(struct phy_device *phy_dev)
  194. {
  195. unsigned int i, status;
  196. i = 0;
  197. do {
  198. if (i > SGMII_ANEG_TIMEOUT) {
  199. puts(" TIMEOUT !\n");
  200. phy_dev->link = 0;
  201. return 0;
  202. }
  203. if (ctrlc()) {
  204. puts("user interrupt!\n");
  205. phy_dev->link = 0;
  206. return -EINTR;
  207. }
  208. if ((i++ % 500) == 0)
  209. printf(".");
  210. udelay(1000); /* 1 ms */
  211. status = readl(RGMII_STATUS_REG);
  212. } while (!(status & RGMII_REG_STATUS_LINK));
  213. puts(" done\n");
  214. return 0;
  215. }
  216. #else
  217. int keystone_sgmii_config(struct phy_device *phy_dev, int port, int interface)
  218. {
  219. unsigned int i, status, mask;
  220. unsigned int mr_adv_ability, control;
  221. switch (interface) {
  222. case SGMII_LINK_MAC_MAC_AUTONEG:
  223. mr_adv_ability = (SGMII_REG_MR_ADV_ENABLE |
  224. SGMII_REG_MR_ADV_LINK |
  225. SGMII_REG_MR_ADV_FULL_DUPLEX |
  226. SGMII_REG_MR_ADV_GIG_MODE);
  227. control = (SGMII_REG_CONTROL_MASTER |
  228. SGMII_REG_CONTROL_AUTONEG);
  229. break;
  230. case SGMII_LINK_MAC_PHY:
  231. case SGMII_LINK_MAC_PHY_FORCED:
  232. mr_adv_ability = SGMII_REG_MR_ADV_ENABLE;
  233. control = SGMII_REG_CONTROL_AUTONEG;
  234. break;
  235. case SGMII_LINK_MAC_MAC_FORCED:
  236. mr_adv_ability = (SGMII_REG_MR_ADV_ENABLE |
  237. SGMII_REG_MR_ADV_LINK |
  238. SGMII_REG_MR_ADV_FULL_DUPLEX |
  239. SGMII_REG_MR_ADV_GIG_MODE);
  240. control = SGMII_REG_CONTROL_MASTER;
  241. break;
  242. case SGMII_LINK_MAC_FIBER:
  243. mr_adv_ability = 0x20;
  244. control = SGMII_REG_CONTROL_AUTONEG;
  245. break;
  246. default:
  247. mr_adv_ability = SGMII_REG_MR_ADV_ENABLE;
  248. control = SGMII_REG_CONTROL_AUTONEG;
  249. }
  250. __raw_writel(0, SGMII_CTL_REG(port));
  251. /*
  252. * Wait for the SerDes pll to lock,
  253. * but don't trap if lock is never read
  254. */
  255. for (i = 0; i < 1000; i++) {
  256. udelay(2000);
  257. status = __raw_readl(SGMII_STATUS_REG(port));
  258. if ((status & SGMII_REG_STATUS_LOCK) != 0)
  259. break;
  260. }
  261. __raw_writel(mr_adv_ability, SGMII_MRADV_REG(port));
  262. __raw_writel(control, SGMII_CTL_REG(port));
  263. mask = SGMII_REG_STATUS_LINK;
  264. if (control & SGMII_REG_CONTROL_AUTONEG)
  265. mask |= SGMII_REG_STATUS_AUTONEG;
  266. status = __raw_readl(SGMII_STATUS_REG(port));
  267. if ((status & mask) == mask)
  268. return 0;
  269. printf("\n%s Waiting for SGMII auto negotiation to complete",
  270. phy_dev->dev->name);
  271. while ((status & mask) != mask) {
  272. /*
  273. * Timeout reached ?
  274. */
  275. if (i > SGMII_ANEG_TIMEOUT) {
  276. puts(" TIMEOUT !\n");
  277. phy_dev->link = 0;
  278. return 0;
  279. }
  280. if (ctrlc()) {
  281. puts("user interrupt!\n");
  282. phy_dev->link = 0;
  283. return -EINTR;
  284. }
  285. if ((i++ % 500) == 0)
  286. printf(".");
  287. udelay(1000); /* 1 ms */
  288. status = __raw_readl(SGMII_STATUS_REG(port));
  289. }
  290. puts(" done\n");
  291. return 0;
  292. }
  293. #endif
  294. int mac_sl_reset(u32 port)
  295. {
  296. u32 i, v;
  297. if (port >= DEVICE_N_GMACSL_PORTS)
  298. return GMACSL_RET_INVALID_PORT;
  299. /* Set the soft reset bit */
  300. writel(CPGMAC_REG_RESET_VAL_RESET,
  301. DEVICE_EMACSL_BASE(port) + CPGMACSL_REG_RESET);
  302. /* Wait for the bit to clear */
  303. for (i = 0; i < DEVICE_EMACSL_RESET_POLL_COUNT; i++) {
  304. v = readl(DEVICE_EMACSL_BASE(port) + CPGMACSL_REG_RESET);
  305. if ((v & CPGMAC_REG_RESET_VAL_RESET_MASK) !=
  306. CPGMAC_REG_RESET_VAL_RESET)
  307. return GMACSL_RET_OK;
  308. }
  309. /* Timeout on the reset */
  310. return GMACSL_RET_WARN_RESET_INCOMPLETE;
  311. }
  312. int mac_sl_config(u_int16_t port, struct mac_sl_cfg *cfg)
  313. {
  314. u32 v, i;
  315. int ret = GMACSL_RET_OK;
  316. if (port >= DEVICE_N_GMACSL_PORTS)
  317. return GMACSL_RET_INVALID_PORT;
  318. if (cfg->max_rx_len > CPGMAC_REG_MAXLEN_LEN) {
  319. cfg->max_rx_len = CPGMAC_REG_MAXLEN_LEN;
  320. ret = GMACSL_RET_WARN_MAXLEN_TOO_BIG;
  321. }
  322. /* Must wait if the device is undergoing reset */
  323. for (i = 0; i < DEVICE_EMACSL_RESET_POLL_COUNT; i++) {
  324. v = readl(DEVICE_EMACSL_BASE(port) + CPGMACSL_REG_RESET);
  325. if ((v & CPGMAC_REG_RESET_VAL_RESET_MASK) !=
  326. CPGMAC_REG_RESET_VAL_RESET)
  327. break;
  328. }
  329. if (i == DEVICE_EMACSL_RESET_POLL_COUNT)
  330. return GMACSL_RET_CONFIG_FAIL_RESET_ACTIVE;
  331. writel(cfg->max_rx_len, DEVICE_EMACSL_BASE(port) + CPGMACSL_REG_MAXLEN);
  332. writel(cfg->ctl, DEVICE_EMACSL_BASE(port) + CPGMACSL_REG_CTL);
  333. #ifndef CONFIG_SOC_K2HK
  334. /* Map RX packet flow priority to 0 */
  335. writel(0, DEVICE_EMACSL_BASE(port) + CPGMACSL_REG_RX_PRI_MAP);
  336. #endif
  337. return ret;
  338. }
  339. int ethss_config(u32 ctl, u32 max_pkt_size)
  340. {
  341. u32 i;
  342. /* Max length register */
  343. writel(max_pkt_size, DEVICE_CPSW_BASE + CPSW_REG_MAXLEN);
  344. /* Control register */
  345. writel(ctl, DEVICE_CPSW_BASE + CPSW_REG_CTL);
  346. /* All statistics enabled by default */
  347. writel(CPSW_REG_VAL_STAT_ENABLE_ALL,
  348. DEVICE_CPSW_BASE + CPSW_REG_STAT_PORT_EN);
  349. /* Reset and enable the ALE */
  350. writel(CPSW_REG_VAL_ALE_CTL_RESET_AND_ENABLE |
  351. CPSW_REG_VAL_ALE_CTL_BYPASS,
  352. DEVICE_CPSW_BASE + CPSW_REG_ALE_CONTROL);
  353. /* All ports put into forward mode */
  354. for (i = 0; i < DEVICE_CPSW_NUM_PORTS; i++)
  355. writel(CPSW_REG_VAL_PORTCTL_FORWARD_MODE,
  356. DEVICE_CPSW_BASE + CPSW_REG_ALE_PORTCTL(i));
  357. return 0;
  358. }
  359. int ethss_start(void)
  360. {
  361. int i;
  362. struct mac_sl_cfg cfg;
  363. cfg.max_rx_len = MAX_SIZE_STREAM_BUFFER;
  364. cfg.ctl = GMACSL_ENABLE | GMACSL_RX_ENABLE_EXT_CTL;
  365. for (i = 0; i < DEVICE_N_GMACSL_PORTS; i++) {
  366. mac_sl_reset(i);
  367. mac_sl_config(i, &cfg);
  368. }
  369. return 0;
  370. }
  371. int ethss_stop(void)
  372. {
  373. int i;
  374. for (i = 0; i < DEVICE_N_GMACSL_PORTS; i++)
  375. mac_sl_reset(i);
  376. return 0;
  377. }
  378. struct ks2_serdes ks2_serdes_sgmii_156p25mhz = {
  379. .clk = SERDES_CLOCK_156P25M,
  380. .rate = SERDES_RATE_5G,
  381. .rate_mode = SERDES_QUARTER_RATE,
  382. .intf = SERDES_PHY_SGMII,
  383. .loopback = 0,
  384. };
  385. #ifndef CONFIG_SOC_K2G
  386. static void keystone2_net_serdes_setup(void)
  387. {
  388. ks2_serdes_init(CONFIG_KSNET_SERDES_SGMII_BASE,
  389. &ks2_serdes_sgmii_156p25mhz,
  390. CONFIG_KSNET_SERDES_LANES_PER_SGMII);
  391. #if defined(CONFIG_SOC_K2E) || defined(CONFIG_SOC_K2L)
  392. ks2_serdes_init(CONFIG_KSNET_SERDES_SGMII2_BASE,
  393. &ks2_serdes_sgmii_156p25mhz,
  394. CONFIG_KSNET_SERDES_LANES_PER_SGMII);
  395. #endif
  396. /* wait till setup */
  397. udelay(5000);
  398. }
  399. #endif
  400. #ifndef CONFIG_DM_ETH
  401. int keystone2_eth_read_mac_addr(struct eth_device *dev)
  402. {
  403. struct eth_priv_t *eth_priv;
  404. u32 maca = 0;
  405. u32 macb = 0;
  406. eth_priv = (struct eth_priv_t *)dev->priv;
  407. /* Read the e-fuse mac address */
  408. if (eth_priv->slave_port == 1) {
  409. maca = __raw_readl(MAC_ID_BASE_ADDR);
  410. macb = __raw_readl(MAC_ID_BASE_ADDR + 4);
  411. }
  412. dev->enetaddr[0] = (macb >> 8) & 0xff;
  413. dev->enetaddr[1] = (macb >> 0) & 0xff;
  414. dev->enetaddr[2] = (maca >> 24) & 0xff;
  415. dev->enetaddr[3] = (maca >> 16) & 0xff;
  416. dev->enetaddr[4] = (maca >> 8) & 0xff;
  417. dev->enetaddr[5] = (maca >> 0) & 0xff;
  418. return 0;
  419. }
  420. int32_t cpmac_drv_send(u32 *buffer, int num_bytes, int slave_port_num)
  421. {
  422. if (num_bytes < EMAC_MIN_ETHERNET_PKT_SIZE)
  423. num_bytes = EMAC_MIN_ETHERNET_PKT_SIZE;
  424. return ksnav_send(&netcp_pktdma, buffer,
  425. num_bytes, (slave_port_num) << 16);
  426. }
  427. /* Eth device open */
  428. static int keystone2_eth_open(struct eth_device *dev, bd_t *bis)
  429. {
  430. struct eth_priv_t *eth_priv = (struct eth_priv_t *)dev->priv;
  431. struct phy_device *phy_dev = eth_priv->phy_dev;
  432. debug("+ emac_open\n");
  433. net_rx_buffs.rx_flow = eth_priv->rx_flow;
  434. sys_has_mdio =
  435. (eth_priv->sgmii_link_type == SGMII_LINK_MAC_PHY) ? 1 : 0;
  436. if (sys_has_mdio)
  437. keystone2_mdio_reset(mdio_bus);
  438. #ifdef CONFIG_SOC_K2G
  439. keystone_rgmii_config(phy_dev);
  440. #else
  441. keystone_sgmii_config(phy_dev, eth_priv->slave_port - 1,
  442. eth_priv->sgmii_link_type);
  443. #endif
  444. udelay(10000);
  445. /* On chip switch configuration */
  446. ethss_config(target_get_switch_ctl(), SWITCH_MAX_PKT_SIZE);
  447. /* TODO: add error handling code */
  448. if (qm_init()) {
  449. printf("ERROR: qm_init()\n");
  450. return -1;
  451. }
  452. if (ksnav_init(&netcp_pktdma, &net_rx_buffs)) {
  453. qm_close();
  454. printf("ERROR: netcp_init()\n");
  455. return -1;
  456. }
  457. /*
  458. * Streaming switch configuration. If not present this
  459. * statement is defined to void in target.h.
  460. * If present this is usually defined to a series of register writes
  461. */
  462. hw_config_streaming_switch();
  463. if (sys_has_mdio) {
  464. keystone2_mdio_reset(mdio_bus);
  465. phy_startup(phy_dev);
  466. if (phy_dev->link == 0) {
  467. ksnav_close(&netcp_pktdma);
  468. qm_close();
  469. return -1;
  470. }
  471. }
  472. emac_gigabit_enable(dev);
  473. ethss_start();
  474. debug("- emac_open\n");
  475. emac_open = 1;
  476. return 0;
  477. }
  478. /* Eth device close */
  479. void keystone2_eth_close(struct eth_device *dev)
  480. {
  481. struct eth_priv_t *eth_priv = (struct eth_priv_t *)dev->priv;
  482. struct phy_device *phy_dev = eth_priv->phy_dev;
  483. debug("+ emac_close\n");
  484. if (!emac_open)
  485. return;
  486. ethss_stop();
  487. ksnav_close(&netcp_pktdma);
  488. qm_close();
  489. phy_shutdown(phy_dev);
  490. emac_open = 0;
  491. debug("- emac_close\n");
  492. }
  493. /*
  494. * This function sends a single packet on the network and returns
  495. * positive number (number of bytes transmitted) or negative for error
  496. */
  497. static int keystone2_eth_send_packet(struct eth_device *dev,
  498. void *packet, int length)
  499. {
  500. int ret_status = -1;
  501. struct eth_priv_t *eth_priv = (struct eth_priv_t *)dev->priv;
  502. struct phy_device *phy_dev = eth_priv->phy_dev;
  503. genphy_update_link(phy_dev);
  504. if (phy_dev->link == 0)
  505. return -1;
  506. if (cpmac_drv_send((u32 *)packet, length, eth_priv->slave_port) != 0)
  507. return ret_status;
  508. return length;
  509. }
  510. /*
  511. * This function handles receipt of a packet from the network
  512. */
  513. static int keystone2_eth_rcv_packet(struct eth_device *dev)
  514. {
  515. void *hd;
  516. int pkt_size;
  517. u32 *pkt;
  518. hd = ksnav_recv(&netcp_pktdma, &pkt, &pkt_size);
  519. if (hd == NULL)
  520. return 0;
  521. net_process_received_packet((uchar *)pkt, pkt_size);
  522. ksnav_release_rxhd(&netcp_pktdma, hd);
  523. return pkt_size;
  524. }
  525. #ifdef CONFIG_MCAST_TFTP
  526. static int keystone2_eth_bcast_addr(struct eth_device *dev, u32 ip, u8 set)
  527. {
  528. return 0;
  529. }
  530. #endif
  531. /*
  532. * This function initializes the EMAC hardware.
  533. */
  534. int keystone2_emac_initialize(struct eth_priv_t *eth_priv)
  535. {
  536. int res;
  537. struct eth_device *dev;
  538. struct phy_device *phy_dev;
  539. struct mdio_regs *adap_mdio = (struct mdio_regs *)EMAC_MDIO_BASE_ADDR;
  540. dev = malloc(sizeof(struct eth_device));
  541. if (dev == NULL)
  542. return -1;
  543. memset(dev, 0, sizeof(struct eth_device));
  544. strcpy(dev->name, eth_priv->int_name);
  545. dev->priv = eth_priv;
  546. keystone2_eth_read_mac_addr(dev);
  547. dev->iobase = 0;
  548. dev->init = keystone2_eth_open;
  549. dev->halt = keystone2_eth_close;
  550. dev->send = keystone2_eth_send_packet;
  551. dev->recv = keystone2_eth_rcv_packet;
  552. #ifdef CONFIG_MCAST_TFTP
  553. dev->mcast = keystone2_eth_bcast_addr;
  554. #endif
  555. eth_register(dev);
  556. /* Register MDIO bus if it's not registered yet */
  557. if (!mdio_bus) {
  558. mdio_bus = mdio_alloc();
  559. mdio_bus->read = keystone2_mdio_read;
  560. mdio_bus->write = keystone2_mdio_write;
  561. mdio_bus->reset = keystone2_mdio_reset;
  562. mdio_bus->priv = (void *)EMAC_MDIO_BASE_ADDR;
  563. strcpy(mdio_bus->name, "ethernet-mdio");
  564. res = mdio_register(mdio_bus);
  565. if (res)
  566. return res;
  567. }
  568. #ifndef CONFIG_SOC_K2G
  569. keystone2_net_serdes_setup();
  570. #endif
  571. /* Create phy device and bind it with driver */
  572. #ifdef CONFIG_KSNET_MDIO_PHY_CONFIG_ENABLE
  573. phy_dev = phy_connect(mdio_bus, eth_priv->phy_addr,
  574. dev, eth_priv->phy_if);
  575. phy_config(phy_dev);
  576. #else
  577. phy_dev = phy_find_by_mask(mdio_bus, 1 << eth_priv->phy_addr,
  578. eth_priv->phy_if);
  579. phy_dev->dev = dev;
  580. #endif
  581. eth_priv->phy_dev = phy_dev;
  582. return 0;
  583. }
  584. #else
  585. static int ks2_eth_start(struct udevice *dev)
  586. {
  587. struct ks2_eth_priv *priv = dev_get_priv(dev);
  588. #ifdef CONFIG_SOC_K2G
  589. keystone_rgmii_config(priv->phydev);
  590. #else
  591. keystone_sgmii_config(priv->phydev, priv->slave_port - 1,
  592. priv->sgmii_link_type);
  593. #endif
  594. udelay(10000);
  595. /* On chip switch configuration */
  596. ethss_config(target_get_switch_ctl(), SWITCH_MAX_PKT_SIZE);
  597. qm_init();
  598. if (ksnav_init(priv->netcp_pktdma, &priv->net_rx_buffs)) {
  599. pr_err("ksnav_init failed\n");
  600. goto err_knav_init;
  601. }
  602. /*
  603. * Streaming switch configuration. If not present this
  604. * statement is defined to void in target.h.
  605. * If present this is usually defined to a series of register writes
  606. */
  607. hw_config_streaming_switch();
  608. if (priv->has_mdio) {
  609. keystone2_mdio_reset(priv->mdio_bus);
  610. phy_startup(priv->phydev);
  611. if (priv->phydev->link == 0) {
  612. pr_err("phy startup failed\n");
  613. goto err_phy_start;
  614. }
  615. }
  616. emac_gigabit_enable(dev);
  617. ethss_start();
  618. priv->emac_open = true;
  619. return 0;
  620. err_phy_start:
  621. ksnav_close(priv->netcp_pktdma);
  622. err_knav_init:
  623. qm_close();
  624. return -EFAULT;
  625. }
  626. static int ks2_eth_send(struct udevice *dev, void *packet, int length)
  627. {
  628. struct ks2_eth_priv *priv = dev_get_priv(dev);
  629. genphy_update_link(priv->phydev);
  630. if (priv->phydev->link == 0)
  631. return -1;
  632. if (length < EMAC_MIN_ETHERNET_PKT_SIZE)
  633. length = EMAC_MIN_ETHERNET_PKT_SIZE;
  634. return ksnav_send(priv->netcp_pktdma, (u32 *)packet,
  635. length, (priv->slave_port) << 16);
  636. }
  637. static int ks2_eth_recv(struct udevice *dev, int flags, uchar **packetp)
  638. {
  639. struct ks2_eth_priv *priv = dev_get_priv(dev);
  640. int pkt_size;
  641. u32 *pkt = NULL;
  642. priv->hd = ksnav_recv(priv->netcp_pktdma, &pkt, &pkt_size);
  643. if (priv->hd == NULL)
  644. return -EAGAIN;
  645. *packetp = (uchar *)pkt;
  646. return pkt_size;
  647. }
  648. static int ks2_eth_free_pkt(struct udevice *dev, uchar *packet,
  649. int length)
  650. {
  651. struct ks2_eth_priv *priv = dev_get_priv(dev);
  652. ksnav_release_rxhd(priv->netcp_pktdma, priv->hd);
  653. return 0;
  654. }
  655. static void ks2_eth_stop(struct udevice *dev)
  656. {
  657. struct ks2_eth_priv *priv = dev_get_priv(dev);
  658. if (!priv->emac_open)
  659. return;
  660. ethss_stop();
  661. ksnav_close(priv->netcp_pktdma);
  662. qm_close();
  663. phy_shutdown(priv->phydev);
  664. priv->emac_open = false;
  665. }
  666. int ks2_eth_read_rom_hwaddr(struct udevice *dev)
  667. {
  668. struct ks2_eth_priv *priv = dev_get_priv(dev);
  669. struct eth_pdata *pdata = dev_get_platdata(dev);
  670. u32 maca = 0;
  671. u32 macb = 0;
  672. /* Read the e-fuse mac address */
  673. if (priv->slave_port == 1) {
  674. maca = __raw_readl(MAC_ID_BASE_ADDR);
  675. macb = __raw_readl(MAC_ID_BASE_ADDR + 4);
  676. }
  677. pdata->enetaddr[0] = (macb >> 8) & 0xff;
  678. pdata->enetaddr[1] = (macb >> 0) & 0xff;
  679. pdata->enetaddr[2] = (maca >> 24) & 0xff;
  680. pdata->enetaddr[3] = (maca >> 16) & 0xff;
  681. pdata->enetaddr[4] = (maca >> 8) & 0xff;
  682. pdata->enetaddr[5] = (maca >> 0) & 0xff;
  683. return 0;
  684. }
  685. int ks2_eth_write_hwaddr(struct udevice *dev)
  686. {
  687. struct ks2_eth_priv *priv = dev_get_priv(dev);
  688. struct eth_pdata *pdata = dev_get_platdata(dev);
  689. writel(mac_hi(pdata->enetaddr),
  690. DEVICE_EMACSW_BASE(pdata->iobase, priv->slave_port - 1) +
  691. CPGMACSL_REG_SA_HI);
  692. writel(mac_lo(pdata->enetaddr),
  693. DEVICE_EMACSW_BASE(pdata->iobase, priv->slave_port - 1) +
  694. CPGMACSL_REG_SA_LO);
  695. return 0;
  696. }
  697. static int ks2_eth_probe(struct udevice *dev)
  698. {
  699. struct ks2_eth_priv *priv = dev_get_priv(dev);
  700. struct mii_dev *mdio_bus;
  701. int ret;
  702. priv->dev = dev;
  703. /* These clock enables has to be moved to common location */
  704. if (cpu_is_k2g())
  705. writel(KS2_ETHERNET_RGMII, KS2_ETHERNET_CFG);
  706. /* By default, select PA PLL clock as PA clock source */
  707. #ifndef CONFIG_SOC_K2G
  708. if (psc_enable_module(KS2_LPSC_PA))
  709. return -EACCES;
  710. #endif
  711. if (psc_enable_module(KS2_LPSC_CPGMAC))
  712. return -EACCES;
  713. if (psc_enable_module(KS2_LPSC_CRYPTO))
  714. return -EACCES;
  715. if (cpu_is_k2e() || cpu_is_k2l())
  716. pll_pa_clk_sel();
  717. priv->net_rx_buffs.buff_ptr = rx_buffs;
  718. priv->net_rx_buffs.num_buffs = RX_BUFF_NUMS;
  719. priv->net_rx_buffs.buff_len = RX_BUFF_LEN;
  720. if (priv->slave_port == 1) {
  721. /*
  722. * Register MDIO bus for slave 0 only, other slave have
  723. * to re-use the same
  724. */
  725. mdio_bus = mdio_alloc();
  726. if (!mdio_bus) {
  727. pr_err("MDIO alloc failed\n");
  728. return -ENOMEM;
  729. }
  730. priv->mdio_bus = mdio_bus;
  731. mdio_bus->read = keystone2_mdio_read;
  732. mdio_bus->write = keystone2_mdio_write;
  733. mdio_bus->reset = keystone2_mdio_reset;
  734. mdio_bus->priv = priv->mdio_base;
  735. sprintf(mdio_bus->name, "ethernet-mdio");
  736. ret = mdio_register(mdio_bus);
  737. if (ret) {
  738. pr_err("MDIO bus register failed\n");
  739. return ret;
  740. }
  741. } else {
  742. /* Get the MDIO bus from slave 0 device */
  743. struct ks2_eth_priv *parent_priv;
  744. parent_priv = dev_get_priv(dev->parent);
  745. priv->mdio_bus = parent_priv->mdio_bus;
  746. }
  747. #ifndef CONFIG_SOC_K2G
  748. keystone2_net_serdes_setup();
  749. #endif
  750. priv->netcp_pktdma = &netcp_pktdma;
  751. if (priv->has_mdio) {
  752. priv->phydev = phy_connect(priv->mdio_bus, priv->phy_addr,
  753. dev, priv->phy_if);
  754. phy_config(priv->phydev);
  755. }
  756. return 0;
  757. }
  758. int ks2_eth_remove(struct udevice *dev)
  759. {
  760. struct ks2_eth_priv *priv = dev_get_priv(dev);
  761. free(priv->phydev);
  762. mdio_unregister(priv->mdio_bus);
  763. mdio_free(priv->mdio_bus);
  764. return 0;
  765. }
  766. static const struct eth_ops ks2_eth_ops = {
  767. .start = ks2_eth_start,
  768. .send = ks2_eth_send,
  769. .recv = ks2_eth_recv,
  770. .free_pkt = ks2_eth_free_pkt,
  771. .stop = ks2_eth_stop,
  772. .read_rom_hwaddr = ks2_eth_read_rom_hwaddr,
  773. .write_hwaddr = ks2_eth_write_hwaddr,
  774. };
  775. static int ks2_eth_bind_slaves(struct udevice *dev, int gbe, int *gbe_0)
  776. {
  777. const void *fdt = gd->fdt_blob;
  778. struct udevice *sl_dev;
  779. int interfaces;
  780. int sec_slave;
  781. int slave;
  782. int ret;
  783. char *slave_name;
  784. interfaces = fdt_subnode_offset(fdt, gbe, "interfaces");
  785. fdt_for_each_subnode(slave, fdt, interfaces) {
  786. int slave_no;
  787. slave_no = fdtdec_get_int(fdt, slave, "slave-port", -ENOENT);
  788. if (slave_no == -ENOENT)
  789. continue;
  790. if (slave_no == 0) {
  791. /* This is the current eth device */
  792. *gbe_0 = slave;
  793. } else {
  794. /* Slave devices to be registered */
  795. slave_name = malloc(20);
  796. snprintf(slave_name, 20, "netcp@slave-%d", slave_no);
  797. ret = device_bind_driver_to_node(dev, "eth_ks2_sl",
  798. slave_name, offset_to_ofnode(slave),
  799. &sl_dev);
  800. if (ret) {
  801. pr_err("ks2_net - not able to bind slave interfaces\n");
  802. return ret;
  803. }
  804. }
  805. }
  806. sec_slave = fdt_subnode_offset(fdt, gbe, "secondary-slave-ports");
  807. fdt_for_each_subnode(slave, fdt, sec_slave) {
  808. int slave_no;
  809. slave_no = fdtdec_get_int(fdt, slave, "slave-port", -ENOENT);
  810. if (slave_no == -ENOENT)
  811. continue;
  812. /* Slave devices to be registered */
  813. slave_name = malloc(20);
  814. snprintf(slave_name, 20, "netcp@slave-%d", slave_no);
  815. ret = device_bind_driver_to_node(dev, "eth_ks2_sl", slave_name,
  816. offset_to_ofnode(slave), &sl_dev);
  817. if (ret) {
  818. pr_err("ks2_net - not able to bind slave interfaces\n");
  819. return ret;
  820. }
  821. }
  822. return 0;
  823. }
  824. static int ks2_eth_parse_slave_interface(int netcp, int slave,
  825. struct ks2_eth_priv *priv,
  826. struct eth_pdata *pdata)
  827. {
  828. const void *fdt = gd->fdt_blob;
  829. int mdio;
  830. int phy;
  831. int dma_count;
  832. u32 dma_channel[8];
  833. priv->slave_port = fdtdec_get_int(fdt, slave, "slave-port", -1);
  834. priv->net_rx_buffs.rx_flow = priv->slave_port * 8;
  835. /* U-Boot slave port number starts with 1 instead of 0 */
  836. priv->slave_port += 1;
  837. dma_count = fdtdec_get_int_array_count(fdt, netcp,
  838. "ti,navigator-dmas",
  839. dma_channel, 8);
  840. if (dma_count > (2 * priv->slave_port)) {
  841. int dma_idx;
  842. dma_idx = priv->slave_port * 2 - 1;
  843. priv->net_rx_buffs.rx_flow = dma_channel[dma_idx];
  844. }
  845. priv->link_type = fdtdec_get_int(fdt, slave, "link-interface", -1);
  846. phy = fdtdec_lookup_phandle(fdt, slave, "phy-handle");
  847. if (phy >= 0) {
  848. priv->phy_addr = fdtdec_get_int(fdt, phy, "reg", -1);
  849. mdio = fdt_parent_offset(fdt, phy);
  850. if (mdio < 0) {
  851. pr_err("mdio dt not found\n");
  852. return -ENODEV;
  853. }
  854. priv->mdio_base = (void *)fdtdec_get_addr(fdt, mdio, "reg");
  855. }
  856. if (priv->link_type == LINK_TYPE_SGMII_MAC_TO_PHY_MODE) {
  857. priv->phy_if = PHY_INTERFACE_MODE_SGMII;
  858. pdata->phy_interface = priv->phy_if;
  859. priv->sgmii_link_type = SGMII_LINK_MAC_PHY;
  860. priv->has_mdio = true;
  861. } else if (priv->link_type == LINK_TYPE_RGMII_LINK_MAC_PHY) {
  862. priv->phy_if = PHY_INTERFACE_MODE_RGMII;
  863. pdata->phy_interface = priv->phy_if;
  864. priv->has_mdio = true;
  865. }
  866. return 0;
  867. }
  868. static int ks2_sl_eth_ofdata_to_platdata(struct udevice *dev)
  869. {
  870. struct ks2_eth_priv *priv = dev_get_priv(dev);
  871. struct eth_pdata *pdata = dev_get_platdata(dev);
  872. const void *fdt = gd->fdt_blob;
  873. int slave = dev_of_offset(dev);
  874. int interfaces;
  875. int gbe;
  876. int netcp_devices;
  877. int netcp;
  878. interfaces = fdt_parent_offset(fdt, slave);
  879. gbe = fdt_parent_offset(fdt, interfaces);
  880. netcp_devices = fdt_parent_offset(fdt, gbe);
  881. netcp = fdt_parent_offset(fdt, netcp_devices);
  882. ks2_eth_parse_slave_interface(netcp, slave, priv, pdata);
  883. pdata->iobase = fdtdec_get_addr(fdt, netcp, "reg");
  884. return 0;
  885. }
  886. static int ks2_eth_ofdata_to_platdata(struct udevice *dev)
  887. {
  888. struct ks2_eth_priv *priv = dev_get_priv(dev);
  889. struct eth_pdata *pdata = dev_get_platdata(dev);
  890. const void *fdt = gd->fdt_blob;
  891. int gbe_0 = -ENODEV;
  892. int netcp_devices;
  893. int gbe;
  894. netcp_devices = fdt_subnode_offset(fdt, dev_of_offset(dev),
  895. "netcp-devices");
  896. gbe = fdt_subnode_offset(fdt, netcp_devices, "gbe");
  897. ks2_eth_bind_slaves(dev, gbe, &gbe_0);
  898. ks2_eth_parse_slave_interface(dev_of_offset(dev), gbe_0, priv, pdata);
  899. pdata->iobase = devfdt_get_addr(dev);
  900. return 0;
  901. }
  902. static const struct udevice_id ks2_eth_ids[] = {
  903. { .compatible = "ti,netcp-1.0" },
  904. { }
  905. };
  906. U_BOOT_DRIVER(eth_ks2_slave) = {
  907. .name = "eth_ks2_sl",
  908. .id = UCLASS_ETH,
  909. .ofdata_to_platdata = ks2_sl_eth_ofdata_to_platdata,
  910. .probe = ks2_eth_probe,
  911. .remove = ks2_eth_remove,
  912. .ops = &ks2_eth_ops,
  913. .priv_auto_alloc_size = sizeof(struct ks2_eth_priv),
  914. .platdata_auto_alloc_size = sizeof(struct eth_pdata),
  915. .flags = DM_FLAG_ALLOC_PRIV_DMA,
  916. };
  917. U_BOOT_DRIVER(eth_ks2) = {
  918. .name = "eth_ks2",
  919. .id = UCLASS_ETH,
  920. .of_match = ks2_eth_ids,
  921. .ofdata_to_platdata = ks2_eth_ofdata_to_platdata,
  922. .probe = ks2_eth_probe,
  923. .remove = ks2_eth_remove,
  924. .ops = &ks2_eth_ops,
  925. .priv_auto_alloc_size = sizeof(struct ks2_eth_priv),
  926. .platdata_auto_alloc_size = sizeof(struct eth_pdata),
  927. .flags = DM_FLAG_ALLOC_PRIV_DMA,
  928. };
  929. #endif