Skip to content

Commit 28117b0

Browse files
committed
Merge branch 'ravb-r8a7795'
Simon Horman says: ==================== ravb: Add support for r8a7795 SoC please consider this series for net-next. It enhances the ravb driver to support the r8a7795 SoC. Changes: * Dropped RFC prefix * Details in changelog of individual patches Base: * net-next/master Availability: To aid review of this in conjunction with other EtherAVB changes the following branches are available in my renesas tree on kernel.org. * me/r8a7795-ravb-driver-v4: this series * me/r8a7795-ravb-pfc-v2: r8a7795 sh-pfc update for EthernetAVB * me/r8a7795-ravb-integration-v4: enable EthernetAVB on r8a7795 * me/r8a7795-ravb-driver-and-integration-v4.runtime: the above three branches with their runtime dependencies ==================== Signed-off-by: David S. Miller <[email protected]>
2 parents f8e1100 + 22d4df8 commit 28117b0

File tree

5 files changed

+184
-53
lines changed

5 files changed

+184
-53
lines changed

Documentation/devicetree/bindings/net/renesas,ravb.txt

Lines changed: 62 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,12 @@ interface contains.
66
Required properties:
77
- compatible: "renesas,etheravb-r8a7790" if the device is a part of R8A7790 SoC.
88
"renesas,etheravb-r8a7794" if the device is a part of R8A7794 SoC.
9+
"renesas,etheravb-r8a7795" if the device is a part of R8A7795 SoC.
910
- reg: offset and length of (1) the register block and (2) the stream buffer.
10-
- interrupts: interrupt specifier for the sole interrupt.
11+
- interrupts: A list of interrupt-specifiers, one for each entry in
12+
interrupt-names.
13+
If interrupt-names is not present, an interrupt specifier
14+
for a single muxed interrupt.
1115
- phy-mode: see ethernet.txt file in the same directory.
1216
- phy-handle: see ethernet.txt file in the same directory.
1317
- #address-cells: number of address cells for the MDIO bus, must be equal to 1.
@@ -18,6 +22,12 @@ Required properties:
1822
Optional properties:
1923
- interrupt-parent: the phandle for the interrupt controller that services
2024
interrupts for this device.
25+
- interrupt-names: A list of interrupt names.
26+
For the R8A7795 SoC this property is mandatory;
27+
it should include one entry per channel, named "ch%u",
28+
where %u is the channel number ranging from 0 to 24.
29+
For other SoCs this property is optional; if present
30+
it should contain "mux" for a single muxed interrupt.
2131
- pinctrl-names: pin configuration state name ("default").
2232
- renesas,no-ether-link: boolean, specify when a board does not provide a proper
2333
AVB_LINK signal.
@@ -27,22 +37,67 @@ Optional properties:
2737
Example:
2838

