Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ba3e2084 authored by David S. Miller's avatar David S. Miller
Browse files


Conflicts:
	net/ipv6/xfrm6_output.c
	net/openvswitch/flow_netlink.c
	net/openvswitch/vport-gre.c
	net/openvswitch/vport-vxlan.c
	net/openvswitch/vport.c
	net/openvswitch/vport.h

The openvswitch conflicts were overlapping changes.  One was
the egress tunnel info fix in 'net' and the other was the
vport ->send() op simplification in 'net-next'.

The xfrm6_output.c conflicts was also a simplification
overlapping a bug fix.

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents a72c9512 ce9d9b8e
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -46,6 +46,7 @@ Required properties:
Optional properties:
Optional properties:
- dual_emac_res_vlan	: Specifies VID to be used to segregate the ports
- dual_emac_res_vlan	: Specifies VID to be used to segregate the ports
- mac-address		: See ethernet.txt file in the same directory
- mac-address		: See ethernet.txt file in the same directory
- phy-handle		: See ethernet.txt file in the same directory


Note: "ti,hwmods" field is used to fetch the base address and irq
Note: "ti,hwmods" field is used to fetch the base address and irq
resources from TI, omap hwmod data base during device registration.
resources from TI, omap hwmod data base during device registration.
+24 −0
Original line number Original line Diff line number Diff line
SMSC LAN87xx Ethernet PHY

Some boards require special tuning values. Configure them
through an Ethernet OF device node.

Optional properties:

- smsc,disable-energy-detect:
  If set, do not enable energy detect mode for the SMSC phy.
  default: enable energy detect mode

Examples:
smsc phy with disabled energy detect mode on an am335x based board.
&davinci_mdio {
	pinctrl-names = "default", "sleep";
	pinctrl-0 = <&davinci_mdio_default>;
	pinctrl-1 = <&davinci_mdio_sleep>;
	status = "okay";

	ethernetphy0: ethernet-phy@0 {
		reg = <0>;
		smsc,disable-energy-detect;
	};
};
+8 −12
Original line number Original line Diff line number Diff line
@@ -1247,7 +1247,7 @@ static void
l2_pull_iqueue(struct FsmInst *fi, int event, void *arg)
l2_pull_iqueue(struct FsmInst *fi, int event, void *arg)
{
{
	struct PStack *st = fi->userdata;
	struct PStack *st = fi->userdata;
	struct sk_buff *skb;
	struct sk_buff *skb, *nskb;
	struct Layer2 *l2 = &st->l2;
	struct Layer2 *l2 = &st->l2;
	u_char header[MAX_HEADER_LEN];
	u_char header[MAX_HEADER_LEN];
	int i, hdr_space_needed;
	int i, hdr_space_needed;
@@ -1262,15 +1262,11 @@ l2_pull_iqueue(struct FsmInst *fi, int event, void *arg)
		return;
		return;


	hdr_space_needed = l2headersize(l2, 0);
	hdr_space_needed = l2headersize(l2, 0);
	if (hdr_space_needed > skb_headroom(skb)) {
	nskb = skb_realloc_headroom(skb, hdr_space_needed);
		struct sk_buff *orig_skb = skb;
	if (!nskb) {

		skb_queue_head(&l2->i_queue, skb);
		skb = skb_realloc_headroom(skb, hdr_space_needed);
		if (!skb) {
			dev_kfree_skb(orig_skb);
		return;
		return;
	}
	}
	}
	spin_lock_irqsave(&l2->lock, flags);
	spin_lock_irqsave(&l2->lock, flags);
	if (test_bit(FLG_MOD128, &l2->flag))
	if (test_bit(FLG_MOD128, &l2->flag))
		p1 = (l2->vs - l2->va) % 128;
		p1 = (l2->vs - l2->va) % 128;
@@ -1282,7 +1278,7 @@ l2_pull_iqueue(struct FsmInst *fi, int event, void *arg)
		       p1);
		       p1);
		dev_kfree_skb(l2->windowar[p1]);
		dev_kfree_skb(l2->windowar[p1]);
	}
	}
	l2->windowar[p1] = skb_clone(skb, GFP_ATOMIC);
	l2->windowar[p1] = skb;


	i = sethdraddr(&st->l2, header, CMD);
	i = sethdraddr(&st->l2, header, CMD);


