From 628d5fd71bd348f2c36c99d29ad2df372a4ae939 Mon Sep 17 00:00:00 2001 From: Andrii Pientsov Date: Wed, 13 Jan 2021 13:31:51 +0200 Subject: Create MACHINE MTRE --- conf/machine/mtre.conf | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 conf/machine/mtre.conf diff --git a/conf/machine/mtre.conf b/conf/machine/mtre.conf new file mode 100644 index 0000000..8e588f8 --- /dev/null +++ b/conf/machine/mtre.conf @@ -0,0 +1,44 @@ +#@TYPE: Machine +#@Name: Multi-Tech MTRE +#@DESCRIPTION: Machine configuration for the MTRE hardware + +require conf/machine/include/tune-arm926ejs.inc + +MACHINE_FEATURES = "ext2 ext3 usbhost usbgadget ppp" +PREFERRED_PROVIDER_virtual/kernel = "linux-at91" +PREFERRED_VERSION_linux = "4.9.%" + +MACHINE_ESSENTIAL_EXTRA_RDEPENDS = "kernel-module-vizzini" +PREFERRED_VERSION_kernel-module-vizzini ?= "1.1" + +DEFAULTTUNE = "arm926ejs" +TUNE_CCARGS = " -march=armv5te -marm -mthumb-interwork -mtune=arm926ej-s" +TUNE_FEATURES = "arm armv5 thumb dsp arm926ejs" +ARMPKGSFX_THUMB="t" + +# used by sysvinit_2 +SERIAL_CONSOLES = "115200;ttyS0" +#don't try to access tty1 +USE_VT = "0" + +UBOOT_MACHINE = "at91sam9x5ek_nandflash_config" +PREFERRED_VERSION_u-boot = "2016.09.01" + +AT91BOOTSTRAP_BOARD = "at91sam9x5eknf_uboot" +PREFERRED_VERSION_at91bootstrap = "3.8.12" + +KERNEL_IMAGETYPE = "uImage" +# remove kernel-image from rootfs by overriding kernel-base DEPS +RDEPENDS_kernel-base = "" + +EXTRA_IMAGEDEPENDS += "at91bootstrap u-boot" + +IMAGE_FSTYPES =+ "jffs2 tar.gz" +EXTRA_IMAGECMD_jffs2 = "--little-endian --eraseblock=0x20000 --pagesize=0x800 -n" + +UBOOT_ENTRYPOINT = "0x20008000" +UBOOT_LOADADDRESS = "0x20008000" + +PRINC ?= "0" + +PACKAGECONFIG_append_pn-boost = " python" -- cgit v1.2.3 From 8faf85b118a2b663073f72603a4807d2502cdeaa Mon Sep 17 00:00:00 2001 From: Andrii Pientsov Date: Wed, 13 Jan 2021 13:37:33 +0200 Subject: Add at91bootstrap for MTRE --- recipes-bsp/at91bootstrap/at91bootstrap.inc | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/recipes-bsp/at91bootstrap/at91bootstrap.inc b/recipes-bsp/at91bootstrap/at91bootstrap.inc index e887ffe..3682bca 100644 --- a/recipes-bsp/at91bootstrap/at91bootstrap.inc +++ b/recipes-bsp/at91bootstrap/at91bootstrap.inc @@ -29,6 +29,10 @@ SRC_URI_append_mtrv1 = " file://mtrv1-DDRlowDriveStrength.patch \ SRC_URI_append_mtr = " file://defconfig.mtr \ file://at91bootstrap-3.8-mtr.patch \ " +SRC_URI_append_mtre = " file://mtrv1-DDRlowDriveStrength.patch \ + file://defconfig.mtr \ + file://at91bootstrap-3.8-mtr.patch \ +" SRC_URI_append_mtcdt = " file://at91bootstrap-3.8-mtcdt.patch " SRC_URI_append_mtcap = " file://at91bootstrap-3.8-mtcdt.patch " @@ -76,7 +80,7 @@ do_configure() { # Copy defconfig to .config if .config does not exist. This allows # recipes to manage the .config themselves in do_configure_prepend() # and to override default settings with a custom file. - if [[ ${MACHINE} == mtr ]] || [[ ${MACHINE} == mtrv1 ]] ; then + if [[ ${MACHINE} == mtr ]] || [[ ${MACHINE} == mtrv1 ]] || [[ ${MACHINE} == mtre ]] ; then CTYPE=".mtr" fi -- cgit v1.2.3 From 452bce692c348270794e06b770834dc835da75cb Mon Sep 17 00:00:00 2001 From: Andrii Pientsov Date: Wed, 13 Jan 2021 13:42:22 +0200 Subject: Add u-boot for MTRE --- recipes-bsp/u-boot/u-boot-2016.09.01/mtre.patch | 259 ++++++++++++++++++++++++ recipes-bsp/u-boot/u-boot_2016.09.01.bb | 3 + 2 files changed, 262 insertions(+) create mode 100644 recipes-bsp/u-boot/u-boot-2016.09.01/mtre.patch diff --git a/recipes-bsp/u-boot/u-boot-2016.09.01/mtre.patch b/recipes-bsp/u-boot/u-boot-2016.09.01/mtre.patch new file mode 100644 index 0000000..887a6bc --- /dev/null +++ b/recipes-bsp/u-boot/u-boot-2016.09.01/mtre.patch @@ -0,0 +1,259 @@ +diff -raNu a/board/atmel/at91sam9x5ek/at91sam9x5ek.c b/board/atmel/at91sam9x5ek/at91sam9x5ek.c +--- a/board/atmel/at91sam9x5ek/at91sam9x5ek.c 2016-09-19 17:45:12.000000000 +0300 ++++ b/board/atmel/at91sam9x5ek/at91sam9x5ek.c 2021-01-12 17:40:47.185029658 +0200 +@@ -44,7 +44,8 @@ + csa = readl(&matrix->ebicsa); + csa |= AT91_MATRIX_EBI_CS3A_SMC_SMARTMEDIA; + /* NAND flash on D16 */ +- csa |= AT91_MATRIX_NFD0_ON_D16; ++ /* MTR: nand flash is set up by bootstrap, so leave it alone here */ ++ /* csa |= AT91_MATRIX_NFD0_ON_D16; */ + + /* Configure IO drive */ + csa &= ~AT91_MATRIX_EBI_EBI_IOSR_NORMAL; +@@ -256,6 +257,9 @@ + + int board_init(void) + { ++ /* Set Status LED High */ ++ /* at91_set_gpio_output(BOOT_STATUS_LED, 0); */ ++ + /* arch number of AT91SAM9X5EK-Board */ + gd->bd->bi_arch_number = MACH_TYPE_AT91SAM9X5EK; + +@@ -362,4 +366,61 @@ + /* DDRAM2 Controller initialize */ + ddr2_init(ATMEL_BASE_DDRSDRC, ATMEL_BASE_CS1, &ddr2); + } ++ + #endif ++ ++/* on-board EEPROM */ ++struct mts_id_eeprom_layout { ++ char vendor_id[32]; ++ char product_id[32]; ++ char device_id[32]; ++ char hw_version[32]; ++ uint8_t mac_addr[6]; ++ char imei[32]; ++ uint8_t capa[32]; ++ uint8_t mac_bluetooth[6]; ++ uint8_t mac_wifi[6]; ++ uint8_t reserved[302]; ++}; ++ ++int board_get_enetaddr(uchar *enetaddr) ++{ ++ struct mts_id_eeprom_layout eeprom_buffer = {0}; ++ ++ if (eeprom_read(CONFIG_SYS_I2C_EEPROM_ADDR, 0, &eeprom_buffer, sizeof(eeprom_buffer))) { ++ printf("EEPROM: read error\n"); ++ return 0; ++ } ++ ++ if (eeprom_buffer.vendor_id[0] == 0x00 || eeprom_buffer.vendor_id[0] == 0xFF) { ++ printf("EEPROM: uninitialized\n"); ++ return 0; ++ } ++ ++ printf("vendor-id: %s\n", eeprom_buffer.vendor_id); ++ printf("product-id: %s\n", eeprom_buffer.product_id); ++ printf("device-id: %s\n", eeprom_buffer.device_id); ++ printf("hw-version: %s\n", eeprom_buffer.hw_version); ++ printf("mac-addr: %02x:%02x:%02x:%02x:%02x:%02x\n", eeprom_buffer.mac_addr[0], ++ eeprom_buffer.mac_addr[1], ++ eeprom_buffer.mac_addr[2], ++ eeprom_buffer.mac_addr[3], ++ eeprom_buffer.mac_addr[4], ++ eeprom_buffer.mac_addr[5]); ++ ++ memcpy(enetaddr, eeprom_buffer.mac_addr, 6); ++ ++ return 1; ++} ++ ++int misc_init_r(void) ++{ ++ uchar enetaddr[6]; ++ ++ /* set MAC address from EEPROM if read successful */ ++ if (board_get_enetaddr(enetaddr)) { ++ eth_setenv_enetaddr("ethaddr", enetaddr); ++ } ++ ++ return 0; ++} +diff -raNu a/configs/at91sam9x5ek_nandflash_defconfig b/configs/at91sam9x5ek_nandflash_defconfig +--- a/configs/at91sam9x5ek_nandflash_defconfig 2021-01-09 18:01:02.000000000 +0200 ++++ b/configs/at91sam9x5ek_nandflash_defconfig 2021-01-09 18:24:57.023488603 +0200 +@@ -30,7 +30,6 @@ + CONFIG_CMD_NAND=y + CONFIG_CMD_BOOTZ=y + CONFIG_CMD_MII=y +-CONFIG_CMD_I2C=y + + # The config option CONFIG_SILENT_CONSOLE can be used to quiet messages + # on the console. If the option has been enabled, the output can be +diff -raNu a/include/configs/at91sam9x5ek.h b/include/configs/at91sam9x5ek.h +--- a/include/configs/at91sam9x5ek.h 2016-09-19 17:45:12.000000000 +0300 ++++ b/include/configs/at91sam9x5ek.h 2021-01-09 18:38:28.231749990 +0200 +@@ -9,8 +9,10 @@ + #ifndef __CONFIG_H__ + #define __CONFIG_H__ + ++#include + #include + ++#define USE_MTR + #define CONFIG_SYS_TEXT_BASE 0x26f00000 + + /* ARM asynchronous clock */ +@@ -26,6 +28,8 @@ + #define CONFIG_BOARD_EARLY_INIT_F + #define CONFIG_DISPLAY_CPUINFO + ++#define CONFIG_MISC_INIT_R /* enable platform-dependent misc_init_r() */ ++ + /* general purpose I/O */ + #define CONFIG_ATMEL_LEGACY /* required until (g)pio is fixed */ + #define CONFIG_AT91_GPIO +@@ -36,6 +40,8 @@ + #define CONFIG_USART_ID ATMEL_ID_SYS + + /* LCD */ ++/* MTR has no LCD */ ++#if !defined(MTR) + #define CONFIG_LCD + #define LCD_BPP LCD_COLOR16 + #define LCD_OUTPUT_BPP 24 +@@ -46,7 +52,13 @@ + #define CONFIG_ATMEL_HLCD + #define CONFIG_ATMEL_LCD_RGB565 + #define CONFIG_SYS_CONSOLE_IS_IN_ENV ++#endif /* !defined(MTR) */ ++ ++/* check for keypress even if bootdelay is 0 */ ++#define CONFIG_ZERO_BOOTDELAY_CHECK + ++/*STATUS LED*/ ++#define BOOT_STATUS_LED AT91_PIN_PC21 + + /* + * BOOTP options +@@ -59,10 +71,7 @@ + /* no NOR flash */ + #define CONFIG_SYS_NO_FLASH + +-/* +- * Command line configuration. +- */ +-#define CONFIG_CMD_NAND ++#define CONFIG_SYS_I2C + + /* + * define CONFIG_USB_EHCI to enable USB Hi-Speed (aka 2.0) +@@ -94,13 +103,30 @@ + /* our CLE is AD22 */ + #define CONFIG_SYS_NAND_MASK_CLE (1 << 22) + #define CONFIG_SYS_NAND_ENABLE_PIN AT91_PIN_PD4 +-#define CONFIG_SYS_NAND_READY_PIN AT91_PIN_PD5 ++/* MTR nand ready is PC31 */ ++#define CONFIG_SYS_NAND_READY_PIN AT91_PIN_PC31 + + /* PMECC & PMERRLOC */ + #define CONFIG_ATMEL_NAND_HWECC 1 + #define CONFIG_ATMEL_NAND_HW_PMECC 1 +-#define CONFIG_PMECC_CAP 2 ++ ++/* MTR: 4-bit PMECC */ ++#define CONFIG_PMECC_CAP 4 + #define CONFIG_PMECC_SECTOR_SIZE 512 ++/* ++ * CONFIG_PMECC_INDEX_TABLE_OFFSET has been replaced by: ++ * ATMEL_PMECC_INDEX_OFFSET_512 and ++ * ATMEL_PMECC_INDEX_OFFSET_1024 ++ * ++ * Which as used depends on: ++ * host->pmecc_sector_size == 512 ++ * ++ * 2012.10: ++ * #define CONFIG_PMECC_INDEX_TABLE_OFFSET 0x8000 ++ * 2016.03 (at91sam9x5.h): ++ * 182:#define ATMEL_PMECC_INDEX_OFFSET_512 0x8000 ++ */ ++ + + #define CONFIG_CMD_NAND_TRIMFFS + +@@ -147,6 +173,23 @@ + #endif + #endif + ++#define CONFIG_SYS_I2C_SOFT ++#define CONFIG_SOFT_I2C ++#define CONFIG_SOFT_I2C_GPIO_SCL AT91_PIN_PA31 ++#define CONFIG_SOFT_I2C_GPIO_SDA AT91_PIN_PA30 ++#define CONFIG_SYS_I2C_SOFT_SPEED 50000 ++#define CONFIG_SYS_I2C_SPEED CONFIG_SYS_I2C_SOFT_SPEED ++/* Values from previous levels of Conduit U-Boot */ ++#define CONFIG_SYS_I2C_SLAVE 0xfe ++#define I2C_RXTX_LEN 128 ++ ++/* I2C eeprom support */ ++#define CONFIG_CMD_EEPROM ++#define CONFIG_SYS_I2C_EEPROM_ADDR 0x56 /* at24c04 */ ++#define CONFIG_SYS_I2C_EEPROM_ADDR_LEN 1 /* Bytes of address<---><------>*/ ++#define CONFIG_SYS_EEPROM_PAGE_WRITE_BITS 3 ++ ++ + #define CONFIG_SYS_LOAD_ADDR 0x22000000 /* load address */ + + #define CONFIG_SYS_MEMTEST_START CONFIG_SYS_SDRAM_BASE +@@ -156,11 +199,11 @@ + /* bootstrap + u-boot + env + linux in nandflash */ + #define CONFIG_ENV_IS_IN_NAND + #define CONFIG_ENV_OFFSET 0xc0000 +-#define CONFIG_ENV_OFFSET_REDUND 0x100000 ++#define CONFIG_ENV_OFFSET_REDUND 0x160000 + #define CONFIG_ENV_SIZE 0x20000 /* 1 sector = 128 kB */ +-#define CONFIG_BOOTCOMMAND "nand read " \ +- "0x22000000 0x200000 0x300000; " \ +- "bootm 0x22000000" ++/* MTR: read from env variables for boot */ ++#define CONFIG_BOOTCOMMAND "nboot.jffs2 ${loadaddr} 0 ${kernel_addr}; bootm ${loadaddr}" ++ + #elif defined(CONFIG_SYS_USE_SPIFLASH) + /* bootstrap + u-boot + env + linux in spi flash */ + #define CONFIG_ENV_IS_IN_SPI_FLASH +@@ -197,6 +240,9 @@ + "8M(bootstrap/uboot/kernel)ro,-(rootfs) " \ + "root=/dev/mmcblk0p2 " \ + "rw rootfstype=ext4 rootwait" ++#elif defined(USE_MTR) ++/* MTR uses jffs2 */ ++#define CONFIG_BOOTARGS "mem=128M console=ttyS0,115200 root=/dev/mtdblock8 ro rootfstype=jffs2" + #else + #define CONFIG_BOOTARGS \ + "console=ttyS0,115200 earlyprintk " \ +@@ -274,4 +320,21 @@ + + #endif + ++/* MTR defaults */ ++#define CONFIG_ENV_OVERWRITE 1 /* Allow Overwrite of serial# & ethaddr */ ++#define CONFIG_ETHADDR 00:08:00:87:00:02 ++#define CONFIG_IPADDR 192.168.2.1 ++#define CONFIG_NETMASK 255.255.255.0 ++#define CONFIG_SERVERIP 192.168.2.2 ++#define CONFIG_HOSTNAME AT91SAM9G25 ++#define CONFIG_LOADADDR 0x22000000 ++ ++/* MTR - enable watchdog */ ++#define CONFIG_AT91SAM9_WATCHDOG 1 ++#define CONFIG_HW_WATCHDOG 1 ++#define CONFIG_AT91_HW_WDT_TIMEOUT 16 ++#define CONFIG_EXTRA_ENV_SETTINGS \ ++ "kernel_addr=0x200000\0" \ ++ "" ++ + #endif diff --git a/recipes-bsp/u-boot/u-boot_2016.09.01.bb b/recipes-bsp/u-boot/u-boot_2016.09.01.bb index 59b3c4c..3f4d2d5 100644 --- a/recipes-bsp/u-boot/u-boot_2016.09.01.bb +++ b/recipes-bsp/u-boot/u-boot_2016.09.01.bb @@ -27,6 +27,9 @@ SRC_URI_append_mtr = "\ SRC_URI_append_mtrv1 = "\ file://mtrv1.patch \ " +SRC_URI_append_mtre = "\ + file://mtre.patch \ +" SRC_URI[md5sum] = "61c628f8034477c946e173ed174efeb4" SRC_URI[sha256sum] = "95728e89dd476d17428f94080752ab48884be477b6a678941582aeef618b70bb" -- cgit v1.2.3 From eff5e93a3a0b893eef7918dc217b2b703c754684 Mon Sep 17 00:00:00 2001 From: Andrii Pientsov Date: Wed, 13 Jan 2021 14:07:25 +0200 Subject: Create a temporary device tree for MTRE based on MTRV1 --- recipes-kernel/linux/crypto.inc | 4 + recipes-kernel/linux/driver.inc | 2 + .../mtre/linux-4.9-mtre-device-tree.patch | 529 +++++++++++++++++++++ recipes-kernel/linux/linux-at91_4.9.87.bb | 8 +- recipes-kernel/linux/net.inc | 4 + 5 files changed, 546 insertions(+), 1 deletion(-) create mode 100644 recipes-kernel/linux/linux-at91-4.9.87/mtre/linux-4.9-mtre-device-tree.patch diff --git a/recipes-kernel/linux/crypto.inc b/recipes-kernel/linux/crypto.inc index a557ded..1d8e2ba 100644 --- a/recipes-kernel/linux/crypto.inc +++ b/recipes-kernel/linux/crypto.inc @@ -15,3 +15,7 @@ KERNEL_MODULE_AUTOLOAD_mtr += " \ KERNEL_MODULE_AUTOLOAD_mtcap += " \ sha512_generic \ " + +KERNEL_MODULE_AUTOLOAD_mtre += " \ + sha512_generic \ +" diff --git a/recipes-kernel/linux/driver.inc b/recipes-kernel/linux/driver.inc index 5e21ed6..82c4747 100644 --- a/recipes-kernel/linux/driver.inc +++ b/recipes-kernel/linux/driver.inc @@ -20,3 +20,5 @@ KERNEL_MODULE_AUTOLOAD_mtcap += "${DRIVER_LOAD_ALL_MACHINES}" KERNEL_MODULE_AUTOLOAD_mtrv1 += "${DRIVER_LOAD_ALL_MACHINES}" KERNEL_MODULE_AUTOLOAD_mtr += "${DRIVER_LOAD_ALL_MACHINES}" + +KERNEL_MODULE_AUTOLOAD_mtre += "${DRIVER_LOAD_ALL_MACHINES}" \ No newline at end of file diff --git a/recipes-kernel/linux/linux-at91-4.9.87/mtre/linux-4.9-mtre-device-tree.patch b/recipes-kernel/linux/linux-at91-4.9.87/mtre/linux-4.9-mtre-device-tree.patch new file mode 100644 index 0000000..9eb79b1 --- /dev/null +++ b/recipes-kernel/linux/linux-at91-4.9.87/mtre/linux-4.9-mtre-device-tree.patch @@ -0,0 +1,529 @@ +diff -Naru linux-4.9.87.orig/arch/arm/boot/dts/mtre.dts linux-4.9.87/arch/arm/boot/dts/mtre.dts +--- linux-4.9.87.orig/arch/arm/boot/dts/mtre.dts 1969-12-31 18:00:00.000000000 -0600 ++++ linux-4.9.87/arch/arm/boot/dts/mtre.dts 2019-05-07 19:03:19.378605555 -0500 +@@ -0,0 +1,278 @@ ++/* ++ * DTS file for Multi-Tech Systems MTRE Hardware ++ * ++ * Copyright (C) 2016 by Multi-Tech Systems, ++ * ++ * Licensed under GPLv2 or later. ++ */ ++ ++/dts-v1/; ++#include "at91sam9g25.dtsi" ++#include "at91sam9x5ek.dtsi" ++ ++/ { ++ model = "Multi-Tech Systems MTRE"; ++ compatible = "atmel,at91sam9g25ek", "atmel,at91sam9x5ek", "atmel,at91sam9x5", "atmel,at91sam9"; ++ aliases { ++ serial1 = &uart0; ++ }; ++ ++ chosen { ++ bootargs = "mem=128M console=ttyS0,115200 root=/dev/mtdblock8 ro rootfstype=jffs2"; ++ }; ++ ++ memory { ++ reg = <0x20000000 0x8000000>; ++ }; ++ ++ clocks { ++ #address-cells = <1>; ++ #size-cells = <1>; ++ ranges; ++ ++ main_clock: clock@0 { ++ compatible = "atmel,osc", "fixed-clock"; ++ clock-frequency = <12000000>; ++ }; ++ }; ++ ++ ahb { ++ apb { ++ /delete-node/ spi@f0004000; ++ macb0: ethernet@f802c000 { ++ phy-mode = "rmii"; ++ status = "okay"; ++ }; ++ ++ ++ pinctrl@fffff400 { ++ nand { ++ pinctrl_nand: nand-0 { ++ atmel,pins = ++ ; /* PD13 periph A Data bit 7 */ ++ }; ++ /delete-node/ nand_16bits-0; ++ }; ++ ++ /delete-node/ spi1; ++ /delete-node/ mmc0; ++ mts-io { ++ pinctrl_mts_io_out: mts_io-0 { ++ atmel,pins = ++ ; /* PD19 GNSS Int */ ++ output-high; ++ }; ++ pinctrl_mts_io_in: mts_io-1 { ++ atmel,pins = ++ ; /* PD20 WiFi_BT_LPMode Input */ ++ }; ++ pinctrl_mts_io_gnss: mts_io-2 { ++ atmel,pins = ++ ; /* PD20 WiFi_BT_LPMode Input */ ++ output-low; ++ }; ++ }; ++ /* ++ * Pin A23 will be left floating when the power goes off on the radio. ++ * We need to pull it down to ensure it is low during radio power-off. ++ * pinctrl is loaded during the call to platform_device_register() in mts-io. ++ * If we need to customize this for various hardware revisions, these can ++ * be loaded as overlays prior to loading the mts-io module, overwriting the ++ * atmel,pins section. ++ */ ++ mts_io { ++ pinctrl_mts_io: mts_io-0 { ++ atmel,pins = ++ ; /* PA23 GPIO pull-down radio-monitor */ ++ }; ++ }; ++ ++ 1wire_cm { ++ pinctrl_1wire_cm: 1wire_cm-0 { ++ atmel,pins = ; /* PB18 multidrive, conflicts with led */ ++ }; ++ }; ++ }; ++ ++ rtc@fffffeb0 { ++ status = "okay"; ++ }; ++ ++ dbgu: serial@fffff200 { ++ status = "okay"; ++ atmel,use-dma-rx; ++ atmel,use-dma-tx; ++ }; ++ ++ spi@f0000000 { ++ /delete-node/ m25p80@0; ++ }; ++ ++ /delete-node/ serial@f801c000; ++ /delete-node/ mmc@f0008000; ++ ++ uart0: serial@f8040000 { ++ status = "okay"; ++ atmel,use-dma-rx; ++ atmel,use-dma-tx; ++ dmas = <&dma0 1 AT91_DMA_CFG_PER_ID(11)>, ++ <&dma0 1 (AT91_DMA_CFG_PER_ID(12) | AT91_DMA_CFG_FIFOCFG_ASAP)>; ++ dma-names = "tx", "rx"; ++ }; ++ ++ usb2: gadget@f803c000 { ++ /delete-property/ atmel,vbus-gpio; /* mtrv1 has no vbus-gpio */ ++ status = "okay"; ++ }; ++ watchdog@fffffe40 { ++ status = "okay"; ++ }; ++ }; ++ ++ nand0: nand@40000000 { ++ nand-bus-width = <8>; ++ nand-ecc-mode = "hw"; ++ atmel,has-pmecc; /* Enable PMECC */ ++ atmel,pmecc-sector-size = <512>; ++ status = "okay"; ++ reg = < 0x40000000 0x10000000 ++ 0xffffe000 0x600 /* PMECC Registers */ ++ 0xffffe600 0x200 /* PMECC Error Location Registers */ ++ 0x00100000 0x100000 /* PMECC looup table in ROM code */ ++ >; ++ atmel,pmecc-lookup-table-offset = <0x8000 0x10000>; ++ gpios = < &pioC 31 GPIO_ACTIVE_HIGH ++ &pioD 4 GPIO_ACTIVE_HIGH ++ 0 ++ >; ++ atmel,pmecc-cap = <4>; ++ atmel,nand-has-dma; ++ ++ nand@0 { ++ label = "NANDFlash"; ++ reg = <0x0 0x10000000>; ++ }; ++ at91bootstrap@0 { ++ label = "at91bootstrap"; ++ reg = <0x0 0x40000>; ++ }; ++ uboot@40000 { ++ label = "u-Boot"; ++ reg = <0x40000 0x80000>; ++ }; ++ ubootconfig0@c0000 { ++ label = "u-Boot Config"; ++ reg = <0xc0000 0xa0000>; ++ }; ++ ubootconfig1@160000 { ++ label = "u-Boot Redundant Config"; ++ reg = <0x160000 0xa0000>; ++ }; ++ uImage@200000 { ++ label = "uImage"; ++ reg = <0x200000 0x600000>; ++ }; ++ config0@800000 { ++ label = "Config"; ++ reg = <0x800000 0x800000>; ++ }; ++ config1@1000000 { ++ label = "OEM Config"; ++ reg = <0x1000000 0x800000>; ++ }; ++ rootfs@1800000 { ++ label = "Rootfs"; ++ reg = <0x1800000 0x8000000>; ++ }; ++ user@9800000 { ++ label = "User data"; ++ reg = <0x9800000 0x6800000>; ++ }; ++ }; ++ ++ usb0: ohci@00600000 { ++ status = "okay"; ++ num-ports = <3>; ++ }; ++ ++ usb1: ehci@00700000 { ++ status = "okay"; ++ }; ++ }; ++ ++ leds { ++ compatible = "gpio-leds"; ++ ++ pc21 { ++ label = "led-status"; ++ gpios = <&pioC 21 GPIO_ACTIVE_LOW>; ++ linux,default-trigger = "default-on"; ++ }; ++ pc15 { ++ label = "led-b"; ++ gpios = <&pioC 15 GPIO_ACTIVE_LOW>; ++ }; ++ pc20 { ++ label = "led-c"; ++ gpios = <&pioC 20 GPIO_ACTIVE_LOW>; ++ }; ++ pc19 { ++ label = "led-d"; ++ gpios = <&pioC 19 GPIO_ACTIVE_LOW>; ++ }; ++ pc18 { ++ label = "led-e"; ++ gpios = <&pioC 18 GPIO_ACTIVE_LOW>; ++ }; ++ pc17 { ++ label = "led-f"; ++ gpios = <&pioC 17 GPIO_ACTIVE_LOW>; ++ }; ++ }; ++ ++ i2c-gpio-0 { ++ status = "okay"; ++ ++ id_eeprom@56 { ++ compatible = "atmel,24c04"; ++ reg = <0x56>; ++ pagesize = <16>; ++ status = "okay"; ++ }; ++ }; ++ ++ pps-0 { ++ compatible = "pps-gpio"; ++ gpios = <&pioB 18 0>; /* MTRV1-0.0 */ ++ capture-clear; ++ status = "okay"; ++ }; ++ ++ mts-io-0 { ++ status = "okay"; ++ compatible = "mts,mts-io"; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pinctrl_mts_io_out>; ++ pinctrl-1 = <&pinctrl_mts_io_in>; ++ pinctrl-2 = <&pinctrl_mts_io_gnss>; ++ }; ++}; +diff -Naru linux-4.9.87.orig/arch/arm/boot/dts/at91sam9x5cm.dtsi linux-4.9.87/arch/arm/boot/dts/at91sam9x5cm.dtsi +--- linux-4.9.87.orig/arch/arm/boot/dts/at91sam9x5cm.dtsi 2019-01-03 15:21:25.339570341 -0600 ++++ linux-4.9.87/arch/arm/boot/dts/at91sam9x5cm.dtsi 2019-01-03 15:17:51.911576659 -0600 +@@ -43,48 +43,8 @@ + atmel,has-pmecc; /* Enable PMECC */ + atmel,pmecc-cap = <2>; + atmel,pmecc-sector-size = <512>; +- nand-on-flash-bbt; ++ /* nand-on-flash-bbt; */ + status = "okay"; +- +- at91bootstrap@0 { +- label = "at91bootstrap"; +- reg = <0x0 0x40000>; +- }; +- +- uboot@40000 { +- label = "u-boot"; +- reg = <0x40000 0x80000>; +- }; +- +- ubootenv@c0000 { +- label = "U-Boot Env"; +- reg = <0xc0000 0x140000>; +- }; +- +- kernel@200000 { +- label = "kernel"; +- reg = <0x200000 0x600000>; +- }; +- +- rootfs@800000 { +- label = "rootfs"; +- reg = <0x800000 0x1f800000>; +- }; +- }; +- }; +- +- leds { +- compatible = "gpio-leds"; +- +- pb18 { +- label = "pb18"; +- gpios = <&pioB 18 GPIO_ACTIVE_LOW>; +- linux,default-trigger = "heartbeat"; +- }; +- +- pd21 { +- label = "pd21"; +- gpios = <&pioD 21 GPIO_ACTIVE_HIGH>; + }; + }; + +@@ -96,5 +56,4 @@ + pinctrl-0 = <&pinctrl_1wire_cm>; + status = "okay"; + }; +- + }; +diff -Naru linux-4.9.87.orig/arch/arm/boot/dts/at91sam9x5ek.dtsi linux-4.9.87/arch/arm/boot/dts/at91sam9x5ek.dtsi +--- linux-4.9.87.orig/arch/arm/boot/dts/at91sam9x5ek.dtsi 2018-03-27 11:05:05.000000000 -0500 ++++ linux-4.9.87/arch/arm/boot/dts/at91sam9x5ek.dtsi 2019-01-23 19:14:23.443999491 -0600 +@@ -25,23 +25,11 @@ + &pinctrl_mmc0_slot0_clk_cmd_dat0 + &pinctrl_mmc0_slot0_dat1_3>; + status = "okay"; ++ /* external micro SD slot */ + slot@0 { + reg = <0>; + bus-width = <4>; +- cd-gpios = <&pioD 15 GPIO_ACTIVE_HIGH>; +- }; +- }; +- +- mmc1: mmc@f000c000 { +- pinctrl-0 = < +- &pinctrl_board_mmc1 +- &pinctrl_mmc1_slot0_clk_cmd_dat0 +- &pinctrl_mmc1_slot0_dat1_3>; +- status = "okay"; +- slot@0 { +- reg = <0>; +- bus-width = <4>; +- cd-gpios = <&pioD 14 GPIO_ACTIVE_HIGH>; ++ cd-gpios = <&pioA 1 GPIO_ACTIVE_HIGH>; + }; + }; + +@@ -58,25 +46,12 @@ + usb2: gadget@f803c000 { + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_board_usb2>; +- atmel,vbus-gpio = <&pioB 16 GPIO_ACTIVE_HIGH>; +- status = "okay"; +- }; +- +- i2c0: i2c@f8010000 { +- status = "okay"; +- +- wm8731: wm8731@1a { +- compatible = "wm8731"; +- reg = <0x1a>; +- }; +- }; +- +- adc0: adc@f804c000 { +- atmel,adc-ts-wires = <4>; +- atmel,adc-ts-pressure-threshold = <10000>; ++ /* atmel,vbus-gpio = <&pioB 16 GPIO_ACTIVE_HIGH>; mtcdt: no vbus-gpio */ + status = "okay"; + }; + ++ /* A/D convertor is unusable on Conduit */ ++ + pinctrl@fffff400 { + camera_sensor { + pinctrl_pck0_as_isi_mck: pck0_as_isi_mck-0 { +@@ -118,7 +93,7 @@ + }; + + spi0: spi@f0000000 { +- status = "disabled"; /* conflict with mmc1 */ ++ status = "okay"; + cs-gpios = <&pioA 14 0>, <0>, <0>, <0>; + m25p80@0 { + compatible = "atmel,at25df321a"; +@@ -131,37 +106,20 @@ + status = "okay"; + }; + +- ssc0: ssc@f0010000 { +- status = "okay"; +- }; + }; + + usb0: ohci@00600000 { + status = "okay"; + num-ports = <3>; +- atmel,vbus-gpio = <0 /* &pioD 18 GPIO_ACTIVE_LOW *//* Activate to have access to port A */ +- &pioD 19 GPIO_ACTIVE_LOW +- &pioD 20 GPIO_ACTIVE_LOW +- >; ++ //mtcdt: no vbus-gpio ++ // atmel,vbus-gpio = <0 /* &pioD 18 GPIO_ACTIVE_LOW *//* Activate to have access to port A */ ++ // &pioD 19 GPIO_ACTIVE_LOW ++ // &pioD 20 GPIO_ACTIVE_LOW ++ // >; + }; + + usb1: ehci@00700000 { + status = "okay"; + }; + }; +- +- sound { +- compatible = "atmel,sam9x5-wm8731-audio"; +- +- atmel,model = "wm8731 @ AT91SAM9X5EK"; +- +- atmel,audio-routing = +- "Headphone Jack", "RHPOUT", +- "Headphone Jack", "LHPOUT", +- "LLINEIN", "Line In Jack", +- "RLINEIN", "Line In Jack"; +- +- atmel,ssc-controller = <&ssc0>; +- atmel,audio-codec = <&wm8731>; +- }; + }; +diff -Naru linux-4.9.87.orig/arch/arm/boot/dts/Makefile linux-4.9.87/arch/arm/boot/dts/Makefile +--- linux-4.9.87.orig/arch/arm/boot/dts/Makefile 2019-01-03 15:21:25.339570341 -0600 ++++ linux-4.9.87/arch/arm/boot/dts/Makefile 2019-01-03 15:17:51.911576659 -0600 +@@ -43,7 +43,8 @@ + at91sam9g25ek.dtb \ + at91sam9g35ek.dtb \ + at91sam9x25ek.dtb \ +- at91sam9x35ek.dtb ++ at91sam9x35ek.dtb \ ++ mtre.dtb + dtb-$(CONFIG_SOC_SAM_V7) += \ + at91-kizbox2.dtb \ + at91-sama5d2_ptc_ek.dtb \ +diff -Naru linux-4.9.87.orig/arch/arm/boot/dts/at91sam9x5.dtsi linux-4.9.87/arch/arm/boot/dts/at91sam9x5.dtsi +--- linux-4.9.87.orig/arch/arm/boot/dts/at91sam9x5.dtsi 2019-01-03 15:21:25.339570341 -0600 ++++ linux-4.9.87/arch/arm/boot/dts/at91sam9x5.dtsi 2019-01-03 15:17:51.911576659 -0600 +@@ -32,9 +32,6 @@ + gpio3 = &pioD; + tcb0 = &tcb0; + tcb1 = &tcb1; +- i2c0 = &i2c0; +- i2c1 = &i2c1; +- i2c2 = &i2c2; + ssc0 = &ssc0; + pwm0 = &pwm0; + }; +@@ -963,50 +960,7 @@ + status = "disabled"; + }; + +- i2c0: i2c@f8010000 { +- compatible = "atmel,at91sam9x5-i2c"; +- reg = <0xf8010000 0x100>; +- interrupts = <9 IRQ_TYPE_LEVEL_HIGH 6>; +- dmas = <&dma0 1 AT91_DMA_CFG_PER_ID(7)>, +- <&dma0 1 AT91_DMA_CFG_PER_ID(8)>; +- dma-names = "tx", "rx"; +- #address-cells = <1>; +- #size-cells = <0>; +- pinctrl-names = "default"; +- pinctrl-0 = <&pinctrl_i2c0>; +- clocks = <&twi0_clk>; +- status = "disabled"; +- }; +- +- i2c1: i2c@f8014000 { +- compatible = "atmel,at91sam9x5-i2c"; +- reg = <0xf8014000 0x100>; +- interrupts = <10 IRQ_TYPE_LEVEL_HIGH 6>; +- dmas = <&dma1 1 AT91_DMA_CFG_PER_ID(5)>, +- <&dma1 1 AT91_DMA_CFG_PER_ID(6)>; +- dma-names = "tx", "rx"; +- #address-cells = <1>; +- #size-cells = <0>; +- pinctrl-names = "default"; +- pinctrl-0 = <&pinctrl_i2c1>; +- clocks = <&twi1_clk>; +- status = "disabled"; +- }; +- +- i2c2: i2c@f8018000 { +- compatible = "atmel,at91sam9x5-i2c"; +- reg = <0xf8018000 0x100>; +- interrupts = <11 IRQ_TYPE_LEVEL_HIGH 6>; +- dmas = <&dma0 1 AT91_DMA_CFG_PER_ID(9)>, +- <&dma0 1 AT91_DMA_CFG_PER_ID(10)>; +- dma-names = "tx", "rx"; +- #address-cells = <1>; +- #size-cells = <0>; +- pinctrl-names = "default"; +- pinctrl-0 = <&pinctrl_i2c2>; +- clocks = <&twi2_clk>; +- status = "disabled"; +- }; ++ /* /delete_node/ command does not work. */ + + uart0: serial@f8040000 { + compatible = "atmel,at91sam9260-usart"; diff --git a/recipes-kernel/linux/linux-at91_4.9.87.bb b/recipes-kernel/linux/linux-at91_4.9.87.bb index 24f1812..b8d6502 100644 --- a/recipes-kernel/linux/linux-at91_4.9.87.bb +++ b/recipes-kernel/linux/linux-at91_4.9.87.bb @@ -71,6 +71,11 @@ SRC_URI_append_mtr = "\ file://fix-atmel-mci-reg-overloading.patch \ file://wl12xx_enable_disable.patch \ " +#TODO FIX DEVICE TREE for MTRE +SRC_URI_append_mtre = "\ + ${COMMON_PATCHES} \ + file://linux-4.9-mtre-device-tree.patch \ + " KERNEL_MODULE_AUTOLOAD_mtcap_append += "i2c-dev" KERNEL_MODULE_AUTOLOAD_mtcdt_append += "i2c-dev" @@ -78,6 +83,7 @@ DTB_APPEND_mtcdt = "mtcdt" DTB_APPEND_mtrv1 = "mtrv1" DTB_APPEND_mtcap = "mtcap" DTB_APPEND_mtr = "mtr" +DTB_APPEND_mtre = "mtre" python __anonymous () { if d.getVar('UBOOT_FIT_IMAGE', True) == 'xyes': @@ -116,7 +122,7 @@ kernel_do_configure_append() { KERNEL_MODULE_PACKAGE_SUFFIX="" -COMPATIBLE_MACHINE = "(mtcdt|mtrv1|mtr|mtcap|mths)" +COMPATIBLE_MACHINE = "(mtcdt|mtrv1|mtr|mtcap|mths|mtre)" pkg_preinst_kernel-image-uimage() { set -x diff --git a/recipes-kernel/linux/net.inc b/recipes-kernel/linux/net.inc index 5a78b44..655d172 100644 --- a/recipes-kernel/linux/net.inc +++ b/recipes-kernel/linux/net.inc @@ -105,4 +105,8 @@ KERNEL_MODULE_AUTOLOAD_mtr += " \ KERNEL_MODULE_AUTOLOAD_mtcap += " \ ${NET_LOAD_ALL_MACHINES} \ " +KERNEL_MODULE_AUTOLOAD_mtre += " \ + ${NET_LOAD_ALL_MACHINES} \ +" + -- cgit v1.2.3 From ead8f56356152afddc2bf072f8338099d4f88d12 Mon Sep 17 00:00:00 2001 From: Andrii Pientsov Date: Fri, 15 Jan 2021 11:28:46 +0200 Subject: Fix Device Tree for MTRE Hardware --- recipes-kernel/linux/linux-at91-4.9.87/defconfig | 4 +- .../mtre/linux-4.9-mtre-device-tree.patch | 64 +++++++++------------- recipes-kernel/linux/linux-at91_4.9.87.bb | 1 - 3 files changed, 28 insertions(+), 41 deletions(-) diff --git a/recipes-kernel/linux/linux-at91-4.9.87/defconfig b/recipes-kernel/linux/linux-at91-4.9.87/defconfig index 3c0173e..cb07395 100644 --- a/recipes-kernel/linux/linux-at91-4.9.87/defconfig +++ b/recipes-kernel/linux/linux-at91-4.9.87/defconfig @@ -3050,7 +3050,7 @@ CONFIG_LEDS_GPIO=y # CONFIG_LEDS_LP5562 is not set # CONFIG_LEDS_LP8501 is not set # CONFIG_LEDS_LP8860 is not set -# CONFIG_LEDS_PCA955X is not set +CONFIG_LEDS_PCA955X=m # CONFIG_LEDS_PCA963X is not set # CONFIG_LEDS_DAC124S085 is not set CONFIG_LEDS_PWM=y @@ -3115,7 +3115,7 @@ CONFIG_RTC_INTF_DEV=y # # CONFIG_RTC_DRV_ABB5ZES3 is not set # CONFIG_RTC_DRV_ABX80X is not set -# CONFIG_RTC_DRV_DS1307 is not set +CONFIG_RTC_DRV_DS1307=m # CONFIG_RTC_DRV_DS1374 is not set # CONFIG_RTC_DRV_DS1672 is not set # CONFIG_RTC_DRV_HYM8563 is not set diff --git a/recipes-kernel/linux/linux-at91-4.9.87/mtre/linux-4.9-mtre-device-tree.patch b/recipes-kernel/linux/linux-at91-4.9.87/mtre/linux-4.9-mtre-device-tree.patch index 9eb79b1..77f6caa 100644 --- a/recipes-kernel/linux/linux-at91-4.9.87/mtre/linux-4.9-mtre-device-tree.patch +++ b/recipes-kernel/linux/linux-at91-4.9.87/mtre/linux-4.9-mtre-device-tree.patch @@ -1,7 +1,7 @@ diff -Naru linux-4.9.87.orig/arch/arm/boot/dts/mtre.dts linux-4.9.87/arch/arm/boot/dts/mtre.dts --- linux-4.9.87.orig/arch/arm/boot/dts/mtre.dts 1969-12-31 18:00:00.000000000 -0600 +++ linux-4.9.87/arch/arm/boot/dts/mtre.dts 2019-05-07 19:03:19.378605555 -0500 -@@ -0,0 +1,278 @@ +@@ -0,0 +1,266 @@ +/* + * DTS file for Multi-Tech Systems MTRE Hardware + * @@ -118,7 +118,8 @@ diff -Naru linux-4.9.87.orig/arch/arm/boot/dts/mtre.dts linux-4.9.87/arch/arm/bo + }; + + rtc@fffffeb0 { -+ status = "okay"; ++ /* use mcp79410 rtc instead */ ++ status = "disabled"; + }; + + dbgu: serial@fffff200 { @@ -197,19 +198,19 @@ diff -Naru linux-4.9.87.orig/arch/arm/boot/dts/mtre.dts linux-4.9.87/arch/arm/bo + }; + config0@800000 { + label = "Config"; -+ reg = <0x800000 0x800000>; ++ reg = <0x800000 0x4000000>; + }; -+ config1@1000000 { ++ config1@4800000 { + label = "OEM Config"; -+ reg = <0x1000000 0x800000>; ++ reg = <0x4800000 0x800000>; + }; -+ rootfs@1800000 { ++ rootfs@5000000 { + label = "Rootfs"; -+ reg = <0x1800000 0x8000000>; ++ reg = <0x5000000 0x8000000>; + }; -+ user@9800000 { ++ user@D000000 { + label = "User data"; -+ reg = <0x9800000 0x6800000>; ++ reg = <0xD000000 0x3000000>; + }; + }; + @@ -223,35 +224,6 @@ diff -Naru linux-4.9.87.orig/arch/arm/boot/dts/mtre.dts linux-4.9.87/arch/arm/bo + }; + }; + -+ leds { -+ compatible = "gpio-leds"; -+ -+ pc21 { -+ label = "led-status"; -+ gpios = <&pioC 21 GPIO_ACTIVE_LOW>; -+ linux,default-trigger = "default-on"; -+ }; -+ pc15 { -+ label = "led-b"; -+ gpios = <&pioC 15 GPIO_ACTIVE_LOW>; -+ }; -+ pc20 { -+ label = "led-c"; -+ gpios = <&pioC 20 GPIO_ACTIVE_LOW>; -+ }; -+ pc19 { -+ label = "led-d"; -+ gpios = <&pioC 19 GPIO_ACTIVE_LOW>; -+ }; -+ pc18 { -+ label = "led-e"; -+ gpios = <&pioC 18 GPIO_ACTIVE_LOW>; -+ }; -+ pc17 { -+ label = "led-f"; -+ gpios = <&pioC 17 GPIO_ACTIVE_LOW>; -+ }; -+ }; + + i2c-gpio-0 { + status = "okay"; @@ -264,6 +236,22 @@ diff -Naru linux-4.9.87.orig/arch/arm/boot/dts/mtre.dts linux-4.9.87/arch/arm/bo + }; + }; + ++ i2c-gpio-1 { ++ status = "okay"; ++ ++ pca9552@60 { ++ /* 16-bit I2C LED blinker */ ++ compatible = "nxp,pca9552"; ++ reg = <0x66>; ++ }; ++ ++ mcp79410@6f { ++ /* Battery-backed I2C Real-Time Clock/Calendar */ ++ compatible = "microchip,mcp7941x"; ++ reg = <0x6f>; ++ }; ++ }; ++ + pps-0 { + compatible = "pps-gpio"; + gpios = <&pioB 18 0>; /* MTRV1-0.0 */ diff --git a/recipes-kernel/linux/linux-at91_4.9.87.bb b/recipes-kernel/linux/linux-at91_4.9.87.bb index b8d6502..7b0aebb 100644 --- a/recipes-kernel/linux/linux-at91_4.9.87.bb +++ b/recipes-kernel/linux/linux-at91_4.9.87.bb @@ -71,7 +71,6 @@ SRC_URI_append_mtr = "\ file://fix-atmel-mci-reg-overloading.patch \ file://wl12xx_enable_disable.patch \ " -#TODO FIX DEVICE TREE for MTRE SRC_URI_append_mtre = "\ ${COMMON_PATCHES} \ file://linux-4.9-mtre-device-tree.patch \ -- cgit v1.2.3 From 80ea39818fb8a55028d115720ead3ad6d241dc29 Mon Sep 17 00:00:00 2001 From: Andrii Pientsov Date: Fri, 15 Jan 2021 11:36:07 +0200 Subject: Add vizzini-1.1-ledrtig.patch for MTRE device. --- .../vizzini/vizzini-1.1/vizzini-1.1-ledrtig.patch | 117 +++++++++++++++++++++ recipes-kernel/vizzini/vizzini_1.1.bb | 2 + 2 files changed, 119 insertions(+) create mode 100644 recipes-kernel/vizzini/vizzini-1.1/vizzini-1.1-ledrtig.patch diff --git a/recipes-kernel/vizzini/vizzini-1.1/vizzini-1.1-ledrtig.patch b/recipes-kernel/vizzini/vizzini-1.1/vizzini-1.1-ledrtig.patch new file mode 100644 index 0000000..7d8e03a --- /dev/null +++ b/recipes-kernel/vizzini/vizzini-1.1/vizzini-1.1-ledrtig.patch @@ -0,0 +1,117 @@ +diff -ur orig/vizzini.c new/vizzini.c +--- orig/vizzini.c 2017-07-21 13:55:37.000000000 +0300 ++++ new/vizzini.c 2017-07-20 15:37:52.000000000 +0300 +@@ -54,6 +54,8 @@ + #include + #include + ++#include ++ + + #include "vizzini.h" + #include "vzioctl.h" +@@ -71,6 +73,38 @@ + static DEFINE_MUTEX(xr21v141x_table_lock); + + /* ++ * LED triggers ++ */ ++ ++static void xr21v141x_register_led_triggers(struct xr21v141x *xr21v141x) ++{ ++#ifdef CONFIG_LEDS_TRIGGERS ++ xr21v141x->led_trigger_rx_delay_on = 50; ++ xr21v141x->led_trigger_rx_delay_off = 1; ++ sprintf(xr21v141x->led_trigger_rx_name, "vizzini%d-rx", xr21v141x->minor); ++ led_trigger_register_simple(xr21v141x->led_trigger_rx_name, &xr21v141x->led_trigger_rx); ++ ++ xr21v141x->led_trigger_tx_delay_on = 50; ++ xr21v141x->led_trigger_tx_delay_off = 1; ++ sprintf(xr21v141x->led_trigger_tx_name, "vizzini%d-tx", xr21v141x->minor); ++ led_trigger_register_simple(xr21v141x->led_trigger_tx_name, &xr21v141x->led_trigger_tx); ++ ++ dev_info(&xr21v141x->control->dev, "%s and %s led triggers registered\n", ++ xr21v141x->led_trigger_rx_name, xr21v141x->led_trigger_tx_name); ++#endif ++} ++ ++static void xr21v141x_unregister_led_triggers(struct xr21v141x *xr21v141x) ++{ ++#ifdef CONFIG_LEDS_TRIGGERS ++ led_trigger_unregister_simple(xr21v141x->led_trigger_rx); ++ led_trigger_unregister_simple(xr21v141x->led_trigger_tx); ++ dev_info(&xr21v141x->control->dev, "led triggers unregistered\n"); ++#endif ++} ++ ++ ++/* + * Functions for ACM control messages. + */ + +@@ -330,6 +364,11 @@ + if (!urb->actual_length) + return; + ++#ifdef CONFIG_LEDS_TRIGGERS ++ led_trigger_blink_oneshot(xr21v141x->led_trigger_rx, ++ &xr21v141x->led_trigger_rx_delay_on, ++ &xr21v141x->led_trigger_rx_delay_off, 0); ++#endif + + tty_insert_flip_string(&xr21v141x->port, urb->transfer_buffer, urb->actual_length); + tty_flip_buffer_push(&xr21v141x->port); +@@ -653,6 +692,12 @@ + + spin_unlock_irqrestore(&xr21v141x->write_lock, flags); + ++#ifdef CONFIG_LEDS_TRIGGERS ++ led_trigger_blink_oneshot(xr21v141x->led_trigger_tx, ++ &xr21v141x->led_trigger_tx_delay_on, ++ &xr21v141x->led_trigger_tx_delay_off, 0); ++#endif ++ + + if (stat < 0) + return stat; +@@ -1723,6 +1768,9 @@ + } + #endif + ++ ++ xr21v141x_register_led_triggers(xr21v141x); ++ + return 0; + alloc_fail8: + if (xr21v141x->country_codes) { +@@ -1817,6 +1865,8 @@ + xr21v141x->data : xr21v141x->control); + + tty_port_put(&xr21v141x->port); ++ ++ xr21v141x_unregister_led_triggers(xr21v141x); + } + + #ifdef CONFIG_PM +diff -ur orig/vizzini.h new/vizzini.h +--- orig/vizzini.h 2017-07-21 13:55:37.000000000 +0300 ++++ new/vizzini.h 2017-07-20 15:36:57.000000000 +0300 +@@ -282,6 +282,18 @@ + #ifdef VIZZINI_IWA + int iwa; + #endif ++ ++#ifdef CONFIG_LEDS_TRIGGERS ++ char led_trigger_rx_name[32]; ++ unsigned long led_trigger_rx_delay_on; ++ unsigned long led_trigger_rx_delay_off; ++ struct led_trigger *led_trigger_rx; ++ char led_trigger_tx_name[32]; ++ unsigned long led_trigger_tx_delay_on; ++ unsigned long led_trigger_tx_delay_off; ++ struct led_trigger *led_trigger_tx; ++#endif ++ + struct serial_rs485 rs485; + }; + diff --git a/recipes-kernel/vizzini/vizzini_1.1.bb b/recipes-kernel/vizzini/vizzini_1.1.bb index 8dc75f2..d7c6e0e 100644 --- a/recipes-kernel/vizzini/vizzini_1.1.bb +++ b/recipes-kernel/vizzini/vizzini_1.1.bb @@ -6,5 +6,7 @@ SRC_URI += "file://xr21v141x-lnx3.10-3.11.tar.gz \ file://vizzini-1.1-enable-cts.patch \ file://vizzini-1.1-rs485.patch \ " +SRC_URI_append_mtre = "file://vizzini-1.1-ledrtig.patch \ + " S = "${WORKDIR}/xr21v141x-lnx3.10-3.11" -- cgit v1.2.3 From 81f0751c9d15d969ebb568c67b7903d2d5e49a0d Mon Sep 17 00:00:00 2001 From: Andrii Pientsov Date: Thu, 28 Jan 2021 11:26:05 +0200 Subject: MTRE: Add mtre-leds recipe --- recipes-bsp/multitech/mtre-leds.bb | 30 ++++ .../mtre-leds/mtre-leds-device-ready.init | 7 + .../multitech/mtre-leds/mtre-leds-monitor.sh | 23 +++ recipes-bsp/multitech/mtre-leds/mtre-leds.init | 21 +++ recipes-bsp/multitech/mtre-leds/mtre-leds.sh | 160 +++++++++++++++++++++ 5 files changed, 241 insertions(+) create mode 100644 recipes-bsp/multitech/mtre-leds.bb create mode 100755 recipes-bsp/multitech/mtre-leds/mtre-leds-device-ready.init create mode 100755 recipes-bsp/multitech/mtre-leds/mtre-leds-monitor.sh create mode 100644 recipes-bsp/multitech/mtre-leds/mtre-leds.init create mode 100755 recipes-bsp/multitech/mtre-leds/mtre-leds.sh diff --git a/recipes-bsp/multitech/mtre-leds.bb b/recipes-bsp/multitech/mtre-leds.bb new file mode 100644 index 0000000..59660b4 --- /dev/null +++ b/recipes-bsp/multitech/mtre-leds.bb @@ -0,0 +1,30 @@ +DESCRIPTION = "MTRE led setup facilities" +HOMEPAGE = "http://www.multitech.com/" +LICENSE = "Proprietary" +LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Proprietary;md5=0557f9d92cf58f2ccdd50f62f8ac0b28" +RDEPENDS_${PN} += "bash" + +PR = "r2" + +SRC_URI = " file://mtre-leds.init \ + file://mtre-leds.sh \ + file://mtre-leds-monitor.sh \ + file://mtre-leds-device-ready.init \ +" +inherit update-rc.d + +INITSCRIPT_NAME = "mtre-leds" +INITSCRIPT_PARAMS = "start 45 S . stop 30 6 ." + +do_install() { + install -d ${D}/etc/init.d + install -m 0755 ${WORKDIR}/mtre-leds.init ${D}/etc/init.d/mtre-leds + install -d ${D}/sbin + install -m 0744 ${WORKDIR}/mtre-leds.sh ${D}/sbin/mtre-leds + install -m 0744 ${WORKDIR}/mtre-leds-monitor.sh ${D}/sbin/mtre-leds-monitor + + # Install mtre device ready hook which turns on ENABLED LED after Web Access is allowed + install -d ${D}${sysconfdir}/rc5.d + install -m 0755 ${WORKDIR}/mtre-leds-device-ready.init ${D}/etc/init.d/mtre-leds-device-ready + ln -s /etc/init.d/mtre-leds-device-ready ${D}${sysconfdir}/rc5.d/S76mtre-leds-device-ready +} diff --git a/recipes-bsp/multitech/mtre-leds/mtre-leds-device-ready.init b/recipes-bsp/multitech/mtre-leds/mtre-leds-device-ready.init new file mode 100755 index 0000000..250f592 --- /dev/null +++ b/recipes-bsp/multitech/mtre-leds/mtre-leds-device-ready.init @@ -0,0 +1,7 @@ +#!/bin/bash + +# +# Notify LEDs engine that the device is now accessible. +# + +mtre-leds device_ready diff --git a/recipes-bsp/multitech/mtre-leds/mtre-leds-monitor.sh b/recipes-bsp/multitech/mtre-leds/mtre-leds-monitor.sh new file mode 100755 index 0000000..087d8f3 --- /dev/null +++ b/recipes-bsp/multitech/mtre-leds/mtre-leds-monitor.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +gpio=/sys/devices/platform/mts-io/reset +#gpio=/tmp/pb + +status="0" + +while : +do + usleep 150000 + if [[ -r "$gpio" ]]; then + read -n 1 val < $gpio + if [[ ! -z "$val" && "$val" != "$status" ]]; then + if [[ "$val" == "1" ]]; then + mtre-leds start-test + status=$val + elif [[ "$val" == "0" ]]; then + mtre-leds stop-test + status=$val + fi + fi + fi +done diff --git a/recipes-bsp/multitech/mtre-leds/mtre-leds.init b/recipes-bsp/multitech/mtre-leds/mtre-leds.init new file mode 100644 index 0000000..686fba8 --- /dev/null +++ b/recipes-bsp/multitech/mtre-leds/mtre-leds.init @@ -0,0 +1,21 @@ +#!/bin/bash + +case $1 in + start) + echo "Setting up leds" + # setup leds and triggers + mtre-leds start + # set to no-alarm initially + mtre-leds alarm-off + ;; + + stop) + # turn leds off, disable triggers + mtre-leds stop + ;; + + *) + echo "Usage: $0 {start|stop}" + exit 2 + ;; +esac \ No newline at end of file diff --git a/recipes-bsp/multitech/mtre-leds/mtre-leds.sh b/recipes-bsp/multitech/mtre-leds/mtre-leds.sh new file mode 100755 index 0000000..773e331 --- /dev/null +++ b/recipes-bsp/multitech/mtre-leds/mtre-leds.sh @@ -0,0 +1,160 @@ +#!/bin/bash + +# +# LED to trigger map +# +declare -A triggers + +################################################################## +# # # # +# LED name # Trigger # Description # +# /sys/class/leds # # # +################################################################## +triggers[pca955x:0]="led-no-alarm" # ENABLE +triggers[pca955x:1]="led-alarm" # ALARM +triggers[pca955x:2]="none" # 10/100MBPS (HW controlled) +triggers[pca955x:3]="none" # LNK/ACT (HW controlled) +triggers[pca955x:4]="vizzini1-tx" # TX (serial) +triggers[pca955x:5]="vizzini1-rx" # RX (serial) +triggers[pca955x:6]="led-sig4" # LINK Quality Green +triggers[pca955x:7]="led-sig3" # LINK Quality Green +triggers[pca955x:8]="led-sig2" # LINK Quality Yellow +triggers[pca955x:9]="led-sig1" # LINK Quality Red +triggers[pca955x:10]="led-cd" # Celullar connectivity +triggers[pca955x:11]="netdev" # Cellular activity + +debug() { + [[ "$DEBUG" ]] && builtin echo $@ +} + +leds_enable() { + cd /sys/class/leds + for led in "${!triggers[@]}" + do + echo ${triggers[$led]} > $led/trigger + debug "LEDS: $led trigger enabled" + done +} + +leds_disable() { + cd /sys/class/leds + for led in "${!triggers[@]}" + do + echo "none" > $led/trigger + done +} + +led_set_alarm() { + local cmd="$1" + + [ x"$cmd" == x"on" ] && mts-io-sysfs store alarm 1 + [ x"$cmd" == x"off" ] && mts-io-sysfs store alarm 0 + [ x"$cmd" == x"minor" ] && mts-io-sysfs store alarm 2 + [ x"$cmd" == x"update" ] && mts-io-sysfs store alarm 100 + debug "LEDS: alarm set to $1" +} + +led_set_device_ready() { + local cmd="$1" + + [ x"$cmd" == x"on" ] && mts-io-sysfs store device-ready 1 + [ x"$cmd" == x"off" ] && mts-io-sysfs store device-ready 0 + debug "LEDS: device_ready set to $1" +} + +led_set_ppp_act() { + cd /sys/class/leds + for led in "${!triggers[@]}" + do + if [[ x"${triggers[$led]}" == x"netdev" ]]; then + echo "ppp0" > $led/device_name + echo "1" > $led/rx + echo "1" > $led/tx + debug "LEDS: ppp activity trigger is set" + fi + done +} + +leds_set_brightness() { + cd /sys/class/leds + for led in "${!triggers[@]}" + do + local cmd="$1" + + if [[ x"$cmd" == x"on" ]]; then + brightness="255" + elif [[ x"$cmd" == x"off" ]]; then + brightness="0" + fi + + if [[ x"${triggers[$led]}" == x"led-alarm" ]]; then + # + # led alarm is inverted + # + if [[ x"$cmd" == x"on" ]]; then + brightness="0" + elif [[ x"$cmd" == x"off" ]]; then + brightness="255" + fi + fi + + echo $brightness > $led/brightness + + debug "LEDS: $led brightness set to $cmd" + done +} + +case $1 in + start) + leds_disable # disable all triggers + leds_set_brightness off # set all leds to off + leds_enable # enable all triggers + led_set_alarm update # update alarm leds with current alarm status + led_set_ppp_act # setup ppp activity led + mtre-leds-monitor & # start push-button monitor + ;; + + stop) + killall -q mtre-leds-monitor + leds_disable # disable all led triggers + leds_set_brightness off # set all leds to off + ;; + + alarm-on) + led_set_alarm on # store alarm + ;; + + alarm-off) + led_set_alarm off # set no alarm + ;; + + alarm-minor) + led_set_alarm minor # blink oneshot on minor alarm + ;; + + device_ready) + led_set_device_ready on # indicate device readyness + ;; + + device_not_ready) + led_set_device_ready off # indicate device readyness + ;; + + start-test) + leds_disable # disable all triggers + leds_set_brightness on # set all leds to on + ;; + + stop-test) + leds_disable # disable all led triggers + leds_set_brightness off # set all leds to off + leds_enable # enable all triggers + led_set_alarm update # update alarm leds with current alarm status + led_set_ppp_act # restore ppp activity settings + ;; + + *) + echo "Usage: $0 " + exit 2 + ;; +esac -- cgit v1.2.3