mediatek: filogic: add JCG Q30 PRO support
Hardware specification:
  SoC: MediaTek MT7981B 2x A53
  Flash: Winbond 128MB
  RAM: DDR3 256MB
  Ethernet: 4x 10/100/1000 Mbps
  Switch: MediaTek MT7531AE
  WiFi: MediaTek MT7976C
  Button: Reset
  Power: DC 12V 1A
Flash instructions:
  1. Connect to your PC via the Gigabit port of the router,
     set a static ip on the ethernet interface of your PC.
     (ip 192.168.1.254, gateway 192.168.1.1)
  2. Attach UART, pause at u-boot menu.
  3. Select "Upgrade ATF BL2", then use preloader.bin
  4. Select "Upgrade ATF FIP", then use bl31-uboot.fip
  5. Download the initramfs image, and type "reset",
     waiting for tftp recovery to complete.
  6. After openwrt boots up, perform sysupgrade.
Note:
  1. Since NMBM is disabled, we must back up all partitions.
  2. Although we can upgrade new firmware in the stock firmware,
     we need the special fit image signature of MediaTek and
     dual boot (hack kernel) to make u-boot boot it. So just
     abandon these hacks and flash it via the serial port.
Signed-off-by: Chukun Pan <amadeus@jmu.edu.cn>
(cherry picked from commit 626344c9926dcf2db2e10681c19aab0328fee160)
			
			
This commit is contained in:
		 Chukun Pan
					Chukun Pan
				
			
				
					committed by
					
						 Rafał Miłecki
						Rafał Miłecki
					
				
			
			
				
	
			
			
			 Rafał Miłecki
						Rafał Miłecki
					
				
			
						parent
						
							4f9c4113c4
						
					
				
				
					commit
					6df6f03396
				
			
							
								
								
									
										225
									
								
								target/linux/mediatek/dts/mt7981b-jcg-q30-pro.dts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										225
									
								
								target/linux/mediatek/dts/mt7981b-jcg-q30-pro.dts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,225 @@ | |||||||
