projects
/
oweals
/
u-boot.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
net: e1000: split e1000_read_mac_addr
[oweals/u-boot.git]
/
drivers
/
net
/
pch_gbe.c
diff --git
a/drivers/net/pch_gbe.c
b/drivers/net/pch_gbe.c
index dfc01000fc4ca380ea413fcf9373c397acd68760..8866f6632fd22151e30dd2682f051921c6e85854 100644
(file)
--- a/
drivers/net/pch_gbe.c
+++ b/
drivers/net/pch_gbe.c
@@
-117,15
+117,17
@@
static void pch_gbe_rx_descs_init(struct udevice *dev)
memset(rx_desc, 0, sizeof(struct pch_gbe_rx_desc) * PCH_GBE_DESC_NUM);
for (i = 0; i < PCH_GBE_DESC_NUM; i++)
memset(rx_desc, 0, sizeof(struct pch_gbe_rx_desc) * PCH_GBE_DESC_NUM);
for (i = 0; i < PCH_GBE_DESC_NUM; i++)
- rx_desc
->buffer_addr = pci_phys_to_mem(priv->bdf
,
-
(u32)(priv->rx_buff[i])
);
+ rx_desc
[i].buffer_addr = dm_pci_virt_to_mem(priv->dev
,
+
priv->rx_buff[i]
);
- writel(pci_phys_to_mem(priv->bdf, (u32)rx_desc),
+ flush_dcache_range((ulong)rx_desc, (ulong)&rx_desc[PCH_GBE_DESC_NUM]);
+
+ writel(dm_pci_virt_to_mem(priv->dev, rx_desc),
&mac_regs->rx_dsc_base);
writel(sizeof(struct pch_gbe_rx_desc) * (PCH_GBE_DESC_NUM - 1),
&mac_regs->rx_dsc_size);
&mac_regs->rx_dsc_base);
writel(sizeof(struct pch_gbe_rx_desc) * (PCH_GBE_DESC_NUM - 1),
&mac_regs->rx_dsc_size);
- writel(
pci_phys_to_mem(priv->bdf, (u32)(rx_desc + 1)
),
+ writel(
dm_pci_virt_to_mem(priv->dev, rx_desc + 1
),
&mac_regs->rx_dsc_sw_p);
}
&mac_regs->rx_dsc_sw_p);
}
@@
-137,11
+139,13
@@
static void pch_gbe_tx_descs_init(struct udevice *dev)
memset(tx_desc, 0, sizeof(struct pch_gbe_tx_desc) * PCH_GBE_DESC_NUM);
memset(tx_desc, 0, sizeof(struct pch_gbe_tx_desc) * PCH_GBE_DESC_NUM);
- writel(pci_phys_to_mem(priv->bdf, (u32)tx_desc),
+ flush_dcache_range((ulong)tx_desc, (ulong)&tx_desc[PCH_GBE_DESC_NUM]);
+
+ writel(dm_pci_virt_to_mem(priv->dev, tx_desc),
&mac_regs->tx_dsc_base);
writel(sizeof(struct pch_gbe_tx_desc) * (PCH_GBE_DESC_NUM - 1),
&mac_regs->tx_dsc_size);
&mac_regs->tx_dsc_base);
writel(sizeof(struct pch_gbe_tx_desc) * (PCH_GBE_DESC_NUM - 1),
&mac_regs->tx_dsc_size);
- writel(
pci_phys_to_mem(priv->bdf, (u32)(tx_desc + 1)
),
+ writel(
dm_pci_virt_to_mem(priv->dev, tx_desc + 1
),
&mac_regs->tx_dsc_sw_p);
}
&mac_regs->tx_dsc_sw_p);
}
@@
-245,24
+249,28
@@
static int pch_gbe_send(struct udevice *dev, void *packet, int length)
u32 int_st;
ulong start;
u32 int_st;
ulong start;
+ flush_dcache_range((ulong)packet, (ulong)packet + length);
+
tx_head = &priv->tx_desc[0];
tx_desc = &priv->tx_desc[priv->tx_idx];
if (length < 64)
frame_ctrl |= PCH_GBE_TXD_CTRL_APAD;
tx_head = &priv->tx_desc[0];
tx_desc = &priv->tx_desc[priv->tx_idx];
if (length < 64)
frame_ctrl |= PCH_GBE_TXD_CTRL_APAD;
- tx_desc->buffer_addr =
pci_phys_to_mem(priv->bdf, (u32)
packet);
+ tx_desc->buffer_addr =
dm_pci_virt_to_mem(priv->dev,
packet);
tx_desc->length = length;
tx_desc->tx_words_eob = length + 3;
tx_desc->tx_frame_ctrl = frame_ctrl;
tx_desc->dma_status = 0;
tx_desc->gbec_status = 0;
tx_desc->length = length;
tx_desc->tx_words_eob = length + 3;
tx_desc->tx_frame_ctrl = frame_ctrl;
tx_desc->dma_status = 0;
tx_desc->gbec_status = 0;
+ flush_dcache_range((ulong)tx_desc, (ulong)&tx_desc[1]);
+
/* Test the wrap-around condition */
if (++priv->tx_idx >= PCH_GBE_DESC_NUM)
priv->tx_idx = 0;
/* Test the wrap-around condition */
if (++priv->tx_idx >= PCH_GBE_DESC_NUM)
priv->tx_idx = 0;
- writel(
pci_phys_to_mem(priv->bdf, (u32)(tx_head + priv->tx_idx)
),
+ writel(
dm_pci_virt_to_mem(priv->dev, tx_head + priv->tx_idx
),
&mac_regs->tx_dsc_sw_p);
start = get_timer(0);
&mac_regs->tx_dsc_sw_p);
start = get_timer(0);
@@
-283,7
+291,8
@@
static int pch_gbe_recv(struct udevice *dev, int flags, uchar **packetp)
struct pch_gbe_priv *priv = dev_get_priv(dev);
struct pch_gbe_regs *mac_regs = priv->mac_regs;
struct pch_gbe_rx_desc *rx_desc;
struct pch_gbe_priv *priv = dev_get_priv(dev);
struct pch_gbe_regs *mac_regs = priv->mac_regs;
struct pch_gbe_rx_desc *rx_desc;
- u32 hw_desc, buffer_addr, length;
+ ulong hw_desc, length;
+ void *buffer;
rx_desc = &priv->rx_desc[priv->rx_idx];
rx_desc = &priv->rx_desc[priv->rx_idx];
@@
-291,12
+300,16
@@
static int pch_gbe_recv(struct udevice *dev, int flags, uchar **packetp)
hw_desc = readl(&mac_regs->rx_dsc_hw_p_hld);
/* Just return if not receiving any packet */
hw_desc = readl(&mac_regs->rx_dsc_hw_p_hld);
/* Just return if not receiving any packet */
- if (
(u32)rx_desc
== hw_desc)
+ if (
virt_to_phys(rx_desc)
== hw_desc)
return -EAGAIN;
return -EAGAIN;
- buffer_addr = pci_mem_to_phys(priv->bdf, rx_desc->buffer_addr);
- *packetp = (uchar *)buffer_addr;
+ /* Invalidate the descriptor */
+ invalidate_dcache_range((ulong)rx_desc, (ulong)&rx_desc[1]);
+
length = rx_desc->rx_words_eob - 3 - ETH_FCS_LEN;
length = rx_desc->rx_words_eob - 3 - ETH_FCS_LEN;
+ buffer = dm_pci_mem_to_virt(priv->dev, rx_desc->buffer_addr, length, 0);
+ invalidate_dcache_range((ulong)buffer, (ulong)buffer + length);
+ *packetp = (uchar *)buffer;
return length;
}
return length;
}
@@
-315,7
+328,7
@@
static int pch_gbe_free_pkt(struct udevice *dev, uchar *packet, int length)
if (++rx_swp >= PCH_GBE_DESC_NUM)
rx_swp = 0;
if (++rx_swp >= PCH_GBE_DESC_NUM)
rx_swp = 0;
- writel(
pci_phys_to_mem(priv->bdf, (u32)(rx_head + rx_swp)
),
+ writel(
dm_pci_virt_to_mem(priv->dev, rx_head + rx_swp
),
&mac_regs->rx_dsc_sw_p);
return 0;
&mac_regs->rx_dsc_sw_p);
return 0;
@@
-386,7
+399,7
@@
static int pch_gbe_mdio_init(const char *name, struct pch_gbe_regs *mac_regs)
bus->read = pch_gbe_mdio_read;
bus->write = pch_gbe_mdio_write;
bus->read = pch_gbe_mdio_read;
bus->write = pch_gbe_mdio_write;
- s
printf
(bus->name, name);
+ s
trcpy
(bus->name, name);
bus->priv = (void *)mac_regs;
bus->priv = (void *)mac_regs;
@@
-421,10
+434,8
@@
int pch_gbe_probe(struct udevice *dev)
{
struct pch_gbe_priv *priv;
struct eth_pdata *plat = dev_get_platdata(dev);
{
struct pch_gbe_priv *priv;
struct eth_pdata *plat = dev_get_platdata(dev);
- pci_dev_t devno;
- u32 iobase;
-
- devno = pci_get_bdf(dev);
+ void *iobase;
+ int err;
/*
* The priv structure contains the descriptors and frame buffers which
/*
* The priv structure contains the descriptors and frame buffers which
@@
-433,13
+444,11
@@
int pch_gbe_probe(struct udevice *dev)
*/
priv = dev_get_priv(dev);
*/
priv = dev_get_priv(dev);
- priv->
bdf = devno
;
+ priv->
dev = dev
;
- pci_read_config_dword(devno, PCI_BASE_ADDRESS_1, &iobase);
- iobase &= PCI_BASE_ADDRESS_MEM_MASK;
- iobase = pci_mem_to_phys(devno, iobase);
+ iobase = dm_pci_map_bar(dev, PCI_BASE_ADDRESS_1, PCI_REGION_MEM);
- plat->iobase = iobase;
+ plat->iobase =
(ulong)
iobase;
priv->mac_regs = (struct pch_gbe_regs *)iobase;
/* Read MAC address from SROM and initialize dev->enetaddr with it */
priv->mac_regs = (struct pch_gbe_regs *)iobase;
/* Read MAC address from SROM and initialize dev->enetaddr with it */
@@
-449,6
+458,10
@@
int pch_gbe_probe(struct udevice *dev)
pch_gbe_mdio_init(dev->name, priv->mac_regs);
priv->bus = miiphy_get_dev_by_name(dev->name);
pch_gbe_mdio_init(dev->name, priv->mac_regs);
priv->bus = miiphy_get_dev_by_name(dev->name);
+ err = pch_gbe_reset(dev);
+ if (err)
+ return err;
+
return pch_gbe_phy_init(dev);
}
return pch_gbe_phy_init(dev);
}