diff mbox series

[OpenWrt-Devel] add support for OCTEON TX target

Message ID 1516749344-628-1-git-send-email-tharvey@gateworks.com
State Accepted
Delegated to: John Crispin
Headers show
Series [OpenWrt-Devel] add support for OCTEON TX target | expand

Commit Message

Tim Harvey Jan. 23, 2018, 11:15 p.m. UTC
The Cavium OCTEON TX is an ARM 64-bit SoC leveraging CPU cores and
periperhals from the Cavium ThunderX SoC.

This initial support provides a 4.14 kernel and kernel+initramfs that is
bootable on the Gateworks Newport GW630x as well as the Cavium sff8104
reference board.

Signed-off-by: Tim Harvey <tharvey@gateworks.com>
---
 target/linux/octeontx/Makefile                     |  27 +
 .../octeontx/base-files/etc/board.d/02_network     |  18 +
 target/linux/octeontx/base-files/etc/inittab       |   5 +
 target/linux/octeontx/base-files/lib/octeontx.sh   |  43 ++
 target/linux/octeontx/config-4.14                  | 670 +++++++++++++++++++++
 target/linux/octeontx/image/Makefile               |  21 +
 ...x-add-support-for-rgmii-internal-delay-mo.patch | 148 +++++
 ...hunderx-workaround-BGX-TX-Underflow-issue.patch | 117 ++++
 8 files changed, 1049 insertions(+)
 create mode 100644 target/linux/octeontx/Makefile
 create mode 100644 target/linux/octeontx/base-files/etc/board.d/02_network
 create mode 100644 target/linux/octeontx/base-files/etc/inittab
 create mode 100644 target/linux/octeontx/base-files/lib/octeontx.sh
 create mode 100644 target/linux/octeontx/config-4.14
 create mode 100644 target/linux/octeontx/image/Makefile
 create mode 100644 target/linux/octeontx/patches-4.14/0001-net-thunderx-add-support-for-rgmii-internal-delay-mo.patch
 create mode 100644 target/linux/octeontx/patches-4.14/0001-net-thunderx-workaround-BGX-TX-Underflow-issue.patch

Comments

Hauke Mehrtens Feb. 13, 2018, 8:46 p.m. UTC | #1
Hi Tim,

sorry that I haven't reviewed this earlyer, but now I saw some problems,
see my comments inline.

Can you please create a follow up patch based on current master branch.

On 01/24/2018 12:15 AM, Tim Harvey wrote:
> The Cavium OCTEON TX is an ARM 64-bit SoC leveraging CPU cores and
> periperhals from the Cavium ThunderX SoC.
> 
> This initial support provides a 4.14 kernel and kernel+initramfs that is
> bootable on the Gateworks Newport GW630x as well as the Cavium sff8104
> reference board.
> 
> Signed-off-by: Tim Harvey <tharvey@gateworks.com>
> ---
>  target/linux/octeontx/Makefile                     |  27 +
>  .../octeontx/base-files/etc/board.d/02_network     |  18 +
>  target/linux/octeontx/base-files/etc/inittab       |   5 +
>  target/linux/octeontx/base-files/lib/octeontx.sh   |  43 ++
>  target/linux/octeontx/config-4.14                  | 670 +++++++++++++++++++++
>  target/linux/octeontx/image/Makefile               |  21 +
>  ...x-add-support-for-rgmii-internal-delay-mo.patch | 148 +++++
>  ...hunderx-workaround-BGX-TX-Underflow-issue.patch | 117 ++++
>  8 files changed, 1049 insertions(+)
>  create mode 100644 target/linux/octeontx/Makefile
>  create mode 100644 target/linux/octeontx/base-files/etc/board.d/02_network
>  create mode 100644 target/linux/octeontx/base-files/etc/inittab
>  create mode 100644 target/linux/octeontx/base-files/lib/octeontx.sh
>  create mode 100644 target/linux/octeontx/config-4.14
>  create mode 100644 target/linux/octeontx/image/Makefile
>  create mode 100644 target/linux/octeontx/patches-4.14/0001-net-thunderx-add-support-for-rgmii-internal-delay-mo.patch
>  create mode 100644 target/linux/octeontx/patches-4.14/0001-net-thunderx-workaround-BGX-TX-Underflow-issue.patch
> 
> diff --git a/target/linux/octeontx/Makefile b/target/linux/octeontx/Makefile
> new file mode 100644
> index 0000000..bbe8149
> --- /dev/null
> +++ b/target/linux/octeontx/Makefile
> @@ -0,0 +1,27 @@
> +#
> +# Copyright (C) 2018 OpenWrt.org
> +#
> +# This is free software, licensed under the GNU General Public License v2.
> +# See /LICENSE for more information.
> +#
> +include $(TOPDIR)/rules.mk
> +
> +ARCH:=aarch64
> +BOARD:=octeontx
> +BOARDNAME:=Octeon-TX
> +FEATURES:=targz pcie gpio rtc usb

I think you should define fpu here, but arm64 anyway has a fpu.

> +CFLAGS:=-Os -pipe -fno-caller-saves

You should not define CFLAGS for the toolchain as this will also leak
into other targets if they share the same toolchain.

Can you try to remove the CFLAGS setting if it still works?
The build system will then set it to "-Os -pipe -mcpu=generic"

> +
> +MAINTAINER:=Tim Harvey <tharvey@gateworks.com>
> +
> +KERNEL_PATCHVER:=4.14
> +
> +define Target/Description
> +	Build images for Octeon-TX CN80XX/CN81XX based boards
> +endef
> +
> +include $(INCLUDE_DIR)/target.mk
> +
> +KERNELNAME:=Image
> +
> +$(eval $(call BuildTarget))
....
> diff --git a/target/linux/octeontx/config-4.14 b/target/linux/octeontx/config-4.14
> new file mode 100644
> index 0000000..97d0cc6
> --- /dev/null
> +++ b/target/linux/octeontx/config-4.14
> @@ -0,0 +1,670 @@
.....
> +# CONFIG_CRYPTO_SHA512_ARM64 is not set
> +CONFIG_CRYPTO_SIMD=y
> +CONFIG_CRYPTO_WORKQUEUE=y
> +CONFIG_DCACHE_WORD_ACCESS=y
> +# CONFIG_DEBUG_ALIGN_RODATA is not set
> +# CONFIG_DEBUG_BLK_CGROUP is not set
> +CONFIG_DEBUG_INFO=y

Is this needed by default?

> +CONFIG_DEFAULT_IOSCHED="noop"
> +CONFIG_DEFAULT_NOOP=y
> +# CONFIG_DEVPORT is not set
> +CONFIG_DEVTMPFS=y
> +CONFIG_DEVTMPFS_MOUNT=y
> +CONFIG_DMADEVICES=y
> +CONFIG_DMA_CMA=y
> +CONFIG_DMA_ENGINE=y
> +# CONFIG_DMA_NOOP_OPS is not set
> +CONFIG_DMA_OF=y
> +CONFIG_DMA_SHARED_BUFFER=y
> +# CONFIG_DMA_VIRT_OPS is not set
> +CONFIG_DNS_RESOLVER=y
> +# CONFIG_DRM_LIB_RANDOM is not set
> +CONFIG_DTC=y
> +CONFIG_DT_IDLE_STATES=y
> +CONFIG_EDAC=y
> +# CONFIG_EDAC_DEBUG is not set
> +CONFIG_EDAC_LEGACY_SYSFS=y
> +CONFIG_EDAC_SUPPORT=y
> +CONFIG_EDAC_THUNDERX=y
> +# CONFIG_EDAC_XGENE is not set
> +CONFIG_EEPROM_AT24=y
> +# CONFIG_EVM is not set
> +CONFIG_EXT2_FS=y
> +CONFIG_EXT3_FS=y

Please activate ext2 and 3 support in ext4 instead.

> +# CONFIG_EXT3_FS_POSIX_ACL is not set
> +# CONFIG_EXT3_FS_SECURITY is not set
> +CONFIG_EXT4_FS=y
> +CONFIG_EXT4_FS_POSIX_ACL=y
> +# CONFIG_F2FS_CHECK_FS is not set
> +CONFIG_F2FS_FS=y
> +# CONFIG_F2FS_FS_SECURITY is not set
> +CONFIG_F2FS_FS_XATTR=y
> +CONFIG_F2FS_STAT_FS=y
...

You should run "make kernel_oldconfig" to refresh the configuration.

There is also something missing in this configuration or in the generic
one, see this error from the build bot:
http://phase1.builds.lede-project.org/builders/octeontx%2Fgeneric/builds/0/steps/kmods/logs/stdio

