]> git.sur5r.net Git - u-boot/blobdiff - drivers/net/rtl8169.c
ARM: sun6i: Add support for the power reset control module found on the A31
[u-boot] / drivers / net / rtl8169.c
index c47485a969cd1d009ed33bb0f5f641345649eb4c..c3ce17516c7407b0f189084bda4cbecb515122ac 100644 (file)
@@ -246,6 +246,7 @@ static struct {
        {"RTL-8169sc/8110sc",   0x18, 0xff7e1880,},
        {"RTL-8168b/8111sb",    0x30, 0xff7e1880,},
        {"RTL-8168b/8111sb",    0x38, 0xff7e1880,},
+       {"RTL-8168d/8111d",     0x28, 0xff7e1880,},
        {"RTL-8168evl/8111evl", 0x2e, 0xff7e1880,},
        {"RTL-8101e",           0x34, 0xff7e1880,},
        {"RTL-8100e",           0x32, 0xff7e1880,},
@@ -315,6 +316,7 @@ static const unsigned int rtl8169_rx_config =
 
 static struct pci_device_id supported[] = {
        {PCI_VENDOR_ID_REALTEK, 0x8167},
+       {PCI_VENDOR_ID_REALTEK, 0x8168},
        {PCI_VENDOR_ID_REALTEK, 0x8169},
        {}
 };
@@ -467,7 +469,6 @@ static int rtl_recv(struct eth_device *dev)
 
                        rtl_inval_buffer(tpc->RxBufferRing[cur_rx], length);
                        memcpy(rxdata, tpc->RxBufferRing[cur_rx], length);
-                       NetReceive(rxdata, length);
 
                        if (cur_rx == NUM_RX_DESC - 1)
                                tpc->RxDescArray[cur_rx].status =
@@ -478,6 +479,8 @@ static int rtl_recv(struct eth_device *dev)
                        tpc->RxDescArray[cur_rx].buf_addr =
                                cpu_to_le32(bus_to_phys(tpc->RxBufferRing[cur_rx]));
                        rtl_flush_rx_desc(&tpc->RxDescArray[cur_rx]);
+
+                       NetReceive(rxdata, length);
                } else {
                        puts("Error Rx");
                }
@@ -915,11 +918,25 @@ int rtl8169_initialize(bd_t *bis)
        int idx=0;
 
        while(1){
+               unsigned int region;
+               u16 device;
+
                /* Find RTL8169 */
                if ((devno = pci_find_devices(supported, idx++)) < 0)
                        break;
 
-               pci_read_config_dword(devno, PCI_BASE_ADDRESS_1, &iobase);
+               pci_read_config_word(devno, PCI_DEVICE_ID, &device);
+               switch (device) {
+               case 0x8168:
+                       region = 2;
+                       break;
+
+               default:
+                       region = 1;
+                       break;
+               }
+
+               pci_read_config_dword(devno, PCI_BASE_ADDRESS_0 + (region * 4), &iobase);
                iobase &= ~0xf;
 
                debug ("rtl8169: REALTEK RTL8169 @0x%x\n", iobase);