[LEDE-DEV] [PATCH] ramips: Add support for the HNET C108

Mathias Kresin dev at kresin.me
Wed Sep 6 00:03:32 PDT 2017


Hey Kristian,

I've picked your 01_leds file permission fix since it fixes an bug that 
I'm searching for a few days already.

Find comments from a first brief review inline.

Mathias

05.09.2017 21:48, Kristian Evensen:
> The HNET C108
> (http://www.szhwtech88.com/Product-product-cid-100-id-4374.html) is a
> mifi based on MT7602A, which has the following specifications:
> 
> * CPU: MT7620A
> * 1x 10/100Mbps Ethernet.
> * 16 MB Flash.
> * 64 MB RAM.
> * 1x USB 2.0 port.
> * 1x mini-PCIe slots.
> * 1x SIM slots.
> * 1x 2.4Ghz WIFI.
> * 1x button.
> * 6000 mAh battery.
> * 5x controllable LEDs.
> 
> Works:
> * Wifi.
> * Switch.
> * mini-PCIe slot. Only tested with a USB device (a modem).
> * SIM slot.
> * Sysupgrade.
> * Button (reset).
> 
> Not working:
> * USB port.

What does not working means? Not detected? USB devices not powered (but 
are working with an external powered hub)? Any error messages?

> * Wifi LED. It is always switched on.

Always switched on in terms of no relation to the up/down state of the 
wireless interface or it doesn't blink on activity?

Is the LED connected to the SoC? Have you tried to set the "wled" group 
to the gpio function? The wled group is only GPIO#72 (&gpio3 0).

> 
> Not tested:
> * SD card reader.
> 
> Notes:
> * The C108 has no dedicated status LED. I therefore set the LAN LED as
> status LED.
> * By default, both the LAN and Wifi interface has the same MAC address.
> The factory firmware sets the MAC address of the Wifi interface to (LAN
> + 2) in order to avoid having the same MAC. I did not find an easy way
> to accomplish this using the existing LEDE infrastructure. Instead, I
> implemented the opposite, i.e., the MAC address of the LAN interface is
> increased by two.
> * In commit 77645ffcd9ad767be02ea6d5cfe042928a3565d1, the mode of
> 01_leds was set to 0644. This patch changes that back 0755.
> 
> Installation:
> The router comes pre-installed with OpenWRT, including a variant of
> Luci. The initial firmware install can be done through this UI,
> following normal procedure. I.e., access the UI and update the firmware
> using the sysupgrade-image. Remember to select that you do not want to
> keep existing settings.
> 
> Recovery:
> If you brick the device, the C108 supports recovery using TFTP. Keep the
> reset button pressed for ~5sec when booting to trigger TFTP. Set the
> address of the network interface on your machine to 10.10.10.3/24, and
> rename your image file to Kernal.bin.
> 
> Signed-off-by: Kristian Evensen <kristian.evensen at gmail.com>
> ---
>   target/linux/ramips/base-files/etc/board.d/01_leds |   4 +
>   .../linux/ramips/base-files/etc/board.d/02_network |   5 +
>   target/linux/ramips/base-files/etc/diag.sh         |   3 +
>   target/linux/ramips/base-files/lib/ramips.sh       |   3 +
>   .../ramips/base-files/lib/upgrade/platform.sh      |   1 +
>   target/linux/ramips/dts/C108.dts                   | 182 +++++++++++++++++++++
>   target/linux/ramips/image/mt7620.mk                |   8 +
>   7 files changed, 206 insertions(+)
>   mode change 100644 => 100755 target/linux/ramips/base-files/etc/board.d/01_leds
>   create mode 100644 target/linux/ramips/dts/C108.dts
> 
> diff --git a/target/linux/ramips/base-files/etc/board.d/01_leds b/target/linux/ramips/base-files/etc/board.d/01_leds
> old mode 100644
> new mode 100755
> index ff5d156f2c..83e1a94000
> --- a/target/linux/ramips/base-files/etc/board.d/01_leds
> +++ b/target/linux/ramips/base-files/etc/board.d/01_leds
> @@ -82,6 +82,10 @@ broadway)
>   	set_usb_led "$board:red:diskmounted"
>   	set_wifi_led "$board:red:wps_active"
>   	;;
> +c108)
> +	ucidef_set_led_netdev "lan" "lan" "$board:green:lan" "eth0"
> +	ucidef_set_led_netdev "modem" "modem" "$board:green:modem" "wwan0"
> +	;;
>   c20i)
>   	ucidef_set_led_switch "lan" "lan" "$board:blue:lan" "switch0" "0x1e"
>   	ucidef_set_led_switch "wan" "wan" "$board:blue:wan" "switch0" "0x01"
> diff --git a/target/linux/ramips/base-files/etc/board.d/02_network b/target/linux/ramips/base-files/etc/board.d/02_network
> index df70a8b2ec..273a0a75c9 100755
> --- a/target/linux/ramips/base-files/etc/board.d/02_network
> +++ b/target/linux/ramips/base-files/etc/board.d/02_network
> @@ -217,6 +217,7 @@ ramips_setup_interfaces()
>   		ucidef_add_switch "switch0" \
>   			"1:lan" "2:lan" "3:lan" "4:lan" "0:wan" "9 at eth0"
>   		;;
> +	c108|\
>   	cf-wr800n)
>   		ucidef_add_switch "switch0" \
>   			"4:lan" "6t at eth0"
> @@ -386,6 +387,10 @@ ramips_setup_macs()
>   		lan_mac=$(cat /sys/class/net/eth0/address)
>   		wan_mac=$(mtd_get_mac_binary devdata 7)
>   		;;
> +	c108)
> +		lan_mac=$(cat /sys/class/net/eth0/address)
> +		lan_mac=$(macaddr_add "$lan_mac" 2)
> +		;;
>   	cy-swr1100|\
>   	dch-m225)
>   		lan_mac=$(mtd_get_mac_ascii factory lanmac)
> diff --git a/target/linux/ramips/base-files/etc/diag.sh b/target/linux/ramips/base-files/etc/diag.sh
> index 960e189283..7b267a6854 100644
> --- a/target/linux/ramips/base-files/etc/diag.sh
> +++ b/target/linux/ramips/base-files/etc/diag.sh
> @@ -296,6 +296,9 @@ get_status_led() {
>   	zbt-wg3526-32M)
>   		status_led="zbt-wg3526:green:status"
>   		;;
> +	c108)
> +		status_len="$board:green:lan"
> +		;;

