diff mbox

[OpenWrt-Devel,ar71xx] Support for Ubiquiti UniFi AP AC LITE

Message ID trinity-f32afaf5-70fb-4d23-a24b-b453bf00fa64-1450827302827@3capp-gmx-bs67
State Changes Requested
Headers show

Commit Message

p.wassi@gmx.at Dec. 22, 2015, 11:35 p.m. UTC
From: P.Wassi <p.wassi at gmx.at>

Add support for the Ubiquiti UniFi AP AC LITE
Signed-off-by: P.Wassi <p.wassi at gmx.at>
---
The UniFi AC series will only be supported, if these patches are
applied first (especially for the QCA956x SoC support):
https://patchwork.ozlabs.org/patch/559284/
https://patchwork.ozlabs.org/patch/559285/
https://patchwork.ozlabs.org/patch/559286/
https://patchwork.ozlabs.org/patch/559287/
https://patchwork.ozlabs.org/patch/559288/
Then, this patch adds:
* New machine type
* Code for device setup
* Proper image configuration
* New target for the build system
* Network setup as LAN-only
* Diagnostic LED
* Sysupgrade Support
* ath10k firmware extraction
* Board detection
Additional information on https://pwassi.privatedns.org/openwrt/unifiac/

Comments

Felix Fietkau Jan. 3, 2016, 9:30 p.m. UTC | #1
On 2015-12-23 00:35, p.wassi@gmx.at wrote:
> From: P.Wassi <p.wassi at gmx.at>
> 
> Add support for the Ubiquiti UniFi AP AC LITE
> Signed-off-by: P.Wassi <p.wassi at gmx.at>
> ---
> The UniFi AC series will only be supported, if these patches are
> applied first (especially for the QCA956x SoC support):
> https://patchwork.ozlabs.org/patch/559284/
> https://patchwork.ozlabs.org/patch/559285/
> https://patchwork.ozlabs.org/patch/559286/
> https://patchwork.ozlabs.org/patch/559287/
> https://patchwork.ozlabs.org/patch/559288/
> Then, this patch adds:
> * New machine type
> * Code for device setup
> * Proper image configuration
> * New target for the build system
> * Network setup as LAN-only
> * Diagnostic LED
> * Sysupgrade Support
> * ath10k firmware extraction
> * Board detection
> Additional information on https://pwassi.privatedns.org/openwrt/unifiac/
The additions to the mach file in the patch seem to be free of
dependencies on definitions from other ubnt boards - please move them to
a new mach-*.c file instead of patching them in.

- Felix
p.wassi@gmx.at Jan. 5, 2016, 9:37 a.m. UTC | #2
> On 2016-01-03 22:30, Felix Fietkau wrote:
> The additions to the mach file in the patch seem to be free of
> dependencies on definitions from other ubnt boards - please move them to
> a new mach-*.c file instead of patching them in.
>
> - Felix
>

Ah, ok. Then where should the changes to the mach-file go?
Is /target/linux/ar71xx/files/arch/mips/ath79/mach-ubnt-unifiac.c ok?
The intention to include it into the existing one arised, as all ubnt-devices
are in just two mach-files. However, I've just noticed that for e.g. TP-Link
devices nearly every device has its own mach-file.

-- P.Wassi
Felix Fietkau Jan. 5, 2016, 10:43 a.m. UTC | #3
On 2016-01-05 10:37, p.wassi@gmx.at wrote:
>> On 2016-01-03 22:30, Felix Fietkau wrote:
>> The additions to the mach file in the patch seem to be free of
>> dependencies on definitions from other ubnt boards - please move them to
>> a new mach-*.c file instead of patching them in.
>>
>> - Felix
>>
> 
> Ah, ok. Then where should the changes to the mach-file go?
> Is /target/linux/ar71xx/files/arch/mips/ath79/mach-ubnt-unifiac.c ok?
> The intention to include it into the existing one arised, as all ubnt-devices
> are in just two mach-files. However, I've just noticed that for e.g. TP-Link
> devices nearly every device has its own mach-file.
People just kept adding to the ubnt mach file because there was
something there already (and there was some code sharing too), whereas
other devices were usually kept separate anyway.
I'd like to make sure that all future devices get their own mach files,
since that's easier to maintain.
At some point, all of this mess is going away anyway when we get proper
device tree support.

