aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Lamparter <chunkeey@gmail.com>2020-08-12 01:21:13 +0200
committerChristian Lamparter <chunkeey@gmail.com>2020-08-29 17:14:27 +0200
commit2c3f16d70e32d7b5eb62096097c4343c5409afe3 (patch)
tree47c8e42364eef32d22d15081234f805f04ae303e
parentd75e75306301852a848824cf268d8b58eda28a8a (diff)
downloadupstream-2c3f16d70e32d7b5eb62096097c4343c5409afe3.tar.gz
upstream-2c3f16d70e32d7b5eb62096097c4343c5409afe3.tar.bz2
upstream-2c3f16d70e32d7b5eb62096097c4343c5409afe3.zip
apm821xx: WNDR4700: enumerate PCIe in device-tree
This patch adds the pcie-switch and bridge configuration of the WNDR4700. This allows to get rid of the legacy firmware monikers and drop the usbport LED declaration. Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
-rwxr-xr-xtarget/linux/apm821xx/base-files/etc/board.d/01_leds3
-rw-r--r--target/linux/apm821xx/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom24
-rw-r--r--target/linux/apm821xx/dts/netgear-wndr4700.dts94
-rw-r--r--target/linux/apm821xx/files/arch/powerpc/platforms/44x/wndr4700.c19
4 files changed, 106 insertions, 34 deletions
diff --git a/target/linux/apm821xx/base-files/etc/board.d/01_leds b/target/linux/apm821xx/base-files/etc/board.d/01_leds
index dd529b528d..57598c0ca9 100755
--- a/target/linux/apm821xx/base-files/etc/board.d/01_leds
+++ b/target/linux/apm821xx/base-files/etc/board.d/01_leds
@@ -42,9 +42,6 @@ netgear,wndap660)
netgear,wndr4700)
ucidef_set_led_switch "wan_green" "WAN (green)" "wndr4700:green:wan" "switch0" "0x20"
ucidef_set_led_netdev "wan_yellow" "WAN (yellow)" "wndr4700:yellow:wan" "eth0.2" "tx rx"
- ucidef_set_led_usbport "usb3" "USB3" "wndr4700:blue:usb" "usb2-port1" "usb2-port2" "usb3-port1" "usb3-port2"
- ucidef_set_led_wlan "wlan2g" "WLAN2G" "wndr4700:blue:wlan" "phy0tpt"
- ucidef_set_led_wlan "wlan5g" "WLAN5G" "wndr4700:blue:wlan" "phy1tpt"
;;
*)
diff --git a/target/linux/apm821xx/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom b/target/linux/apm821xx/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom
index ee58901d18..dcdcf4dc45 100644
--- a/target/linux/apm821xx/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom
+++ b/target/linux/apm821xx/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom
@@ -7,16 +7,16 @@
board=$(board_name)
case "$FIRMWARE" in
-"pci_wmac0.eeprom")
- case $board in
- netgear,wndr4700)
+"ath9k-eeprom-pci-0000:43:00.0.bin")
+ case $board in
+ netgear,wndr4700)
. /lib/upgrade/nand.sh
if [ -n "$(nand_find_volume ubi0 caldata)" ]; then
- caldata_extract_ubi "caldata" 0x5000 0x1000
+ caldata_extract_ubi "caldata" 0x1000 0x1000
else
- caldata_extract "wifi_data" 0x5000 0x1000
- ath9k_patch_mac $(mtd_get_mac_binary wifi_data 0xc)
+ caldata_extract "wifi_data" 0x1000 0x1000
+ ath9k_patch_mac $(mtd_get_mac_binary wifi_data 0x0)
fi
;;
*)
@@ -25,16 +25,16 @@ case "$FIRMWARE" in
esac
;;
-"pci_wmac1.eeprom")
- case $board in
- netgear,wndr4700)
+"ath9k-eeprom-pci-0000:44:00.0.bin")
+ case $board in
+ netgear,wndr4700)
. /lib/upgrade/nand.sh
if [ -n "$(nand_find_volume ubi0 caldata)" ]; then
- caldata_extract_ubi "caldata" 0x1000 0x1000
+ caldata_extract_ubi "caldata" 0x5000 0x1000
else
- caldata_extract "wifi_data" 0x1000 0x1000
- ath9k_patch_mac $(mtd_get_mac_binary wifi_data 0x0)
+ caldata_extract "wifi_data" 0x5000 0x1000
+ ath9k_patch_mac $(mtd_get_mac_binary wifi_data 0xc)
fi
;;
*)
diff --git a/target/linux/apm821xx/dts/netgear-wndr4700.dts b/target/linux/apm821xx/dts/netgear-wndr4700.dts
index 8972d2b030..a1c23896a1 100644
--- a/target/linux/apm821xx/dts/netgear-wndr4700.dts
+++ b/target/linux/apm821xx/dts/netgear-wndr4700.dts
@@ -381,6 +381,9 @@
usb-blue {
label = "wndr4700:blue:usb";
gpios = <&GPIO0 10 GPIO_ACTIVE_HIGH>;
+ trigger-sources = <&usb2_port 1>, <&usb2_port 2>,
+ <&usb3_port 1>, <&usb3_port 2>;
+ linux,default-trigger = "usbport";
};
logo-white {
@@ -412,12 +415,103 @@
wlan-blue {
label = "wndr4700:blue:wlan";
gpios = <&GPIO0 18 GPIO_ACTIVE_HIGH>;
+ linux,default-trigger = "phy0tpt";
};
};
};
&PCIE0 {
status = "okay";
+
+ /*
+ * relevant lspci topology:
+ *
+ * -+-[0000:40]---00.0-[41-7f]----00.0-[42-45]--+-02.0-[43]----00.0
+ * +-03.0-[44]----00.0
+ * \-04.0-[45]----00.0
+ *
+ */
+
+ bridge@64,0 {
+ reg = <0x00400000 0 0 0 0>;
+ #address-cells = <3>;
+ #size-cells = <2>;
+ ranges;
+
+ bridge@65,0 {
+ /* IDT PES4T4 PCI Express Switch */
+ compatible = "pci111d,803a";
+ reg = <0x00410000 0 0 0 0>;
+ #address-cells = <3>;
+ #size-cells = <2>;
+ ranges;
+
+ bridge@66,2 {
+ compatible = "pci111d,803a";
+ reg = <0x00421000 0 0 0 0>;
+ #address-cells = <3>;
+ #size-cells = <2>;
+ ranges;
+
+ wifi0: wifi@67,0 {
+ /* Atheros AR9380 5GHz */
+ compatible = "pci168c,0030";
+ reg = <0x00430000 0 0 0 0>;
+ qca,no-eeprom;
+ /* wifi CAL & MAC is stored in nvram */
+
+ /*
+ * Because this was such a pain.
+ * Here's the full device path:
+ * pci0000:40/0000:40:00.0/0000:41:00.0/0000:42:02.0/0000:43:00.0
+ */
+ };
+ };
+
+ bridge@66,3 {
+ compatible = "pci111d,803a";
+ reg = <0x00421800 0 0 0 0>;
+ #address-cells = <3>;
+ #size-cells = <2>;
+ ranges;
+
+ wifi1: wifi@68,0 {
+ /* Atheros AR9381 2.4GHz */
+ compatible = "pci168c,0033";
+ reg = <0x00440000 0 0 0 0>;
+ qca,no-eeprom;
+ /* wifi CAL & MAC is stored in nvram */
+ };
+ };
+
+ bridge@66,4 {
+ compatible = "pci111d,803a";
+ reg = <0x00422000 0 0 0 0>;
+ #address-cells = <3>;
+ #size-cells = <2>;
+ ranges;
+
+ usb1: usb@69,0 {
+ /* Renesas uPD720202 */
+ compatible = "pci1912,0015";
+ reg = <0x00450000 0 0 0 0>;
+
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ usb2_port: port@1 {
+ reg = <1>;
+ #trigger-source-cells = <1>;
+ };
+
+ usb3_port: port@2 {
+ reg = <2>;
+ #trigger-source-cells = <1>;
+ };
+ };
+ };
+ };
+ };
};
&MSI {
diff --git a/target/linux/apm821xx/files/arch/powerpc/platforms/44x/wndr4700.c b/target/linux/apm821xx/files/arch/powerpc/platforms/44x/wndr4700.c
index f50f43f3df..ff6137e2a4 100644
--- a/target/linux/apm821xx/files/arch/powerpc/platforms/44x/wndr4700.c
+++ b/target/linux/apm821xx/files/arch/powerpc/platforms/44x/wndr4700.c
@@ -73,27 +73,8 @@ define_machine(wndr4700) {
.calibrate_decr = generic_calibrate_decr,
};
-static struct ath9k_platform_data ar9380_wmac0_data = {
- .led_pin = -1,
- .eeprom_name = "pci_wmac1.eeprom",
-};
-static struct ath9k_platform_data ar9580_wmac1_data = {
- .led_pin = -1,
- .eeprom_name = "pci_wmac0.eeprom",
-};
-
static int __init wndr4700_ath9k_eeprom_load(void)
{
- struct pci_dev *dev;
-
- dev = pci_get_device(PCI_VENDOR_ID_ATHEROS, 0x0030, NULL);
- if (dev)
- dev->dev.platform_data = &ar9380_wmac0_data;
-
- dev = pci_get_device(PCI_VENDOR_ID_ATHEROS, 0x0033, NULL);
- if (dev)
- dev->dev.platform_data = &ar9580_wmac1_data;
-
return 0;
}
machine_device_initcall(wndr4700, wndr4700_ath9k_eeprom_load);