All of lore.kernel.org
 help / color / mirror / Atom feed
diff for duplicates of <CALx6S35gFDe+hiOtQqDUuzahkeh7vB3du3TN=noYefuDNGmCJw@mail.gmail.com>

diff --git a/a/1.txt b/N1/1.txt
index 0515b02..7e40db9 100644
--- a/a/1.txt
+++ b/N1/1.txt
@@ -1,612 +1,3 @@
-On Tue, Apr 5, 2016 at 9:47 AM, Jiri Benc <jbenc@redhat.com> wrote:
-> Implement VXLAN-GPE. Only COLLECT_METADATA is supported for now (it is
-> possible to support static configuration, too, if there is demand for it).
->
-> The GPE header parsing has to be moved before iptunnel_pull_header, as we
-> need to know the protocol.
->
-> v2: Removed what was called "L2 mode" in v1 of the patchset. Only "L3 mode"
->     (now called "raw mode") is added by this patch. This mode does not allow
->     Ethernet header to be encapsulated in VXLAN-GPE when using ip route to
->     specify the encapsulation, IP header is encapsulated instead. The patch
->     does support Ethernet to be encapsulated, though, using ETH_P_TEB in
->     skb->protocol. This will be utilized by other COLLECT_METADATA users
->     (openvswitch in particular).
->
->     If there is ever demand for Ethernet encapsulation with VXLAN-GPE using
->     ip route, it's easy to add a new flag switching the interface to
->     "Ethernet mode" (called "L2 mode" in v1 of this patchset). For now,
->     leave this out, it seems we don't need it.
->
->     Disallowed more flag combinations, especially RCO with GPE.
->     Added comment explaining that GBP and GPE cannot be set together.
->
-I requested input from VXLAN protocol experts on whether RCO is
-architecturally correct in VXLAN and whether we are using the right
-fields both on the mailing list and in WG meeting yesterday @IETF.
-Have not gotten any response, so I am going to assume all this is
-reasonable. I will add explicit support to VXLAN-RCO draft for
-VXLAN-GPE. The configuration option for RX RCO can be removed and RCO
-can be supported for VXLAN/VXLAN-GPE in same way. Presumably, GBP
-might make same assumptions but GBP format as defined for VXLAN isn't
-compatible with VXLAN-GPE.
-
-Tom
-
-> Signed-off-by: Jiri Benc <jbenc@redhat.com>
-> ---
->  drivers/net/vxlan.c          | 170 ++++++++++++++++++++++++++++++++++++++-----
->  include/net/vxlan.h          |  68 +++++++++++++++++
->  include/uapi/linux/if_link.h |   1 +
->  3 files changed, 222 insertions(+), 17 deletions(-)
->
-> diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c
-> index d62eebaa9720..51cccddfe403 100644
-> --- a/drivers/net/vxlan.c
-> +++ b/drivers/net/vxlan.c
-> @@ -1192,6 +1192,45 @@ out:
->         unparsed->vx_flags &= ~VXLAN_GBP_USED_BITS;
->  }
->
-> +static bool vxlan_parse_gpe_hdr(struct vxlanhdr *unparsed,
-> +                               __be32 *protocol,
-> +                               struct sk_buff *skb, u32 vxflags)
-> +{
-> +       struct vxlanhdr_gpe *gpe = (struct vxlanhdr_gpe *)unparsed;
-> +
-> +       /* Need to have Next Protocol set for interfaces in GPE mode. */
-> +       if (!gpe->np_applied)
-> +               return false;
-> +       /* "The initial version is 0. If a receiver does not support the
-> +        * version indicated it MUST drop the packet.
-> +        */
-> +       if (gpe->version != 0)
-> +               return false;
-> +       /* "When the O bit is set to 1, the packet is an OAM packet and OAM
-> +        * processing MUST occur." However, we don't implement OAM
-> +        * processing, thus drop the packet.
-> +        */
-> +       if (gpe->oam_flag)
-> +               return false;
-> +
-> +       switch (gpe->next_protocol) {
-> +       case VXLAN_GPE_NP_IPV4:
-> +               *protocol = htons(ETH_P_IP);
-> +               break;
-> +       case VXLAN_GPE_NP_IPV6:
-> +               *protocol = htons(ETH_P_IPV6);
-> +               break;
-> +       case VXLAN_GPE_NP_ETHERNET:
-> +               *protocol = htons(ETH_P_TEB);
-> +               break;
-> +       default:
-> +               return false;
-> +       }
-> +
-> +       unparsed->vx_flags &= ~VXLAN_GPE_USED_BITS;
-> +       return true;
-> +}
-> +
->  static bool vxlan_set_mac(struct vxlan_dev *vxlan,
->                           struct vxlan_sock *vs,
->                           struct sk_buff *skb)
-> @@ -1257,9 +1296,11 @@ static int vxlan_rcv(struct sock *sk, struct sk_buff *skb)
->         struct vxlanhdr unparsed;
->         struct vxlan_metadata _md;
->         struct vxlan_metadata *md = &_md;
-> +       __be32 protocol = htons(ETH_P_TEB);
-> +       bool raw_proto = false;
->         void *oiph;
->
-> -       /* Need Vxlan and inner Ethernet header to be present */
-> +       /* Need UDP and VXLAN header to be present */
->         if (!pskb_may_pull(skb, VXLAN_HLEN))
->                 return 1;
->
-> @@ -1283,9 +1324,18 @@ static int vxlan_rcv(struct sock *sk, struct sk_buff *skb)
->         if (!vxlan)
->                 goto drop;
->
-> -       if (iptunnel_pull_header(skb, VXLAN_HLEN, htons(ETH_P_TEB),
-> -                                !net_eq(vxlan->net, dev_net(vxlan->dev))))
-> -               goto drop;
-> +       /* For backwards compatibility, only allow reserved fields to be
-> +        * used by VXLAN extensions if explicitly requested.
-> +        */
-> +       if (vs->flags & VXLAN_F_GPE) {
-> +               if (!vxlan_parse_gpe_hdr(&unparsed, &protocol, skb, vs->flags))
-> +                       goto drop;
-> +               raw_proto = true;
-> +       }
-> +
-> +       if (__iptunnel_pull_header(skb, VXLAN_HLEN, protocol, raw_proto,
-> +                                  !net_eq(vxlan->net, dev_net(vxlan->dev))))
-> +                       goto drop;
->
->         if (vxlan_collect_metadata(vs)) {
->                 __be32 vni = vxlan_vni(vxlan_hdr(skb)->vx_vni);
-> @@ -1304,14 +1354,14 @@ static int vxlan_rcv(struct sock *sk, struct sk_buff *skb)
->                 memset(md, 0, sizeof(*md));
->         }
->
-> -       /* For backwards compatibility, only allow reserved fields to be
-> -        * used by VXLAN extensions if explicitly requested.
-> -        */
->         if (vs->flags & VXLAN_F_REMCSUM_RX)
->                 if (!vxlan_remcsum(&unparsed, skb, vs->flags))
->                         goto drop;
->         if (vs->flags & VXLAN_F_GBP)
->                 vxlan_parse_gbp_hdr(&unparsed, skb, vs->flags, md);
-> +       /* Note that GBP and GPE can never be active together. This is
-> +        * ensured in vxlan_dev_configure.
-> +        */
->
->         if (unparsed.vx_flags || unparsed.vx_vni) {
->                 /* If there are any unprocessed flags remaining treat
-> @@ -1325,8 +1375,13 @@ static int vxlan_rcv(struct sock *sk, struct sk_buff *skb)
->                 goto drop;
->         }
->
-> -       if (!vxlan_set_mac(vxlan, vs, skb))
-> -               goto drop;
-> +       if (!raw_proto) {
-> +               if (!vxlan_set_mac(vxlan, vs, skb))
-> +                       goto drop;
-> +       } else {
-> +               skb->dev = vxlan->dev;
-> +               skb->pkt_type = PACKET_HOST;
-> +       }
->
->         oiph = skb_network_header(skb);
->         skb_reset_network_header(skb);
-> @@ -1685,6 +1740,27 @@ static void vxlan_build_gbp_hdr(struct vxlanhdr *vxh, u32 vxflags,
->         gbp->policy_id = htons(md->gbp & VXLAN_GBP_ID_MASK);
->  }
->
-> +static int vxlan_build_gpe_hdr(struct vxlanhdr *vxh, u32 vxflags,
-> +                              __be16 protocol)
-> +{
-> +       struct vxlanhdr_gpe *gpe = (struct vxlanhdr_gpe *)vxh;
-> +
-> +       gpe->np_applied = 1;
-> +
-> +       switch (protocol) {
-> +       case htons(ETH_P_IP):
-> +               gpe->next_protocol = VXLAN_GPE_NP_IPV4;
-> +               return 0;
-> +       case htons(ETH_P_IPV6):
-> +               gpe->next_protocol = VXLAN_GPE_NP_IPV6;
-> +               return 0;
-> +       case htons(ETH_P_TEB):
-> +               gpe->next_protocol = VXLAN_GPE_NP_ETHERNET;
-> +               return 0;
-> +       }
-> +       return -EPFNOSUPPORT;
-> +}
-> +
->  static int vxlan_build_skb(struct sk_buff *skb, struct dst_entry *dst,
->                            int iphdr_len, __be32 vni,
->                            struct vxlan_metadata *md, u32 vxflags,
-> @@ -1694,6 +1770,7 @@ static int vxlan_build_skb(struct sk_buff *skb, struct dst_entry *dst,
->         int min_headroom;
->         int err;
->         int type = udp_sum ? SKB_GSO_UDP_TUNNEL_CSUM : SKB_GSO_UDP_TUNNEL;
-> +       __be16 inner_protocol = htons(ETH_P_TEB);
->
->         if ((vxflags & VXLAN_F_REMCSUM_TX) &&
->             skb->ip_summed == CHECKSUM_PARTIAL) {
-> @@ -1712,10 +1789,8 @@ static int vxlan_build_skb(struct sk_buff *skb, struct dst_entry *dst,
->
->         /* Need space for new headers (invalidates iph ptr) */
->         err = skb_cow_head(skb, min_headroom);
-> -       if (unlikely(err)) {
-> -               kfree_skb(skb);
-> -               return err;
-> -       }
-> +       if (unlikely(err))
-> +               goto out_free;
->
->         skb = vlan_hwaccel_push_inside(skb);
->         if (WARN_ON(!skb))
-> @@ -1744,9 +1819,19 @@ static int vxlan_build_skb(struct sk_buff *skb, struct dst_entry *dst,
->
->         if (vxflags & VXLAN_F_GBP)
->                 vxlan_build_gbp_hdr(vxh, vxflags, md);
-> +       if (vxflags & VXLAN_F_GPE) {
-> +               err = vxlan_build_gpe_hdr(vxh, vxflags, skb->protocol);
-> +               if (err < 0)
-> +                       goto out_free;
-> +               inner_protocol = skb->protocol;
-> +       }
->
-> -       skb_set_inner_protocol(skb, htons(ETH_P_TEB));
-> +       skb_set_inner_protocol(skb, inner_protocol);
->         return 0;
-> +
-> +out_free:
-> +       kfree_skb(skb);
-> +       return err;
->  }
->
->  static struct rtable *vxlan_get_route(struct vxlan_dev *vxlan,
-> @@ -2421,6 +2506,17 @@ static const struct net_device_ops vxlan_netdev_ether_ops = {
->         .ndo_fill_metadata_dst  = vxlan_fill_metadata_dst,
->  };
->
-> +static const struct net_device_ops vxlan_netdev_raw_ops = {
-> +       .ndo_init               = vxlan_init,
-> +       .ndo_uninit             = vxlan_uninit,
-> +       .ndo_open               = vxlan_open,
-> +       .ndo_stop               = vxlan_stop,
-> +       .ndo_start_xmit         = vxlan_xmit,
-> +       .ndo_get_stats64        = ip_tunnel_get_stats64,
-> +       .ndo_change_mtu         = vxlan_change_mtu,
-> +       .ndo_fill_metadata_dst  = vxlan_fill_metadata_dst,
-> +};
-> +
->  /* Info for udev, that this is a virtual tunnel endpoint */
->  static struct device_type vxlan_type = {
->         .name = "vxlan",
-> @@ -2500,6 +2596,17 @@ static void vxlan_ether_setup(struct net_device *dev)
->         dev->netdev_ops = &vxlan_netdev_ether_ops;
->  }
->
-> +static void vxlan_raw_setup(struct net_device *dev)
-> +{
-> +       dev->type = ARPHRD_NONE;
-> +       dev->hard_header_len = 0;
-> +       dev->addr_len = 0;
-> +       dev->mtu = ETH_DATA_LEN;
-> +       dev->tx_queue_len = 1000;
-> +       dev->flags = IFF_POINTOPOINT | IFF_NOARP | IFF_MULTICAST;
-> +       dev->netdev_ops = &vxlan_netdev_raw_ops;
-> +}
-> +
->  static const struct nla_policy vxlan_policy[IFLA_VXLAN_MAX + 1] = {
->         [IFLA_VXLAN_ID]         = { .type = NLA_U32 },
->         [IFLA_VXLAN_GROUP]      = { .len = FIELD_SIZEOF(struct iphdr, daddr) },
-> @@ -2526,6 +2633,7 @@ static const struct nla_policy vxlan_policy[IFLA_VXLAN_MAX + 1] = {
->         [IFLA_VXLAN_REMCSUM_TX] = { .type = NLA_U8 },
->         [IFLA_VXLAN_REMCSUM_RX] = { .type = NLA_U8 },
->         [IFLA_VXLAN_GBP]        = { .type = NLA_FLAG, },
-> +       [IFLA_VXLAN_GPE]        = { .type = NLA_FLAG, },
->         [IFLA_VXLAN_REMCSUM_NOPARTIAL]  = { .type = NLA_FLAG },
->  };
->
-> @@ -2726,7 +2834,20 @@ static int vxlan_dev_configure(struct net *src_net, struct net_device *dev,
->         __be16 default_port = vxlan->cfg.dst_port;
->         struct net_device *lowerdev = NULL;
->
-> -       vxlan_ether_setup(dev);
-> +       if (conf->flags & VXLAN_F_GPE) {
-> +               if (conf->flags & ~VXLAN_F_ALLOWED_GPE)
-> +                       return -EINVAL;
-> +               /* For now, allow GPE only together with COLLECT_METADATA.
-> +                * This can be relaxed later; in such case, the other side
-> +                * of the PtP link will have to be provided.
-> +                */
-> +               if (!(conf->flags & VXLAN_F_COLLECT_METADATA))
-> +                       return -EINVAL;
-> +
-> +               vxlan_raw_setup(dev);
-> +       } else {
-> +               vxlan_ether_setup(dev);
-> +       }
->
->         vxlan->net = src_net;
->
-> @@ -2789,8 +2910,12 @@ static int vxlan_dev_configure(struct net *src_net, struct net_device *dev,
->         dev->needed_headroom = needed_headroom;
->
->         memcpy(&vxlan->cfg, conf, sizeof(*conf));
-> -       if (!vxlan->cfg.dst_port)
-> -               vxlan->cfg.dst_port = default_port;
-> +       if (!vxlan->cfg.dst_port) {
-> +               if (conf->flags & VXLAN_F_GPE)
-> +                       vxlan->cfg.dst_port = 4790; /* IANA assigned VXLAN-GPE port */
-> +               else
-> +                       vxlan->cfg.dst_port = default_port;
-> +       }
->         vxlan->flags |= conf->flags;
->
->         if (!vxlan->cfg.age_interval)
-> @@ -2961,6 +3086,9 @@ static int vxlan_newlink(struct net *src_net, struct net_device *dev,
->         if (data[IFLA_VXLAN_GBP])
->                 conf.flags |= VXLAN_F_GBP;
->
-> +       if (data[IFLA_VXLAN_GPE])
-> +               conf.flags |= VXLAN_F_GPE;
-> +
->         if (data[IFLA_VXLAN_REMCSUM_NOPARTIAL])
->                 conf.flags |= VXLAN_F_REMCSUM_NOPARTIAL;
->
-> @@ -2977,6 +3105,10 @@ static int vxlan_newlink(struct net *src_net, struct net_device *dev,
->         case -EEXIST:
->                 pr_info("duplicate VNI %u\n", be32_to_cpu(conf.vni));
->                 break;
-> +
-> +       case -EINVAL:
-> +               pr_info("unsupported combination of extensions\n");
-> +               break;
->         }
->
->         return err;
-> @@ -3104,6 +3236,10 @@ static int vxlan_fill_info(struct sk_buff *skb, const struct net_device *dev)
->             nla_put_flag(skb, IFLA_VXLAN_GBP))
->                 goto nla_put_failure;
->
-> +       if (vxlan->flags & VXLAN_F_GPE &&
-> +           nla_put_flag(skb, IFLA_VXLAN_GPE))
-> +               goto nla_put_failure;
-> +
->         if (vxlan->flags & VXLAN_F_REMCSUM_NOPARTIAL &&
->             nla_put_flag(skb, IFLA_VXLAN_REMCSUM_NOPARTIAL))
->                 goto nla_put_failure;
-> diff --git a/include/net/vxlan.h b/include/net/vxlan.h
-> index 73ed2e951c02..dcc6f4057115 100644
-> --- a/include/net/vxlan.h
-> +++ b/include/net/vxlan.h
-> @@ -119,6 +119,64 @@ struct vxlanhdr_gbp {
->  #define VXLAN_GBP_POLICY_APPLIED       (BIT(3) << 16)
->  #define VXLAN_GBP_ID_MASK              (0xFFFF)
->
-> +/*
-> + * VXLAN Generic Protocol Extension (VXLAN_F_GPE):
-> + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-> + * |R|R|Ver|I|P|R|O|       Reserved                |Next Protocol  |
-> + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-> + * |                VXLAN Network Identifier (VNI) |   Reserved    |
-> + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-> + *
-> + * Ver = Version. Indicates VXLAN GPE protocol version.
-> + *
-> + * P = Next Protocol Bit. The P bit is set to indicate that the
-> + *     Next Protocol field is present.
-> + *
-> + * O = OAM Flag Bit. The O bit is set to indicate that the packet
-> + *     is an OAM packet.
-> + *
-> + * Next Protocol = This 8 bit field indicates the protocol header
-> + * immediately following the VXLAN GPE header.
-> + *
-> + * https://tools.ietf.org/html/draft-ietf-nvo3-vxlan-gpe-01
-> + */
-> +
-> +struct vxlanhdr_gpe {
-> +#if defined(__LITTLE_ENDIAN_BITFIELD)
-> +       u8      oam_flag:1,
-> +               reserved_flags1:1,
-> +               np_applied:1,
-> +               instance_applied:1,
-> +               version:2,
-> +reserved_flags2:2;
-> +#elif defined(__BIG_ENDIAN_BITFIELD)
-> +       u8      reserved_flags2:2,
-> +               version:2,
-> +               instance_applied:1,
-> +               np_applied:1,
-> +               reserved_flags1:1,
-> +               oam_flag:1;
-> +#endif
-> +       u8      reserved_flags3;
-> +       u8      reserved_flags4;
-> +       u8      next_protocol;
-> +       __be32  vx_vni;
-> +};
-> +
-> +/* VXLAN-GPE header flags. */
-> +#define VXLAN_HF_VER   cpu_to_be32(BIT(29) | BIT(28))
-> +#define VXLAN_HF_NP    cpu_to_be32(BIT(26))
-> +#define VXLAN_HF_OAM   cpu_to_be32(BIT(24))
-> +
-> +#define VXLAN_GPE_USED_BITS (VXLAN_HF_VER | VXLAN_HF_NP | VXLAN_HF_OAM | \
-> +                            cpu_to_be32(0xff))
-> +
-> +/* VXLAN-GPE header Next Protocol. */
-> +#define VXLAN_GPE_NP_IPV4      0x01
-> +#define VXLAN_GPE_NP_IPV6      0x02
-> +#define VXLAN_GPE_NP_ETHERNET  0x03
-> +#define VXLAN_GPE_NP_NSH       0x04
-> +
->  struct vxlan_metadata {
->         u32             gbp;
->  };
-> @@ -206,16 +264,26 @@ struct vxlan_dev {
->  #define VXLAN_F_GBP                    0x800
->  #define VXLAN_F_REMCSUM_NOPARTIAL      0x1000
->  #define VXLAN_F_COLLECT_METADATA       0x2000
-> +#define VXLAN_F_GPE                    0x4000
->
->  /* Flags that are used in the receive path. These flags must match in
->   * order for a socket to be shareable
->   */
->  #define VXLAN_F_RCV_FLAGS              (VXLAN_F_GBP |                  \
-> +                                        VXLAN_F_GPE |                  \
->                                          VXLAN_F_UDP_ZERO_CSUM6_RX |    \
->                                          VXLAN_F_REMCSUM_RX |           \
->                                          VXLAN_F_REMCSUM_NOPARTIAL |    \
->                                          VXLAN_F_COLLECT_METADATA)
->
-> +/* Flags that can be set together with VXLAN_F_GPE. */
-> +#define VXLAN_F_ALLOWED_GPE            (VXLAN_F_GPE |                  \
-> +                                        VXLAN_F_IPV6 |                 \
-> +                                        VXLAN_F_UDP_ZERO_CSUM_TX |     \
-> +                                        VXLAN_F_UDP_ZERO_CSUM6_TX |    \
-> +                                        VXLAN_F_UDP_ZERO_CSUM6_RX |    \
-> +                                        VXLAN_F_COLLECT_METADATA)
-> +
->  struct net_device *vxlan_dev_create(struct net *net, const char *name,
->                                     u8 name_assign_type, struct vxlan_config *conf);
->
-> diff --git a/include/uapi/linux/if_link.h b/include/uapi/linux/if_link.h
-> index c488066fb53a..9427f17d06d6 100644
-> --- a/include/uapi/linux/if_link.h
-> +++ b/include/uapi/linux/if_link.h
-> @@ -488,6 +488,7 @@ enum {
->         IFLA_VXLAN_REMCSUM_NOPARTIAL,
->         IFLA_VXLAN_COLLECT_METADATA,
->         IFLA_VXLAN_LABEL,
-> +       IFLA_VXLAN_GPE,
->         __IFLA_VXLAN_MAX
->  };
->  #define IFLA_VXLAN_MAX (__IFLA_VXLAN_MAX - 1)
-> --
-> 1.8.3.1
->
-
-On 04/06/2016 03:52 PM, Sjoerd Simons wrote:
-
-> clk_get on a disabled clock node will return EPROBE_DEFER, which can
-> cause drivers to be deferred forever if such clocks are referenced in
-> their clocks property.
->
-> Update the various disabled external clock nodes to default to a
-> frequency of 0, but don't disable them to prevent this.
->
-> Signed-off-by: Sjoerd Simons <sjoerd.simons@collabora.co.uk>
->
-> ---
->
->   arch/arm/boot/dts/r8a7791-koelsch.dts | 1 +
->   arch/arm/boot/dts/r8a7791-porter.dts  | 1 +
->   arch/arm/boot/dts/r8a7791.dtsi        | 5 +----
->   3 files changed, 3 insertions(+), 4 deletions(-)
->
-> diff --git a/arch/arm/boot/dts/r8a7791-koelsch.dts b/arch/arm/boot/dts/r8a7791-koelsch.dts
-> index 1adf877..da59c28 100644
-> --- a/arch/arm/boot/dts/r8a7791-koelsch.dts
-> +++ b/arch/arm/boot/dts/r8a7791-koelsch.dts
-> @@ -660,6 +660,7 @@
->   };
->
->   &pcie_bus_clk {
-> +	clock-frequency = <100000000>;
-
-    Hmmm, looking at the Koelsch schematics, I don't see this clock. :-/
-
->   	status = "okay";
->   };
->
-> diff --git a/arch/arm/boot/dts/r8a7791-porter.dts b/arch/arm/boot/dts/r8a7791-porter.dts
-> index 9554d13..19b257e 100644
-> --- a/arch/arm/boot/dts/r8a7791-porter.dts
-> +++ b/arch/arm/boot/dts/r8a7791-porter.dts
-> @@ -413,6 +413,7 @@
->   };
->
->   &pcie_bus_clk {
-> +	clock-frequency = <100000000>;
->   	status = "okay";
->   };
->
-
-    Again, looking at the Porter schematics, I don't see this clock either. :-/
-
-> diff --git a/arch/arm/boot/dts/r8a7791.dtsi b/arch/arm/boot/dts/r8a7791.dtsi
-> index 8693888..676df63 100644
-> --- a/arch/arm/boot/dts/r8a7791.dtsi
-> +++ b/arch/arm/boot/dts/r8a7791.dtsi
-> @@ -1104,8 +1104,7 @@
->   		pcie_bus_clk: pcie_bus {
->   			compatible = "fixed-clock";
->   			#clock-cells = <0>;
-> -			clock-frequency = <100000000>;
-> -			status = "disabled";
-> +			clock-frequency = <0>;
-
-    If the clock has a good default frequency, I don't think you need to 
-remove it. Otherwise you missed USB_EXTAL which is 48 MHz (and can be overridden).
-
-[...]
-
-MBR, Sergei
-
-Hey,
-
-I've got a Porter board (Revision B) which stopped showing serial
-output since the patch mentioned in the subject. The terrible clearly
-wrong hack below gets serial back (reverting to just the  fck clock for
-scif0) on both linux-next and linux master.
-
-Unfortunately I don't have enough documentation on the board/hardware
-to diagnose this further, but hopefully someone else does ;)
-
--- 
-Sjoerd Simons
-Collabora Ltd.
-
----
-diff --git a/arch/arm/boot/dts/r8a7791.dtsi b/arch/arm/boot/dts/r8a7791.dtsi
-index 8693888..b2c1f1c 100644
---- a/arch/arm/boot/dts/r8a7791.dtsi
-+++ b/arch/arm/boot/dts/r8a7791.dtsi
-@@ -731,9 +731,8 @@
- 			     "renesas,scif";
- 		reg = <0 0xe6e60000 0 64>;
- 		interrupts = <GIC_SPI 152 IRQ_TYPE_LEVEL_HIGH>;
--		clocks = <&mstp7_clks R8A7791_CLK_SCIF0>, <&zs_clk>,
--			 <&scif_clk>;
--		clock-names = "fck", "brg_int", "scif_clk";
-+		clocks = <&mstp7_clks R8A7791_CLK_SCIF0>;
-+		clock-names = "fck";
- 		dmas = <&dmac0 0x29>, <&dmac0 0x2a>,
- 		       <&dmac1 0x29>, <&dmac1 0x2a>;
- 		dma-names = "tx", "rx", "tx", "rx";
-
-In ipgre mode (i.e. not gretap) with collect metadata flag set, the tunnel
-is incorrectly assumed to be mGRE in NBMA mode (see commit 6a5f44d7a048c).
-This is not the case, we're controlling the encapsulation addresses by
-lwtunnel metadata. And anyway, assigning dev->header_ops in collect metadata
-mode does not make sense.
-
-Similarly, when a multicast remote IP address is set together with the
-collect metadata flag, the processing described above would happen, too. As
-there's not much sense in specifying remote/local IP address for lwtunnels,
-reject such configuration.
-
-v2: Reject configuration specifying both remote/local address and collect
-    metadata flag.
-
-Fixes: 2e15ea390e6f4 ("ip_gre: Add support to collect tunnel metadata.")
-Signed-off-by: Jiri Benc <jbenc@redhat.com>
----
- net/ipv4/ip_gre.c | 12 +++++++++++-
- 1 file changed, 11 insertions(+), 1 deletion(-)
-
-diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c
-index af5d1f38217f..c035b43b1d4b 100644
---- a/net/ipv4/ip_gre.c
-+++ b/net/ipv4/ip_gre.c
-@@ -902,8 +902,9 @@ static int ipgre_tunnel_init(struct net_device *dev)
- 			dev->header_ops = &ipgre_header_ops;
- 		}
- #endif
--	} else
-+	} else if (!tunnel->collect_md) {
- 		dev->header_ops = &ipgre_header_ops;
-+	}
- 
- 	return ip_tunnel_init(dev);
- }
-@@ -946,6 +947,15 @@ static int ipgre_tunnel_validate(struct nlattr *tb[], struct nlattr *data[])
- 	if (flags & (GRE_VERSION|GRE_ROUTING))
- 		return -EINVAL;
- 
-+	if (data[IFLA_GRE_COLLECT_METADATA]) {
-+		if (data[IFLA_GRE_REMOTE] &&
-+		    nla_get_in_addr(data[IFLA_GRE_REMOTE]))
-+			return -EINVAL;
-+		if (data[IFLA_GRE_LOCAL] &&
-+		    nla_get_in_addr(data[IFLA_GRE_LOCAL]))
-+			return -EINVAL;
-+	}
-+
- 	return 0;
- }
- 
--- 
-1.8.3.1
-
 Fix two bugs with handling of the 'external' keyword for GRE.
 
 Jiri Benc (2):