Please test compile it with this configuration:
CONFIG_TARGET_octeontx=y
CONFIG_TARGET_octeontx_Default=y
CONFIG_TARGET_BOARD="octeontx"
CONFIG_ALL_KMODS=y
Hauke Mehrtens Feb. 13, 2018, 8:51 p.m. UTC | #2
On 02/13/2018 09:46 PM, Hauke Mehrtens wrote:
> Hi Tim,
> 
> sorry that I haven't reviewed this earlyer, but now I saw some problems,
> see my comments inline.
> 
> Can you please create a follow up patch based on current master branch.
> 
> On 01/24/2018 12:15 AM, Tim Harvey wrote:
>> The Cavium OCTEON TX is an ARM 64-bit SoC leveraging CPU cores and
>> periperhals from the Cavium ThunderX SoC.
>>
>> This initial support provides a 4.14 kernel and kernel+initramfs that is
>> bootable on the Gateworks Newport GW630x as well as the Cavium sff8104
>> reference board.
>>
>> Signed-off-by: Tim Harvey <tharvey@gateworks.com>
>> ---
>>  target/linux/octeontx/Makefile                     |  27 +
>>  .../octeontx/base-files/etc/board.d/02_network     |  18 +
>>  target/linux/octeontx/base-files/etc/inittab       |   5 +
>>  target/linux/octeontx/base-files/lib/octeontx.sh   |  43 ++
>>  target/linux/octeontx/config-4.14                  | 670 +++++++++++++++++++++
>>  target/linux/octeontx/image/Makefile               |  21 +
>>  ...x-add-support-for-rgmii-internal-delay-mo.patch | 148 +++++
>>  ...hunderx-workaround-BGX-TX-Underflow-issue.patch | 117 ++++
>>  8 files changed, 1049 insertions(+)
>>  create mode 100644 target/linux/octeontx/Makefile
>>  create mode 100644 target/linux/octeontx/base-files/etc/board.d/02_network
>>  create mode 100644 target/linux/octeontx/base-files/etc/inittab
>>  create mode 100644 target/linux/octeontx/base-files/lib/octeontx.sh
>>  create mode 100644 target/linux/octeontx/config-4.14
>>  create mode 100644 target/linux/octeontx/image/Makefile
>>  create mode 100644 target/linux/octeontx/patches-4.14/0001-net-thunderx-add-support-for-rgmii-internal-delay-mo.patch
>>  create mode 100644 target/linux/octeontx/patches-4.14/0001-net-thunderx-workaround-BGX-TX-Underflow-issue.patch
>>
>> diff --git a/target/linux/octeontx/Makefile b/target/linux/octeontx/Makefile
>> new file mode 100644
>> index 0000000..bbe8149
>> --- /dev/null
>> +++ b/target/linux/octeontx/Makefile
>> @@ -0,0 +1,27 @@
>> +#
>> +# Copyright (C) 2018 OpenWrt.org
>> +#
>> +# This is free software, licensed under the GNU General Public License v2.
>> +# See /LICENSE for more information.
>> +#
>> +include $(TOPDIR)/rules.mk
>> +
>> +ARCH:=aarch64
>> +BOARD:=octeontx
>> +BOARDNAME:=Octeon-TX
>> +FEATURES:=targz pcie gpio rtc usb
> 
> I think you should define fpu here, but arm64 anyway has a fpu.
> 
>> +CFLAGS:=-Os -pipe -fno-caller-saves
> 
> You should not define CFLAGS for the toolchain as this will also leak
> into other targets if they share the same toolchain.
> 
> Can you try to remove the CFLAGS setting if it still works?
> The build system will then set it to "-Os -pipe -mcpu=generic"
> 
>> +
>> +MAINTAINER:=Tim Harvey <tharvey@gateworks.com>
>> +
>> +KERNEL_PATCHVER:=4.14
>> +
>> +define Target/Description
>> +	Build images for Octeon-TX CN80XX/CN81XX based boards
>> +endef
>> +
>> +include $(INCLUDE_DIR)/target.mk
>> +
>> +KERNELNAME:=Image
>> +
>> +$(eval $(call BuildTarget))
> ....
>> diff --git a/target/linux/octeontx/config-4.14 b/target/linux/octeontx/config-4.14
>> new file mode 100644
>> index 0000000..97d0cc6
>> --- /dev/null
>> +++ b/target/linux/octeontx/config-4.14
>> @@ -0,0 +1,670 @@
> .....
>> +# CONFIG_CRYPTO_SHA512_ARM64 is not set
>> +CONFIG_CRYPTO_SIMD=y
>> +CONFIG_CRYPTO_WORKQUEUE=y
>> +CONFIG_DCACHE_WORD_ACCESS=y
>> +# CONFIG_DEBUG_ALIGN_RODATA is not set
>> +# CONFIG_DEBUG_BLK_CGROUP is not set
>> +CONFIG_DEBUG_INFO=y
> 
> Is this needed by default?
> 
>> +CONFIG_DEFAULT_IOSCHED="noop"
>> +CONFIG_DEFAULT_NOOP=y
>> +# CONFIG_DEVPORT is not set
>> +CONFIG_DEVTMPFS=y
>> +CONFIG_DEVTMPFS_MOUNT=y
>> +CONFIG_DMADEVICES=y
>> +CONFIG_DMA_CMA=y
>> +CONFIG_DMA_ENGINE=y
>> +# CONFIG_DMA_NOOP_OPS is not set
>> +CONFIG_DMA_OF=y
>> +CONFIG_DMA_SHARED_BUFFER=y
>> +# CONFIG_DMA_VIRT_OPS is not set
>> +CONFIG_DNS_RESOLVER=y
>> +# CONFIG_DRM_LIB_RANDOM is not set
>> +CONFIG_DTC=y
>> +CONFIG_DT_IDLE_STATES=y
>> +CONFIG_EDAC=y
>> +# CONFIG_EDAC_DEBUG is not set
>> +CONFIG_EDAC_LEGACY_SYSFS=y
>> +CONFIG_EDAC_SUPPORT=y
>> +CONFIG_EDAC_THUNDERX=y
>> +# CONFIG_EDAC_XGENE is not set
>> +CONFIG_EEPROM_AT24=y
>> +# CONFIG_EVM is not set
>> +CONFIG_EXT2_FS=y
>> +CONFIG_EXT3_FS=y
> 
> Please activate ext2 and 3 support in ext4 instead.
> 
>> +# CONFIG_EXT3_FS_POSIX_ACL is not set
>> +# CONFIG_EXT3_FS_SECURITY is not set
>> +CONFIG_EXT4_FS=y
>> +CONFIG_EXT4_FS_POSIX_ACL=y
>> +# CONFIG_F2FS_CHECK_FS is not set
>> +CONFIG_F2FS_FS=y
>> +# CONFIG_F2FS_FS_SECURITY is not set
>> +CONFIG_F2FS_FS_XATTR=y
>> +CONFIG_F2FS_STAT_FS=y
> ...
> 
> You should run "make kernel_oldconfig" to refresh the configuration.

Please do not deactivate all the CONFIG_NET_VENDOR* options.

> 
> There is also something missing in this configuration or in the generic
> one, see this error from the build bot:
> http://phase1.builds.lede-project.org/builders/octeontx%2Fgeneric/builds/0/steps/kmods/logs/stdio
> 
> Please test compile it with this configuration:
> CONFIG_TARGET_octeontx=y
> CONFIG_TARGET_octeontx_Default=y
> CONFIG_TARGET_BOARD="octeontx"
> CONFIG_ALL_KMODS=y
>
Tim Harvey Feb. 15, 2018, 5:42 p.m. UTC | #3
On Tue, Feb 13, 2018 at 12:51 PM, Hauke Mehrtens <hauke@hauke-m.de> wrote:
> On 02/13/2018 09:46 PM, Hauke Mehrtens wrote:
>> Hi Tim,
>>
>> sorry that I haven't reviewed this earlyer, but now I saw some problems,
>> see my comments inline.
>>
>> Can you please create a follow up patch based on current master branch.

Hauke,

Thanks for your review! Looks like John committed already (thanks
John!) but I will send followup patches for the things you point out.

comments/questions below;

<snip>
>>> diff --git a/target/linux/octeontx/Makefile b/target/linux/octeontx/Makefile
>>> new file mode 100644
>>> index 0000000..bbe8149
>>> --- /dev/null
>>> +++ b/target/linux/octeontx/Makefile
>>> @@ -0,0 +1,27 @@
>>> +#
>>> +# Copyright (C) 2018 OpenWrt.org
>>> +#
>>> +# This is free software, licensed under the GNU General Public License v2.
>>> +# See /LICENSE for more information.
>>> +#
>>> +include $(TOPDIR)/rules.mk
>>> +
>>> +ARCH:=aarch64
>>> +BOARD:=octeontx
>>> +BOARDNAME:=Octeon-TX
>>> +FEATURES:=targz pcie gpio rtc usb
>>
>> I think you should define fpu here, but arm64 anyway has a fpu.
>>
>>> +CFLAGS:=-Os -pipe -fno-caller-saves
>>
>> You should not define CFLAGS for the toolchain as this will also leak
>> into other targets if they share the same toolchain.
>>
>> Can you try to remove the CFLAGS setting if it still works?
>> The build system will then set it to "-Os -pipe -mcpu=generic"

I'll add fpu and remove CFLAGS after testing.

>>
>>> +
>>> +MAINTAINER:=Tim Harvey <tharvey@gateworks.com>
>>> +
>>> +KERNEL_PATCHVER:=4.14
>>> +
>>> +define Target/Description
>>> +    Build images for Octeon-TX CN80XX/CN81XX based boards
>>> +endef
>>> +
>>> +include $(INCLUDE_DIR)/target.mk
>>> +
>>> +KERNELNAME:=Image
>>> +
>>> +$(eval $(call BuildTarget))
>> ....
>>> diff --git a/target/linux/octeontx/config-4.14 b/target/linux/octeontx/config-4.14
>>> new file mode 100644
>>> index 0000000..97d0cc6
>>> --- /dev/null
>>> +++ b/target/linux/octeontx/config-4.14
>>> @@ -0,0 +1,670 @@
>> .....
>>> +# CONFIG_CRYPTO_SHA512_ARM64 is not set
>>> +CONFIG_CRYPTO_SIMD=y
>>> +CONFIG_CRYPTO_WORKQUEUE=y
>>> +CONFIG_DCACHE_WORD_ACCESS=y
>>> +# CONFIG_DEBUG_ALIGN_RODATA is not set
>>> +# CONFIG_DEBUG_BLK_CGROUP is not set
>>> +CONFIG_DEBUG_INFO=y
>>
>> Is this needed by default?

no - will remove

>>
>>> +CONFIG_DEFAULT_IOSCHED="noop"
>>> +CONFIG_DEFAULT_NOOP=y
>>> +# CONFIG_DEVPORT is not set
>>> +CONFIG_DEVTMPFS=y
>>> +CONFIG_DEVTMPFS_MOUNT=y
>>> +CONFIG_DMADEVICES=y
>>> +CONFIG_DMA_CMA=y
>>> +CONFIG_DMA_ENGINE=y
>>> +# CONFIG_DMA_NOOP_OPS is not set
>>> +CONFIG_DMA_OF=y
>>> +CONFIG_DMA_SHARED_BUFFER=y
>>> +# CONFIG_DMA_VIRT_OPS is not set
>>> +CONFIG_DNS_RESOLVER=y
>>> +# CONFIG_DRM_LIB_RANDOM is not set
>>> +CONFIG_DTC=y
>>> +CONFIG_DT_IDLE_STATES=y
>>> +CONFIG_EDAC=y
>>> +# CONFIG_EDAC_DEBUG is not set
>>> +CONFIG_EDAC_LEGACY_SYSFS=y
>>> +CONFIG_EDAC_SUPPORT=y
>>> +CONFIG_EDAC_THUNDERX=y
>>> +# CONFIG_EDAC_XGENE is not set
>>> +CONFIG_EEPROM_AT24=y
>>> +# CONFIG_EVM is not set
>>> +CONFIG_EXT2_FS=y
>>> +CONFIG_EXT3_FS=y
>>
>> Please activate ext2 and 3 support in ext4 instead.

done - I actually am removing all EXT static as I believe F2FS is
preferred for MMC.

>>
>>> +# CONFIG_EXT3_FS_POSIX_ACL is not set
>>> +# CONFIG_EXT3_FS_SECURITY is not set
>>> +CONFIG_EXT4_FS=y
>>> +CONFIG_EXT4_FS_POSIX_ACL=y
>>> +# CONFIG_F2FS_CHECK_FS is not set
>>> +CONFIG_F2FS_FS=y
>>> +# CONFIG_F2FS_FS_SECURITY is not set
>>> +CONFIG_F2FS_FS_XATTR=y
>>> +CONFIG_F2FS_STAT_FS=y
>> ...
>>
>> You should run "make kernel_oldconfig" to refresh the configuration.