@@ -1295,8 +1291,8 @@ l2_pull_iqueue(struct FsmInst *fi, int event, void *arg)
		l2->vs = (l2->vs + 1) % 8;
		l2->vs = (l2->vs + 1) % 8;
	}
	}
	spin_unlock_irqrestore(&l2->lock, flags);
	spin_unlock_irqrestore(&l2->lock, flags);
	memcpy(skb_push(skb, i), header, i);
	memcpy(skb_push(nskb, i), header, i);
	st->l2.l2l1(st, PH_PULL | INDICATION, skb);
	st->l2.l2l1(st, PH_PULL | INDICATION, nskb);
	test_and_clear_bit(FLG_ACK_PEND, &st->l2.flag);
	test_and_clear_bit(FLG_ACK_PEND, &st->l2.flag);
	if (!test_and_set_bit(FLG_T200_RUN, &st->l2.flag)) {
	if (!test_and_set_bit(FLG_T200_RUN, &st->l2.flag)) {
		FsmDelTimer(&st->l2.t203, 13);
		FsmDelTimer(&st->l2.t203, 13);
+20 −34
Original line number Original line Diff line number Diff line
@@ -1476,7 +1476,7 @@ static void
l2_pull_iqueue(struct FsmInst *fi, int event, void *arg)
l2_pull_iqueue(struct FsmInst *fi, int event, void *arg)
{
{
	struct layer2	*l2 = fi->userdata;
	struct layer2	*l2 = fi->userdata;
	struct sk_buff	*skb, *nskb, *oskb;
	struct sk_buff	*skb, *nskb;
	u_char		header[MAX_L2HEADER_LEN];
	u_char		header[MAX_L2HEADER_LEN];
	u_int		i, p1;
	u_int		i, p1;


@@ -1486,11 +1486,26 @@ l2_pull_iqueue(struct FsmInst *fi, int event, void *arg)
	skb = skb_dequeue(&l2->i_queue);
	skb = skb_dequeue(&l2->i_queue);
	if (!skb)
	if (!skb)
		return;
		return;

	i = sethdraddr(l2, header, CMD);
	if (test_bit(FLG_MOD128, &l2->flag))
	if (test_bit(FLG_MOD128, &l2->flag)) {
		header[i++] = l2->vs << 1;
		header[i++] = l2->vr << 1;
	} else
		header[i++] = (l2->vr << 5) | (l2->vs << 1);
	nskb = skb_realloc_headroom(skb, i);
	if (!nskb) {
		printk(KERN_WARNING "%s: no headroom(%d) copy for IFrame\n",
		       mISDNDevName4ch(&l2->ch), i);
		skb_queue_head(&l2->i_queue, skb);
		return;
	}
	if (test_bit(FLG_MOD128, &l2->flag)) {
		p1 = (l2->vs - l2->va) % 128;
		p1 = (l2->vs - l2->va) % 128;
	else
		l2->vs = (l2->vs + 1) % 128;
	} else {
		p1 = (l2->vs - l2->va) % 8;
		p1 = (l2->vs - l2->va) % 8;
		l2->vs = (l2->vs + 1) % 8;
	}
	p1 = (p1 + l2->sow) % l2->window;
	p1 = (p1 + l2->sow) % l2->window;
	if (l2->windowar[p1]) {
	if (l2->windowar[p1]) {
		printk(KERN_WARNING "%s: l2 try overwrite ack queue entry %d\n",
		printk(KERN_WARNING "%s: l2 try overwrite ack queue entry %d\n",
@@ -1498,36 +1513,7 @@ l2_pull_iqueue(struct FsmInst *fi, int event, void *arg)
		dev_kfree_skb(l2->windowar[p1]);
		dev_kfree_skb(l2->windowar[p1]);
	}
	}
	l2->windowar[p1] = skb;
	l2->windowar[p1] = skb;
	i = sethdraddr(l2, header, CMD);
	if (test_bit(FLG_MOD128, &l2->flag)) {
		header[i++] = l2->vs << 1;
		header[i++] = l2->vr << 1;
		l2->vs = (l2->vs + 1) % 128;
	} else {
		header[i++] = (l2->vr << 5) | (l2->vs << 1);
		l2->vs = (l2->vs + 1) % 8;
	}

	nskb = skb_clone(skb, GFP_ATOMIC);
	p1 = skb_headroom(nskb);
	if (p1 >= i)
	memcpy(skb_push(nskb, i), header, i);
	memcpy(skb_push(nskb, i), header, i);
	else {
		printk(KERN_WARNING
		       "%s: L2 pull_iqueue skb header(%d/%d) too short\n",
		       mISDNDevName4ch(&l2->ch), i, p1);
		oskb = nskb;
		nskb = mI_alloc_skb(oskb->len + i, GFP_ATOMIC);
		if (!nskb) {
			dev_kfree_skb(oskb);
			printk(KERN_WARNING "%s: no skb mem in %s\n",
			       mISDNDevName4ch(&l2->ch), __func__);
			return;
		}
		memcpy(skb_put(nskb, i), header, i);
		memcpy(skb_put(nskb, oskb->len), oskb->data, oskb->len);
		dev_kfree_skb(oskb);
	}
	l2down(l2, PH_DATA_REQ, l2_newid(l2), nskb);
	l2down(l2, PH_DATA_REQ, l2_newid(l2), nskb);
	test_and_clear_bit(FLG_ACK_PEND, &l2->flag);
	test_and_clear_bit(FLG_ACK_PEND, &l2->flag);
	if (!test_and_set_bit(FLG_T200_RUN, &l2->flag)) {
	if (!test_and_set_bit(FLG_T200_RUN, &l2->flag)) {
+16 −4
Original line number Original line Diff line number Diff line
@@ -847,21 +847,25 @@ static int emac_probe(struct platform_device *pdev)
	if (ndev->irq == -ENXIO) {
	if (ndev->irq == -ENXIO) {
		netdev_err(ndev, "No irq resource\n");
		netdev_err(ndev, "No irq resource\n");
		ret = ndev->irq;
		ret = ndev->irq;
		goto out;
		goto out_iounmap;
	}
	}


	db->clk = devm_clk_get(&pdev->dev, NULL);
	db->clk = devm_clk_get(&pdev->dev, NULL);
	if (IS_ERR(db->clk)) {
	if (IS_ERR(db->clk)) {
		ret = PTR_ERR(db->clk);
		ret = PTR_ERR(db->clk);
		goto out;
		goto out_iounmap;
	}
	}


	clk_prepare_enable(db->clk);
	ret = clk_prepare_enable(db->clk);
	if (ret) {
		dev_err(&pdev->dev, "Error couldn't enable clock (%d)\n", ret);
		goto out_iounmap;
	}


	ret = sunxi_sram_claim(&pdev->dev);
	ret = sunxi_sram_claim(&pdev->dev);
	if (ret) {
	if (ret) {
		dev_err(&pdev->dev, "Error couldn't map SRAM to device\n");
		dev_err(&pdev->dev, "Error couldn't map SRAM to device\n");
		goto out;
		goto out_clk_disable_unprepare;
	}
	}


	db->phy_node = of_parse_phandle(np, "phy", 0);
	db->phy_node = of_parse_phandle(np, "phy", 0);
@@ -910,6 +914,10 @@ static int emac_probe(struct platform_device *pdev)


out_release_sram:
out_release_sram:
	sunxi_sram_release(&pdev->dev);
	sunxi_sram_release(&pdev->dev);
out_clk_disable_unprepare:
	clk_disable_unprepare(db->clk);
out_iounmap:
	iounmap(db->membase);
out:
out:
	dev_err(db->dev, "not found (%d).\n", ret);
	dev_err(db->dev, "not found (%d).\n", ret);


@@ -921,8 +929,12 @@ static int emac_probe(struct platform_device *pdev)
static int emac_remove(struct platform_device *pdev)
static int emac_remove(struct platform_device *pdev)
{
{
	struct net_device *ndev = platform_get_drvdata(pdev);
	struct net_device *ndev = platform_get_drvdata(pdev);
	struct emac_board_info *db = netdev_priv(ndev);


	unregister_netdev(ndev);
	unregister_netdev(ndev);
	sunxi_sram_release(&pdev->dev);
	clk_disable_unprepare(db->clk);
	iounmap(db->membase);
	free_netdev(ndev);
	free_netdev(ndev);


	dev_dbg(&pdev->dev, "released and freed device\n");
	dev_dbg(&pdev->dev, "released and freed device\n");
Loading