@@ -618,56 +9,3 @@ Jiri Benc (2):
 
 -- 
 1.8.3.1
-
-From: Geert Uytterhoeven <geert+renesas@glider.be>
-
-Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
-Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
-Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
----
- include/dt-bindings/power/r8a7790-sysc.h | 34 ++++++++++++++++++++++++++++++++
- 1 file changed, 34 insertions(+)
- create mode 100644 include/dt-bindings/power/r8a7790-sysc.h
-
-diff --git a/include/dt-bindings/power/r8a7790-sysc.h b/include/dt-bindings/power/r8a7790-sysc.h
-new file mode 100644
-index 000000000000..6af4e9929bd0
---- /dev/null
-+++ b/include/dt-bindings/power/r8a7790-sysc.h
-@@ -0,0 +1,34 @@
-+/*
-+ * Copyright (C) 2016 Glider bvba
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; version 2 of the License.
-+ */
-+#ifndef __DT_BINDINGS_POWER_R8A7790_SYSC_H__
-+#define __DT_BINDINGS_POWER_R8A7790_SYSC_H__
-+
-+/*
-+ * These power domain indices match the numbers of the interrupt bits
-+ * representing the power areas in the various Interrupt Registers
-+ * (e.g. SYSCISR, Interrupt Status Register)
-+ */
-+
-+#define R8A7790_PD_CA15_CPU0		 0
-+#define R8A7790_PD_CA15_CPU1		 1
-+#define R8A7790_PD_CA15_CPU2		 2
-+#define R8A7790_PD_CA15_CPU3		 3
-+#define R8A7790_PD_CA7_CPU0		 5
-+#define R8A7790_PD_CA7_CPU1		 6
-+#define R8A7790_PD_CA7_CPU2		 7
-+#define R8A7790_PD_CA7_CPU3		 8
-+#define R8A7790_PD_CA15_SCU		12
-+#define R8A7790_PD_SH_4A		16
-+#define R8A7790_PD_RGX			20
-+#define R8A7790_PD_CA7_SCU		21
-+#define R8A7790_PD_IMP			24
-+
-+/* Always-on power area */
-+#define R8A7790_PD_ALWAYS_ON		32
-+
-+#endif /* __DT_BINDINGS_POWER_R8A7790_SYSC_H__ */
--- 
-2.7.0.rc3.207.g0ac5344
diff --git a/a/content_digest b/N1/content_digest
index 743e629..20d025b 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -1,662 +1,12 @@
- "ref\0cover.1459860270.git.jbenc@redhat.com\0"
- "ref\02f2080cbe948be319e5725b2aa484e8996ed36ae.1459860270.git.jbenc@redhat.com\0"
- "ref\01459947173-6664-1-git-send-email-sjoerd.simons@collabora.co.uk\0"
- "ref\0cover.1461495411.git.jbenc@redhat.com\0"
- "ref\0cover.1461210185.git.horms+renesas@verge.net.au\0"
- "From\0Tom Herbert <tom@herbertland.com>\0"
- "From\0Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>\0"
- "From\0Sjoerd Simons <sjoerd.simons@collabora.co.uk>\0"
  "From\0Jiri Benc <jbenc@redhat.com>\0"