2939
ethernet@e6800000 {
30-
compatible = "renesas,etheravb-r8a7790";
31-
reg = <0 0xe6800000 0 0x800>, <0 0xee0e8000 0 0x4000>;
40+
compatible = "renesas,etheravb-r8a7795";
41+
reg = <0 0xe6800000 0 0x800>, <0 0xe6a00000 0 0x10000>;
3242
interrupt-parent = <&gic>;
33-
interrupts = <0 163 IRQ_TYPE_LEVEL_HIGH>;
34-
clocks = <&mstp8_clks R8A7790_CLK_ETHERAVB>;
35-
phy-mode = "rmii";
43+
interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>,
44+
<GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>,
45+
<GIC_SPI 41 IRQ_TYPE_LEVEL_HIGH>,
46+
<GIC_SPI 42 IRQ_TYPE_LEVEL_HIGH>,
47+
<GIC_SPI 43 IRQ_TYPE_LEVEL_HIGH>,
48+
<GIC_SPI 44 IRQ_TYPE_LEVEL_HIGH>,
49+
<GIC_SPI 45 IRQ_TYPE_LEVEL_HIGH>,
50+
<GIC_SPI 46 IRQ_TYPE_LEVEL_HIGH>,
51+
<GIC_SPI 47 IRQ_TYPE_LEVEL_HIGH>,
52+
<GIC_SPI 48 IRQ_TYPE_LEVEL_HIGH>,
53+
<GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH>,
54+
<GIC_SPI 50 IRQ_TYPE_LEVEL_HIGH>,
55+
<GIC_SPI 51 IRQ_TYPE_LEVEL_HIGH>,
56+
<GIC_SPI 52 IRQ_TYPE_LEVEL_HIGH>,
57+
<GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH>,
58+
<GIC_SPI 54 IRQ_TYPE_LEVEL_HIGH>,
59+
<GIC_SPI 55 IRQ_TYPE_LEVEL_HIGH>,
60+
<GIC_SPI 56 IRQ_TYPE_LEVEL_HIGH>,
61+
<GIC_SPI 57 IRQ_TYPE_LEVEL_HIGH>,
62+
<GIC_SPI 58 IRQ_TYPE_LEVEL_HIGH>,
63+
<GIC_SPI 59 IRQ_TYPE_LEVEL_HIGH>,
64+
<GIC_SPI 60 IRQ_TYPE_LEVEL_HIGH>,
65+
<GIC_SPI 61 IRQ_TYPE_LEVEL_HIGH>,
66+
<GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH>,
67+
<GIC_SPI 63 IRQ_TYPE_LEVEL_HIGH>;
68+
interrupt-names = "ch0", "ch1", "ch2", "ch3",
69+
"ch4", "ch5", "ch6", "ch7",
70+
"ch8", "ch9", "ch10", "ch11",
71+
"ch12", "ch13", "ch14", "ch15",
72+
"ch16", "ch17", "ch18", "ch19",
73+
"ch20", "ch21", "ch22", "ch23",
74+
"ch24";
75+
clocks = <&mstp8_clks R8A7795_CLK_ETHERAVB>;
76+
power-domains = <&cpg_clocks>;
77+
phy-mode = "rgmii-id";
3678
phy-handle = <&phy0>;
79+
3780
pinctrl-0 = <&ether_pins>;
3881
pinctrl-names = "default";
3982
renesas,no-ether-link;
4083
#address-cells = <1>;
4184
#size-cells = <0>;
4285

4386
phy0: ethernet-phy@0 {
87+
rxc-skew-ps = <900>;
88+
rxdv-skew-ps = <0>;
89+
rxd0-skew-ps = <0>;
90+
rxd1-skew-ps = <0>;
91+
rxd2-skew-ps = <0>;
92+
rxd3-skew-ps = <0>;
93+
txc-skew-ps = <900>;
94+
txen-skew-ps = <0>;
95+
txd0-skew-ps = <0>;
96+
txd1-skew-ps = <0>;
97+
txd2-skew-ps = <0>;
98+
txd3-skew-ps = <0>;
4499
reg = <0>;
45100
interrupt-parent = <&gpio2>;
46-
interrupts = <15 IRQ_TYPE_LEVEL_LOW>;
101+
interrupts = <11 IRQ_TYPE_LEVEL_LOW>;
47102
};
48103
};

drivers/net/ethernet/renesas/ravb.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -766,6 +766,11 @@ struct ravb_ptp {
766766
struct ravb_ptp_perout perout[N_PER_OUT];
767767
};
768768

