-# kbuild trick to avoid linker error. Can be omitted if a module is built.
 -obj- := dummy.o
 -
+ # To compile, from the source root
+ #
+ #    make headers_install
+ #    make M=documentation
+ 
  # List of programs to build
- hostprogs-y := hwtstamp_config timestamping
 -hostprogs-y := timestamping txtimestamp hwtstamp_config
++hostprogs-y := hwtstamp_config timestamping txtimestamp
  
  # Tell kbuild to always build the programs
  always := $(hostprogs-y)
  
  HOSTCFLAGS_timestamping.o += -I$(objtree)/usr/include
+ HOSTCFLAGS_txtimestamp.o += -I$(objtree)/usr/include
  HOSTCFLAGS_hwtstamp_config.o += -I$(objtree)/usr/include
 -
 -clean:
 -      rm -f timestamping txtimestamp hwtstamp_config
 
                        };
                };
  
+               cm: syscon@44e10000 {
+                       compatible = "ti,am33xx-controlmodule", "syscon";
+                       reg = <0x44e10000 0x800>;
+               };
+ 
                intc: interrupt-controller@48200000 {
 -                      compatible = "ti,omap2-intc";
 +                      compatible = "ti,am33xx-intc";
                        interrupt-controller;
                        #interrupt-cells = <1>;
 -                      ti,intc-size = <128>;
                        reg = <0x48200000 0x1000>;
                };
  
 
                startup-delay-us = <100000>;
                vin-supply = <&vcc_io>;
        };
 +
 +      vcc_host: usb-host-regulator {
 +              compatible = "regulator-fixed";
 +              enable-active-high;
 +              gpio = <&gpio0 3 GPIO_ACTIVE_HIGH>;
 +              pinctrl-names = "default";
 +              pinctrl-0 = <&host_vbus_drv>;
 +              regulator-name = "host-pwr";
 +              regulator-min-microvolt = <5000000>;
 +              regulator-max-microvolt = <5000000>;
 +              regulator-always-on;
 +              regulator-boot-on;
 +      };
  };
  
+ &emac {
+       status = "okay";
+ 
+       pinctrl-names = "default";
+       pinctrl-0 = <&emac_xfer>, <&emac_mdio>, <&phy_int>;
+ 
+       phy = <&phy0>;
+       phy-supply = <&vcc_rmii>;
+ 
+       phy0: ethernet-phy@0 {
+               reg = <0>;
+               interrupt-parent = <&gpio3>;
+               interrupts = <26 IRQ_TYPE_LEVEL_LOW>;
+       };
+ };
+ 
  &i2c1 {
        status = "okay";
        clock-frequency = <400000>;
                };
        };
  
 +      hym8563 {
 +              rtc_int: rtc-int {
 +                      rockchip,pins = <RK_GPIO0 0 RK_FUNC_GPIO &pcfg_pull_up>;
 +              };
 +      };
 +
