yocto/meta-igkboard/kirkstone-lf-5.15.71-2.2.0/COPYING.MIT
New file @@ -0,0 +1,17 @@ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. yocto/meta-igkboard/kirkstone-lf-5.15.71-2.2.0/README.md
New file @@ -0,0 +1,125 @@ 本目录为凌云实验室针对IGKBoard开发板移植的Yocto Honister (Yocto 3.4) 项目源码,关于Yocto系统的详细使用,大家可以参考NXP官方的用户手册文档,[点此链接下载](https://www.nxp.com/docs/en/user-guide/IMX_YOCTO_PROJECT_USERS_GUIDE.pdf) 。 如果想源码编译Yocto系统的话,则系统需要满足: * 推荐使用 Ubuntu 20.04 系统; * 推荐使用 4核以上CPU; * 硬盘空间至少要求 200GB+; ### 1. 下载Yocto源码 如果没有 ***git*** 命令,则首先安装 **git** 命令并配置 **git** 的账号信息: ``` guowenxue@ubuntu20:~$ sudo apt install git guowenxue@ubuntu20:~$ git config --global user.name guowenxue guowenxue@ubuntu20:~$ git config --global user.email "guowenxue@gmail.com" ``` 首先下载并安装 google 的 ***repo*** 命令: ``` guowenxue@ubuntu20:~$ curl https://storage.googleapis.com/git-repo-downloads/repo -o repo guowenxue@ubuntu20:~$ chmod a+x repo guowenxue@ubuntu20:~$ sudo mv repo /usr/bin/ ``` 使用 **git** 命令克隆下载该项目源码: ``` guowenxue@ubuntu20:~$ mkdir -p ~/workspace guowenxue@ubuntu20:~$ cd ~/workspace guowenxue@ubuntu20:~/workspace$ git clone git://weike-iot.com/imx6ull.git Cloning into 'imx6ull'... remote: Counting objects: 330, done remote: Finding sources: 100% (330/330) remote: Getting sizes: 100% (179/179) remote: Total 330 (delta 98), reused 330 (delta 98) Receiving objects: 100% (330/330), 110.55 KiB | 884.00 KiB/s, done. Resolving deltas: 100% (98/98), done. ``` 使用 ***repo*** 命令下载 **Yocto Honister** 源码: ``` guowenxue@ubuntu20:~$ mkdir -p ~/workspace/imx-yocto-bsp/ guowenxue@ubuntu20:~$ cd ~/workspace/imx-yocto-bsp/ guowenxue@ubuntu20:~/workspace/imx-yocto-bsp$ repo init -u https://source.codeaurora.org/external/imx/imx-manifest -b imx-linux-honister -m imx-5.15.5-1.0.0.xml guowenxue@ubuntu20:~/workspace/imx-yocto-bsp$ repo sync guowenxue@ubuntu20:~/workspace/imx-yocto-bsp$ ls imx-setup-release.sh README README-IMXBSP setup-environment sources ``` ### 2. 编译Yocto系统 首先将该本文件夹Yocto针对IGKBoard的移植源码拷贝到 Yocto 系统中。 ``` guowenxue@ubuntu20:~/workspace/imx-yocto-bsp$ cp -rf ~/workspace/imx6ull/yocto/honister/meta-igkboard/ sources/ ``` 接下来执行下面命令,初始化 IGKBoard 开发板的 Yocto 编译环境: ``` guowenxue@ubuntu20:~/workspace/imx-yocto-bsp$ MACHINE=igkboard source sources/meta-igkboard/tools/igkboard-setup.sh -b igkboard Build directory is igkboard /home/guowenxue/workspace/imx-yocto-bsp Welcome LingYun IoT Gateway Kit Board Yocto BSP, You can run 'bitbake <target>' now. The targets should be: linuxsys-image core-image-minimal imx-image-full ``` 接下来使用下面命令,开始Yocto系统的源码编译,这个系统编译时间较长,如果编译的过程中出现错误,再重新开始编译即可。也可以使用 ***-k*** 选项先跳过编译出错的软件包。 ``` guowenxue@ubuntu20:/workspace/imx-yocto-bsp/igkboard$ bitbake linuxsys-image ``` ### 3. Yocto编译输出 编译过程中下载的软件包存放在 ***~/workspace/honister_packets/*** 路径下: ``` guowenxue@ubuntu20:/workspace/imx-yocto-bsp/igkboard$ ls ~/workspace/honister_packets/ ``` 编译完成输出的系统镜像及文件系统存放在下面路径下: ``` guowenxue@ubuntu20:~/workspace/imx-yocto-bsp/igkboard$ ls ls tmp/deploy/images/igkboard/ linuxsys-image-igkboard-*.rootfs.tar.bz2 --Yocto根文件系统压缩包 linuxsys-image-igkboard-*.rootfs.wic.bz2 --Yocto烧录系统镜像文件 ``` yocto/meta-igkboard/kirkstone-lf-5.15.71-2.2.0/conf/bblayers.conf
New file @@ -0,0 +1,35 @@ LCONF_VERSION = "6" BBPATH = "${TOPDIR}" BSPDIR := "${@os.path.abspath(os.path.dirname(d.getVar('FILE', True)) + '/../..')}" BBFILES ?= "" BBLAYERS = " \ ${BSPDIR}/sources/poky/meta \ ${BSPDIR}/sources/poky/meta-poky \ \ ${BSPDIR}/sources/meta-openembedded/meta-oe \ ${BSPDIR}/sources/meta-openembedded/meta-multimedia \ ${BSPDIR}/sources/meta-openembedded/meta-python \ \ ${BSPDIR}/sources/meta-freescale \ ${BSPDIR}/sources/meta-freescale-3rdparty \ ${BSPDIR}/sources/meta-freescale-distro \ " # i.MX Yocto Project Release layers BBLAYERS += "${BSPDIR}/sources/meta-imx/meta-bsp" BBLAYERS += "${BSPDIR}/sources/meta-imx/meta-sdk" BBLAYERS += "${BSPDIR}/sources/meta-imx/meta-ml" BBLAYERS += "${BSPDIR}/sources/meta-imx/meta-v2x" BBLAYERS += "${BSPDIR}/sources/meta-nxp-demo-experience" BBLAYERS += "${BSPDIR}/sources/meta-browser/meta-chromium" BBLAYERS += "${BSPDIR}/sources/meta-clang" BBLAYERS += "${BSPDIR}/sources/meta-openembedded/meta-gnome" BBLAYERS += "${BSPDIR}/sources/meta-openembedded/meta-networking" BBLAYERS += "${BSPDIR}/sources/meta-openembedded/meta-filesystems" BBLAYERS += "${BSPDIR}/sources/meta-qt6" # Add IoT Gateway Kit Board Yocto Project Release layers BBLAYERS += "${BSPDIR}/sources/meta-igkboard" yocto/meta-igkboard/kirkstone-lf-5.15.71-2.2.0/conf/layer.conf
New file @@ -0,0 +1,15 @@ # We have a conf and classes directory, add to BBPATH BBPATH .= ":${LAYERDIR}" # We have a packages directory, add to BBFILES BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \ ${LAYERDIR}/recipes-*/*/*.bbappend" BBFILE_COLLECTIONS += "meta-igkboard" BBFILE_PATTERN_meta-igkboard := "^${LAYERDIR}/" BBFILE_PRIORITY_meta-igkboard = "9" LAYERDEPENDS_meta-igkboard = "core" LAYERSERIES_COMPAT_meta-igkboard = "kirkstone" yocto/meta-igkboard/kirkstone-lf-5.15.71-2.2.0/conf/local.conf
New file @@ -0,0 +1,24 @@ MACHINE ??= 'igkboard' DISTRO ?= 'fsl-imx-wayland' PACKAGE_CLASSES ?= 'package_rpm' EXTRA_IMAGE_FEATURES ?= "debug-tweaks" USER_CLASSES ?= "buildstats" PATCHRESOLVE = "noop" BB_DISKMON_DIRS ??= "\ STOPTASKS,${TMPDIR},1G,100K \ STOPTASKS,${DL_DIR},1G,100K \ STOPTASKS,${SSTATE_DIR},1G,100K \ STOPTASKS,/tmp,100M,100K \ ABORT,${TMPDIR},100M,1K \ ABORT,${DL_DIR},100M,1K \ ABORT,${SSTATE_DIR},100M,1K \ ABORT,/tmp,10M,1K" PACKAGECONFIG:append_pn-qemu-system-native = " sdl" CONF_VERSION = "2" DL_DIR ?= "/home/yangqiulin/igkboard_5.15.71/rootfs/yocto_packets/" ACCEPT_FSL_EULA = "1" # Switch to Debian packaging and include package-management in the image PACKAGE_CLASSES = "package_deb" EXTRA_IMAGE_FEATURES += "package-management" yocto/meta-igkboard/kirkstone-lf-5.15.71-2.2.0/conf/machine/igkboard.conf
New file @@ -0,0 +1,32 @@ #@TYPE: Machine #@NAME: LingYun IoT Gateway Kit Board #@SOC: i.MX6ULL #@DESCRIPTION: Machine configuration for LingYun IoT Gateway Kit Board # Add new machine igkboard MACHINEOVERRIDES =. "mx6:mx6ul:mx6ull:igkboard:" include conf/machine/include/imx-base.inc include conf/machine/include/arm/armv7a/tune-cortexa7.inc # Device tree file generated during kernel compilation KERNEL_DEVICETREE = "igkboard.dtb" # Uboot comfiguration UBOOT_CONFIG ??= "sd" UBOOT_CONFIG[sd] = "igkboard_defconfig,sdcard" # Define the kernel boot file IMAGE_BOOT_FILES = " \ ${KERNEL_IMAGETYPE} \ ${KERNEL_DEVICETREE} \ " # Remove unused optee bcm4339 bcm43455 MACHINE_FEATURES += "wifi bluetooth" # /etc/hostname (uname -a) hostname_pn-base-files = "igkboard" # Refer to linux-imx/drivers/tty/serial/imx.c SERIAL_CONSOLES = "115200;ttymxc0" yocto/meta-igkboard/kirkstone-lf-5.15.71-2.2.0/recipes-bsp/u-boot/files/lingyun.bmp
yocto/meta-igkboard/kirkstone-lf-5.15.71-2.2.0/recipes-bsp/u-boot/files/uboot-imx-igkboard.patch
New file @@ -0,0 +1,1613 @@ diff -Nuar -x lingyun.bmp uboot-imx/arch/arm/dts/igkboard.dts uboot-imx-lf-5.15.71-2.2.0/arch/arm/dts/igkboard.dts --- uboot-imx/arch/arm/dts/igkboard.dts 1970-01-01 08:00:00.000000000 +0800 +++ uboot-imx-lf-5.15.71-2.2.0/arch/arm/dts/igkboard.dts 2023-03-02 17:44:16.779628248 +0800 @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: (GPL-2.0 OR MIT) +// +// Copyright (C) 2016 Freescale Semiconductor, Inc. + +/dts-v1/; + +#include "imx6ull.dtsi" +#include "imx6ul-14x14-evk.dtsi" +#include "imx6ul-14x14-evk-u-boot.dtsi" + +/ { + model = "i.MX6 ULL 14x14 EVK Board"; + compatible = "fsl,imx6ull-14x14-evk", "fsl,imx6ull"; +}; + +&clks { + assigned-clocks = <&clks IMX6UL_CLK_PLL3_PFD2>; + assigned-clock-rates = <320000000>; +}; diff -Nuar -x lingyun.bmp uboot-imx/arch/arm/dts/imx6ul-14x14-evk.dtsi uboot-imx-lf-5.15.71-2.2.0/arch/arm/dts/imx6ul-14x14-evk.dtsi --- uboot-imx/arch/arm/dts/imx6ul-14x14-evk.dtsi 2023-03-01 18:01:20.000000000 +0800 +++ uboot-imx-lf-5.15.71-2.2.0/arch/arm/dts/imx6ul-14x14-evk.dtsi 2023-03-02 20:29:44.747352634 +0800 @@ -83,6 +83,9 @@ pinctrl-0 = <&pinctrl_enet1>; phy-mode = "rmii"; phy-handle = <ðphy0>; + phy-reset-gpios = <&gpio5 7 GPIO_ACTIVE_LOW>; + phy-reset-duration = <50>; + phy-reset-post-delay = <15>; status = "okay"; }; @@ -91,14 +94,17 @@ pinctrl-0 = <&pinctrl_enet2>; phy-mode = "rmii"; phy-handle = <ðphy1>; + phy-reset-gpios = <&gpio5 4 GPIO_ACTIVE_LOW>; + phy-reset-duration = <50>; + phy-reset-post-delay = <15>; status = "okay"; mdio { #address-cells = <1>; #size-cells = <0>; - ethphy0: ethernet-phy@2 { - reg = <2>; + ethphy0: ethernet-phy@0 { + reg = <0>; micrel,led-mode = <1>; clocks = <&clks IMX6UL_CLK_ENET_REF>; clock-names = "rmii-ref"; @@ -151,21 +157,21 @@ status = "okay"; display0: display@0 { - bits-per-pixel = <24>; - bus-width = <24>; + bits-per-pixel = <16>; + bus-width = <16>; display-timings { native-mode = <&timing0>; timing0: timing0 { - clock-frequency = <9200000>; - hactive = <480>; - vactive = <272>; - hfront-porch = <8>; - hback-porch = <4>; - hsync-len = <41>; - vback-porch = <2>; - vfront-porch = <4>; - vsync-len = <10>; + clock-frequency = <30000000>; + hactive = <800>; + vactive = <480>; + hfront-porch = <40>; + hback-porch = <88>; + hsync-len = <48>; + vback-porch = <32>; + vfront-porch = <13>; + vsync-len = <3>; hsync-active = <0>; vsync-active = <0>; @@ -284,6 +290,40 @@ &iomuxc { pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_extgpio>; + + pinctrl_extgpio: extgpiogrp { + fsl,pins = < + MX6UL_PAD_GPIO1_IO03__GPIO1_IO03 0x17059 /* 3# I2C1_SDA */ + MX6UL_PAD_GPIO1_IO02__GPIO1_IO02 0x17059 /* 5# I2C1_SCL */ + MX6UL_PAD_UART1_CTS_B__GPIO1_IO18 0x17059 /* 7# GPIO */ + MX6UL_PAD_UART3_TX_DATA__GPIO1_IO24 0x17059 /* 11# UART3_TX */ + MX6UL_PAD_UART4_TX_DATA__GPIO1_IO28 0x17059 /* 13# UART4_TX */ + MX6UL_PAD_UART4_RX_DATA__GPIO1_IO29 0x17059 /* 15# UART4_RX */ + MX6UL_PAD_LCD_DATA22__GPIO3_IO27 0x17059 /* 19# SPI1_MOSI*/ + MX6UL_PAD_LCD_DATA23__GPIO3_IO28 0x17059 /* 21# SPI1_MISO*/ + MX6UL_PAD_LCD_DATA20__GPIO3_IO25 0x17059 /* 23# SPI1_SCLK*/ + MX6UL_PAD_UART3_CTS_B__GPIO1_IO26 0x17059 /* 27# CAN1_TX */ + MX6UL_PAD_UART3_RTS_B__GPIO1_IO27 0x17059 /* 29# CAN1_RX */ + MX6UL_PAD_UART2_CTS_B__GPIO1_IO22 0x17059 /* 31# CAN2_TX */ + MX6UL_PAD_UART2_RTS_B__GPIO1_IO23 0x17059 /* 33# CAN2_RX */ + MX6UL_PAD_SNVS_TAMPER1__GPIO5_IO01 0x17059 /* 35# GPIO */ + MX6UL_PAD_SNVS_TAMPER8__GPIO5_IO08 0x17059 /* 37# GPIO */ + MX6UL_PAD_UART2_TX_DATA__GPIO1_IO20 0x17059 /* 8# UART2_TX */ + MX6UL_PAD_UART2_RX_DATA__GPIO1_IO21 0x17059 /* 10# UART2_RX */ + MX6UL_PAD_UART3_RX_DATA__GPIO1_IO25 0x17059 /* 12# UART3_RX */ + MX6UL_PAD_LCD_DATA16__GPIO3_IO21 0x17059 /* 16# UART7_TX */ + MX6UL_PAD_LCD_DATA17__GPIO3_IO22 0x17059 /* 18# UART7_RX */ + MX6UL_PAD_LCD_DATA18__GPIO3_IO23 0x17059 /* 22# GPIO */ + MX6UL_PAD_LCD_DATA21__GPIO3_IO26 0x17059 /* 24# SPI1_SS0 */ + MX6UL_PAD_LCD_DATA19__GPIO3_IO24 0x17059 /* 26# GPIO */ + MX6UL_PAD_JTAG_TRST_B__GPIO1_IO15 0x17059 /* 28# PWM8 */ + MX6UL_PAD_JTAG_TCK__GPIO1_IO14 0x17059 /* 32# PWM7 */ + MX6UL_PAD_JTAG_TMS__GPIO1_IO11 0x17059 /* 36# GPIO */ + MX6UL_PAD_JTAG_MOD__GPIO1_IO10 0x17059 /* 38# GPIO */ + MX6UL_PAD_SNVS_TAMPER9__GPIO5_IO09 0x17059 /* 40# GPIO */ + >; + }; pinctrl_csi1: csi1grp { fsl,pins = < @@ -312,6 +352,7 @@ MX6UL_PAD_ENET1_TX_DATA0__ENET1_TDATA00 0x1b0b0 MX6UL_PAD_ENET1_TX_DATA1__ENET1_TDATA01 0x1b0b0 MX6UL_PAD_ENET1_TX_CLK__ENET1_REF_CLK1 0x4001b031 + MX6UL_PAD_SNVS_TAMPER7__GPIO5_IO07 0x10B0 /* ENET1 RESET */ >; }; @@ -327,6 +368,7 @@ MX6UL_PAD_ENET2_TX_DATA0__ENET2_TDATA00 0x1b0b0 MX6UL_PAD_ENET2_TX_DATA1__ENET2_TDATA01 0x1b0b0 MX6UL_PAD_ENET2_TX_CLK__ENET2_REF_CLK2 0x4001b031 + MX6UL_PAD_SNVS_TAMPER4__GPIO5_IO04 0x10B0 /* ENET2 RESET */ >; }; @@ -383,14 +425,6 @@ MX6UL_PAD_LCD_DATA13__LCDIF_DATA13 0x79 MX6UL_PAD_LCD_DATA14__LCDIF_DATA14 0x79 MX6UL_PAD_LCD_DATA15__LCDIF_DATA15 0x79 - MX6UL_PAD_LCD_DATA16__LCDIF_DATA16 0x79 - MX6UL_PAD_LCD_DATA17__LCDIF_DATA17 0x79 - MX6UL_PAD_LCD_DATA18__LCDIF_DATA18 0x79 - MX6UL_PAD_LCD_DATA19__LCDIF_DATA19 0x79 - MX6UL_PAD_LCD_DATA20__LCDIF_DATA20 0x79 - MX6UL_PAD_LCD_DATA21__LCDIF_DATA21 0x79 - MX6UL_PAD_LCD_DATA22__LCDIF_DATA22 0x79 - MX6UL_PAD_LCD_DATA23__LCDIF_DATA23 0x79 >; }; @@ -423,7 +457,6 @@ MX6UL_PAD_JTAG_TRST_B__SAI2_TX_DATA 0x11088 MX6UL_PAD_JTAG_TCK__SAI2_RX_DATA 0x11088 MX6UL_PAD_JTAG_TMS__SAI2_MCLK 0x17088 - MX6UL_PAD_SNVS_TAMPER4__GPIO5_IO04 0x17059 >; }; @@ -448,7 +481,6 @@ fsl,pins = < MX6UL_PAD_BOOT_MODE0__GPIO5_IO10 0x70a1 MX6UL_PAD_BOOT_MODE1__GPIO5_IO11 0x70a1 - MX6UL_PAD_SNVS_TAMPER7__GPIO5_IO07 0x70a1 MX6UL_PAD_SNVS_TAMPER8__GPIO5_IO08 0x80000000 >; }; diff -Nuar -x lingyun.bmp uboot-imx/arch/arm/dts/Makefile uboot-imx-lf-5.15.71-2.2.0/arch/arm/dts/Makefile --- uboot-imx/arch/arm/dts/Makefile 2023-03-01 18:01:20.000000000 +0800 +++ uboot-imx-lf-5.15.71-2.2.0/arch/arm/dts/Makefile 2023-03-02 20:11:56.384857556 +0800 @@ -871,6 +871,7 @@ imx6ull-kontron-n641x-s.dtb dtb-$(CONFIG_MX6ULL) += \ + igkboard.dtb \ imx6ull-14x14-ddr3-val.dtb \ imx6ull-14x14-ddr3-val-epdc.dtb \ imx6ull-14x14-ddr3-val-emmc.dtb \ diff -Nuar -x lingyun.bmp uboot-imx/arch/arm/mach-imx/mx6/Kconfig uboot-imx-lf-5.15.71-2.2.0/arch/arm/mach-imx/mx6/Kconfig --- uboot-imx/arch/arm/mach-imx/mx6/Kconfig 2023-03-01 18:01:20.000000000 +0800 +++ uboot-imx-lf-5.15.71-2.2.0/arch/arm/mach-imx/mx6/Kconfig 2023-03-02 20:14:06.865807204 +0800 @@ -157,6 +157,16 @@ prompt "MX6 board select" optional +config TARGET_LINGYUN_IGKBOARD + bool "LingYun IoT Gateway Kits Board(IGKBoard)" + depends on MX6ULL + select BOARD_LATE_INIT + select DM + select DM_THERMAL + select IMX_MODULE_FUSE + select OF_SYSTEM_SETUP + imply CMD_DM + config TARGET_APALIS_IMX6 bool "Toradex Apalis iMX6 board" depends on MX6Q @@ -888,5 +898,6 @@ source "board/warp/Kconfig" source "board/BuR/brppt2/Kconfig" source "board/out4/o4-imx6ull-nano/Kconfig" +source "board/lingyun/igkboard/Kconfig" endif diff -Nuar -x lingyun.bmp uboot-imx/board/lingyun/igkboard/igkboard.c uboot-imx-lf-5.15.71-2.2.0/board/lingyun/igkboard/igkboard.c --- uboot-imx/board/lingyun/igkboard/igkboard.c 1970-01-01 08:00:00.000000000 +0800 +++ uboot-imx-lf-5.15.71-2.2.0/board/lingyun/igkboard/igkboard.c 2023-03-02 20:28:03.937789717 +0800 @@ -0,0 +1,376 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Copyright (C) 2016 Freescale Semiconductor, Inc. + * Copyright 2017 NXP + */ + +#include <init.h> +#include <asm/arch/clock.h> +#include <asm/arch/iomux.h> +#include <asm/arch/imx-regs.h> +#include <asm/arch/crm_regs.h> +#include <asm/arch/mx6-pins.h> +#include <asm/arch/sys_proto.h> +#include <asm/global_data.h> +#include <asm/gpio.h> +#include <asm/mach-imx/iomux-v3.h> +#include <asm/mach-imx/boot_mode.h> +#include <asm/mach-imx/mxc_i2c.h> +#include <asm/io.h> +#include <common.h> +#include <env.h> +#include <fsl_esdhc_imx.h> +#include <i2c.h> +#include <miiphy.h> +#include <linux/sizes.h> +#include <linux/delay.h> +#include <mmc.h> +#include <miiphy.h> +#include <power/pmic.h> +#include <power/pfuze3000_pmic.h> +#include "../../freescale/common/pfuze.h" + +DECLARE_GLOBAL_DATA_PTR; + +#define UART_PAD_CTRL (PAD_CTL_PKE | PAD_CTL_PUE | \ + PAD_CTL_PUS_100K_UP | PAD_CTL_SPEED_MED | \ + PAD_CTL_DSE_40ohm | PAD_CTL_SRE_FAST | PAD_CTL_HYS) + +#define I2C_PAD_CTRL (PAD_CTL_PKE | PAD_CTL_PUE | \ + PAD_CTL_PUS_100K_UP | PAD_CTL_SPEED_MED | \ + PAD_CTL_DSE_40ohm | PAD_CTL_HYS | \ + PAD_CTL_ODE) + +#define LCD_PAD_CTRL (PAD_CTL_HYS | PAD_CTL_PUS_100K_UP | PAD_CTL_PUE | \ + PAD_CTL_PKE | PAD_CTL_SPEED_MED | PAD_CTL_DSE_40ohm) + +#define GPMI_PAD_CTRL0 (PAD_CTL_PKE | PAD_CTL_PUE | PAD_CTL_PUS_100K_UP) +#define GPMI_PAD_CTRL1 (PAD_CTL_DSE_40ohm | PAD_CTL_SPEED_MED | \ + PAD_CTL_SRE_FAST) +#define GPMI_PAD_CTRL2 (GPMI_PAD_CTRL0 | GPMI_PAD_CTRL1) + + +#ifdef CONFIG_DM_PMIC +int power_init_board(void) +{ + struct udevice *dev; + int ret, dev_id, rev_id; + unsigned int reg; + + ret = pmic_get("pfuze3000@8", &dev); + if (ret == -ENODEV) + return 0; + if (ret != 0) + return ret; + + dev_id = pmic_reg_read(dev, PFUZE3000_DEVICEID); + rev_id = pmic_reg_read(dev, PFUZE3000_REVID); + printf("PMIC: PFUZE3000 DEV_ID=0x%x REV_ID=0x%x\n", dev_id, rev_id); + + /* disable Low Power Mode during standby mode */ + reg = pmic_reg_read(dev, PFUZE3000_LDOGCTL); + reg |= 0x1; + pmic_reg_write(dev, PFUZE3000_LDOGCTL, reg); + + /* SW1B step ramp up time from 2us to 4us/25mV */ + pmic_reg_write(dev, PFUZE3000_SW1BCONF, 0x40); + + /* SW1B mode to APS/PFM */ + pmic_reg_write(dev, PFUZE3000_SW1BMODE, 0xc); + + /* SW1B standby voltage set to 0.975V */ + pmic_reg_write(dev, PFUZE3000_SW1BSTBY, 0xb); + + return 0; +} + +#ifdef CONFIG_LDO_BYPASS_CHECK +void ldo_mode_set(int ldo_bypass) +{ + unsigned int value; + u32 vddarm; + struct udevice *dev; + int ret; + + ret = pmic_get("pfuze3000@8", &dev); + if (ret == -ENODEV) { + printf("No PMIC found!\n"); + return; + } + + /* switch to ldo_bypass mode */ + if (ldo_bypass) { + prep_anatop_bypass(); + /* decrease VDDARM to 1.275V */ + value = pmic_reg_read(dev, PFUZE3000_SW1BVOLT); + value &= ~0x1f; + value |= PFUZE3000_SW1AB_SETP(12750); + pmic_reg_write(dev, PFUZE3000_SW1BVOLT, value); + + set_anatop_bypass(1); + vddarm = PFUZE3000_SW1AB_SETP(11750); + + value = pmic_reg_read(dev, PFUZE3000_SW1BVOLT); + value &= ~0x1f; + value |= vddarm; + pmic_reg_write(dev, PFUZE3000_SW1BVOLT, value); + + finish_anatop_bypass(); + + printf("switch to ldo_bypass mode!\n"); + } +} +#endif +#endif + +int dram_init(void) +{ + gd->ram_size = imx_ddr_size(); + + return 0; +} + +static iomux_v3_cfg_t const uart1_pads[] = { + MX6_PAD_UART1_TX_DATA__UART1_DCE_TX | MUX_PAD_CTRL(UART_PAD_CTRL), + MX6_PAD_UART1_RX_DATA__UART1_DCE_RX | MUX_PAD_CTRL(UART_PAD_CTRL), +}; + +static void setup_iomux_uart(void) +{ + imx_iomux_v3_setup_multiple_pads(uart1_pads, ARRAY_SIZE(uart1_pads)); +} + +#ifdef CONFIG_FSL_QSPI + +#ifndef CONFIG_DM_SPI +#define QSPI_PAD_CTRL1 \ + (PAD_CTL_SRE_FAST | PAD_CTL_SPEED_MED | \ + PAD_CTL_PKE | PAD_CTL_PUE | PAD_CTL_PUS_47K_UP | PAD_CTL_DSE_120ohm) + +static iomux_v3_cfg_t const quadspi_pads[] = { + MX6_PAD_NAND_WP_B__QSPI_A_SCLK | MUX_PAD_CTRL(QSPI_PAD_CTRL1), + MX6_PAD_NAND_READY_B__QSPI_A_DATA00 | MUX_PAD_CTRL(QSPI_PAD_CTRL1), + MX6_PAD_NAND_CE0_B__QSPI_A_DATA01 | MUX_PAD_CTRL(QSPI_PAD_CTRL1), + MX6_PAD_NAND_CE1_B__QSPI_A_DATA02 | MUX_PAD_CTRL(QSPI_PAD_CTRL1), + MX6_PAD_NAND_CLE__QSPI_A_DATA03 | MUX_PAD_CTRL(QSPI_PAD_CTRL1), + MX6_PAD_NAND_DQS__QSPI_A_SS0_B | MUX_PAD_CTRL(QSPI_PAD_CTRL1), +}; +#endif + +static int board_qspi_init(void) +{ +#ifndef CONFIG_DM_SPI + /* Set the iomux */ + imx_iomux_v3_setup_multiple_pads(quadspi_pads, + ARRAY_SIZE(quadspi_pads)); +#endif + /* Set the clock */ + enable_qspi_clk(0); + + return 0; +} +#endif + +#ifdef CONFIG_NAND_MXS +static iomux_v3_cfg_t const nand_pads[] = { + MX6_PAD_NAND_DATA00__RAWNAND_DATA00 | MUX_PAD_CTRL(GPMI_PAD_CTRL2), + MX6_PAD_NAND_DATA01__RAWNAND_DATA01 | MUX_PAD_CTRL(GPMI_PAD_CTRL2), + MX6_PAD_NAND_DATA02__RAWNAND_DATA02 | MUX_PAD_CTRL(GPMI_PAD_CTRL2), + MX6_PAD_NAND_DATA03__RAWNAND_DATA03 | MUX_PAD_CTRL(GPMI_PAD_CTRL2), + MX6_PAD_NAND_DATA04__RAWNAND_DATA04 | MUX_PAD_CTRL(GPMI_PAD_CTRL2), + MX6_PAD_NAND_DATA05__RAWNAND_DATA05 | MUX_PAD_CTRL(GPMI_PAD_CTRL2), + MX6_PAD_NAND_DATA06__RAWNAND_DATA06 | MUX_PAD_CTRL(GPMI_PAD_CTRL2), + MX6_PAD_NAND_DATA07__RAWNAND_DATA07 | MUX_PAD_CTRL(GPMI_PAD_CTRL2), + MX6_PAD_NAND_CLE__RAWNAND_CLE | MUX_PAD_CTRL(GPMI_PAD_CTRL2), + MX6_PAD_NAND_ALE__RAWNAND_ALE | MUX_PAD_CTRL(GPMI_PAD_CTRL2), + MX6_PAD_NAND_CE0_B__RAWNAND_CE0_B | MUX_PAD_CTRL(GPMI_PAD_CTRL2), + MX6_PAD_NAND_CE1_B__RAWNAND_CE1_B | MUX_PAD_CTRL(GPMI_PAD_CTRL2), + MX6_PAD_NAND_RE_B__RAWNAND_RE_B | MUX_PAD_CTRL(GPMI_PAD_CTRL2), + MX6_PAD_NAND_WE_B__RAWNAND_WE_B | MUX_PAD_CTRL(GPMI_PAD_CTRL2), + MX6_PAD_NAND_WP_B__RAWNAND_WP_B | MUX_PAD_CTRL(GPMI_PAD_CTRL2), + MX6_PAD_NAND_READY_B__RAWNAND_READY_B | MUX_PAD_CTRL(GPMI_PAD_CTRL2), + MX6_PAD_NAND_DQS__RAWNAND_DQS | MUX_PAD_CTRL(GPMI_PAD_CTRL2), +}; + +static void setup_gpmi_nand(void) +{ + struct mxc_ccm_reg *mxc_ccm = (struct mxc_ccm_reg *)CCM_BASE_ADDR; + + /* config gpmi nand iomux */ + imx_iomux_v3_setup_multiple_pads(nand_pads, ARRAY_SIZE(nand_pads)); + + setup_gpmi_io_clk((MXC_CCM_CS2CDR_ENFC_CLK_PODF(0) | + MXC_CCM_CS2CDR_ENFC_CLK_PRED(3) | + MXC_CCM_CS2CDR_ENFC_CLK_SEL(3))); + + /* enable apbh clock gating */ + setbits_le32(&mxc_ccm->CCGR0, MXC_CCM_CCGR0_APBHDMA_MASK); +} +#endif + +#ifdef CONFIG_FEC_MXC +static int setup_fec(void) +{ + struct iomuxc *const iomuxc_regs = (struct iomuxc *)IOMUXC_BASE_ADDR; + int ret; + + /* + * Use 50M anatop loopback REF_CLK1 for ENET1, + * clear gpr1[13], set gpr1[17]. + */ + clrsetbits_le32(&iomuxc_regs->gpr[1], IOMUX_GPR1_FEC1_MASK, + IOMUX_GPR1_FEC1_CLOCK_MUX1_SEL_MASK); + /* + * Use 50M anatop loopback REF_CLK2 for ENET2, + * clear gpr1[14], set gpr1[18]. + */ + if (!check_module_fused(MODULE_ENET2)) { + clrsetbits_le32(&iomuxc_regs->gpr[1], IOMUX_GPR1_FEC2_MASK, + IOMUX_GPR1_FEC2_CLOCK_MUX1_SEL_MASK); + } + + ret = enable_fec_anatop_clock(0, ENET_50MHZ); + if (ret) + return ret; + + if (!check_module_fused(MODULE_ENET2)) { + ret = enable_fec_anatop_clock(1, ENET_50MHZ); + if (ret) + return ret; + } + + enable_enet_clk(1); + + return 0; +} + +int board_phy_config(struct phy_device *phydev) +{ + phy_write(phydev, MDIO_DEVAD_NONE, 0x1f, 0x8190); + + if (phydev->drv->config) + phydev->drv->config(phydev); + + return 0; +} +#endif + +#ifdef CONFIG_DM_VIDEO +static iomux_v3_cfg_t const lcd_pads[] = { + /* Use GPIO for Brightness adjustment, duty cycle = period. */ + MX6_PAD_GPIO1_IO08__GPIO1_IO08 | MUX_PAD_CTRL(NO_PAD_CTRL), +}; + +static int setup_lcd(void) +{ + enable_lcdif_clock(LCDIF1_BASE_ADDR, 1); + + imx_iomux_v3_setup_multiple_pads(lcd_pads, ARRAY_SIZE(lcd_pads)); + + /* Reset the LCD */ + gpio_request(IMX_GPIO_NR(5, 9), "lcd reset"); + gpio_direction_output(IMX_GPIO_NR(5, 9) , 0); + udelay(500); + gpio_direction_output(IMX_GPIO_NR(5, 9) , 1); + + /* Set Brightness to high */ + gpio_request(IMX_GPIO_NR(1, 8), "backlight"); + gpio_direction_output(IMX_GPIO_NR(1, 8) , 1); + + return 0; +} +#else +static inline int setup_lcd(void) { return 0; } +#endif + +int board_early_init_f(void) +{ + setup_iomux_uart(); + + return 0; +} + +int board_init(void) +{ + /* Address of boot parameters */ + gd->bd->bi_boot_params = PHYS_SDRAM + 0x100; + +#ifdef CONFIG_FEC_MXC + setup_fec(); +#endif + +#ifdef CONFIG_FSL_QSPI + board_qspi_init(); +#endif + +#ifdef CONFIG_NAND_MXS + setup_gpmi_nand(); +#endif + + return 0; +} + +#ifdef CONFIG_CMD_BMODE +static const struct boot_mode board_boot_modes[] = { + /* 4 bit bus width */ + {"sd1", MAKE_CFGVAL(0x42, 0x20, 0x00, 0x00)}, + {"sd2", MAKE_CFGVAL(0x40, 0x28, 0x00, 0x00)}, + {"qspi1", MAKE_CFGVAL(0x10, 0x00, 0x00, 0x00)}, + {NULL, 0}, +}; +#endif + +int board_late_init(void) +{ +#ifdef CONFIG_CMD_BMODE + add_board_boot_modes(board_boot_modes); +#endif + + env_set("tee", "no"); +#ifdef CONFIG_IMX_OPTEE + env_set("tee", "yes"); +#endif + +#ifdef CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG + env_set("board_name", "EVK"); + + if (is_mx6ull_9x9_evk()) + env_set("board_rev", "9X9"); + else + env_set("board_rev", "14X14"); + + if (is_cpu_type(MXC_CPU_MX6ULZ)) { + env_set("board_name", "ULZ-EVK"); + env_set("usb_net_cmd", "usb start"); + } +#endif + + setup_lcd(); + +#ifdef CONFIG_ENV_IS_IN_MMC + board_late_mmc_env_init(); +#endif + + set_wdog_reset((struct wdog_regs *)WDOG1_BASE_ADDR); + + return 0; +} + +int checkboard(void) +{ + if (is_mx6ull_9x9_evk()) + puts("Board: MX6ULL 9x9 EVK\n"); + else if (is_cpu_type(MXC_CPU_MX6ULZ)) + puts("Board: MX6ULZ 14x14 EVK\n"); + else + puts("Board: IGKBoard\n\n"); + + return 0; +} + +void board_quiesce_devices(void) +{ +#if defined(CONFIG_VIDEO_MXS) + enable_lcdif_clock(LCDIF1_BASE_ADDR, 0); +#endif +} diff -Nuar -x lingyun.bmp uboot-imx/board/lingyun/igkboard/imximage.cfg uboot-imx-lf-5.15.71-2.2.0/board/lingyun/igkboard/imximage.cfg --- uboot-imx/board/lingyun/igkboard/imximage.cfg 1970-01-01 08:00:00.000000000 +0800 +++ uboot-imx-lf-5.15.71-2.2.0/board/lingyun/igkboard/imximage.cfg 2023-03-02 19:25:38.538134223 +0800 @@ -0,0 +1,120 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* + * Copyright (C) 2016 Freescale Semiconductor, Inc. + * Copyright 2017 NXP + * + * Refer doc/imx/mkimage/imximage.txt for more details about how-to configure + * and create imximage boot image + * + * The syntax is taken as close as possible with the kwbimage + */ + +#include <config.h> + +/* image version */ + +IMAGE_VERSION 2 + +/* + * Boot Device : one of + * spi/sd/nand/onenand, qspi/nor + */ + +#ifdef CONFIG_QSPI_BOOT +BOOT_FROM qspi +#elif defined(CONFIG_NOR_BOOT) +BOOT_FROM nor +#else +BOOT_FROM sd +#endif + +#ifdef CONFIG_USE_IMXIMG_PLUGIN +/*PLUGIN plugin-binary-file IRAM_FREE_START_ADDR*/ +PLUGIN board/freescale/mx6ullevk/plugin.bin 0x00907000 +#else + +#ifdef CONFIG_IMX_HAB +CSF CONFIG_CSF_SIZE +#endif + +/* + * Device Configuration Data (DCD) + * + * Each entry must have the format: + * Addr-type Address Value + * + * where: + * Addr-type register length (1,2 or 4 bytes) + * Address absolute address of the register + * value value to be stored in the register + */ + +/* Enable all clocks */ +DATA 4 0x020c4068 0xffffffff +DATA 4 0x020c406c 0xffffffff +DATA 4 0x020c4070 0xffffffff +DATA 4 0x020c4074 0xffffffff +DATA 4 0x020c4078 0xffffffff +DATA 4 0x020c407c 0xffffffff +DATA 4 0x020c4080 0xffffffff + +#ifdef CONFIG_IMX_OPTEE +DATA 4 0x20e4024 0x00000001 +CHECK_BITS_SET 4 0x20e4024 0x1 +#endif + +DATA 4 0x020E04B4 0x000C0000 +DATA 4 0x020E04AC 0x00000000 +DATA 4 0x020E027C 0x00000030 +DATA 4 0x020E0250 0x00000030 +DATA 4 0x020E024C 0x00000030 +DATA 4 0x020E0490 0x00000030 +DATA 4 0x020E0288 0x000C0030 +DATA 4 0x020E0270 0x00000000 +DATA 4 0x020E0260 0x00000030 +DATA 4 0x020E0264 0x00000030 +DATA 4 0x020E04A0 0x00000030 +DATA 4 0x020E0494 0x00020000 +DATA 4 0x020E0280 0x00000030 +DATA 4 0x020E0284 0x00000030 +DATA 4 0x020E04B0 0x00020000 +DATA 4 0x020E0498 0x00000030 +DATA 4 0x020E04A4 0x00000030 +DATA 4 0x020E0244 0x00000030 +DATA 4 0x020E0248 0x00000030 +DATA 4 0x021B001C 0x00008000 +DATA 4 0x021B0800 0xA1390003 +DATA 4 0x021B080C 0x00000004 +DATA 4 0x021B083C 0x41640158 +DATA 4 0x021B0848 0x40403237 +DATA 4 0x021B0850 0x40403C33 +DATA 4 0x021B081C 0x33333333 +DATA 4 0x021B0820 0x33333333 +DATA 4 0x021B082C 0xf3333333 +DATA 4 0x021B0830 0xf3333333 +DATA 4 0x021B08C0 0x00944009 +DATA 4 0x021B08b8 0x00000800 +DATA 4 0x021B0004 0x0002002D +DATA 4 0x021B0008 0x1B333030 +DATA 4 0x021B000C 0x676B52F3 +DATA 4 0x021B0010 0xB66D0B63 +DATA 4 0x021B0014 0x01FF00DB +DATA 4 0x021B0018 0x00201740 +DATA 4 0x021B001C 0x00008000 +DATA 4 0x021B002C 0x000026D2 +DATA 4 0x021B0030 0x006B1023 +DATA 4 0x021B0040 0x0000004F +DATA 4 0x021B0000 0x84180000 +DATA 4 0x021B0890 0x00400000 +DATA 4 0x021B001C 0x02008032 +DATA 4 0x021B001C 0x00008033 +DATA 4 0x021B001C 0x00048031 +DATA 4 0x021B001C 0x15208030 +DATA 4 0x021B001C 0x04008040 +DATA 4 0x021B0020 0x00000800 +DATA 4 0x021B0818 0x00000227 +DATA 4 0x021B0004 0x0002552D +DATA 4 0x021B0404 0x00011006 +DATA 4 0x021B001C 0x00000000 + +#endif diff -Nuar -x lingyun.bmp uboot-imx/board/lingyun/igkboard/imximage_lpddr2.cfg uboot-imx-lf-5.15.71-2.2.0/board/lingyun/igkboard/imximage_lpddr2.cfg --- uboot-imx/board/lingyun/igkboard/imximage_lpddr2.cfg 1970-01-01 08:00:00.000000000 +0800 +++ uboot-imx-lf-5.15.71-2.2.0/board/lingyun/igkboard/imximage_lpddr2.cfg 2023-03-02 19:27:04.828095866 +0800 @@ -0,0 +1,125 @@ +/* + * Copyright (C) 2016 Freescale Semiconductor, Inc. + * Copyright 2017 NXP + * + * SPDX-License-Identifier: GPL-2.0+ + * + * Refer docs/README.imxmage for more details about how-to configure + * and create imximage boot image + * + * The syntax is taken as close as possible with the kwbimage + */ + +#include <config.h> + +/* image version */ + +IMAGE_VERSION 2 + +/* + * Boot Device : one of + * spi/sd/nand/onenand, qspi/nor + */ + +#ifdef CONFIG_QSPI_BOOT +BOOT_FROM qspi +#elif defined(CONFIG_NOR_BOOT) +BOOT_FROM nor +#else +BOOT_FROM sd +#endif + +#ifdef CONFIG_USE_IMXIMG_PLUGIN +/*PLUGIN plugin-binary-file IRAM_FREE_START_ADDR*/ +PLUGIN board/lingyun/igkboard/plugin.bin 0x00907000 +#else + +#ifdef CONFIG_IMX_HAB +CSF CONFIG_CSF_SIZE +#endif + +/* + * Device Configuration Data (DCD) + * + * Each entry must have the format: + * Addr-type Address Value + * + * where: + * Addr-type register length (1,2 or 4 bytes) + * Address absolute address of the register + * value value to be stored in the register + */ + +DATA 4 0x020c4068 0xffffffff +DATA 4 0x020c406c 0xffffffff +DATA 4 0x020c4070 0xffffffff +DATA 4 0x020c4074 0xffffffff +DATA 4 0x020c4078 0xffffffff +DATA 4 0x020c407c 0xffffffff +DATA 4 0x020c4080 0xffffffff + +#ifdef CONFIG_IMX_OPTEE +DATA 4 0x20e4024 0x00000001 +CHECK_BITS_SET 4 0x20e4024 0x1 +#endif + +DATA 4 0x020E04B4 0x00080000 +DATA 4 0x020E04AC 0x00000000 +DATA 4 0x020E027C 0x00000030 +DATA 4 0x020E0250 0x00000030 +DATA 4 0x020E024C 0x00000030 +DATA 4 0x020E0490 0x00000030 +DATA 4 0x020E0288 0x00000030 +DATA 4 0x020E0270 0x00000000 +DATA 4 0x020E0260 0x00000000 +DATA 4 0x020E0264 0x00000000 +DATA 4 0x020E04A0 0x00000030 +DATA 4 0x020E0494 0x00020000 +DATA 4 0x020E0280 0x00003030 +DATA 4 0x020E0284 0x00003030 +DATA 4 0x020E04B0 0x00020000 +DATA 4 0x020E0498 0x00000030 +DATA 4 0x020E04A4 0x00000030 +DATA 4 0x020E0244 0x00000030 +DATA 4 0x020E0248 0x00000030 + +DATA 4 0x021B001C 0x00008000 +DATA 4 0x021B085C 0x1b4700c7 +DATA 4 0x021B0800 0xA1390003 +DATA 4 0x021B0890 0x23400A38 +DATA 4 0x021B08b8 0x00000800 + +DATA 4 0x021B081C 0x33333333 +DATA 4 0x021B0820 0x33333333 +DATA 4 0x021B082C 0xf3333333 +DATA 4 0x021B0830 0xf3333333 +DATA 4 0x021B083C 0x20000000 +DATA 4 0x021B0848 0x40403439 +DATA 4 0x021B0850 0x4040342D +DATA 4 0x021B08C0 0x00921012 +DATA 4 0x021B08b8 0x00000800 + +DATA 4 0x021B0004 0x00020052 +DATA 4 0x021B0008 0x00000000 +DATA 4 0x021B000C 0x33374133 +DATA 4 0x021B0010 0x00100A82 +DATA 4 0x021B0038 0x00170557 +DATA 4 0x021B0014 0x00000093 +DATA 4 0x021B0018 0x00201748 +DATA 4 0x021B002C 0x0F9F26D2 +DATA 4 0x021B0030 0x009F0010 +DATA 4 0x021B0040 0x00000047 +DATA 4 0x021B0000 0x83100000 +DATA 4 0x021B001C 0x00008010 +DATA 4 0x021B001C 0x003F8030 +DATA 4 0x021B001C 0xFF0A8030 +DATA 4 0x021B001C 0x82018030 +DATA 4 0x021B001C 0x04028030 +DATA 4 0x021B001C 0x01038030 +DATA 4 0x021B0020 0x00001800 +DATA 4 0x021B0818 0x00000000 +DATA 4 0x021B0800 0xA1310003 +DATA 4 0x021B0004 0x00025552 +DATA 4 0x021B0404 0x00011006 +DATA 4 0x021B001C 0x00000000 +#endif diff -Nuar -x lingyun.bmp uboot-imx/board/lingyun/igkboard/Kconfig uboot-imx-lf-5.15.71-2.2.0/board/lingyun/igkboard/Kconfig --- uboot-imx/board/lingyun/igkboard/Kconfig 1970-01-01 08:00:00.000000000 +0800 +++ uboot-imx-lf-5.15.71-2.2.0/board/lingyun/igkboard/Kconfig 2023-03-02 19:38:06.119611122 +0800 @@ -0,0 +1,14 @@ +if TARGET_LINGYUN_IGKBOARD + +config SYS_BOARD + default "igkboard" + +config SYS_VENDOR + default "lingyun" + +config SYS_CONFIG_NAME + default "igkboard" + +config SYS_TEXT_BASE + default 0x87800000 +endif diff -Nuar -x lingyun.bmp uboot-imx/board/lingyun/igkboard/MAINTAINERS uboot-imx-lf-5.15.71-2.2.0/board/lingyun/igkboard/MAINTAINERS --- uboot-imx/board/lingyun/igkboard/MAINTAINERS 1970-01-01 08:00:00.000000000 +0800 +++ uboot-imx-lf-5.15.71-2.2.0/board/lingyun/igkboard/MAINTAINERS 2023-03-02 19:31:23.110034004 +0800 @@ -0,0 +1,7 @@ +LingYun IoT Gateway Board(IGKBoard) +M: Guo Wenxue <guowenxue@gmail.com> +S: Maintained +F: board/lingyun/igkboard/ +F: include/configs/igkboard.h +F: configs/igkboard_defconfig + diff -Nuar -x lingyun.bmp uboot-imx/board/lingyun/igkboard/Makefile uboot-imx-lf-5.15.71-2.2.0/board/lingyun/igkboard/Makefile --- uboot-imx/board/lingyun/igkboard/Makefile 1970-01-01 08:00:00.000000000 +0800 +++ uboot-imx-lf-5.15.71-2.2.0/board/lingyun/igkboard/Makefile 2023-03-02 19:34:14.062045206 +0800 @@ -0,0 +1,5 @@ +# SPDX-License-Identifier: GPL-2.0+ +# (C) Copyright 2016 Freescale Semiconductor, Inc. + +obj-y := igkboard.o +obj-y += ../../freescale/common/mmc.o diff -Nuar -x lingyun.bmp uboot-imx/board/lingyun/igkboard/plugin.S uboot-imx-lf-5.15.71-2.2.0/board/lingyun/igkboard/plugin.S --- uboot-imx/board/lingyun/igkboard/plugin.S 1970-01-01 08:00:00.000000000 +0800 +++ uboot-imx-lf-5.15.71-2.2.0/board/lingyun/igkboard/plugin.S 2023-03-02 19:25:38.542134128 +0800 @@ -0,0 +1,263 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* + * Copyright (C) 2016 Freescale Semiconductor, Inc. + * Copyright 2017 NXP + */ + +#include <config.h> + +/* DDR script */ +.macro imx6ull_ddr3_evk_setting + ldr r0, =IOMUXC_BASE_ADDR + ldr r1, =0x000C0000 + str r1, [r0, #0x4B4] + ldr r1, =0x00000000 + str r1, [r0, #0x4AC] + ldr r1, =0x00000030 + str r1, [r0, #0x27C] + ldr r1, =0x00000030 + str r1, [r0, #0x250] + str r1, [r0, #0x24C] + str r1, [r0, #0x490] + ldr r1, =0x000C0030 + str r1, [r0, #0x288] + + ldr r1, =0x00000000 + str r1, [r0, #0x270] + + ldr r1, =0x00000030 + str r1, [r0, #0x260] + str r1, [r0, #0x264] + str r1, [r0, #0x4A0] + + ldr r1, =0x00020000 + str r1, [r0, #0x494] + + ldr r1, =0x00000030 + str r1, [r0, #0x280] + ldr r1, =0x00000030 + str r1, [r0, #0x284] + + ldr r1, =0x00020000 + str r1, [r0, #0x4B0] + + ldr r1, =0x00000030 + str r1, [r0, #0x498] + str r1, [r0, #0x4A4] + str r1, [r0, #0x244] + str r1, [r0, #0x248] + + ldr r0, =MMDC_P0_BASE_ADDR + ldr r1, =0x00008000 + str r1, [r0, #0x1C] + ldr r1, =0xA1390003 + str r1, [r0, #0x800] + ldr r1, =0x00000004 + str r1, [r0, #0x80C] + ldr r1, =0x41640158 + str r1, [r0, #0x83C] + ldr r1, =0x40403237 + str r1, [r0, #0x848] + ldr r1, =0x40403C33 + str r1, [r0, #0x850] + ldr r1, =0x33333333 + str r1, [r0, #0x81C] + str r1, [r0, #0x820] + ldr r1, =0xF3333333 + str r1, [r0, #0x82C] + str r1, [r0, #0x830] + ldr r1, =0x00944009 + str r1, [r0, #0x8C0] + ldr r1, =0x00000800 + str r1, [r0, #0x8B8] + ldr r1, =0x0002002D + str r1, [r0, #0x004] + ldr r1, =0x1B333030 + str r1, [r0, #0x008] + ldr r1, =0x676B52F3 + str r1, [r0, #0x00C] + ldr r1, =0xB66D0B63 + str r1, [r0, #0x010] + ldr r1, =0x01FF00DB + str r1, [r0, #0x014] + ldr r1, =0x00201740 + str r1, [r0, #0x018] + ldr r1, =0x00008000 + str r1, [r0, #0x01C] + ldr r1, =0x000026D2 + str r1, [r0, #0x02C] + ldr r1, =0x006B1023 + str r1, [r0, #0x030] + ldr r1, =0x0000004F + str r1, [r0, #0x040] + ldr r1, =0x84180000 + str r1, [r0, #0x000] + ldr r1, =0x00400000 + str r1, [r0, #0x890] + ldr r1, =0x02008032 + str r1, [r0, #0x01C] + ldr r1, =0x00008033 + str r1, [r0, #0x01C] + ldr r1, =0x00048031 + str r1, [r0, #0x01C] + ldr r1, =0x15208030 + str r1, [r0, #0x01C] + ldr r1, =0x04008040 + str r1, [r0, #0x01C] + ldr r1, =0x00000800 + str r1, [r0, #0x020] + ldr r1, =0x00000227 + str r1, [r0, #0x818] + ldr r1, =0x0002552D + str r1, [r0, #0x004] + ldr r1, =0x00011006 + str r1, [r0, #0x404] + ldr r1, =0x00000000 + str r1, [r0, #0x01C] +.endm + +.macro imx6ull_lpddr2_evk_setting + ldr r0, =IOMUXC_BASE_ADDR + ldr r1, =0x00080000 + str r1, [r0, #0x4B4] + ldr r1, =0x00000000 + str r1, [r0, #0x4AC] + ldr r1, =0x00000030 + str r1, [r0, #0x27C] + str r1, [r0, #0x250] + str r1, [r0, #0x24C] + str r1, [r0, #0x490] + str r1, [r0, #0x288] + + ldr r1, =0x00000000 + str r1, [r0, #0x270] + str r1, [r0, #0x260] + str r1, [r0, #0x264] + + ldr r1, =0x00000030 + str r1, [r0, #0x4A0] + + ldr r1, =0x00020000 + str r1, [r0, #0x494] + + ldr r1, =0x00003030 + str r1, [r0, #0x280] + ldr r1, =0x00003030 + str r1, [r0, #0x284] + + ldr r1, =0x00020000 + str r1, [r0, #0x4B0] + + ldr r1, =0x00000030 + str r1, [r0, #0x498] + str r1, [r0, #0x4A4] + str r1, [r0, #0x244] + str r1, [r0, #0x248] + + ldr r0, =MMDC_P0_BASE_ADDR + ldr r1, =0x00008000 + str r1, [r0, #0x1C] + ldr r1, =0x1b4700c7 + str r1, [r0, #0x85c] + ldr r1, =0xA1390003 + str r1, [r0, #0x800] + ldr r1, =0x23400A38 + str r1, [r0, #0x890] + ldr r1, =0x00000800 + str r1, [r0, #0x8b8] + ldr r1, =0x33333333 + str r1, [r0, #0x81C] + str r1, [r0, #0x820] + ldr r1, =0xF3333333 + str r1, [r0, #0x82C] + str r1, [r0, #0x830] + ldr r1, =0x20000000 + str r1, [r0, #0x83C] + ldr r1, =0x40403439 + str r1, [r0, #0x848] + ldr r1, =0x4040342D + str r1, [r0, #0x850] + ldr r1, =0x00921012 + str r1, [r0, #0x8C0] + ldr r1, =0x00000800 + str r1, [r0, #0x8B8] + + ldr r1, =0x00020052 + str r1, [r0, #0x004] + ldr r1, =0x00000000 + str r1, [r0, #0x008] + ldr r1, =0x33374133 + str r1, [r0, #0x00C] + ldr r1, =0x00100A82 + str r1, [r0, #0x010] + ldr r1, =0x00170557 + str r1, [r0, #0x038] + ldr r1, =0x00000093 + str r1, [r0, #0x014] + ldr r1, =0x00201748 + str r1, [r0, #0x018] + ldr r1, =0x0F9F26D2 + str r1, [r0, #0x02C] + ldr r1, =0x009F0010 + str r1, [r0, #0x030] + ldr r1, =0x00000047 + str r1, [r0, #0x040] + ldr r1, =0x83100000 + str r1, [r0, #0x000] + ldr r1, =0x00008010 + str r1, [r0, #0x01C] + ldr r1, =0x003F8030 + str r1, [r0, #0x01C] + ldr r1, =0xFF0A8030 + str r1, [r0, #0x01C] + ldr r1, =0x82018030 + str r1, [r0, #0x01C] + ldr r1, =0x04028030 + str r1, [r0, #0x01C] + ldr r1, =0x01038030 + str r1, [r0, #0x01C] + ldr r1, =0x00001800 + str r1, [r0, #0x020] + ldr r1, =0x00000000 + str r1, [r0, #0x818] + ldr r1, =0xA1310003 + str r1, [r0, #0x800] + ldr r1, =0x00025552 + str r1, [r0, #0x004] + ldr r1, =0x00011006 + str r1, [r0, #0x404] + ldr r1, =0x00000000 + str r1, [r0, #0x01C] +.endm + +.macro imx6_clock_gating + ldr r0, =CCM_BASE_ADDR + ldr r1, =0xFFFFFFFF + str r1, [r0, #0x68] + str r1, [r0, #0x6C] + str r1, [r0, #0x70] + str r1, [r0, #0x74] + str r1, [r0, #0x78] + str r1, [r0, #0x7C] + str r1, [r0, #0x80] + +#ifdef CONFIG_IMX_OPTEE + ldr r0, =0x20e4024 + ldr r1, =0x1 + str r1, [r0] +#endif +.endm + +.macro imx6_qos_setting +.endm + +.macro imx6_ddr_setting +#if defined (CONFIG_TARGET_MX6ULL_9X9_EVK) + imx6ull_lpddr2_evk_setting +#else + imx6ull_ddr3_evk_setting +#endif +.endm + +/* include the common plugin code here */ +#include <asm/arch/mx6_plugin.S> diff -Nuar -x lingyun.bmp uboot-imx/configs/igkboard_defconfig uboot-imx-lf-5.15.71-2.2.0/configs/igkboard_defconfig --- uboot-imx/configs/igkboard_defconfig 1970-01-01 08:00:00.000000000 +0800 +++ uboot-imx-lf-5.15.71-2.2.0/configs/igkboard_defconfig 2023-03-02 20:35:18.243274052 +0800 @@ -0,0 +1,113 @@ +CONFIG_ARM=y +CONFIG_ARCH_MX6=y +CONFIG_SYS_MALLOC_LEN=0x1000000 +CONFIG_NR_DRAM_BANKS=1 +CONFIG_SYS_MEMTEST_START=0x80000000 +CONFIG_SYS_MEMTEST_END=0x88000000 +CONFIG_ENV_SIZE=0x2000 +CONFIG_ENV_OFFSET=0xE0000 +CONFIG_IMX_CONFIG="board/lingyun/igkboard/imximage.cfg" +CONFIG_SYS_PROMPT="[u-boot@igkboard]# " +CONFIG_MX6ULL=y +CONFIG_TARGET_LINGYUN_IGKBOARD=y +CONFIG_SYS_I2C_MXC_I2C1=y +CONFIG_SYS_I2C_MXC_I2C2=y +CONFIG_DM_GPIO=y +CONFIG_DEFAULT_DEVICE_TREE="igkboard" +CONFIG_SUPPORT_RAW_INITRD=y +CONFIG_USE_BOOTCOMMAND=y +CONFIG_BOOTDELAY=3 +# CONFIG_CONSOLE_MUX is not set +CONFIG_SYS_CONSOLE_IS_IN_ENV=y +CONFIG_BOARD_EARLY_INIT_F=y +CONFIG_HUSH_PARSER=y +CONFIG_CMD_BOOTZ=y +# CONFIG_CMD_IMLS is not set +CONFIG_CMD_MEMTEST=y +CONFIG_CMD_GPIO=y +CONFIG_CMD_I2C=y +CONFIG_CMD_MMC=y +CONFIG_CMD_SF=y +CONFIG_CMD_USB=y +CONFIG_CMD_DHCP=y +CONFIG_CMD_PING=y +CONFIG_CMD_BMP=y +CONFIG_CMD_CACHE=y +CONFIG_CMD_NET=y +CONFIG_CMD_EXT2=y +CONFIG_CMD_EXT4=y +CONFIG_CMD_EXT4_WRITE=y +CONFIG_CMD_FAT=y +CONFIG_CMD_FS_GENERIC=y +CONFIG_OF_CONTROL=y +CONFIG_ENV_OVERWRITE=y +CONFIG_ENV_IS_IN_MMC=y +CONFIG_SYS_RELOC_GD_ENV_ADDR=y +CONFIG_SYS_MMC_ENV_DEV=1 +CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y +CONFIG_BOUNCE_BUFFER=y +CONFIG_DM_74X164=y +CONFIG_DM_I2C=y +CONFIG_SYS_I2C_MXC=y +CONFIG_FSL_USDHC=y +CONFIG_MTD=y +CONFIG_DM_SPI_FLASH=y +CONFIG_SF_DEFAULT_SPEED=40000000 +CONFIG_SPI_FLASH_STMICRO=y +CONFIG_PHYLIB=y +CONFIG_PHY_MICREL=y +CONFIG_PHY_MICREL_KSZ8XXX=y +CONFIG_DM_ETH=y +CONFIG_DM_ETH_PHY=y +CONFIG_FEC_MXC=y +CONFIG_MII=y +CONFIG_PINCTRL=y +CONFIG_PINCTRL_IMX6=y +CONFIG_DM_REGULATOR=y +CONFIG_DM_REGULATOR_FIXED=y +CONFIG_DM_REGULATOR_GPIO=y +CONFIG_MXC_UART=y +CONFIG_SPI=y +CONFIG_DM_SPI=y +CONFIG_FSL_QSPI=y +CONFIG_SOFT_SPI=y +CONFIG_IMX_THERMAL=y +CONFIG_USB=y +CONFIG_USB_STORAGE=y +CONFIG_CMD_USB_MASS_STORAGE=y +CONFIG_USB_HOST_ETHER=y +CONFIG_USB_ETHER_ASIX=y +CONFIG_DM_VIDEO=y +CONFIG_VIDEO_LOGO=y +CONFIG_SYS_WHITE_ON_BLACK=y +CONFIG_VIDEO_MXS=y +CONFIG_SPLASH_SCREEN=y +CONFIG_SPLASH_SCREEN_ALIGN=y +CONFIG_BMP_16BPP=y + +CONFIG_USB_GADGET=y +CONFIG_USB_GADGET_DOWNLOAD=y +CONFIG_USB_GADGET_MANUFACTURER="FSL" +CONFIG_USB_GADGET_VENDOR_NUM=0x0525 +CONFIG_USB_GADGET_PRODUCT_NUM=0xa4a5 +CONFIG_CI_UDC=y + +CONFIG_CMD_FASTBOOT=y +CONFIG_USB_FUNCTION_FASTBOOT=y +CONFIG_FASTBOOT_UUU_SUPPORT=y +CONFIG_FASTBOOT=y +CONFIG_FASTBOOT_BUF_ADDR=0x83800000 +CONFIG_FASTBOOT_BUF_SIZE=0x40000000 +CONFIG_FASTBOOT_FLASH=y +CONFIG_EFI_PARTITION=y +CONFIG_ARCH_MISC_INIT=y +CONFIG_DM_RNG=y +CONFIG_CMD_RNG=y +CONFIG_FSL_DCP_RNG=y +CONFIG_OF_SYSTEM_SETUP=y +CONFIG_CMD_CRC32=y +CONFIG_CRC32_VERIFY=y + +CONFIG_OF_LIBFDT_OVERLAY=y +CONFIG_NET_RANDOM_ETHADDR=y +CONFIG_DM_SERIAL=y diff -Nuar -x lingyun.bmp uboot-imx/drivers/fastboot/fb_fsl/fb_fsl_partitions.c uboot-imx-lf-5.15.71-2.2.0/drivers/fastboot/fb_fsl/fb_fsl_partitions.c --- uboot-imx/drivers/fastboot/fb_fsl/fb_fsl_partitions.c 2023-03-01 18:01:21.000000000 +0800 +++ uboot-imx-lf-5.15.71-2.2.0/drivers/fastboot/fb_fsl/fb_fsl_partitions.c 2023-03-02 19:43:57.072457191 +0800 @@ -188,6 +188,11 @@ user_partition = FASTBOOT_MMC_USER_PARTITION_ID; boot_loader_psize = mmc->capacity_boot; } + /* add by guowenxue to export mmc_no env */ + env_set_ulong("mmc_no", mmc_no); + env_set_ulong("mmcdev", mmc_no); + env_set_ulong("emmc_dev", mmc_no); + env_set_ulong("emmc_ack", mmc_no); } else { printf("Can't setup partition table on this device %d\n", fastboot_devinfo.type); diff -Nuar -x lingyun.bmp uboot-imx/drivers/net/phy/phy.c uboot-imx-lf-5.15.71-2.2.0/drivers/net/phy/phy.c --- uboot-imx/drivers/net/phy/phy.c 2023-03-01 18:01:21.000000000 +0800 +++ uboot-imx-lf-5.15.71-2.2.0/drivers/net/phy/phy.c 2023-03-02 19:44:33.731379192 +0800 @@ -182,6 +182,8 @@ { int result; + phy_reset(phydev); + if (phydev->autoneg != AUTONEG_ENABLE) return genphy_setup_forced(phydev); diff -Nuar -x lingyun.bmp uboot-imx/include/configs/igkboard.h uboot-imx-lf-5.15.71-2.2.0/include/configs/igkboard.h --- uboot-imx/include/configs/igkboard.h 1970-01-01 08:00:00.000000000 +0800 +++ uboot-imx-lf-5.15.71-2.2.0/include/configs/igkboard.h 2023-03-02 19:51:56.499121509 +0800 @@ -0,0 +1,172 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* + * Copyright (C) 2016 Freescale Semiconductor, Inc. + * Copyright 2017 NXP + * + * Configuration settings for the Freescale i.MX6UL 14x14 EVK board. + */ +#ifndef __IGKBOARD_CONFIG_H +#define __IGKBOARD_CONFIG_H + + +#include <asm/arch/imx-regs.h> +#include <linux/sizes.h> +#include <linux/stringify.h> +#include "mx6_common.h" +#include <asm/mach-imx/gpio.h> +#include "imx_env.h" + +#define is_mx6ull_9x9_evk() CONFIG_IS_ENABLED(TARGET_MX6ULL_9X9_EVK) + +#ifdef CONFIG_TARGET_MX6ULL_9X9_EVK +#define PHYS_SDRAM_SIZE SZ_256M +#define BOOTARGS_CMA_SIZE "cma=96M " +#else +#define PHYS_SDRAM_SIZE SZ_512M +#define BOOTARGS_CMA_SIZE "" +/* DCDC used on 14x14 EVK, no PMIC */ +#undef CONFIG_LDO_BYPASS_CHECK +#endif + +#define CONFIG_MXC_UART_BASE UART1_BASE + +/* MMC Configs */ +#ifdef CONFIG_FSL_USDHC +#define CONFIG_SYS_FSL_ESDHC_ADDR USDHC2_BASE_ADDR + +/* NAND pin conflicts with usdhc2 */ +#ifdef CONFIG_NAND_MXS +#define CONFIG_SYS_FSL_USDHC_NUM 1 +#else +#define CONFIG_SYS_FSL_USDHC_NUM 2 +#endif + +#endif + + +#ifdef CONFIG_NAND_BOOT +#define MFG_NAND_PARTITION "mtdparts=gpmi-nand:64m(nandboot),16m(nandkernel),16m(nanddtb),16m(nandtee),-(nandrootfs)" +#else +#define MFG_NAND_PARTITION "" +#endif + +#define CONFIG_CMD_READ +#define CONFIG_SERIAL_TAG +#define CONFIG_FASTBOOT_USB_DEV 0 + +#define CONFIG_MFG_ENV_SETTINGS \ + CONFIG_MFG_ENV_SETTINGS_DEFAULT \ + "initrd_addr=0x86800000\0" \ + "initrd_high=0xffffffff\0" \ + "emmc_dev=1\0"\ + "emmc_ack=1\0"\ + "sd_dev=1\0" \ + "mtdparts=" MFG_NAND_PARTITION \ + "\0"\ + +#if defined(CONFIG_NAND_BOOT) +#define CONFIG_EXTRA_ENV_SETTINGS \ + CONFIG_MFG_ENV_SETTINGS \ + TEE_ENV \ + "splashimage=0x8c000000\0" \ + "fdt_addr=0x83000000\0" \ + "fdt_high=0xffffffff\0" \ + "tee_addr=0x84000000\0" \ + "console=ttymxc0\0" \ + "bootargs=console=ttymxc0,115200 ubi.mtd=nandrootfs " \ + "root=ubi0:rootfs rootfstype=ubifs " \ + BOOTARGS_CMA_SIZE \ + MFG_NAND_PARTITION \ + "\0" \ + "bootcmd=nand read ${loadaddr} 0x4000000 0xc00000;"\ + "nand read ${fdt_addr} 0x5000000 0x100000;"\ + "if test ${tee} = yes; then " \ + "nand read ${tee_addr} 0x6000000 0x400000;"\ + "bootm ${tee_addr} - ${fdt_addr};" \ + "else " \ + "bootz ${loadaddr} - ${fdt_addr};" \ + "fi\0" + +#else +#include "igkboard_overlay.h" + +#define CONFIG_EXTRA_ENV_SETTINGS \ + "env_conf=config.txt\0" \ + "image=zImage\0" \ + "console=ttymxc0\0" \ + "fdt_file=igkboard.dtb\0" \ + "fdt_addr=0x83000000\0" \ + "splashimage=0x8c000000\0" \ + "ipaddr=192.168.2.22\0" \ + "serverip=192.168.2.2\0" \ + "mmcpart=1\0" \ + "mmcargs=setenv bootargs console=${console},${baudrate} root=/dev/mmcblk${mmc_no}p2 rootwait rw net.ifnames=0\0" \ + "loadenvconf=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${env_conf};env import -t ${loadaddr} ${filesize}\0" \ + "loadimage=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image}\0" \ + "loadfdt=fatload mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdt_file}\0" \ + "bdtb=tftp $fdt_addr $fdt_file && fatwrite mmc 1:1 $fdt_addr $fdt_file $filesize\0" \ + "bker=tftp $loadaddr $image&& fatwrite mmc 1:1 $loadaddr $image $filesize\0" \ + "bsys=run bdtb && run bker\0" \ + "mmcboot=echo Booting from mmc ...; " \ + "mmc dev ${mmcdev}; " \ + "run mmcargs; run loadenvconf;" \ + "run loadimage; run loadfdt; " \ + "bootz ${loadaddr} - ${fdt_addr}\0" \ + "netboot=echo Booting from net ...; " \ + "tftp $loadaddr $image; tftp $fdt_addr ${fdt_file};" \ + "run mmcargs; " \ + "bootz ${loadaddr} - ${fdt_addr}\0" \ + "upmode=fastboot 0\0" \ + "bbl=tftp ${loadaddr} u-boot-igkboard.imx && mmc dev ${mmcdev} 1 && mmc write ${loadaddr} 2 0x500\0" \ + MMC_FDT_OVERLAY_SETTING \ + "bootcmd=run mmcbootdto\0" \ + "author=linke\0" +#endif + +/* Miscellaneous configurable options */ + +/* Physical Memory Map */ +#define PHYS_SDRAM MMDC0_ARB_BASE_ADDR + +#define CONFIG_SYS_SDRAM_BASE PHYS_SDRAM +#define CONFIG_SYS_INIT_RAM_ADDR IRAM_BASE_ADDR +#define CONFIG_SYS_INIT_RAM_SIZE IRAM_SIZE + +#define CONFIG_SYS_INIT_SP_OFFSET \ + (CONFIG_SYS_INIT_RAM_SIZE - GENERATED_GBL_DATA_SIZE) +#define CONFIG_SYS_INIT_SP_ADDR \ + (CONFIG_SYS_INIT_RAM_ADDR + CONFIG_SYS_INIT_SP_OFFSET) + +/* environment organization */ +#define CONFIG_SYS_MMC_ENV_DEV 1 /* USDHC2 */ +#define CONFIG_MMCROOT "/dev/mmcblk1p2" /* USDHC2 */ + +#define CONFIG_IOMUX_LPSR + +/* NAND stuff */ +#ifdef CONFIG_NAND_MXS +#define CONFIG_SYS_MAX_NAND_DEVICE 1 +#define CONFIG_SYS_NAND_BASE 0x40000000 +#define CONFIG_SYS_NAND_USE_FLASH_BBT + +/* DMA stuff, needed for GPMI/MXS NAND support */ +#endif + +/* USB Configs */ +#ifdef CONFIG_CMD_USB +#define CONFIG_EHCI_HCD_INIT_AFTER_RESET +#define CONFIG_MXC_USB_PORTSC (PORT_PTS_UTMI | PORT_PTS_PTW) +#define CONFIG_MXC_USB_FLAGS 0 +#define CONFIG_USB_MAX_CONTROLLER_COUNT 2 +#endif + +#define CONFIG_FEC_XCV_TYPE RMII +#define CONFIG_ETHPRIME "eth1" + +#ifndef CONFIG_SPL_BUILD +#if defined(CONFIG_DM_VIDEO) +#define CONFIG_VIDEO_LINK +#endif +#endif + +#endif diff -Nuar -x lingyun.bmp uboot-imx/include/configs/igkboard_overlay.h uboot-imx-lf-5.15.71-2.2.0/include/configs/igkboard_overlay.h --- uboot-imx/include/configs/igkboard_overlay.h 1970-01-01 08:00:00.000000000 +0800 +++ uboot-imx-lf-5.15.71-2.2.0/include/configs/igkboard_overlay.h 2023-03-02 19:53:11.273148700 +0800 @@ -0,0 +1,88 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* + * Copyright (C) 2022 LingYun IoT System Studio + * + * Device Tree overlay env for the LingYun IoT Gateway Board. + */ +#ifndef __IGKBOARD_OVERLAY_H +#define __IGKBOARD_OVERLAY_H + +#if 0 + dtoverlay_xxx is set in uEnv.txt, then load the corresponding dtbo file + + if env exists dtoverlay_lcd && test ${dtoverlay_lcd} = 1 -o ${dtoverlay_lcd} = yes ; then + dtbo_file=lcd.dtbo; + echo "Applying DT overlay: $dtbo_file"; + fatload mmc ${mmcdev}:${mmcpart} ${dtbo_addr} ${dtbo_dir}/${dtbo_file}; + fdt addr ${fdt_addr}; + fdt resize ${fdt_size}; + fdt apply ${dtbo_addr}; + fi; + + + if env exists dtoverlay_uart ; then + for i in ${dtoverlay_uart}; + do + dtbo_file=uart$i.dtbo; + echo "Applying DT overlay: $dtbo_file"; + fatload mmc ${mmcdev}:${mmcpart} ${dtbo_addr} ${dtbo_dir}/${dtbo_file}; + fdt addr ${fdt_addr}; + fdt apply ${dtbo_addr}; + done; + fi; + +#endif + + +#define FDT_APPLY_OVERLAY() \ + "echo Applying DT overlay ==> ${dtbo_file}; " \ + "fatload mmc ${mmcdev}:${mmcpart} ${dtbo_addr} ${dtbo_dir}/${dtbo_file}; " \ + "fdt addr ${fdt_addr}; " \ + "fdt resize ${fdt_size}; " \ + "fdt apply ${dtbo_addr}; " + +#define CHECK_APPLY_OVERLAY( name ) \ + "if env exists dtoverlay_" name " && test ${dtoverlay_" name "} = 1 -o ${dtoverlay_" name "} = yes ; then " \ + "setenv dtbo_file " name ".dtbo; " \ + FDT_APPLY_OVERLAY() \ + "fi; " + +#define CHECK_APPLY_OVERLAYS_IDX( name ) \ + "if env exists dtoverlay_" name "; then " \ + "for i in ${dtoverlay_" name "}; do " \ + "setenv dtbo_file " name "$i.dtbo; " \ + FDT_APPLY_OVERLAY() \ + " done;" \ + "fi; " + +#define CHECK_APPLY_OVERLAYS_DTBO( name ) \ + "if env exists dtoverlay_" name "; then " \ + "for f in ${dtoverlay_" name "}; do " \ + "setenv dtbo_file $f.dtbo; " \ + FDT_APPLY_OVERLAY() \ + " done;" \ + "fi; " + +#define FDT_ENTRY_DEF_SETTINGS \ + CHECK_APPLY_OVERLAY("lcd") \ + CHECK_APPLY_OVERLAY("cam") \ + CHECK_APPLY_OVERLAY("i2c1") \ + CHECK_APPLY_OVERLAY("spi1") \ + CHECK_APPLY_OVERLAYS_IDX("uart") \ + CHECK_APPLY_OVERLAYS_IDX("can") \ + CHECK_APPLY_OVERLAYS_IDX("pwm") \ + CHECK_APPLY_OVERLAYS_DTBO("extra") \ + +#define MMC_FDT_OVERLAY_SETTING \ + "fdt_size=0x10000\0" \ + "dtbo_addr=0x83010000\0" \ + "dtbo_dir=overlays\0" \ + "mmcbootdto=echo Booting from mmc with overlay...; " \ + "mmc dev ${mmcdev}; run mmcargs; run loadenvconf; " \ + "run loadimage; run loadfdt; " \ + FDT_ENTRY_DEF_SETTINGS \ + "bootz ${loadaddr} - ${fdt_addr}\0" + +#define ENABLE_UENV_FDTO_SUPPORT + +#endif diff -Nuar -x lingyun.bmp uboot-imx/Makefile uboot-imx-lf-5.15.71-2.2.0/Makefile --- uboot-imx/Makefile 2023-03-01 18:01:20.000000000 +0800 +++ uboot-imx-lf-5.15.71-2.2.0/Makefile 2023-03-02 20:32:48.794896871 +0800 @@ -6,6 +6,9 @@ EXTRAVERSION = NAME = +ARCH = arm +CROSS_COMPILE = /opt/buildroot/cortexA7/bin/arm-linux- + # *DOCUMENTATION* # To see a list of typical targets execute "make help" # More info can be located in ./README diff -Nuar -x lingyun.bmp uboot-imx/tools/boot/bootm.c uboot-imx-lf-5.15.71-2.2.0/tools/boot/bootm.c --- uboot-imx/tools/boot/bootm.c 1970-01-01 08:00:00.000000000 +0800 +++ uboot-imx-lf-5.15.71-2.2.0/tools/boot/bootm.c 2023-03-02 20:25:55.432891620 +0800 @@ -0,0 +1 @@ +#include <../boot/bootm.c> diff -Nuar -x lingyun.bmp uboot-imx/tools/boot/fdt_region.c uboot-imx-lf-5.15.71-2.2.0/tools/boot/fdt_region.c --- uboot-imx/tools/boot/fdt_region.c 1970-01-01 08:00:00.000000000 +0800 +++ uboot-imx-lf-5.15.71-2.2.0/tools/boot/fdt_region.c 2023-03-02 20:25:55.432891620 +0800 @@ -0,0 +1 @@ +#include <../boot/fdt_region.c> diff -Nuar -x lingyun.bmp uboot-imx/tools/boot/image.c uboot-imx-lf-5.15.71-2.2.0/tools/boot/image.c --- uboot-imx/tools/boot/image.c 1970-01-01 08:00:00.000000000 +0800 +++ uboot-imx-lf-5.15.71-2.2.0/tools/boot/image.c 2023-03-02 20:25:55.432891620 +0800 @@ -0,0 +1 @@ +#include <../boot/image.c> diff -Nuar -x lingyun.bmp uboot-imx/tools/boot/image-cipher.c uboot-imx-lf-5.15.71-2.2.0/tools/boot/image-cipher.c --- uboot-imx/tools/boot/image-cipher.c 1970-01-01 08:00:00.000000000 +0800 +++ uboot-imx-lf-5.15.71-2.2.0/tools/boot/image-cipher.c 2023-03-02 20:25:55.428891716 +0800 @@ -0,0 +1 @@ +#include <../boot/image-cipher.c> diff -Nuar -x lingyun.bmp uboot-imx/tools/boot/image-fit.c uboot-imx-lf-5.15.71-2.2.0/tools/boot/image-fit.c --- uboot-imx/tools/boot/image-fit.c 1970-01-01 08:00:00.000000000 +0800 +++ uboot-imx-lf-5.15.71-2.2.0/tools/boot/image-fit.c 2023-03-02 20:25:55.428891716 +0800 @@ -0,0 +1 @@ +#include <../boot/image-fit.c> diff -Nuar -x lingyun.bmp uboot-imx/tools/boot/image-fit-sig.c uboot-imx-lf-5.15.71-2.2.0/tools/boot/image-fit-sig.c --- uboot-imx/tools/boot/image-fit-sig.c 1970-01-01 08:00:00.000000000 +0800 +++ uboot-imx-lf-5.15.71-2.2.0/tools/boot/image-fit-sig.c 2023-03-02 20:25:55.428891716 +0800 @@ -0,0 +1 @@ +#include <../boot/image-fit-sig.c> diff -Nuar -x lingyun.bmp uboot-imx/tools/boot/image-host.c uboot-imx-lf-5.15.71-2.2.0/tools/boot/image-host.c --- uboot-imx/tools/boot/image-host.c 1970-01-01 08:00:00.000000000 +0800 +++ uboot-imx-lf-5.15.71-2.2.0/tools/boot/image-host.c 2023-03-02 20:25:55.432891620 +0800 @@ -0,0 +1 @@ +#include <../boot/image-host.c> yocto/meta-igkboard/kirkstone-lf-5.15.71-2.2.0/recipes-bsp/u-boot/u-boot-imx_2022.04.bbappend
New file @@ -0,0 +1,7 @@ FILESEXTRAPATHS:prepend := "${THISDIR}/files:" SRC_URI:append = " file://uboot-imx-igkboard.patch " addtask copy_bmp after do_unpack before do_configure do_copy_bmp(){ cp ${BSPDIR}/sources/meta-igkboard/recipes-bsp/u-boot/files/lingyun.bmp ${S}/tools/logos/ } yocto/meta-igkboard/kirkstone-lf-5.15.71-2.2.0/recipes-core/base-files/base-files_3.0.14.bbappend
New file @@ -0,0 +1,17 @@ SUMMARY = "Update system configure files" LICENSE = "GPL-2.0-only" LIC_FILES_CHKSUM = "file://licenses/GPL-2;md5=94d55d512a9ba36caa9b7df079bae19f" do_install_basefilesissue:append() { # Overwrite /etc/issue with a custom string printf "Welcome to LingYun IoT Gateway Kit Board GNU/Linux Yocto System, Default Password '12345'.\n" > ${D}${sysconfdir}/issue # Overwrite /etc/issue.net with a custom string printf "Welcome to LingYun IoT Gateway Kit Board GNU/Linux Yocto System, Default Password '12345'.\n" > ${D}${sysconfdir}/issue.net } do_install:append() { # add alias for ls with color display printf "alias ls='ls --color=auto'\n" >> ${D}${sysconfdir}/profile } yocto/meta-igkboard/kirkstone-lf-5.15.71-2.2.0/recipes-images/igkboard/linuxsys-image.bb
New file @@ -0,0 +1,60 @@ SUMMARY = "Yocto Linux System Image for LingYun IoT Kit Gateway Board" LICENSE = "MIT" inherit core-image # additional free disk space created in Kbytes IMAGE_OVERHEAD_FACTOR = "1.0" IMAGE_ROOTFS_EXTRA_SPACE = "512000" ## Select Image Features IMAGE_FEATURES += " \ ssh-server-openssh \ package-management \ " CORE_IMAGE_EXTRA_INSTALL += " \ packagegroup-core-full-cmdline \ packagegroup-tools-bluetooth \ packagegroup-fsl-tools-audio \ packagegroup-fsl-gstreamer1.0 \ packagegroup-fsl-gstreamer1.0-full \ packagegroup-qt6-imx \ packagegroup-misc-utils \ firmwared \ ${@bb.utils.contains('DISTRO_FEATURES', 'wayland', 'weston-init', '', d)} \ " CORE_IMAGE_EXTRA_INSTALL:append = " \ gnupg \ e2fsprogs \ e2fsprogs-resize2fs \ parted \ v4l-utils \ yavta \ sudo \ nano \ hostapd \ evtest \ mtd-utils \ libgpiod \ i2c-tools \ spitools \ spidev-test \ canutils \ xz \ udev-extraconf \ lrzsz \ libgpiod-dev \ libgpiod \ libdrm-dev \ libdrm \ opencv \ " inherit extrausers PASSWD= "\$5\$CZyCdtQE9Dp\$kuAmtCHtAv3X5gL1/imI.g1lf.JChVAEkdA3.8Yw8j8" EXTRA_USERS_PARAMS = "\ usermod -p '${PASSWD}' root; \ " yocto/meta-igkboard/kirkstone-lf-5.15.71-2.2.0/recipes-kernel/linux/files/linux-imx-igkboard.patch
New file @@ -0,0 +1,1974 @@ diff -Nuar --no-dereference -x logo_linux_clut224.ppm linux-imx/arch/arm/boot/dts/igkboard.dts linux-imx-lf-5.15.71-2.2.0/arch/arm/boot/dts/igkboard.dts --- linux-imx/arch/arm/boot/dts/igkboard.dts 1970-01-01 08:00:00.000000000 +0800 +++ linux-imx-lf-5.15.71-2.2.0/arch/arm/boot/dts/igkboard.dts 2023-03-02 20:46:53.724851464 +0800 @@ -0,0 +1,604 @@ +/* + * Device Tree Source for LingYun IGKBoard(IoT Gateway Kit Board) + * Based on imx6ul-14x14-evk.dts/imx6ul-14x14-evk.dtsi + * + * Copyright (C) 2022 LingYun IoT System Studio. + * Author: Guo Wenxue<guowenxue@gmail.com> + */ + +/dts-v1/; + +#include "imx6ull.dtsi" + +/ { + model = "LingYun IoT System Studio IoT Gateway Board"; + compatible = "fsl,imx6ull-14x14-evk", "fsl,imx6ull"; + + chosen { + stdout-path = &uart1; + }; + + memory@80000000 { + device_type = "memory"; + reg = <0x80000000 0x20000000>; + }; + + reserved-memory { + #address-cells = <1>; + #size-cells = <1>; + ranges; + + linux,cma { + compatible = "shared-dma-pool"; + reusable; + size = <0xa000000>; + linux,cma-default; + }; + }; + + buzzer: pwm-buzzer { + compatible = "pwm-beeper"; + pwms = <&pwm2 0 500000>; + status = "okay"; + }; + + leds { + compatible = "gpio-leds"; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_gpio_leds>; + status = "okay"; + + sysled { + lable = "sysled"; + gpios = <&gpio4 16 GPIO_ACTIVE_HIGH>; + linux,default-trigger = "heartbeat"; + default-state = "off"; + }; + }; + + keys { + compatible = "gpio-keys"; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_gpio_keys>; + autorepeat; + status = "okay"; + + key_user { + lable = "key_user"; + gpios = <&gpio4 14 GPIO_ACTIVE_LOW>; + linux,code = <KEY_ENTER>; + }; + }; + + pxp_v4l2 { + compatible = "fsl,imx6ul-pxp-v4l2", "fsl,imx6sx-pxp-v4l2", "fsl,imx6sl-pxp-v4l2"; + status = "okay"; + }; + + reg_sd1_vmmc: regulator-sd1-vmmc { + compatible = "regulator-fixed"; + regulator-name = "VSD_3V3"; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + gpio = <&gpio1 9 GPIO_ACTIVE_HIGH>; + off-on-delay-us = <20000>; + enable-active-high; + }; + + reg_peri_3v3: regulator-peri-3v3 { + compatible = "regulator-fixed"; + regulator-name = "VPERI_3V3"; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + /* + * If you want to want to make this dynamic please + * check schematics and test all affected peripherals: + * + * - sensors + * - ethernet phy + * - can + * - bluetooth + * - wm8960 audio codec + * - ov5640 camera + */ + regulator-always-on; + }; + + reg_can_3v3: regulator@0 { + compatible = "regulator-fixed"; + regulator-name = "can-3v3"; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + regulator-boot-on; + regulator-always-on; + }; + + reg_3p3v: 3p3v { + compatible = "regulator-fixed"; + regulator-name = "3P3V"; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + regulator-boot-on; + regulator-always-on; + }; + + reg_1p8v: 1p8v { + compatible = "regulator-fixed"; + regulator-name = "1P8V"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + regulator-boot-on; + regulator-always-on; + }; + + backlight_lcd: backlight-lcd { + compatible = "pwm-backlight"; + pwms = <&pwm1 0 5000000>; + brightness-levels = <0 4 8 16 32 64 128 255>; + default-brightness-level = <7>; + power-supply = <®_3p3v>; + status = "disabled"; + }; + + /* 1-Wire sentinel for overlay */ + w1: w1 { + compatible = "w1-gpio"; + status = "disabled"; + }; + + mqs: mqs { + #sound-dai-cells = <0>; + compatible = "fsl,imx6sx-mqs"; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_mqs>; + clocks = <&clks IMX6UL_CLK_SAI1>; + clock-names = "mclk"; + gpr = <&gpr>; + status = "okay"; + }; + + sound-mqs { + compatible = "fsl,imx-audio-mqs"; + model = "mqs-audio"; + audio-cpu = <&sai1>; + audio-asrc = <&asrc>; + audio-codec = <&mqs>; + status = "okay"; + }; + + /* LCD panel sentinel for overlay */ + panel: panel { + status = "disabled"; + }; + +}; + +/*+--------------+ + | Misc Modules | + +--------------+*/ + +&snvs_poweroff { + status = "okay"; +}; + +&snvs_pwrkey { + status = "okay"; +}; + +&uart1 { + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_uart1>; + status = "okay"; +}; + +&pwm1 { /* backlight */ + #pwm-cells = <2>; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_pwm1>; + status = "okay"; +}; + +&pwm2 { + #pwm-cells = <2>; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_pwm2>; + status = "okay"; +}; + +/*+---------------+ + | Camera Module | + +---------------+*/ + +&i2c2 { + clock-frequency = <100000>; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_i2c2>; + status = "okay"; + + gt9xx@5d { + compatible = "goodix,gt9147"; + reg = <0x5d>; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_ts_pins>; + + irq-gpios = <&gpio5 2 GPIO_ACTIVE_HIGH>; + reset-gpios = <&gpio5 3 GPIO_ACTIVE_HIGH>; + interrupt-parent = <&gpio5>; + interrupts = <2 IRQ_TYPE_EDGE_FALLING>; + + status = "disabled"; /* Enable in LCD overlay */ + }; + + rtc@6f { + compatible = "isil,isl1208"; + reg = <0x6f>; + status = "okay"; + }; + + ov5640: ov5640@3c { + compatible = "ovti,ov5640"; + reg = <0x3c>; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_csi1>; + clocks = <&clks IMX6UL_CLK_CSI>; + clock-names = "csi_mclk"; + + DOVDD-supply = <®_3p3v>; + VDD-supply = <®_1p8v>; + AVDD-supply = <®_3p3v>; + DVDD-supply = <®_3p3v>; + + pwn-gpios = <&gpio5 6 GPIO_ACTIVE_HIGH>; + rst-gpios = <&gpio5 5 GPIO_ACTIVE_LOW>; + csi_id = <0>; + mclk = <24000000>; + mclk_source = <0>; + /* rotation = <180>; */ + status = "disabled"; /* Enable in CAM overlay */ + port { + ov5640_ep: endpoint { + remote-endpoint = <&csi1_ep>; + }; + }; + }; + +}; + +&csi { + status = "disabled"; + port { + csi1_ep: endpoint { + remote-endpoint = <&ov5640_ep>; + }; + }; +}; + +/*+--------------+ + | Audio Module | + +--------------+*/ + +&clks { + assigned-clocks = <&clks IMX6UL_CLK_PLL4_AUDIO_DIV>; + //assigned-clock-rates = <786432000>; // 16bit,2Ch,48KHz + assigned-clock-rates = <722534400>; // 16bit,2Ch,44.1KHz +}; + +&sai1 { + assigned-clocks = <&clks IMX6UL_CLK_SAI1_SEL>, <&clks IMX6UL_CLK_SAI1>; + assigned-clock-parents = <&clks IMX6UL_CLK_PLL4_AUDIO_DIV>; + //assigned-clock-rates = <0>, <24576000>; // 16bit,2Ch,48KHz + assigned-clock-rates = <0>, <22579200>; // 16bit,2Ch,44.1KHz + fsl,sai-mclk-direction-output; + status = "okay"; +}; + +/*+------------------+ + | Ethernet Modules | + +------------------+*/ + +&fec1 { + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_enet1>; + phy-mode = "rmii"; + phy-handle = <ðphy0>; + phy-supply = <®_peri_3v3>; + phy-reset-gpios = <&gpio5 7 GPIO_ACTIVE_LOW>; + phy-reset-duration = <50>; + phy-reset-post-delay = <15>; + status = "okay"; +}; + +&fec2 { + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_enet2>; + phy-mode = "rmii"; + phy-handle = <ðphy1>; + phy-supply = <®_peri_3v3>; + phy-reset-gpios = <&gpio5 4 GPIO_ACTIVE_LOW>; + phy-reset-duration = <50>; + phy-reset-post-delay = <15>; + status = "okay"; + + mdio { + #address-cells = <1>; + #size-cells = <0>; + + ethphy0: ethernet-phy@0 { + compatible = "ethernet-phy-id0022.1560"; + reg = <0>; + micrel,led-mode = <1>; + clocks = <&clks IMX6UL_CLK_ENET_REF>; + clock-names = "rmii-ref"; + + }; + + ethphy1: ethernet-phy@1 { + compatible = "ethernet-phy-id0022.1560"; + reg = <1>; + micrel,led-mode = <1>; + clocks = <&clks IMX6UL_CLK_ENET2_REF>; + clock-names = "rmii-ref"; + }; + }; +}; + +/*+---------------+ + | USB interface | + +---------------+*/ + +&usbotg1 { + dr_mode = "otg"; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_usb_otg1>; + status = "okay"; +}; + +&usbotg2 { + dr_mode = "host"; + disable-over-current; + status = "okay"; +}; + +&usbphy1 { + fsl,tx-d-cal = <106>; +}; + +&usbphy2 { + fsl,tx-d-cal = <106>; +}; + +/*+------------------+ + | USDCHC interface | + +------------------+*/ + +&usdhc1 { + pinctrl-names = "default", "state_100mhz", "state_200mhz"; + pinctrl-0 = <&pinctrl_usdhc1>; + pinctrl-1 = <&pinctrl_usdhc1_100mhz>; + pinctrl-2 = <&pinctrl_usdhc1_200mhz>; + cd-gpios = <&gpio1 19 GPIO_ACTIVE_LOW>; + keep-power-in-suspend; + wakeup-source; + vmmc-supply = <®_sd1_vmmc>; + status = "okay"; +}; + +&usdhc2 { + pinctrl-names = "default", "state_100mhz", "state_200mhz"; + pinctrl-0 = <&pinctrl_usdhc2_8bit>; + pinctrl-1 = <&pinctrl_usdhc2_8bit_100mhz>; + pinctrl-2 = <&pinctrl_usdhc2_8bit_200mhz>; + non-removable; + bus-width = <8>; + keep-power-in-suspend; + wakeup-source; + status = "okay"; +}; + +/*+----------------------+ + | Basic pinctrl iomuxc | + +----------------------+*/ + +&iomuxc { + pinctrl-names = "default"; + + pinctrl_gpio_leds: gpio-leds { + fsl,pins = < + MX6UL_PAD_NAND_DQS__GPIO4_IO16 0x17059 /* led run */ + >; + }; + + pinctrl_gpio_keys: gpio-keys { + fsl,pins = < + MX6UL_PAD_NAND_CE1_B__GPIO4_IO14 0x17059 /* gpio key */ + >; + }; + + pinctrl_mqs: pinctrl-mqs-pins { + fsl,pins = < + MX6UL_PAD_JTAG_TDI__MQS_LEFT 0x11088 /* MQS Left */ + MX6UL_PAD_JTAG_TDO__MQS_RIGHT 0x11088 /* MQS Right */ + >; + }; + + pinctrl_ts_pins: pinctrl-ts-pins { + fsl,pins = < + MX6UL_PAD_SNVS_TAMPER2__GPIO5_IO02 0x17059 /* TouchScreen IRQ */ + MX6UL_PAD_SNVS_TAMPER3__GPIO5_IO03 0x17059 /* TouchScreen RST */ + >; + }; + + pinctrl_csi1: csi1grp { + fsl,pins = < + MX6UL_PAD_SNVS_TAMPER5__GPIO5_IO05 0x17059 /* CSI_RST */ + MX6UL_PAD_SNVS_TAMPER6__GPIO5_IO06 0x17059 /* CSI_PWDN */ + MX6UL_PAD_CSI_MCLK__CSI_MCLK 0x1b088 + MX6UL_PAD_CSI_PIXCLK__CSI_PIXCLK 0x1b088 + MX6UL_PAD_CSI_VSYNC__CSI_VSYNC 0x1b088 + MX6UL_PAD_CSI_HSYNC__CSI_HSYNC 0x1b088 + MX6UL_PAD_CSI_DATA00__CSI_DATA02 0x1b088 + MX6UL_PAD_CSI_DATA01__CSI_DATA03 0x1b088 + MX6UL_PAD_CSI_DATA02__CSI_DATA04 0x1b088 + MX6UL_PAD_CSI_DATA03__CSI_DATA05 0x1b088 + MX6UL_PAD_CSI_DATA04__CSI_DATA06 0x1b088 + MX6UL_PAD_CSI_DATA05__CSI_DATA07 0x1b088 + MX6UL_PAD_CSI_DATA06__CSI_DATA08 0x1b088 + MX6UL_PAD_CSI_DATA07__CSI_DATA09 0x1b088 + >; + }; + + pinctrl_enet1: enet1grp { + fsl,pins = < + MX6UL_PAD_ENET1_RX_EN__ENET1_RX_EN 0x1b0b0 + MX6UL_PAD_ENET1_RX_ER__ENET1_RX_ER 0x1b0b0 + MX6UL_PAD_ENET1_RX_DATA0__ENET1_RDATA00 0x1b0b0 + MX6UL_PAD_ENET1_RX_DATA1__ENET1_RDATA01 0x1b0b0 + MX6UL_PAD_ENET1_TX_EN__ENET1_TX_EN 0x1b0b0 + MX6UL_PAD_ENET1_TX_DATA0__ENET1_TDATA00 0x1b0b0 + MX6UL_PAD_ENET1_TX_DATA1__ENET1_TDATA01 0x1b0b0 + MX6UL_PAD_ENET1_TX_CLK__ENET1_REF_CLK1 0x4001b031 + MX6UL_PAD_SNVS_TAMPER7__GPIO5_IO07 0x10B0 + >; + }; + + pinctrl_enet2: enet2grp { + fsl,pins = < + MX6UL_PAD_GPIO1_IO07__ENET2_MDC 0x1b0b0 + MX6UL_PAD_GPIO1_IO06__ENET2_MDIO 0x1b0b0 + MX6UL_PAD_ENET2_RX_EN__ENET2_RX_EN 0x1b0b0 + MX6UL_PAD_ENET2_RX_ER__ENET2_RX_ER 0x1b0b0 + MX6UL_PAD_ENET2_RX_DATA0__ENET2_RDATA00 0x1b0b0 + MX6UL_PAD_ENET2_RX_DATA1__ENET2_RDATA01 0x1b0b0 + MX6UL_PAD_ENET2_TX_EN__ENET2_TX_EN 0x1b0b0 + MX6UL_PAD_ENET2_TX_DATA0__ENET2_TDATA00 0x1b0b0 + MX6UL_PAD_ENET2_TX_DATA1__ENET2_TDATA01 0x1b0b0 + MX6UL_PAD_ENET2_TX_CLK__ENET2_REF_CLK2 0x4001b031 + MX6UL_PAD_SNVS_TAMPER4__GPIO5_IO04 0x10B0 + >; + }; + + pinctrl_i2c2: i2c2grp { + fsl,pins = < + MX6UL_PAD_UART5_TX_DATA__I2C2_SCL 0x4001b8b0 + MX6UL_PAD_UART5_RX_DATA__I2C2_SDA 0x4001b8b0 + >; + }; + + pinctrl_pwm1: pwm1grp { + fsl,pins = < + MX6UL_PAD_GPIO1_IO08__PWM1_OUT 0x110b0 + >; + }; + + pinctrl_pwm2: pwm2grp { + fsl,pins = < + MX6UL_PAD_GPIO1_IO09__PWM2_OUT 0x110b0 + >; + }; + + pinctrl_uart1: uart1grp { + fsl,pins = < + MX6UL_PAD_UART1_TX_DATA__UART1_DCE_TX 0x1b0b1 + MX6UL_PAD_UART1_RX_DATA__UART1_DCE_RX 0x1b0b1 + >; + }; + + pinctrl_usb_otg1: usbotg1grp { + fsl,pins = < + MX6UL_PAD_GPIO1_IO00__ANATOP_OTG1_ID 0x17059 + >; + }; + + pinctrl_usdhc1: usdhc1grp { + fsl,pins = < + MX6UL_PAD_SD1_CMD__USDHC1_CMD 0x17059 + MX6UL_PAD_SD1_CLK__USDHC1_CLK 0x10071 + MX6UL_PAD_SD1_DATA0__USDHC1_DATA0 0x17059 + MX6UL_PAD_SD1_DATA1__USDHC1_DATA1 0x17059 + MX6UL_PAD_SD1_DATA2__USDHC1_DATA2 0x17059 + MX6UL_PAD_SD1_DATA3__USDHC1_DATA3 0x17059 + MX6UL_PAD_UART1_RTS_B__GPIO1_IO19 0x17059 + >; + }; + + pinctrl_usdhc1_100mhz: usdhc1grp100mhz { + fsl,pins = < + MX6UL_PAD_SD1_CMD__USDHC1_CMD 0x170b9 + MX6UL_PAD_SD1_CLK__USDHC1_CLK 0x100b9 + MX6UL_PAD_SD1_DATA0__USDHC1_DATA0 0x170b9 + MX6UL_PAD_SD1_DATA1__USDHC1_DATA1 0x170b9 + MX6UL_PAD_SD1_DATA2__USDHC1_DATA2 0x170b9 + MX6UL_PAD_SD1_DATA3__USDHC1_DATA3 0x170b9 + + >; + }; + + pinctrl_usdhc1_200mhz: usdhc1grp200mhz { + fsl,pins = < + MX6UL_PAD_SD1_CMD__USDHC1_CMD 0x170f9 + MX6UL_PAD_SD1_CLK__USDHC1_CLK 0x100f9 + MX6UL_PAD_SD1_DATA0__USDHC1_DATA0 0x170f9 + MX6UL_PAD_SD1_DATA1__USDHC1_DATA1 0x170f9 + MX6UL_PAD_SD1_DATA2__USDHC1_DATA2 0x170f9 + MX6UL_PAD_SD1_DATA3__USDHC1_DATA3 0x170f9 + >; + }; + + pinctrl_usdhc2: usdhc2grp { + fsl,pins = < + MX6UL_PAD_NAND_RE_B__USDHC2_CLK 0x17059 + MX6UL_PAD_NAND_WE_B__USDHC2_CMD 0x17059 + MX6UL_PAD_NAND_DATA00__USDHC2_DATA0 0x17059 + MX6UL_PAD_NAND_DATA01__USDHC2_DATA1 0x17059 + MX6UL_PAD_NAND_DATA02__USDHC2_DATA2 0x17059 + MX6UL_PAD_NAND_DATA03__USDHC2_DATA3 0x17059 + >; + }; + + pinctrl_usdhc2_8bit: usdhc2grp_8bit { + fsl,pins = < + MX6UL_PAD_NAND_RE_B__USDHC2_CLK 0x10069 + MX6UL_PAD_NAND_WE_B__USDHC2_CMD 0x17059 + MX6UL_PAD_NAND_DATA00__USDHC2_DATA0 0x17059 + MX6UL_PAD_NAND_DATA01__USDHC2_DATA1 0x17059 + MX6UL_PAD_NAND_DATA02__USDHC2_DATA2 0x17059 + MX6UL_PAD_NAND_DATA03__USDHC2_DATA3 0x17059 + MX6UL_PAD_NAND_DATA04__USDHC2_DATA4 0x17059 + MX6UL_PAD_NAND_DATA05__USDHC2_DATA5 0x17059 + MX6UL_PAD_NAND_DATA06__USDHC2_DATA6 0x17059 + MX6UL_PAD_NAND_DATA07__USDHC2_DATA7 0x17059 + >; + }; + + pinctrl_usdhc2_8bit_100mhz: usdhc2grp_8bit_100mhz { + fsl,pins = < + MX6UL_PAD_NAND_RE_B__USDHC2_CLK 0x100b9 + MX6UL_PAD_NAND_WE_B__USDHC2_CMD 0x170b9 + MX6UL_PAD_NAND_DATA00__USDHC2_DATA0 0x170b9 + MX6UL_PAD_NAND_DATA01__USDHC2_DATA1 0x170b9 + MX6UL_PAD_NAND_DATA02__USDHC2_DATA2 0x170b9 + MX6UL_PAD_NAND_DATA03__USDHC2_DATA3 0x170b9 + MX6UL_PAD_NAND_DATA04__USDHC2_DATA4 0x170b9 + MX6UL_PAD_NAND_DATA05__USDHC2_DATA5 0x170b9 + MX6UL_PAD_NAND_DATA06__USDHC2_DATA6 0x170b9 + MX6UL_PAD_NAND_DATA07__USDHC2_DATA7 0x170b9 + >; + }; + + pinctrl_usdhc2_8bit_200mhz: usdhc2grp_8bit_200mhz { + fsl,pins = < + MX6UL_PAD_NAND_RE_B__USDHC2_CLK 0x100f9 + MX6UL_PAD_NAND_WE_B__USDHC2_CMD 0x170f9 + MX6UL_PAD_NAND_DATA00__USDHC2_DATA0 0x170f9 + MX6UL_PAD_NAND_DATA01__USDHC2_DATA1 0x170f9 + MX6UL_PAD_NAND_DATA02__USDHC2_DATA2 0x170f9 + MX6UL_PAD_NAND_DATA03__USDHC2_DATA3 0x170f9 + MX6UL_PAD_NAND_DATA04__USDHC2_DATA4 0x170f9 + MX6UL_PAD_NAND_DATA05__USDHC2_DATA5 0x170f9 + MX6UL_PAD_NAND_DATA06__USDHC2_DATA6 0x170f9 + MX6UL_PAD_NAND_DATA07__USDHC2_DATA7 0x170f9 + >; + }; + +}; + diff -Nuar --no-dereference -x logo_linux_clut224.ppm linux-imx/arch/arm/boot/dts/Makefile linux-imx-lf-5.15.71-2.2.0/arch/arm/boot/dts/Makefile --- linux-imx/arch/arm/boot/dts/Makefile 2023-03-01 18:11:25.000000000 +0800 +++ linux-imx-lf-5.15.71-2.2.0/arch/arm/boot/dts/Makefile 2023-03-02 20:49:30.115703746 +0800 @@ -1587,3 +1587,8 @@ aspeed-bmc-portwell-neptune.dtb \ aspeed-bmc-quanta-q71l.dtb \ aspeed-bmc-supermicro-x11spi.dtb + +DTC_FLAGS_igkboard := -@ +dtb-$(CONFIG_SOC_IMX6UL) += igkboard.dtb +subdir-$(CONFIG_SOC_IMX6UL) += overlays + diff -Nuar --no-dereference -x logo_linux_clut224.ppm linux-imx/arch/arm/boot/dts/overlays/adc.dts linux-imx-lf-5.15.71-2.2.0/arch/arm/boot/dts/overlays/adc.dts --- linux-imx/arch/arm/boot/dts/overlays/adc.dts 1970-01-01 08:00:00.000000000 +0800 +++ linux-imx-lf-5.15.71-2.2.0/arch/arm/boot/dts/overlays/adc.dts 2023-03-02 20:53:01.000000000 +0800 @@ -0,0 +1,27 @@ +/* + * Copyright (C) 2022 LingYun IoT System Studio + * Author: Guo Wenxue<guowenxue@gmail.com> + */ +/dts-v1/; +/plugin/; + +#include "../imx6ul-pinfunc.h" + +/* 40-pin extended GPIO, ADC interfaces */ + +&adc1 { + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_adc1>; + num-channels = <5>; + vref-supply = <®_peri_3v3>; + status = "okay"; +}; + +&iomuxc { + pinctrl_adc1: adc1grp { + fsl,pins = < + MX6UL_PAD_GPIO1_IO01__GPIO1_IO01 0xb0 /* ADC1_1 --->TS_YN */ + MX6UL_PAD_GPIO1_IO04__GPIO1_IO04 0xb0 /* ADC1_4 --->TS_XP */ + >; + }; +}; diff -Nuar --no-dereference -x logo_linux_clut224.ppm linux-imx/arch/arm/boot/dts/overlays/cam.dts linux-imx-lf-5.15.71-2.2.0/arch/arm/boot/dts/overlays/cam.dts --- linux-imx/arch/arm/boot/dts/overlays/cam.dts 1970-01-01 08:00:00.000000000 +0800 +++ linux-imx-lf-5.15.71-2.2.0/arch/arm/boot/dts/overlays/cam.dts 2023-03-02 20:53:01.000000000 +0800 @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2022 LingYun IoT System Studio + * Author: Guo Wenxue<guowenxue@gmail.com> + */ + +/dts-v1/; +/plugin/; + +/* MIPI-DSI2 camera overlay */ + +&pxp { /* Pixel Pipeline (PXP) is a memory-to-memory graphics processing */ + status = "okay"; +}; + +&csi { + status = "okay"; +}; + +&i2c2 { + ov5640@3c { + status = "okay"; + }; +}; + diff -Nuar --no-dereference -x logo_linux_clut224.ppm linux-imx/arch/arm/boot/dts/overlays/can1.dts linux-imx-lf-5.15.71-2.2.0/arch/arm/boot/dts/overlays/can1.dts --- linux-imx/arch/arm/boot/dts/overlays/can1.dts 1970-01-01 08:00:00.000000000 +0800 +++ linux-imx-lf-5.15.71-2.2.0/arch/arm/boot/dts/overlays/can1.dts 2023-03-02 20:53:01.000000000 +0800 @@ -0,0 +1,28 @@ +/* + * Copyright (C) 2022 LingYun IoT System Studio + * Author: Guo Wenxue<guowenxue@gmail.com> + */ + +/dts-v1/; +/plugin/; + +#include "../imx6ul-pinfunc.h" + +/* 40-pin extended GPIO, CAN1 interfaces */ + +&can1 { + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_flexcan1>; + xceiver-supply = <®_can_3v3>; + status = "okay"; +}; + +&iomuxc { + pinctrl_flexcan1: flexcan1grp{ + fsl,pins = < + MX6UL_PAD_UART3_RTS_B__FLEXCAN1_RX 0x1b020 + MX6UL_PAD_UART3_CTS_B__FLEXCAN1_TX 0x1b020 + >; + }; +}; + diff -Nuar --no-dereference -x logo_linux_clut224.ppm linux-imx/arch/arm/boot/dts/overlays/can2.dts linux-imx-lf-5.15.71-2.2.0/arch/arm/boot/dts/overlays/can2.dts --- linux-imx/arch/arm/boot/dts/overlays/can2.dts 1970-01-01 08:00:00.000000000 +0800 +++ linux-imx-lf-5.15.71-2.2.0/arch/arm/boot/dts/overlays/can2.dts 2023-03-02 20:53:01.000000000 +0800 @@ -0,0 +1,28 @@ +/* + * Copyright (C) 2022 LingYun IoT System Studio + * Author: Guo Wenxue<guowenxue@gmail.com> + */ + +/dts-v1/; +/plugin/; + +#include "../imx6ul-pinfunc.h" + +/* 40-pin extended GPIO, CAN2 interfaces */ + +&can2 { + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_flexcan2>; + xceiver-supply = <®_can_3v3>; + status = "okay"; +}; + +&iomuxc { + pinctrl_flexcan2: flexcan2grp{ + fsl,pins = < + MX6UL_PAD_UART2_RTS_B__FLEXCAN2_RX 0x1b020 + MX6UL_PAD_UART2_CTS_B__FLEXCAN2_TX 0x1b020 + >; + }; +}; + diff -Nuar --no-dereference -x logo_linux_clut224.ppm linux-imx/arch/arm/boot/dts/overlays/i2c1.dts linux-imx-lf-5.15.71-2.2.0/arch/arm/boot/dts/overlays/i2c1.dts --- linux-imx/arch/arm/boot/dts/overlays/i2c1.dts 1970-01-01 08:00:00.000000000 +0800 +++ linux-imx-lf-5.15.71-2.2.0/arch/arm/boot/dts/overlays/i2c1.dts 2023-03-02 20:53:01.000000000 +0800 @@ -0,0 +1,28 @@ +/* + * Copyright (C) 2022 LingYun IoT System Studio + * Author: Guo Wenxue<guowenxue@gmail.com> + */ + +/dts-v1/; +/plugin/; + +#include "../imx6ul-pinfunc.h" + +/* 40-pin extended GPIO, I2C1 interfaces */ + +&i2c1 { + clock-frequency = <100000>; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_i2c1>; + status = "okay"; +}; + +&iomuxc { + pinctrl_i2c1: i2c1grp { + fsl,pins = < + MX6UL_PAD_GPIO1_IO02__I2C1_SCL 0x4001b8b0 + MX6UL_PAD_GPIO1_IO03__I2C1_SDA 0x4001b8b0 + >; + }; +}; + diff -Nuar --no-dereference -x logo_linux_clut224.ppm linux-imx/arch/arm/boot/dts/overlays/lcd.dts linux-imx-lf-5.15.71-2.2.0/arch/arm/boot/dts/overlays/lcd.dts --- linux-imx/arch/arm/boot/dts/overlays/lcd.dts 1970-01-01 08:00:00.000000000 +0800 +++ linux-imx-lf-5.15.71-2.2.0/arch/arm/boot/dts/overlays/lcd.dts 2023-03-02 20:55:07.375416028 +0800 @@ -0,0 +1,82 @@ +/* + * Copyright (C) 2022 LingYun IoT System Studio + * Author: Guo Wenxue<guowenxue@gmail.com> + */ + +/dts-v1/; +/plugin/; + +#include <dt-bindings/clock/imx6ul-clock.h> +#include "../imx6ul-pinfunc.h" + +/* LCD DRM display overlay */ + +&backlight_lcd { + status = "okay"; +}; + +&i2c2 { + gt9xx@5d { + status = "okay"; + }; +}; + +&lcdif { + assigned-clocks = <&clks IMX6UL_CLK_LCDIF_PRE_SEL>; + assigned-clock-parents = <&clks IMX6UL_CLK_PLL5_VIDEO_DIV>; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_lcdif_dat &pinctrl_lcdif_ctrl>; + status = "okay"; + + port { + display_output: endpoint { + remote-endpoint = <&panel_input>; + }; + }; +}; + +&panel { + compatible = "fsl,imx6ull-panel", "panel-simple"; + backlight = <&backlight_lcd>; + power-supply = <®_3p3v>; + status = "okay"; + + port { + panel_input: endpoint { + remote-endpoint = <&display_output>; + }; + }; +}; + +&iomuxc { + pinctrl_lcdif_dat: lcdifdatgrp { + fsl,pins = < + MX6UL_PAD_LCD_DATA00__LCDIF_DATA00 0x79 + MX6UL_PAD_LCD_DATA01__LCDIF_DATA01 0x79 + MX6UL_PAD_LCD_DATA02__LCDIF_DATA02 0x79 + MX6UL_PAD_LCD_DATA03__LCDIF_DATA03 0x79 + MX6UL_PAD_LCD_DATA04__LCDIF_DATA04 0x79 + MX6UL_PAD_LCD_DATA05__LCDIF_DATA05 0x79 + MX6UL_PAD_LCD_DATA06__LCDIF_DATA06 0x79 + MX6UL_PAD_LCD_DATA07__LCDIF_DATA07 0x79 + MX6UL_PAD_LCD_DATA08__LCDIF_DATA08 0x79 + MX6UL_PAD_LCD_DATA09__LCDIF_DATA09 0x79 + MX6UL_PAD_LCD_DATA10__LCDIF_DATA10 0x79 + MX6UL_PAD_LCD_DATA11__LCDIF_DATA11 0x79 + MX6UL_PAD_LCD_DATA12__LCDIF_DATA12 0x79 + MX6UL_PAD_LCD_DATA13__LCDIF_DATA13 0x79 + MX6UL_PAD_LCD_DATA14__LCDIF_DATA14 0x79 + MX6UL_PAD_LCD_DATA15__LCDIF_DATA15 0x79 + >; + }; + + pinctrl_lcdif_ctrl: lcdifctrlgrp { + fsl,pins = < + MX6UL_PAD_LCD_CLK__LCDIF_CLK 0x79 + MX6UL_PAD_LCD_ENABLE__LCDIF_ENABLE 0x79 + MX6UL_PAD_LCD_HSYNC__LCDIF_HSYNC 0x79 + MX6UL_PAD_LCD_VSYNC__LCDIF_VSYNC 0x79 + MX6UL_PAD_LCD_RESET__LCDIF_RESET 0x79 + >; + }; +}; \ No newline at end of file diff -Nuar --no-dereference -x logo_linux_clut224.ppm linux-imx/arch/arm/boot/dts/overlays/Makefile linux-imx-lf-5.15.71-2.2.0/arch/arm/boot/dts/overlays/Makefile --- linux-imx/arch/arm/boot/dts/overlays/Makefile 1970-01-01 08:00:00.000000000 +0800 +++ linux-imx-lf-5.15.71-2.2.0/arch/arm/boot/dts/overlays/Makefile 2023-03-02 20:54:40.679821453 +0800 @@ -0,0 +1,19 @@ +# SPDX-License-Identifier: GPL-2.0 +# required for overlay support + +DTC_FLAGS += -@ +dtb-y += can1.dtbo +dtb-y += can2.dtbo +dtb-y += i2c1.dtbo +dtb-y += spi1.dtbo +dtb-y += uart2.dtbo +dtb-y += uart3.dtbo +dtb-y += uart4.dtbo +dtb-y += uart7.dtbo +dtb-y += pwm7.dtbo +dtb-y += pwm8.dtbo +dtb-y += w1.dtbo +dtb-y += lcd.dtbo +dtb-y += cam.dtbo +dtb-y += nbiot-4g.dtbo +dtb-y += adc.dtbo diff -Nuar --no-dereference -x logo_linux_clut224.ppm linux-imx/arch/arm/boot/dts/overlays/nbiot-4g.dts linux-imx-lf-5.15.71-2.2.0/arch/arm/boot/dts/overlays/nbiot-4g.dts --- linux-imx/arch/arm/boot/dts/overlays/nbiot-4g.dts 1970-01-01 08:00:00.000000000 +0800 +++ linux-imx-lf-5.15.71-2.2.0/arch/arm/boot/dts/overlays/nbiot-4g.dts 2023-03-02 20:53:01.000000000 +0800 @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2022 LingYun IoT System Studio + * Author: Guo Wenxue<guowenxue@gmail.com> + */ + +/dts-v1/; +/plugin/; + +#include "../imx6ul-pinfunc.h" + +/* NB-IoT/4G module use UART8 interfaces, conflict with SPI interface */ + +&uart8 { + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_spi_uart8 &pinctrl_nbiot_ctrl>; + status = "okay"; +}; + +&iomuxc { + pinctrl_spi_uart8: spi_uart8_grp { + fsl,pins = < + MX6UL_PAD_LCD_DATA20__UART8_DCE_TX 0x1b0b1 /* MRXD */ + MX6UL_PAD_LCD_DATA21__UART8_DCE_RX 0x1b0b1 /* MTXD */ + >; + }; + + pinctrl_nbiot_ctrl: nbiot_ctrl_grp { + fsl,pins = < + MX6UL_PAD_LCD_DATA22__GPIO3_IO27 0x17059 /* NB_PWREN/4G_RESET */ + MX6UL_PAD_JTAG_TRST_B__GPIO1_IO15 0x17059 /* NB_MRST/4G_POWER_KEY */ + >; + }; +}; + diff -Nuar --no-dereference -x logo_linux_clut224.ppm linux-imx/arch/arm/boot/dts/overlays/pwm7.dts linux-imx-lf-5.15.71-2.2.0/arch/arm/boot/dts/overlays/pwm7.dts --- linux-imx/arch/arm/boot/dts/overlays/pwm7.dts 1970-01-01 08:00:00.000000000 +0800 +++ linux-imx-lf-5.15.71-2.2.0/arch/arm/boot/dts/overlays/pwm7.dts 2023-03-02 20:53:01.000000000 +0800 @@ -0,0 +1,28 @@ +/* + * Copyright (C) 2022 LingYun IoT System Studio + * Author: Guo Wenxue<guowenxue@gmail.com> + */ + +/dts-v1/; +/plugin/; + +#include <dt-bindings/clock/imx6ul-clock.h> +#include "../imx6ul-pinfunc.h" + +/* 40-pin extended GPIO, PWM7 interfaces */ + +&pwm7 { + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_pwm7>; + clocks = <&clks IMX6UL_CLK_PWM7>, <&clks IMX6UL_CLK_PWM7>; + status = "okay"; +}; + +&iomuxc { + pinctrl_pwm7: pwm7grp { + fsl,pins = < + MX6UL_PAD_JTAG_TCK__PWM7_OUT 0x110b0 + >; + }; +}; + diff -Nuar --no-dereference -x logo_linux_clut224.ppm linux-imx/arch/arm/boot/dts/overlays/pwm8.dts linux-imx-lf-5.15.71-2.2.0/arch/arm/boot/dts/overlays/pwm8.dts --- linux-imx/arch/arm/boot/dts/overlays/pwm8.dts 1970-01-01 08:00:00.000000000 +0800 +++ linux-imx-lf-5.15.71-2.2.0/arch/arm/boot/dts/overlays/pwm8.dts 2023-03-02 20:53:01.000000000 +0800 @@ -0,0 +1,28 @@ +/* + * Copyright (C) 2022 LingYun IoT System Studio + * Author: Guo Wenxue<guowenxue@gmail.com> + */ + +/dts-v1/; +/plugin/; + +#include <dt-bindings/clock/imx6ul-clock.h> +#include "../imx6ul-pinfunc.h" + +/* 40-pin extended GPIO, PWM8 interfaces, conflict with NB-IoT */ + +&pwm8 { + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_pwm8_nbiot>; + clocks = <&clks IMX6UL_CLK_PWM8>, <&clks IMX6UL_CLK_PWM8>; + status = "okay"; +}; + +&iomuxc { + pinctrl_pwm8_nbiot: pwm8nbiotgrp { + fsl,pins = < + MX6UL_PAD_JTAG_TRST_B__PWM8_OUT 0x110b0 + >; + }; +}; + diff -Nuar --no-dereference -x logo_linux_clut224.ppm linux-imx/arch/arm/boot/dts/overlays/spi1.dts linux-imx-lf-5.15.71-2.2.0/arch/arm/boot/dts/overlays/spi1.dts --- linux-imx/arch/arm/boot/dts/overlays/spi1.dts 1970-01-01 08:00:00.000000000 +0800 +++ linux-imx-lf-5.15.71-2.2.0/arch/arm/boot/dts/overlays/spi1.dts 2023-03-02 20:53:01.000000000 +0800 @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2022 LingYun IoT System Studio + * Author: Guo Wenxue<guowenxue@gmail.com> + */ + +/dts-v1/; +/plugin/; + +#include <dt-bindings/gpio/gpio.h> +#include "../imx6ul-pinfunc.h" + +/* 40-pin extended GPIO, SPI1 interfaces, conflict with UART8 */ + +&ecspi1 { + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_spi_uart8>; + cs-gpios = <&gpio3 26 GPIO_ACTIVE_LOW>; + status = "okay"; + + #address-cells = <1>; + #size-cells = <0>; + + spidev0: spi@0 { + reg = <0>; + compatible = "semtech,sx1301"; + spi-max-frequency = <1000000>; + }; +}; + +&iomuxc { + pinctrl_spi_uart8: spi_uart8_grp { + fsl,pins = < + MX6UL_PAD_LCD_DATA20__ECSPI1_SCLK 0x10b0 + MX6UL_PAD_LCD_DATA22__ECSPI1_MOSI 0x10b0 + MX6UL_PAD_LCD_DATA23__ECSPI1_MISO 0x10b0 + MX6UL_PAD_LCD_DATA21__GPIO3_IO26 0x10b0 + >; + }; +}; diff -Nuar --no-dereference -x logo_linux_clut224.ppm linux-imx/arch/arm/boot/dts/overlays/uart2.dts linux-imx-lf-5.15.71-2.2.0/arch/arm/boot/dts/overlays/uart2.dts --- linux-imx/arch/arm/boot/dts/overlays/uart2.dts 1970-01-01 08:00:00.000000000 +0800 +++ linux-imx-lf-5.15.71-2.2.0/arch/arm/boot/dts/overlays/uart2.dts 2023-03-02 20:53:01.000000000 +0800 @@ -0,0 +1,26 @@ +/* + * Copyright (C) 2022 LingYun IoT System Studio + * Author: Guo Wenxue<guowenxue@gmail.com> + */ + +/dts-v1/; +/plugin/; + +#include "../imx6ul-pinfunc.h" + +/* 40-pin extended GPIO, UART2 interfaces */ + +&uart2 { + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_uart2>; + status = "okay"; +}; + +&iomuxc { + pinctrl_uart2: uart2grp { + fsl,pins = < + MX6UL_PAD_UART2_TX_DATA__UART2_DCE_TX 0x1b0b1 + MX6UL_PAD_UART2_RX_DATA__UART2_DCE_RX 0x1b0b1 + >; + }; +}; diff -Nuar --no-dereference -x logo_linux_clut224.ppm linux-imx/arch/arm/boot/dts/overlays/uart3.dts linux-imx-lf-5.15.71-2.2.0/arch/arm/boot/dts/overlays/uart3.dts --- linux-imx/arch/arm/boot/dts/overlays/uart3.dts 1970-01-01 08:00:00.000000000 +0800 +++ linux-imx-lf-5.15.71-2.2.0/arch/arm/boot/dts/overlays/uart3.dts 2023-03-02 20:53:01.000000000 +0800 @@ -0,0 +1,27 @@ +/* + * Copyright (C) 2022 LingYun IoT System Studio + * Author: Guo Wenxue<guowenxue@gmail.com> + */ + +/dts-v1/; +/plugin/; + +#include "../imx6ul-pinfunc.h" + +/* 40-pin extended GPIO, UART3 interfaces */ + +&uart3 { + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_uart3>; + status = "okay"; +}; + +&iomuxc { + pinctrl_uart3: uart3grp { + fsl,pins = < + MX6UL_PAD_UART3_TX_DATA__UART3_DCE_TX 0x1b0b1 + MX6UL_PAD_UART3_RX_DATA__UART3_DCE_RX 0x1b0b1 + >; + }; +}; + diff -Nuar --no-dereference -x logo_linux_clut224.ppm linux-imx/arch/arm/boot/dts/overlays/uart4.dts linux-imx-lf-5.15.71-2.2.0/arch/arm/boot/dts/overlays/uart4.dts --- linux-imx/arch/arm/boot/dts/overlays/uart4.dts 1970-01-01 08:00:00.000000000 +0800 +++ linux-imx-lf-5.15.71-2.2.0/arch/arm/boot/dts/overlays/uart4.dts 2023-03-02 20:53:01.000000000 +0800 @@ -0,0 +1,27 @@ +/* + * Copyright (C) 2022 LingYun IoT System Studio + * Author: Guo Wenxue<guowenxue@gmail.com> + */ + +/dts-v1/; +/plugin/; + +#include "../imx6ul-pinfunc.h" + +/* 40-pin extended GPIO, UART4 interfaces */ + +&uart4 { + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_uart4>; + status = "okay"; +}; + +&iomuxc { + pinctrl_uart4: uart4grp { + fsl,pins = < + MX6UL_PAD_UART4_TX_DATA__UART4_DCE_TX 0x1b0b1 + MX6UL_PAD_UART4_RX_DATA__UART4_DCE_RX 0x1b0b1 + >; + }; +}; + diff -Nuar --no-dereference -x logo_linux_clut224.ppm linux-imx/arch/arm/boot/dts/overlays/uart7.dts linux-imx-lf-5.15.71-2.2.0/arch/arm/boot/dts/overlays/uart7.dts --- linux-imx/arch/arm/boot/dts/overlays/uart7.dts 1970-01-01 08:00:00.000000000 +0800 +++ linux-imx-lf-5.15.71-2.2.0/arch/arm/boot/dts/overlays/uart7.dts 2023-03-02 20:53:01.000000000 +0800 @@ -0,0 +1,27 @@ +/* + * Copyright (C) 2022 LingYun IoT System Studio + * Author: Guo Wenxue<guowenxue@gmail.com> + */ + +/dts-v1/; +/plugin/; + +#include "../imx6ul-pinfunc.h" + +/* 40-pin extended GPIO, UART7 interfaces, conflict with LCD display */ + +&uart7 { + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_uart7>; + status = "okay"; +}; + +&iomuxc { + pinctrl_uart7: uart7grp { + fsl,pins = < + MX6UL_PAD_LCD_DATA16__UART7_DCE_TX 0x1b0b1 + MX6UL_PAD_LCD_DATA17__UART7_DCE_RX 0x1b0b1 + >; + }; +}; + diff -Nuar --no-dereference -x logo_linux_clut224.ppm linux-imx/arch/arm/boot/dts/overlays/w1.dts linux-imx-lf-5.15.71-2.2.0/arch/arm/boot/dts/overlays/w1.dts --- linux-imx/arch/arm/boot/dts/overlays/w1.dts 1970-01-01 08:00:00.000000000 +0800 +++ linux-imx-lf-5.15.71-2.2.0/arch/arm/boot/dts/overlays/w1.dts 2023-03-02 20:53:01.000000000 +0800 @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2022 LingYun IoT System Studio + * Author: Guo Wenxue<guowenxue@gmail.com> + */ + +/dts-v1/; +/plugin/; + +#include <dt-bindings/gpio/gpio.h> +#include "../imx6ul-pinfunc.h" + +/* W1(DS18B20) on 40Pin Header Pin#7 (GPIO1_IO18) */ + +&w1 { + compatible = "w1-gpio"; + status = "okay"; + + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_w1>; + gpio = <&gpio1 18 GPIO_ACTIVE_HIGH>; +}; + + +&iomuxc { + pinctrl_w1: w1grp { + fsl,pins = < + MX6UL_PAD_UART1_CTS_B__GPIO1_IO18 0x110b0 + >; + }; +}; + diff -Nuar --no-dereference -x logo_linux_clut224.ppm linux-imx/arch/arm/configs/igkboard_defconfig linux-imx-lf-5.15.71-2.2.0/arch/arm/configs/igkboard_defconfig --- linux-imx/arch/arm/configs/igkboard_defconfig 1970-01-01 08:00:00.000000000 +0800 +++ linux-imx-lf-5.15.71-2.2.0/arch/arm/configs/igkboard_defconfig 2023-03-02 21:03:14.286840883 +0800 @@ -0,0 +1,604 @@ +CONFIG_KERNEL_LZO=y +CONFIG_SYSVIPC=y +CONFIG_POSIX_MQUEUE=y +CONFIG_NO_HZ=y +CONFIG_HIGH_RES_TIMERS=y +CONFIG_PREEMPT=y +CONFIG_IKCONFIG=y +CONFIG_IKCONFIG_PROC=y +CONFIG_LOG_BUF_SHIFT=18 +CONFIG_CGROUPS=y +CONFIG_MEMCG=y +CONFIG_CGROUP_PIDS=y +CONFIG_CGROUP_FREEZER=y +CONFIG_CGROUP_DEVICE=y +CONFIG_NAMESPACES=y +CONFIG_USER_NS=y +CONFIG_RELAY=y +CONFIG_BLK_DEV_INITRD=y +CONFIG_EXPERT=y +CONFIG_KALLSYMS_ALL=y +CONFIG_PERF_EVENTS=y +# CONFIG_SLUB_DEBUG is not set +# CONFIG_COMPAT_BRK is not set +CONFIG_ARCH_MXC=y +CONFIG_SOC_IMX6Q=y +CONFIG_SOC_IMX6SL=y +CONFIG_SOC_IMX6SLL=y +CONFIG_SOC_IMX6SX=y +CONFIG_SOC_IMX6UL=y +CONFIG_SOC_IMX7D=y +CONFIG_SOC_IMX7ULP=y +CONFIG_SMP=y +CONFIG_VMSPLIT_2G=y +CONFIG_ARM_PSCI=y +CONFIG_HIGHMEM=y +CONFIG_FORCE_MAX_ZONEORDER=14 +CONFIG_CMDLINE="noinitrd console=ttymxc0,115200" +CONFIG_KEXEC=y +CONFIG_CPU_FREQ=y +CONFIG_CPU_FREQ_STAT=y +CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y +CONFIG_CPU_FREQ_GOV_POWERSAVE=y +CONFIG_CPU_FREQ_GOV_USERSPACE=y +CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y +CONFIG_CPUFREQ_DT=y +CONFIG_ARM_IMX6Q_CPUFREQ=y +CONFIG_ARM_IMX_CPUFREQ_DT=y +CONFIG_CPU_IDLE=y +CONFIG_ARM_CPUIDLE=y +CONFIG_ARM_PSCI_CPUIDLE=y +CONFIG_VFP=y +CONFIG_NEON=y +CONFIG_PM_DEBUG=y +CONFIG_PM_TEST_SUSPEND=y +CONFIG_KPROBES=y +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_MODVERSIONS=y +CONFIG_MODULE_SRCVERSION_ALL=y +CONFIG_BINFMT_MISC=m +CONFIG_CMA=y +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_INET=y +CONFIG_IP_MULTICAST=y +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +CONFIG_NETFILTER=y +CONFIG_VLAN_8021Q=m +CONFIG_LLC2=y +CONFIG_CAN=y +CONFIG_CAN_FLEXCAN=y +CONFIG_BT=y +CONFIG_BT_RFCOMM=y +CONFIG_BT_RFCOMM_TTY=y +CONFIG_BT_BNEP=y +CONFIG_BT_BNEP_MC_FILTER=y +CONFIG_BT_BNEP_PROTO_FILTER=y +CONFIG_BT_HIDP=y +CONFIG_BT_HCIBTUSB=y +CONFIG_BT_HCIUART=y +CONFIG_BT_HCIUART_BCSP=y +CONFIG_BT_HCIUART_LL=y +CONFIG_BT_HCIUART_3WIRE=y +CONFIG_BT_HCIUART_MRVL=y +CONFIG_BT_HCIVHCI=y +CONFIG_BT_MRVL=y +CONFIG_BT_MRVL_SDIO=y +CONFIG_CFG80211=y +CONFIG_NL80211_TESTMODE=y +CONFIG_CFG80211_WEXT=y +CONFIG_MAC80211=y +CONFIG_PCI=y +CONFIG_PCI_MSI=y +CONFIG_PCI_IMX6_HOST=y +CONFIG_PCI_IMX6_EP=y +CONFIG_PCI_ENDPOINT=y +CONFIG_PCI_ENDPOINT_CONFIGFS=y +CONFIG_PCI_EPF_TEST=y +CONFIG_DEVTMPFS=y +CONFIG_DEVTMPFS_MOUNT=y +# CONFIG_STANDALONE is not set +CONFIG_FW_LOADER_USER_HELPER=y +CONFIG_FW_LOADER_USER_HELPER_FALLBACK=y +CONFIG_IMX_WEIM=y +CONFIG_CONNECTOR=y +CONFIG_MTD=y +CONFIG_MTD_CMDLINE_PARTS=y +CONFIG_MTD_BLOCK=y +CONFIG_MTD_CFI=y +CONFIG_MTD_JEDECPROBE=y +CONFIG_MTD_CFI_INTELEXT=y +CONFIG_MTD_CFI_AMDSTD=y +CONFIG_MTD_CFI_STAA=y +CONFIG_MTD_PHYSMAP=y +CONFIG_MTD_PHYSMAP_OF=y +CONFIG_MTD_DATAFLASH=y +CONFIG_MTD_SST25L=y +CONFIG_MTD_RAW_NAND=y +CONFIG_MTD_NAND_GPMI_NAND=y +CONFIG_MTD_NAND_MXC=y +CONFIG_MTD_SPI_NOR=y +# CONFIG_MTD_SPI_NOR_USE_4K_SECTORS is not set +CONFIG_MTD_UBI=y +CONFIG_MTD_UBI_FASTMAP=y +CONFIG_MTD_UBI_BLOCK=y +CONFIG_OF_OVERLAY=y +CONFIG_BLK_DEV_LOOP=y +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=65536 +CONFIG_PCI_ENDPOINT_TEST=y +CONFIG_EEPROM_AT24=y +CONFIG_EEPROM_AT25=y +# CONFIG_SCSI_PROC_FS is not set +CONFIG_BLK_DEV_SD=y +# CONFIG_BLK_DEV_BSG is not set +CONFIG_SCSI_CONSTANTS=y +CONFIG_SCSI_LOGGING=y +CONFIG_SCSI_SCAN_ASYNC=y +CONFIG_ATA=y +CONFIG_SATA_AHCI_PLATFORM=y +CONFIG_AHCI_IMX=y +CONFIG_PATA_IMX=y +CONFIG_MD=y +CONFIG_BLK_DEV_MD=m +CONFIG_BLK_DEV_DM=m +CONFIG_DM_CRYPT=m +CONFIG_NETDEVICES=y +CONFIG_TUN=y +# CONFIG_NET_VENDOR_BROADCOM is not set +CONFIG_CS89x0_PLATFORM=y +# CONFIG_NET_VENDOR_FARADAY is not set +# CONFIG_NET_VENDOR_INTEL is not set +# CONFIG_NET_VENDOR_MARVELL is not set +# CONFIG_NET_VENDOR_MICREL is not set +# CONFIG_NET_VENDOR_MICROCHIP is not set +# CONFIG_NET_VENDOR_NATSEMI is not set +# CONFIG_NET_VENDOR_SEEQ is not set +CONFIG_SMC91X=y +CONFIG_SMC911X=y +CONFIG_SMSC911X=y +# CONFIG_NET_VENDOR_STMICRO is not set +CONFIG_MICREL_PHY=y +CONFIG_AT803X_PHY=y +CONFIG_USB_PEGASUS=m +CONFIG_USB_RTL8150=m +CONFIG_USB_RTL8152=y +CONFIG_USB_LAN78XX=y +CONFIG_USB_USBNET=y +CONFIG_USB_NET_CDC_EEM=m +CONFIG_USB_NET_SMSC95XX=y +CONFIG_USB_NET_MCS7830=y +CONFIG_ATH10K=m +CONFIG_ATH10K_SDIO=m +CONFIG_HOSTAP=y +CONFIG_WL12XX=m +CONFIG_WL18XX=m +CONFIG_WLCORE_SDIO=m +# CONFIG_WILINK_PLATFORM_DATA is not set +CONFIG_INPUT_EVDEV=y +CONFIG_INPUT_EVBUG=m +CONFIG_KEYBOARD_GPIO=y +CONFIG_KEYBOARD_RPMSG=y +CONFIG_KEYBOARD_IMX=y +CONFIG_MOUSE_PS2=m +CONFIG_MOUSE_PS2_ELANTECH=y +CONFIG_INPUT_TOUCHSCREEN=y +CONFIG_TOUCHSCREEN_ADS7846=y +CONFIG_TOUCHSCREEN_AD7879=y +CONFIG_TOUCHSCREEN_AD7879_I2C=y +CONFIG_TOUCHSCREEN_ATMEL_MXT=y +CONFIG_TOUCHSCREEN_DA9052=y +CONFIG_TOUCHSCREEN_EGALAX=y +CONFIG_TOUCHSCREEN_ELAN_TS=y +CONFIG_TOUCHSCREEN_GOODIX=y +CONFIG_TOUCHSCREEN_ILI210X=y +CONFIG_TOUCHSCREEN_MAX11801=y +CONFIG_TOUCHSCREEN_IMX6UL_TSC=y +CONFIG_TOUCHSCREEN_EDT_FT5X06=y +CONFIG_TOUCHSCREEN_MC13783=y +CONFIG_TOUCHSCREEN_TSC2004=y +CONFIG_TOUCHSCREEN_TSC2007=y +CONFIG_TOUCHSCREEN_STMPE=y +CONFIG_TOUCHSCREEN_SX8654=y +CONFIG_TOUCHSCREEN_COLIBRI_VF50=y +CONFIG_TOUCHSCREEN_FTS=y +CONFIG_INPUT_MISC=y +CONFIG_INPUT_MMA8450=y +CONFIG_SERIO_SERPORT=m +# CONFIG_LEGACY_PTYS is not set +CONFIG_SERIAL_IMX=y +CONFIG_SERIAL_IMX_CONSOLE=y +CONFIG_SERIAL_FSL_LPUART=y +CONFIG_SERIAL_FSL_LPUART_CONSOLE=y +CONFIG_SERIAL_DEV_BUS=y +# CONFIG_I2C_COMPAT is not set +CONFIG_I2C_CHARDEV=y +CONFIG_I2C_MUX=y +CONFIG_I2C_MUX_GPIO=y +# CONFIG_I2C_HELPER_AUTO is not set +CONFIG_I2C_ALGOPCF=m +CONFIG_I2C_ALGOPCA=m +CONFIG_I2C_GPIO=y +CONFIG_I2C_IMX=y +CONFIG_I2C_IMX_LPI2C=y +CONFIG_SPI=y +CONFIG_SPI_FSL_LPSPI=y +CONFIG_SPI_FSL_QUADSPI=y +CONFIG_SPI_GPIO=y +CONFIG_SPI_IMX=y +CONFIG_SPI_SPIDEV=y +CONFIG_SPI_SLAVE=y +CONFIG_SPI_SLAVE_TIME=y +CONFIG_SPI_SLAVE_SYSTEM_CONTROL=y +CONFIG_GPIO_SYSFS=y +CONFIG_GPIO_MXC=y +CONFIG_GPIO_SIOX=m +CONFIG_GPIO_IMX_RPMSG=y +CONFIG_GPIO_MAX732X=y +CONFIG_GPIO_PCA953X=y +CONFIG_GPIO_PCF857X=y +CONFIG_GPIO_STMPE=y +CONFIG_GPIO_74X164=y +CONFIG_POWER_RESET=y +CONFIG_POWER_RESET_SYSCON=y +CONFIG_POWER_RESET_SYSCON_POWEROFF=y +CONFIG_POWER_SUPPLY=y +CONFIG_SABRESD_MAX8903=y +CONFIG_RN5T618_POWER=m +CONFIG_SENSORS_MC13783_ADC=y +CONFIG_SENSORS_GPIO_FAN=y +CONFIG_SENSORS_IIO_HWMON=y +CONFIG_SENSORS_MAX17135=y +CONFIG_THERMAL=y +CONFIG_THERMAL_STATISTICS=y +CONFIG_THERMAL_WRITABLE_TRIPS=y +CONFIG_CPU_THERMAL=y +CONFIG_IMX_THERMAL=y +CONFIG_DEVICE_THERMAL=y +CONFIG_WATCHDOG=y +CONFIG_DA9063_WATCHDOG=m +CONFIG_DA9062_WATCHDOG=y +CONFIG_RN5T618_WATCHDOG=y +CONFIG_IMX2_WDT=y +CONFIG_IMX7ULP_WDT=y +CONFIG_MFD_DA9052_I2C=y +CONFIG_MFD_DA9062=y +CONFIG_MFD_DA9063=y +CONFIG_MFD_MC13XXX_SPI=y +CONFIG_MFD_MC13XXX_I2C=y +CONFIG_MFD_MAX17135=y +CONFIG_MFD_RN5T618=y +CONFIG_MFD_SI476X_CORE=y +CONFIG_MFD_STMPE=y +CONFIG_REGULATOR=y +CONFIG_REGULATOR_FIXED_VOLTAGE=y +CONFIG_REGULATOR_ANATOP=y +CONFIG_REGULATOR_DA9052=y +CONFIG_REGULATOR_DA9062=y +CONFIG_REGULATOR_DA9063=y +CONFIG_REGULATOR_GPIO=y +CONFIG_REGULATOR_LTC3676=y +CONFIG_REGULATOR_MAX17135=y +CONFIG_REGULATOR_MC13783=y +CONFIG_REGULATOR_MC13892=y +CONFIG_REGULATOR_PF1550_RPMSG=y +CONFIG_REGULATOR_PFUZE100=y +CONFIG_REGULATOR_RN5T618=y +CONFIG_RC_CORE=y +CONFIG_RC_DEVICES=y +CONFIG_IR_GPIO_CIR=y +CONFIG_MEDIA_SUPPORT=y +CONFIG_MEDIA_USB_SUPPORT=y +CONFIG_USB_VIDEO_CLASS=m +CONFIG_RADIO_SI476X=y +CONFIG_V4L_PLATFORM_DRIVERS=y +CONFIG_VIDEO_MUX=y +CONFIG_VIDEO_MXC_CAPTURE=m +CONFIG_VIDEO_MXC_OUTPUT=y +CONFIG_VIDEO_MXC_CSI_CAMERA=m +CONFIG_MXC_VADC=m +CONFIG_MXC_MIPI_CSI=m +CONFIG_MXC_CAMERA_OV5640=m +CONFIG_MXC_CAMERA_OV5640_V2=m +CONFIG_MXC_CAMERA_OV5640_MIPI=m +CONFIG_MXC_CAMERA_OV5640_MIPI_V2=m +CONFIG_MXC_TVIN_ADV7180=m +CONFIG_MXC_IPU_DEVICE_QUEUE_SDC=m +CONFIG_VIDEO_MXC_IPU_OUTPUT=y +CONFIG_VIDEO_MXC_PXP_V4L2=y +CONFIG_V4L_MEM2MEM_DRIVERS=y +CONFIG_VIDEO_CODA=m +CONFIG_VIDEO_IMX_PXP=y +CONFIG_VIDEO_ADV7180=m +CONFIG_VIDEO_OV2680=m +CONFIG_VIDEO_OV5645=m +CONFIG_DRM=y +CONFIG_DRM_PANEL_LVDS=y +CONFIG_DRM_PANEL_SIMPLE=y +CONFIG_DRM_PANEL_SEIKO_43WVF1G=y +CONFIG_DRM_TI_TFP410=y +CONFIG_FB=y +CONFIG_FB_MXS=y +CONFIG_FB_MXC_SYNC_PANEL=y +CONFIG_FB_MXC_OVERLAY=y +CONFIG_FB_MXC_MIPI_DSI_NORTHWEST=y +CONFIG_FB_MXC_ADV7535=y +CONFIG_FB_MXC_TRULY_PANEL_TFT3P5581E=y +CONFIG_FB_MXC_TRULY_WVGA_SYNC_PANEL=y +CONFIG_FB_MXC_RK_PANEL_RK055AHD042=y +CONFIG_FB_MXC_RK_PANEL_RK055IQH042=y +CONFIG_FB_MXC_MIPI_DSI_SAMSUNG=y +CONFIG_FB_MXC_MIPI_DSI=y +CONFIG_FB_MXC_LDB=y +CONFIG_FB_MXC_EINK_PANEL=y +CONFIG_FB_MXC_EINK_V2_PANEL=y +CONFIG_FB_MXC_HDMI=y +CONFIG_FB_MXS_SII902X=y +CONFIG_FB_MXC_DCIC=y +CONFIG_LCD_CLASS_DEVICE=y +CONFIG_LCD_L4F00242T03=y +CONFIG_LCD_PLATFORM=y +CONFIG_BACKLIGHT_PWM=y +CONFIG_BACKLIGHT_GPIO=y +CONFIG_FRAMEBUFFER_CONSOLE=y +CONFIG_LOGO=y +CONFIG_SOUND=y +CONFIG_SND=y +CONFIG_SND_USB_AUDIO=m +CONFIG_SND_SOC=y +CONFIG_SND_SOC_FSL_ASRC=y +CONFIG_SND_SOC_FSL_MQS=y +CONFIG_SND_SOC_FSL_RPMSG=y +CONFIG_SND_IMX_SOC=y +CONFIG_SND_SOC_EUKREA_TLV320=y +CONFIG_SND_SOC_IMX_ES8328=y +CONFIG_SND_SOC_IMX_SGTL5000=y +CONFIG_SND_SOC_IMX_SPDIF=y +CONFIG_SND_SOC_FSL_ASOC_CARD=y +CONFIG_SND_SOC_IMX_HDMI=y +CONFIG_SND_SOC_IMX6QDL_HDMI=y +CONFIG_SND_SOC_AC97_CODEC=y +CONFIG_SND_SOC_CS42XX8_I2C=y +CONFIG_SND_SOC_WM8960=y +CONFIG_SND_SOC_WM8962=y +CONFIG_SND_SOC_RPMSG_WM8960=y +CONFIG_SND_SIMPLE_CARD=y +CONFIG_HID_MULTITOUCH=y +CONFIG_USB=y +CONFIG_USB_ANNOUNCE_NEW_DEVICES=y +CONFIG_USB_EHCI_HCD=y +CONFIG_USB_HCD_TEST_MODE=y +CONFIG_USB_ACM=m +CONFIG_USB_STORAGE=y +CONFIG_USB_CHIPIDEA=y +CONFIG_USB_CHIPIDEA_UDC=y +CONFIG_USB_CHIPIDEA_HOST=y +CONFIG_USB_SERIAL=m +CONFIG_USB_SERIAL_GENERIC=y +CONFIG_USB_SERIAL_FTDI_SIO=m +CONFIG_USB_SERIAL_OPTION=m +CONFIG_USB_TEST=m +CONFIG_USB_EHSET_TEST_FIXTURE=m +CONFIG_NOP_USB_XCEIV=y +CONFIG_USB_MXS_PHY=y +CONFIG_USB_GADGET=y +CONFIG_USB_CONFIGFS=y +CONFIG_USB_CONFIGFS_SERIAL=y +CONFIG_USB_CONFIGFS_ACM=y +CONFIG_USB_CONFIGFS_OBEX=y +CONFIG_USB_CONFIGFS_NCM=y +CONFIG_USB_CONFIGFS_ECM=y +CONFIG_USB_CONFIGFS_ECM_SUBSET=y +CONFIG_USB_CONFIGFS_RNDIS=y +CONFIG_USB_CONFIGFS_EEM=y +CONFIG_USB_CONFIGFS_MASS_STORAGE=y +CONFIG_USB_CONFIGFS_F_LB_SS=y +CONFIG_USB_CONFIGFS_F_FS=y +CONFIG_USB_CONFIGFS_F_UAC1=y +CONFIG_USB_CONFIGFS_F_UAC2=y +CONFIG_USB_CONFIGFS_F_MIDI=y +CONFIG_USB_CONFIGFS_F_HID=y +CONFIG_USB_CONFIGFS_F_UVC=y +CONFIG_USB_CONFIGFS_F_PRINTER=y +CONFIG_USB_ZERO=m +CONFIG_USB_AUDIO=m +CONFIG_USB_ETH=m +CONFIG_USB_G_NCM=m +CONFIG_USB_GADGETFS=m +CONFIG_USB_FUNCTIONFS=m +CONFIG_USB_MASS_STORAGE=m +CONFIG_USB_G_SERIAL=m +CONFIG_MMC=y +CONFIG_MMC_SDHCI=y +CONFIG_MMC_SDHCI_PLTFM=y +CONFIG_MMC_SDHCI_ESDHC_IMX=y +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y +CONFIG_LEDS_GPIO=y +CONFIG_LEDS_PWM=y +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_TRIGGER_TIMER=y +CONFIG_LEDS_TRIGGER_ONESHOT=y +CONFIG_LEDS_TRIGGER_HEARTBEAT=y +CONFIG_LEDS_TRIGGER_BACKLIGHT=y +CONFIG_LEDS_TRIGGER_GPIO=y +CONFIG_LEDS_TRIGGER_DEFAULT_ON=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_INTF_DEV_UIE_EMUL=y +CONFIG_RTC_DRV_DS1307=y +CONFIG_RTC_DRV_ISL1208=y +CONFIG_RTC_DRV_PCF8523=y +CONFIG_RTC_DRV_PCF8563=y +CONFIG_RTC_DRV_M41T80=y +CONFIG_RTC_DRV_RC5T619=y +CONFIG_RTC_DRV_DA9063=y +CONFIG_RTC_DRV_MC13XXX=y +CONFIG_RTC_DRV_MXC=y +CONFIG_RTC_DRV_MXC_V2=y +CONFIG_RTC_DRV_SNVS=y +CONFIG_RTC_DRV_IMX_RPMSG=y +CONFIG_DMADEVICES=y +CONFIG_FSL_EDMA=y +CONFIG_IMX_SDMA=y +CONFIG_MXS_DMA=y +CONFIG_MXC_PXP_V2=y +CONFIG_MXC_PXP_V3=y +CONFIG_DMATEST=m +CONFIG_STAGING=y +CONFIG_STAGING_MEDIA=y +CONFIG_COMMON_CLK_PWM=y +CONFIG_REMOTEPROC=y +CONFIG_IMX_REMOTEPROC=y +CONFIG_EXTCON_USB_GPIO=y +CONFIG_IIO=y +CONFIG_MMA8452=y +CONFIG_IMX7D_ADC=y +CONFIG_RN5T618_ADC=y +CONFIG_VF610_ADC=y +CONFIG_FXAS21002C=y +CONFIG_FXOS8700_I2C=y +CONFIG_RPMSG_IIO_PEDOMETER=m +CONFIG_SENSORS_ISL29018=y +CONFIG_MAG3110=y +CONFIG_MPL3115=y +CONFIG_PWM=y +CONFIG_PWM_FSL_FTM=y +CONFIG_PWM_IMX27=y +CONFIG_PWM_IMX_TPM=y +CONFIG_PHY_MIXEL_LVDS=y +CONFIG_PHY_MIXEL_LVDS_COMBO=y +CONFIG_NVMEM_IMX_OCOTP=y +CONFIG_NVMEM_SNVS_LPGPR=y +CONFIG_TEE=y +CONFIG_OPTEE=y +CONFIG_MUX_MMIO=y +CONFIG_SIOX=m +CONFIG_SIOX_BUS_GPIO=m +CONFIG_MXC_SIM=y +CONFIG_MXC_IPU=y +CONFIG_MXC_SIMv2=y +CONFIG_MXC_MLB150=y +CONFIG_MXC_IPU_V3_PRE=y +CONFIG_MXC_HDMI_CEC=y +CONFIG_MXC_MIPI_CSI2=y +CONFIG_EXT2_FS=y +CONFIG_EXT2_FS_XATTR=y +CONFIG_EXT2_FS_POSIX_ACL=y +CONFIG_EXT2_FS_SECURITY=y +CONFIG_EXT3_FS=y +CONFIG_EXT3_FS_POSIX_ACL=y +CONFIG_EXT3_FS_SECURITY=y +CONFIG_QUOTA=y +CONFIG_QUOTA_NETLINK_INTERFACE=y +# CONFIG_PRINT_QUOTA_WARNING is not set +CONFIG_AUTOFS4_FS=y +CONFIG_FUSE_FS=y +CONFIG_OVERLAY_FS=y +CONFIG_ISO9660_FS=m +CONFIG_JOLIET=y +CONFIG_ZISOFS=y +CONFIG_UDF_FS=m +CONFIG_MSDOS_FS=m +CONFIG_VFAT_FS=y +CONFIG_TMPFS=y +CONFIG_TMPFS_POSIX_ACL=y +CONFIG_JFFS2_FS=y +CONFIG_UBIFS_FS=y +CONFIG_NFS_FS=y +CONFIG_NFS_V3_ACL=y +CONFIG_NFS_V4=y +CONFIG_NFS_V4_1=y +CONFIG_NFS_V4_2=y +CONFIG_ROOT_NFS=y +CONFIG_NLS_DEFAULT="cp437" +CONFIG_NLS_CODEPAGE_437=y +CONFIG_NLS_ASCII=y +CONFIG_NLS_ISO8859_1=y +CONFIG_NLS_ISO8859_15=m +CONFIG_NLS_UTF8=y +CONFIG_SECURITYFS=y +CONFIG_CRYPTO_USER=y +CONFIG_CRYPTO_TEST=m +CONFIG_CRYPTO_ECHAINIV=m +CONFIG_CRYPTO_TLS=m +CONFIG_CRYPTO_CFB=m +CONFIG_CRYPTO_CTS=m +CONFIG_CRYPTO_LRW=m +CONFIG_CRYPTO_OFB=m +CONFIG_CRYPTO_PCBC=m +CONFIG_CRYPTO_XCBC=m +CONFIG_CRYPTO_VMAC=m +CONFIG_CRYPTO_XXHASH=m +CONFIG_CRYPTO_BLAKE2B=m +CONFIG_CRYPTO_BLAKE2S=m +CONFIG_CRYPTO_MD4=m +CONFIG_CRYPTO_MD5=m +CONFIG_CRYPTO_RMD160=m +CONFIG_CRYPTO_SHA3=m +CONFIG_CRYPTO_SM3=m +CONFIG_CRYPTO_STREEBOG=m +CONFIG_CRYPTO_WP512=m +CONFIG_CRYPTO_ANUBIS=m +CONFIG_CRYPTO_ARC4=m +CONFIG_CRYPTO_BLOWFISH=m +CONFIG_CRYPTO_CAMELLIA=m +CONFIG_CRYPTO_CAST5=m +CONFIG_CRYPTO_CAST6=m +CONFIG_CRYPTO_DES=m +CONFIG_CRYPTO_FCRYPT=m +CONFIG_CRYPTO_KHAZAD=m +CONFIG_CRYPTO_SEED=m +CONFIG_CRYPTO_SERPENT=m +CONFIG_CRYPTO_SM4=m +CONFIG_CRYPTO_TEA=m +CONFIG_CRYPTO_TWOFISH=m +CONFIG_CRYPTO_ANSI_CPRNG=m +CONFIG_CRYPTO_USER_API_RNG=m +CONFIG_CRYPTO_DEV_FSL_CAAM_SECVIO=m +CONFIG_CRYPTO_DEV_FSL_CAAM=m +CONFIG_CRYPTO_DEV_FSL_CAAM_SM_TEST=m +CONFIG_CRYPTO_DEV_SAHARA=y +CONFIG_CRYPTO_DEV_MXS_DCP=y +CONFIG_CRC_CCITT=m +CONFIG_CRC_T10DIF=y +CONFIG_CRC7=m +CONFIG_LIBCRC32C=m +CONFIG_DMA_CMA=y +CONFIG_FONTS=y +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y +CONFIG_PRINTK_TIME=y +# CONFIG_DEBUG_BUGVERBOSE is not set +CONFIG_MAGIC_SYSRQ=y +CONFIG_DEBUG_FS=y +# CONFIG_SCHED_DEBUG is not set +# CONFIG_DEBUG_PREEMPT is not set +# CONFIG_FTRACE is not set + +# enable AF_ALG +CONFIG_CRYPTO_USER_API_HASH=m +CONFIG_CRYPTO_USER_API_SKCIPHER=m +CONFIG_CRYPTO_USER_API_AEAD=m + +# enable KTLS +CONFIG_TLS=y +CONFIG_TLS_DEVICE=y + +#enable trust based hardware key +CONFIG_TRUSTED_KEYS=m +CONFIG_TRUSTED_KEYS_TPM=n +CONFIG_TRUSTED_KEYS_TEE=n +CONFIG_TRUSTED_KEYS_CAAM=n +CONFIG_TRUSTED_KEYS_DCP=y + +# Custom Addition of Linke +# enable one wire device driver +CONFIG_W1=y +CONFIG_W1_MASTER_GPIO=y +CONFIG_W1_SLAVE_THERM=y + +# enable drm to realize fb +CONFIG_DRM_MXSFB=y diff -Nuar --no-dereference -x logo_linux_clut224.ppm linux-imx/drivers/gpu/drm/mxsfb/mxsfb_drv.c linux-imx-lf-5.15.71-2.2.0/drivers/gpu/drm/mxsfb/mxsfb_drv.c --- linux-imx/drivers/gpu/drm/mxsfb/mxsfb_drv.c 2023-03-01 18:11:27.000000000 +0800 +++ linux-imx-lf-5.15.71-2.2.0/drivers/gpu/drm/mxsfb/mxsfb_drv.c 2023-03-02 21:11:19.981065658 +0800 @@ -360,7 +360,8 @@ if (ret) goto err_unload; - drm_fbdev_generic_setup(drm, 32); + /* modify color depth to support RGB565 LCD by linke */ + drm_fbdev_generic_setup(drm, 16); return 0; @@ -407,7 +408,7 @@ .probe = mxsfb_probe, .remove = mxsfb_remove, .driver = { - .name = "mxsfb", + .name = "mxsfb-drm", .of_match_table = mxsfb_dt_ids, .pm = &mxsfb_pm_ops, }, diff -Nuar --no-dereference -x logo_linux_clut224.ppm linux-imx/drivers/gpu/drm/panel/panel-simple.c linux-imx-lf-5.15.71-2.2.0/drivers/gpu/drm/panel/panel-simple.c --- linux-imx/drivers/gpu/drm/panel/panel-simple.c 2023-03-01 18:11:28.000000000 +0800 +++ linux-imx-lf-5.15.71-2.2.0/drivers/gpu/drm/panel/panel-simple.c 2023-03-02 21:13:45.554025562 +0800 @@ -4534,8 +4534,33 @@ .bus_format = MEDIA_BUS_FMT_RGB888_1X24, }; +static const struct drm_display_mode fsl_imx6ull_panel_mode[] = { + { + .clock = 30000, + .hdisplay = 800, + .hsync_start = 800 + 40, + .hsync_end = 800 + 40 + 48, + .htotal = 800 + 40 + 48 + 88, + .vdisplay = 480, + .vsync_start = 480 + 13, + .vsync_end = 480 + 13 + 3, + .vtotal = 480 + 13 + 3 + 32, + .flags = DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC, + }, +}; + +static const struct panel_desc fsl_imx6ull_panel = { + .modes = fsl_imx6ull_panel_mode, + .num_modes = 1, + .bpc = 8, + .bus_format = MEDIA_BUS_FMT_RGB565_1X16, +}; + static const struct of_device_id platform_of_match[] = { { + .compatible = "fsl,imx6ull-panel", + .data = &fsl_imx6ull_panel, + }, { .compatible = "ampire,am-1280800n3tzqw-t00h", .data = &ire_am_1280800n3tzqw_t00h, }, { diff -Nuar --no-dereference -x logo_linux_clut224.ppm linux-imx/drivers/video/backlight/pwm_bl.c linux-imx-lf-5.15.71-2.2.0/drivers/video/backlight/pwm_bl.c --- linux-imx/drivers/video/backlight/pwm_bl.c 2023-03-01 18:11:32.000000000 +0800 +++ linux-imx-lf-5.15.71-2.2.0/drivers/video/backlight/pwm_bl.c 2023-03-02 21:15:09.916249612 +0800 @@ -552,6 +552,7 @@ if (!state.period && (data->pwm_period_ns > 0)) state.period = data->pwm_period_ns; + state.enabled = true; /* Add by guowenxue to enalbe backlight as default */ ret = pwm_apply_state(pb->pwm, &state); if (ret) { dev_err(&pdev->dev, "failed to apply initial PWM state: %d\n", diff -Nuar --no-dereference -x logo_linux_clut224.ppm linux-imx/drivers/video/fbdev/core/fbcon.c linux-imx-lf-5.15.71-2.2.0/drivers/video/fbdev/core/fbcon.c --- linux-imx/drivers/video/fbdev/core/fbcon.c 2023-03-01 18:11:32.000000000 +0800 +++ linux-imx-lf-5.15.71-2.2.0/drivers/video/fbdev/core/fbcon.c 2023-03-02 21:16:33.742476565 +0800 @@ -355,39 +355,7 @@ return color; } -static void fb_flashcursor(struct work_struct *work) -{ - struct fb_info *info = container_of(work, struct fb_info, queue); - struct fbcon_ops *ops = info->fbcon_par; - struct vc_data *vc = NULL; - int c; - int mode; - int ret; - - /* FIXME: we should sort out the unbind locking instead */ - /* instead we just fail to flash the cursor if we can't get - * the lock instead of blocking fbcon deinit */ - ret = console_trylock(); - if (ret == 0) - return; - - if (ops && ops->currcon != -1) - vc = vc_cons[ops->currcon].d; - - if (!vc || !con_is_visible(vc) || - registered_fb[con2fb_map[vc->vc_num]] != info || - vc->vc_deccm != 1) { - console_unlock(); - return; - } - - c = scr_readw((u16 *) vc->vc_pos); - mode = (!ops->cursor_flash || ops->cursor_state.enable) ? - CM_ERASE : CM_DRAW; - ops->cursor(vc, info, mode, get_color(vc, info, c, 1), - get_color(vc, info, c, 0)); - console_unlock(); -} +static void fb_flashcursor(struct work_struct *work){} static void cursor_timer_handler(struct timer_list *t) { @@ -1317,30 +1285,7 @@ ops->clear_margins(vc, info, margin_color, bottom_only); } -static void fbcon_cursor(struct vc_data *vc, int mode) -{ - struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]]; - struct fbcon_ops *ops = info->fbcon_par; - int c = scr_readw((u16 *) vc->vc_pos); - - ops->cur_blink_jiffies = msecs_to_jiffies(vc->vc_cur_blink_ms); - - if (fbcon_is_inactive(vc, info) || vc->vc_deccm != 1) - return; - - if (vc->vc_cursor_type & CUR_SW) - fbcon_del_cursor_timer(info); - else - fbcon_add_cursor_timer(info); - - ops->cursor_flash = (mode == CM_ERASE) ? 0 : 1; - - if (!ops->cursor) - return; - - ops->cursor(vc, info, mode, get_color(vc, info, c, 1), - get_color(vc, info, c, 0)); -} +static void fbcon_cursor(struct vc_data *vc, int mode){} static int scrollback_phys_max = 0; static int scrollback_max = 0; diff -Nuar --no-dereference -x logo_linux_clut224.ppm linux-imx/drivers/video/fbdev/mxsfb.c linux-imx-lf-5.15.71-2.2.0/drivers/video/fbdev/mxsfb.c --- linux-imx/drivers/video/fbdev/mxsfb.c 2023-03-01 18:11:32.000000000 +0800 +++ linux-imx-lf-5.15.71-2.2.0/drivers/video/fbdev/mxsfb.c 2023-03-02 21:17:31.225256558 +0800 @@ -1586,7 +1586,6 @@ static const struct of_device_id mxsfb_dt_ids[] = { { .compatible = "fsl,imx23-lcdif", .data = &mxsfb_devtype[0], }, - { .compatible = "fsl,imx28-lcdif", .data = &mxsfb_devtype[1], }, { .compatible = "fsl,imx7ulp-lcdif", .data = &mxsfb_devtype[2], }, { /* sentinel */ } }; diff -Nuar --no-dereference -x logo_linux_clut224.ppm linux-imx/Makefile linux-imx-lf-5.15.71-2.2.0/Makefile --- linux-imx/Makefile 2023-03-01 18:11:24.000000000 +0800 +++ linux-imx-lf-5.15.71-2.2.0/Makefile 2023-03-02 21:05:05.864664425 +0800 @@ -5,6 +5,9 @@ EXTRAVERSION = NAME = Trick or Treat +ARCH = arm +CROSS_COMPILE = /opt/buildroot/cortexA7/bin/arm-linux- + # *DOCUMENTATION* # To see a list of typical targets execute "make help" # More info can be located in ./README @@ -1910,6 +1913,7 @@ \( -name '*.[aios]' -o -name '*.ko' -o -name '.*.cmd' \ -o -name '*.ko.*' \ -o -name '*.dtb' -o -name '*.dtbo' -o -name '*.dtb.S' -o -name '*.dt.yaml' \ + -o -name '*.dtbo' \ -o -name '*.dwo' -o -name '*.lst' \ -o -name '*.su' -o -name '*.mod' \ -o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \ yocto/meta-igkboard/kirkstone-lf-5.15.71-2.2.0/recipes-kernel/linux/linux-imx-headers_5.15.bbappend
New file @@ -0,0 +1,4 @@ LICENSE = "GPL-2.0-only" LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46" SRCREV = "95448dd0dc9b621ae027cbefedaaa7c3d0d3ad2d" yocto/meta-igkboard/kirkstone-lf-5.15.71-2.2.0/recipes-kernel/linux/linux-imx_5.15.bbappend
New file @@ -0,0 +1,12 @@ require recipes-kernel/linux/linux-yocto.inc FILESEXTRAPATHS:prepend := "${THISDIR}/files:" SRC_URI += " file://linux-imx-igkboard.patch " PATCHTOOL = "patch" do_copy_defconfig:append() { cp ${S}/arch/arm/configs/igkboard_defconfig ${WORKDIR}/defconfig cp ${S}/arch/arm/configs/igkboard_defconfig ${B}/.config } KERNEL_DANGLING_FEATURES_WARN_ONLY="1" yocto/meta-igkboard/kirkstone-lf-5.15.71-2.2.0/recipes-misc/expand-rootfs/expand-rootfs_1.0.bb
New file @@ -0,0 +1,15 @@ DESCRIPTION = "Expand rootfs space on MMC" LICENSE = "GPLv2" LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/GPL-2.0-only;md5=801f80980d171dd6425610833a22dbe6" FILESEXTRAPATHS:prepend := "${THISDIR}/files:" SRC_URI += " file://expand_rootfs " FILES_${PN} += "${sbindir}/expand_rootfs" do_install() { install -d ${D}/${sbindir}/ install -m 0755 ${WORKDIR}/expand_rootfs ${D}/${sbindir}/ } RDEPENDS_expand-rootfs = "bash e2fsprogs util-linux" yocto/meta-igkboard/kirkstone-lf-5.15.71-2.2.0/recipes-misc/expand-rootfs/files/expand_rootfs
New file @@ -0,0 +1,30 @@ #!/bin/bash set -e set -u # find the root partition information ROOT_PART="$(mount | sed -n 's|^/dev/\(.*\) on / .*|\1|p')" ROOT_DEV="/dev/$(lsblk -no pkname /dev/${ROOT_PART})" PART_NUM="$(echo $ROOT_PART | grep -o "[[:digit:]]*$")" # Get the starting offset of the root partition PART_START=$(fdisk -l $ROOT_DEV | grep $ROOT_PART | awk '{print $2}') [ "$PART_START" ] || return 1 ; fdisk "$ROOT_DEV" > /dev/null 2>&1 <<EOF p d $PART_NUM n p $PART_NUM $PART_START p w EOF resize2fs /dev/$ROOT_PART > /dev/null 2>&1 echo "Expand rootfs size successfully, it will be enlarged upon the next reboot." yocto/meta-igkboard/kirkstone-lf-5.15.71-2.2.0/recipes-misc/packagegroups/packagegroup-misc-utils.bb
New file @@ -0,0 +1,6 @@ SUMMARY = "Useradd system service and system shell scripts tools package" PR = "r1" inherit packagegroup RDEPENDS_${PN} = "expand-rootfs sshswitch wpa-conf" yocto/meta-igkboard/kirkstone-lf-5.15.71-2.2.0/recipes-misc/sshswitch/files/sshswitch.service
New file @@ -0,0 +1,11 @@ [Unit] Description=Turn on SSH if /run/media/mmcblk1p1/ssh is present ConditionPathExists=/run/media/mmcblk1p1/ssh After=weston.service [Service] Type=oneshot ExecStart=/bin/sh -c "/bin/sed -i 's/^#PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_config && rm -f /run/media/mmcblk1p1/ssh" [Install] WantedBy=multi-user.target yocto/meta-igkboard/kirkstone-lf-5.15.71-2.2.0/recipes-misc/sshswitch/sshswitch_1.0.bb
New file @@ -0,0 +1,17 @@ DESCRIPTION = "Turn on SSH if /boot/ssh is present" LICENSE = "GPLv2" LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/GPL-2.0-only;md5=801f80980d171dd6425610833a22dbe6" inherit systemd SYSTEMD_AUTO_ENABLE = "enable" SYSTEMD_SERVICE_${PN} = "sshswitch.service" SRC_URI += " file://sshswitch.service " FILES_${PN} += "${systemd_unitdir}/system/sshswitch.service" do_install() { install -d ${D}/${systemd_unitdir}/system install -m 0644 ${WORKDIR}/sshswitch.service ${D}/${systemd_unitdir}/system } yocto/meta-igkboard/kirkstone-lf-5.15.71-2.2.0/recipes-misc/wpa-conf/files/wpa-conf.service
New file @@ -0,0 +1,15 @@ [Unit] Description=Copy user wpa_supplicant.conf ConditionPathExists=/run/media/mmcblk1p1/wpa_supplicant.conf After=weston.service [Service] Type=oneshot RemainAfterExit=yes ExecStartPre=/bin/mkdir -p /etc/wpa_supplicant/ ExecStart=/bin/mv /run/media/mmcblk1p1/wpa_supplicant.conf /etc/wpa_supplicant/wpa_supplicant-wlan0.conf ExecStartPost=/bin/chmod 600 /etc/wpa_supplicant/wpa_supplicant-wlan0.conf ExecStartPost=/bin/sh -c "systemctl enable --now wpa_supplicant@wlan0" [Install] WantedBy=multi-user.target yocto/meta-igkboard/kirkstone-lf-5.15.71-2.2.0/recipes-misc/wpa-conf/wpa-conf_1.0.bb
New file @@ -0,0 +1,17 @@ DESCRIPTION = "Copy user wpa_supplicant.conf" LICENSE = "GPLv2" LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/GPL-2.0-only;md5=801f80980d171dd6425610833a22dbe6" inherit systemd SYSTEMD_AUTO_ENABLE = "enable" SYSTEMD_SERVICE_${PN} = "wpa-conf.service" SRC_URI += " file://wpa-conf.service " FILES_${PN} += "${systemd_unitdir}/system/wpa-conf.service" do_install() { install -d ${D}/${systemd_unitdir}/system install -m 0644 ${WORKDIR}/wpa-conf.service ${D}/${systemd_unitdir}/system } yocto/meta-igkboard/kirkstone-lf-5.15.71-2.2.0/tools/igkboard-setup.sh
New file @@ -0,0 +1,178 @@ #!/bin/bash CWD=$(pwd) function log_error(){ echo -ne "\e[31m $1 \e[0m\n" } function usage(){ echo "Usage:" echo " MACHINE=<machine> source igkboard-setup.sh <build-dir>" echo "Options:" echo " <machine> machine name" echo " - igkboard" echo " * [-b build-dir]: Build directory, if unspecified script uses 'build' as output directory" echo " * [-h]: help" echo "Examples: " echo "$ MACHINE=igkboard source sources/meta-igkboard/tools/igkboard-setup.sh -b igkboard" echo } function cleanup_EULA(){ cd $CWD/sources/meta-freescale if [ -h EULA ]; then echo Cleanup meta-freescale/EULA... git checkout -- EULA fi if [ ! -f classes/fsl-eula-unpack.bbclass ]; then echo Cleanup meta-freescale/classes/fsl-eula-unpack.bbclass... git checkout -- classes/fsl-eula-unpack.bbclass fi cd - } function file_override() { source_path=$1 override_root=$2 if [ -f $source_path ]; then override_path=$override_root/`basename $source_path` if [ -f $override_path ]; then echo "\ WARNING: The file '$CWD/$source_path' is replacing the upstream file '$CWD/$override_path'. \ Overrides by file replacement are error-prone and discouraged. Please find an \ alternative override mechanism that uses meta-data only. " rm $override_path fi fi } function machine_overrides() { layer=$1 upstream_layer=$2 machines="../sources/$layer/conf/machine/*" machine_includes="../sources/$layer/conf/machine/include/*" for machine in $machines; do file_override $machine ../sources/$upstream_layer/conf/machine done for machine_include in $machine_includes; do file_override $machine_include ../sources/$upstream_layer/conf/machine/include done } function bbclass_overrides() { layer=$1 upstream_layer=$2 bbclasses="../sources/$layer/classes/*" for bbclass in $bbclasses; do file_override $bbclass ../sources/$upstream_layer/classes done } function hook_in_layer() { layer=$1 shift if [ "$1" = "" ]; then upstream_layers="meta-freescale" else upstream_layers="$@" fi # echo "BBLAYERS += \"\${BSPDIR}/sources/$layer\"" >> conf/bblayers.conf for upstream_layer in $upstream_layers; do machine_overrides $layer $upstream_layer bbclass_overrides $layer $upstream_layer done } function igkboard_conf_set(){ local build_dir=$1 if [ $MACHINE == "igkboard" ];then cp $CWD/sources/meta-igkboard/conf/local.conf $CWD/${build_dir}/conf/local.conf cp $CWD/sources/meta-igkboard/conf/bblayers.conf $CWD/${build_dir}/conf/bblayers.conf fi } function run(){ local build_dir=$1 local oeroot=$CWD/sources/poky if [ -e $CWD/sources/oe-core ]; then oeroot=$CWD/sources/oe-core fi . $oeroot/oe-init-build-env $CWD/$build_dir > /dev/null if [ ! -e conf/local.conf ]; then log_error "oe-init-build-env does not generated." exit -1 fi igkboard_conf_set $build_dir # Clean up PATH, because if it includes tokens to current directories somehow, # wrong binaries can be used instead of the expected ones during task execution export PATH="`echo $PATH | sed 's/\(:.\|:\)*:/:/g;s/^.\?://;s/:.\?$//'`" cat <<EOF Welcome LingYun IoT Gateway Kit Board Yocto BSP The Yocto Project has extensive documentation about OE including a reference manual which can be found at: http://yoctoproject.org/documentation You can now run 'bitbake <target>' Common targets are: linuxsys-image core-image-minimal imx-image-full EOF hook_in_layer meta-imx/meta-bsp hook_in_layer meta-imx/meta-sdk hook_in_layer meta-nxp-demo-experience } function start(){ if [ "$(whoami)" = "root" ]; then echo "ERROR: do not use the BSP as root. Exiting..." exit -1 fi local BUILD_DIR; local OLD_OPTIND=$OPTIND while getopts "b:h" fsl_setup_flag do case $fsl_setup_flag in b) BUILD_DIR="$OPTARG"; echo -e "\n Build directory is " $BUILD_DIR ;; h) usage exit -1 ;; \?) usage exit -1;; esac done shift $((OPTIND-1)) OPTIND=$OLD_OPTIND if [ -z "$BUILD_DIR" ]; then BUILD_DIR='build' fi if [ -z "$MACHINE" ]; then echo setting to default machine MACHINE='igkboard' fi cleanup_EULA; mkdir -p $BUILD_DIR run $BUILD_DIR } start $@