30 #include <linux/tcp.h>
31 #include <linux/udp.h>
33 #include <linux/bitops.h>
35 #include <linux/ethtool.h>
37 #include <linux/module.h>
38 #include <linux/kernel.h>
44 #include <linux/types.h>
45 #include <asm/pgtable.h>
46 #include <asm/cacheflush.h>
49 #define DRIVER_NAME "pxa168-eth"
50 #define DRIVER_VERSION "0.3"
56 #define PHY_ADDRESS 0x0000
58 #define PORT_CONFIG 0x0400
59 #define PORT_CONFIG_EXT 0x0408
60 #define PORT_COMMAND 0x0410
61 #define PORT_STATUS 0x0418
63 #define SDMA_CONFIG 0x0440
64 #define SDMA_CMD 0x0448
65 #define INT_CAUSE 0x0450
66 #define INT_W_CLEAR 0x0454
67 #define INT_MASK 0x0458
68 #define ETH_F_RX_DESC_0 0x0480
69 #define ETH_C_RX_DESC_0 0x04A0
70 #define ETH_C_TX_DESC_1 0x04E4
73 #define SMI_BUSY (1 << 28)
74 #define SMI_R_VALID (1 << 27)
75 #define SMI_OP_W (0 << 26)
76 #define SMI_OP_R (1 << 26)
78 #define PHY_WAIT_ITERATIONS 10
80 #define PXA168_ETH_PHY_ADDR_DEFAULT 0
82 #define BUF_OWNED_BY_DMA (1 << 31)
85 #define RX_EN_INT (1 << 23)
86 #define RX_FIRST_DESC (1 << 17)
87 #define RX_LAST_DESC (1 << 16)
88 #define RX_ERROR (1 << 15)
91 #define TX_EN_INT (1 << 23)
92 #define TX_GEN_CRC (1 << 22)
93 #define TX_ZERO_PADDING (1 << 18)
94 #define TX_FIRST_DESC (1 << 17)
95 #define TX_LAST_DESC (1 << 16)
96 #define TX_ERROR (1 << 15)
99 #define SDMA_CMD_AT (1 << 31)
100 #define SDMA_CMD_TXDL (1 << 24)
101 #define SDMA_CMD_TXDH (1 << 23)
102 #define SDMA_CMD_AR (1 << 15)
103 #define SDMA_CMD_ERD (1 << 7)
106 #define PCR_HS (1 << 12)
107 #define PCR_EN (1 << 7)
108 #define PCR_PM (1 << 0)
111 #define PCXR_2BSM (1 << 28)
112 #define PCXR_DSCP_EN (1 << 21)
113 #define PCXR_MFL_1518 (0 << 14)
114 #define PCXR_MFL_1536 (1 << 14)
115 #define PCXR_MFL_2048 (2 << 14)
116 #define PCXR_MFL_64K (3 << 14)
117 #define PCXR_FLP (1 << 11)
118 #define PCXR_PRIO_TX_OFF 3
119 #define PCXR_TX_HIGH_PRI (7 << PCXR_PRIO_TX_OFF)
122 #define SDCR_BSZ_OFF 12
123 #define SDCR_BSZ8 (3 << SDCR_BSZ_OFF)
124 #define SDCR_BSZ4 (2 << SDCR_BSZ_OFF)
125 #define SDCR_BSZ2 (1 << SDCR_BSZ_OFF)
126 #define SDCR_BSZ1 (0 << SDCR_BSZ_OFF)
127 #define SDCR_BLMR (1 << 6)
128 #define SDCR_BLMT (1 << 7)
129 #define SDCR_RIFB (1 << 9)
130 #define SDCR_RC_OFF 2
131 #define SDCR_RC_MAX_RETRANS (0xf << SDCR_RC_OFF)
137 #define ICR_RXBUF (1 << 0)
138 #define ICR_TXBUF_H (1 << 2)
139 #define ICR_TXBUF_L (1 << 3)
140 #define ICR_TXEND_H (1 << 6)
141 #define ICR_TXEND_L (1 << 7)
142 #define ICR_RXERR (1 << 8)
143 #define ICR_TXERR_H (1 << 10)
144 #define ICR_TXERR_L (1 << 11)
145 #define ICR_TX_UDR (1 << 13)
146 #define ICR_MII_CH (1 << 28)
148 #define ALL_INTS (ICR_TXBUF_H | ICR_TXBUF_L | ICR_TX_UDR |\
149 ICR_TXERR_H | ICR_TXERR_L |\
150 ICR_TXEND_H | ICR_TXEND_L |\
151 ICR_RXBUF | ICR_RXERR | ICR_MII_CH)
153 #define ETH_HW_IP_ALIGN 2
155 #define NUM_RX_DESCS 64
156 #define NUM_TX_DESCS 64
159 #define HASH_DELETE 1
160 #define HASH_ADDR_TABLE_SIZE 0x4000
161 #define HOP_NUMBER 12
164 #define PORT_SPEED_100 (1 << 0)
165 #define FULL_DUPLEX (1 << 1)
166 #define FLOW_CONTROL_ENABLED (1 << 2)
167 #define LINK_UP (1 << 3)
170 #define WORK_LINK (1 << 0)
171 #define WORK_TX_DONE (1 << 1)
176 #define SKB_DMA_REALIGN ((PAGE_SIZE - NET_SKB_PAD) % SMP_CACHE_BYTES)
287 int max_retries = 40;
298 }
while (max_retries-- > 0 && delay <= 0);
300 if (max_retries <= 0)
310 return (reg_data >> (5 * pep->
port_num)) & 0x1f;
320 reg_data |= (phy_addr & 0x1f) << addr_shift;
345 struct rx_desc *p_used_rx_desc;
351 skb = netdev_alloc_skb(dev, pep->
skb_size);
392 static inline void rxq_refill_timer_wrapper(
unsigned long data)
395 napi_schedule(&pep->
napi);
398 static inline u8 flip_8_bits(
u8 x)
400 return (((x) & 0x01) << 3) | (((
x) & 0x02) << 1)
401 | (((x) & 0x04) >> 1) | (((
x) & 0x08) >> 3)
402 | (((x) & 0x10) << 3) | (((
x) & 0x20) << 1)
403 | (((x) & 0x40) >> 1) | (((
x) & 0x80) >> 3);
406 static void nibble_swap_every_byte(
unsigned char *
mac_addr)
410 mac_addr[
i] = ((mac_addr[
i] & 0x0f) << 4) |
411 ((mac_addr[
i] & 0xf0) >> 4);
415 static void inverse_every_nibble(
unsigned char *mac_addr)
419 mac_addr[i] = flip_8_bits(mac_addr[i]);
430 static u32 hash_function(
unsigned char *mac_addr_orig)
442 memcpy(mac_addr, mac_addr_orig, ETH_ALEN);
444 nibble_swap_every_byte(mac_addr);
445 inverse_every_nibble(mac_addr);
447 addr0 = (mac_addr[5] >> 2) & 0x3f;
448 addr1 = (mac_addr[5] & 0x03) | (((mac_addr[4] & 0x7f)) << 2);
449 addr2 = ((mac_addr[4] & 0x80) >> 7) | mac_addr[3] << 1;
450 addr3 = (mac_addr[2] & 0xff) | ((mac_addr[1] & 1) << 8);
452 hash_result = (addr0 << 9) | (addr1 ^ addr2 ^ addr3);
453 hash_result = hash_result & 0x07ff;
475 unsigned char *mac_addr,
483 new_low = (((mac_addr[1] >> 4) & 0xf) << 15)
484 | (((mac_addr[1] >> 0) & 0xf) << 11)
485 | (((mac_addr[0] >> 4) & 0xf) << 7)
486 | (((mac_addr[0] >> 0) & 0xf) << 3)
487 | (((mac_addr[3] >> 4) & 0x1) << 31)
488 | (((mac_addr[3] >> 0) & 0xf) << 27)
489 | (((mac_addr[2] >> 4) & 0xf) << 23)
490 | (((mac_addr[2] >> 0) & 0xf) << 19)
494 new_high = (((mac_addr[5] >> 4) & 0xf) << 15)
495 | (((mac_addr[5] >> 0) & 0xf) << 11)
496 | (((mac_addr[4] >> 4) & 0xf) << 7)
497 | (((mac_addr[4] >> 0) & 0xf) << 3)
498 | (((mac_addr[3] >> 5) & 0x7) << 0);
505 entry = start + hash_function(mac_addr);
512 (new_low & 0xfffffff8)) &&
517 if (entry == start + 0x7ff)
523 if (((
le32_to_cpu(entry->
lo) & 0xfffffff8) != (new_low & 0xfffffff8)) &&
527 if (i == HOP_NUMBER) {
530 "move to 16kB implementation?\n",
560 unsigned char *oaddr,
567 add_del_hash_entry(pep, addr, 1, 0,
HASH_ADD);
597 static void pxa168_eth_set_rx_mode(
struct net_device *dev)
615 update_hash_table_mac_address(pep,
NULL, dev->
dev_addr);
618 update_hash_table_mac_address(pep,
NULL, ha->addr);
627 if (!is_valid_ether_addr(sa->
sa_data))
629 memcpy(oldMac, dev->dev_addr, ETH_ALEN);
632 netif_addr_lock_bh(dev);
633 update_hash_table_mac_address(pep, oldMac, dev->dev_addr);
634 netif_addr_unlock_bh(dev);
638 static void eth_port_start(
struct net_device *dev)
640 unsigned int val = 0;
642 int tx_curr_desc, rx_curr_desc;
645 if (pep->
phy != NULL) {
648 pxa168_get_settings(pep->
dev, &
cmd);
649 ethernet_phy_reset(pep);
650 pxa168_set_settings(pep->
dev, &
cmd);
682 static void eth_port_reset(
struct net_device *dev)
685 unsigned int val = 0;
732 goto txq_reclaim_end;
735 goto txq_reclaim_end;
742 skb = pep->
tx_skb[tx_index];
749 dev->
stats.tx_errors++;
757 netif_tx_unlock(dev);
761 static void pxa168_eth_tx_timeout(
struct net_device *dev)
777 pxa168_eth_stop(dev);
778 pxa168_eth_open(dev);
785 unsigned int received_packets = 0;
788 while (budget-- > 0) {
789 int rx_next_curr_desc, rx_curr_desc, rx_used_desc;
801 if (cmd_sts & (BUF_OWNED_BY_DMA))
803 skb = pep->
rx_skb[rx_curr_desc];
806 rx_next_curr_desc = (rx_curr_desc + 1) % pep->
rx_ring_size;
811 if (rx_next_curr_desc == rx_used_desc)
837 "%s: Rx pkt on multiple desc\n",
840 if (cmd_sts & RX_ERROR)
855 return received_packets;
891 if (!(port_status &
LINK_UP)) {
892 if (netif_carrier_ok(dev)) {
907 "flow control %sabled\n", dev->
name,
908 speed, duplex ?
"full" :
"half", fc ?
"en" :
"dis");
909 if (!netif_carrier_ok(dev))
918 if (
unlikely(!pxa168_eth_collect_events(pep, dev)))
922 napi_schedule(&pep->
napi);
936 skb_size = pep->
dev->mtu + 36;
943 pep->
skb_size = (skb_size + 7) & ~7;
959 pxa168_eth_recalc_skb_size(pep);
993 err = init_hash_table(pep);
1004 set_port_config_ext(pep);
1012 struct rx_desc *p_rx_desc;
1013 int size = 0, i = 0;
1036 for (i = 0; i < rx_desc_num; i++) {
1038 ((i + 1) % rx_desc_num) *
sizeof(
struct rx_desc);
1050 static void rxq_deinit(
struct net_device *dev)
1058 dev_kfree_skb(pep->
rx_skb[curr]);
1064 "Error in freeing Rx Ring. %d skb's still\n",
1077 int size = 0, i = 0;
1099 for (i = 0; i < tx_desc_num; i++) {
1101 ((i + 1) % tx_desc_num) *
sizeof(
struct tx_desc);
1112 static void txq_deinit(
struct net_device *dev)
1117 txq_reclaim(dev, 1);
1126 static int pxa168_eth_open(
struct net_device *dev)
1134 dev_printk(
KERN_ERR, &dev->
dev,
"can't assign irq\n");
1138 err = rxq_init(dev);
1141 err = txq_init(dev);
1143 goto out_free_rx_skb;
1152 eth_port_start(dev);
1153 napi_enable(&pep->
napi);
1162 static int pxa168_eth_stop(
struct net_device *dev)
1165 eth_port_reset(dev);
1172 napi_disable(&pep->
napi);
1182 static int pxa168_eth_change_mtu(
struct net_device *dev,
int mtu)
1187 if ((mtu > 9500) || (mtu < 68))
1191 retval = set_port_config_ext(pep);
1193 if (!netif_running(dev))
1202 pxa168_eth_stop(dev);
1203 if (pxa168_eth_open(dev)) {
1205 "fatal error on re-opening device after "
1221 return tx_desc_curr;
1233 handle_link_event(pep);
1240 txq_reclaim(dev, 0);
1241 if (netif_queue_stopped(dev)
1243 netif_wake_queue(dev);
1245 work_done = rxq_process(dev, budget);
1246 if (work_done < budget) {
1262 tx_index = eth_alloc_tx_desc_index(pep);
1269 skb_tx_timestamp(skb);
1282 netif_stop_queue(dev);
1302 static int pxa168_smi_read(
struct mii_bus *
bus,
int phy_addr,
int regnum)
1308 if (smi_wait_ready(pep)) {
1317 "pxa168_eth: SMI bus read not valid\n");
1323 return val & 0xffff;
1326 static int pxa168_smi_write(
struct mii_bus *bus,
int phy_addr,
int regnum,
1331 if (smi_wait_ready(pep)) {
1336 wrl(pep,
SMI, (phy_addr << 16) | (regnum << 21) |
1339 if (smi_wait_ready(pep)) {
1347 static int pxa168_eth_do_ioctl(
struct net_device *dev,
struct ifreq *ifr,
1351 if (pep->
phy != NULL)
1367 start = ethernet_phy_get(pep);
1371 start = phy_addr & 0x1f;
1375 for (i = 0; i < num; i++) {
1376 int addr = (start +
i) & 0x1f;
1377 if (bus->
phy_map[addr] == NULL)
1380 if (phydev == NULL) {
1383 ethernet_phy_set_addr(pep, addr);
1393 ethernet_phy_reset(pep);
1412 static int ethernet_phy_setup(
struct net_device *dev)
1418 pep->
phy = phy_scan(pep, pep->
pd->phy_addr & 0x1f);
1419 if (pep->
phy != NULL)
1420 phy_init(pep, pep->
pd->speed, pep->
pd->duplex);
1421 update_hash_table_mac_address(pep, NULL, dev->
dev_addr);
1431 err = phy_read_status(pep->
phy);
1445 static void pxa168_get_drvinfo(
struct net_device *dev,
1454 static const struct ethtool_ops pxa168_ethtool_ops = {
1455 .get_settings = pxa168_get_settings,
1456 .set_settings = pxa168_set_settings,
1457 .get_drvinfo = pxa168_get_drvinfo,
1463 .ndo_open = pxa168_eth_open,
1464 .ndo_stop = pxa168_eth_stop,
1465 .ndo_start_xmit = pxa168_eth_start_xmit,
1466 .ndo_set_rx_mode = pxa168_eth_set_rx_mode,
1467 .ndo_set_mac_address = pxa168_eth_set_mac_address,
1469 .ndo_do_ioctl = pxa168_eth_do_ioctl,
1470 .ndo_change_mtu = pxa168_eth_change_mtu,
1471 .ndo_tx_timeout = pxa168_eth_tx_timeout,
1498 platform_set_drvdata(pdev, dev);
1499 pep = netdev_priv(dev);
1508 if (pep->
base == NULL) {
1523 eth_hw_addr_random(dev);
1525 pep->
pd = pdev->
dev.platform_data;
1527 if (pep->
pd->rx_queue_size)
1531 if (pep->
pd->tx_queue_size)
1541 pep->
timeout.function = rxq_refill_timer_wrapper;
1544 pep->
smi_bus = mdiobus_alloc();
1550 pep->
smi_bus->name =
"pxa168_eth smi";
1551 pep->
smi_bus->read = pxa168_smi_read;
1552 pep->
smi_bus->write = pxa168_smi_write;
1556 pep->
smi_bus->phy_mask = 0xffffffff;
1561 pxa168_init_hw(pep);
1562 err = ethernet_phy_setup(dev);
1587 struct net_device *dev = platform_get_drvdata(pdev);
1600 if (pep->
phy != NULL)
1610 platform_set_drvdata(pdev, NULL);
1616 struct net_device *dev = platform_get_drvdata(pdev);
1617 eth_port_reset(dev);
1632 #define pxa168_eth_resume NULL
1633 #define pxa168_eth_suspend NULL
1637 .probe = pxa168_eth_probe,
1638 .remove = pxa168_eth_remove,
1639 .shutdown = pxa168_eth_shutdown,