diff mbox series

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

Message ID 20170905194814.25116-1-kristian.evensen@gmail.com
State Superseded
Headers show
Series [LEDE-DEV] ramips: Add support for the HNET C108 | expand

Commit Message

Kristian Evensen Sept. 5, 2017, 7:48 p.m. UTC
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.
* Wifi LED. It is always switched on.

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@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

Comments

Mathias Kresin Sept. 6, 2017, 7:03 a.m. UTC | #1
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@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@eth0"
>   		;;
> +	c108|\
>   	cf-wr800n)
>   		ucidef_add_switch "switch0" \
>   			"4:lan" "6t@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@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@0 {
> +		#address-cells = <1>;
> +		#size-cells = <1>;
> +		compatible = "jedec,spi-nor";
> +		reg = <0>;
> +		spi-max-frequency = <10000000>;
> +
> +		partition@0 {
> +			label = "u-boot";
> +			reg = <0x0 0x30000>;
> +			read-only;
> +		};
> +
> +		partition@30000 {
> +			label = "u-boot-env";
> +			reg = <0x30000 0x10000>;
> +			read-only;
> +		};
> +
> +		factory: partition@40000 {
> +			label = "factory";
> +			reg = <0x40000 0x10000>;
> +			read-only;
> +		};
> +
> +		partition@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
>
Kristian Evensen Sept. 6, 2017, 7:26 a.m. UTC | #2
Hi,

Thanks for the feedback.

On Wed, Sep 6, 2017 at 9:03 AM, Mathias Kresin <dev@kresin.me> wrote:
>> 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?

Not detected and no error messages, so it seems to be completely dead.
I see the same with the default firmware. Will update comment. If you
have any hints or tips on how to enable it, then that would be great.

>
>> * 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).

No relation to the state. I tried to set the wled group + set gpio 72
to high/low, but it had no effect. Will update comment.

>> 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!

I was trying to figure out the lexicographical order in this file :)
The different cases seems to group together devices with different
names, so I thought it safest to place my entry at the end since I did
not find another device with same LED name. Any suggestions for a
different location (or LED name) are more than welcome.

I missed the typo ("status_len"), so I will fix that for a v3.

>> +               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.

Based on feedback I have got on earlier patches, it is preferred to
use the _LOW/_HIGH constants than 0/1 directly.

>> +&gpio3 {
>> +       status = "okay";
>> +};
>
>
> gpio3 is enabled but not used. either use the only available GPIO on this
> gpio bank or drop it.

Thanks, will remove it.

>> +&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".

Yes, that is correct, but I saw that for another device (MR200) a
non-supported portmap is used ("llll"). So I thought it was ok to add,
in case the portmap will in the future support more values (the driver
anyway ignores maps different than the two you mention). But I will
remove it for v3.

>> 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

Good catch, thanks. I based the dts on the dts of another 16MB mt7620
device. I will take a look at the bootlog of the default firmware and
correct firmware size.

Thanks again for all the feedback.

-Kristian
John Crispin Sept. 6, 2017, 7:46 a.m. UTC | #3
On 06/09/17 09:26, Kristian Evensen wrote:
> Hi,
>
> Thanks for the feedback.
>
> On Wed, Sep 6, 2017 at 9:03 AM, Mathias Kresin <dev@kresin.me> wrote:
>>> 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?
> Not detected and no error messages, so it seems to be completely dead.
> I see the same with the default firmware. Will update comment. If you
> have any hints or tips on how to enable it, then that would be great.

the mt7620 only has 1 usb port. if the minipcie usb works, then its 
wired there. maybe there is a gpio to switch between internal modem port 
and external port ?

     John

>>> * 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).
> No relation to the state. I tried to set the wled group + set gpio 72
> to high/low, but it had no effect. Will update comment.
>
>>> 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!
> I was trying to figure out the lexicographical order in this file :)
> The different cases seems to group together devices with different
> names, so I thought it safest to place my entry at the end since I did
> not find another device with same LED name. Any suggestions for a
> different location (or LED name) are more than welcome.
>
> I missed the typo ("status_len"), so I will fix that for a v3.
>
>>> +               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.
> Based on feedback I have got on earlier patches, it is preferred to
> use the _LOW/_HIGH constants than 0/1 directly.
>
>>> +&gpio3 {
>>> +       status = "okay";
>>> +};
>>
>> gpio3 is enabled but not used. either use the only available GPIO on this
>> gpio bank or drop it.
> Thanks, will remove it.
>
>>> +&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".
> Yes, that is correct, but I saw that for another device (MR200) a
> non-supported portmap is used ("llll"). So I thought it was ok to add,
> in case the portmap will in the future support more values (the driver
> anyway ignores maps different than the two you mention). But I will
> remove it for v3.
>
>>> 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
> Good catch, thanks. I based the dts on the dts of another 16MB mt7620
> device. I will take a look at the bootlog of the default firmware and
> correct firmware size.
>
> Thanks again for all the feedback.
>
> -Kristian
>
> _______________________________________________
> Lede-dev mailing list
> Lede-dev@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/lede-dev
Kristian Evensen Sept. 6, 2017, 7:49 a.m. UTC | #4
Hi,

On Wed, Sep 6, 2017 at 9:46 AM, John Crispin <john@phrozen.org> wrote:
> the mt7620 only has 1 usb port. if the minipcie usb works, then its wired
> there. maybe there is a gpio to switch between internal modem port and
> external port ?

Thanks for the help! I just spoke to the factory and it turns out that
port is meant for charging other devices, so data is not connected.

-Kristian
Mathias Kresin Sept. 6, 2017, 8:07 a.m. UTC | #5
06.09.2017 09:26, Kristian Evensen:
> On Wed, Sep 6, 2017 at 9:03 AM, Mathias Kresin <dev@kresin.me> wrote:
>>> * 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).
> 
> No relation to the state. I tried to set the wled group + set gpio 72
> to high/low, but it had no effect. Will update comment.

Might be that the LED is connected to VCC and not controllable at all. 
Strange hw design but who knows..

> 
>>> 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!
> 
> I was trying to figure out the lexicographical order in this file :)
> The different cases seems to group together devices with different
> names, so I thought it safest to place my entry at the end since I did
> not find another device with same LED name. Any suggestions for a
> different location (or LED name) are more than welcome.

Yeah, the file is out of alphabetical order again. Please add the c108 
to line 106, right before the block starting with cf-wr800n.

> 
> I missed the typo ("status_len"), so I will fix that for a v3.
> 
>>> +               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.
> 
> Based on feedback I have got on earlier patches, it is preferred to
> use the _LOW/_HIGH constants than 0/1 directly.

Most likely it was me who gave that advice. It was meant for the gpios 
device tree property. Here you are setting a value instead of describing 
active state. If there would be a macro, it should be something like 
GPIO_LOW or just LOW.

Mathias
Kristian Evensen Sept. 6, 2017, 8:21 a.m. UTC | #6
On Wed, Sep 6, 2017 at 10:07 AM, Mathias Kresin <dev@kresin.me> wrote:
> 06.09.2017 09:26, Kristian Evensen:
>>
>> On Wed, Sep 6, 2017 at 9:03 AM, Mathias Kresin <dev@kresin.me> wrote:
>>>>
>>>> * 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).
>>
>>
>> No relation to the state. I tried to set the wled group + set gpio 72
>> to high/low, but it had no effect. Will update comment.
>
>
> Might be that the LED is connected to VCC and not controllable at all.
> Strange hw design but who knows..
>
>>
>>>> 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!
>>
>>
>> I was trying to figure out the lexicographical order in this file :)
>> The different cases seems to group together devices with different
>> names, so I thought it safest to place my entry at the end since I did
>> not find another device with same LED name. Any suggestions for a
>> different location (or LED name) are more than welcome.
>
>
> Yeah, the file is out of alphabetical order again. Please add the c108 to
> line 106, right before the block starting with cf-wr800n.
>
>>
>> I missed the typo ("status_len"), so I will fix that for a v3.
>>
>>>> +               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.
>>
>>
>> Based on feedback I have got on earlier patches, it is preferred to
>> use the _LOW/_HIGH constants than 0/1 directly.
>
>
> Most likely it was me who gave that advice. It was meant for the gpios
> device tree property. Here you are setting a value instead of describing
> active state. If there would be a macro, it should be something like
> GPIO_LOW or just LOW.

Thanks for the comments. Preparing a v3 now, will send it after some
quick testing.

-Kristian
diff mbox series

Patch

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@eth0"
 		;;
+	c108|\
 	cf-wr800n)
 		ucidef_add_switch "switch0" \
 			"4:lan" "6t@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"
+		;;
 	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@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>;
+			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";
+};
+
+&spi0 {
+	status = "okay";
+
+	en25q128@0 {
+		#address-cells = <1>;
+		#size-cells = <1>;
+		compatible = "jedec,spi-nor";
+		reg = <0>;
+		spi-max-frequency = <10000000>;
+
+		partition@0 {
+			label = "u-boot";
+			reg = <0x0 0x30000>;
+			read-only;
+		};
+
+		partition@30000 {
+			label = "u-boot-env";
+			reg = <0x30000 0x10000>;
+			read-only;
+		};
+
+		factory: partition@40000 {
+			label = "factory";
+			reg = <0x40000 0x10000>;
+			read-only;
+		};
+
+		partition@50000 {
+			label = "firmware";
+			reg = <0x50000 0xfb0000>;
+		};
+	};
+};
+
+&sdhci {
+	status = "okay";
+};
+
+&ehci {
+	status = "okay";
+};
+
+&ohci {
+	status = "okay";
+};
+
+&ethernet {
+	mtd-mac-address = <&factory 0x4>;
+	mediatek,portmap = "l";
+};
+
+&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)
+  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