769+
enum ravb_chip_id {
770+
RCAR_GEN2,
771+
RCAR_GEN3,
772+
};
773+
769774
struct ravb_private {
770775
struct net_device *ndev;
771776
struct platform_device *pdev;
@@ -806,6 +811,8 @@ struct ravb_private {
806811
int msg_enable;
807812
int speed;
808813
int duplex;
814+
int emac_irq;
815+
enum ravb_chip_id chip_id;
809816

810817
unsigned no_avb_link:1;
811818
unsigned avb_link_active_low:1;

drivers/net/ethernet/renesas/ravb_main.c

Lines changed: 74 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -201,15 +201,15 @@ static void ravb_ring_free(struct net_device *ndev, int q)
201201
if (priv->rx_ring[q]) {
202202
ring_size = sizeof(struct ravb_ex_rx_desc) *
203203
(priv->num_rx_ring[q] + 1);
204-
dma_free_coherent(NULL, ring_size, priv->rx_ring[q],
204+
dma_free_coherent(ndev->dev.parent, ring_size, priv->rx_ring[q],
205205
priv->rx_desc_dma[q]);
206206
priv->rx_ring[q] = NULL;
207207
}
208208

209209
if (priv->tx_ring[q]) {
210210
ring_size = sizeof(struct ravb_tx_desc) *
211211
(priv->num_tx_ring[q] * NUM_TX_DESC + 1);
212-
dma_free_coherent(NULL, ring_size, priv->tx_ring[q],
212+
dma_free_coherent(ndev->dev.parent, ring_size, priv->tx_ring[q],
213213
priv->tx_desc_dma[q]);
214214
priv->tx_ring[q] = NULL;
215215
}
@@ -240,13 +240,13 @@ static void ravb_ring_format(struct net_device *ndev, int q)
240240
rx_desc = &priv->rx_ring[q][i];
241241
/* The size of the buffer should be on 16-byte boundary. */
242242
rx_desc->ds_cc = cpu_to_le16(ALIGN(PKT_BUF_SZ, 16));
243-
dma_addr = dma_map_single(&ndev->dev, priv->rx_skb[q][i]->data,
243+
dma_addr = dma_map_single(ndev->dev.parent, priv->rx_skb[q][i]->data,
244244
ALIGN(PKT_BUF_SZ, 16),
245245
DMA_FROM_DEVICE);
246246
/* We just set the data size to 0 for a failed mapping which
247247
* should prevent DMA from happening...
248248
*/
249-
if (dma_mapping_error(&ndev->dev, dma_addr))
249+
if (dma_mapping_error(ndev->dev.parent, dma_addr))
250250
rx_desc->ds_cc = cpu_to_le16(0);
251251
rx_desc->dptr = cpu_to_le32(dma_addr);
252252
rx_desc->die_dt = DT_FEMPTY;
@@ -309,7 +309,7 @@ static int ravb_ring_init(struct net_device *ndev, int q)
309309

310310
/* Allocate all RX descriptors. */
311311
ring_size = sizeof(struct ravb_ex_rx_desc) * (priv->num_rx_ring[q] + 1);
312-
priv->rx_ring[q] = dma_alloc_coherent(NULL, ring_size,
312+
priv->rx_ring[q] = dma_alloc_coherent(ndev->dev.parent, ring_size,
313313
&priv->rx_desc_dma[q],
314314
GFP_KERNEL);
315315
if (!priv->rx_ring[q])
@@ -320,7 +320,7 @@ static int ravb_ring_init(struct net_device *ndev, int q)
320320
/* Allocate all TX descriptors. */
321321
ring_size = sizeof(struct ravb_tx_desc) *
322322
(priv->num_tx_ring[q] * NUM_TX_DESC + 1);
323-
priv->tx_ring[q] = dma_alloc_coherent(NULL, ring_size,
323+
priv->tx_ring[q] = dma_alloc_coherent(ndev->dev.parent, ring_size,
324324
&priv->tx_desc_dma[q],
325325
GFP_KERNEL);
326326
if (!priv->tx_ring[q])
@@ -443,7 +443,7 @@ static int ravb_tx_free(struct net_device *ndev, int q)
443443
size = le16_to_cpu(desc->ds_tagl) & TX_DS;
444444
/* Free the original skb. */
445445
if (priv->tx_skb[q][entry / NUM_TX_DESC]) {
446-
dma_unmap_single(&ndev->dev, le32_to_cpu(desc->dptr),
446+
dma_unmap_single(ndev->dev.parent, le32_to_cpu(desc->dptr),
447447
size, DMA_TO_DEVICE);
448448
/* Last packet descriptor? */
449449
if (entry % NUM_TX_DESC == NUM_TX_DESC - 1) {
@@ -546,7 +546,7 @@ static bool ravb_rx(struct net_device *ndev, int *quota, int q)
546546

547547
skb = priv->rx_skb[q][entry];
548548
priv->rx_skb[q][entry] = NULL;
549-
dma_unmap_single(&ndev->dev, le32_to_cpu(desc->dptr),
549+
dma_unmap_single(ndev->dev.parent, le32_to_cpu(desc->dptr),
550550
ALIGN(PKT_BUF_SZ, 16),
551551
DMA_FROM_DEVICE);
552552
get_ts &= (q == RAVB_NC) ?
@@ -586,14 +586,14 @@ static bool ravb_rx(struct net_device *ndev, int *quota, int q)
586586
if (!skb)
587587
break; /* Better luck next round. */
588588
ravb_set_buffer_align(skb);
589-
dma_addr = dma_map_single(&ndev->dev, skb->data,
589+
dma_addr = dma_map_single(ndev->dev.parent, skb->data,
590590
le16_to_cpu(desc->ds_cc),
591591
DMA_FROM_DEVICE);
592592
skb_checksum_none_assert(skb);
593593
/* We just set the data size to 0 for a failed mapping
594594
* which should prevent DMA from happening...
595595
*/
596-
if (dma_mapping_error(&ndev->dev, dma_addr))
596+
if (dma_mapping_error(ndev->dev.parent, dma_addr))
597597
desc->ds_cc = cpu_to_le16(0);
598598
desc->dptr = cpu_to_le32(dma_addr);
599599
priv->rx_skb[q][entry] = skb;
@@ -889,6 +889,22 @@ static int ravb_phy_init(struct net_device *ndev)
889889
return -ENOENT;
890890
}
891891

892+
/* This driver only support 10/100Mbit speeds on Gen3
893+
* at this time.
894+
*/
895+
if (priv->chip_id == RCAR_GEN3) {
896+
int err;
897+
898+
err = phy_set_max_speed(phydev, SPEED_100);
899+
if (err) {
900+
netdev_err(ndev, "failed to limit PHY to 100Mbit/s\n");
901+
phy_disconnect(phydev);
902+
return err;
903+
}
904+
905+
netdev_info(ndev, "limited PHY to 100Mbit/s\n");
906+
}
907+
892908
netdev_info(ndev, "attached PHY %d (IRQ %d) to driver %s\n",
893909
phydev->addr, phydev->irq, phydev->drv->name);
894910

@@ -1197,6 +1213,15 @@ static int ravb_open(struct net_device *ndev)
11971213
goto out_napi_off;
11981214
}
11991215

1216+
if (priv->chip_id == RCAR_GEN3) {
1217+
error = request_irq(priv->emac_irq, ravb_interrupt,
1218+
IRQF_SHARED, ndev->name, ndev);
1219+
if (error) {
1220+
netdev_err(ndev, "cannot request IRQ\n");
1221+
goto out_free_irq;
1222+
}
1223+
}
1224+
12001225
/* Device init */
12011226
error = ravb_dmac_init(ndev);
12021227
if (error)
@@ -1220,6 +1245,7 @@ static int ravb_open(struct net_device *ndev)
12201245
ravb_ptp_stop(ndev);
12211246
out_free_irq:
12221247
free_irq(ndev->irq, ndev);
1248+
free_irq(priv->emac_irq, ndev);
12231249
out_napi_off:
12241250
napi_disable(&priv->napi[RAVB_NC]);
12251251
napi_disable(&priv->napi[RAVB_BE]);
@@ -1300,8 +1326,8 @@ static netdev_tx_t ravb_start_xmit(struct sk_buff *skb, struct net_device *ndev)
13001326
entry / NUM_TX_DESC * DPTR_ALIGN;
13011327
len = PTR_ALIGN(skb->data, DPTR_ALIGN) - skb->data;
13021328
memcpy(buffer, skb->data, len);
1303-
dma_addr = dma_map_single(&ndev->dev, buffer, len, DMA_TO_DEVICE);
1304-
if (dma_mapping_error(&ndev->dev, dma_addr))
1329+
dma_addr = dma_map_single(ndev->dev.parent, buffer, len, DMA_TO_DEVICE);
1330+
if (dma_mapping_error(ndev->dev.parent, dma_addr))
13051331
goto drop;
13061332

13071333
desc = &priv->tx_ring[q][entry];
@@ -1310,8 +1336,8 @@ static netdev_tx_t ravb_start_xmit(struct sk_buff *skb, struct net_device *ndev)
13101336

13111337
buffer = skb->data + len;
13121338
len = skb->len - len;
1313-
dma_addr = dma_map_single(&ndev->dev, buffer, len, DMA_TO_DEVICE);
1314-
if (dma_mapping_error(&ndev->dev, dma_addr))
1339+
dma_addr = dma_map_single(ndev->dev.parent, buffer, len, DMA_TO_DEVICE);
1340+
if (dma_mapping_error(ndev->dev.parent, dma_addr))
13151341
goto unmap;
13161342

13171343
desc++;
@@ -1323,7 +1349,7 @@ static netdev_tx_t ravb_start_xmit(struct sk_buff *skb, struct net_device *ndev)
13231349
ts_skb = kmalloc(sizeof(*ts_skb), GFP_ATOMIC);
13241350
if (!ts_skb) {
13251351
desc--;
1326-
dma_unmap_single(&ndev->dev, dma_addr, len,
1352+
dma_unmap_single(ndev->dev.parent, dma_addr, len,
13271353
DMA_TO_DEVICE);
13281354
goto unmap;
13291355
}
@@ -1358,7 +1384,7 @@ static netdev_tx_t ravb_start_xmit(struct sk_buff *skb, struct net_device *ndev)
13581384
return NETDEV_TX_OK;
13591385

13601386
unmap:
1361-
dma_unmap_single(&ndev->dev, le32_to_cpu(desc->dptr),
1387+
dma_unmap_single(ndev->dev.parent, le32_to_cpu(desc->dptr),
13621388
le16_to_cpu(desc->ds_tagl), DMA_TO_DEVICE);
13631389
drop:
13641390
dev_kfree_skb_any(skb);
@@ -1625,10 +1651,20 @@ static int ravb_mdio_release(struct ravb_private *priv)
16251651
return 0;
16261652
}
16271653

1654+
static const struct of_device_id ravb_match_table[] = {
1655+
{ .compatible = "renesas,etheravb-r8a7790", .data = (void *)RCAR_GEN2 },
1656+
{ .compatible = "renesas,etheravb-r8a7794", .data = (void *)RCAR_GEN2 },
1657+
{ .compatible = "renesas,etheravb-r8a7795", .data = (void *)RCAR_GEN3 },
1658+
{ }
1659+
};
1660+
MODULE_DEVICE_TABLE(of, ravb_match_table);
1661+
16281662
static int ravb_probe(struct platform_device *pdev)
16291663
{
16301664
struct device_node *np = pdev->dev.of_node;
1665+
const struct of_device_id *match;
16311666
struct ravb_private *priv;
1667+
enum ravb_chip_id chip_id;
16321668
struct net_device *ndev;
16331669
int error, irq, q;
16341670
struct resource *res;
@@ -1657,7 +1693,14 @@ static int ravb_probe(struct platform_device *pdev)
16571693
/* The Ether-specific entries in the device structure. */
16581694
ndev->base_addr = res->start;
16591695
ndev->dma = -1;
1660-
irq = platform_get_irq(pdev, 0);
1696+
1697+
match = of_match_device(of_match_ptr(ravb_match_table), &pdev->dev);
1698+
chip_id = (enum ravb_chip_id)match->data;
1699+
1700+
if (chip_id == RCAR_GEN3)
1701+
irq = platform_get_irq_byname(pdev, "ch22");
1702+
else
1703+
irq = platform_get_irq(pdev, 0);
16611704
if (irq < 0) {
16621705
error = irq;
16631706
goto out_release;
@@ -1688,6 +1731,17 @@ static int ravb_probe(struct platform_device *pdev)
16881731
priv->avb_link_active_low =
16891732
of_property_read_bool(np, "renesas,ether-link-active-low");
16901733

1734+
if (chip_id == RCAR_GEN3) {
1735+
irq = platform_get_irq_byname(pdev, "ch24");
1736+
if (irq < 0) {
1737+
error = irq;
1738+
goto out_release;
1739+
}
1740+
priv->emac_irq = irq;
1741+
}
1742+
1743+
priv->chip_id = chip_id;
1744+
16911745
/* Set function */
16921746
ndev->netdev_ops = &ravb_netdev_ops;
16931747
ndev->ethtool_ops = &ravb_ethtool_ops;
@@ -1708,7 +1762,7 @@ static int ravb_probe(struct platform_device *pdev)
17081762

17091763
/* Allocate descriptor base address table */
17101764
priv->desc_bat_size = sizeof(struct ravb_desc) * DBAT_ENTRY_NUM;
1711-
priv->desc_bat = dma_alloc_coherent(NULL, priv->desc_bat_size,
1765+
priv->desc_bat = dma_alloc_coherent(ndev->dev.parent, priv->desc_bat_size,
17121766
&priv->desc_bat_dma, GFP_KERNEL);
17131767
if (!priv->desc_bat) {
17141768
dev_err(&ndev->dev,
@@ -1763,7 +1817,7 @@ static int ravb_probe(struct platform_device *pdev)
17631817
netif_napi_del(&priv->napi[RAVB_BE]);
17641818
ravb_mdio_release(priv);
17651819
out_dma_free:
1766-
dma_free_coherent(NULL, priv->desc_bat_size, priv->desc_bat,
1820+
dma_free_coherent(ndev->dev.parent, priv->desc_bat_size, priv->desc_bat,
17671821
priv->desc_bat_dma);
17681822
out_release:
17691823
if (ndev)
@@ -1779,7 +1833,7 @@ static int ravb_remove(struct platform_device *pdev)
17791833
struct net_device *ndev = platform_get_drvdata(pdev);
17801834
struct ravb_private *priv = netdev_priv(ndev);
17811835

1782-
dma_free_coherent(NULL, priv->desc_bat_size, priv->desc_bat,
1836+
dma_free_coherent(ndev->dev.parent, priv->desc_bat_size, priv->desc_bat,
17831837
priv->desc_bat_dma);
17841838
/* Set reset mode */
17851839
ravb_write(ndev, CCC_OPC_RESET, CCC);
@@ -1818,13 +1872,6 @@ static const struct dev_pm_ops ravb_dev_pm_ops = {
18181872
#define RAVB_PM_OPS NULL
18191873
#endif
18201874

1821-
static const struct of_device_id ravb_match_table[] = {
1822-
{ .compatible = "renesas,etheravb-r8a7790" },
1823-
{ .compatible = "renesas,etheravb-r8a7794" },
1824-
{ }
1825-
};
1826-
MODULE_DEVICE_TABLE(of, ravb_match_table);
1827-
18281875
static struct platform_driver ravb_driver = {
18291876
.probe = ravb_probe,
18301877
.remove = ravb_remove,

0 commit comments

Comments
 (0)