diff options
| author | Mugunthan V N <mugunthanvnm@ti.com> | 2013-02-11 04:52:19 -0500 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2013-02-12 16:15:10 -0500 |
| commit | 9232b16df2167c8afcb89de39ee85f5091ebacff (patch) | |
| tree | 3b8d2b0d0b2732f1b13a7e3c5b7fd24cbf37565e | |
| parent | f6e135c81eeb648c6addc6aeff2ee80f28ea413b (diff) | |
driver: net: ethernet: cpsw: make cpts as pointer
As CPTS is common module for both EMAC in Dual EMAC mode so making cpts as
pointer.
Signed-off-by: Mugunthan V N <mugunthanvnm@ti.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
| -rw-r--r-- | drivers/net/ethernet/ti/cpsw.c | 36 |
1 files changed, 21 insertions, 15 deletions
diff --git a/drivers/net/ethernet/ti/cpsw.c b/drivers/net/ethernet/ti/cpsw.c index 8ac60c7a2a23..4b964bb02d4c 100644 --- a/drivers/net/ethernet/ti/cpsw.c +++ b/drivers/net/ethernet/ti/cpsw.c | |||
| @@ -319,7 +319,7 @@ struct cpsw_priv { | |||
| 319 | /* snapshot of IRQ numbers */ | 319 | /* snapshot of IRQ numbers */ |
| 320 | u32 irqs_table[4]; | 320 | u32 irqs_table[4]; |
| 321 | u32 num_irqs; | 321 | u32 num_irqs; |
| 322 | struct cpts cpts; | 322 | struct cpts *cpts; |
| 323 | }; | 323 | }; |
| 324 | 324 | ||
| 325 | #define napi_to_priv(napi) container_of(napi, struct cpsw_priv, napi) | 325 | #define napi_to_priv(napi) container_of(napi, struct cpsw_priv, napi) |
| @@ -383,7 +383,7 @@ void cpsw_tx_handler(void *token, int len, int status) | |||
| 383 | */ | 383 | */ |
| 384 | if (unlikely(netif_queue_stopped(ndev))) | 384 | if (unlikely(netif_queue_stopped(ndev))) |
| 385 | netif_start_queue(ndev); | 385 | netif_start_queue(ndev); |
| 386 | cpts_tx_timestamp(&priv->cpts, skb); | 386 | cpts_tx_timestamp(priv->cpts, skb); |
| 387 | priv->stats.tx_packets++; | 387 | priv->stats.tx_packets++; |
| 388 | priv->stats.tx_bytes += len; | 388 | priv->stats.tx_bytes += len; |
| 389 | dev_kfree_skb_any(skb); | 389 | dev_kfree_skb_any(skb); |
| @@ -404,7 +404,7 @@ void cpsw_rx_handler(void *token, int len, int status) | |||
| 404 | } | 404 | } |
| 405 | if (likely(status >= 0)) { | 405 | if (likely(status >= 0)) { |
| 406 | skb_put(skb, len); | 406 | skb_put(skb, len); |
| 407 | cpts_rx_timestamp(&priv->cpts, skb); | 407 | cpts_rx_timestamp(priv->cpts, skb); |
| 408 | skb->protocol = eth_type_trans(skb, ndev); | 408 | skb->protocol = eth_type_trans(skb, ndev); |
| 409 | netif_receive_skb(skb); | 409 | netif_receive_skb(skb); |
| 410 | priv->stats.rx_bytes += len; | 410 | priv->stats.rx_bytes += len; |
| @@ -760,7 +760,8 @@ static netdev_tx_t cpsw_ndo_start_xmit(struct sk_buff *skb, | |||
| 760 | return NETDEV_TX_OK; | 760 | return NETDEV_TX_OK; |
| 761 | } | 761 | } |
| 762 | 762 | ||
| 763 | if (skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP && priv->cpts.tx_enable) | 763 | if (skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP && |
| 764 | priv->cpts->tx_enable) | ||
| 764 | skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS; | 765 | skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS; |
| 765 | 766 | ||
| 766 | skb_tx_timestamp(skb); | 767 | skb_tx_timestamp(skb); |
| @@ -815,7 +816,7 @@ static void cpsw_hwtstamp_v1(struct cpsw_priv *priv) | |||
| 815 | struct cpsw_slave *slave = &priv->slaves[priv->data.cpts_active_slave]; | 816 | struct cpsw_slave *slave = &priv->slaves[priv->data.cpts_active_slave]; |
| 816 | u32 ts_en, seq_id; | 817 | u32 ts_en, seq_id; |
| 817 | 818 | ||
| 818 | if (!priv->cpts.tx_enable && !priv->cpts.rx_enable) { | 819 | if (!priv->cpts->tx_enable && !priv->cpts->rx_enable) { |
| 819 | slave_write(slave, 0, CPSW1_TS_CTL); | 820 | slave_write(slave, 0, CPSW1_TS_CTL); |
| 820 | return; | 821 | return; |
| 821 | } | 822 | } |
| @@ -823,10 +824,10 @@ static void cpsw_hwtstamp_v1(struct cpsw_priv *priv) | |||
| 823 | seq_id = (30 << CPSW_V1_SEQ_ID_OFS_SHIFT) | ETH_P_1588; | 824 | seq_id = (30 << CPSW_V1_SEQ_ID_OFS_SHIFT) | ETH_P_1588; |
| 824 | ts_en = EVENT_MSG_BITS << CPSW_V1_MSG_TYPE_OFS; | 825 | ts_en = EVENT_MSG_BITS << CPSW_V1_MSG_TYPE_OFS; |
| 825 | 826 | ||
| 826 | if (priv->cpts.tx_enable) | 827 | if (priv->cpts->tx_enable) |
| 827 | ts_en |= CPSW_V1_TS_TX_EN; | 828 | ts_en |= CPSW_V1_TS_TX_EN; |
| 828 | 829 | ||
| 829 | if (priv->cpts.rx_enable) | 830 | if (priv->cpts->rx_enable) |
| 830 | ts_en |= CPSW_V1_TS_RX_EN; | 831 | ts_en |= CPSW_V1_TS_RX_EN; |
| 831 | 832 | ||
| 832 | slave_write(slave, ts_en, CPSW1_TS_CTL); | 833 | slave_write(slave, ts_en, CPSW1_TS_CTL); |
| @@ -841,10 +842,10 @@ static void cpsw_hwtstamp_v2(struct cpsw_priv *priv) | |||
| 841 | ctrl = slave_read(slave, CPSW2_CONTROL); | 842 | ctrl = slave_read(slave, CPSW2_CONTROL); |
| 842 | ctrl &= ~CTRL_ALL_TS_MASK; | 843 | ctrl &= ~CTRL_ALL_TS_MASK; |
| 843 | 844 | ||
| 844 | if (priv->cpts.tx_enable) | 845 | if (priv->cpts->tx_enable) |
| 845 | ctrl |= CTRL_TX_TS_BITS; | 846 | ctrl |= CTRL_TX_TS_BITS; |
| 846 | 847 | ||
| 847 | if (priv->cpts.rx_enable) | 848 | if (priv->cpts->rx_enable) |
| 848 | ctrl |= CTRL_RX_TS_BITS; | 849 | ctrl |= CTRL_RX_TS_BITS; |
| 849 | 850 | ||
| 850 | mtype = (30 << TS_SEQ_ID_OFFSET_SHIFT) | EVENT_MSG_BITS; | 851 | mtype = (30 << TS_SEQ_ID_OFFSET_SHIFT) | EVENT_MSG_BITS; |
| @@ -857,7 +858,7 @@ static void cpsw_hwtstamp_v2(struct cpsw_priv *priv) | |||
| 857 | static int cpsw_hwtstamp_ioctl(struct net_device *dev, struct ifreq *ifr) | 858 | static int cpsw_hwtstamp_ioctl(struct net_device *dev, struct ifreq *ifr) |
| 858 | { | 859 | { |
| 859 | struct cpsw_priv *priv = netdev_priv(dev); | 860 | struct cpsw_priv *priv = netdev_priv(dev); |
| 860 | struct cpts *cpts = &priv->cpts; | 861 | struct cpts *cpts = priv->cpts; |
| 861 | struct hwtstamp_config cfg; | 862 | struct hwtstamp_config cfg; |
| 862 | 863 | ||
| 863 | if (copy_from_user(&cfg, ifr->ifr_data, sizeof(cfg))) | 864 | if (copy_from_user(&cfg, ifr->ifr_data, sizeof(cfg))) |
| @@ -1086,7 +1087,7 @@ static int cpsw_get_ts_info(struct net_device *ndev, | |||
| 1086 | SOF_TIMESTAMPING_RX_SOFTWARE | | 1087 | SOF_TIMESTAMPING_RX_SOFTWARE | |
| 1087 | SOF_TIMESTAMPING_SOFTWARE | | 1088 | SOF_TIMESTAMPING_SOFTWARE | |
| 1088 | SOF_TIMESTAMPING_RAW_HARDWARE; | 1089 | SOF_TIMESTAMPING_RAW_HARDWARE; |
| 1089 | info->phc_index = priv->cpts.phc_index; | 1090 | info->phc_index = priv->cpts->phc_index; |
| 1090 | info->tx_types = | 1091 | info->tx_types = |
| 1091 | (1 << HWTSTAMP_TX_OFF) | | 1092 | (1 << HWTSTAMP_TX_OFF) | |
| 1092 | (1 << HWTSTAMP_TX_ON); | 1093 | (1 << HWTSTAMP_TX_ON); |
| @@ -1272,6 +1273,11 @@ static int cpsw_probe(struct platform_device *pdev) | |||
| 1272 | priv->dev = &ndev->dev; | 1273 | priv->dev = &ndev->dev; |
| 1273 | priv->msg_enable = netif_msg_init(debug_level, CPSW_DEBUG); | 1274 | priv->msg_enable = netif_msg_init(debug_level, CPSW_DEBUG); |
| 1274 | priv->rx_packet_max = max(rx_packet_max, 128); | 1275 | priv->rx_packet_max = max(rx_packet_max, 128); |
| 1276 | priv->cpts = devm_kzalloc(&pdev->dev, sizeof(struct cpts), GFP_KERNEL); | ||
| 1277 | if (!ndev) { | ||
| 1278 | pr_err("error allocating cpts\n"); | ||
| 1279 | goto clean_ndev_ret; | ||
| 1280 | } | ||
| 1275 | 1281 | ||
| 1276 | /* | 1282 | /* |
| 1277 | * This may be required here for child devices. | 1283 | * This may be required here for child devices. |
| @@ -1358,7 +1364,7 @@ static int cpsw_probe(struct platform_device *pdev) | |||
| 1358 | switch (priv->version) { | 1364 | switch (priv->version) { |
| 1359 | case CPSW_VERSION_1: | 1365 | case CPSW_VERSION_1: |
| 1360 | priv->host_port_regs = ss_regs + CPSW1_HOST_PORT_OFFSET; | 1366 | priv->host_port_regs = ss_regs + CPSW1_HOST_PORT_OFFSET; |
| 1361 | priv->cpts.reg = ss_regs + CPSW1_CPTS_OFFSET; | 1367 | priv->cpts->reg = ss_regs + CPSW1_CPTS_OFFSET; |
| 1362 | dma_params.dmaregs = ss_regs + CPSW1_CPDMA_OFFSET; | 1368 | dma_params.dmaregs = ss_regs + CPSW1_CPDMA_OFFSET; |
| 1363 | dma_params.txhdp = ss_regs + CPSW1_STATERAM_OFFSET; | 1369 | dma_params.txhdp = ss_regs + CPSW1_STATERAM_OFFSET; |
| 1364 | ale_params.ale_regs = ss_regs + CPSW1_ALE_OFFSET; | 1370 | ale_params.ale_regs = ss_regs + CPSW1_ALE_OFFSET; |
| @@ -1369,7 +1375,7 @@ static int cpsw_probe(struct platform_device *pdev) | |||
| 1369 | break; | 1375 | break; |
| 1370 | case CPSW_VERSION_2: | 1376 | case CPSW_VERSION_2: |
| 1371 | priv->host_port_regs = ss_regs + CPSW2_HOST_PORT_OFFSET; | 1377 | priv->host_port_regs = ss_regs + CPSW2_HOST_PORT_OFFSET; |
| 1372 | priv->cpts.reg = ss_regs + CPSW2_CPTS_OFFSET; | 1378 | priv->cpts->reg = ss_regs + CPSW2_CPTS_OFFSET; |
| 1373 | dma_params.dmaregs = ss_regs + CPSW2_CPDMA_OFFSET; | 1379 | dma_params.dmaregs = ss_regs + CPSW2_CPDMA_OFFSET; |
| 1374 | dma_params.txhdp = ss_regs + CPSW2_STATERAM_OFFSET; | 1380 | dma_params.txhdp = ss_regs + CPSW2_STATERAM_OFFSET; |
| 1375 | ale_params.ale_regs = ss_regs + CPSW2_ALE_OFFSET; | 1381 | ale_params.ale_regs = ss_regs + CPSW2_ALE_OFFSET; |
| @@ -1471,7 +1477,7 @@ static int cpsw_probe(struct platform_device *pdev) | |||
| 1471 | goto clean_irq_ret; | 1477 | goto clean_irq_ret; |
| 1472 | } | 1478 | } |
| 1473 | 1479 | ||
| 1474 | if (cpts_register(&pdev->dev, &priv->cpts, | 1480 | if (cpts_register(&pdev->dev, priv->cpts, |
| 1475 | data->cpts_clock_mult, data->cpts_clock_shift)) | 1481 | data->cpts_clock_mult, data->cpts_clock_shift)) |
| 1476 | dev_err(priv->dev, "error registering cpts device\n"); | 1482 | dev_err(priv->dev, "error registering cpts device\n"); |
| 1477 | 1483 | ||
| @@ -1516,7 +1522,7 @@ static int cpsw_remove(struct platform_device *pdev) | |||
| 1516 | pr_info("removing device"); | 1522 | pr_info("removing device"); |
| 1517 | platform_set_drvdata(pdev, NULL); | 1523 | platform_set_drvdata(pdev, NULL); |
| 1518 | 1524 | ||
| 1519 | cpts_unregister(&priv->cpts); | 1525 | cpts_unregister(priv->cpts); |
| 1520 | free_irq(ndev->irq, priv); | 1526 | free_irq(ndev->irq, priv); |
| 1521 | cpsw_ale_destroy(priv->ale); | 1527 | cpsw_ale_destroy(priv->ale); |
| 1522 | cpdma_chan_destroy(priv->txch); | 1528 | cpdma_chan_destroy(priv->txch); |