I did and it didn't change target/linux/octeontx/config-4.14?

>
> Please do not deactivate all the CONFIG_NET_VENDOR* options.

That makes sense in general as they are all enabled in
target/linux/generic/config-4.14 to allow inclusion of modules. I do
see there are several targets that undef them like I did.

I did find that undefining them prompts for QCA7000_UART - I'll submit
a patch that undefs that in target/linux/generic/config-4.14.

Are there a set of general rules when preparing new target kernel
configs or updating kernel configs for new kernel versions?

>
>>
>> There is also something missing in this configuration or in the generic
>> one, see this error from the build bot:
>> http://phase1.builds.lede-project.org/builders/octeontx%2Fgeneric/builds/0/steps/kmods/logs/stdio
>>
>> Please test compile it with this configuration:
>> CONFIG_TARGET_octeontx=y
>> CONFIG_TARGET_octeontx_Default=y
>> CONFIG_TARGET_BOARD="octeontx"
>> CONFIG_ALL_KMODS=y
>>
>

I haven't encountered any issues with those configs. I'm not quite
clear how to reproduce the failure from
http://phase1.builds.lede-project.org/builders/octeontx%2Fgeneric/builds/0/steps/kmods/logs/stdio.

Regards,

Tim
Hauke Mehrtens Feb. 17, 2018, 12:44 p.m. UTC | #4
On 02/15/2018 06:42 PM, Tim Harvey wrote:
> On Tue, Feb 13, 2018 at 12:51 PM, Hauke Mehrtens <hauke@hauke-m.de> wrote:
>> On 02/13/2018 09:46 PM, Hauke Mehrtens wrote:
>>> Hi Tim,
>>>
>>> sorry that I haven't reviewed this earlyer, but now I saw some problems,
>>> see my comments inline.
>>>
>>> Can you please create a follow up patch based on current master branch.
> 
> Hauke,
> 
> Thanks for your review! Looks like John committed already (thanks
> John!) but I will send followup patches for the things you point out.
> 
> comments/questions below;
> 
> <snip>
>>>> diff --git a/target/linux/octeontx/Makefile b/target/linux/octeontx/Makefile
>>>> new file mode 100644
>>>> index 0000000..bbe8149
>>>> --- /dev/null
>>>> +++ b/target/linux/octeontx/Makefile
>>>> @@ -0,0 +1,27 @@
>>>> +#
>>>> +# Copyright (C) 2018 OpenWrt.org
>>>> +#
>>>> +# This is free software, licensed under the GNU General Public License v2.
>>>> +# See /LICENSE for more information.
>>>> +#
>>>> +include $(TOPDIR)/rules.mk
>>>> +
>>>> +ARCH:=aarch64
>>>> +BOARD:=octeontx
>>>> +BOARDNAME:=Octeon-TX
>>>> +FEATURES:=targz pcie gpio rtc usb
>>>
>>> I think you should define fpu here, but arm64 anyway has a fpu.
>>>
>>>> +CFLAGS:=-Os -pipe -fno-caller-saves
>>>
>>> You should not define CFLAGS for the toolchain as this will also leak
>>> into other targets if they share the same toolchain.
>>>
>>> Can you try to remove the CFLAGS setting if it still works?
>>> The build system will then set it to "-Os -pipe -mcpu=generic"
> 
> I'll add fpu and remove CFLAGS after testing.
> 
>>>
>>>> +
>>>> +MAINTAINER:=Tim Harvey <tharvey@gateworks.com>
>>>> +
>>>> +KERNEL_PATCHVER:=4.14
>>>> +
>>>> +define Target/Description
>>>> +    Build images for Octeon-TX CN80XX/CN81XX based boards
>>>> +endef
>>>> +
>>>> +include $(INCLUDE_DIR)/target.mk
>>>> +
>>>> +KERNELNAME:=Image
>>>> +
>>>> +$(eval $(call BuildTarget))
>>> ....
>>>> diff --git a/target/linux/octeontx/config-4.14 b/target/linux/octeontx/config-4.14
>>>> new file mode 100644
>>>> index 0000000..97d0cc6
>>>> --- /dev/null
>>>> +++ b/target/linux/octeontx/config-4.14
>>>> @@ -0,0 +1,670 @@
>>> .....
>>>> +# CONFIG_CRYPTO_SHA512_ARM64 is not set
>>>> +CONFIG_CRYPTO_SIMD=y
>>>> +CONFIG_CRYPTO_WORKQUEUE=y
>>>> +CONFIG_DCACHE_WORD_ACCESS=y
>>>> +# CONFIG_DEBUG_ALIGN_RODATA is not set
>>>> +# CONFIG_DEBUG_BLK_CGROUP is not set
>>>> +CONFIG_DEBUG_INFO=y
>>>
>>> Is this needed by default?
> 
> no - will remove
> 
>>>
>>>> +CONFIG_DEFAULT_IOSCHED="noop"
>>>> +CONFIG_DEFAULT_NOOP=y
>>>> +# CONFIG_DEVPORT is not set
>>>> +CONFIG_DEVTMPFS=y
>>>> +CONFIG_DEVTMPFS_MOUNT=y
>>>> +CONFIG_DMADEVICES=y
>>>> +CONFIG_DMA_CMA=y
>>>> +CONFIG_DMA_ENGINE=y
>>>> +# CONFIG_DMA_NOOP_OPS is not set
>>>> +CONFIG_DMA_OF=y
>>>> +CONFIG_DMA_SHARED_BUFFER=y
>>>> +# CONFIG_DMA_VIRT_OPS is not set
>>>> +CONFIG_DNS_RESOLVER=y
>>>> +# CONFIG_DRM_LIB_RANDOM is not set
>>>> +CONFIG_DTC=y
>>>> +CONFIG_DT_IDLE_STATES=y
>>>> +CONFIG_EDAC=y
>>>> +# CONFIG_EDAC_DEBUG is not set
>>>> +CONFIG_EDAC_LEGACY_SYSFS=y
>>>> +CONFIG_EDAC_SUPPORT=y
>>>> +CONFIG_EDAC_THUNDERX=y
>>>> +# CONFIG_EDAC_XGENE is not set
>>>> +CONFIG_EEPROM_AT24=y
>>>> +# CONFIG_EVM is not set
>>>> +CONFIG_EXT2_FS=y
>>>> +CONFIG_EXT3_FS=y
>>>
>>> Please activate ext2 and 3 support in ext4 instead.
> 
> done - I actually am removing all EXT static as I believe F2FS is
> preferred for MMC.
> 
>>>
>>>> +# CONFIG_EXT3_FS_POSIX_ACL is not set
>>>> +# CONFIG_EXT3_FS_SECURITY is not set
>>>> +CONFIG_EXT4_FS=y
>>>> +CONFIG_EXT4_FS_POSIX_ACL=y
>>>> +# CONFIG_F2FS_CHECK_FS is not set
>>>> +CONFIG_F2FS_FS=y
>>>> +# CONFIG_F2FS_FS_SECURITY is not set
>>>> +CONFIG_F2FS_FS_XATTR=y
>>>> +CONFIG_F2FS_STAT_FS=y
>>> ...
>>>
>>> You should run "make kernel_oldconfig" to refresh the configuration.
> 
> I did and it didn't change target/linux/octeontx/config-4.14?

I think this was a false alarm.

> 
>>
>> Please do not deactivate all the CONFIG_NET_VENDOR* options.
> 
> That makes sense in general as they are all enabled in
> target/linux/generic/config-4.14 to allow inclusion of modules. I do
> see there are several targets that undef them like I did.

I think that is a bad practice.

> I did find that undefining them prompts for QCA7000_UART - I'll submit
> a patch that undefs that in target/linux/generic/config-4.14.

Yes add that to target/linux/generic/config-4.14

> Are there a set of general rules when preparing new target kernel
> configs or updating kernel configs for new kernel versions?

I think there are no written rules available.

>>> There is also something missing in this configuration or in the generic
>>> one, see this error from the build bot:
>>> http://phase1.builds.lede-project.org/builders/octeontx%2Fgeneric/builds/0/steps/kmods/logs/stdio
>>>
>>> Please test compile it with this configuration:
>>> CONFIG_TARGET_octeontx=y
>>> CONFIG_TARGET_octeontx_Default=y
>>> CONFIG_TARGET_BOARD="octeontx"
>>> CONFIG_ALL_KMODS=y
>>>
>>
> 
> I haven't encountered any issues with those configs. I'm not quite
> clear how to reproduce the failure from
> http://phase1.builds.lede-project.org/builders/octeontx%2Fgeneric/builds/0/steps/kmods/logs/stdio.

I fixes that problem in this commit:
https://git.openwrt.org/970cbfc3074daa177c6d4868d1a94e70906d2568

After doing so the build ran into the next problem:
http://phase1.builds.lede-project.org/builders/octeontx%2Fgeneric/builds/12/steps/pkgbuild/logs/stdio

When you place this into your .config file:
CONFIG_TARGET_octeontx=y
CONFIG_TARGET_octeontx_Default=y
CONFIG_TARGET_BOARD="octeontx"
CONFIG_ALL_KMODS=y

Then run "make defconfig" and build you should run into this problem.
This should result in the same kernel build as the build bots are doing.

It could be that you have to remove this folder here first:
build_dir/target-aarch64_generic_musl/linux-octeontx/linux-4.14.18/

Hauke
diff mbox series

Patch