+       lan8720a  {
+               phy_int: phy-int {
+                       rockchip,pins = <RK_GPIO3 26 RK_FUNC_GPIO &pcfg_pull_up>;
+               };
+       };
+ 
        ir-receiver {
                ir_recv_pin: ir-recv-pin {
                        rockchip,pins = <RK_GPIO0 10 RK_FUNC_GPIO &pcfg_pull_none>;
 
                        bias-disable;
                };
  
 +              emmc {
 +                      emmc_clk: emmc-clk {
 +                              rockchip,pins = <RK_GPIO0 24 RK_FUNC_2 &pcfg_pull_none>;
 +                      };
 +
 +                      emmc_cmd: emmc-cmd {
 +                              rockchip,pins = <RK_GPIO0 26 RK_FUNC_2 &pcfg_pull_up>;
 +                      };
 +
 +                      emmc_rst: emmc-rst {
 +                              rockchip,pins = <RK_GPIO0 27 RK_FUNC_2 &pcfg_pull_none>;
 +                      };
 +
 +                      /*
 +                       * The data pins are shared between nandc and emmc and
 +                       * not accessible through pinctrl. Also they should've
 +                       * been already set correctly by firmware, as
 +                       * flash/emmc is the boot-device.
 +                       */
 +              };
 +
+               emac {
+                       emac_xfer: emac-xfer {
+                               rockchip,pins = <RK_GPIO3 16 RK_FUNC_2 &pcfg_pull_none>, /* tx_en */
+                                               <RK_GPIO3 17 RK_FUNC_2 &pcfg_pull_none>, /* txd1 */
+                                               <RK_GPIO3 18 RK_FUNC_2 &pcfg_pull_none>, /* txd0 */
+                                               <RK_GPIO3 19 RK_FUNC_2 &pcfg_pull_none>, /* rxd0 */
+                                               <RK_GPIO3 20 RK_FUNC_2 &pcfg_pull_none>, /* rxd1 */
+                                               <RK_GPIO3 21 RK_FUNC_2 &pcfg_pull_none>, /* mac_clk */
+                                               <RK_GPIO3 22 RK_FUNC_2 &pcfg_pull_none>, /* rx_err */
+                                               <RK_GPIO3 23 RK_FUNC_2 &pcfg_pull_none>; /* crs_dvalid */
+                       };
+ 
+                       emac_mdio: emac-mdio {
+                               rockchip,pins = <RK_GPIO3 24 RK_FUNC_2 &pcfg_pull_none>,
+                                               <RK_GPIO3 25 RK_FUNC_2 &pcfg_pull_none>;
+                       };
+               };
+ 
                i2c0 {
                        i2c0_xfer: i2c0-xfer {
                                rockchip,pins = <RK_GPIO1 24 RK_FUNC_1 &pcfg_pull_none>,
 
                status = "disabled";
        };
  
 +      usb_otg: usb@10180000 {
 +              compatible = "rockchip,rk3066-usb", "snps,dwc2";
 +              reg = <0x10180000 0x40000>;
 +              interrupts = <GIC_SPI 16 IRQ_TYPE_LEVEL_HIGH>;
 +              clocks = <&cru HCLK_OTG0>;
 +              clock-names = "otg";
 +              status = "disabled";
 +      };
 +
 +      usb_host: usb@101c0000 {
 +              compatible = "snps,dwc2";
 +              reg = <0x101c0000 0x40000>;
 +              interrupts = <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
 +              clocks = <&cru HCLK_OTG1>;
 +              clock-names = "otg";
 +              status = "disabled";
 +      };
 +
+       emac: ethernet@10204000 {
+               compatible = "snps,arc-emac";
+               reg = <0x10204000 0x3c>;
+               interrupts = <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>;
+               #address-cells = <1>;
+               #size-cells = <0>;
+ 
+               rockchip,grf = <&grf>;
+ 
+               clocks = <&cru HCLK_EMAC>, <&cru SCLK_MAC>;
+               clock-names = "hclk", "macref";
+               max-speed = <100>;
+               phy-mode = "rmii";
+ 
+               status = "disabled";
+       };
+ 
        mmc0: dwmmc@10214000 {
                compatible = "rockchip,rk2928-dw-mshc";
                reg = <0x10214000 0x1000>;
 
        __u8                    encap_hdr_csum:1;
        __u8                    csum_valid:1;
        __u8                    csum_complete_sw:1;
-       /* 2/4 bit hole (depending on ndisc_nodetype presence) */
-       kmemcheck_bitfield_end(flags2);
+       __u8                    csum_level:2;
+       __u8                    csum_bad:1;
+ 
+ #ifdef CONFIG_IPV6_NDISC_NODETYPE
+       __u8                    ndisc_nodetype:2;
+ #endif
+       __u8                    ipvs_property:1;
+       __u8                    inner_protocol_type:1;
+       /* 4 or 6 bit hole */
+ 
+ #ifdef CONFIG_NET_SCHED
+       __u16                   tc_index;       /* traffic control index */
+ #ifdef CONFIG_NET_CLS_ACT
+       __u16                   tc_verd;        /* traffic control verdict */
+ #endif
+ #endif
  
 -#if defined CONFIG_NET_DMA || defined CONFIG_NET_RX_BUSY_POLL
 -      union {
 -              unsigned int    napi_id;
 -              dma_cookie_t    dma_cookie;
 -      };
+       union {
+               __wsum          csum;
+               struct {
+                       __u16   csum_start;
+                       __u16   csum_offset;
+               };
+       };
+       __u32                   priority;
+       int                     skb_iif;
+       __u32                   hash;
+       __be16                  vlan_proto;
+       __u16                   vlan_tci;
 +#ifdef CONFIG_NET_RX_BUSY_POLL
 +      unsigned int    napi_id;
  #endif
  #ifdef CONFIG_NETWORK_SECMARK
        __u32                   secmark;
 
                        if (offset + 1 != skb->len)
                                continue;
                }
-               if (tcp_hdr(skb)->fin) {
+               if (TCP_SKB_CB(skb)->tcp_flags & TCPHDR_FIN) {
 -                      sk_eat_skb(sk, skb, false);
 +                      sk_eat_skb(sk, skb);
                        ++seq;
                        break;
                }
                if (used + offset < skb->len)
                        continue;
  
-               if (tcp_hdr(skb)->fin)
+               if (TCP_SKB_CB(skb)->tcp_flags & TCPHDR_FIN)
                        goto found_fin_ok;
 -              if (!(flags & MSG_PEEK)) {
 -                      sk_eat_skb(sk, skb, copied_early);
 -                      copied_early = false;
 -              }
 +              if (!(flags & MSG_PEEK))
 +                      sk_eat_skb(sk, skb);
                continue;
  
        found_fin_ok: