[OpenWrt-Devel] [RFC] ar71xx: add Arduino Yun

John Crispin blogic at openwrt.org
Tue Nov 3 02:59:38 EST 2015


Hi,

On 01/11/2015 15:15, Hauke Mehrtens wrote:
> This is based on patches from Federico Fissore <f.fissore at arduino.cc>
> especially this one:
> https://github.com/arduino/openwrt-yun/commit/7e2976fa83fb0d72a955574499178c387a1b3c92
> 
> The console is running with 250000 baud which is a non standard baud
> rate and needs an extra patch to be applied, I will try to get this
> patch upstream or something else which accomplish the same.

that patch and the gpio one need to commited separatley with a proper
description. i would also remove the Lininio from the patches name.

> 
> Some upstream code looks like there are many different versions of this
> SoC, are these only internal versions and all versions on the consumer
> market are the same? I saw different GPIO configuration and flash sizes
> of 8MB and 16MB?

hehe and a shield adapter that does not work with normal 2,54mil

> Should I name it Arduino Yun or Genuino Yun or Linino Yun? My device
> has Arduino Yun printed on it so I would prefer that.

arduino i guess

	John

> 
> Signed-off-by: Hauke Mehrtens <hauke at hauke-m.de>
> CC: Federico Fissore <f.fissore at arduino.cc>
> ---
>  .../ar71xx/base-files/etc/uci-defaults/01_leds     |   5 +
>  .../ar71xx/base-files/etc/uci-defaults/02_network  |   1 +
>  target/linux/ar71xx/base-files/lib/ar71xx.sh       |   3 +
>  .../ar71xx/base-files/lib/upgrade/platform.sh      |   1 +
>  target/linux/ar71xx/config-4.1                     |   5 +-
>  .../files/arch/mips/ath79/mach-arduino-yun.c       | 137 +++++++++++++++++++++
>  target/linux/ar71xx/generic/profiles/linino.mk     |  18 +++
>  target/linux/ar71xx/image/Makefile                 |   5 +
>  .../700-MIPS-ath79-openwrt-machines.patch          |   2 +-
>  .../817-MIPS-ath79-Linino-gpio-support.patch       |  68 ++++++++++
>  .../818-MIPS-ath79-Linino-uart-fix-baudrate.patch  |  57 +++++++++
>  .../819-MIPS-ath79-Linino-support.patch            |  42 +++++++
>  12 files changed, 342 insertions(+), 2 deletions(-)
>  create mode 100644 target/linux/ar71xx/files/arch/mips/ath79/mach-arduino-yun.c
>  create mode 100644 target/linux/ar71xx/generic/profiles/linino.mk
>  create mode 100644 target/linux/ar71xx/patches-4.1/817-MIPS-ath79-Linino-gpio-support.patch
>  create mode 100644 target/linux/ar71xx/patches-4.1/818-MIPS-ath79-Linino-uart-fix-baudrate.patch
>  create mode 100644 target/linux/ar71xx/patches-4.1/819-MIPS-ath79-Linino-support.patch
> 
> diff --git a/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds b/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds
> index abed456..8c1a0bc 100644
> --- a/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds
> +++ b/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds
> @@ -43,6 +43,11 @@ antminer-s3)
>  	ucidef_set_led_default "lan" "LAN" "antminer-s3:yellow:lan" "0"
>  	;;
>  
> +arduino-yun)
> +	ucidef_set_led_wlan "wlan" "WLAN" "arduino:blue:wlan" "phy0tpt"
> +	ucidef_set_led_usbdev "usb" "USB" "arduino:white:usb" "1-1.1"
> +	;;
> +
>  ap113)
>  	ucidef_set_led_usbdev "usb" "USB" "ap113:green:usb" "1-1"
>  	;;
> diff --git a/target/linux/ar71xx/base-files/etc/uci-defaults/02_network b/target/linux/ar71xx/base-files/etc/uci-defaults/02_network
> index f6ac891..c729594 100644
> --- a/target/linux/ar71xx/base-files/etc/uci-defaults/02_network
> +++ b/target/linux/ar71xx/base-files/etc/uci-defaults/02_network
> @@ -386,6 +386,7 @@ wp543)
>  	ucidef_set_interface_lan "eth0"
>  	;;
>  
> +arduino-yun | \
>  dir-505-a1)
>  	ucidef_set_interface_lan "eth1"
>  	;;
> diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh
> index 5f02e4e..5a0c322 100755
> --- a/target/linux/ar71xx/base-files/lib/ar71xx.sh
> +++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh
> @@ -359,6 +359,9 @@ ar71xx_board_detect() {
>  	*Antminer-S3)
>  		name="antminer-s3"
>  		;;
> +	*"Arduino Yun")
> +		name="arduino-yun"
> +		;;
>  	*AP113)
>  		name="ap113"
>  		;;
> diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
> index a464fee..987e4cf 100755
> --- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
> +++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
> @@ -173,6 +173,7 @@ platform_check_image() {
>  		;;
>  	alfa-ap96 | \
>  	alfa-nx | \
> +	arduino-yun | \
>  	ap113 | \
>  	ap121 | \
>  	ap121-mini | \
> diff --git a/target/linux/ar71xx/config-4.1 b/target/linux/ar71xx/config-4.1
> index 6d31f67..30f22e6 100644
> --- a/target/linux/ar71xx/config-4.1
> +++ b/target/linux/ar71xx/config-4.1
> @@ -46,6 +46,7 @@ CONFIG_ATH79_MACH_AP81=y
>  CONFIG_ATH79_MACH_AP83=y
>  CONFIG_ATH79_MACH_AP96=y
>  CONFIG_ATH79_MACH_ARCHER_C7=y
> +CONFIG_ATH79_MACH_ARDUINO_YUN=y
>  CONFIG_ATH79_MACH_AW_NR580=y
>  CONFIG_ATH79_MACH_BHU_BXU2000N2_A=y
>  CONFIG_ATH79_MACH_BSB=y
> @@ -192,6 +193,8 @@ CONFIG_CPU_R4K_FPU=y
>  CONFIG_CPU_SUPPORTS_32BIT_KERNEL=y
>  CONFIG_CPU_SUPPORTS_HIGHMEM=y
>  CONFIG_CPU_SUPPORTS_MSA=y
> +CONFIG_CRYPTO_RNG2=y
> +CONFIG_CRYPTO_WORKQUEUE=y
>  CONFIG_CSRC_R4K=y
>  CONFIG_DMA_NONCOHERENT=y
>  CONFIG_EARLY_PRINTK=y
> @@ -333,7 +336,7 @@ CONFIG_SOC_AR933X=y
>  CONFIG_SOC_AR934X=y
>  CONFIG_SOC_QCA953X=y
>  CONFIG_SOC_QCA955X=y
> -# CONFIG_SOC_QCA956X is not set
> +CONFIG_SOC_QCA956X=y
>  CONFIG_SPI=y
>  CONFIG_SPI_AP83=y
>  CONFIG_SPI_ATH79=y
> diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-arduino-yun.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-arduino-yun.c
> new file mode 100644
> index 0000000..fbe1f99
> --- /dev/null
> +++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-arduino-yun.c
> @@ -0,0 +1,137 @@
> +/*
> + *  Arduino Yun support
> + *
> + *  Copyright (C) 2011-2012 Gabor Juhos <juhosg at openwrt.org>
> + *  Copyright (C) 2015 Hauke Mehrtens <hauke at hauke-m.de>
> + *
> + *  This program is free software; you can redistribute it and/or modify it
> + *  under the terms of the GNU General Public License version 2 as published
> + *  by the Free Software Foundation.
> + */
> +
> +#include "dev-eth.h"
> +#include "dev-gpio-buttons.h"
> +#include "dev-leds-gpio.h"
> +#include "dev-m25p80.h"
> +#include "dev-spi.h"
> +#include "dev-usb.h"
> +#include "dev-wmac.h"
> +#include "machtypes.h"
> +#include <asm/mach-ath79/ar71xx_regs.h>
> +#include <asm/mach-ath79/ath79.h>
> +#include "common.h"
> +#include "gpio.h"
> +#include "linux/gpio.h"
> +
> +// Uncomment to have reset on gpio18 instead of gipo7
> +#define DS2_B
> +
> +#define DS_GPIO_LED_WLAN		0
> +#define DS_GPIO_LED_USB			1
> +
> +#define DS_GPIO_OE			21
> +#define DS_GPIO_AVR_RESET		18
> +
> +// Maintained to have the console in the previous version of DS2 working
> +#define DS_GPIO_AVR_RESET_DS2		7
> +
> +#define DS_GPIO_OE2			22
> +#define DS_GPIO_UART_ENA		23
> +#define DS_GPIO_CONF_BTN		20
> +
> +#define DS_KEYS_POLL_INTERVAL		20	/* msecs */
> +#define DS_KEYS_DEBOUNCE_INTERVAL	(3 * DS_KEYS_POLL_INTERVAL)
> +
> +#define DS_MAC0_OFFSET			0x0000
> +#define DS_MAC1_OFFSET			0x0006
> +#define DS_CALDATA_OFFSET		0x1000
> +#define DS_WMAC_MAC_OFFSET		0x1002
> +
> +
> +static struct gpio_led ds_leds_gpio[] __initdata = {
> +	{
> +		.name		= "arduino:white:usb",
> +		.gpio		= DS_GPIO_LED_USB,
> +		.active_low	= 0,
> +	},
> +	{
> +		.name		= "arduino:blue:wlan",
> +		.gpio		= DS_GPIO_LED_WLAN,
> +		.active_low	= 0,
> +	},
> +};
> +
> +static void __init ds_common_setup(void)
> +{
> +	static u8 mac[6];
> +
> +	u8 *art = (u8 *) KSEG1ADDR(0x1fff0000);
> +	ath79_register_m25p80(NULL);
> +
> +	if (ar93xx_wmac_read_mac_address(mac)) {
> +		ath79_register_wmac(NULL, NULL);
> +	} else {
> +		ath79_register_wmac(art + DS_CALDATA_OFFSET,
> +				    art + DS_WMAC_MAC_OFFSET);
> +		memcpy(mac, art + DS_WMAC_MAC_OFFSET, sizeof(mac));
> +	}
> +
> +	mac[3] |= 0x08;
> +	ath79_init_mac(ath79_eth0_data.mac_addr, mac, 0);
> +
> +	mac[3] &= 0xF7;
> +	ath79_init_mac(ath79_eth1_data.mac_addr, mac, 0);
> +	ath79_register_mdio(0, 0x0);
> +
> +	/* LAN ports */
> +	ath79_register_eth(1);
> +
> +	/* WAN port */
> +	ath79_register_eth(0);
> +}
> +
> +static void __init ds_setup(void)
> +{
> +	u32 t;
> +
> +	ds_common_setup();
> +
> +	ath79_register_leds_gpio(-1, ARRAY_SIZE(ds_leds_gpio),
> +				 ds_leds_gpio);
> +	ath79_register_usb();
> +
> +	//Disable the Function for some pins to have GPIO functionality active
> +	// GPIO6-7-8 and GPIO11
> +	ath79_gpio_function_setup(AR933X_GPIO_FUNC_JTAG_DISABLE | AR933X_GPIO_FUNC_I2S_MCK_EN, 0);
> +
> +	ath79_gpio_function2_setup(AR933X_GPIO_FUNC2_JUMPSTART_DISABLE, 0);
> +
> +	printk("Setting DogStick2 GPIO\n");
> +
> +	t = ath79_reset_rr(AR933X_RESET_REG_BOOTSTRAP);
> +	t |= AR933X_BOOTSTRAP_MDIO_GPIO_EN;
> +	ath79_reset_wr(AR933X_RESET_REG_BOOTSTRAP, t);
> +
> +	// Put the avr reset to high 
> +	if (gpio_request_one(DS_GPIO_AVR_RESET_DS2,
> +	    GPIOF_OUT_INIT_LOW | GPIOF_EXPORT_DIR_FIXED, "OE-1") != 0)
> +		printk("Error setting GPIO OE\n");
> +	gpio_unexport(DS_GPIO_AVR_RESET_DS2);
> +	gpio_free(DS_GPIO_AVR_RESET_DS2);
> +
> +	// enable OE of level shifter
> +	if (gpio_request_one(DS_GPIO_OE,
> +	    GPIOF_OUT_INIT_LOW | GPIOF_EXPORT_DIR_FIXED, "OE-1") != 0)
> +		printk("Error setting GPIO OE\n");
> +
> +	if (gpio_request_one(DS_GPIO_UART_ENA,
> +	    GPIOF_OUT_INIT_LOW | GPIOF_EXPORT_DIR_FIXED, "UART-ENA") != 0)
> +		printk("Error setting GPIO Uart Enable\n");
> +
> +	// enable OE of level shifter
> +	if (gpio_request_one(DS_GPIO_OE2,
> +	    GPIOF_OUT_INIT_LOW | GPIOF_EXPORT_DIR_FIXED, "OE-2") != 0)
> +		printk("Error setting GPIO OE2\n");
> +}
> +
> +MIPS_MACHINE(ATH79_MACH_ARDUINO_YUN, "Yun", "Arduino Yun", ds_setup);
> diff --git a/target/linux/ar71xx/generic/profiles/linino.mk b/target/linux/ar71xx/generic/profiles/linino.mk
> new file mode 100644
> index 0000000..9a34759
> --- /dev/null
> +++ b/target/linux/ar71xx/generic/profiles/linino.mk
> @@ -0,0 +1,18 @@
> +#
> +# Copyright (C) 2009-2010 OpenWrt.org
> +#
> +# This is free software, licensed under the GNU General Public License v2.
> +# See /LICENSE for more information.
> +#
> +
> +define Profile/Yun
> +	NAME:=Arduino Yun based on Atheros AR9331
> +	PACKAGES:=kmod-usb-core kmod-usb2
> +endef
> +
> +define Profile/Yun/Description
> +	Package set optimized for the Arduino Yun.
> +endef
> +
> +$(eval $(call Profile,Yun))
> +
> diff --git a/target/linux/ar71xx/image/Makefile b/target/linux/ar71xx/image/Makefile
> index ddc0fc1..7e92a36 100644
> --- a/target/linux/ar71xx/image/Makefile
> +++ b/target/linux/ar71xx/image/Makefile
> @@ -1481,6 +1481,8 @@ mynet_n600_mtdlayout=mtdparts=spi0.0:256k(u-boot)ro,64k(u-boot-env)ro,64k(devdat
>  mynet_rext_mtdlayout=mtdparts=spi0.0:256k(u-boot)ro,7808k(firmware),64k(nvram)ro,64k(ART)ro
>  zyx_nbg6716_mtdlayout=mtdparts=spi0.0:256k(u-boot)ro,64k(env)ro,64k(RFdata)ro,-(nbu);ar934x-nfc:2048k(zyxel_rfsd),2048k(romd),1024k(header),2048k(kernel),-(ubi)
>  qihoo_c301_mtdlayout=mtdparts=spi0.0:256k(u-boot)ro,64k(u-boot-env),64k(devdata),64k(devconf),15744k(firmware),64k(warm_start),64k(action_image_config),64k(radiocfg)ro;spi0.1:15360k(upgrade2),1024k(privatedata)
> +yun_mtdlayout_8M=mtdparts=spi0.0:256k(u-boot)ro,64k(u-boot-env)ro,6464k(rootfs),1280k(kernel),64k(nvram),64k(art),7744k at 0x50000(firmware)
> +yun_mtdlayout_16M=mtdparts=spi0.0:256k(u-boot)ro,64k(u-boot-env)ro,14656k(rootfs),1280k(kernel),64k(nvram),64k(art),15936k at 0x50000(firmware)
>  
>  
>  define Image/BuildKernel
> @@ -2208,6 +2210,8 @@ $(eval $(call SingleProfile,AthLzma,64k,WLR8100,wlr8100,WLR8100,ttyS0,115200,$$(
>  $(eval $(call SingleProfile,AthLzma,64k,WPJ344_16M,wpj344-16M,WPJ344,ttyS0,115200,$$(wpj344_mtdlayout_16M),KRuImage,65536))
>  $(eval $(call SingleProfile,AthLzma,64k,WPJ531_16M,wpj531-16M,WPJ531,ttyS0,115200,$$(wpj531_mtdlayout_16M),KRuImage,65536))
>  $(eval $(call SingleProfile,AthLzma,64k,WPJ558_16M,wpj558-16M,WPJ558,ttyS0,115200,$$(wpj558_mtdlayout_16M),KRuImage,65536))
> +$(eval $(call SingleProfile,AthLzma,64k,YUN_8M,yun-8M,Yun,ttyATH0,250000,$$(yun_mtdlayout_8M),RKuImage))
> +$(eval $(call SingleProfile,AthLzma,64k,YUN_16M,yun-16M,Yun,ttyATH0,250000,$$(yun_mtdlayout_16M),RKuImage))
>  
>  $(eval $(call SingleProfile,Belkin,64k,F9K1115V2,f9k1115v2,F9K1115V2,ttyS0,115200,$$(f9k1115v2_mtdlayout),BR-6679BAC))
>  
> @@ -2334,6 +2338,7 @@ $(eval $(call MultiProfile,WPE72,WPE72_4M WPE72_8M WPE72_16M))
>  $(eval $(call MultiProfile,WPJ344,WPJ344_16M))
>  $(eval $(call MultiProfile,WPJ531,WPJ531_16M))
>  $(eval $(call MultiProfile,WPJ558,WPJ558_16M))
> +$(eval $(call MultiProfile,Yun,YUN_16M YUN_8M))
>  
>  $(eval $(call MultiProfile,Minimal,$(SINGLE_PROFILES)))
>  $(eval $(call MultiProfile,Madwifi,EAP7660D WP543))
> diff --git a/target/linux/ar71xx/patches-4.1/700-MIPS-ath79-openwrt-machines.patch b/target/linux/ar71xx/patches-4.1/700-MIPS-ath79-openwrt-machines.patch
> index 17cabe1..324da0c 100644
> --- a/target/linux/ar71xx/patches-4.1/700-MIPS-ath79-openwrt-machines.patch
> +++ b/target/linux/ar71xx/patches-4.1/700-MIPS-ath79-openwrt-machines.patch
> @@ -1721,7 +1721,7 @@
>  +obj-$(CONFIG_ATH79_MACH_NBG6716)	+= mach-nbg6716.o
>  --- a/arch/mips/ath79/prom.c
>  +++ b/arch/mips/ath79/prom.c
> -@@ -130,6 +130,13 @@ void __init prom_init(void)
> +@@ -136,6 +136,13 @@ void __init prom_init(void)
>   		initrd_end = initrd_start + fw_getenvl("initrd_size");
>   	}
>   #endif
> diff --git a/target/linux/ar71xx/patches-4.1/817-MIPS-ath79-Linino-gpio-support.patch b/target/linux/ar71xx/patches-4.1/817-MIPS-ath79-Linino-gpio-support.patch
> new file mode 100644
> index 0000000..2fe5e18
> --- /dev/null
> +++ b/target/linux/ar71xx/patches-4.1/817-MIPS-ath79-Linino-gpio-support.patch
> @@ -0,0 +1,68 @@
> +--- a/arch/mips/ath79/common.h
> ++++ b/arch/mips/ath79/common.h
> +@@ -27,6 +27,7 @@ void ath79_ddr_wb_flush(unsigned int reg
> + void ath79_gpio_function_enable(u32 mask);
> + void ath79_gpio_function_disable(u32 mask);
> + void ath79_gpio_function_setup(u32 set, u32 clear);
> ++void ath79_gpio_function2_setup(u32 set, u32 clear);
> + void ath79_gpio_output_select(unsigned gpio, u8 val);
> + int ath79_gpio_direction_select(unsigned gpio, bool oe);
> + void ath79_gpio_init(void);
> +--- a/arch/mips/ath79/gpio.c
> ++++ b/arch/mips/ath79/gpio.c
> +@@ -193,6 +193,36 @@ static void __iomem *ath79_gpio_get_func
> + 	return ath79_gpio_base + reg;
> + }
> + 
> ++static void __iomem *ath79_gpio_get_function2_reg(void)
> ++{
> ++	u32 reg = 0;
> ++
> ++	if (soc_is_ar71xx() ||
> ++	    soc_is_ar724x() ||
> ++	    soc_is_ar913x() ||
> ++	    soc_is_ar933x())
> ++		reg = AR71XX_GPIO_REG_FUNC_2;
> ++	else
> ++		BUG();
> ++
> ++	return ath79_gpio_base + reg;
> ++}
> ++
> ++
> ++void ath79_gpio_function2_setup(u32 set, u32 clear)
> ++{
> ++	void __iomem *reg = ath79_gpio_get_function2_reg();
> ++	unsigned long flags;
> ++
> ++	spin_lock_irqsave(&ath79_gpio_lock, flags);
> ++
> ++	__raw_writel((__raw_readl(reg) & ~clear) | set, reg);
> ++	/* flush write */
> ++	__raw_readl(reg);
> ++
> ++	spin_unlock_irqrestore(&ath79_gpio_lock, flags);
> ++}
> ++
> + void ath79_gpio_function_setup(u32 set, u32 clear)
> + {
> + 	void __iomem *reg = ath79_gpio_get_function_reg();
> +--- a/arch/mips/include/asm/mach-ath79/ar71xx_regs.h
> ++++ b/arch/mips/include/asm/mach-ath79/ar71xx_regs.h
> +@@ -840,6 +840,7 @@
> + #define AR71XX_GPIO_REG_INT_PENDING	0x20
> + #define AR71XX_GPIO_REG_INT_ENABLE	0x24
> + #define AR71XX_GPIO_REG_FUNC		0x28
> ++#define AR71XX_GPIO_REG_FUNC_2		0x30
> + 
> + #define AR934X_GPIO_REG_OUT_FUNC0	0x2c
> + #define AR934X_GPIO_REG_OUT_FUNC1	0x30
> +@@ -964,6 +965,8 @@
> + #define AR724X_GPIO_FUNC_UART_EN		BIT(1)
> + #define AR724X_GPIO_FUNC_JTAG_DISABLE		BIT(0)
> + 
> ++#define AR933X_GPIO_FUNC2_JUMPSTART_DISABLE 	BIT(9)
> ++
> + #define AR913X_GPIO_FUNC_WMAC_LED_EN		BIT(22)
> + #define AR913X_GPIO_FUNC_EXP_PORT_CS_EN		BIT(21)
> + #define AR913X_GPIO_FUNC_I2S_REFCLKEN		BIT(20)
> diff --git a/target/linux/ar71xx/patches-4.1/818-MIPS-ath79-Linino-uart-fix-baudrate.patch b/target/linux/ar71xx/patches-4.1/818-MIPS-ath79-Linino-uart-fix-baudrate.patch
> new file mode 100644
> index 0000000..c64bdb2
> --- /dev/null
> +++ b/target/linux/ar71xx/patches-4.1/818-MIPS-ath79-Linino-uart-fix-baudrate.patch
> @@ -0,0 +1,57 @@
> +--- a/drivers/tty/serial/serial_core.c
> ++++ b/drivers/tty/serial/serial_core.c
> +@@ -164,6 +164,8 @@ static int uart_port_startup(struct tty_
> + 	if (retval == 0) {
> + 		if (uart_console(uport) && uport->cons->cflag) {
> + 			tty->termios.c_cflag = uport->cons->cflag;
> ++			tty->termios.c_ospeed = uport->cons->baud;
> ++			tty->termios.c_ispeed = uport->cons->baud;
> + 			uport->cons->cflag = 0;
> + 		}
> + 		/*
> +@@ -1901,7 +1903,7 @@ static const struct baud_rates baud_rate
> + 	{   4800, B4800   },
> + 	{   2400, B2400   },
> + 	{   1200, B1200   },
> +-	{      0, B38400  }
> ++	{      0, BOTHER  }
> + };
> + 
> + /**
> +@@ -1940,10 +1942,13 @@ uart_set_options(struct uart_port *port,
> + 	 * Construct a cflag setting.
> + 	 */
> + 	for (i = 0; baud_rates[i].rate; i++)
> +-		if (baud_rates[i].rate <= baud)
> ++		if (baud_rates[i].rate == baud)
> + 			break;
> + 
> + 	termios.c_cflag |= baud_rates[i].cflag;
> ++	if (!baud_rates[i].rate) {
> ++		termios.c_ospeed = baud;
> ++	}
> + 
> + 	if (bits == 7)
> + 		termios.c_cflag |= CS7;
> +@@ -1973,8 +1978,10 @@ uart_set_options(struct uart_port *port,
> + 	 * Allow the setting of the UART parameters with a NULL console
> + 	 * too:
> + 	 */
> +-	if (co)
> ++	if (co) {
> + 		co->cflag = termios.c_cflag;
> ++		co->baud = baud;
> ++	}
> + 
> + 	return 0;
> + }
> +--- a/include/linux/console.h
> ++++ b/include/linux/console.h
> +@@ -127,6 +127,7 @@ struct console {
> + 	short	flags;
> + 	short	index;
> + 	int	cflag;
> ++	int	baud;
> + 	void	*data;
> + 	struct	 console *next;
> + };
> diff --git a/target/linux/ar71xx/patches-4.1/819-MIPS-ath79-Linino-support.patch b/target/linux/ar71xx/patches-4.1/819-MIPS-ath79-Linino-support.patch
> new file mode 100644
> index 0000000..7007310
> --- /dev/null
> +++ b/target/linux/ar71xx/patches-4.1/819-MIPS-ath79-Linino-support.patch
> @@ -0,0 +1,42 @@
> +--- a/arch/mips/ath79/Kconfig
> ++++ b/arch/mips/ath79/Kconfig
> +@@ -76,6 +76,19 @@ config ATH79_MACH_ANTMINER_S3
> + 	select ATH79_DEV_USB
> + 	select ATH79_DEV_WMAC
> + 
> ++config ATH79_MACH_ARDUINO_YUN
> ++	bool "Arduino Yun"
> ++	select SOC_AR933X
> ++	select ATH79_DEV_ETH
> ++	select ATH79_DEV_GPIO_BUTTONS
> ++	select ATH79_DEV_LEDS_GPIO
> ++	select ATH79_DEV_M25P80
> ++	select ATH79_DEV_USB
> ++	select ATH79_DEV_WMAC
> ++	help
> ++	  Say 'Y' here if you want your kernel to support the
> ++	  Arduino Yun.
> ++
> + config ATH79_MACH_AP113
> + 	bool "Atheros AP113 board support"
> + 	select SOC_AR724X
> +--- a/arch/mips/ath79/machtypes.h
> ++++ b/arch/mips/ath79/machtypes.h
> +@@ -23,6 +23,7 @@ enum ath79_mach_type {
> + 	ATH79_MACH_ALL0315N,		/* Allnet ALL0315N */
> + 	ATH79_MACH_ANTMINER_S1,	/* Antminer S1 */
> + 	ATH79_MACH_ANTMINER_S3,	/* Antminer S3 */
> ++	ATH79_MACH_ARDUINO_YUN,		/* Yun */
> + 	ATH79_MACH_AP113,		/* Atheros AP113 reference board */
> + 	ATH79_MACH_AP121,		/* Atheros AP121 reference board */
> + 	ATH79_MACH_AP121_MINI,		/* Atheros AP121-MINI reference board */
> +--- a/arch/mips/ath79/Makefile
> ++++ b/arch/mips/ath79/Makefile
> +@@ -44,6 +44,7 @@ obj-$(CONFIG_ATH79_MACH_ALL0258N)	+= mac
> + obj-$(CONFIG_ATH79_MACH_ALL0315N)	+= mach-all0315n.o
> + obj-$(CONFIG_ATH79_MACH_ANTMINER_S1)+= mach-antminer-s1.o
> + obj-$(CONFIG_ATH79_MACH_ANTMINER_S3)+= mach-antminer-s3.o
> ++obj-$(CONFIG_ATH79_MACH_ARDUINO_YUN)	+= mach-arduino-yun.o
> + obj-$(CONFIG_ATH79_MACH_AP113)		+= mach-ap113.o
> + obj-$(CONFIG_ATH79_MACH_AP121)		+= mach-ap121.o
> + obj-$(CONFIG_ATH79_MACH_AP132)		+= mach-ap132.o
> 
_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel



More information about the openwrt-devel mailing list