- "From\0Jiri Benc <jbenc@redhat.com>\0"
- "From\0Simon Horman <horms+renesas@verge.net.au>\0"
- "Subject\0Re: [PATCH net-next v3 4/4] vxlan: implement GPE\0"
- "Subject\0Re: [PATCH] ARM: dts: r8a7791: Don't disable referenced optional clocks\0"
- "Subject\0No serial since ARM: dts: r8a7791: Add BRG support for (H)SCIF\0"
- "Subject\0[PATCH net v2 1/3] gre: do not assign header_ops in collect metadata mode\0"
  "Subject\0[PATCH iproute2 0/2] ip link gre: fix external mode handling\0"
- "Subject\0[PATCH 3/7] soc: renesas: Add r8a7790 SYSC PM Domain Binding Definitions\0"
- "Date\0Tue, 5 Apr 2016 10:50:57 -0300\0"
- "Date\0Thu, 7 Apr 2016 02:15:00 +0300\0"
- "Date\0Wed, 06 Apr 2016 12:16:50 +0200\0"
- "Date\0Sun, 24 Apr 2016 13:00:20 +0200\0"
  "Date\0Wed, 27 Apr 2016 16:11:12 +0200\0"
- "Date\0Thu, 21 Apr 2016 13:44:45 +1000\0"
- "To\0Jiri Benc <jbenc@redhat.com>\0"
- "To\0Sjoerd Simons <sjoerd.simons@collabora.co.uk>"
- " Simon Horman <horms@verge.net.au>\0"
- "To\0Geert Uytterhoeven <geert+renesas@glider.be>\0"
- "To\0netdev@vger.kernel.org\0"
  "To\0netdev@vger.kernel.org\0"