- Felix
diff mbox

Patch

diff -rup a/target/linux/ar71xx/base-files/etc/board.d/02_network b/target/linux/ar71xx/base-files/etc/board.d/02_network
--- a/target/linux/ar71xx/base-files/etc/board.d/02_network
+++ b/target/linux/ar71xx/base-files/etc/board.d/02_network
@@ -357,6 +357,7 @@  tl-wa901nd-v2 |\
 tl-wa901nd-v3 |\
 tl-wr703n |\
 tube2h |\
+unifiac |\
 wndap360 |\
 mynet-rext |\
 wp543)
diff -rup a/target/linux/ar71xx/base-files/etc/diag.sh b/target/linux/ar71xx/base-files/etc/diag.sh
--- a/target/linux/ar71xx/base-files/etc/diag.sh
+++ b/target/linux/ar71xx/base-files/etc/diag.sh
@@ -333,7 +333,8 @@  get_status_led() {
 	unifi)
 		status_led="ubnt:green:dome"
 		;;
-	uap-pro)
+	uap-pro | \
+	unifiac)
 		status_led="ubnt:white:dome"
 		;;
 	unifi-outdoor-plus)
diff -rup a/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata b/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
--- a/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
+++ b/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
@@ -75,6 +75,9 @@  case "$FIRMWARE" in
 		ath10kcal_extract "ART" 20480 2116
 		ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) +16)
 		;;
+	unifiac)
+		ath10kcal_extract "EEPROM" 20480 2116
+		;;
 	esac
 	;;
 "ath10k/cal-pci-0000:01:00.0.bin")
diff -rup a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh
--- a/target/linux/ar71xx/base-files/lib/ar71xx.sh
+++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh
@@ -899,6 +899,9 @@  ar71xx_board_detect() {
 	*UniFi)
 		name="unifi"
 		;;
+	*"UniFi-AC")
+		name="unifiac"
+		;;
 	*"UniFi AP Pro")
 		name="uap-pro"
 		;;
diff -rup a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
--- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
+++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
@@ -261,6 +261,7 @@  platform_check_image() {
 	wlae-ag300n | \
 	nbg460n_550n_550nh | \
 	unifi | \
+	unifiac | \
 	unifi-outdoor | \
 	carambola2 | \
 	weio )
diff -rup a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h
--- a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h
+++ b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h
@@ -207,6 +207,7 @@  enum ath79_mach_type {
 	ATH79_MACH_UBNT_RS,		/* Ubiquiti RouterStation */
 	ATH79_MACH_UBNT_UAP_PRO,	/* Ubiquiti UniFi AP Pro */
 	ATH79_MACH_UBNT_UNIFI, 		/* Ubiquiti Unifi */
+	ATH79_MACH_UBNT_UNIFIAC,	/* Ubiquiti Unifi AC */
 	ATH79_MACH_UBNT_UNIFI_OUTDOOR,	/* Ubiquiti UnifiAP Outdoor */
 	ATH79_MACH_UBNT_UNIFI_OUTDOOR_PLUS, /* Ubiquiti UnifiAP Outdoor+ */
 	ATH79_MACH_UBNT_XM,		/* Ubiquiti Networks XM board rev 1.0 */
diff -rup a/target/linux/ar71xx/generic/profiles/ubnt.mk b/target/linux/ar71xx/generic/profiles/ubnt.mk
--- a/target/linux/ar71xx/generic/profiles/ubnt.mk
+++ b/target/linux/ar71xx/generic/profiles/ubnt.mk
@@ -38,6 +38,17 @@  endef
 
 $(eval $(call Profile,UBNTUNIFI))
 
+define Profile/UBNTUNIFIAC
+	NAME:=Ubiquiti UniFi AP AC
+	PACKAGES:=kmod-ath10k ath10k-firmware-qca988x
+endef
+
+define Profile/UBNTUNIFIAC/Description
+	Package set optimized for the Ubiquiti UniFi AP AC.
+endef
+
+$(eval $(call Profile,UBNTUNIFIAC))
+
 define Profile/UBNTUNIFIOUTDOOR
 	NAME:=Ubiquiti UniFiAP Outdoor
 	PACKAGES:=
diff -rup a/target/linux/ar71xx/image/Makefile b/target/linux/ar71xx/image/Makefile
--- a/target/linux/ar71xx/image/Makefile
+++ b/target/linux/ar71xx/image/Makefile
@@ -1124,12 +1124,25 @@  define Device/ubnt-unifi
   DEVICE_PROFILE := UBNT UBNTUNIFI
 endef
 
+define Device/ubnt-unifiac
+  DEVICE_PROFILE := UBNT
+  IMAGE_SIZE := 7744k
+  MTDPARTS = spi0.0:384k(u-boot)ro,64k(u-boot-env)ro,7744k(firmware),7744k(ubnt-airos)ro,128k(bs)ro,256k(cfg)ro,64k(EEPROM)ro
+  UBNT_TYPE := BZ
+  UBNT_BOARD := XM
+  UBNT_CHIP := qca956x
+  IMAGES := sysupgrade.bin
+  IMAGE/sysupgrade.bin = append-kernel $$$$(BLOCKSIZE) | append-rootfs | pad-rootfs | check-size $$$$(IMAGE_SIZE)
+  BOARDNAME := UBNT-UF-AC
+  DEVICE_PROFILE := UBNT UBNTUNIFIAC
+endef
+
 define Device/ubnt-unifi-outdoor
   $(Device/ubnt-bz)
   BOARDNAME := UBNT-U20
   DEVICE_PROFILE := UBNT UBNTUNIFIOUTDOOR
 endef
-TARGET_DEVICES += ubnt-unifi ubnt-unifi-outdoor
+TARGET_DEVICES += ubnt-unifi ubnt-unifiac ubnt-unifi-outdoor
 
 define Device/ubnt-nano-m-xw
   $(Device/ubnt-xw)
diff -rup a/target/linux/ar71xx/patches-4.1/608-MIPS-ath79-ubnt-xm-add-more-boards.patch b/target/linux/ar71xx/patches-4.1/608-MIPS-ath79-ubnt-xm-add-more-boards.patch
--- a/target/linux/ar71xx/patches-4.1/608-MIPS-ath79-ubnt-xm-add-more-boards.patch
+++ b/target/linux/ar71xx/patches-4.1/608-MIPS-ath79-ubnt-xm-add-more-boards.patch
@@ -66,7 +66,7 @@ 
  
  	ath79_register_leds_gpio(-1, ARRAY_SIZE(ubnt_xm_leds_gpio),
  				 ubnt_xm_leds_gpio);
-@@ -79,9 +93,552 @@ static void __init ubnt_xm_init(void)
+@@ -79,9 +93,621 @@ static void __init ubnt_xm_init(void)
  
  	ath79_register_m25p80(NULL);
  	ap91_pci_init(eeprom, NULL);
@@ -358,6 +358,75 @@ 
 +MIPS_MACHINE(ATH79_MACH_UBNT_UAP_PRO, "UAP-PRO", "Ubiquiti UniFi AP Pro",
 +	     ubnt_uap_pro_setup);
 +
++
++static struct flash_platform_data ubnt_unifiac_flash_data = {
++	/* mx25l12805d and mx25l12835f have the same JEDEC ID */
++	.type = "mx25l12805d",
++};
++
++static struct gpio_led ubnt_unifiac_leds_gpio[] __initdata = {
++	{
++		.name		= "ubnt:white:dome",
++		.gpio		= 7,
++		.active_low	= 0,
++	}, {
++		.name		= "ubnt:blue:dome",
++		.gpio		= 8,
++		.active_low	= 0,
++	}
++};
++
++static struct gpio_keys_button ubnt_unifiac_gpio_keys[] __initdata = {
++	{
++		.desc			= "reset",
++		.type			= EV_KEY,
++		.code			= KEY_RESTART,
++		.debounce_interval	= UBNT_XM_KEYS_DEBOUNCE_INTERVAL,
++		.gpio			= 2,
++		.active_low		= 1,
++	}
++};
++
++#define UNIFIAC_MAC0_OFFSET             0x0000
++#define UNIFIAC_WMAC_CALDATA_OFFSET     0x1000
++#define UNIFIAC_PCI_CALDATA_OFFSET      0x5000
++
++static void __init ubnt_unifiac_setup(void)
++{
++	u8 *eeprom = (u8 *) KSEG1ADDR(0x1fff0000);
++
++	ath79_register_m25p80(&ubnt_unifiac_flash_data);
++
++
++	ath79_init_mac(ath79_eth0_data.mac_addr,
++		       eeprom + UNIFIAC_MAC0_OFFSET, 0);
++
++	ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_SGMII;
++	ath79_eth0_data.phy_mask = BIT(4);
++	ath79_eth0_pll_data.pll_10 = 0x00001313;
++
++	ath79_register_mdio(0, ~BIT(4));
++	ath79_register_eth(0);
++
++
++	ath79_register_wmac(eeprom + UNIFIAC_WMAC_CALDATA_OFFSET, NULL);
++
++
++	ap91_pci_init(eeprom + UNIFIAC_PCI_CALDATA_OFFSET, NULL);
++
++
++	ath79_register_leds_gpio(-1, ARRAY_SIZE(ubnt_unifiac_leds_gpio),
++				 ubnt_unifiac_leds_gpio);
++
++	ath79_register_gpio_keys_polled(-1, UBNT_XM_KEYS_POLL_INTERVAL,
++                                        ARRAY_SIZE(ubnt_unifiac_gpio_keys),
++                                        ubnt_unifiac_gpio_keys);
++}
++
++MIPS_MACHINE(ATH79_MACH_UBNT_UNIFIAC, "UBNT-UF-AC", "Ubiquiti UniFi-AC",
++	     ubnt_unifiac_setup);
++
++
 +#define UBNT_XW_GPIO_LED_L1		11
 +#define UBNT_XW_GPIO_LED_L2		16
 +#define UBNT_XW_GPIO_LED_L3		13
diff -rup a/target/linux/ar71xx/patches-4.1/610-MIPS-ath79-UBNT-add-airGateway-pro-support.patch b/target/linux/ar71xx/patches-4.1/610-MIPS-ath79-UBNT-add-airGateway-pro-support.patch
--- a/target/linux/ar71xx/patches-4.1/610-MIPS-ath79-UBNT-add-airGateway-pro-support.patch
+++ b/target/linux/ar71xx/patches-4.1/610-MIPS-ath79-UBNT-add-airGateway-pro-support.patch
@@ -1,6 +1,6 @@ 
 --- a/arch/mips/ath79/mach-ubnt-xm.c
 +++ b/arch/mips/ath79/mach-ubnt-xm.c
-@@ -642,3 +642,59 @@ static void __init ubnt_airgateway_setup
+@@ -711,3 +711,59 @@ static void __init ubnt_airgateway_setup
  MIPS_MACHINE(ATH79_MACH_UBNT_AIRGW, "UBNT-AGW", "Ubiquiti AirGateway",
  	     ubnt_airgateway_setup);