diff --git a/target/linux/octeontx/Makefile b/target/linux/octeontx/Makefile
new file mode 100644
index 0000000..bbe8149
--- /dev/null
+++ b/target/linux/octeontx/Makefile
@@ -0,0 +1,27 @@ 
+#
+# Copyright (C) 2018 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+include $(TOPDIR)/rules.mk
+
+ARCH:=aarch64
+BOARD:=octeontx
+BOARDNAME:=Octeon-TX
+FEATURES:=targz pcie gpio rtc usb
+CFLAGS:=-Os -pipe -fno-caller-saves
+
+MAINTAINER:=Tim Harvey <tharvey@gateworks.com>
+
+KERNEL_PATCHVER:=4.14
+
+define Target/Description
+	Build images for Octeon-TX CN80XX/CN81XX based boards
+endef
+
+include $(INCLUDE_DIR)/target.mk
+
+KERNELNAME:=Image
+
+$(eval $(call BuildTarget))
diff --git a/target/linux/octeontx/base-files/etc/board.d/02_network b/target/linux/octeontx/base-files/etc/board.d/02_network
new file mode 100644
index 0000000..3ad5e85
--- /dev/null
+++ b/target/linux/octeontx/base-files/etc/board.d/02_network
@@ -0,0 +1,18 @@ 
+#!/bin/sh
+#
+# Copyright (C) 2018 OpenWrt.org
+#
+
+. ./lib/functions/uci-defaults.sh
+. ./lib/octeontx.sh
+
+board=$(octeontx_board_name)
+
+board_config_update
+
+case "$board" in
+esac
+
+board_config_flush
+
+exit 0
diff --git a/target/linux/octeontx/base-files/etc/inittab b/target/linux/octeontx/base-files/etc/inittab
new file mode 100644
index 0000000..be235d8
--- /dev/null
+++ b/target/linux/octeontx/base-files/etc/inittab
@@ -0,0 +1,5 @@ 
+::sysinit:/etc/init.d/rcS S boot
+::shutdown:/etc/init.d/rcS K shutdown
+tts/0::askfirst:/usr/libexec/login.sh
+ttyAMA0::askfirst:/usr/libexec/login.sh
+tty1::askfirst:/usr/libexec/login.sh
diff --git a/target/linux/octeontx/base-files/lib/octeontx.sh b/target/linux/octeontx/base-files/lib/octeontx.sh
new file mode 100644
index 0000000..b6335f8
--- /dev/null
+++ b/target/linux/octeontx/base-files/lib/octeontx.sh
@@ -0,0 +1,43 @@ 
+#!/bin/sh
+#
+# Copyright (C) 2018 OpenWrt.org
+#
+
+octeontx_board_detect() {
+	local machine
+	local name
+
+	machine=$(cat /proc/device-tree/model)
+	board=$(cat /proc/device-tree/board)
+
+	case "$machine" in
+	"Cavium ThunderX CN81XX board")
+		name="cn81xx"
+		;;
+
+	*)
+		name="generic"
+		;;
+	esac
+
+	case "$board" in
+	GW630*)
+		name="gw630x"
+		;;
+	esac
+
+	[ -e "/tmp/sysinfo" ] || mkdir -p "/tmp/sysinfo"
+
+	echo "$name" > /tmp/sysinfo/board_name
+	echo "$machine" > /tmp/sysinfo/model
+}
+
+octeontx_board_name() {
+	local name
+
+	[ -f /tmp/sysinfo/board_name ] || octeontx_board_detect
+	[ -f /tmp/sysinfo/board_name ] && name=$(cat /tmp/sysinfo/board_name)
+	[ -z "$name" ] && name="unknown"
+
+	echo "$name"
+}
diff --git a/target/linux/octeontx/config-4.14 b/target/linux/octeontx/config-4.14
new file mode 100644
index 0000000..97d0cc6
--- /dev/null
+++ b/target/linux/octeontx/config-4.14
@@ -0,0 +1,670 @@ 
+CONFIG_64BIT=y
+# CONFIG_ACPI is not set
+CONFIG_ARCH_CLOCKSOURCE_DATA=y
+CONFIG_ARCH_DMA_ADDR_T_64BIT=y
+CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y
+CONFIG_ARCH_HAS_DEBUG_VIRTUAL=y
+CONFIG_ARCH_HAS_ELF_RANDOMIZE=y
+CONFIG_ARCH_HAS_FORTIFY_SOURCE=y
+CONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y
+CONFIG_ARCH_HAS_GIGANTIC_PAGE=y
+CONFIG_ARCH_HAS_HOLES_MEMORYMODEL=y
+CONFIG_ARCH_HAS_KCOV=y
+CONFIG_ARCH_HAS_SET_MEMORY=y
+CONFIG_ARCH_HAS_SG_CHAIN=y
+CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
+CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
+CONFIG_ARCH_HAS_TICK_BROADCAST=y
+CONFIG_ARCH_HIBERNATION_HEADER=y
+CONFIG_ARCH_HIBERNATION_POSSIBLE=y
+CONFIG_ARCH_MMAP_RND_BITS=18
+CONFIG_ARCH_MMAP_RND_BITS_MAX=33
+CONFIG_ARCH_MMAP_RND_BITS_MIN=18
+CONFIG_ARCH_MMAP_RND_COMPAT_BITS=11
+CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=11
+# CONFIG_ARCH_OPTIONAL_KERNEL_RWX is not set
+# CONFIG_ARCH_OPTIONAL_KERNEL_RWX_DEFAULT is not set
+CONFIG_ARCH_PHYS_ADDR_T_64BIT=y
+CONFIG_ARCH_PROC_KCORE_TEXT=y
+CONFIG_ARCH_SELECT_MEMORY_MODEL=y
+CONFIG_ARCH_SPARSEMEM_DEFAULT=y
+CONFIG_ARCH_SPARSEMEM_ENABLE=y
+CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y
+CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y
+CONFIG_ARCH_SUPPORTS_MEMORY_FAILURE=y
+CONFIG_ARCH_SUPPORTS_NUMA_BALANCING=y
+CONFIG_ARCH_SUPPORTS_UPROBES=y
+CONFIG_ARCH_SUSPEND_POSSIBLE=y
+CONFIG_ARCH_THUNDER=y
+CONFIG_ARCH_USE_CMPXCHG_LOCKREF=y
+# CONFIG_ARCH_WANTS_THP_SWAP is not set
+CONFIG_ARCH_WANT_COMPAT_IPC_PARSE_VERSION=y
+CONFIG_ARCH_WANT_FRAME_POINTERS=y
+CONFIG_ARCH_WANT_HUGE_PMD_SHARE=y
+CONFIG_ARM64=y
+# CONFIG_ARM64_16K_PAGES is not set
+CONFIG_ARM64_4K_PAGES=y
+# CONFIG_ARM64_64K_PAGES is not set
+CONFIG_ARM64_CONT_SHIFT=4
+CONFIG_ARM64_CRYPTO=y
+CONFIG_ARM64_HW_AFDBM=y
+# CONFIG_ARM64_LSE_ATOMICS is not set
+CONFIG_ARM64_PAGE_SHIFT=12
+CONFIG_ARM64_PAN=y
+# CONFIG_ARM64_PMEM is not set
+# CONFIG_ARM64_PTDUMP_CORE is not set
+# CONFIG_ARM64_PTDUMP_DEBUGFS is not set
+# CONFIG_ARM64_RANDOMIZE_TEXT_OFFSET is not set
+# CONFIG_ARM64_SW_TTBR0_PAN is not set
+CONFIG_ARM64_UAO=y
+CONFIG_ARM64_VA_BITS=48
+# CONFIG_ARM64_VA_BITS_39 is not set
+CONFIG_ARM64_VA_BITS_48=y
+CONFIG_ARM64_VHE=y
+# CONFIG_ARMV8_DEPRECATED is not set
+CONFIG_ARM_AMBA=y
+CONFIG_ARM_ARCH_TIMER=y
+CONFIG_ARM_ARCH_TIMER_EVTSTREAM=y
+CONFIG_ARM_CPUIDLE=y
+CONFIG_ARM_GIC=y
+CONFIG_ARM_GIC_V2M=y
+CONFIG_ARM_GIC_V3=y
+CONFIG_ARM_GIC_V3_ITS=y
+# CONFIG_ARM_PSCI_CHECKER is not set
+CONFIG_ARM_PSCI_FW=y
+CONFIG_ARM_SBSA_WATCHDOG=y
+# CONFIG_ARM_SP805_WATCHDOG is not set
+CONFIG_ASSOCIATIVE_ARRAY=y
+CONFIG_ATA=y
+# CONFIG_ATA_SFF is not set
+CONFIG_AUDIT=y
+CONFIG_AUDITSYSCALL=y
+CONFIG_AUDIT_ARCH_COMPAT_GENERIC=y
+CONFIG_AUDIT_COMPAT_GENERIC=y
+CONFIG_AUDIT_GENERIC=y
+CONFIG_AUDIT_TREE=y
+CONFIG_AUDIT_WATCH=y
+CONFIG_AUTOFS4_FS=y
+CONFIG_BALLOON_COMPACTION=y
+CONFIG_BATTERY_BQ27XXX=y
+# CONFIG_BATTERY_BQ27XXX_DT_UPDATES_NVM is not set
+CONFIG_BATTERY_BQ27XXX_I2C=y
+# CONFIG_BCM_FLEXRM_MBOX is not set
+CONFIG_BLK_CGROUP=y
+CONFIG_BLK_DEV_BSG=y
+CONFIG_BLK_DEV_BSGLIB=y
+CONFIG_BLK_DEV_INTEGRITY=y
+CONFIG_BLK_DEV_LOOP=y
+CONFIG_BLK_MQ_PCI=y
+CONFIG_BLK_MQ_VIRTIO=y
+CONFIG_BLK_SCSI_REQUEST=y
+CONFIG_BLOCK_COMPAT=y
+CONFIG_BOUNCE=y
+CONFIG_BPF_JIT=y
+# CONFIG_BRIDGE is not set
+CONFIG_BSD_PROCESS_ACCT=y
+CONFIG_BSD_PROCESS_ACCT_V3=y
+# CONFIG_BUG is not set
+CONFIG_CAN=y
+# CONFIG_CFS_BANDWIDTH is not set
+CONFIG_CGROUPS=y
+CONFIG_CGROUP_CPUACCT=y
+CONFIG_CGROUP_DEVICE=y
+# CONFIG_CGROUP_FREEZER is not set
+CONFIG_CGROUP_HUGETLB=y
+# CONFIG_CGROUP_NET_CLASSID is not set
+CONFIG_CGROUP_PIDS=y
+CONFIG_CGROUP_SCHED=y
+CONFIG_CGROUP_WRITEBACK=y
+CONFIG_CLKDEV_LOOKUP=y
+CONFIG_CLK_QORIQ=y
+CONFIG_CLONE_BACKWARDS=y
+CONFIG_CMA=y
+CONFIG_CMA_ALIGNMENT=8
+CONFIG_CMA_AREAS=7
+# CONFIG_CMA_DEBUG is not set
+# CONFIG_CMA_DEBUGFS is not set
+CONFIG_CMA_SIZE_MBYTES=16
+# CONFIG_CMA_SIZE_SEL_MAX is not set
+CONFIG_CMA_SIZE_SEL_MBYTES=y
+# CONFIG_CMA_SIZE_SEL_MIN is not set
+# CONFIG_CMA_SIZE_SEL_PERCENTAGE is not set
+CONFIG_COMMON_CLK=y
+CONFIG_COMMON_CLK_CS2000_CP=y
+# CONFIG_COMMON_CLK_VERSATILE is not set
+CONFIG_COMMON_CLK_XGENE=y
+CONFIG_COMPACTION=y
+CONFIG_COMPAT=y
+CONFIG_COMPAT_BINFMT_ELF=y
+CONFIG_COMPAT_OLD_SIGACTION=y
+CONFIG_CONFIGFS_FS=y
+CONFIG_CPUSETS=y
+# CONFIG_CPU_BIG_ENDIAN is not set
+# CONFIG_CPU_HOTPLUG_STATE_CONTROL is not set
+CONFIG_CPU_IDLE=y
+# CONFIG_CPU_IDLE_GOV_LADDER is not set
+CONFIG_CPU_IDLE_GOV_MENU=y
+CONFIG_CPU_IDLE_MULTIPLE_DRIVERS=y
+CONFIG_CPU_PM=y
+CONFIG_CPU_RMAP=y
+CONFIG_CRASH_CORE=y
+CONFIG_CRASH_DUMP=y
+CONFIG_CRC16=y
+CONFIG_CRC7=y
+CONFIG_CRC_ITU_T=y
+CONFIG_CRC_T10DIF=y
+CONFIG_CRYPTO_AEAD=y
+CONFIG_CRYPTO_AEAD2=y
+CONFIG_CRYPTO_AES_ARM64=y
+# CONFIG_CRYPTO_AES_ARM64_BS is not set
+CONFIG_CRYPTO_AES_ARM64_CE=y
+CONFIG_CRYPTO_AES_ARM64_CE_BLK=y
+CONFIG_CRYPTO_AES_ARM64_CE_CCM=y
+# CONFIG_CRYPTO_AES_ARM64_NEON_BLK is not set
+CONFIG_CRYPTO_ANSI_CPRNG=y
+# CONFIG_CRYPTO_CHACHA20_NEON is not set
+CONFIG_CRYPTO_CRC32=y
+CONFIG_CRYPTO_CRC32C=y
+# CONFIG_CRYPTO_CRC32_ARM64_CE is not set
+CONFIG_CRYPTO_CRCT10DIF=y
+# CONFIG_CRYPTO_CRCT10DIF_ARM64_CE is not set
+CONFIG_CRYPTO_CRYPTD=y
+CONFIG_CRYPTO_DRBG=y
+CONFIG_CRYPTO_DRBG_HMAC=y
+CONFIG_CRYPTO_DRBG_MENU=y
+CONFIG_CRYPTO_ECHAINIV=y
+CONFIG_CRYPTO_GF128MUL=y
+CONFIG_CRYPTO_GHASH_ARM64_CE=y
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_HASH2=y
+CONFIG_CRYPTO_HMAC=y
+CONFIG_CRYPTO_JITTERENTROPY=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_MANAGER2=y
+CONFIG_CRYPTO_NULL=y
+CONFIG_CRYPTO_NULL2=y
+CONFIG_CRYPTO_RNG=y
+CONFIG_CRYPTO_RNG2=y
+CONFIG_CRYPTO_RNG_DEFAULT=y
+CONFIG_CRYPTO_SHA1=y
+CONFIG_CRYPTO_SHA1_ARM64_CE=y
+CONFIG_CRYPTO_SHA256=y
+CONFIG_CRYPTO_SHA256_ARM64=y
+CONFIG_CRYPTO_SHA2_ARM64_CE=y
+# CONFIG_CRYPTO_SHA512_ARM64 is not set
+CONFIG_CRYPTO_SIMD=y
+CONFIG_CRYPTO_WORKQUEUE=y
+CONFIG_DCACHE_WORD_ACCESS=y
+# CONFIG_DEBUG_ALIGN_RODATA is not set
+# CONFIG_DEBUG_BLK_CGROUP is not set
+CONFIG_DEBUG_INFO=y
+CONFIG_DEFAULT_IOSCHED="noop"
+CONFIG_DEFAULT_NOOP=y
+# CONFIG_DEVPORT is not set
+CONFIG_DEVTMPFS=y
+CONFIG_DEVTMPFS_MOUNT=y
+CONFIG_DMADEVICES=y
+CONFIG_DMA_CMA=y
+CONFIG_DMA_ENGINE=y
+# CONFIG_DMA_NOOP_OPS is not set
+CONFIG_DMA_OF=y
+CONFIG_DMA_SHARED_BUFFER=y
+# CONFIG_DMA_VIRT_OPS is not set
+CONFIG_DNS_RESOLVER=y
+# CONFIG_DRM_LIB_RANDOM is not set
+CONFIG_DTC=y
+CONFIG_DT_IDLE_STATES=y
+CONFIG_EDAC=y
+# CONFIG_EDAC_DEBUG is not set
+CONFIG_EDAC_LEGACY_SYSFS=y
+CONFIG_EDAC_SUPPORT=y
+CONFIG_EDAC_THUNDERX=y
+# CONFIG_EDAC_XGENE is not set
+CONFIG_EEPROM_AT24=y
+# CONFIG_EVM is not set
+CONFIG_EXT2_FS=y
+CONFIG_EXT3_FS=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+CONFIG_EXT4_FS=y
+CONFIG_EXT4_FS_POSIX_ACL=y
+# CONFIG_F2FS_CHECK_FS is not set
+CONFIG_F2FS_FS=y
+# CONFIG_F2FS_FS_SECURITY is not set
+CONFIG_F2FS_FS_XATTR=y
+CONFIG_F2FS_STAT_FS=y
+CONFIG_FAIR_GROUP_SCHED=y
+CONFIG_FANOTIFY=y
+CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y
+CONFIG_FIXED_PHY=y
+CONFIG_FIX_EARLYCON_MEM=y
+CONFIG_FRAME_POINTER=y
+CONFIG_FREEZER=y
+CONFIG_FS_MBCACHE=y
+CONFIG_FS_POSIX_ACL=y
+CONFIG_FUTEX_PI=y
+CONFIG_GENERIC_ALLOCATOR=y
+CONFIG_GENERIC_ARCH_TOPOLOGY=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
+CONFIG_GENERIC_CPU_AUTOPROBE=y
+CONFIG_GENERIC_CSUM=y
+CONFIG_GENERIC_EARLY_IOREMAP=y
+CONFIG_GENERIC_IDLE_POLL_SETUP=y
+CONFIG_GENERIC_IO=y
+CONFIG_GENERIC_IRQ_EFFECTIVE_AFF_MASK=y
+CONFIG_GENERIC_IRQ_MIGRATION=y
+CONFIG_GENERIC_IRQ_SHOW=y
+CONFIG_GENERIC_IRQ_SHOW_LEVEL=y
+CONFIG_GENERIC_MSI_IRQ=y
+CONFIG_GENERIC_MSI_IRQ_DOMAIN=y
+CONFIG_GENERIC_PCI_IOMAP=y
+CONFIG_GENERIC_PHY=y
+CONFIG_GENERIC_SCHED_CLOCK=y
+CONFIG_GENERIC_SMP_IDLE_THREAD=y
+CONFIG_GENERIC_STRNCPY_FROM_USER=y
+CONFIG_GENERIC_STRNLEN_USER=y
+CONFIG_GENERIC_TIME_VSYSCALL=y
+CONFIG_GLOB=y
+CONFIG_GPIOLIB=y
+CONFIG_GPIOLIB_IRQCHIP=y
+CONFIG_GPIO_PCA953X=y
+CONFIG_GPIO_PCA953X_IRQ=y
+CONFIG_GPIO_THUNDERX=y
+CONFIG_GRACE_PERIOD=y
+# CONFIG_GRO_CELLS is not set
+CONFIG_HANDLE_DOMAIN_IRQ=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_HAS_DMA=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT_MAP=y
+# CONFIG_HAVE_64BIT_ALIGNED_ACCESS is not set
+CONFIG_HAVE_ALIGNED_STRUCT_PAGE=y
+CONFIG_HAVE_ARCH_AUDITSYSCALL=y
+CONFIG_HAVE_ARCH_BITREVERSE=y
+CONFIG_HAVE_ARCH_HUGE_VMAP=y
+CONFIG_HAVE_ARCH_JUMP_LABEL=y
+CONFIG_HAVE_ARCH_KASAN=y
+CONFIG_HAVE_ARCH_KGDB=y
+CONFIG_HAVE_ARCH_MMAP_RND_COMPAT_BITS=y
+CONFIG_HAVE_ARCH_PFN_VALID=y
+CONFIG_HAVE_ARCH_SECCOMP_FILTER=y
+CONFIG_HAVE_ARCH_TRACEHOOK=y
+CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y
+CONFIG_HAVE_ARCH_VMAP_STACK=y
+CONFIG_HAVE_ARM_SMCCC=y
+# CONFIG_HAVE_BOOTMEM_INFO_NODE is not set
+CONFIG_HAVE_CC_STACKPROTECTOR=y
+CONFIG_HAVE_CLK=y
+CONFIG_HAVE_CLK_PREPARE=y
+CONFIG_HAVE_CMPXCHG_DOUBLE=y
+CONFIG_HAVE_CMPXCHG_LOCAL=y
+CONFIG_HAVE_CONTEXT_TRACKING=y
+CONFIG_HAVE_C_RECORDMCOUNT=y
+CONFIG_HAVE_DEBUG_BUGVERBOSE=y
+CONFIG_HAVE_DEBUG_KMEMLEAK=y
+CONFIG_HAVE_DMA_API_DEBUG=y
+CONFIG_HAVE_DMA_CONTIGUOUS=y
+CONFIG_HAVE_DYNAMIC_FTRACE=y
+CONFIG_HAVE_EBPF_JIT=y
+CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
+CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
+CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
+CONFIG_HAVE_FUNCTION_TRACER=y
+CONFIG_HAVE_GENERIC_DMA_COHERENT=y
+CONFIG_HAVE_GENERIC_GUP=y
+CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y
+CONFIG_HAVE_MEMBLOCK=y
+CONFIG_HAVE_MEMBLOCK_NODE_MAP=y
+CONFIG_HAVE_MEMORY_PRESENT=y
+CONFIG_HAVE_NET_DSA=y
+CONFIG_HAVE_PATA_PLATFORM=y
+CONFIG_HAVE_PERF_EVENTS=y
+CONFIG_HAVE_PERF_REGS=y
+CONFIG_HAVE_PERF_USER_STACK_DUMP=y
+CONFIG_HAVE_RCU_TABLE_FREE=y
+CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
+CONFIG_HAVE_SETUP_PER_CPU_AREA=y
+CONFIG_HAVE_SYSCALL_TRACEPOINTS=y
+CONFIG_HAVE_UID16=y
+CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y
+CONFIG_HIBERNATE_CALLBACKS=y
+CONFIG_HIBERNATION=y
+CONFIG_HOLES_IN_ZONE=y
+CONFIG_HOTPLUG_CPU=y
+CONFIG_HUGETLBFS=y
+CONFIG_HUGETLB_PAGE=y
+CONFIG_HWSPINLOCK=y
+CONFIG_HW_RANDOM=y
+CONFIG_HW_RANDOM_CAVIUM=y
+CONFIG_I2C=y
+CONFIG_I2C_ALGOBIT=y
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_CHARDEV=y
+CONFIG_I2C_MUX=y
+CONFIG_I2C_SMBUS=y
+CONFIG_I2C_THUNDERX=y
+CONFIG_ILLEGAL_POINTER_VALUE=0xdead000000000000
+# CONFIG_IMA is not set
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_INTEGRITY=y
+CONFIG_INTEGRITY_AUDIT=y
+# CONFIG_INTEGRITY_SIGNATURE is not set
+CONFIG_IOMMU_HELPER=y
+# CONFIG_IOSCHED_DEADLINE is not set
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_BOOTP=y
+CONFIG_IP_PNP_DHCP=y
+# CONFIG_IP_PNP_RARP is not set
+CONFIG_IRQCHIP=y
+CONFIG_IRQ_DOMAIN=y
+CONFIG_IRQ_DOMAIN_HIERARCHY=y
+CONFIG_IRQ_FASTEOI_HIERARCHY_HANDLERS=y
+CONFIG_IRQ_FORCED_THREADING=y
+CONFIG_IRQ_TIME_ACCOUNTING=y
+CONFIG_IRQ_WORK=y
+# CONFIG_ISDN is not set
+CONFIG_JBD2=y
+CONFIG_JUMP_LABEL=y
+CONFIG_KEXEC=y
+CONFIG_KEXEC_CORE=y
+CONFIG_KEYS=y
+CONFIG_KEYS_COMPAT=y
+CONFIG_KSM=y
+# CONFIG_LEDS_TRIGGERS is not set
+CONFIG_LIBFDT=y
+CONFIG_LOCKD=y
+CONFIG_LOCK_SPIN_ON_OWNER=y
+CONFIG_LZO_COMPRESS=y
+CONFIG_LZO_DECOMPRESS=y
+CONFIG_MAGIC_SYSRQ=y
+CONFIG_MAILBOX=y
+# CONFIG_MAILBOX_TEST is not set
+CONFIG_MDIO_BUS=y
+CONFIG_MDIO_CAVIUM=y
+CONFIG_MDIO_DEVICE=y
+CONFIG_MDIO_THUNDER=y
+CONFIG_MEMCG=y
+CONFIG_MEMCG_SWAP=y
+CONFIG_MEMCG_SWAP_ENABLED=y
+CONFIG_MEMORY_BALLOON=y
+CONFIG_MEMORY_ISOLATION=y
+CONFIG_MEMTEST=y
+CONFIG_MFD_SYSCON=y
+CONFIG_MIGRATION=y
+CONFIG_MMC=y
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_CAVIUM_THUNDERX=y
+# CONFIG_MMC_TIFM_SD is not set
+CONFIG_MODULES_USE_ELF_RELA=y
+# CONFIG_MTD is not set
+CONFIG_MUTEX_SPIN_ON_OWNER=y
+CONFIG_NEED_DMA_MAP_STATE=y
+CONFIG_NEED_MULTIPLE_NODES=y
+CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y
+CONFIG_NEED_SG_DMA_LENGTH=y
+# CONFIG_NETLABEL is not set
+# CONFIG_NET_CADENCE is not set
+# CONFIG_NET_CLS_CGROUP is not set
+CONFIG_NET_FLOW_LIMIT=y
+# CONFIG_NET_VENDOR_3COM is not set
+# CONFIG_NET_VENDOR_ADAPTEC is not set
+# CONFIG_NET_VENDOR_AGERE is not set
+# CONFIG_NET_VENDOR_ALACRITECH is not set
+# CONFIG_NET_VENDOR_ALTEON is not set
+# CONFIG_NET_VENDOR_AMAZON is not set
+# CONFIG_NET_VENDOR_AMD is not set
+# CONFIG_NET_VENDOR_AQUANTIA is not set
+# CONFIG_NET_VENDOR_ARC is not set
+# CONFIG_NET_VENDOR_ATHEROS is not set
+# CONFIG_NET_VENDOR_AURORA is not set
+# CONFIG_NET_VENDOR_BROADCOM is not set
+# CONFIG_NET_VENDOR_BROCADE is not set
+# CONFIG_NET_VENDOR_CHELSIO is not set
+# CONFIG_NET_VENDOR_CISCO is not set
+# CONFIG_NET_VENDOR_DEC is not set
+# CONFIG_NET_VENDOR_DLINK is not set
+# CONFIG_NET_VENDOR_EMULEX is not set
+# CONFIG_NET_VENDOR_EXAR is not set
+# CONFIG_NET_VENDOR_EZCHIP is not set
+# CONFIG_NET_VENDOR_HISILICON is not set
+# CONFIG_NET_VENDOR_HP is not set
+# CONFIG_NET_VENDOR_HUAWEI is not set
+# CONFIG_NET_VENDOR_INTEL is not set
+# CONFIG_NET_VENDOR_MARVELL is not set
+# CONFIG_NET_VENDOR_MELLANOX is not set
+# CONFIG_NET_VENDOR_MICREL is not set
+# CONFIG_NET_VENDOR_MICROCHIP is not set
+# CONFIG_NET_VENDOR_MYRI is not set
+# CONFIG_NET_VENDOR_NATSEMI is not set
+# CONFIG_NET_VENDOR_NETRONOME is not set
+# CONFIG_NET_VENDOR_NVIDIA is not set
+# CONFIG_NET_VENDOR_OKI is not set
+# CONFIG_NET_VENDOR_QLOGIC is not set
+# CONFIG_NET_VENDOR_QUALCOMM is not set
+# CONFIG_NET_VENDOR_RDC is not set
+# CONFIG_NET_VENDOR_REALTEK is not set
+# CONFIG_NET_VENDOR_RENESAS is not set
+# CONFIG_NET_VENDOR_ROCKER is not set
+# CONFIG_NET_VENDOR_SAMSUNG is not set
+# CONFIG_NET_VENDOR_SEEQ is not set
+# CONFIG_NET_VENDOR_SILAN is not set
+# CONFIG_NET_VENDOR_SIS is not set
+# CONFIG_NET_VENDOR_SMSC is not set
+# CONFIG_NET_VENDOR_SOLARFLARE is not set
+# CONFIG_NET_VENDOR_STMICRO is not set
+# CONFIG_NET_VENDOR_SUN is not set
+# CONFIG_NET_VENDOR_SYNOPSYS is not set
+# CONFIG_NET_VENDOR_TEHUTI is not set
+# CONFIG_NET_VENDOR_TI is not set
+# CONFIG_NET_VENDOR_VIA is not set
+# CONFIG_NET_VENDOR_WIZNET is not set
+CONFIG_NFS_FS=y
+CONFIG_NFS_USE_KERNEL_DNS=y
+# CONFIG_NFS_USE_LEGACY_DNS is not set
+CONFIG_NFS_V4=y
+CONFIG_NFS_V4_1=y
+CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN="kernel.org"
+# CONFIG_NFS_V4_1_MIGRATION is not set
+CONFIG_NFS_V4_2=y
+CONFIG_NFS_V4_SECURITY_LABEL=y
+CONFIG_NLS=y
+CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_ISO8859_1=y
+CONFIG_NODES_SHIFT=2
+CONFIG_NO_BOOTMEM=y
+CONFIG_NO_HZ_COMMON=y
+CONFIG_NO_HZ_IDLE=y
+CONFIG_NR_CPUS=64
+CONFIG_NUMA=y
+CONFIG_NUMA_BALANCING=y
+CONFIG_NUMA_BALANCING_DEFAULT_ENABLED=y
+CONFIG_NVMEM=y
+CONFIG_OF=y
+CONFIG_OF_ADDRESS=y
+CONFIG_OF_ADDRESS_PCI=y
+CONFIG_OF_EARLY_FLATTREE=y
+CONFIG_OF_FLATTREE=y
+CONFIG_OF_GPIO=y
+CONFIG_OF_IRQ=y
+CONFIG_OF_MDIO=y
+CONFIG_OF_NET=y
+CONFIG_OF_NUMA=y
+CONFIG_OF_PCI=y
+CONFIG_OF_PCI_IRQ=y
+CONFIG_OF_RESERVED_MEM=y
+CONFIG_OID_REGISTRY=y
+CONFIG_OLD_SIGSUSPEND3=y
+CONFIG_OPTEE=y
+CONFIG_PADATA=y
+CONFIG_PAGE_COUNTER=y
+CONFIG_PARAVIRT=y
+CONFIG_PARTITION_PERCPU=y
+CONFIG_PCI=y
+CONFIG_PCIEAER=y
+CONFIG_PCIEPORTBUS=y
+# CONFIG_PCIE_KIRIN is not set
+CONFIG_PCIE_PME=y
+CONFIG_PCI_ATS=y
+CONFIG_PCI_BUS_ADDR_T_64BIT=y
+CONFIG_PCI_DOMAINS=y
+CONFIG_PCI_DOMAINS_GENERIC=y
+CONFIG_PCI_ECAM=y
+# CONFIG_PCI_HISI is not set
+CONFIG_PCI_HOST_COMMON=y
+CONFIG_PCI_HOST_GENERIC=y
+CONFIG_PCI_HOST_THUNDER_ECAM=y
+CONFIG_PCI_HOST_THUNDER_PEM=y
+CONFIG_PCI_IOV=y
+CONFIG_PCI_MSI=y
+CONFIG_PCI_MSI_IRQ_DOMAIN=y
+# CONFIG_PCI_XGENE is not set
+CONFIG_PGTABLE_LEVELS=4
+CONFIG_PHYLIB=y
+CONFIG_PHYS_ADDR_T_64BIT=y
+# CONFIG_PHY_XGENE is not set
+CONFIG_PM=y
+CONFIG_PM_CLK=y
+# CONFIG_PM_DEBUG is not set
+CONFIG_PM_SLEEP=y
+CONFIG_PM_SLEEP_SMP=y
+CONFIG_PM_STD_PARTITION=""
+CONFIG_PNFS_FILE_LAYOUT=y
+CONFIG_PNFS_FLEXFILE_LAYOUT=m
+CONFIG_POSIX_MQUEUE=y
+CONFIG_POSIX_MQUEUE_SYSCTL=y
+CONFIG_POWER_RESET=y
+CONFIG_POWER_RESET_SYSCON=y
+CONFIG_POWER_RESET_XGENE=y
+CONFIG_POWER_SUPPLY=y
+CONFIG_PRINTK_SAFE_LOG_BUF_SHIFT=13
+CONFIG_PRINT_QUOTA_WARNING=y
+CONFIG_PROC_PID_CPUSET=y
+CONFIG_PROC_VMCORE=y
+CONFIG_PROFILING=y
+# CONFIG_QFMT_V1 is not set
+# CONFIG_QFMT_V2 is not set
+CONFIG_QUOTA=y
+CONFIG_QUOTACTL=y
+# CONFIG_QUOTA_NETLINK_INTERFACE is not set
+CONFIG_RADIX_TREE_MULTIORDER=y
+# CONFIG_RANDOMIZE_BASE is not set
+CONFIG_RAS=y
+CONFIG_RATIONAL=y
+CONFIG_RCU_NEED_SEGCBLIST=y
+CONFIG_RCU_STALL_COMMON=y
+CONFIG_REBOOT_MODE=y
+CONFIG_REGMAP=y
+CONFIG_REGMAP_I2C=y
+CONFIG_REGMAP_MMIO=y
+CONFIG_REGMAP_SPI=y
+CONFIG_RESET_CONTROLLER=y
+CONFIG_RFS_ACCEL=y
+CONFIG_ROOT_NFS=y
+CONFIG_RPS=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_DRV_DS1672=y
+CONFIG_RTC_I2C_AND_SPI=y
+# CONFIG_RT_GROUP_SCHED is not set
+CONFIG_RWSEM_SPIN_ON_OWNER=y
+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
+CONFIG_SATA_AHCI=y
+CONFIG_SATA_AHCI_PLATFORM=y
+CONFIG_SCHED_AUTOGROUP=y
+CONFIG_SCHED_INFO=y
+CONFIG_SCHED_MC=y
+CONFIG_SCSI=y
+# CONFIG_SCSI_LOWLEVEL is not set
+# CONFIG_SCSI_PROC_FS is not set
+CONFIG_SCSI_SAS_ATA=y
+CONFIG_SCSI_SAS_ATTRS=y
+CONFIG_SCSI_SAS_HOST_SMP=y
+CONFIG_SCSI_SAS_LIBSAS=y
+CONFIG_SECCOMP=y
+CONFIG_SECCOMP_FILTER=y
+CONFIG_SECURITY=y
+# CONFIG_SECURITY_APPARMOR is not set
+# CONFIG_SECURITY_LOADPIN is not set
+# CONFIG_SECURITY_NETWORK is not set
+# CONFIG_SECURITY_PATH is not set
+# CONFIG_SECURITY_SMACK is not set
+# CONFIG_SECURITY_TOMOYO is not set
+# CONFIG_SECURITY_WRITABLE_HOOKS is not set
+# CONFIG_SECURITY_YAMA is not set
+CONFIG_SERIAL_8250_DW=y
+CONFIG_SERIAL_8250_EXTENDED=y
+CONFIG_SERIAL_8250_FSL=y
+CONFIG_SERIAL_8250_SHARE_IRQ=y
+CONFIG_SERIAL_AMBA_PL011=y
+CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
+CONFIG_SERIAL_DEV_BUS=y
+CONFIG_SERIAL_DEV_CTRL_TTYPORT=y
+CONFIG_SERIAL_OF_PLATFORM=y
+CONFIG_SERIAL_XILINX_PS_UART=y
+CONFIG_SERIAL_XILINX_PS_UART_CONSOLE=y
+CONFIG_SG_POOL=y
+CONFIG_SMP=y
+CONFIG_SPARSEMEM=y
+CONFIG_SPARSEMEM_EXTREME=y
+CONFIG_SPARSEMEM_MANUAL=y
+CONFIG_SPARSEMEM_VMEMMAP=y
+CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y
+CONFIG_SPARSE_IRQ=y
+CONFIG_SPI=y
+CONFIG_SPI_MASTER=y
+CONFIG_SPI_THUNDERX=y
+CONFIG_SRAM=y
+CONFIG_SRCU=y
+CONFIG_SUNRPC=y
+CONFIG_SUNRPC_BACKCHANNEL=y
+CONFIG_SUNRPC_GSS=y
+CONFIG_SWIOTLB=y
+CONFIG_SWPHY=y
+# CONFIG_SW_SYNC is not set
+CONFIG_SYNC_FILE=y
+CONFIG_SYSCON_REBOOT_MODE=y
+CONFIG_SYSCTL_EXCEPTION_TRACE=y
+CONFIG_SYSVIPC_COMPAT=y
+CONFIG_SYS_SUPPORTS_HUGETLBFS=y
+CONFIG_TASKSTATS=y
+CONFIG_TASK_DELAY_ACCT=y
+CONFIG_TASK_IO_ACCOUNTING=y
+CONFIG_TASK_XACCT=y
+CONFIG_TEE=y
+CONFIG_THIN_ARCHIVES=y
+CONFIG_THREAD_INFO_IN_TASK=y
+CONFIG_THUNDER_NIC_BGX=y
+CONFIG_THUNDER_NIC_PF=y
+CONFIG_THUNDER_NIC_RGX=y
+CONFIG_THUNDER_NIC_VF=y
+CONFIG_TICK_CPU_ACCOUNTING=y
+CONFIG_TIMER_OF=y
+CONFIG_TIMER_PROBE=y
+CONFIG_TRANSPARENT_HUGEPAGE=y
+CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y
+# CONFIG_TRANSPARENT_HUGEPAGE_MADVISE is not set
+CONFIG_TRANSPARENT_HUGE_PAGECACHE=y
+CONFIG_TREE_RCU=y
+CONFIG_TREE_SRCU=y
+CONFIG_USB=y
+CONFIG_USB_COMMON=y
+# CONFIG_USB_EHCI_HCD is not set
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_XHCI_HCD=y
+CONFIG_USB_XHCI_PLATFORM=y
+CONFIG_USE_PERCPU_NUMA_NODE_ID=y
+CONFIG_VIRTIO=y
+CONFIG_VIRTIO_BALLOON=y
+# CONFIG_VIRTIO_BLK is not set
+# CONFIG_VIRTIO_CONSOLE is not set
+CONFIG_VIRTIO_MMIO=y
+# CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES is not set
+# CONFIG_VIRTIO_NET is not set
+CONFIG_VIRTIO_PCI=y
+CONFIG_VIRTIO_PCI_LEGACY=y
+# CONFIG_VLAN_8021Q is not set
+CONFIG_VMAP_STACK=y
+CONFIG_WATCHDOG_CORE=y
+# CONFIG_WIRELESS is not set
+# CONFIG_WLAN is not set
+CONFIG_XPS=y
diff --git a/target/linux/octeontx/image/Makefile b/target/linux/octeontx/image/Makefile
new file mode 100644
index 0000000..203f0ea
--- /dev/null
+++ b/target/linux/octeontx/image/Makefile
@@ -0,0 +1,21 @@ 
+#
+# Copyright (C) 2018 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+include $(TOPDIR)/rules.mk
+include $(INCLUDE_DIR)/image.mk
+
+define Image/Build/Initramfs
+	$(CP) $(KERNEL_BUILD_DIR)/vmlinux $(BIN_DIR)/$(IMG_PREFIX)-vmlinux
+	$(CP) $(KERNEL_BUILD_DIR)/vmlinux-initramfs $(BIN_DIR)/$(IMG_PREFIX)-vmlinux-initramfs
+endef
+
+define Image/Build
+	$(call Image/Build/$(1))
+	cp $(KDIR)/root.$(1) $(BIN_DIR)/$(IMG_PREFIX)-$(1).img
+	cp $(KDIR)/vmlinux $(BIN_DIR)/$(IMG_PREFIX)-vmlinux
+endef
+
+$(eval $(call BuildImage))
diff --git a/target/linux/octeontx/patches-4.14/0001-net-thunderx-add-support-for-rgmii-internal-delay-mo.patch b/target/linux/octeontx/patches-4.14/0001-net-thunderx-add-support-for-rgmii-internal-delay-mo.patch
new file mode 100644
index 0000000..362f4bc
--- /dev/null
+++ b/target/linux/octeontx/patches-4.14/0001-net-thunderx-add-support-for-rgmii-internal-delay-mo.patch
@@ -0,0 +1,148 @@ 
+From 69a99101748bb1bdb2730393ef48bc152c4d244a Mon Sep 17 00:00:00 2001
+From: Tim Harvey <tharvey@gateworks.com>
+Date: Tue, 12 Dec 2017 12:49:55 -0800
+Subject: [PATCH] net: thunderx: add support for rgmii internal delay modes
+
+The XCV_DLL_CTL is being configured with the assumption that
+phy-mode is rgmii-txid (PHY_INTERFACE_MODE_RGMII_TXID) which is not always
+the case.
+
+This patch parses the phy-mode property and uses it to configure CXV_DLL_CTL
+properly.
+
+Signed-off-by: Tim Harvey <tharvey@gateworks.com>
+---
+ drivers/net/ethernet/cavium/thunder/thunder_bgx.c | 13 +++++++---
+ drivers/net/ethernet/cavium/thunder/thunder_bgx.h |  2 +-
+ drivers/net/ethernet/cavium/thunder/thunder_xcv.c | 31 ++++++++++++++++++-----
+ 3 files changed, 35 insertions(+), 11 deletions(-)
+
+diff --git a/drivers/net/ethernet/cavium/thunder/thunder_bgx.c b/drivers/net/ethernet/cavium/thunder/thunder_bgx.c
+index 5e5c4d7..805c02a 100644
+--- a/drivers/net/ethernet/cavium/thunder/thunder_bgx.c
++++ b/drivers/net/ethernet/cavium/thunder/thunder_bgx.c
+@@ -55,6 +55,7 @@ struct bgx {
+ 	struct pci_dev		*pdev;
+ 	bool                    is_dlm;
+ 	bool                    is_rgx;
++	int			phy_mode;
+ };
+ 
+ static struct bgx *bgx_vnic[MAX_BGX_THUNDER];
+@@ -841,12 +842,12 @@ static void bgx_poll_for_link(struct work_struct *work)
+ 	queue_delayed_work(lmac->check_link, &lmac->dwork, HZ * 2);
+ }
+ 
+-static int phy_interface_mode(u8 lmac_type)
++static int phy_interface_mode(struct bgx *bgx, u8 lmac_type)
+ {
+ 	if (lmac_type == BGX_MODE_QSGMII)
+ 		return PHY_INTERFACE_MODE_QSGMII;
+ 	if (lmac_type == BGX_MODE_RGMII)
+-		return PHY_INTERFACE_MODE_RGMII;
++		return bgx->phy_mode;
+ 
+ 	return PHY_INTERFACE_MODE_SGMII;
+ }
+@@ -912,7 +913,8 @@ static int bgx_lmac_enable(struct bgx *bgx, u8 lmacid)
+ 
+ 		if (phy_connect_direct(&lmac->netdev, lmac->phydev,
+ 				       bgx_lmac_handler,
+-				       phy_interface_mode(lmac->lmac_type)))
++				       phy_interface_mode(bgx,
++							  lmac->lmac_type)))
+ 			return -ENODEV;
+ 
+ 		phy_start_aneg(lmac->phydev);
+@@ -1287,6 +1289,8 @@ static int bgx_init_of_phy(struct bgx *bgx)
+ 		bgx->lmac[lmac].lmacid = lmac;
+ 
+ 		phy_np = of_parse_phandle(node, "phy-handle", 0);
++		if (phy_np)
++			bgx->phy_mode = of_get_phy_mode(phy_np);
+ 		/* If there is no phy or defective firmware presents
+ 		 * this cortina phy, for which there is no driver
+ 		 * support, ignore it.
+@@ -1390,7 +1394,6 @@ static int bgx_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
+ 		bgx->max_lmac = 1;
+ 		bgx->bgx_id = MAX_BGX_PER_CN81XX - 1;
+ 		bgx_vnic[bgx->bgx_id] = bgx;
+-		xcv_init_hw();
+ 	}
+ 
+ 	/* On 81xx all are DLMs and on 83xx there are 3 BGX QLMs and one
+@@ -1407,6 +1410,8 @@ static int bgx_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
+ 	if (err)
+ 		goto err_enable;
+ 
++	if (bgx->is_rgx)
++		xcv_init_hw(bgx->phy_mode);
+ 	bgx_init_hw(bgx);
+ 
+ 	/* Enable all LMACs */
+diff --git a/drivers/net/ethernet/cavium/thunder/thunder_bgx.h b/drivers/net/ethernet/cavium/thunder/thunder_bgx.h
+index 23acdc5..2bba9d1 100644
+--- a/drivers/net/ethernet/cavium/thunder/thunder_bgx.h
++++ b/drivers/net/ethernet/cavium/thunder/thunder_bgx.h
+@@ -226,7 +226,7 @@ void bgx_lmac_internal_loopback(int node, int bgx_idx,
+ void bgx_lmac_get_pfc(int node, int bgx_idx, int lmacid, void *pause);
+ void bgx_lmac_set_pfc(int node, int bgx_idx, int lmacid, void *pause);
+ 
+-void xcv_init_hw(void);
++void xcv_init_hw(int phy_mode);
+ void xcv_setup_link(bool link_up, int link_speed);
+ 
+ u64 bgx_get_rx_stats(int node, int bgx_idx, int lmac, int idx);
+diff --git a/drivers/net/ethernet/cavium/thunder/thunder_xcv.c b/drivers/net/ethernet/cavium/thunder/thunder_xcv.c
+index 578c7f8..7e0c4cb 100644
+--- a/drivers/net/ethernet/cavium/thunder/thunder_xcv.c
++++ b/drivers/net/ethernet/cavium/thunder/thunder_xcv.c
+@@ -65,7 +65,7 @@ MODULE_LICENSE("GPL v2");
+ MODULE_VERSION(DRV_VERSION);
+ MODULE_DEVICE_TABLE(pci, xcv_id_table);
+ 
+-void xcv_init_hw(void)
++void xcv_init_hw(int phy_mode)
+ {
+ 	u64  cfg;
+ 
+@@ -81,12 +81,31 @@ void xcv_init_hw(void)
+ 	/* Wait for DLL to lock */
+ 	msleep(1);
+ 
+-	/* Configure DLL - enable or bypass
+-	 * TX no bypass, RX bypass
+-	 */
++	/* enable/bypass DLL providing MAC based internal TX/RX delays */
+ 	cfg = readq_relaxed(xcv->reg_base + XCV_DLL_CTL);
+-	cfg &= ~0xFF03;
+-	cfg |= CLKRX_BYP;
++	cfg &= ~0xffff00;
++	switch (phy_mode) {
++	/* RX and TX delays are added by the MAC */
++	case PHY_INTERFACE_MODE_RGMII:
++		break;
++	/* internal RX and TX delays provided by the PHY */
++	case PHY_INTERFACE_MODE_RGMII_ID:
++		cfg |= CLKRX_BYP;
++		cfg |= CLKTX_BYP;
++		break;
++	/* internal RX delay provided by the PHY, the MAC
++	 * should not add an RX delay in this case
++	 */
++	case PHY_INTERFACE_MODE_RGMII_RXID:
++		cfg |= CLKRX_BYP;
++		break;
++	/* internal TX delay provided by the PHY, the MAC
++	 * should not add an TX delay in this case
++	 */
++	case PHY_INTERFACE_MODE_RGMII_TXID:
++		cfg |= CLKRX_BYP;
++		break;
++	}
+ 	writeq_relaxed(cfg, xcv->reg_base + XCV_DLL_CTL);
+ 
+ 	/* Enable compensation controller and force the
+-- 
+2.7.4
+
diff --git a/target/linux/octeontx/patches-4.14/0001-net-thunderx-workaround-BGX-TX-Underflow-issue.patch b/target/linux/octeontx/patches-4.14/0001-net-thunderx-workaround-BGX-TX-Underflow-issue.patch
new file mode 100644
index 0000000..db57f6d
--- /dev/null
+++ b/target/linux/octeontx/patches-4.14/0001-net-thunderx-workaround-BGX-TX-Underflow-issue.patch
@@ -0,0 +1,117 @@ 
+From b1e7791e688620c9bb8476ac2d0bc99abeb7f825 Mon Sep 17 00:00:00 2001
+From: Tim Harvey <tharvey@gateworks.com>
+Date: Fri, 29 Dec 2017 16:48:04 -0800
+Subject: [PATCH] net: thunderx: workaround BGX TX Underflow issue
+
+While it is not yet understood why a TX underflow can easily occur
+for SGMII interfaces resulting in a TX wedge. It has been found that
+disabling/re-enabling the LMAC resolves the issue.
+
+Signed-off-by: Tim Harvey <tharvey@gateworks.com>
+---
+ drivers/net/ethernet/cavium/thunder/thunder_bgx.c | 54 +++++++++++++++++++++++
+ drivers/net/ethernet/cavium/thunder/thunder_bgx.h |  9 ++++
+ 2 files changed, 63 insertions(+)
+
+diff --git a/drivers/net/ethernet/cavium/thunder/thunder_bgx.c b/drivers/net/ethernet/cavium/thunder/thunder_bgx.c
+index 805c02a..0690966 100644
+--- a/drivers/net/ethernet/cavium/thunder/thunder_bgx.c
++++ b/drivers/net/ethernet/cavium/thunder/thunder_bgx.c
+@@ -1344,6 +1344,54 @@ static int bgx_init_phy(struct bgx *bgx)
+ 	return bgx_init_of_phy(bgx);
+ }
+ 
++static irqreturn_t bgx_intr_handler(int irq, void *data)
++{
++	struct bgx *bgx = (struct bgx *)data;
++	struct device *dev = &bgx->pdev->dev;
++	u64 status, val;
++	int lmac;
++
++	for (lmac = 0; lmac < bgx->lmac_count; lmac++) {
++		status = bgx_reg_read(bgx, lmac, BGX_GMP_GMI_TXX_INT);
++		if (status & GMI_TXX_INT_UNDFLW) {
++			dev_err(dev, "BGX%d lmac%d UNDFLW\n", bgx->bgx_id,
++				lmac);
++			val = bgx_reg_read(bgx, lmac, BGX_CMRX_CFG);
++			val &= ~CMR_EN;
++			bgx_reg_write(bgx, lmac, BGX_CMRX_CFG, val);
++			val |= CMR_EN;
++			bgx_reg_write(bgx, lmac, BGX_CMRX_CFG, val);
++		}
++		/* clear interrupts */
++		bgx_reg_write(bgx, lmac, BGX_GMP_GMI_TXX_INT, status);
++	}
++
++	return IRQ_HANDLED;
++}
++
++static int bgx_register_intr(struct pci_dev *pdev)
++{
++	struct bgx *bgx = pci_get_drvdata(pdev);
++	struct device *dev = &pdev->dev;
++	int num_vec, ret;
++	char irq_name[32];
++
++	/* Enable MSI-X */
++	num_vec = pci_msix_vec_count(pdev);
++	ret = pci_alloc_irq_vectors(pdev, num_vec, num_vec, PCI_IRQ_MSIX);
++	if (ret < 0) {
++		dev_err(dev, "Req for #%d msix vectors failed\n", num_vec);
++		return 1;
++	}
++	sprintf(irq_name, "BGX%d", bgx->bgx_id);
++	ret = request_irq(pci_irq_vector(pdev, GMPX_GMI_TX_INT),
++		bgx_intr_handler, 0, irq_name, bgx);
++	if (ret)
++		return 1;
++
++	return 0;
++}
++
+ static int bgx_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
+ {
+ 	int err;
+@@ -1414,6 +1462,8 @@ static int bgx_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
+ 		xcv_init_hw(bgx->phy_mode);
+ 	bgx_init_hw(bgx);
+ 
++	bgx_register_intr(pdev);
++
+ 	/* Enable all LMACs */
+ 	for (lmac = 0; lmac < bgx->lmac_count; lmac++) {
+ 		err = bgx_lmac_enable(bgx, lmac);
+@@ -1424,6 +1474,10 @@ static int bgx_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
+ 				bgx_lmac_disable(bgx, --lmac);
+ 			goto err_enable;
+ 		}
++
++		/* enable TX FIFO Underflow interrupt */
++		bgx_reg_modify(bgx, lmac, BGX_GMP_GMI_TXX_INT_ENA_W1S,
++			       GMI_TXX_INT_UNDFLW);
+ 	}
+ 
+ 	return 0;
+diff --git a/drivers/net/ethernet/cavium/thunder/thunder_bgx.h b/drivers/net/ethernet/cavium/thunder/thunder_bgx.h
+index 2bba9d1..be9148f9 100644
+--- a/drivers/net/ethernet/cavium/thunder/thunder_bgx.h
++++ b/drivers/net/ethernet/cavium/thunder/thunder_bgx.h
+@@ -179,6 +179,15 @@
+ #define BGX_GMP_GMI_TXX_BURST		0x38228
+ #define BGX_GMP_GMI_TXX_MIN_PKT		0x38240
+ #define BGX_GMP_GMI_TXX_SGMII_CTL	0x38300
++#define BGX_GMP_GMI_TXX_INT		0x38500
++#define BGX_GMP_GMI_TXX_INT_W1S		0x38508
++#define BGX_GMP_GMI_TXX_INT_ENA_W1C	0x38510
++#define BGX_GMP_GMI_TXX_INT_ENA_W1S	0x38518
++#define  GMI_TXX_INT_PTP_LOST			BIT_ULL(4)
++#define  GMI_TXX_INT_LATE_COL			BIT_ULL(3)
++#define  GMI_TXX_INT_XSDEF			BIT_ULL(2)
++#define  GMI_TXX_INT_XSCOL			BIT_ULL(1)
++#define  GMI_TXX_INT_UNDFLW			BIT_ULL(0)
+ 
+ #define BGX_MSIX_VEC_0_29_ADDR		0x400000 /* +(0..29) << 4 */
+ #define BGX_MSIX_VEC_0_29_CTL		0x400008
+-- 
+2.7.4
+