|  | // SPDX-License-Identifier: GPL-2.0-or-later OR MIT | ||||||
|  |  | ||||||
|  | /dts-v1/; | ||||||
|  | #include <dt-bindings/gpio/gpio.h> | ||||||
|  | #include <dt-bindings/input/input.h> | ||||||
|  |  | ||||||
|  | #include "mt7981.dtsi" | ||||||
|  |  | ||||||
|  | / { | ||||||
|  | 	model = "JCG Q30 PRO"; | ||||||
|  | 	compatible = "jcg,q30-pro", "mediatek,mt7981"; | ||||||
|  |  | ||||||
|  | 	aliases { | ||||||
|  | 		serial0 = &uart0; | ||||||
|  | 		label-mac-device = &gmac0; | ||||||
|  | 		led-boot = &led_status_red; | ||||||
|  | 		led-failsafe = &led_status_red; | ||||||
|  | 		led-running = &led_status_blue; | ||||||
|  | 		led-upgrade = &led_status_blue; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	chosen { | ||||||
|  | 		stdout-path = "serial0:115200n8"; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	memory { | ||||||
|  | 		reg = <0 0x40000000 0 0x10000000>; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	gpio-keys { | ||||||
|  | 		compatible = "gpio-keys"; | ||||||
|  |  | ||||||
|  | 		reset { | ||||||
|  | 			label = "reset"; | ||||||
|  | 			linux,code = <KEY_RESTART>; | ||||||
|  | 			gpios = <&pio 1 GPIO_ACTIVE_LOW>; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	leds { | ||||||
|  | 		compatible = "gpio-leds"; | ||||||
|  |  | ||||||
|  | 		led_status_red: red { | ||||||
|  | 			label = "red:status"; | ||||||
|  | 			gpios = <&pio 8 GPIO_ACTIVE_HIGH>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		led_status_blue: blue { | ||||||
|  | 			label = "blue:status"; | ||||||
|  | 			gpios = <&pio 13 GPIO_ACTIVE_LOW>; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | ð { | ||||||
|  | 	status = "okay"; | ||||||
|  |  | ||||||
|  | 	gmac0: mac@0 { | ||||||
|  | 		compatible = "mediatek,eth-mac"; | ||||||
|  | 		reg = <0>; | ||||||
|  | 		phy-mode = "2500base-x"; | ||||||
|  |  | ||||||
|  | 		nvmem-cells = <&macaddr_lan>; | ||||||
|  | 		nvmem-cell-names = "mac-address"; | ||||||
|  |  | ||||||
|  | 		fixed-link { | ||||||
|  | 			speed = <2500>; | ||||||
|  | 			full-duplex; | ||||||
|  | 			pause; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &mdio_bus { | ||||||
|  | 	switch: switch@0 { | ||||||
|  | 		compatible = "mediatek,mt7531"; | ||||||
|  | 		reg = <31>; | ||||||
|  | 		reset-gpios = <&pio 39 GPIO_ACTIVE_HIGH>; | ||||||
|  | 		interrupt-controller; | ||||||
|  | 		#interrupt-cells = <1>; | ||||||
|  | 		interrupt-parent = <&pio>; | ||||||
|  | 		interrupts = <38 IRQ_TYPE_LEVEL_HIGH>; | ||||||
|  | 	}; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &spi0 { | ||||||
|  | 	pinctrl-names = "default"; | ||||||
|  | 	pinctrl-0 = <&spi0_flash_pins>; | ||||||
|  | 	status = "okay"; | ||||||
|  |  | ||||||
|  | 	spi_nand@0 { | ||||||
|  | 		compatible = "spi-nand"; | ||||||
|  | 		#address-cells = <1>; | ||||||
|  | 		#size-cells = <1>; | ||||||
|  | 		reg = <0>; | ||||||
|  |  | ||||||
|  | 		spi-max-frequency = <52000000>; | ||||||
|  | 		spi-tx-bus-width = <4>; | ||||||
|  | 		spi-rx-bus-width = <4>; | ||||||
|  |  | ||||||
|  | 		partitions { | ||||||
|  | 			compatible = "fixed-partitions"; | ||||||
|  | 			#address-cells = <1>; | ||||||
|  | 			#size-cells = <1>; | ||||||
|  |  | ||||||
|  | 			partition@0 { | ||||||
|  | 				label = "bl2"; | ||||||
|  | 				reg = <0x0000000 0x0100000>; | ||||||
|  | 				read-only; | ||||||
|  | 			}; | ||||||
|  |  | ||||||
|  | 			partition@100000 { | ||||||
|  | 				label = "u-boot-env"; | ||||||
|  | 				reg = <0x0100000 0x0080000>; | ||||||
|  | 			}; | ||||||
|  |  | ||||||
|  | 			factory: partition@180000 { | ||||||
|  | 				label = "Factory"; | ||||||
|  | 				reg = <0x0180000 0x0200000>; | ||||||
|  | 				read-only; | ||||||
|  | 			}; | ||||||
|  |  | ||||||
|  | 			partition@380000 { | ||||||
|  | 				label = "fip"; | ||||||
|  | 				reg = <0x0380000 0x0200000>; | ||||||
|  | 				read-only; | ||||||
|  | 			}; | ||||||
|  |  | ||||||
|  | 			partition@580000 { | ||||||
|  | 				label = "ubi"; | ||||||
|  | 				reg = <0x0580000 0x7000000>; | ||||||
|  | 			}; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &switch { | ||||||
|  | 	ports { | ||||||
|  | 		#address-cells = <1>; | ||||||
|  | 		#size-cells = <0>; | ||||||
|  |  | ||||||
|  | 		port@0 { | ||||||
|  | 			reg = <0>; | ||||||
|  | 			label = "wan"; | ||||||
|  | 			nvmem-cells = <&macaddr_wan>; | ||||||
|  | 			nvmem-cell-names = "mac-address"; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		port@1 { | ||||||
|  | 			reg = <1>; | ||||||
|  | 			label = "lan1"; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		port@2 { | ||||||
|  | 			reg = <2>; | ||||||
|  | 			label = "lan2"; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		port@3 { | ||||||
|  | 			reg = <3>; | ||||||
|  | 			label = "lan3"; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		port@6 { | ||||||
|  | 			reg = <6>; | ||||||
|  | 			ethernet = <&gmac0>; | ||||||
|  | 			phy-mode = "2500base-x"; | ||||||
|  |  | ||||||
|  | 			fixed-link { | ||||||
|  | 				speed = <2500>; | ||||||
|  | 				full-duplex; | ||||||
|  | 				pause; | ||||||
|  | 			}; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &pio { | ||||||
|  | 	spi0_flash_pins: spi0-pins { | ||||||
|  | 		mux { | ||||||
|  | 			function = "spi"; | ||||||
|  | 			groups = "spi0", "spi0_wp_hold"; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		conf-pu { | ||||||
|  | 			pins = "SPI0_CS", "SPI0_HOLD", "SPI0_WP"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			mediatek,pull-up-adv = <0>; /* bias-disable */ | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		conf-pd { | ||||||
|  | 			pins = "SPI0_CLK", "SPI0_MOSI", "SPI0_MISO"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			mediatek,pull-up-adv = <0>; /* bias-disable */ | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &uart0 { | ||||||
|  | 	status = "okay"; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &watchdog { | ||||||
|  | 	status = "okay"; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &wifi { | ||||||
|  | 	status = "okay"; | ||||||
|  |  | ||||||
|  | 	mediatek,mtd-eeprom = <&factory 0x0>; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &factory { | ||||||
|  | 	compatible = "nvmem-cells"; | ||||||
|  | 	#address-cells = <1>; | ||||||
|  | 	#size-cells = <1>; | ||||||
|  |  | ||||||
|  | 	macaddr_wan: macaddr@a0024 { | ||||||
|  | 		reg = <0xa0024 0x6>; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	macaddr_lan: macaddr@a002a { | ||||||
|  | 		reg = <0xa002a 0x6>; | ||||||
|  | 	}; | ||||||
|  | }; | ||||||
| @@ -49,6 +49,7 @@ mediatek_setup_interfaces() | |||||||
| 		ucidef_set_interfaces_lan_wan "lan0 lan1 lan2" eth1 | 		ucidef_set_interfaces_lan_wan "lan0 lan1 lan2" eth1 | ||||||
| 		;; | 		;; | ||||||
| 	cetron,ct3003|\ | 	cetron,ct3003|\ | ||||||
|  | 	jcg,q30-pro|\ | ||||||
| 	qihoo,360t7) | 	qihoo,360t7) | ||||||
| 		ucidef_set_interfaces_lan_wan "lan1 lan2 lan3" wan | 		ucidef_set_interfaces_lan_wan "lan1 lan2 lan3" wan | ||||||
| 		;; | 		;; | ||||||
|   | |||||||
| @@ -65,6 +65,11 @@ case "$board" in | |||||||
| 		[ "$PHYNBR" = "0" ] && macaddr_add $addr 2 > /sys${DEVPATH}/macaddress | 		[ "$PHYNBR" = "0" ] && macaddr_add $addr 2 > /sys${DEVPATH}/macaddress | ||||||
| 		[ "$PHYNBR" = "1" ] && macaddr_add $addr 3 > /sys${DEVPATH}/macaddress | 		[ "$PHYNBR" = "1" ] && macaddr_add $addr 3 > /sys${DEVPATH}/macaddress | ||||||
| 		;; | 		;; | ||||||
|  | 	jcg,q30-pro) | ||||||
|  | 		# Originally, phy1 is phy0 mac with LA bit set. However, this would conflict | ||||||
|  | 		# addresses on multiple VIFs with the other radio. Use label mac to set LA bit. | ||||||
|  | 		[ "$PHYNBR" = "1" ] && macaddr_setbit_la $(get_mac_label) > /sys${DEVPATH}/macaddress | ||||||
|  | 		;; | ||||||
| 	mercusys,mr90x-v1) | 	mercusys,mr90x-v1) | ||||||
| 		addr=$(get_mac_binary "/tmp/tp_data/default-mac" 0) | 		addr=$(get_mac_binary "/tmp/tp_data/default-mac" 0) | ||||||
| 		[ "$PHYNBR" = "0" ] && echo "$addr" > /sys${DEVPATH}/macaddress | 		[ "$PHYNBR" = "0" ] && echo "$addr" > /sys${DEVPATH}/macaddress | ||||||
|   | |||||||
| @@ -112,6 +112,7 @@ platform_do_upgrade() { | |||||||
| 		emmc_do_upgrade "$1" | 		emmc_do_upgrade "$1" | ||||||
| 		;; | 		;; | ||||||
| 	h3c,magic-nx30-pro|\ | 	h3c,magic-nx30-pro|\ | ||||||
|  | 	jcg,q30-pro|\ | ||||||
| 	mediatek,mt7981-rfb|\ | 	mediatek,mt7981-rfb|\ | ||||||
| 	qihoo,360t7|\ | 	qihoo,360t7|\ | ||||||
| 	tplink,tl-xdr4288|\ | 	tplink,tl-xdr4288|\ | ||||||
|   | |||||||
| @@ -330,6 +330,30 @@ define Device/h3c_magic-nx30-pro | |||||||
| endef | endef | ||||||
| TARGET_DEVICES += h3c_magic-nx30-pro | TARGET_DEVICES += h3c_magic-nx30-pro | ||||||
|  |  | ||||||
|  | define Device/jcg_q30-pro | ||||||
|  |   DEVICE_VENDOR := JCG | ||||||
|  |   DEVICE_MODEL := Q30 PRO | ||||||
|  |   DEVICE_DTS := mt7981b-jcg-q30-pro | ||||||
|  |   DEVICE_DTS_DIR := ../dts | ||||||
|  |   UBINIZE_OPTS := -E 5 | ||||||
|  |   BLOCKSIZE := 128k | ||||||
|  |   PAGESIZE := 2048 | ||||||
|  |   KERNEL_IN_UBI := 1 | ||||||
|  |   UBOOTENV_IN_UBI := 1 | ||||||
|  |   IMAGES := sysupgrade.itb | ||||||
|  |   KERNEL_INITRAMFS_SUFFIX := -recovery.itb | ||||||
|  |   KERNEL := kernel-bin | gzip | ||||||
|  |   KERNEL_INITRAMFS := kernel-bin | lzma | \ | ||||||
|  |         fit lzma $$(KDIR)/image-$$(firstword $$(DEVICE_DTS)).dtb with-initrd | pad-to 64k | ||||||
|  |   IMAGE/sysupgrade.itb := append-kernel | \ | ||||||
|  |         fit gzip $$(KDIR)/image-$$(firstword $$(DEVICE_DTS)).dtb external-static-with-rootfs | append-metadata | ||||||
|  |   DEVICE_PACKAGES := kmod-mt7981-firmware mt7981-wo-firmware | ||||||
|  |   ARTIFACTS := preloader.bin bl31-uboot.fip | ||||||
|  |   ARTIFACT/preloader.bin := mt7981-bl2 spim-nand-ddr3 | ||||||
|  |   ARTIFACT/bl31-uboot.fip := mt7981-bl31-uboot jcg_q30-pro | ||||||
|  | endef | ||||||
|  | TARGET_DEVICES += jcg_q30-pro | ||||||
|  |  | ||||||
| define Device/netgear_wax220 | define Device/netgear_wax220 | ||||||
|   DEVICE_VENDOR := NETGEAR |   DEVICE_VENDOR := NETGEAR | ||||||
|   DEVICE_MODEL := WAX220 |   DEVICE_MODEL := WAX220 | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user