- "To\0linux-renesas-soc@vger.kernel.org\0"
- "Cc\0Linux Kernel Network Developers <netdev@vger.kernel.org>"
- " Jesse Gross <jesse@kernel.org>\0"
- "Cc\0linux-renesas-soc@vger.kernel.org"
-  devicetree@vger.kernel.org
-  Geert Uytterhoeven <geert@linux-m68k.org>
-  linux-kernel@vger.kernel.org
- " linux-arm-kernel@lists.infradead.org\0"
- "Cc\0linux-renesas-soc@vger.kernel.org\0"
- "Cc\0Pravin B Shelar <pshelar@nicira.com>"
-  Thomas Graf <tgraf@suug.ch>
- " Simon Horman <simon.horman@netronome.com>\0"
  "Cc\0Stephen Hemminger <stephen@networkplumber.org>"
   Paolo Abeni <pabeni@redhat.com>
  " Pravin Shelar <pshelar@ovn.org>\0"
- "Cc\0linux-arm-kernel@lists.infradead.org"
-  Magnus Damm <magnus.damm@gmail.com>
-  Geert Uytterhoeven <geert+renesas@glider.be>
- " Simon Horman <horms+renesas@verge.net.au>\0"
  "\00:1\0"
  "b\0"
- "On Tue, Apr 5, 2016 at 9:47 AM, Jiri Benc <jbenc@redhat.com> wrote:\n"
- "> Implement VXLAN-GPE. Only COLLECT_METADATA is supported for now (it is\n"
- "> possible to support static configuration, too, if there is demand for it).\n"
- ">\n"
- "> The GPE header parsing has to be moved before iptunnel_pull_header, as we\n"
- "> need to know the protocol.\n"
- ">\n"
- "> v2: Removed what was called \"L2 mode\" in v1 of the patchset. Only \"L3 mode\"\n"
- ">     (now called \"raw mode\") is added by this patch. This mode does not allow\n"
- ">     Ethernet header to be encapsulated in VXLAN-GPE when using ip route to\n"
- ">     specify the encapsulation, IP header is encapsulated instead. The patch\n"
- ">     does support Ethernet to be encapsulated, though, using ETH_P_TEB in\n"
- ">     skb->protocol. This will be utilized by other COLLECT_METADATA users\n"
- ">     (openvswitch in particular).\n"
- ">\n"
- ">     If there is ever demand for Ethernet encapsulation with VXLAN-GPE using\n"
- ">     ip route, it's easy to add a new flag switching the interface to\n"
- ">     \"Ethernet mode\" (called \"L2 mode\" in v1 of this patchset). For now,\n"
- ">     leave this out, it seems we don't need it.\n"
- ">\n"
- ">     Disallowed more flag combinations, especially RCO with GPE.\n"
- ">     Added comment explaining that GBP and GPE cannot be set together.\n"
- ">\n"
- "I requested input from VXLAN protocol experts on whether RCO is\n"
- "architecturally correct in VXLAN and whether we are using the right\n"
- "fields both on the mailing list and in WG meeting yesterday @IETF.\n"
- "Have not gotten any response, so I am going to assume all this is\n"
- "reasonable. I will add explicit support to VXLAN-RCO draft for\n"
- "VXLAN-GPE. The configuration option for RX RCO can be removed and RCO\n"
- "can be supported for VXLAN/VXLAN-GPE in same way. Presumably, GBP\n"
- "might make same assumptions but GBP format as defined for VXLAN isn't\n"
- "compatible with VXLAN-GPE.\n"
- "\n"
- "Tom\n"
- "\n"
- "> Signed-off-by: Jiri Benc <jbenc@redhat.com>\n"
- "> ---\n"
- ">  drivers/net/vxlan.c          | 170 ++++++++++++++++++++++++++++++++++++++-----\n"
- ">  include/net/vxlan.h          |  68 +++++++++++++++++\n"
- ">  include/uapi/linux/if_link.h |   1 +\n"
- ">  3 files changed, 222 insertions(+), 17 deletions(-)\n"
- ">\n"
- "> diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c\n"
- "> index d62eebaa9720..51cccddfe403 100644\n"
- "> --- a/drivers/net/vxlan.c\n"
- "> +++ b/drivers/net/vxlan.c\n"
- "> @@ -1192,6 +1192,45 @@ out:\n"
- ">         unparsed->vx_flags &= ~VXLAN_GBP_USED_BITS;\n"
- ">  }\n"
- ">\n"
- "> +static bool vxlan_parse_gpe_hdr(struct vxlanhdr *unparsed,\n"
- "> +                               __be32 *protocol,\n"
- "> +                               struct sk_buff *skb, u32 vxflags)\n"
- "> +{\n"
- "> +       struct vxlanhdr_gpe *gpe = (struct vxlanhdr_gpe *)unparsed;\n"
- "> +\n"
- "> +       /* Need to have Next Protocol set for interfaces in GPE mode. */\n"
- "> +       if (!gpe->np_applied)\n"
- "> +               return false;\n"
- "> +       /* \"The initial version is 0. If a receiver does not support the\n"
- "> +        * version indicated it MUST drop the packet.\n"
- "> +        */\n"
- "> +       if (gpe->version != 0)\n"
- "> +               return false;\n"
- "> +       /* \"When the O bit is set to 1, the packet is an OAM packet and OAM\n"
- "> +        * processing MUST occur.\" However, we don't implement OAM\n"
- "> +        * processing, thus drop the packet.\n"
- "> +        */\n"
- "> +       if (gpe->oam_flag)\n"
- "> +               return false;\n"
- "> +\n"
- "> +       switch (gpe->next_protocol) {\n"
- "> +       case VXLAN_GPE_NP_IPV4:\n"
- "> +               *protocol = htons(ETH_P_IP);\n"
- "> +               break;\n"
- "> +       case VXLAN_GPE_NP_IPV6:\n"
- "> +               *protocol = htons(ETH_P_IPV6);\n"
- "> +               break;\n"
- "> +       case VXLAN_GPE_NP_ETHERNET:\n"
- "> +               *protocol = htons(ETH_P_TEB);\n"
- "> +               break;\n"
- "> +       default:\n"
- "> +               return false;\n"
- "> +       }\n"
- "> +\n"
- "> +       unparsed->vx_flags &= ~VXLAN_GPE_USED_BITS;\n"
- "> +       return true;\n"
- "> +}\n"
- "> +\n"
- ">  static bool vxlan_set_mac(struct vxlan_dev *vxlan,\n"
- ">                           struct vxlan_sock *vs,\n"
- ">                           struct sk_buff *skb)\n"
- "> @@ -1257,9 +1296,11 @@ static int vxlan_rcv(struct sock *sk, struct sk_buff *skb)\n"
- ">         struct vxlanhdr unparsed;\n"
- ">         struct vxlan_metadata _md;\n"
- ">         struct vxlan_metadata *md = &_md;\n"
- "> +       __be32 protocol = htons(ETH_P_TEB);\n"
- "> +       bool raw_proto = false;\n"
- ">         void *oiph;\n"
- ">\n"
- "> -       /* Need Vxlan and inner Ethernet header to be present */\n"
- "> +       /* Need UDP and VXLAN header to be present */\n"
- ">         if (!pskb_may_pull(skb, VXLAN_HLEN))\n"
- ">                 return 1;\n"
- ">\n"
- "> @@ -1283,9 +1324,18 @@ static int vxlan_rcv(struct sock *sk, struct sk_buff *skb)\n"
- ">         if (!vxlan)\n"
- ">                 goto drop;\n"
- ">\n"
- "> -       if (iptunnel_pull_header(skb, VXLAN_HLEN, htons(ETH_P_TEB),\n"
- "> -                                !net_eq(vxlan->net, dev_net(vxlan->dev))))\n"
- "> -               goto drop;\n"
- "> +       /* For backwards compatibility, only allow reserved fields to be\n"
- "> +        * used by VXLAN extensions if explicitly requested.\n"
- "> +        */\n"
- "> +       if (vs->flags & VXLAN_F_GPE) {\n"
- "> +               if (!vxlan_parse_gpe_hdr(&unparsed, &protocol, skb, vs->flags))\n"
- "> +                       goto drop;\n"
- "> +               raw_proto = true;\n"
- "> +       }\n"
- "> +\n"
- "> +       if (__iptunnel_pull_header(skb, VXLAN_HLEN, protocol, raw_proto,\n"
- "> +                                  !net_eq(vxlan->net, dev_net(vxlan->dev))))\n"
- "> +                       goto drop;\n"
- ">\n"
- ">         if (vxlan_collect_metadata(vs)) {\n"
- ">                 __be32 vni = vxlan_vni(vxlan_hdr(skb)->vx_vni);\n"
- "> @@ -1304,14 +1354,14 @@ static int vxlan_rcv(struct sock *sk, struct sk_buff *skb)\n"
- ">                 memset(md, 0, sizeof(*md));\n"
- ">         }\n"
- ">\n"
- "> -       /* For backwards compatibility, only allow reserved fields to be\n"
- "> -        * used by VXLAN extensions if explicitly requested.\n"
- "> -        */\n"
- ">         if (vs->flags & VXLAN_F_REMCSUM_RX)\n"
- ">                 if (!vxlan_remcsum(&unparsed, skb, vs->flags))\n"
- ">                         goto drop;\n"
- ">         if (vs->flags & VXLAN_F_GBP)\n"
- ">                 vxlan_parse_gbp_hdr(&unparsed, skb, vs->flags, md);\n"
- "> +       /* Note that GBP and GPE can never be active together. This is\n"
- "> +        * ensured in vxlan_dev_configure.\n"
- "> +        */\n"
- ">\n"
- ">         if (unparsed.vx_flags || unparsed.vx_vni) {\n"
- ">                 /* If there are any unprocessed flags remaining treat\n"
- "> @@ -1325,8 +1375,13 @@ static int vxlan_rcv(struct sock *sk, struct sk_buff *skb)\n"
- ">                 goto drop;\n"
- ">         }\n"
- ">\n"
- "> -       if (!vxlan_set_mac(vxlan, vs, skb))\n"
- "> -               goto drop;\n"
- "> +       if (!raw_proto) {\n"
- "> +               if (!vxlan_set_mac(vxlan, vs, skb))\n"
- "> +                       goto drop;\n"
- "> +       } else {\n"
- "> +               skb->dev = vxlan->dev;\n"
- "> +               skb->pkt_type = PACKET_HOST;\n"
- "> +       }\n"
- ">\n"
- ">         oiph = skb_network_header(skb);\n"
- ">         skb_reset_network_header(skb);\n"
- "> @@ -1685,6 +1740,27 @@ static void vxlan_build_gbp_hdr(struct vxlanhdr *vxh, u32 vxflags,\n"
- ">         gbp->policy_id = htons(md->gbp & VXLAN_GBP_ID_MASK);\n"
- ">  }\n"
- ">\n"
- "> +static int vxlan_build_gpe_hdr(struct vxlanhdr *vxh, u32 vxflags,\n"
- "> +                              __be16 protocol)\n"
- "> +{\n"
- "> +       struct vxlanhdr_gpe *gpe = (struct vxlanhdr_gpe *)vxh;\n"
- "> +\n"
- "> +       gpe->np_applied = 1;\n"
- "> +\n"
- "> +       switch (protocol) {\n"
- "> +       case htons(ETH_P_IP):\n"
- "> +               gpe->next_protocol = VXLAN_GPE_NP_IPV4;\n"
- "> +               return 0;\n"
- "> +       case htons(ETH_P_IPV6):\n"
- "> +               gpe->next_protocol = VXLAN_GPE_NP_IPV6;\n"
- "> +               return 0;\n"
- "> +       case htons(ETH_P_TEB):\n"
- "> +               gpe->next_protocol = VXLAN_GPE_NP_ETHERNET;\n"
- "> +               return 0;\n"
- "> +       }\n"
- "> +       return -EPFNOSUPPORT;\n"
- "> +}\n"
- "> +\n"
- ">  static int vxlan_build_skb(struct sk_buff *skb, struct dst_entry *dst,\n"
- ">                            int iphdr_len, __be32 vni,\n"
- ">                            struct vxlan_metadata *md, u32 vxflags,\n"
- "> @@ -1694,6 +1770,7 @@ static int vxlan_build_skb(struct sk_buff *skb, struct dst_entry *dst,\n"
- ">         int min_headroom;\n"
- ">         int err;\n"
- ">         int type = udp_sum ? SKB_GSO_UDP_TUNNEL_CSUM : SKB_GSO_UDP_TUNNEL;\n"
- "> +       __be16 inner_protocol = htons(ETH_P_TEB);\n"
- ">\n"
- ">         if ((vxflags & VXLAN_F_REMCSUM_TX) &&\n"
- ">             skb->ip_summed == CHECKSUM_PARTIAL) {\n"
- "> @@ -1712,10 +1789,8 @@ static int vxlan_build_skb(struct sk_buff *skb, struct dst_entry *dst,\n"
- ">\n"
- ">         /* Need space for new headers (invalidates iph ptr) */\n"
- ">         err = skb_cow_head(skb, min_headroom);\n"
- "> -       if (unlikely(err)) {\n"
- "> -               kfree_skb(skb);\n"
- "> -               return err;\n"
- "> -       }\n"
- "> +       if (unlikely(err))\n"
- "> +               goto out_free;\n"
- ">\n"
- ">         skb = vlan_hwaccel_push_inside(skb);\n"
- ">         if (WARN_ON(!skb))\n"
- "> @@ -1744,9 +1819,19 @@ static int vxlan_build_skb(struct sk_buff *skb, struct dst_entry *dst,\n"
- ">\n"
- ">         if (vxflags & VXLAN_F_GBP)\n"
- ">                 vxlan_build_gbp_hdr(vxh, vxflags, md);\n"
- "> +       if (vxflags & VXLAN_F_GPE) {\n"
- "> +               err = vxlan_build_gpe_hdr(vxh, vxflags, skb->protocol);\n"
- "> +               if (err < 0)\n"
- "> +                       goto out_free;\n"
- "> +               inner_protocol = skb->protocol;\n"
- "> +       }\n"
- ">\n"
- "> -       skb_set_inner_protocol(skb, htons(ETH_P_TEB));\n"
- "> +       skb_set_inner_protocol(skb, inner_protocol);\n"
- ">         return 0;\n"
- "> +\n"
- "> +out_free:\n"
- "> +       kfree_skb(skb);\n"
- "> +       return err;\n"
- ">  }\n"
- ">\n"
- ">  static struct rtable *vxlan_get_route(struct vxlan_dev *vxlan,\n"
- "> @@ -2421,6 +2506,17 @@ static const struct net_device_ops vxlan_netdev_ether_ops = {\n"
- ">         .ndo_fill_metadata_dst  = vxlan_fill_metadata_dst,\n"
- ">  };\n"
- ">\n"
- "> +static const struct net_device_ops vxlan_netdev_raw_ops = {\n"
- "> +       .ndo_init               = vxlan_init,\n"
- "> +       .ndo_uninit             = vxlan_uninit,\n"
- "> +       .ndo_open               = vxlan_open,\n"
- "> +       .ndo_stop               = vxlan_stop,\n"
- "> +       .ndo_start_xmit         = vxlan_xmit,\n"
- "> +       .ndo_get_stats64        = ip_tunnel_get_stats64,\n"
- "> +       .ndo_change_mtu         = vxlan_change_mtu,\n"
- "> +       .ndo_fill_metadata_dst  = vxlan_fill_metadata_dst,\n"
- "> +};\n"
- "> +\n"
- ">  /* Info for udev, that this is a virtual tunnel endpoint */\n"
- ">  static struct device_type vxlan_type = {\n"
- ">         .name = \"vxlan\",\n"
- "> @@ -2500,6 +2596,17 @@ static void vxlan_ether_setup(struct net_device *dev)\n"
- ">         dev->netdev_ops = &vxlan_netdev_ether_ops;\n"
- ">  }\n"
- ">\n"
- "> +static void vxlan_raw_setup(struct net_device *dev)\n"
- "> +{\n"
- "> +       dev->type = ARPHRD_NONE;\n"
- "> +       dev->hard_header_len = 0;\n"
- "> +       dev->addr_len = 0;\n"
- "> +       dev->mtu = ETH_DATA_LEN;\n"
- "> +       dev->tx_queue_len = 1000;\n"
- "> +       dev->flags = IFF_POINTOPOINT | IFF_NOARP | IFF_MULTICAST;\n"
- "> +       dev->netdev_ops = &vxlan_netdev_raw_ops;\n"
- "> +}\n"
- "> +\n"
- ">  static const struct nla_policy vxlan_policy[IFLA_VXLAN_MAX + 1] = {\n"
- ">         [IFLA_VXLAN_ID]         = { .type = NLA_U32 },\n"
- ">         [IFLA_VXLAN_GROUP]      = { .len = FIELD_SIZEOF(struct iphdr, daddr) },\n"
- "> @@ -2526,6 +2633,7 @@ static const struct nla_policy vxlan_policy[IFLA_VXLAN_MAX + 1] = {\n"
- ">         [IFLA_VXLAN_REMCSUM_TX] = { .type = NLA_U8 },\n"
- ">         [IFLA_VXLAN_REMCSUM_RX] = { .type = NLA_U8 },\n"
- ">         [IFLA_VXLAN_GBP]        = { .type = NLA_FLAG, },\n"
- "> +       [IFLA_VXLAN_GPE]        = { .type = NLA_FLAG, },\n"
- ">         [IFLA_VXLAN_REMCSUM_NOPARTIAL]  = { .type = NLA_FLAG },\n"
- ">  };\n"
- ">\n"
- "> @@ -2726,7 +2834,20 @@ static int vxlan_dev_configure(struct net *src_net, struct net_device *dev,\n"
- ">         __be16 default_port = vxlan->cfg.dst_port;\n"
- ">         struct net_device *lowerdev = NULL;\n"
- ">\n"
- "> -       vxlan_ether_setup(dev);\n"
- "> +       if (conf->flags & VXLAN_F_GPE) {\n"
- "> +               if (conf->flags & ~VXLAN_F_ALLOWED_GPE)\n"
- "> +                       return -EINVAL;\n"
- "> +               /* For now, allow GPE only together with COLLECT_METADATA.\n"
- "> +                * This can be relaxed later; in such case, the other side\n"
- "> +                * of the PtP link will have to be provided.\n"
- "> +                */\n"
- "> +               if (!(conf->flags & VXLAN_F_COLLECT_METADATA))\n"
- "> +                       return -EINVAL;\n"
- "> +\n"
- "> +               vxlan_raw_setup(dev);\n"
- "> +       } else {\n"
- "> +               vxlan_ether_setup(dev);\n"
- "> +       }\n"
- ">\n"
- ">         vxlan->net = src_net;\n"
- ">\n"
- "> @@ -2789,8 +2910,12 @@ static int vxlan_dev_configure(struct net *src_net, struct net_device *dev,\n"
- ">         dev->needed_headroom = needed_headroom;\n"
- ">\n"
- ">         memcpy(&vxlan->cfg, conf, sizeof(*conf));\n"
- "> -       if (!vxlan->cfg.dst_port)\n"
- "> -               vxlan->cfg.dst_port = default_port;\n"
- "> +       if (!vxlan->cfg.dst_port) {\n"
- "> +               if (conf->flags & VXLAN_F_GPE)\n"
- "> +                       vxlan->cfg.dst_port = 4790; /* IANA assigned VXLAN-GPE port */\n"
- "> +               else\n"
- "> +                       vxlan->cfg.dst_port = default_port;\n"
- "> +       }\n"
- ">         vxlan->flags |= conf->flags;\n"
- ">\n"
- ">         if (!vxlan->cfg.age_interval)\n"
- "> @@ -2961,6 +3086,9 @@ static int vxlan_newlink(struct net *src_net, struct net_device *dev,\n"
- ">         if (data[IFLA_VXLAN_GBP])\n"
- ">                 conf.flags |= VXLAN_F_GBP;\n"
- ">\n"
- "> +       if (data[IFLA_VXLAN_GPE])\n"
- "> +               conf.flags |= VXLAN_F_GPE;\n"
- "> +\n"
- ">         if (data[IFLA_VXLAN_REMCSUM_NOPARTIAL])\n"
- ">                 conf.flags |= VXLAN_F_REMCSUM_NOPARTIAL;\n"
- ">\n"
- "> @@ -2977,6 +3105,10 @@ static int vxlan_newlink(struct net *src_net, struct net_device *dev,\n"
- ">         case -EEXIST:\n"
- ">                 pr_info(\"duplicate VNI %u\\n\", be32_to_cpu(conf.vni));\n"
- ">                 break;\n"
- "> +\n"
- "> +       case -EINVAL:\n"
- "> +               pr_info(\"unsupported combination of extensions\\n\");\n"
- "> +               break;\n"
- ">         }\n"
- ">\n"
- ">         return err;\n"
- "> @@ -3104,6 +3236,10 @@ static int vxlan_fill_info(struct sk_buff *skb, const struct net_device *dev)\n"
- ">             nla_put_flag(skb, IFLA_VXLAN_GBP))\n"
- ">                 goto nla_put_failure;\n"
- ">\n"
- "> +       if (vxlan->flags & VXLAN_F_GPE &&\n"
- "> +           nla_put_flag(skb, IFLA_VXLAN_GPE))\n"
- "> +               goto nla_put_failure;\n"
- "> +\n"
- ">         if (vxlan->flags & VXLAN_F_REMCSUM_NOPARTIAL &&\n"
- ">             nla_put_flag(skb, IFLA_VXLAN_REMCSUM_NOPARTIAL))\n"
- ">                 goto nla_put_failure;\n"
- "> diff --git a/include/net/vxlan.h b/include/net/vxlan.h\n"
- "> index 73ed2e951c02..dcc6f4057115 100644\n"
- "> --- a/include/net/vxlan.h\n"
- "> +++ b/include/net/vxlan.h\n"
- "> @@ -119,6 +119,64 @@ struct vxlanhdr_gbp {\n"
- ">  #define VXLAN_GBP_POLICY_APPLIED       (BIT(3) << 16)\n"
- ">  #define VXLAN_GBP_ID_MASK              (0xFFFF)\n"
- ">\n"
- "> +/*\n"
- "> + * VXLAN Generic Protocol Extension (VXLAN_F_GPE):\n"
- "> + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n"
- "> + * |R|R|Ver|I|P|R|O|       Reserved                |Next Protocol  |\n"
- "> + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n"
- "> + * |                VXLAN Network Identifier (VNI) |   Reserved    |\n"
- "> + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n"
- "> + *\n"
- "> + * Ver = Version. Indicates VXLAN GPE protocol version.\n"
- "> + *\n"
- "> + * P = Next Protocol Bit. The P bit is set to indicate that the\n"
- "> + *     Next Protocol field is present.\n"
- "> + *\n"
- "> + * O = OAM Flag Bit. The O bit is set to indicate that the packet\n"
- "> + *     is an OAM packet.\n"
- "> + *\n"
- "> + * Next Protocol = This 8 bit field indicates the protocol header\n"
- "> + * immediately following the VXLAN GPE header.\n"
- "> + *\n"
- "> + * https://tools.ietf.org/html/draft-ietf-nvo3-vxlan-gpe-01\n"
- "> + */\n"
- "> +\n"
- "> +struct vxlanhdr_gpe {\n"
- "> +#if defined(__LITTLE_ENDIAN_BITFIELD)\n"
- "> +       u8      oam_flag:1,\n"
- "> +               reserved_flags1:1,\n"
- "> +               np_applied:1,\n"
- "> +               instance_applied:1,\n"
- "> +               version:2,\n"
- "> +reserved_flags2:2;\n"
- "> +#elif defined(__BIG_ENDIAN_BITFIELD)\n"
- "> +       u8      reserved_flags2:2,\n"
- "> +               version:2,\n"
- "> +               instance_applied:1,\n"
- "> +               np_applied:1,\n"
- "> +               reserved_flags1:1,\n"
- "> +               oam_flag:1;\n"
- "> +#endif\n"
- "> +       u8      reserved_flags3;\n"
- "> +       u8      reserved_flags4;\n"
- "> +       u8      next_protocol;\n"
- "> +       __be32  vx_vni;\n"
- "> +};\n"
- "> +\n"
- "> +/* VXLAN-GPE header flags. */\n"
- "> +#define VXLAN_HF_VER   cpu_to_be32(BIT(29) | BIT(28))\n"
- "> +#define VXLAN_HF_NP    cpu_to_be32(BIT(26))\n"
- "> +#define VXLAN_HF_OAM   cpu_to_be32(BIT(24))\n"
- "> +\n"
- "> +#define VXLAN_GPE_USED_BITS (VXLAN_HF_VER | VXLAN_HF_NP | VXLAN_HF_OAM | \\\n"
- "> +                            cpu_to_be32(0xff))\n"
- "> +\n"
- "> +/* VXLAN-GPE header Next Protocol. */\n"
- "> +#define VXLAN_GPE_NP_IPV4      0x01\n"
- "> +#define VXLAN_GPE_NP_IPV6      0x02\n"
- "> +#define VXLAN_GPE_NP_ETHERNET  0x03\n"
- "> +#define VXLAN_GPE_NP_NSH       0x04\n"
- "> +\n"
- ">  struct vxlan_metadata {\n"
- ">         u32             gbp;\n"
- ">  };\n"
- "> @@ -206,16 +264,26 @@ struct vxlan_dev {\n"
- ">  #define VXLAN_F_GBP                    0x800\n"
- ">  #define VXLAN_F_REMCSUM_NOPARTIAL      0x1000\n"
- ">  #define VXLAN_F_COLLECT_METADATA       0x2000\n"
- "> +#define VXLAN_F_GPE                    0x4000\n"
- ">\n"
- ">  /* Flags that are used in the receive path. These flags must match in\n"
- ">   * order for a socket to be shareable\n"
- ">   */\n"
- ">  #define VXLAN_F_RCV_FLAGS              (VXLAN_F_GBP |                  \\\n"
- "> +                                        VXLAN_F_GPE |                  \\\n"
- ">                                          VXLAN_F_UDP_ZERO_CSUM6_RX |    \\\n"
- ">                                          VXLAN_F_REMCSUM_RX |           \\\n"
- ">                                          VXLAN_F_REMCSUM_NOPARTIAL |    \\\n"
- ">                                          VXLAN_F_COLLECT_METADATA)\n"
- ">\n"
- "> +/* Flags that can be set together with VXLAN_F_GPE. */\n"
- "> +#define VXLAN_F_ALLOWED_GPE            (VXLAN_F_GPE |                  \\\n"
- "> +                                        VXLAN_F_IPV6 |                 \\\n"
- "> +                                        VXLAN_F_UDP_ZERO_CSUM_TX |     \\\n"
- "> +                                        VXLAN_F_UDP_ZERO_CSUM6_TX |    \\\n"
- "> +                                        VXLAN_F_UDP_ZERO_CSUM6_RX |    \\\n"
- "> +                                        VXLAN_F_COLLECT_METADATA)\n"
- "> +\n"
- ">  struct net_device *vxlan_dev_create(struct net *net, const char *name,\n"
- ">                                     u8 name_assign_type, struct vxlan_config *conf);\n"
- ">\n"
- "> diff --git a/include/uapi/linux/if_link.h b/include/uapi/linux/if_link.h\n"
- "> index c488066fb53a..9427f17d06d6 100644\n"
- "> --- a/include/uapi/linux/if_link.h\n"
- "> +++ b/include/uapi/linux/if_link.h\n"
- "> @@ -488,6 +488,7 @@ enum {\n"
- ">         IFLA_VXLAN_REMCSUM_NOPARTIAL,\n"
- ">         IFLA_VXLAN_COLLECT_METADATA,\n"
- ">         IFLA_VXLAN_LABEL,\n"
- "> +       IFLA_VXLAN_GPE,\n"
- ">         __IFLA_VXLAN_MAX\n"
- ">  };\n"
- ">  #define IFLA_VXLAN_MAX (__IFLA_VXLAN_MAX - 1)\n"
- "> --\n"
- "> 1.8.3.1\n"
- ">\n"
- "\n"
- "On 04/06/2016 03:52 PM, Sjoerd Simons wrote:\n"
- "\n"
- "> clk_get on a disabled clock node will return EPROBE_DEFER, which can\n"
- "> cause drivers to be deferred forever if such clocks are referenced in\n"
- "> their clocks property.\n"
- ">\n"
- "> Update the various disabled external clock nodes to default to a\n"
- "> frequency of 0, but don't disable them to prevent this.\n"
- ">\n"
- "> Signed-off-by: Sjoerd Simons <sjoerd.simons@collabora.co.uk>\n"
- ">\n"
- "> ---\n"
- ">\n"
- ">   arch/arm/boot/dts/r8a7791-koelsch.dts | 1 +\n"
- ">   arch/arm/boot/dts/r8a7791-porter.dts  | 1 +\n"
- ">   arch/arm/boot/dts/r8a7791.dtsi        | 5 +----\n"
- ">   3 files changed, 3 insertions(+), 4 deletions(-)\n"
- ">\n"
- "> diff --git a/arch/arm/boot/dts/r8a7791-koelsch.dts b/arch/arm/boot/dts/r8a7791-koelsch.dts\n"
- "> index 1adf877..da59c28 100644\n"
- "> --- a/arch/arm/boot/dts/r8a7791-koelsch.dts\n"
- "> +++ b/arch/arm/boot/dts/r8a7791-koelsch.dts\n"
- "> @@ -660,6 +660,7 @@\n"
- ">   };\n"
- ">\n"
- ">   &pcie_bus_clk {\n"
- "> +\tclock-frequency = <100000000>;\n"
- "\n"
- "    Hmmm, looking at the Koelsch schematics, I don't see this clock. :-/\n"
- "\n"
- ">   \tstatus = \"okay\";\n"
- ">   };\n"
- ">\n"
- "> diff --git a/arch/arm/boot/dts/r8a7791-porter.dts b/arch/arm/boot/dts/r8a7791-porter.dts\n"
- "> index 9554d13..19b257e 100644\n"
- "> --- a/arch/arm/boot/dts/r8a7791-porter.dts\n"
- "> +++ b/arch/arm/boot/dts/r8a7791-porter.dts\n"
- "> @@ -413,6 +413,7 @@\n"
- ">   };\n"
- ">\n"
- ">   &pcie_bus_clk {\n"
- "> +\tclock-frequency = <100000000>;\n"
- ">   \tstatus = \"okay\";\n"
- ">   };\n"
- ">\n"
- "\n"
- "    Again, looking at the Porter schematics, I don't see this clock either. :-/\n"
- "\n"
- "> diff --git a/arch/arm/boot/dts/r8a7791.dtsi b/arch/arm/boot/dts/r8a7791.dtsi\n"
- "> index 8693888..676df63 100644\n"
- "> --- a/arch/arm/boot/dts/r8a7791.dtsi\n"
- "> +++ b/arch/arm/boot/dts/r8a7791.dtsi\n"
- "> @@ -1104,8 +1104,7 @@\n"
- ">   \t\tpcie_bus_clk: pcie_bus {\n"
- ">   \t\t\tcompatible = \"fixed-clock\";\n"
- ">   \t\t\t#clock-cells = <0>;\n"
- "> -\t\t\tclock-frequency = <100000000>;\n"
- "> -\t\t\tstatus = \"disabled\";\n"
- "> +\t\t\tclock-frequency = <0>;\n"
- "\n"
- "    If the clock has a good default frequency, I don't think you need to \n"
- "remove it. Otherwise you missed USB_EXTAL which is 48 MHz (and can be overridden).\n"
- "\n"
- "[...]\n"
- "\n"
- "MBR, Sergei\n"
- "\n"
- "Hey,\n"
- "\n"
- "I've got a Porter board (Revision B) which stopped showing serial\n"
- "output since the patch mentioned in the subject. The terrible clearly\n"
- "wrong hack below gets serial back (reverting to just the \302\240fck clock for\n"
- "scif0) on both linux-next and linux master.\n"
- "\n"
- "Unfortunately I don't have enough documentation on the board/hardware\n"
- "to diagnose this further, but hopefully someone else does ;)\n"
- "\n"
- "-- \n"
- "Sjoerd Simons\n"
- "Collabora Ltd.\n"
- "\n"
- "---\n"
- "diff --git a/arch/arm/boot/dts/r8a7791.dtsi b/arch/arm/boot/dts/r8a7791.dtsi\n"
- "index 8693888..b2c1f1c 100644\n"
- "--- a/arch/arm/boot/dts/r8a7791.dtsi\n"
- "+++ b/arch/arm/boot/dts/r8a7791.dtsi\n"
- "@@ -731,9 +731,8 @@\n"
- "\302\240\t\t\t\302\240\302\240\302\240\302\240\302\240\"renesas,scif\";\n"
- "\302\240\t\treg = <0 0xe6e60000 0 64>;\n"
- "\302\240\t\tinterrupts = <GIC_SPI 152 IRQ_TYPE_LEVEL_HIGH>;\n"
- "-\t\tclocks = <&mstp7_clks R8A7791_CLK_SCIF0>, <&zs_clk>,\n"
- "-\t\t\t\302\240<&scif_clk>;\n"
- "-\t\tclock-names = \"fck\", \"brg_int\", \"scif_clk\";\n"
- "+\t\tclocks = <&mstp7_clks R8A7791_CLK_SCIF0>;\n"
- "+\t\tclock-names = \"fck\";\n"
- "\302\240\t\tdmas = <&dmac0 0x29>, <&dmac0 0x2a>,\n"
- "\302\240\t\t\302\240\302\240\302\240\302\240\302\240\302\240\302\240<&dmac1 0x29>, <&dmac1 0x2a>;\n"
- "\302\240\t\tdma-names = \"tx\", \"rx\", \"tx\", \"rx\";\n"
- "\n"
- "In ipgre mode (i.e. not gretap) with collect metadata flag set, the tunnel\n"
- "is incorrectly assumed to be mGRE in NBMA mode (see commit 6a5f44d7a048c).\n"
- "This is not the case, we're controlling the encapsulation addresses by\n"
- "lwtunnel metadata. And anyway, assigning dev->header_ops in collect metadata\n"
- "mode does not make sense.\n"
- "\n"
- "Similarly, when a multicast remote IP address is set together with the\n"
- "collect metadata flag, the processing described above would happen, too. As\n"
- "there's not much sense in specifying remote/local IP address for lwtunnels,\n"
- "reject such configuration.\n"
- "\n"
- "v2: Reject configuration specifying both remote/local address and collect\n"
- "    metadata flag.\n"
- "\n"
- "Fixes: 2e15ea390e6f4 (\"ip_gre: Add support to collect tunnel metadata.\")\n"
- "Signed-off-by: Jiri Benc <jbenc@redhat.com>\n"
- "---\n"
- " net/ipv4/ip_gre.c | 12 +++++++++++-\n"
- " 1 file changed, 11 insertions(+), 1 deletion(-)\n"
- "\n"
- "diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c\n"
- "index af5d1f38217f..c035b43b1d4b 100644\n"
- "--- a/net/ipv4/ip_gre.c\n"
- "+++ b/net/ipv4/ip_gre.c\n"
- "@@ -902,8 +902,9 @@ static int ipgre_tunnel_init(struct net_device *dev)\n"
- " \t\t\tdev->header_ops = &ipgre_header_ops;\n"
- " \t\t}\n"
- " #endif\n"
- "-\t} else\n"
- "+\t} else if (!tunnel->collect_md) {\n"
- " \t\tdev->header_ops = &ipgre_header_ops;\n"
- "+\t}\n"
- " \n"
- " \treturn ip_tunnel_init(dev);\n"
- " }\n"
- "@@ -946,6 +947,15 @@ static int ipgre_tunnel_validate(struct nlattr *tb[], struct nlattr *data[])\n"
- " \tif (flags & (GRE_VERSION|GRE_ROUTING))\n"
- " \t\treturn -EINVAL;\n"
- " \n"
- "+\tif (data[IFLA_GRE_COLLECT_METADATA]) {\n"
- "+\t\tif (data[IFLA_GRE_REMOTE] &&\n"
- "+\t\t    nla_get_in_addr(data[IFLA_GRE_REMOTE]))\n"
- "+\t\t\treturn -EINVAL;\n"
- "+\t\tif (data[IFLA_GRE_LOCAL] &&\n"
- "+\t\t    nla_get_in_addr(data[IFLA_GRE_LOCAL]))\n"
- "+\t\t\treturn -EINVAL;\n"
- "+\t}\n"
- "+\n"
- " \treturn 0;\n"
- " }\n"
- " \n"
- "-- \n"
- "1.8.3.1\n"
- "\n"
  "Fix two bugs with handling of the 'external' keyword for GRE.\n"
  "\n"
  "Jiri Benc (2):\n"
@@ -667,59 +17,6 @@
  " 1 file changed, 25 insertions(+), 18 deletions(-)\n"
  "\n"
  "-- \n"
- "1.8.3.1\n"
- "\n"
- "From: Geert Uytterhoeven <geert+renesas@glider.be>\n"
- "\n"
- "Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>\n"
- "Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n"
- "Signed-off-by: Simon Horman <horms+renesas@verge.net.au>\n"
- "---\n"
- " include/dt-bindings/power/r8a7790-sysc.h | 34 ++++++++++++++++++++++++++++++++\n"
- " 1 file changed, 34 insertions(+)\n"
- " create mode 100644 include/dt-bindings/power/r8a7790-sysc.h\n"
- "\n"
- "diff --git a/include/dt-bindings/power/r8a7790-sysc.h b/include/dt-bindings/power/r8a7790-sysc.h\n"
- "new file mode 100644\n"
- "index 000000000000..6af4e9929bd0\n"
- "--- /dev/null\n"
- "+++ b/include/dt-bindings/power/r8a7790-sysc.h\n"
- "@@ -0,0 +1,34 @@\n"
- "+/*\n"
- "+ * Copyright (C) 2016 Glider bvba\n"
- "+ *\n"
- "+ * This program is free software; you can redistribute it and/or modify\n"
- "+ * it under the terms of the GNU General Public License as published by\n"
- "+ * the Free Software Foundation; version 2 of the License.\n"
- "+ */\n"
- "+#ifndef __DT_BINDINGS_POWER_R8A7790_SYSC_H__\n"
- "+#define __DT_BINDINGS_POWER_R8A7790_SYSC_H__\n"
- "+\n"
- "+/*\n"
- "+ * These power domain indices match the numbers of the interrupt bits\n"
- "+ * representing the power areas in the various Interrupt Registers\n"
- "+ * (e.g. SYSCISR, Interrupt Status Register)\n"
- "+ */\n"
- "+\n"
- "+#define R8A7790_PD_CA15_CPU0\t\t 0\n"
- "+#define R8A7790_PD_CA15_CPU1\t\t 1\n"
- "+#define R8A7790_PD_CA15_CPU2\t\t 2\n"
- "+#define R8A7790_PD_CA15_CPU3\t\t 3\n"
- "+#define R8A7790_PD_CA7_CPU0\t\t 5\n"
- "+#define R8A7790_PD_CA7_CPU1\t\t 6\n"
- "+#define R8A7790_PD_CA7_CPU2\t\t 7\n"
- "+#define R8A7790_PD_CA7_CPU3\t\t 8\n"
- "+#define R8A7790_PD_CA15_SCU\t\t12\n"
- "+#define R8A7790_PD_SH_4A\t\t16\n"
- "+#define R8A7790_PD_RGX\t\t\t20\n"
- "+#define R8A7790_PD_CA7_SCU\t\t21\n"
- "+#define R8A7790_PD_IMP\t\t\t24\n"
- "+\n"
- "+/* Always-on power area */\n"
- "+#define R8A7790_PD_ALWAYS_ON\t\t32\n"
- "+\n"
- "+#endif /* __DT_BINDINGS_POWER_R8A7790_SYSC_H__ */\n"
- "-- \n"
- 2.7.0.rc3.207.g0ac5344
+ 1.8.3.1
 
-f207c8baa5998968d5754a2ee69af45f9dbb5ee230aa2efe566069e14e4ae5b2
+8f669275bd9c6bf96cc07d372d88ba2a10d93a3063aa99b930778c7cf4c1c607

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.