Please keep alphabetical order!

>   	esac
>   }
>   
> diff --git a/target/linux/ramips/base-files/lib/ramips.sh b/target/linux/ramips/base-files/lib/ramips.sh
> index fe66a87c2e..174e29e434 100755
> --- a/target/linux/ramips/base-files/lib/ramips.sh
> +++ b/target/linux/ramips/base-files/lib/ramips.sh
> @@ -85,6 +85,9 @@ ramips_board_detect() {
>   	*"Broadway")
>   		name="broadway"
>   		;;
> +	*"C108")
> +		name="c108"
> +		;;
>   	*"C20i")
>   		name="c20i"
>   		;;
> diff --git a/target/linux/ramips/base-files/lib/upgrade/platform.sh b/target/linux/ramips/base-files/lib/upgrade/platform.sh
> index 3cb1d19a28..5cfca52ab1 100755
> --- a/target/linux/ramips/base-files/lib/upgrade/platform.sh
> +++ b/target/linux/ramips/base-files/lib/upgrade/platform.sh
> @@ -29,6 +29,7 @@ platform_check_image() {
>   	awm002-evb-8M|\
>   	bc2|\
>   	broadway|\
> +	c108|\
>   	carambola|\
>   	cf-wr800n|\
>   	cs-qr10|\
> diff --git a/target/linux/ramips/dts/C108.dts b/target/linux/ramips/dts/C108.dts
> new file mode 100644
> index 0000000000..c8f57ed949
> --- /dev/null
> +++ b/target/linux/ramips/dts/C108.dts
> @@ -0,0 +1,182 @@
> +/*
> + *  BSD LICENSE
> + *
> + *  Copyright(c) 2017 Kristian Evensen <kristian.evensen at gmail.com>.
> + *  All rights reserved.
> + *
> + *  Redistribution and use in source and binary forms, with or without
> + *  modification, are permitted provided that the following conditions
> + *  are met:
> + *
> + *    * Redistributions of source code must retain the above copyright
> + *      notice, this list of conditions and the following disclaimer.
> + *    * Redistributions in binary form must reproduce the above copyright
> + *      notice, this list of conditions and the following disclaimer in
> + *      the documentation and/or other materials provided with the
> + *      distribution.
> + *    * Neither the name of Broadcom Corporation nor the names of its
> + *      contributors may be used to endorse or promote products derived
> + *      from this software without specific prior written permission.
> + *
> + *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
> + *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
> + *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
> + *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
> + *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
> + *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
> + *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
> + *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
> + *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
> + *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
> + *  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
> + */
> +
> +/dts-v1/;
> +
> +#include "mt7620a.dtsi"
> +
> +#include <dt-bindings/gpio/gpio.h>
> +#include <dt-bindings/input/input.h>
> +
> +/ {
> +	compatible = "hnet,c108", "ralink,mt7620a-soc";
> +	model = "HNET C108";
> +
> +	chosen {
> +		bootargs = "console=ttyS0,115200";
> +	};
> +
> +	gpio-export {
> +		compatible = "gpio-export";
> +		#size-cells = <0>;
> +
> +		power_modem {
> +			gpio-export,name = "power_modem";
> +			gpio-export,output = <GPIO_ACTIVE_LOW>;

You set the output value to 1 here. Please use gpio-export,output = 1.

> +			gpios = <&gpio2 2 GPIO_ACTIVE_HIGH>;
> +		};
> +	};
> +
> +	gpio-leds {
> +		compatible = "gpio-leds";
> +
> +		sdcard {
> +			label = "c108:green:sdcard";
> +			gpios = <&gpio0 13 GPIO_ACTIVE_HIGH>;
> +		};
> +
> +		modem_green {
> +			label = "c108:green:modem";
> +			gpios = <&gpio1 14 GPIO_ACTIVE_LOW>;
> +		};
> +
> +		modem_red {
> +			label = "c108:red:modem";
> +			gpios = <&gpio1 15 GPIO_ACTIVE_LOW>;
> +		};
> +
> +		lan_red {
> +			label = "c108:red:lan";
> +			gpios = <&gpio2 3 GPIO_ACTIVE_HIGH>;
> +		};
> +
> +		lan_green {
> +			label = "c108:green:lan";
> +			gpios = <&gpio2 4 GPIO_ACTIVE_HIGH>;
> +		};
> +	};
> +
> +	gpio-keys-polled {
> +		compatible = "gpio-keys-polled";
> +		#address-cells = <1>;
> +		#size-cells = <0>;
> +		poll-interval = <20>;
> +
> +		reset {
> +			label = "reset";
> +			gpios = <&gpio0 1 GPIO_ACTIVE_LOW>;
> +			linux,code = <KEY_RESTART>;
> +		};
> +	};
> +};
> +
> +&gpio1 {
> +	status = "okay";
> +};
> +
> +&gpio2 {
> +	status = "okay";
> +};
> +
> +&gpio3 {
> +	status = "okay";
> +};

gpio3 is enabled but not used. either use the only available GPIO on 
this gpio bank or drop it.

> +
> +&spi0 {
> +	status = "okay";
> +
> +	en25q128 at 0 {
> +		#address-cells = <1>;
> +		#size-cells = <1>;
> +		compatible = "jedec,spi-nor";
> +		reg = <0>;
> +		spi-max-frequency = <10000000>;
> +
> +		partition at 0 {
> +			label = "u-boot";
> +			reg = <0x0 0x30000>;
> +			read-only;
> +		};
> +
> +		partition at 30000 {
> +			label = "u-boot-env";
> +			reg = <0x30000 0x10000>;
> +			read-only;
> +		};
> +
> +		factory: partition at 40000 {
> +			label = "factory";
> +			reg = <0x40000 0x10000>;
> +			read-only;
> +		};
> +
> +		partition at 50000 {
> +			label = "firmware";
> +			reg = <0x50000 0xfb0000>;
> +		};
> +	};
> +};
> +
> +&sdhci {
> +	status = "okay";
> +};
> +
> +&ehci {
> +	status = "okay";
> +};
> +
> +&ohci {
> +	status = "okay";
> +};
> +
> +&ethernet {
> +	mtd-mac-address = <&factory 0x4>;
> +	mediatek,portmap = "l";

Beside that fact that I'm not sure if the property is supported by the 
driver, it looks wrong. The mediatek,portmap property can be only 
"llllw" or "wllll".

> +};
> +
> +&wmac {
> +	ralink,mtd-eeprom = <&factory 0>;
> +};
> +
> +&pinctrl {
> +	state_default: pinctrl0 {
> +		default {
> +			ralink,group = "i2c", "uartf", "spi refclk", "ephy";
> +			ralink,function = "gpio";
> +		};
> +	};
> +};
> +
> +&pcie {
> +	status = "okay";
> +};
> diff --git a/target/linux/ramips/image/mt7620.mk b/target/linux/ramips/image/mt7620.mk
> index f9a9fdb84c..0061a018b9 100644
> --- a/target/linux/ramips/image/mt7620.mk
> +++ b/target/linux/ramips/image/mt7620.mk
> @@ -62,6 +62,14 @@ define Device/ArcherMR200
>   endef
>   TARGET_DEVICES += ArcherMR200
>   
> +define Device/c108
> +  DTS := C108
> +  IMAGE_SIZE := $(ralink_default_fw_size_16M)

Doesn't match the size of your firmware partition.

ralink_default_fw_size_16M == 16121856 == 0xF60000

> +  DEVICE_TITLE := HNET C108
> +  DEVICE_PACKAGES := kmod-usb2 kmod-usb-ohci kmod-sdhci-mt7620
> +endef
> +TARGET_DEVICES += c108
> +
>   define Device/cf-wr800n
>     DTS := CF-WR800N
>     DEVICE_TITLE := Comfast CF-WR800N
> 




More information about the Lede-dev mailing list