WIP: Xirrus XD2-240 xirrus-xd2-240
authorStijn Tintel <stijn@linux-ipv6.be>
Tue, 18 Jul 2023 20:50:52 +0000 (23:50 +0300)
committerStijn Tintel <stijn@linux-ipv6.be>
Wed, 19 Jul 2023 02:06:28 +0000 (05:06 +0300)
target/linux/octeon/config-5.15
target/linux/octeon/files/arch/mips/boot/dts/cavium-octeon/cn7020_xirrus_xd2-240.dts [new file with mode: 0644]
target/linux/octeon/image/Makefile
target/linux/octeon/patches-5.15/160-xirrus-xd2_240-support.patch [new file with mode: 0644]
target/linux/octeon/patches-5.15/999-debug.patch [new file with mode: 0644]

index 2350e45295f4755e5c9a88ca835554a4fa5a9b63..6b1faaa348f0c483a6416fef5dd3bb6ee4e36a93 100644 (file)
@@ -9,6 +9,7 @@ CONFIG_ARCH_MMAP_RND_BITS_MIN=12
 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
@@ -195,6 +196,7 @@ CONFIG_QUEUED_SPINLOCKS=y
 CONFIG_RAS=y
 CONFIG_REGMAP=y
 CONFIG_REGMAP_I2C=y
+CONFIG_REGULATOR=y
 CONFIG_RELAY=y
 CONFIG_RFS_ACCEL=y
 CONFIG_RPS=y
diff --git a/target/linux/octeon/files/arch/mips/boot/dts/cavium-octeon/cn7020_xirrus_xd2-240.dts b/target/linux/octeon/files/arch/mips/boot/dts/cavium-octeon/cn7020_xirrus_xd2-240.dts
new file mode 100644 (file)
index 0000000..f07626f
--- /dev/null
@@ -0,0 +1,110 @@
+// 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>;
+                };
+       };
+};
+
index dcab815791fd2bf0f83e912449d43e9f59a35306..dcc4844c35efa7b1ac4dee36ffefb58c1944c134 100644 (file)
@@ -14,6 +14,22 @@ define Build/strip-kernel
        $(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
@@ -112,4 +128,19 @@ define Device/cisco_vedge1000
 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))
diff --git a/target/linux/octeon/patches-5.15/160-xirrus-xd2_240-support.patch b/target/linux/octeon/patches-5.15/160-xirrus-xd2_240-support.patch
new file mode 100644 (file)
index 0000000..623d4b9
--- /dev/null
@@ -0,0 +1,30 @@
+--- 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... */
diff --git a/target/linux/octeon/patches-5.15/999-debug.patch b/target/linux/octeon/patches-5.15/999-debug.patch
new file mode 100644 (file)
index 0000000..be6f0d4
--- /dev/null
@@ -0,0 +1,27 @@
+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;