CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MAX=15
CONFIG_ARCH_SPARSEMEM_ENABLE=y
CONFIG_ARCH_SUSPEND_POSSIBLE=y
+CONFIG_AT803X_PHY=y
CONFIG_ATA=y
CONFIG_BLK_DEV_LOOP=y
CONFIG_BLK_DEV_SD=y
CONFIG_RAS=y
CONFIG_REGMAP=y
CONFIG_REGMAP_I2C=y
+CONFIG_REGULATOR=y
CONFIG_RELAY=y
CONFIG_RFS_ACCEL=y
CONFIG_RPS=y
--- /dev/null
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+
+#include "cn71xx.dtsi"
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+#include <dt-bindings/net/qca-ar803x.h>
+
+/ {
+ compatible = "xirrus,xd2-240", "cavium,cn7020";
+ model = "Xirrus XD2-240";
+
+ memory@0 {
+ device_type = "memory";
+ reg = <0x0 0x00000000>,
+ <0x0 0x10000000>,
+ <0x0 0x20000000>,
+ <0x0 0x30000000>;
+ };
+
+ keys {
+ compatible = "gpio-keys-polled";
+ poll-interval = <20>;
+
+ reset {
+ label = "reset";
+ linux,code = <KEY_RESTART>;
+ gpios = <&gpio 11 GPIO_ACTIVE_LOW>;
+ debounce-interval = <60>;
+ };
+ };
+};
+
+&uart0 {
+ status = "okay";
+};
+
+&usb0 {
+ status = "okay";
+};
+
+&xhci0 {
+ status = "okay";
+ dr_mode = "host";
+};
+
+&spi {
+ status = "okay";
+
+ flash@0 {
+ #address-cells = <1>;
+ #size-cells = <1>;
+ compatible = "Macronix,mx25l1606e", "spi-flash";
+ reg = <0>;
+ spi-max-frequency = <25000000>;
+
+ };
+};
+
+&mmc {
+ status = "okay";
+
+ mmc-slot@0 {
+ compatible = "mmc-slot";
+ reg = <0>;
+ non-removable;
+ max-frequency = <26000000>;
+ voltage-ranges = <3300 3300>;
+ bus-width = <8>;
+ };
+};
+
+&smi0 {
+ status = "okay";
+
+ phy1: ethernet-phy@1 {
+ device_type = "ethernet-phy";
+ interrupt-parent = <&gpio>;
+ reg = <1>;
+ };
+
+ phy2: ethernet-phy@2 {
+ device_type = "ethernet-phy";
+ interrupt-parent = <&gpio>;
+ reg = <2>;
+ };
+};
+
+&pip {
+ status = "okay";
+
+ interface@0 {
+ status = "okay";
+
+ ethernet@0 {
+ label = "lan1";
+ status = "okay";
+ phy-mode = "sgmii";
+ phy-handle = <&phy1>;
+ };
+
+ ethernet@1 {
+ label = "lan2";
+ status = "okay";
+ phy-mode = "sgmii";
+ phy-handle = <&phy2>;
+ };
+ };
+};
+
$(TARGET_CROSS)strip -R .notes $@ -o $@.stripped && mv $@.stripped $@
endef
+define Build/xapimg
+ dd if=/dev/zero of=$(KDIR)/dummy.img bs=1 count=1
+ mkimage \
+ -A mips \
+ -C none \
+ -O Linux \
+ -T multi \
+ -a 0x0 \
+ -d $@:$(KDIR)/dummy.img \
+ -e 0x0 \
+ -n "$(VERSION_DIST) Linux-$(LINUX_VERSION)" \
+ $@.xap
+ mv $@.xap $@
+ #-d $<:$(KDIR)/vmlinux-initramfs.elf:$@-rootfs.bin $@
+endef
+
DTS_DIR := $(DTS_DIR)/cavium-octeon
define Device/Default
endef
TARGET_DEVICES += cisco_vedge1000
+define Device/xirrus_xd2-240
+ DEVICE_DTS := cn7020_xirrus_xd2-240
+ DEVICE_VENDOR := Xirrus
+ DEVICE_MODEL := XD2-240
+ DEVICE_PACKAGES += \
+ brcmfmac-firmware-4366c0 \
+ kmod-brcmfmac
+ #IMAGES := factory.bin
+ #IMAGE/factory.bin := append-rootfs | pad-rootfs | pad-to 128k | xapimg
+ KERNEL := kernel-bin | append-dtb-elf
+ KERNEL_INITRAMFS := kernel-bin | append-dtb-elf | xapimg
+ #KERNEL_INITRAMFS := kernel-bin | xapimg
+endef
+TARGET_DEVICES += xirrus_xd2-240
+
$(eval $(call BuildImage))
--- /dev/null
+--- a/arch/mips/include/asm/octeon/cvmx-bootinfo.h
++++ b/arch/mips/include/asm/octeon/cvmx-bootinfo.h
+@@ -300,6 +300,7 @@ enum cvmx_board_types_enum {
+ CVMX_BOARD_TYPE_UBNT_E220 = 20005,
+ CVMX_BOARD_TYPE_ITUS_SHIELD = 20006,
+ CVMX_BOARD_TYPE_UBNT_E300 = 20300,
++ CVMX_BOARD_TYPE_XIRRUS_XD2_240 = 20495,
+ CVMX_BOARD_TYPE_KONTRON_S1901 = 21901,
+ CVMX_BOARD_TYPE_CUST_PRIVATE_MAX = 30000,
+
+@@ -405,6 +406,7 @@ static inline const char *cvmx_board_typ
+ ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_UBNT_E220)
+ ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_ITUS_SHIELD)
+ ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_UBNT_E300)
++ ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_XIRRUS_XD2_240)
+ ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_KONTRON_S1901)
+ ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_PRIVATE_MAX)
+ }
+--- a/arch/mips/cavium-octeon/executive/cvmx-helper-board.c
++++ b/arch/mips/cavium-octeon/executive/cvmx-helper-board.c
+@@ -183,6 +183,9 @@ int cvmx_helper_board_get_mii_address(in
+ else
+ return -1;
+
++ case CVMX_BOARD_TYPE_XIRRUS_XD2_240:
++ cvmx_dprintf("cvmx_helper_board_get_mii_address: idp_port='%d'\n", ipd_port);
++ return ipd_port;
+ }
+
+ /* Some unknown board. Somebody forgot to update this function... */
--- /dev/null
+diff --git a/drivers/staging/octeon/ethernet-rx.c b/drivers/staging/octeon/ethernet-rx.c
+index 965330eec80a..063a4b3fdc3a 100644
+--- a/drivers/staging/octeon/ethernet-rx.c
++++ b/drivers/staging/octeon/ethernet-rx.c
+@@ -363,8 +363,8 @@ static int cvm_oct_poll(struct oct_rx_group *rx_group, int budget)
+ * Drop any packet received for a device that
+ * doesn't exist.
+ */
+- printk_ratelimited("Port %d not controlled by Linux, packet dropped\n",
+- port);
++ printk_ratelimited("Port %d not controlled by Linux, packet dropped (TOTAL_NUMBER_OF_PORTS: %d)\n",
++ port, TOTAL_NUMBER_OF_PORTS);
+ dev_kfree_skb_irq(skb);
+ }
+ /*
+diff --git a/drivers/staging/octeon/ethernet.c b/drivers/staging/octeon/ethernet.c
+index 9eee28f2940c..8c1da12da841 100644
+--- a/drivers/staging/octeon/ethernet.c
++++ b/drivers/staging/octeon/ethernet.c
+@@ -703,6 +703,7 @@ static int cvm_oct_probe(struct platform_device *pdev)
+
+ /* Change the input group for all ports before input is enabled */
+ num_interfaces = cvmx_helper_get_number_of_interfaces();
++ pr_err("Octeon number of interfaces: %d\n", num_interfaces);
+ for (interface = 0; interface < num_interfaces; interface++) {
+ int num_ports = cvmx_helper_ports_on_interface(interface);
+ int port;