diff options
Diffstat (limited to 'arch')
56 files changed, 4178 insertions, 24 deletions
| diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 3f0e301d413..be2c96a93d5 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -1209,6 +1209,18 @@ config TARGET_HIKEY  	  Support for HiKey 96boards platform. It features a HI6220  	  SoC, with 8xA53 CPU, mali450 gpu, and 1GB RAM. +config TARGET_HIKEY960 +	bool "Support HiKey960 96boards Consumer Edition Platform" +	select ARM64 +	select DM +	select DM_SERIAL +	select OF_CONTROL +	select PL01X_SERIAL +	imply CMD_DM +	  help +	  Support for HiKey960 96boards platform. It features a HI3660 +	  SoC, with 4xA73 CPU, 4xA53 CPU, MALI-G71 GPU, and 3GB RAM. +  config TARGET_POPLAR  	bool "Support Poplar 96boards Enterprise Edition Platform"  	select ARM64 @@ -1778,6 +1790,7 @@ source "board/grinn/chiliboard/Kconfig"  source "board/gumstix/pepper/Kconfig"  source "board/h2200/Kconfig"  source "board/hisilicon/hikey/Kconfig" +source "board/hisilicon/hikey960/Kconfig"  source "board/hisilicon/poplar/Kconfig"  source "board/isee/igep003x/Kconfig"  source "board/phytec/pcm051/Kconfig" diff --git a/arch/arm/cpu/arm926ejs/spear/spr_misc.c b/arch/arm/cpu/arm926ejs/spear/spr_misc.c index 371dea56570..d36484c9d69 100644 --- a/arch/arm/cpu/arm926ejs/spear/spr_misc.c +++ b/arch/arm/cpu/arm926ejs/spear/spr_misc.c @@ -6,7 +6,7 @@  #include <common.h>  #include <command.h> -#include <environment.h> +#include <env.h>  #include <i2c.h>  #include <net.h>  #include <linux/mtd/st_smi.h> diff --git a/arch/arm/cpu/armv7/vf610/generic.c b/arch/arm/cpu/armv7/vf610/generic.c index 337f4af7a85..7e4641fd325 100644 --- a/arch/arm/cpu/armv7/vf610/generic.c +++ b/arch/arm/cpu/armv7/vf610/generic.c @@ -9,6 +9,7 @@  #include <asm/arch/clock.h>  #include <asm/arch/crm_regs.h>  #include <asm/mach-imx/sys_proto.h> +#include <env.h>  #include <netdev.h>  #ifdef CONFIG_FSL_ESDHC_IMX  #include <fsl_esdhc_imx.h> diff --git a/arch/arm/cpu/armv8/fsl-layerscape/cpu.c b/arch/arm/cpu/armv8/fsl-layerscape/cpu.c index edb9c966581..26f4fdacdb8 100644 --- a/arch/arm/cpu/armv8/fsl-layerscape/cpu.c +++ b/arch/arm/cpu/armv8/fsl-layerscape/cpu.c @@ -5,6 +5,7 @@   */  #include <common.h> +#include <env.h>  #include <fsl_ddr_sdram.h>  #include <asm/io.h>  #include <linux/errno.h> @@ -32,7 +33,7 @@  #include <fsl_qbman.h>  #ifdef CONFIG_TFABOOT -#include <environment.h> +#include <env_internal.h>  #ifdef CONFIG_CHAIN_OF_TRUST  #include <fsl_validate.h>  #endif diff --git a/arch/arm/cpu/armv8/fsl-layerscape/soc.c b/arch/arm/cpu/armv8/fsl-layerscape/soc.c index 7414215208c..ca8005992ae 100644 --- a/arch/arm/cpu/armv8/fsl-layerscape/soc.c +++ b/arch/arm/cpu/armv8/fsl-layerscape/soc.c @@ -5,6 +5,7 @@   */  #include <common.h> +#include <env.h>  #include <fsl_immap.h>  #include <fsl_ifc.h>  #include <asm/arch/fsl_serdes.h> @@ -26,7 +27,7 @@  #endif  #include <fsl_immap.h>  #ifdef CONFIG_TFABOOT -#include <environment.h> +#include <env_internal.h>  DECLARE_GLOBAL_DATA_PTR;  #endif diff --git a/arch/arm/cpu/armv8/fsl-layerscape/spl.c b/arch/arm/cpu/armv8/fsl-layerscape/spl.c index 3e53084b215..8eeeef199b1 100644 --- a/arch/arm/cpu/armv8/fsl-layerscape/spl.c +++ b/arch/arm/cpu/armv8/fsl-layerscape/spl.c @@ -4,6 +4,7 @@   */  #include <common.h> +#include <env.h>  #include <spl.h>  #include <asm/io.h>  #include <fsl_ifc.h> diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile index 9e7d6d64905..e021888ce47 100644 --- a/arch/arm/dts/Makefile +++ b/arch/arm/dts/Makefile @@ -15,6 +15,7 @@ dtb-$(CONFIG_EXYNOS4) += exynos4210-origen.dtb \  	exynos4412-odroid.dtb  dtb-$(CONFIG_TARGET_HIKEY) += hi6220-hikey.dtb +dtb-$(CONFIG_TARGET_HIKEY960) += hi3660-hikey960.dtb  dtb-$(CONFIG_TARGET_POPLAR) += hi3798cv200-poplar.dtb @@ -139,6 +140,7 @@ dtb-$(CONFIG_ARCH_MESON) += \  	meson-gxm-khadas-vim2.dtb \  	meson-axg-s400.dtb \  	meson-g12a-u200.dtb \ +	meson-g12a-sei510.dtb \  	meson-g12b-odroid-n2.dtb  dtb-$(CONFIG_TEGRA) += tegra20-harmony.dtb \  	tegra20-medcom-wide.dtb \ @@ -281,6 +283,7 @@ dtb-$(CONFIG_AM33XX) += \  	am335x-brppt1-nand.dtb \  	am335x-brppt1-spi.dtb \  	am335x-brxre1.dtb \ +	am335x-brsmarc1.dtb \  	am335x-draco.dtb \  	am335x-evm.dtb \  	am335x-evmsk.dtb \ diff --git a/arch/arm/dts/am335x-brsmarc1.dts b/arch/arm/dts/am335x-brsmarc1.dts new file mode 100644 index 00000000000..1a7f9a5365d --- /dev/null +++ b/arch/arm/dts/am335x-brsmarc1.dts @@ -0,0 +1,416 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Copyright (C) 2017 B&R Industrial Automation GmbH + * http://www.br-automation.com + * + */ +/dts-v1/; + +#include "am33xx.dtsi" +#include "dt-bindings/thermal/thermal.h" + +/ { +	model = "BRSMARC1 SoM"; +	compatible = "ti,am33xx"; + +	fset: factory-settings { +		bl-version	= "                                "; +		order-no	= "                                "; +		cpu-order-no	= "                                "; +		hw-revision	= "                                "; +		serial-no	= <0>; +		device-id	= <0x0>; +		parent-id	= <0x0>; +		hw-variant	= <0x0>; +		hw-platform	= <0x7>; +		fram-offset	= <0x100>; +		fram-size	= <0x1F00>; +		cache-disable	= <0x0>; +		cpu-clock	= <0x0>; +	}; + +	chosen { +		bootargs = "console=ttyO0,115200 earlyprintk"; +		stdout-path = &uart0; +	}; + +	aliases { +		fset = &fset; +		mmc = &mmc2; +		spi0 = &spi0; +		spi1 = &spi1; +		touch0 = &burtouch0; +		screen0 = &lcdscreen0; +	}; + +	memory { +		device_type = "memory"; +		reg = <0x80000000 0x10000000>; /* 256 MB */ +	}; + +	vmmcsd_fixed: fixedregulator@0 { +		compatible = "regulator-fixed"; +		regulator-name = "vmmcsd_fixed"; +		regulator-min-microvolt = <3300000>; +		regulator-max-microvolt = <3300000>; +	}; + +	lcdscreen0: lcdscreen@0 { +		/*backlight = <&tps_bl>; */ +		compatible = "ti,tilcdc,panel"; +		status = "okay"; + +		panel-info { +			ac-bias		= <255>; +			ac-bias-intrpt	= <0>; +			dma-burst-sz	= <16>; +			bpp		= <32>; +			fdd		= <0x80>; +			sync-edge	= <0>; +			sync-ctrl	= <1>; +			raster-order	= <0>; +			fifo-th		= <0>; +			rotation	= <0>; +			pupdelay	= <0>; +			pondelay	= <0>; +			pwrpin		= <0x000000B1>; +			brightdrv	= <0>; +			brightfdim	= <100>; +			brightdef	= <50>; +		}; + +		display-timings { +			default { +				clock-frequency	= <0>; +				hactive		= <0>; +				vactive		= <0>; +				hfront-porch	= <0>; +				hback-porch	= <0>; +				hsync-len	= <0>; +				vfront-porch	= <0>; +				vback-porch	= <0>; +				vsync-len	= <0>; +				hsync-active	= <0>; +				vsync-active	= <0>; +				pupdelay	= <10>; +				pondelay	= <10>; +			}; +		}; +	}; + +	board_thermal: board-thermal { +		polling-delay-passive = <1000>; /* milliseconds */ +		polling-delay = <2500>; /* milliseconds */ + +		thermal-sensors = <&cputemp>; + +		trips { +			crit_trip: crit-trip { +				temperature = <95000>; /* millicelsius */ +				hysteresis = <5000>; /* millicelsius */ +				type = "critical"; +			}; +		}; +		cooling-maps { +			map0 { +				trip = <&crit_trip>; +				cooling-device = +				<&resetc THERMAL_NO_LIMIT THERMAL_NO_LIMIT>; +			}; +		}; +	}; +}; + +&uart0 {		/* console uart */ +	u-boot,dm-spl; +	status = "okay"; +}; + +&uart2 {		/* X2X - P2P */ +	status = "okay"; +}; + +&uart3 {		/* RS485 */ +	status = "okay"; +}; + +&uart4 {		/* RS232 */ +	status = "okay"; +}; + +&i2c0 { +	u-boot,dm-spl; +	status = "okay"; +	clock-frequency = <100000>; + +	tps: tps@24 {		/* PMIC controller */ +		u-boot,dm-spl; +		reg = <0x24>; +		compatible = "ti,tps65217"; +	}; + +	cputemp: temperature-sensor@48 {	/* cpu temperature */ +		#thermal-sensor-cells = <0>; +		compatible = "nxp,pct2075"; +		reg = <0x48>; +	}; + +	basetemp: temperature-sensor@49 {	/* baseboard temperature */ +		#thermal-sensor-cells = <0>; +		compatible = "nxp,pct2075"; +		reg = <0x49>; +	}; +	extrtc: rtc@51 {	/* realtime clock */ +		compatible = "epson,rx8571"; +		reg = <0x51>; +	}; + +	resetc: reset-controller@60 { +		compatible = "bur,rststm"; +		reg = <0x60>; + +		cooling-min-state = <0>; +		cooling-max-state = <1>;	/* reset gets fired */ +		#cooling-cells = <2>;		/* min followed by max */ +	}; +}; + +&i2c1 { +	u-boot,dm-spl; +	status = "okay"; +}; + +&spi0 { +	u-boot,dm-spl; +	status = "okay"; + +	cs-gpios = <&gpio0 5 GPIO_ACTIVE_HIGH>, +		   <&gpio0 6 GPIO_ACTIVE_HIGH>, +		   <0>, +		   <0>; + +	spi-max-frequency = <24000000>; + +	spi_flash: spiflash@0 { +		u-boot,dm-spl; +		u-boot,dm-pre-reloc; +		compatible = "spidev", "spi-flash"; +		spi-max-frequency = <24000000>; +		reg = <0>; +	}; +}; + +&spi1 { +	u-boot,dm-spl; +	status = "okay"; +	cs-gpios = <&gpio3 17 GPIO_ACTIVE_HIGH>, +		   <&gpio0 19 GPIO_ACTIVE_HIGH>, +		   <0>, +		   <0>; + +	spi-max-frequency = <24000000>; +}; + +&edma { +	status = "okay"; +}; + +&cppi41dma  { +	status = "okay"; +}; + +&usb { +	status = "okay"; +}; + +&usb_ctrl_mod { +	status = "okay"; +}; + +&usb0_phy { +	status = "okay"; +}; + +&usb1_phy { +	status = "okay"; +}; + +&usb0 { +	status = "okay"; +	dr_mode = "host"; +}; + +&usb1 { +	status = "okay"; +	dr_mode = "host"; +}; + +&davinci_mdio { +	status = "okay"; +}; + +&mac { +	status = "okay"; +}; + +&phy_sel { +	rmii-clock-ext; +}; + +&cpsw_emac0 { +	phy_id = <&davinci_mdio>, <1>; +	phy-mode = "rmii"; +	ti,ledcr = <0x0480>; +}; + +&cpsw_emac1 { +	phy_id = <&davinci_mdio>, <3>; +	phy-mode = "rmii"; +	ti,ledcr = <0x0480>; +}; + +&mmc1 { +	vmmc-supply = <&vmmcsd_fixed>; +	bus-width = <0x4>; +	ti,non-removable; +	ti,needs-special-hs-handling; +	ti,vcc-aux-disable-is-sleep; +	status = "okay"; +}; + +&mmc2 { +	vmmc-supply = <&vmmcsd_fixed>; +	bus-width = <0x8>; +	ti,non-removable; +	ti,needs-special-hs-handling; +	ti,vcc-aux-disable-is-sleep; +	status = "okay"; +}; + +&lcdc { +	status = "okay"; +	ti,no-reset-on-init; +	ti,no-idle-on-init; +}; + +&elm { +	status = "okay"; +}; + +&sham { +	status = "okay"; +}; + +&aes { +	status = "okay"; +}; + +&gpio0 { +	u-boot,dm-spl; +	ti,no-reset-on-init; +}; + +&gpio1 { +	u-boot,dm-spl; +	ti,no-reset-on-init; +}; + +&gpio2 { +	u-boot,dm-spl; +	ti,no-reset-on-init; +}; + +&gpio3 { +	u-boot,dm-spl; +	ti,no-reset-on-init; +}; + +&timer1 {		/* today unused */ +	status = "okay"; +	ti,no-reset-on-init; +	ti,no-idle-on-init; +}; + +&timer2 {		/* used for vxworks primary timer device */ +	status = "okay"; +	ti,no-reset-on-init; +	ti,no-idle-on-init; +}; + +&timer3 {		/* used sysdelay and hal tsc counter*/ +	status = "okay"; +	ti,no-reset-on-init; +	ti,no-idle-on-init; +}; + +&timer4 {		/* used for PWM beeper */ +	status = "okay"; +	ti,no-reset-on-init; +	ti,no-idle-on-init; +}; + +&timer5 {		/* used for PWM backlight */ +	status = "okay"; +	ti,no-reset-on-init; +	ti,no-idle-on-init; +}; + +&timer6 {		/* used for cpsw end device */ +	status = "okay"; +	ti,no-reset-on-init; +	ti,no-idle-on-init; +}; + +&timer7 {		/* used for cpsw end device */ +	status = "okay"; +	ti,no-reset-on-init; +	ti,no-idle-on-init; +}; + +&wdt2 { +	status = "okay"; +	ti,no-reset-on-init; +	ti,no-idle-on-init; +}; + +&epwmss0 { +	status = "okay"; +}; + +&tscadc { +	status = "okay"; + +	tsc { +		burtouch0: burtouch@0 { +			status = "okay"; +			compatible = "bur,DdVxSfTouchXXX"; +			bur,hwtree = "IF7"; +			bur,KX0 = <0x0>; +			bur,KX1 = <0x0>; +			bur,KX2 = <0x0>; +			bur,KY0 = <0x0>; +			bur,KY1 = <0x0>; +			bur,KY2 = <0x0>; +		}; +	}; +}; + +&dcan0 { +	status = "okay"; +}; + +&dcan1 { +	status = "okay"; +}; + +&sham { +	status = "disabled"; +}; + +&aes { +	status = "disabled"; +}; + +&rng { +	status = "disabled"; +}; diff --git a/arch/arm/dts/hi3660-hikey960-u-boot.dtsi b/arch/arm/dts/hi3660-hikey960-u-boot.dtsi new file mode 100644 index 00000000000..648c77f8c54 --- /dev/null +++ b/arch/arm/dts/hi3660-hikey960-u-boot.dtsi @@ -0,0 +1,10 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * U-Boot additions + * + * Copyright (c) 2019 Linaro Ltd. + */ + +&dwmmc1 { +	u-boot,dm-pre-reloc; +}; diff --git a/arch/arm/dts/hi3660-hikey960.dts b/arch/arm/dts/hi3660-hikey960.dts new file mode 100644 index 00000000000..9fbfb422c82 --- /dev/null +++ b/arch/arm/dts/hi3660-hikey960.dts @@ -0,0 +1,607 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * dts file for Hisilicon HiKey960 Development Board + * + * Copyright (C) 2016, Hisilicon Ltd. + * + */ + +/dts-v1/; + +#include "hi3660.dtsi" +#include "hikey960-pinctrl.dtsi" +#include <dt-bindings/gpio/gpio.h> +#include <dt-bindings/input/input.h> +#include <dt-bindings/interrupt-controller/irq.h> + +/ { +	model = "HiKey960"; +	compatible = "hisilicon,hi3660-hikey960", "hisilicon,hi3660"; + +	aliases { +		mshc1 = &dwmmc1; +		mshc2 = &dwmmc2; +		serial0 = &uart0; +		serial1 = &uart1; +		serial2 = &uart2; +		serial3 = &uart3; +		serial4 = &uart4; +		serial5 = &uart5; +		serial6 = &uart6; +	}; + +	chosen { +		stdout-path = "serial6:115200n8"; +	}; + +	memory@0 { +		device_type = "memory"; +		/* rewrite this at bootloader */ +		reg = <0x0 0x0 0x0 0x0>; +	}; + +	reserved-memory { +		#address-cells = <2>; +		#size-cells = <2>; +		ranges; + +		ramoops@32000000 { +			compatible = "ramoops"; +			reg = <0x0 0x32000000 0x0 0x00100000>; +			record-size	= <0x00020000>; +			console-size	= <0x00020000>; +			ftrace-size	= <0x00020000>; +		}; +	}; + +	reboot-mode-syscon@32100000 { +		compatible = "syscon", "simple-mfd"; +		reg = <0x0 0x32100000 0x0 0x00001000>; + +		reboot-mode { +			compatible = "syscon-reboot-mode"; +			offset = <0x0>; + +			mode-normal	= <0x77665501>; +			mode-bootloader	= <0x77665500>; +			mode-recovery	= <0x77665502>; +		}; +	}; + +	keys { +		compatible = "gpio-keys"; +		pinctrl-names = "default"; +		pinctrl-0 = <&pwr_key_pmx_func &pwr_key_cfg_func>; + +		power { +			wakeup-source; +			gpios = <&gpio4 2 GPIO_ACTIVE_LOW>; +			label = "GPIO Power"; +			linux,code = <KEY_POWER>; +		}; +	}; + +	leds { +		compatible = "gpio-leds"; + +		user_led1 { +			label = "green:user1"; +			/* gpio_150_user_led1 */ +			gpios = <&gpio18 6 0>; +			linux,default-trigger = "heartbeat"; +		}; + +		user_led2 { +			label = "green:user2"; +			/* gpio_151_user_led2 */ +			gpios = <&gpio18 7 0>; +			linux,default-trigger = "none"; +		}; + +		user_led3 { +			label = "green:user3"; +			/* gpio_189_user_led3 */ +			gpios = <&gpio23 5 0>; +			linux,default-trigger = "mmc0"; +		}; + +		user_led4 { +			label = "green:user4"; +			/* gpio_190_user_led4 */ +			gpios = <&gpio23 6 0>; +			panic-indicator; +			linux,default-trigger = "none"; +		}; + +		wlan_active_led { +			label = "yellow:wlan"; +			/* gpio_205_wifi_active */ +			gpios = <&gpio25 5 0>; +			linux,default-trigger = "phy0tx"; +			default-state = "off"; +		}; + +		bt_active_led { +			label = "blue:bt"; +			gpios = <&gpio25 7 0>; +			/* gpio_207_user_led1 */ +			linux,default-trigger = "hci0-power"; +			default-state = "off"; +		}; +	}; + +	pmic: pmic@fff34000 { +		compatible = "hisilicon,hi6421v530-pmic"; +		reg = <0x0 0xfff34000 0x0 0x1000>; +		interrupt-controller; +		#interrupt-cells = <2>; + +		regulators { +			ldo3: LDO3 { /* HDMI */ +				regulator-name = "VOUT3_1V85"; +				regulator-min-microvolt = <1800000>; +				regulator-max-microvolt = <2200000>; +				regulator-enable-ramp-delay = <120>; +			}; + +			ldo9: LDO9 { /* SDCARD I/O */ +				regulator-name = "VOUT9_1V8_2V95"; +				regulator-min-microvolt = <1750000>; +				regulator-max-microvolt = <3300000>; +				regulator-enable-ramp-delay = <240>; +			}; + +			ldo11: LDO11 { /* Low Speed Connector */ +				regulator-name = "VOUT11_1V8_2V95"; +				regulator-min-microvolt = <1750000>; +				regulator-max-microvolt = <3300000>; +				regulator-enable-ramp-delay = <240>; +			}; + +			ldo15: LDO15 { /* UFS VCC */ +				regulator-name = "VOUT15_3V0"; +				regulator-min-microvolt = <1750000>; +				regulator-max-microvolt = <3000000>; +				regulator-boot-on; +				regulator-always-on; +				regulator-enable-ramp-delay = <120>; +			}; + +			ldo16: LDO16 { /* SD VDD */ +				regulator-name = "VOUT16_2V95"; +				regulator-min-microvolt = <1750000>; +				regulator-max-microvolt = <3000000>; +				regulator-enable-ramp-delay = <360>; +			}; +		}; +	}; + +	wlan_en: wlan-en-1-8v { +		compatible = "regulator-fixed"; +		regulator-name = "wlan-en-regulator"; +		regulator-min-microvolt = <1800000>; +		regulator-max-microvolt = <1800000>; + +		/* GPIO_051_WIFI_EN */ +		gpio = <&gpio6 3 0>; + +		/* WLAN card specific delay */ +		startup-delay-us = <70000>; +		enable-active-high; +	}; + +	firmware { +		optee { +			compatible = "linaro,optee-tz"; +			method = "smc"; +		}; +	}; +}; + +/* + * Legend: proper name = the GPIO line is used as GPIO + *         NC = not connected (pin out but not routed from the chip to + *              anything the board) + *         "[PER]" = pin is muxed for [peripheral] (not GPIO) + *         "" = no idea, schematic doesn't say, could be + *              unrouted (not connected to any external pin) + *         LSEC = Low Speed External Connector + *         HSEC = High Speed External Connector + * + * Line names are taken from "HiKey 960 Board ver A" schematics + * from Huawei. The 40 pin low speed expansion connector is named + * J2002 63453-140LF. + * + * For the lines routed to the external connectors the + * lines are named after the 96Boards CE Specification 1.0, + * Appendix "Expansion Connector Signal Description". + * + * When the 96Board naming of a line and the schematic name of + * the same line are in conflict, the 96Board specification + * takes precedence, which means that the external UART on the + * LSEC is named UART0 while the schematic and SoC names this + * UART3. This is only for the informational lines i.e. "[FOO]", + * the GPIO named lines "GPIO-A" thru "GPIO-L" are the only + * ones actually used for GPIO. + */ +&gpio0 { +	/* GPIO_000-GPIO_007 */ +	gpio-line-names = +		"", +		"TP901", /* TEST_MODE connected to TP901 */ +		"[PMU0_SSI]", +		"[PMU1_SSI]", +		"[PMU2_SSI]", +		"[PMU0_CLKOUT]", +		"[JTAG_TCK]", +		"[JTAG_TMS]"; +}; + +&gpio1 { +	/* GPIO_008-GPIO_015 */ +	gpio-line-names = +		"[JTAG_TRST_N]", +		"[JTAG_TDI]", +		"[JTAG_TDO]", +		"NC", "NC", +		"[I2C3_SCL]", +		"[I2C3_SDA]", +		"NC"; +}; + +&gpio2 { +	/* GPIO_016-GPIO_023 */ +	gpio-line-names = +		"NC", "NC", "NC", +		"GPIO-J", /* LSEC pin 32: GPIO_019 */ +		"GPIO_020_HDMI_SEL", +		"GPIO-L", /* LSEC pin 34: GPIO_021 */ +		"GPIO_022_UFSBUCK_INT_N", +		"GPIO-G"; /* LSEC pin 29: LCD_TE0 */ +}; + +&gpio3 { +	/* GPIO_024-GPIO_031 */ +	/* The rail from pin BK36 is named LCD_TE0, we assume to be muxed as GPIO for GPIO-G */ +	gpio-line-names = +		"[CSI0_MCLK]", /* HSEC pin 15: ISP_CCLK0_MCAM */ +		"[CSI1_MCLK]", /* HSEC pin 17: ISP_CCLK1_SCAM */ +		"NC", +		"[I2C2_SCL]", /* HSEC pin 32: ISP_SCL0 */ +		"[I2C2_SDA]", /* HSEC pin 34: ISP_SDA0 */ +		"[I2C3_SCL]", /* HSEC pin 36: ISP_SCL1 */ +		"[I2C3_SDA]", /* HSEC pin 38: ISP_SDA1 */ +		"NC"; +}; + +&gpio4 { +	/* GPIO_032-GPIO_039 */ +	gpio-line-names = +		"NC", "NC", +		"PWR_BTN_N", /* LSEC pin 4: GPIO_034_PWRON_DET */ +		"GPIO_035_PMU2_EN", +		"GPIO_036_USB_HUB_RESET", +		"NC", "NC", "NC"; +}; + +&gpio5 { +	/* GPIO_040-GPIO_047 */ +	gpio-line-names = +		"GPIO-H", /* LSEC pin 30: GPIO_040_LCD_RST_N */ +		"GPIO_041_HDMI_PD", +		"TP904", /* Test point */ +		"TP905", /* Test point */ +		"NC", "NC", +		"GPIO_046_HUB_VDD33_EN", +		"GPIO_047_PMU1_EN"; +}; + +&gpio6 { +	/* GPIO_048-GPIO_055 */ +	gpio-line-names = +		"NC", "NC", "NC", +		"GPIO_051_WIFI_EN", +		"GPIO-I", /* LSEC pin 31: GPIO_052_CAM0_RST_N */ +		/* +		 * These two pins should be used for SD(IO) data according to the +		 * 96boards specification but seems to be repurposed for a IRDA UART. +		 * They are however named according to the spec. +		 */ +		"[SD_DAT1]", /* HSEC pin 3: UART0_IRDA_RXD */ +		"[SD_DAT2]", /* HSEC pin 5: UART0_IRDA_TXD */ +		"[UART1_RXD]"; /* LSEC pin 13: DEBUG_UART6_RXD */ +}; + +&gpio7 { +	/* GPIO_056-GPIO_063 */ +	gpio-line-names = +		"[UART1_TXD]", /* LSEC pin 11: DEBUG_UART6_TXD */ +		"[UART0_CTS]", /* LSEC pin 3: UART3_CTS_N */ +		"[UART0_RTS]", /* LSEC pin 9: UART3_RTS_N */ +		"[UART0_RXD]", /* LSEC pin 7: UART3_RXD */ +		"[UART0_TXD]", /* LSEC pin 5: UART3_TXD */ +		"[SOC_BT_UART4_CTS_N]", +		"[SOC_BT_UART4_RTS_N]", +		"[SOC_BT_UART4_RXD]"; +}; + +&gpio8 { +	/* GPIO_064-GPIO_071 */ +	gpio-line-names = +		"[SOC_BT_UART4_TXD]", +		"NC", +		"[PMU_HKADC_SSI]", +		"NC", +		"GPIO_068_SEL", +		"NC", "NC", "NC"; + +}; + +&gpio9 { +	/* GPIO_072-GPIO_079 */ +	gpio-line-names = +		"NC", "NC", "NC", +		"GPIO-K", /* LSEC pin 33: GPIO_075_CAM1_RST_N */ +		"NC", "NC", "NC", "NC"; +}; + +&gpio10 { +	/* GPIO_080-GPIO_087 */ +	gpio-line-names = "NC", "NC", "NC", "NC", "NC", "NC", "NC", "NC"; +}; + +&gpio11 { +	/* GPIO_088-GPIO_095 */ +	gpio-line-names = +		"NC", +		"[PCIE_PERST_N]", +		"NC", "NC", "NC", "NC", "NC", "NC"; +}; + +&gpio12 { +	/* GPIO_096-GPIO_103 */ +	gpio-line-names = "NC", "NC", "NC", "", "", "", "", "NC"; +}; + +&gpio13 { +	/* GPIO_104-GPIO_111 */ +	gpio-line-names = "NC", "NC", "NC", "NC", "NC", "NC", "NC", "NC"; +}; + +&gpio14 { +	/* GPIO_112-GPIO_119 */ +	gpio-line-names = "NC", "NC", "NC", "NC", "NC", "NC", "NC", "NC"; +}; + +&gpio15 { +	/* GPIO_120-GPIO_127 */ +	gpio-line-names = +		"NC", "NC", "NC", "NC", "NC", "NC", +		"GPIO_126_BT_EN", +		"TP902"; /* GPIO_127_JTAG_SEL0 */ +}; + +&gpio16 { +	/* GPIO_128-GPIO_135 */ +	gpio-line-names = "", "", "", "", "", "", "", ""; +}; + +&gpio17 { +	/* GPIO_136-GPIO_143 */ +	gpio-line-names = "", "", "", "", "", "", "", ""; +}; + +&gpio18 { +	/* GPIO_144-GPIO_151 */ +	gpio-line-names = +		"[UFS_REF_CLK]", +		"[UFS_RST_N]", +		"[SPI1_SCLK]", /* HSEC pin 9: GPIO_146_SPI3_CLK */ +		"[SPI1_DIN]", /* HSEC pin 11: GPIO_147_SPI3_DI */ +		"[SPI1_DOUT]", /* HSEC pin 1: GPIO_148_SPI3_DO */ +		"[SPI1_CS]", /* HSEC pin 7: GPIO_149_SPI3_CS0_N */ +		"GPIO_150_USER_LED1", +		"GPIO_151_USER_LED2"; +}; + +&gpio19 { +	/* GPIO_152-GPIO_159 */ +	gpio-line-names = "NC", "NC", "NC", "NC", "", "", "", ""; +}; + +&gpio20 { +	/* GPIO_160-GPIO_167 */ +	gpio-line-names = +		"[SD_CLK]", +		"[SD_CMD]", +		"[SD_DATA0]", +		"[SD_DATA1]", +		"[SD_DATA2]", +		"[SD_DATA3]", +		"", ""; +}; + +&gpio21 { +	/* GPIO_168-GPIO_175 */ +	gpio-line-names = +		"[WL_SDIO_CLK]", +		"[WL_SDIO_CMD]", +		"[WL_SDIO_DATA0]", +		"[WL_SDIO_DATA1]", +		"[WL_SDIO_DATA2]", +		"[WL_SDIO_DATA3]", +		"", ""; +}; + +&gpio22 { +	/* GPIO_176-GPIO_183 */ +	gpio-line-names = +		"[GPIO_176_PMU_PWR_HOLD]", +		"NA", +		"[SYSCLK_EN]", +		"GPIO_179_WL_WAKEUP_AP", +		"GPIO_180_HDMI_INT", +		"NA", +		"GPIO-F", /* LSEC pin 28: LCD_BL_PWM */ +		"[I2C0_SCL]"; /* LSEC pin 15 */ +}; + +&gpio23 { +	/* GPIO_184-GPIO_191 */ +	gpio-line-names = +		"[I2C0_SDA]", /* LSEC pin 17 */ +		"[I2C1_SCL]", /* Actual SoC I2C1 */ +		"[I2C1_SDA]", /* Actual SoC I2C1 */ +		"[I2C1_SCL]", /* LSEC pin 19: I2C7_SCL */ +		"[I2C1_SDA]", /* LSEC pin 21: I2C7_SDA */ +		"GPIO_189_USER_LED3", +		"GPIO_190_USER_LED4", +		""; +}; + +&gpio24 { +	/* GPIO_192-GPIO_199 */ +	gpio-line-names = +		"[PCM_DI]", /* LSEC pin 22: GPIO_192_I2S0_DI */ +		"[PCM_DO]", /* LSEC pin 20: GPIO_193_I2S0_DO */ +		"[PCM_CLK]", /* LSEC pin 18: GPIO_194_I2S0_XCLK */ +		"[PCM_FS]", /* LSEC pin 16: GPIO_195_I2S0_XFS */ +		"[GPIO_196_I2S2_DI]", +		"[GPIO_197_I2S2_DO]", +		"[GPIO_198_I2S2_XCLK]", +		"[GPIO_199_I2S2_XFS]"; +}; + +&gpio25 { +	/* GPIO_200-GPIO_207 */ +	gpio-line-names = +		"NC", +		"NC", +		"GPIO_202_VBUS_TYPEC", +		"GPIO_203_SD_DET", +		"GPIO_204_PMU12_IRQ_N", +		"GPIO_205_WIFI_ACTIVE", +		"GPIO_206_USBSW_SEL", +		"GPIO_207_BT_ACTIVE"; +}; + +&gpio26 { +	/* GPIO_208-GPIO_215 */ +	gpio-line-names = +		"GPIO-A", /* LSEC pin 23: GPIO_208 */ +		"GPIO-B", /* LSEC pin 24: GPIO_209 */ +		"GPIO-C", /* LSEC pin 25: GPIO_210 */ +		"GPIO-D", /* LSEC pin 26: GPIO_211 */ +		"GPIO-E", /* LSEC pin 27: GPIO_212 */ +		"[PCIE_CLKREQ_N]", +		"[PCIE_WAKE_N]", +		"[SPI0_CLK]"; /* LSEC pin 8: SPI2_CLK */ +}; + +&gpio27 { +	/* GPIO_216-GPIO_223 */ +	gpio-line-names = +		"[SPI0_DIN]", /* LSEC pin 10: SPI2_DI */ +		"[SPI0_DOUT]", /* LSEC pin 14: SPI2_DO */ +		"[SPI0_CS]", /* LSEC pin 12: SPI2_CS0_N */ +		"GPIO_219_CC_INT", +		"NC", +		"NC", +		"[PMU_INT]", +		""; +}; + +&gpio28 { +	/* GPIO_224-GPIO_231 */ +	gpio-line-names = +		"", "", "", "", "", "", "", ""; +}; + +&i2c0 { +	/* On Low speed expansion */ +	label = "LS-I2C0"; +	status = "okay"; +}; + +&i2c1 { +	status = "okay"; + +	adv7533: adv7533@39 { +		status = "ok"; +		compatible = "adi,adv7533"; +		reg = <0x39>; +	}; +}; + +&uart3 { +	/* On Low speed expansion */ +	label = "LS-UART0"; +	status = "okay"; +}; + +&uart4 { +	status = "okay"; + +	bluetooth { +		compatible = "ti,wl1837-st"; +		enable-gpios = <&gpio15 6 GPIO_ACTIVE_HIGH>; +		max-speed = <3000000>; +	}; +}; + +&i2c7 { +	/* On Low speed expansion */ +	label = "LS-I2C1"; +	status = "okay"; +}; + +&uart6 { +	/* On Low speed expansion */ +	label = "LS-UART1"; +	status = "okay"; +}; + +&spi2 { +	/* On Low speed expansion */ +	label = "LS-SPI0"; +	status = "okay"; +}; + +&spi3 { +	/* On High speed expansion */ +	label = "HS-SPI1"; +	status = "okay"; +}; + +&dwmmc1 { +	cd-gpios = <&gpio25 3 GPIO_ACTIVE_LOW>; +	pinctrl-names = "default"; +	pinctrl-0 = <&sd_pmx_func +		     &sd_clk_cfg_func +		     &sd_cfg_func>; +	vmmc-supply = <&ldo16>; +	vqmmc-supply = <&ldo9>; +	status = "okay"; +}; + +&dwmmc2 { /* WIFI */ +	bus-width = <0x4>; +	non-removable; +	broken-cd; +	cap-power-off-card; +	pinctrl-names = "default"; +	pinctrl-0 = <&sdio_pmx_func +		     &sdio_clk_cfg_func +		     &sdio_cfg_func>; +	/* WL_EN */ +	vmmc-supply = <&wlan_en>; +	status = "ok"; + +	wlcore: wlcore@2 { +		compatible = "ti,wl1837"; +		reg = <2>;      /* sdio func num */ +		/* WL_IRQ, GPIO_179_WL_WAKEUP_AP */ +		interrupt-parent = <&gpio22>; +		interrupts = <3 IRQ_TYPE_EDGE_RISING>; +	}; +}; diff --git a/arch/arm/dts/hi3660.dtsi b/arch/arm/dts/hi3660.dtsi new file mode 100644 index 00000000000..65a45b0e80c --- /dev/null +++ b/arch/arm/dts/hi3660.dtsi @@ -0,0 +1,1157 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * dts file for Hisilicon Hi3660 SoC + * + * Copyright (C) 2016, Hisilicon Ltd. + */ + +#include <dt-bindings/interrupt-controller/arm-gic.h> +#include <dt-bindings/clock/hi3660-clock.h> +#include <dt-bindings/thermal/thermal.h> + +/ { +	compatible = "hisilicon,hi3660"; +	interrupt-parent = <&gic>; +	#address-cells = <2>; +	#size-cells = <2>; + +	psci { +		compatible = "arm,psci-0.2"; +		method = "smc"; +	}; + +	cpus { +		#address-cells = <2>; +		#size-cells = <0>; + +		cpu-map { +			cluster0 { +				core0 { +					cpu = <&cpu0>; +				}; +				core1 { +					cpu = <&cpu1>; +				}; +				core2 { +					cpu = <&cpu2>; +				}; +				core3 { +					cpu = <&cpu3>; +				}; +			}; +			cluster1 { +				core0 { +					cpu = <&cpu4>; +				}; +				core1 { +					cpu = <&cpu5>; +				}; +				core2 { +					cpu = <&cpu6>; +				}; +				core3 { +					cpu = <&cpu7>; +				}; +			}; +		}; + +		cpu0: cpu@0 { +			compatible = "arm,cortex-a53"; +			device_type = "cpu"; +			reg = <0x0 0x0>; +			enable-method = "psci"; +			next-level-cache = <&A53_L2>; +			cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>; +			capacity-dmips-mhz = <592>; +			clocks = <&stub_clock HI3660_CLK_STUB_CLUSTER0>; +			operating-points-v2 = <&cluster0_opp>; +			#cooling-cells = <2>; +			dynamic-power-coefficient = <110>; +		}; + +		cpu1: cpu@1 { +			compatible = "arm,cortex-a53"; +			device_type = "cpu"; +			reg = <0x0 0x1>; +			enable-method = "psci"; +			next-level-cache = <&A53_L2>; +			cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>; +			capacity-dmips-mhz = <592>; +			clocks = <&stub_clock HI3660_CLK_STUB_CLUSTER0>; +			operating-points-v2 = <&cluster0_opp>; +			#cooling-cells = <2>; +		}; + +		cpu2: cpu@2 { +			compatible = "arm,cortex-a53"; +			device_type = "cpu"; +			reg = <0x0 0x2>; +			enable-method = "psci"; +			next-level-cache = <&A53_L2>; +			cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>; +			capacity-dmips-mhz = <592>; +			clocks = <&stub_clock HI3660_CLK_STUB_CLUSTER0>; +			operating-points-v2 = <&cluster0_opp>; +			#cooling-cells = <2>; +		}; + +		cpu3: cpu@3 { +			compatible = "arm,cortex-a53"; +			device_type = "cpu"; +			reg = <0x0 0x3>; +			enable-method = "psci"; +			next-level-cache = <&A53_L2>; +			cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>; +			capacity-dmips-mhz = <592>; +			clocks = <&stub_clock HI3660_CLK_STUB_CLUSTER0>; +			operating-points-v2 = <&cluster0_opp>; +			#cooling-cells = <2>; +		}; + +		cpu4: cpu@100 { +			compatible = "arm,cortex-a73"; +			device_type = "cpu"; +			reg = <0x0 0x100>; +			enable-method = "psci"; +			next-level-cache = <&A73_L2>; +			cpu-idle-states = <&CPU_SLEEP_1 &CLUSTER_SLEEP_1>; +			capacity-dmips-mhz = <1024>; +			clocks = <&stub_clock HI3660_CLK_STUB_CLUSTER1>; +			operating-points-v2 = <&cluster1_opp>; +			#cooling-cells = <2>; +			dynamic-power-coefficient = <550>; +		}; + +		cpu5: cpu@101 { +			compatible = "arm,cortex-a73"; +			device_type = "cpu"; +			reg = <0x0 0x101>; +			enable-method = "psci"; +			next-level-cache = <&A73_L2>; +			cpu-idle-states = <&CPU_SLEEP_1 &CLUSTER_SLEEP_1>; +			capacity-dmips-mhz = <1024>; +			clocks = <&stub_clock HI3660_CLK_STUB_CLUSTER1>; +			operating-points-v2 = <&cluster1_opp>; +			#cooling-cells = <2>; +		}; + +		cpu6: cpu@102 { +			compatible = "arm,cortex-a73"; +			device_type = "cpu"; +			reg = <0x0 0x102>; +			enable-method = "psci"; +			next-level-cache = <&A73_L2>; +			cpu-idle-states = <&CPU_SLEEP_1 &CLUSTER_SLEEP_1>; +			capacity-dmips-mhz = <1024>; +			clocks = <&stub_clock HI3660_CLK_STUB_CLUSTER1>; +			operating-points-v2 = <&cluster1_opp>; +			#cooling-cells = <2>; +		}; + +		cpu7: cpu@103 { +			compatible = "arm,cortex-a73"; +			device_type = "cpu"; +			reg = <0x0 0x103>; +			enable-method = "psci"; +			next-level-cache = <&A73_L2>; +			cpu-idle-states = <&CPU_SLEEP_1 &CLUSTER_SLEEP_1>; +			capacity-dmips-mhz = <1024>; +			clocks = <&stub_clock HI3660_CLK_STUB_CLUSTER1>; +			operating-points-v2 = <&cluster1_opp>; +			#cooling-cells = <2>; +		}; + +		idle-states { +			entry-method = "psci"; + +			CPU_SLEEP_0: cpu-sleep-0 { +				compatible = "arm,idle-state"; +				local-timer-stop; +				arm,psci-suspend-param = <0x0010000>; +				entry-latency-us = <400>; +				exit-latency-us = <650>; +				min-residency-us = <1500>; +			}; +			CLUSTER_SLEEP_0: cluster-sleep-0 { +				compatible = "arm,idle-state"; +				local-timer-stop; +				arm,psci-suspend-param = <0x1010000>; +				entry-latency-us = <500>; +				exit-latency-us = <1600>; +				min-residency-us = <3500>; +			}; + + +			CPU_SLEEP_1: cpu-sleep-1 { +				compatible = "arm,idle-state"; +				local-timer-stop; +				arm,psci-suspend-param = <0x0010000>; +				entry-latency-us = <400>; +				exit-latency-us = <550>; +				min-residency-us = <1500>; +			}; + +			CLUSTER_SLEEP_1: cluster-sleep-1 { +				compatible = "arm,idle-state"; +				local-timer-stop; +				arm,psci-suspend-param = <0x1010000>; +				entry-latency-us = <800>; +				exit-latency-us = <2900>; +				min-residency-us = <3500>; +			}; +		}; + +		A53_L2: l2-cache0 { +			compatible = "cache"; +		}; + +		A73_L2: l2-cache1 { +			compatible = "cache"; +		}; +	}; + +	cluster0_opp: opp_table0 { +		compatible = "operating-points-v2"; +		opp-shared; + +		opp00 { +			opp-hz = /bits/ 64 <533000000>; +			opp-microvolt = <700000>; +			clock-latency-ns = <300000>; +		}; + +		opp01 { +			opp-hz = /bits/ 64 <999000000>; +			opp-microvolt = <800000>; +			clock-latency-ns = <300000>; +		}; + +		opp02 { +			opp-hz = /bits/ 64 <1402000000>; +			opp-microvolt = <900000>; +			clock-latency-ns = <300000>; +		}; + +		opp03 { +			opp-hz = /bits/ 64 <1709000000>; +			opp-microvolt = <1000000>; +			clock-latency-ns = <300000>; +		}; + +		opp04 { +			opp-hz = /bits/ 64 <1844000000>; +			opp-microvolt = <1100000>; +			clock-latency-ns = <300000>; +		}; +	}; + +	cluster1_opp: opp_table1 { +		compatible = "operating-points-v2"; +		opp-shared; + +		opp10 { +			opp-hz = /bits/ 64 <903000000>; +			opp-microvolt = <700000>; +			clock-latency-ns = <300000>; +		}; + +		opp11 { +			opp-hz = /bits/ 64 <1421000000>; +			opp-microvolt = <800000>; +			clock-latency-ns = <300000>; +		}; + +		opp12 { +			opp-hz = /bits/ 64 <1805000000>; +			opp-microvolt = <900000>; +			clock-latency-ns = <300000>; +		}; + +		opp13 { +			opp-hz = /bits/ 64 <2112000000>; +			opp-microvolt = <1000000>; +			clock-latency-ns = <300000>; +		}; + +		opp14 { +			opp-hz = /bits/ 64 <2362000000>; +			opp-microvolt = <1100000>; +			clock-latency-ns = <300000>; +		}; +	}; + +	gic: interrupt-controller@e82b0000 { +		compatible = "arm,gic-400"; +		reg = <0x0 0xe82b1000 0 0x1000>, /* GICD */ +		      <0x0 0xe82b2000 0 0x2000>, /* GICC */ +		      <0x0 0xe82b4000 0 0x2000>, /* GICH */ +		      <0x0 0xe82b6000 0 0x2000>; /* GICV */ +		#address-cells = <0>; +		#interrupt-cells = <3>; +		interrupt-controller; +		interrupts = <GIC_PPI 9 (GIC_CPU_MASK_SIMPLE(8) | +					 IRQ_TYPE_LEVEL_HIGH)>; +	}; + +	a53-pmu { +		compatible = "arm,cortex-a53-pmu"; +		interrupts = <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>, +			     <GIC_SPI 25 IRQ_TYPE_LEVEL_HIGH>, +			     <GIC_SPI 26 IRQ_TYPE_LEVEL_HIGH>, +			     <GIC_SPI 27 IRQ_TYPE_LEVEL_HIGH>; +		interrupt-affinity = <&cpu0>, +				     <&cpu1>, +				     <&cpu2>, +				     <&cpu3>; +	}; + +	a73-pmu { +		compatible = "arm,cortex-a73-pmu"; +		interrupts = <GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>, +			     <GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>, +			     <GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>, +			     <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>; +		interrupt-affinity = <&cpu4>, +				     <&cpu5>, +				     <&cpu6>, +				     <&cpu7>; +	}; + +	timer { +		compatible = "arm,armv8-timer"; +		interrupt-parent = <&gic>; +		interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(8) | +					  IRQ_TYPE_LEVEL_LOW)>, +			     <GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(8) | +					  IRQ_TYPE_LEVEL_LOW)>, +			     <GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(8) | +					  IRQ_TYPE_LEVEL_LOW)>, +			     <GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(8) | +					  IRQ_TYPE_LEVEL_LOW)>; +	}; + +	soc { +		compatible = "simple-bus"; +		#address-cells = <2>; +		#size-cells = <2>; +		ranges; + +		crg_ctrl: crg_ctrl@fff35000 { +			compatible = "hisilicon,hi3660-crgctrl", "syscon"; +			reg = <0x0 0xfff35000 0x0 0x1000>; +			#clock-cells = <1>; +		}; + +		crg_rst: crg_rst_controller { +			compatible = "hisilicon,hi3660-reset"; +			#reset-cells = <2>; +			hisi,rst-syscon = <&crg_ctrl>; +		}; + + +		pctrl: pctrl@e8a09000 { +			compatible = "hisilicon,hi3660-pctrl", "syscon"; +			reg = <0x0 0xe8a09000 0x0 0x2000>; +			#clock-cells = <1>; +		}; + +		pmuctrl: crg_ctrl@fff34000 { +			compatible = "hisilicon,hi3660-pmuctrl", "syscon"; +			reg = <0x0 0xfff34000 0x0 0x1000>; +			#clock-cells = <1>; +		}; + +		sctrl: sctrl@fff0a000 { +			compatible = "hisilicon,hi3660-sctrl", "syscon"; +			reg = <0x0 0xfff0a000 0x0 0x1000>; +			#clock-cells = <1>; +		}; + +		iomcu: iomcu@ffd7e000 { +			compatible = "hisilicon,hi3660-iomcu", "syscon"; +			reg = <0x0 0xffd7e000 0x0 0x1000>; +			#clock-cells = <1>; + +		}; + +		iomcu_rst: reset { +			compatible = "hisilicon,hi3660-reset"; +			hisi,rst-syscon = <&iomcu>; +			#reset-cells = <2>; +		}; + +		mailbox: mailbox@e896b000 { +			compatible = "hisilicon,hi3660-mbox"; +			reg = <0x0 0xe896b000 0x0 0x1000>; +			interrupts = <GIC_SPI 192 IRQ_TYPE_LEVEL_HIGH>, +				     <GIC_SPI 193 IRQ_TYPE_LEVEL_HIGH>; +			#mbox-cells = <3>; +		}; + +		stub_clock: stub_clock@e896b500 { +			compatible = "hisilicon,hi3660-stub-clk"; +			reg = <0x0 0xe896b500 0x0 0x0100>; +			#clock-cells = <1>; +			mboxes = <&mailbox 13 3 0>; +		}; + +		dual_timer0: timer@fff14000 { +			compatible = "arm,sp804", "arm,primecell"; +			reg = <0x0 0xfff14000 0x0 0x1000>; +			interrupts = <GIC_SPI 48 IRQ_TYPE_LEVEL_HIGH>, +				     <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH>; +			clocks = <&crg_ctrl HI3660_OSC32K>, +				 <&crg_ctrl HI3660_OSC32K>, +				 <&crg_ctrl HI3660_OSC32K>; +			clock-names = "timer1", "timer2", "apb_pclk"; +		}; + +		i2c0: i2c@ffd71000 { +			compatible = "snps,designware-i2c"; +			reg = <0x0 0xffd71000 0x0 0x1000>; +			interrupts = <GIC_SPI 118 IRQ_TYPE_LEVEL_HIGH>; +			#address-cells = <1>; +			#size-cells = <0>; +			clock-frequency = <400000>; +			clocks = <&crg_ctrl HI3660_CLK_GATE_I2C0>; +			resets = <&iomcu_rst 0x20 3>; +			pinctrl-names = "default"; +			pinctrl-0 = <&i2c0_pmx_func &i2c0_cfg_func>; +			status = "disabled"; +		}; + +		i2c1: i2c@ffd72000 { +			compatible = "snps,designware-i2c"; +			reg = <0x0 0xffd72000 0x0 0x1000>; +			interrupts = <GIC_SPI 119 IRQ_TYPE_LEVEL_HIGH>; +			#address-cells = <1>; +			#size-cells = <0>; +			clock-frequency = <400000>; +			clocks = <&crg_ctrl HI3660_CLK_GATE_I2C1>; +			resets = <&iomcu_rst 0x20 4>; +			pinctrl-names = "default"; +			pinctrl-0 = <&i2c1_pmx_func &i2c1_cfg_func>; +			status = "disabled"; +		}; + +		i2c3: i2c@fdf0c000 { +			compatible = "snps,designware-i2c"; +			reg = <0x0 0xfdf0c000 0x0 0x1000>; +			interrupts = <GIC_SPI 81 IRQ_TYPE_LEVEL_HIGH>; +			#address-cells = <1>; +			#size-cells = <0>; +			clock-frequency = <400000>; +			clocks = <&crg_ctrl HI3660_CLK_GATE_I2C3>; +			resets = <&crg_rst 0x78 7>; +			pinctrl-names = "default"; +			pinctrl-0 = <&i2c3_pmx_func &i2c3_cfg_func>; +			status = "disabled"; +		}; + +		i2c7: i2c@fdf0b000 { +			compatible = "snps,designware-i2c"; +			reg = <0x0 0xfdf0b000 0x0 0x1000>; +			interrupts = <GIC_SPI 314 IRQ_TYPE_LEVEL_HIGH>; +			#address-cells = <1>; +			#size-cells = <0>; +			clock-frequency = <400000>; +			clocks = <&crg_ctrl HI3660_CLK_GATE_I2C7>; +			resets = <&crg_rst 0x60 14>; +			pinctrl-names = "default"; +			pinctrl-0 = <&i2c7_pmx_func &i2c7_cfg_func>; +			status = "disabled"; +		}; + +		uart0: serial@fdf02000 { +			compatible = "arm,pl011", "arm,primecell"; +			reg = <0x0 0xfdf02000 0x0 0x1000>; +			interrupts = <GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH>; +			clocks = <&crg_ctrl HI3660_CLK_MUX_UART0>, +				 <&crg_ctrl HI3660_PCLK>; +			clock-names = "uartclk", "apb_pclk"; +			pinctrl-names = "default"; +			pinctrl-0 = <&uart0_pmx_func &uart0_cfg_func>; +			status = "disabled"; +		}; + +		uart1: serial@fdf00000 { +			compatible = "arm,pl011", "arm,primecell"; +			reg = <0x0 0xfdf00000 0x0 0x1000>; +			interrupts = <GIC_SPI 75 IRQ_TYPE_LEVEL_HIGH>; +			dma-names = "rx", "tx"; +			dmas =  <&dma0 2 &dma0 3>; +			clocks = <&crg_ctrl HI3660_CLK_GATE_UART1>, +				 <&crg_ctrl HI3660_CLK_GATE_UART1>; +			clock-names = "uartclk", "apb_pclk"; +			pinctrl-names = "default"; +			pinctrl-0 = <&uart1_pmx_func &uart1_cfg_func>; +			status = "disabled"; +		}; + +		uart2: serial@fdf03000 { +			compatible = "arm,pl011", "arm,primecell"; +			reg = <0x0 0xfdf03000 0x0 0x1000>; +			interrupts = <GIC_SPI 76 IRQ_TYPE_LEVEL_HIGH>; +			dma-names = "rx", "tx"; +			dmas =  <&dma0 4 &dma0 5>; +			clocks = <&crg_ctrl HI3660_CLK_GATE_UART2>, +				 <&crg_ctrl HI3660_PCLK>; +			clock-names = "uartclk", "apb_pclk"; +			pinctrl-names = "default"; +			pinctrl-0 = <&uart2_pmx_func &uart2_cfg_func>; +			status = "disabled"; +		}; + +		uart3: serial@ffd74000 { +			compatible = "arm,pl011", "arm,primecell"; +			reg = <0x0 0xffd74000 0x0 0x1000>; +			interrupts = <GIC_SPI 114 IRQ_TYPE_LEVEL_HIGH>; +			clocks = <&crg_ctrl HI3660_FACTOR_UART3>, +				 <&crg_ctrl HI3660_PCLK>; +			clock-names = "uartclk", "apb_pclk"; +			pinctrl-names = "default"; +			pinctrl-0 = <&uart3_pmx_func &uart3_cfg_func>; +			status = "disabled"; +		}; + +		uart4: serial@fdf01000 { +			compatible = "arm,pl011", "arm,primecell"; +			reg = <0x0 0xfdf01000 0x0 0x1000>; +			interrupts = <GIC_SPI 77 IRQ_TYPE_LEVEL_HIGH>; +			dma-names = "rx", "tx"; +			dmas =  <&dma0 6 &dma0 7>; +			clocks = <&crg_ctrl HI3660_CLK_GATE_UART4>, +				 <&crg_ctrl HI3660_CLK_GATE_UART4>; +			clock-names = "uartclk", "apb_pclk"; +			pinctrl-names = "default"; +			pinctrl-0 = <&uart4_pmx_func &uart4_cfg_func>; +			status = "disabled"; +		}; + +		uart5: serial@fdf05000 { +			compatible = "arm,pl011", "arm,primecell"; +			reg = <0x0 0xfdf05000 0x0 0x1000>; +			interrupts = <GIC_SPI 78 IRQ_TYPE_LEVEL_HIGH>; +			dma-names = "rx", "tx"; +			dmas =  <&dma0 8 &dma0 9>; +			clocks = <&crg_ctrl HI3660_CLK_GATE_UART5>, +				 <&crg_ctrl HI3660_CLK_GATE_UART5>; +			clock-names = "uartclk", "apb_pclk"; +			pinctrl-names = "default"; +			pinctrl-0 = <&uart5_pmx_func &uart5_cfg_func>; +			status = "disabled"; +		}; + +		uart6: serial@fff32000 { +			compatible = "arm,pl011", "arm,primecell"; +			reg = <0x0 0xfff32000 0x0 0x1000>; +			interrupts = <GIC_SPI 79 IRQ_TYPE_LEVEL_HIGH>; +			clock = <19200000>; +			clocks = <&crg_ctrl HI3660_CLK_UART6>, +				 <&crg_ctrl HI3660_PCLK>; +			clock-names = "uartclk", "apb_pclk"; +			pinctrl-names = "default"; +			pinctrl-0 = <&uart6_pmx_func &uart6_cfg_func>; +			status = "disabled"; +		}; + +		dma0: dma@fdf30000 { +			compatible = "hisilicon,k3-dma-1.0"; +			reg = <0x0 0xfdf30000 0x0 0x1000>; +			#dma-cells = <1>; +			dma-channels = <16>; +			dma-requests = <32>; +			dma-channel-mask = <0xfffe>; +			interrupts = <GIC_SPI 143 IRQ_TYPE_LEVEL_HIGH>; +			clocks = <&crg_ctrl HI3660_CLK_GATE_DMAC>; +			dma-no-cci; +			dma-type = "hi3660_dma"; +		}; + +		asp_dmac: dma-controller@e804b000 { +			compatible = "hisilicon,hisi-pcm-asp-dma-1.0"; +			reg = <0x0 0xe804b000 0x0 0x1000>; +			#dma-cells = <1>; +			dma-channels = <16>; +			dma-requests = <32>; +			interrupts = <GIC_SPI 216 IRQ_TYPE_LEVEL_HIGH>; +			interrupt-names = "asp_dma_irq"; +		}; + +		rtc0: rtc@fff04000 { +			compatible = "arm,pl031", "arm,primecell"; +			reg = <0x0 0Xfff04000 0x0 0x1000>; +			interrupts = <GIC_SPI 46 IRQ_TYPE_LEVEL_HIGH>; +			clocks = <&crg_ctrl HI3660_PCLK>; +			clock-names = "apb_pclk"; +		}; + +		gpio0: gpio@e8a0b000 { +			compatible = "arm,pl061", "arm,primecell"; +			reg = <0 0xe8a0b000 0 0x1000>; +			interrupts = <GIC_SPI 84 IRQ_TYPE_LEVEL_HIGH>; +			gpio-controller; +			#gpio-cells = <2>; +			gpio-ranges = <&pmx0 1 0 7>; +			interrupt-controller; +			#interrupt-cells = <2>; +			clocks = <&crg_ctrl HI3660_PCLK_GPIO0>; +			clock-names = "apb_pclk"; +		}; + +		gpio1: gpio@e8a0c000 { +			compatible = "arm,pl061", "arm,primecell"; +			reg = <0 0xe8a0c000 0 0x1000>; +			interrupts = <GIC_SPI 85 IRQ_TYPE_LEVEL_HIGH>; +			gpio-controller; +			#gpio-cells = <2>; +			gpio-ranges = <&pmx0 1 7 7>; +			interrupt-controller; +			#interrupt-cells = <2>; +			clocks = <&crg_ctrl HI3660_PCLK_GPIO1>; +			clock-names = "apb_pclk"; +		}; + +		gpio2: gpio@e8a0d000 { +			compatible = "arm,pl061", "arm,primecell"; +			reg = <0 0xe8a0d000 0 0x1000>; +			interrupts = <GIC_SPI 86 IRQ_TYPE_LEVEL_HIGH>; +			gpio-controller; +			#gpio-cells = <2>; +			gpio-ranges = <&pmx0 0 14 8>; +			interrupt-controller; +			#interrupt-cells = <2>; +			clocks = <&crg_ctrl HI3660_PCLK_GPIO2>; +			clock-names = "apb_pclk"; +		}; + +		gpio3: gpio@e8a0e000 { +			compatible = "arm,pl061", "arm,primecell"; +			reg = <0 0xe8a0e000 0 0x1000>; +			interrupts = <GIC_SPI 87 IRQ_TYPE_LEVEL_HIGH>; +			gpio-controller; +			#gpio-cells = <2>; +			gpio-ranges = <&pmx0 0 22 8>; +			interrupt-controller; +			#interrupt-cells = <2>; +			clocks = <&crg_ctrl HI3660_PCLK_GPIO3>; +			clock-names = "apb_pclk"; +		}; + +		gpio4: gpio@e8a0f000 { +			compatible = "arm,pl061", "arm,primecell"; +			reg = <0 0xe8a0f000 0 0x1000>; +			interrupts = <GIC_SPI 88 IRQ_TYPE_LEVEL_HIGH>; +			gpio-controller; +			#gpio-cells = <2>; +			gpio-ranges = <&pmx0 0 30 8>; +			interrupt-controller; +			#interrupt-cells = <2>; +			clocks = <&crg_ctrl HI3660_PCLK_GPIO4>; +			clock-names = "apb_pclk"; +		}; + +		gpio5: gpio@e8a10000 { +			compatible = "arm,pl061", "arm,primecell"; +			reg = <0 0xe8a10000 0 0x1000>; +			interrupts = <GIC_SPI 89 IRQ_TYPE_LEVEL_HIGH>; +			gpio-controller; +			#gpio-cells = <2>; +			gpio-ranges = <&pmx0 0 38 8>; +			interrupt-controller; +			#interrupt-cells = <2>; +			clocks = <&crg_ctrl HI3660_PCLK_GPIO5>; +			clock-names = "apb_pclk"; +		}; + +		gpio6: gpio@e8a11000 { +			compatible = "arm,pl061", "arm,primecell"; +			reg = <0 0xe8a11000 0 0x1000>; +			interrupts = <GIC_SPI 90 IRQ_TYPE_LEVEL_HIGH>; +			gpio-controller; +			#gpio-cells = <2>; +			gpio-ranges = <&pmx0 0 46 8>; +			interrupt-controller; +			#interrupt-cells = <2>; +			clocks = <&crg_ctrl HI3660_PCLK_GPIO6>; +			clock-names = "apb_pclk"; +		}; + +		gpio7: gpio@e8a12000 { +			compatible = "arm,pl061", "arm,primecell"; +			reg = <0 0xe8a12000 0 0x1000>; +			interrupts = <GIC_SPI 91 IRQ_TYPE_LEVEL_HIGH>; +			gpio-controller; +			#gpio-cells = <2>; +			gpio-ranges = <&pmx0 0 54 8>; +			interrupt-controller; +			#interrupt-cells = <2>; +			clocks = <&crg_ctrl HI3660_PCLK_GPIO7>; +			clock-names = "apb_pclk"; +		}; + +		gpio8: gpio@e8a13000 { +			compatible = "arm,pl061", "arm,primecell"; +			reg = <0 0xe8a13000 0 0x1000>; +			interrupts = <GIC_SPI 92 IRQ_TYPE_LEVEL_HIGH>; +			gpio-controller; +			#gpio-cells = <2>; +			gpio-ranges = <&pmx0 0 62 8>; +			interrupt-controller; +			#interrupt-cells = <2>; +			clocks = <&crg_ctrl HI3660_PCLK_GPIO8>; +			clock-names = "apb_pclk"; +		}; + +		gpio9: gpio@e8a14000 { +			compatible = "arm,pl061", "arm,primecell"; +			reg = <0 0xe8a14000 0 0x1000>; +			interrupts = <GIC_SPI 93 IRQ_TYPE_LEVEL_HIGH>; +			gpio-controller; +			#gpio-cells = <2>; +			gpio-ranges = <&pmx0 0 70 8>; +			interrupt-controller; +			#interrupt-cells = <2>; +			clocks = <&crg_ctrl HI3660_PCLK_GPIO9>; +			clock-names = "apb_pclk"; +		}; + +		gpio10: gpio@e8a15000 { +			compatible = "arm,pl061", "arm,primecell"; +			reg = <0 0xe8a15000 0 0x1000>; +			interrupts = <GIC_SPI 94 IRQ_TYPE_LEVEL_HIGH>; +			gpio-controller; +			#gpio-cells = <2>; +			gpio-ranges = <&pmx0 0 78 8>; +			interrupt-controller; +			#interrupt-cells = <2>; +			clocks = <&crg_ctrl HI3660_PCLK_GPIO10>; +			clock-names = "apb_pclk"; +		}; + +		gpio11: gpio@e8a16000 { +			compatible = "arm,pl061", "arm,primecell"; +			reg = <0 0xe8a16000 0 0x1000>; +			interrupts = <GIC_SPI 95 IRQ_TYPE_LEVEL_HIGH>; +			gpio-controller; +			#gpio-cells = <2>; +			gpio-ranges = <&pmx0 0 86 8>; +			interrupt-controller; +			#interrupt-cells = <2>; +			clocks = <&crg_ctrl HI3660_PCLK_GPIO11>; +			clock-names = "apb_pclk"; +		}; + +		gpio12: gpio@e8a17000 { +			compatible = "arm,pl061", "arm,primecell"; +			reg = <0 0xe8a17000 0 0x1000>; +			interrupts = <GIC_SPI 96 IRQ_TYPE_LEVEL_HIGH>; +			gpio-controller; +			#gpio-cells = <2>; +			gpio-ranges = <&pmx0 0 94 3 &pmx0 7 101 1>; +			interrupt-controller; +			#interrupt-cells = <2>; +			clocks = <&crg_ctrl HI3660_PCLK_GPIO12>; +			clock-names = "apb_pclk"; +		}; + +		gpio13: gpio@e8a18000 { +			compatible = "arm,pl061", "arm,primecell"; +			reg = <0 0xe8a18000 0 0x1000>; +			interrupts = <GIC_SPI 97 IRQ_TYPE_LEVEL_HIGH>; +			gpio-controller; +			#gpio-cells = <2>; +			gpio-ranges = <&pmx0 0 102 8>; +			interrupt-controller; +			#interrupt-cells = <2>; +			clocks = <&crg_ctrl HI3660_PCLK_GPIO13>; +			clock-names = "apb_pclk"; +		}; + +		gpio14: gpio@e8a19000 { +			compatible = "arm,pl061", "arm,primecell"; +			reg = <0 0xe8a19000 0 0x1000>; +			interrupts = <GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH>; +			gpio-controller; +			#gpio-cells = <2>; +			gpio-ranges = <&pmx0 0 110 8>; +			interrupt-controller; +			#interrupt-cells = <2>; +			clocks = <&crg_ctrl HI3660_PCLK_GPIO14>; +			clock-names = "apb_pclk"; +		}; + +		gpio15: gpio@e8a1a000 { +			compatible = "arm,pl061", "arm,primecell"; +			reg = <0 0xe8a1a000 0 0x1000>; +			interrupts = <GIC_SPI 99 IRQ_TYPE_LEVEL_HIGH>; +			gpio-controller; +			#gpio-cells = <2>; +			gpio-ranges = <&pmx0 0 118 6>; +			interrupt-controller; +			#interrupt-cells = <2>; +			clocks = <&crg_ctrl HI3660_PCLK_GPIO15>; +			clock-names = "apb_pclk"; +		}; + +		gpio16: gpio@e8a1b000 { +			compatible = "arm,pl061", "arm,primecell"; +			reg = <0 0xe8a1b000 0 0x1000>; +			interrupts = <GIC_SPI 100 IRQ_TYPE_LEVEL_HIGH>; +			gpio-controller; +			#gpio-cells = <2>; +			interrupt-controller; +			#interrupt-cells = <2>; +			clocks = <&crg_ctrl HI3660_PCLK_GPIO16>; +			clock-names = "apb_pclk"; +		}; + +		gpio17: gpio@e8a1c000 { +			compatible = "arm,pl061", "arm,primecell"; +			reg = <0 0xe8a1c000 0 0x1000>; +			interrupts = <GIC_SPI 101 IRQ_TYPE_LEVEL_HIGH>; +			gpio-controller; +			#gpio-cells = <2>; +			interrupt-controller; +			#interrupt-cells = <2>; +			clocks = <&crg_ctrl HI3660_PCLK_GPIO17>; +			clock-names = "apb_pclk"; +		}; + +		gpio18: gpio@ff3b4000 { +			compatible = "arm,pl061", "arm,primecell"; +			reg = <0 0xff3b4000 0 0x1000>; +			interrupts = <GIC_SPI 102 IRQ_TYPE_LEVEL_HIGH>; +			gpio-controller; +			#gpio-cells = <2>; +			gpio-ranges = <&pmx2 0 0 8>; +			interrupt-controller; +			#interrupt-cells = <2>; +			clocks = <&crg_ctrl HI3660_PCLK_GPIO18>; +			clock-names = "apb_pclk"; +		}; + +		gpio19: gpio@ff3b5000 { +			compatible = "arm,pl061", "arm,primecell"; +			reg = <0 0xff3b5000 0 0x1000>; +			interrupts = <GIC_SPI 103 IRQ_TYPE_LEVEL_HIGH>; +			gpio-controller; +			#gpio-cells = <2>; +			gpio-ranges = <&pmx2 0 8 4>; +			interrupt-controller; +			#interrupt-cells = <2>; +			clocks = <&crg_ctrl HI3660_PCLK_GPIO19>; +			clock-names = "apb_pclk"; +		}; + +		gpio20: gpio@e8a1f000 { +			compatible = "arm,pl061", "arm,primecell"; +			reg = <0 0xe8a1f000 0 0x1000>; +			interrupts = <GIC_SPI 104 IRQ_TYPE_LEVEL_HIGH>; +			gpio-controller; +			#gpio-cells = <2>; +			gpio-ranges = <&pmx1 0 0 6>; +			interrupt-controller; +			#interrupt-cells = <2>; +			clocks = <&crg_ctrl HI3660_PCLK_GPIO20>; +			clock-names = "apb_pclk"; +		}; + +		gpio21: gpio@e8a20000 { +			compatible = "arm,pl061", "arm,primecell"; +			reg = <0 0xe8a20000 0 0x1000>; +			interrupts = <GIC_SPI 105 IRQ_TYPE_LEVEL_HIGH>; +			gpio-controller; +			#gpio-cells = <2>; +			interrupt-controller; +			#interrupt-cells = <2>; +			gpio-ranges = <&pmx3 0 0 6>; +			clocks = <&crg_ctrl HI3660_PCLK_GPIO21>; +			clock-names = "apb_pclk"; +		}; + +		gpio22: gpio@fff0b000 { +			compatible = "arm,pl061", "arm,primecell"; +			reg = <0 0xfff0b000 0 0x1000>; +			interrupts = <GIC_SPI 106 IRQ_TYPE_LEVEL_HIGH>; +			gpio-controller; +			#gpio-cells = <2>; +			/* GPIO176 */ +			gpio-ranges = <&pmx4 2 0 6>; +			interrupt-controller; +			#interrupt-cells = <2>; +			clocks = <&sctrl HI3660_PCLK_AO_GPIO0>; +			clock-names = "apb_pclk"; +		}; + +		gpio23: gpio@fff0c000 { +			compatible = "arm,pl061", "arm,primecell"; +			reg = <0 0xfff0c000 0 0x1000>; +			interrupts = <GIC_SPI 107 IRQ_TYPE_LEVEL_HIGH>; +			gpio-controller; +			#gpio-cells = <2>; +			/* GPIO184 */ +			gpio-ranges = <&pmx4 0 6 7>; +			interrupt-controller; +			#interrupt-cells = <2>; +			clocks = <&sctrl HI3660_PCLK_AO_GPIO1>; +			clock-names = "apb_pclk"; +		}; + +		gpio24: gpio@fff0d000 { +			compatible = "arm,pl061", "arm,primecell"; +			reg = <0 0xfff0d000 0 0x1000>; +			interrupts = <GIC_SPI 108 IRQ_TYPE_LEVEL_HIGH>; +			gpio-controller; +			#gpio-cells = <2>; +			/* GPIO192 */ +			gpio-ranges = <&pmx4 0 13 8>; +			interrupt-controller; +			#interrupt-cells = <2>; +			clocks = <&sctrl HI3660_PCLK_AO_GPIO2>; +			clock-names = "apb_pclk"; +		}; + +		gpio25: gpio@fff0e000 { +			compatible = "arm,pl061", "arm,primecell"; +			reg = <0 0xfff0e000 0 0x1000>; +			interrupts = <GIC_SPI 109 IRQ_TYPE_LEVEL_HIGH>; +			gpio-controller; +			#gpio-cells = <2>; +			/* GPIO200 */ +			gpio-ranges = <&pmx4 0 21 4 &pmx4 5 25 3>; +			interrupt-controller; +			#interrupt-cells = <2>; +			clocks = <&sctrl HI3660_PCLK_AO_GPIO3>; +			clock-names = "apb_pclk"; +		}; + +		gpio26: gpio@fff0f000 { +			compatible = "arm,pl061", "arm,primecell"; +			reg = <0 0xfff0f000 0 0x1000>; +			interrupts = <GIC_SPI 110 IRQ_TYPE_LEVEL_HIGH>; +			gpio-controller; +			#gpio-cells = <2>; +			/* GPIO208 */ +			gpio-ranges = <&pmx4 0 28 8>; +			interrupt-controller; +			#interrupt-cells = <2>; +			clocks = <&sctrl HI3660_PCLK_AO_GPIO4>; +			clock-names = "apb_pclk"; +		}; + +		gpio27: gpio@fff10000 { +			compatible = "arm,pl061", "arm,primecell"; +			reg = <0 0xfff10000 0 0x1000>; +			interrupts = <GIC_SPI 111 IRQ_TYPE_LEVEL_HIGH>; +			gpio-controller; +			#gpio-cells = <2>; +			/* GPIO216 */ +			gpio-ranges = <&pmx4 0 36 6>; +			interrupt-controller; +			#interrupt-cells = <2>; +			clocks = <&sctrl HI3660_PCLK_AO_GPIO5>; +			clock-names = "apb_pclk"; +		}; + +		gpio28: gpio@fff1d000 { +			compatible = "arm,pl061", "arm,primecell"; +			reg = <0 0xfff1d000 0 0x1000>; +			interrupts = <GIC_SPI 141 IRQ_TYPE_LEVEL_HIGH>; +			gpio-controller; +			#gpio-cells = <2>; +			interrupt-controller; +			#interrupt-cells = <2>; +			clocks = <&sctrl HI3660_PCLK_AO_GPIO6>; +			clock-names = "apb_pclk"; +		}; + +		spi2: spi@ffd68000 { +			compatible = "arm,pl022", "arm,primecell"; +			reg = <0x0 0xffd68000 0x0 0x1000>; +			#address-cells = <1>; +			#size-cells = <0>; +			interrupts = <GIC_SPI 116 IRQ_TYPE_LEVEL_HIGH>; +			clocks = <&crg_ctrl HI3660_CLK_GATE_SPI2>; +			clock-names = "apb_pclk"; +			pinctrl-names = "default"; +			pinctrl-0 = <&spi2_pmx_func>; +			num-cs = <1>; +			cs-gpios = <&gpio27 2 0>; +			status = "disabled"; +		}; + +		spi3: spi@ff3b3000 { +			compatible = "arm,pl022", "arm,primecell"; +			reg = <0x0 0xff3b3000 0x0 0x1000>; +			#address-cells = <1>; +			#size-cells = <0>; +			interrupts = <GIC_SPI 312 IRQ_TYPE_LEVEL_HIGH>; +			clocks = <&crg_ctrl HI3660_CLK_GATE_SPI3>; +			clock-names = "apb_pclk"; +			pinctrl-names = "default"; +			pinctrl-0 = <&spi3_pmx_func>; +			num-cs = <1>; +			cs-gpios = <&gpio18 5 0>; +			status = "disabled"; +		}; + +		pcie@f4000000 { +			compatible = "hisilicon,kirin960-pcie"; +			reg = <0x0 0xf4000000 0x0 0x1000>, +			      <0x0 0xff3fe000 0x0 0x1000>, +			      <0x0 0xf3f20000 0x0 0x40000>, +			      <0x0 0xf5000000 0x0 0x2000>; +			reg-names = "dbi", "apb", "phy", "config"; +			bus-range = <0x0  0x1>; +			#address-cells = <3>; +			#size-cells = <2>; +			device_type = "pci"; +			ranges = <0x02000000 0x0 0x00000000 +				  0x0 0xf6000000 +				  0x0 0x02000000>; +			num-lanes = <1>; +			#interrupt-cells = <1>; +			interrupts = <0 283 4>; +			interrupt-names = "msi"; +			interrupt-map-mask = <0xf800 0 0 7>; +			interrupt-map = <0x0 0 0 1 +					 &gic GIC_SPI 282 IRQ_TYPE_LEVEL_HIGH>, +					<0x0 0 0 2 +					 &gic GIC_SPI 283 IRQ_TYPE_LEVEL_HIGH>, +					<0x0 0 0 3 +					 &gic GIC_SPI 284 IRQ_TYPE_LEVEL_HIGH>, +					<0x0 0 0 4 +					 &gic GIC_SPI 285 IRQ_TYPE_LEVEL_HIGH>; +			clocks = <&crg_ctrl HI3660_PCIEPHY_REF>, +				 <&crg_ctrl HI3660_CLK_GATE_PCIEAUX>, +				 <&crg_ctrl HI3660_PCLK_GATE_PCIE_PHY>, +				 <&crg_ctrl HI3660_PCLK_GATE_PCIE_SYS>, +				 <&crg_ctrl HI3660_ACLK_GATE_PCIE>; +			clock-names = "pcie_phy_ref", "pcie_aux", +				      "pcie_apb_phy", "pcie_apb_sys", +				      "pcie_aclk"; +			reset-gpios = <&gpio11 1 0 >; +		}; + +		/* UFS */ +		ufs: ufs@ff3b0000 { +			compatible = "hisilicon,hi3660-ufs", "jedec,ufs-1.1"; +			/* 0: HCI standard */ +			/* 1: UFS SYS CTRL */ +			reg = <0x0 0xff3b0000 0x0 0x1000>, +				<0x0 0xff3b1000 0x0 0x1000>; +			interrupt-parent = <&gic>; +			interrupts = <GIC_SPI 278 IRQ_TYPE_LEVEL_HIGH>; +			clocks = <&crg_ctrl HI3660_CLK_GATE_UFSIO_REF>, +				<&crg_ctrl HI3660_CLK_GATE_UFSPHY_CFG>; +			clock-names = "ref_clk", "phy_clk"; +			freq-table-hz = <0 0>, <0 0>; +			/* offset: 0x84; bit: 12 */ +			resets = <&crg_rst 0x84 12>; +			reset-names = "rst"; +		}; + +		/* SD */ +		dwmmc1: dwmmc1@ff37f000 { +			compatible = "hisilicon,hi3660-dw-mshc"; +			reg = <0x0 0xff37f000 0x0 0x1000>; +			#address-cells = <1>; +			#size-cells = <0>; +			interrupts = <GIC_SPI 139 IRQ_TYPE_LEVEL_HIGH>; +			clocks = <&crg_ctrl HI3660_CLK_GATE_SD>, +				<&crg_ctrl HI3660_HCLK_GATE_SD>; +			clock-names = "ciu", "biu"; +			clock-frequency = <3200000>; +			resets = <&crg_rst 0x94 18>; +			reset-names = "reset"; +			hisilicon,peripheral-syscon = <&sctrl>; +			card-detect-delay = <200>; +			status = "disabled"; +		}; + +		/* SDIO */ +		dwmmc2: dwmmc2@ff3ff000 { +			compatible = "hisilicon,hi3660-dw-mshc"; +			reg = <0x0 0xff3ff000 0x0 0x1000>; +			#address-cells = <0x1>; +			#size-cells = <0x0>; +			interrupts = <GIC_SPI 140 IRQ_TYPE_LEVEL_HIGH>; +			clocks = <&crg_ctrl HI3660_CLK_GATE_SDIO0>, +				 <&crg_ctrl HI3660_HCLK_GATE_SDIO0>; +			clock-names = "ciu", "biu"; +			resets = <&crg_rst 0x94 20>; +			reset-names = "reset"; +			card-detect-delay = <200>; +			status = "disabled"; +		}; + +		watchdog0: watchdog@e8a06000 { +			compatible = "arm,sp805-wdt", "arm,primecell"; +			reg = <0x0 0xe8a06000 0x0 0x1000>; +			interrupts = <GIC_SPI 44 IRQ_TYPE_LEVEL_HIGH>; +			clocks = <&crg_ctrl HI3660_OSC32K>; +			clock-names = "apb_pclk"; +		}; + +		watchdog1: watchdog@e8a07000 { +			compatible = "arm,sp805-wdt", "arm,primecell"; +			reg = <0x0 0xe8a07000 0x0 0x1000>; +			interrupts = <GIC_SPI 45 IRQ_TYPE_LEVEL_HIGH>; +			clocks = <&crg_ctrl HI3660_OSC32K>; +			clock-names = "apb_pclk"; +		}; + +		tsensor: tsensor@fff30000 { +			compatible = "hisilicon,hi3660-tsensor"; +			reg = <0x0 0xfff30000 0x0 0x1000>; +			interrupts = <GIC_SPI 145 IRQ_TYPE_LEVEL_HIGH>; +			#thermal-sensor-cells = <1>; +		}; + +		thermal-zones { + +			cls0: cls0 { +				polling-delay = <1000>; +				polling-delay-passive = <100>; +				sustainable-power = <4500>; + +				/* sensor ID */ +				thermal-sensors = <&tsensor 1>; + +				trips { +					threshold: trip-point@0 { +						temperature = <65000>; +						hysteresis = <1000>; +						type = "passive"; +					}; + +					target: trip-point@1 { +						temperature = <75000>; +						hysteresis = <1000>; +						type = "passive"; +					}; +				}; + +				cooling-maps { +					map0 { +						trip = <&target>; +						contribution = <1024>; +						cooling-device = <&cpu0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>, +								 <&cpu1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>, +								 <&cpu2 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>, +								 <&cpu3 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>; +					}; +					map1 { +						trip = <&target>; +						contribution = <512>; +						cooling-device = <&cpu4 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>, +								 <&cpu5 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>, +								 <&cpu6 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>, +								 <&cpu7 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>; +					}; +				}; +			}; +		}; +	}; +}; diff --git a/arch/arm/dts/hikey960-pinctrl.dtsi b/arch/arm/dts/hikey960-pinctrl.dtsi new file mode 100644 index 00000000000..d11efc81958 --- /dev/null +++ b/arch/arm/dts/hikey960-pinctrl.dtsi @@ -0,0 +1,1060 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * pinctrl dts fils for Hislicon HiKey960 development board + * + */ + +#include <dt-bindings/pinctrl/hisi.h> + +/ { +	soc { +		/* [IOMG_000, IOMG_123] */ +		range: gpio-range { +			#pinctrl-single,gpio-range-cells = <3>; +		}; + +		pmx0: pinmux@e896c000 { +			compatible = "pinctrl-single"; +			reg = <0x0 0xe896c000 0x0 0x1f0>; +			#pinctrl-cells = <1>; +			#gpio-range-cells = <0x3>; +			pinctrl-single,register-width = <0x20>; +			pinctrl-single,function-mask = <0x7>; +			/* pin base, nr pins & gpio function */ +			pinctrl-single,gpio-range = < +				&range 0 7 0 +				&range 8 116 0>; + +			pmu_pmx_func: pmu_pmx_func { +				pinctrl-single,pins = < +					0x008 MUX_M1 /* PMU1_SSI */ +					0x00c MUX_M1 /* PMU2_SSI */ +					0x010 MUX_M1 /* PMU_CLKOUT */ +					0x100 MUX_M1 /* PMU_HKADC_SSI */ +				>; +			}; + +			csi0_pwd_n_pmx_func: csi0_pwd_n_pmx_func { +				pinctrl-single,pins = < +					0x044 MUX_M0 /* CSI0_PWD_N */ +				>; +			}; + +			csi1_pwd_n_pmx_func: csi1_pwd_n_pmx_func { +				pinctrl-single,pins = < +					0x04c MUX_M0 /* CSI1_PWD_N */ +				>; +			}; + +			isp0_pmx_func: isp0_pmx_func { +				pinctrl-single,pins = < +					0x058 MUX_M1 /* ISP_CLK0 */ +					0x064 MUX_M1 /* ISP_SCL0 */ +					0x068 MUX_M1 /* ISP_SDA0 */ +				>; +			}; + +			isp1_pmx_func: isp1_pmx_func { +				pinctrl-single,pins = < +					0x05c MUX_M1 /* ISP_CLK1 */ +					0x06c MUX_M1 /* ISP_SCL1 */ +					0x070 MUX_M1 /* ISP_SDA1 */ +				>; +			}; + +			pwr_key_pmx_func: pwr_key_pmx_func { +				pinctrl-single,pins = < +					0x080 MUX_M0 /* GPIO_034 */ +				>; +			}; + +			i2c3_pmx_func: i2c3_pmx_func { +				pinctrl-single,pins = < +					0x02c MUX_M1 /* I2C3_SCL */ +					0x030 MUX_M1 /* I2C3_SDA */ +				>; +			}; + +			i2c4_pmx_func: i2c4_pmx_func { +				pinctrl-single,pins = < +					0x090 MUX_M1 /* I2C4_SCL */ +					0x094 MUX_M1 /* I2C4_SDA */ +				>; +			}; + +			pcie_perstn_pmx_func: pcie_perstn_pmx_func { +				pinctrl-single,pins = < +					0x15c MUX_M1 /* PCIE_PERST_N */ +				>; +			}; + +			usbhub5734_pmx_func: usbhub5734_pmx_func { +				pinctrl-single,pins = < +					0x11c MUX_M0 /* GPIO_073 */ +					0x120 MUX_M0 /* GPIO_074 */ +				>; +			}; + +			uart0_pmx_func: uart0_pmx_func { +				pinctrl-single,pins = < +					0x0cc MUX_M2 /* UART0_RXD */ +					0x0d0 MUX_M2 /* UART0_TXD */ +				>; +			}; + +			uart1_pmx_func: uart1_pmx_func { +				pinctrl-single,pins = < +					0x0b0 MUX_M2 /* UART1_CTS_N */ +					0x0b4 MUX_M2 /* UART1_RTS_N */ +					0x0a8 MUX_M2 /* UART1_RXD */ +					0x0ac MUX_M2 /* UART1_TXD */ +				>; +			}; + +			uart2_pmx_func: uart2_pmx_func { +				pinctrl-single,pins = < +					0x0bc MUX_M2 /* UART2_CTS_N */ +					0x0c0 MUX_M2 /* UART2_RTS_N */ +					0x0c8 MUX_M2 /* UART2_RXD */ +					0x0c4 MUX_M2 /* UART2_TXD */ +				>; +			}; + +			uart3_pmx_func: uart3_pmx_func { +				pinctrl-single,pins = < +					0x0dc MUX_M1 /* UART3_CTS_N */ +					0x0e0 MUX_M1 /* UART3_RTS_N */ +					0x0e4 MUX_M1 /* UART3_RXD */ +					0x0e8 MUX_M1 /* UART3_TXD */ +				>; +			}; + +			uart4_pmx_func: uart4_pmx_func { +				pinctrl-single,pins = < +					0x0ec MUX_M1 /* UART4_CTS_N */ +					0x0f0 MUX_M1 /* UART4_RTS_N */ +					0x0f4 MUX_M1 /* UART4_RXD */ +					0x0f8 MUX_M1 /* UART4_TXD */ +				>; +			}; + +			uart5_pmx_func: uart5_pmx_func { +				pinctrl-single,pins = < +					0x0c4 MUX_M3 /* UART5_CTS_N */ +					0x0c8 MUX_M3 /* UART5_RTS_N */ +					0x0bc MUX_M3 /* UART5_RXD */ +					0x0c0 MUX_M3 /* UART5_TXD */ +				>; +			}; + +			uart6_pmx_func: uart6_pmx_func { +				pinctrl-single,pins = < +					0x0cc MUX_M1 /* UART6_CTS_N */ +					0x0d0 MUX_M1 /* UART6_RTS_N */ +					0x0d4 MUX_M1 /* UART6_RXD */ +					0x0d8 MUX_M1 /* UART6_TXD */ +				>; +			}; + +			cam0_rst_pmx_func: cam0_rst_pmx_func { +				pinctrl-single,pins = < +					0x0c8 MUX_M0 /* CAM0_RST */ +				>; +			}; + +			cam1_rst_pmx_func: cam1_rst_pmx_func { +				pinctrl-single,pins = < +					0x124 MUX_M0 /* CAM1_RST */ +				>; +			}; +		}; + +		/* [IOMG_MMC0_000, IOMG_MMC0_005] */ +		pmx1: pinmux@ff37e000 { +			compatible = "pinctrl-single"; +			reg = <0x0 0xff37e000 0x0 0x18>; +			#gpio-range-cells = <0x3>; +			#pinctrl-cells = <1>; +			pinctrl-single,register-width = <0x20>; +			pinctrl-single,function-mask = <0x7>; +			/* pin base, nr pins & gpio function */ +			pinctrl-single,gpio-range = <&range 0 6 0>; + +			sd_pmx_func: sd_pmx_func { +				pinctrl-single,pins = < +					0x000 MUX_M1 /* SD_CLK */ +					0x004 MUX_M1 /* SD_CMD */ +					0x008 MUX_M1 /* SD_DATA0 */ +					0x00c MUX_M1 /* SD_DATA1 */ +					0x010 MUX_M1 /* SD_DATA2 */ +					0x014 MUX_M1 /* SD_DATA3 */ +				>; +			}; +		}; + +		/* [IOMG_FIX_000, IOMG_FIX_011] */ +		pmx2: pinmux@ff3b6000 { +			compatible = "pinctrl-single"; +			reg = <0x0 0xff3b6000 0x0 0x30>; +			#pinctrl-cells = <1>; +			#gpio-range-cells = <0x3>; +			pinctrl-single,register-width = <0x20>; +			pinctrl-single,function-mask = <0x7>; +			/* pin base, nr pins & gpio function */ +			pinctrl-single,gpio-range = <&range 0 12 0>; + +			ufs_pmx_func: ufs_pmx_func { +				pinctrl-single,pins = < +					0x000 MUX_M1 /* UFS_REF_CLK */ +					0x004 MUX_M1 /* UFS_RST_N */ +				>; +			}; + +			spi3_pmx_func: spi3_pmx_func { +				pinctrl-single,pins = < +					0x008 MUX_M1 /* SPI3_CLK */ +					0x00c MUX_M1 /* SPI3_DI */ +					0x010 MUX_M1 /* SPI3_DO */ +					0x014 MUX_M1 /* SPI3_CS0_N */ +				>; +			}; +		}; + +		/* [IOMG_MMC1_000, IOMG_MMC1_005] */ +		pmx3: pinmux@ff3fd000 { +			compatible = "pinctrl-single"; +			reg = <0x0 0xff3fd000 0x0 0x18>; +			#pinctrl-cells = <1>; +			#gpio-range-cells = <0x3>; +			pinctrl-single,register-width = <0x20>; +			pinctrl-single,function-mask = <0x7>; +			/* pin base, nr pins & gpio function */ +			pinctrl-single,gpio-range = <&range 0 6 0>; + +			sdio_pmx_func: sdio_pmx_func { +				pinctrl-single,pins = < +					0x000 MUX_M1 /* SDIO_CLK */ +					0x004 MUX_M1 /* SDIO_CMD */ +					0x008 MUX_M1 /* SDIO_DATA0 */ +					0x00c MUX_M1 /* SDIO_DATA1 */ +					0x010 MUX_M1 /* SDIO_DATA2 */ +					0x014 MUX_M1 /* SDIO_DATA3 */ +				>; +			}; +		}; + +		/* [IOMG_AO_000, IOMG_AO_041] */ +		pmx4: pinmux@fff11000 { +			compatible = "pinctrl-single"; +			reg = <0x0 0xfff11000 0x0 0xa8>; +			#pinctrl-cells = <1>; +			#gpio-range-cells = <0x3>; +			pinctrl-single,register-width = <0x20>; +			pinctrl-single,function-mask = <0x7>; +			/* pin base in node, nr pins & gpio function */ +			pinctrl-single,gpio-range = <&range 0 42 0>; + +			i2s2_pmx_func: i2s2_pmx_func { +				pinctrl-single,pins = < +					0x044 MUX_M1 /* I2S2_DI */ +					0x048 MUX_M1 /* I2S2_DO */ +					0x04c MUX_M1 /* I2S2_XCLK */ +					0x050 MUX_M1 /* I2S2_XFS */ +				>; +			}; + +			slimbus_pmx_func: slimbus_pmx_func { +				pinctrl-single,pins = < +					0x02c MUX_M1 /* SLIMBUS_CLK */ +					0x030 MUX_M1 /* SLIMBUS_DATA */ +				>; +			}; + +			i2c0_pmx_func: i2c0_pmx_func { +				pinctrl-single,pins = < +					0x014 MUX_M1 /* I2C0_SCL */ +					0x018 MUX_M1 /* I2C0_SDA */ +				>; +			}; + +			i2c1_pmx_func: i2c1_pmx_func { +				pinctrl-single,pins = < +					0x01c MUX_M1 /* I2C1_SCL */ +					0x020 MUX_M1 /* I2C1_SDA */ +				>; +			}; + +			i2c7_pmx_func: i2c7_pmx_func { +				pinctrl-single,pins = < +					0x024 MUX_M3 /* I2C7_SCL */ +					0x028 MUX_M3 /* I2C7_SDA */ +				>; +			}; + +			pcie_pmx_func: pcie_pmx_func { +				pinctrl-single,pins = < +					0x084 MUX_M1 /* PCIE_CLKREQ_N */ +					0x088 MUX_M1 /* PCIE_WAKE_N */ +				>; +			}; + +			spi2_pmx_func: spi2_pmx_func { +				pinctrl-single,pins = < +					0x08c MUX_M1 /* SPI2_CLK */ +					0x090 MUX_M1 /* SPI2_DI */ +					0x094 MUX_M1 /* SPI2_DO */ +					0x098 MUX_M1 /* SPI2_CS0_N */ +				>; +			}; + +			i2s0_pmx_func: i2s0_pmx_func { +				pinctrl-single,pins = < +					0x034 MUX_M1 /* I2S0_DI */ +					0x038 MUX_M1 /* I2S0_DO */ +					0x03c MUX_M1 /* I2S0_XCLK */ +					0x040 MUX_M1 /* I2S0_XFS */ +				>; +			}; +		}; + +		pmx5: pinmux@e896c800 { +			compatible = "pinconf-single"; +			reg = <0x0 0xe896c800 0x0 0x200>; +			#pinctrl-cells = <1>; +			pinctrl-single,register-width = <0x20>; + +			pmu_cfg_func: pmu_cfg_func { +				pinctrl-single,pins = < +					0x010 0x0 /* PMU1_SSI */ +					0x014 0x0 /* PMU2_SSI */ +					0x018 0x0 /* PMU_CLKOUT */ +					0x10c 0x0 /* PMU_HKADC_SSI */ +				>; +				pinctrl-single,bias-pulldown = < +					PULL_DIS +					PULL_DOWN +					PULL_DIS +					PULL_DOWN +				>; +				pinctrl-single,bias-pullup = < +					PULL_DIS +					PULL_UP +					PULL_DIS +					PULL_UP +				>; +				pinctrl-single,drive-strength = < +					DRIVE7_06MA DRIVE6_MASK +				>; +			}; + +			i2c3_cfg_func: i2c3_cfg_func { +				pinctrl-single,pins = < +					0x038 0x0 /* I2C3_SCL */ +					0x03c 0x0 /* I2C3_SDA */ +				>; +				pinctrl-single,bias-pulldown = < +					PULL_DIS +					PULL_DOWN +					PULL_DIS +					PULL_DOWN +				>; +				pinctrl-single,bias-pullup = < +					PULL_DIS +					PULL_UP +					PULL_DIS +					PULL_UP +				>; +				pinctrl-single,drive-strength = < +					DRIVE7_02MA DRIVE6_MASK +				>; +			}; + +			csi0_pwd_n_cfg_func: csi0_pwd_n_cfg_func { +				pinctrl-single,pins = < +					0x050 0x0 /* CSI0_PWD_N */ +				>; +				pinctrl-single,bias-pulldown = < +					PULL_DIS +					PULL_DOWN +					PULL_DIS +					PULL_DOWN +				>; +				pinctrl-single,bias-pullup = < +					PULL_DIS +					PULL_UP +					PULL_DIS +					PULL_UP +				>; +				pinctrl-single,drive-strength = < +					DRIVE7_04MA DRIVE6_MASK +				>; +			}; + +			csi1_pwd_n_cfg_func: csi1_pwd_n_cfg_func { +				pinctrl-single,pins = < +					0x058 0x0 /* CSI1_PWD_N */ +				>; +				pinctrl-single,bias-pulldown = < +					PULL_DIS +					PULL_DOWN +					PULL_DIS +					PULL_DOWN +				>; +				pinctrl-single,bias-pullup = < +					PULL_DIS +					PULL_UP +					PULL_DIS +					PULL_UP +				>; +				pinctrl-single,drive-strength = < +					DRIVE7_04MA DRIVE6_MASK +				>; +			}; + +			isp0_cfg_func: isp0_cfg_func { +				pinctrl-single,pins = < +					0x064 0x0 /* ISP_CLK0 */ +					0x070 0x0 /* ISP_SCL0 */ +					0x074 0x0 /* ISP_SDA0 */ +				>; +				pinctrl-single,bias-pulldown = < +					PULL_DIS +					PULL_DOWN +					PULL_DIS +					PULL_DOWN +				>; +				pinctrl-single,bias-pullup = < +					PULL_DIS +					PULL_UP +					PULL_DIS +					PULL_UP +				>; +				pinctrl-single,drive-strength = < +					DRIVE7_04MA DRIVE6_MASK>; +			}; + +			isp1_cfg_func: isp1_cfg_func { +				pinctrl-single,pins = < +					0x068 0x0 /* ISP_CLK1 */ +					0x078 0x0 /* ISP_SCL1 */ +					0x07c 0x0 /* ISP_SDA1 */ +				>; +				pinctrl-single,bias-pulldown = < +					PULL_DIS +					PULL_DOWN +					PULL_DIS +					PULL_DOWN +				>; +				pinctrl-single,bias-pullup = < +					PULL_DIS +					PULL_UP +					PULL_DIS +					PULL_UP +				>; +				pinctrl-single,drive-strength = < +					DRIVE7_04MA DRIVE6_MASK +				>; +			}; + +			pwr_key_cfg_func: pwr_key_cfg_func { +				pinctrl-single,pins = < +					0x08c 0x0 /* GPIO_034 */ +				>; +				pinctrl-single,bias-pulldown = < +					PULL_DIS +					PULL_DOWN +					PULL_DIS +					PULL_DOWN +				>; +				pinctrl-single,bias-pullup = < +					PULL_DIS +					PULL_UP +					PULL_DIS +					PULL_UP +				>; +				pinctrl-single,drive-strength = < +					DRIVE7_02MA DRIVE6_MASK +				>; +			}; + +			uart1_cfg_func: uart1_cfg_func { +				pinctrl-single,pins = < +					0x0b4 0x0 /* UART1_RXD */ +					0x0b8 0x0 /* UART1_TXD */ +					0x0bc 0x0 /* UART1_CTS_N */ +					0x0c0 0x0 /* UART1_RTS_N */ +				>; +				pinctrl-single,bias-pulldown = < +					PULL_DIS +					PULL_DOWN +					PULL_DIS +					PULL_DOWN +				>; +				pinctrl-single,bias-pullup = < +					PULL_DIS +					PULL_UP +					PULL_DIS +					PULL_UP +				>; +				pinctrl-single,drive-strength = < +					DRIVE7_02MA DRIVE6_MASK +				>; +			}; + +			uart2_cfg_func: uart2_cfg_func { +				pinctrl-single,pins = < +					0x0c8 0x0 /* UART2_CTS_N */ +					0x0cc 0x0 /* UART2_RTS_N */ +					0x0d0 0x0 /* UART2_TXD */ +					0x0d4 0x0 /* UART2_RXD */ +				>; +				pinctrl-single,bias-pulldown = < +					PULL_DIS +					PULL_DOWN +					PULL_DIS +					PULL_DOWN +				>; +				pinctrl-single,bias-pullup = < +					PULL_DIS +					PULL_UP +					PULL_DIS +					PULL_UP +				>; +				pinctrl-single,drive-strength = < +					DRIVE7_02MA DRIVE6_MASK +				>; +			}; + +			uart5_cfg_func: uart5_cfg_func { +				pinctrl-single,pins = < +					0x0c8 0x0 /* UART5_RXD */ +					0x0cc 0x0 /* UART5_TXD */ +					0x0d0 0x0 /* UART5_CTS_N */ +					0x0d4 0x0 /* UART5_RTS_N */ +				>; +				pinctrl-single,bias-pulldown = < +					PULL_DIS +					PULL_DOWN +					PULL_DIS +					PULL_DOWN +				>; +				pinctrl-single,bias-pullup = < +					PULL_DIS +					PULL_UP +					PULL_DIS +					PULL_UP +				>; +				pinctrl-single,drive-strength = < +					DRIVE7_02MA DRIVE6_MASK +				>; +			}; + +			cam0_rst_cfg_func: cam0_rst_cfg_func { +				pinctrl-single,pins = < +					0x0d4 0x0 /* CAM0_RST */ +				>; +				pinctrl-single,bias-pulldown = < +					PULL_DIS +					PULL_DOWN +					PULL_DIS +					PULL_DOWN +				>; +				pinctrl-single,bias-pullup = < +					PULL_DIS +					PULL_UP +					PULL_DIS +					PULL_UP +				>; +				pinctrl-single,drive-strength = < +					DRIVE7_04MA DRIVE6_MASK +				>; +			}; + +			uart0_cfg_func: uart0_cfg_func { +				pinctrl-single,pins = < +					0x0d8 0x0 /* UART0_RXD */ +					0x0dc 0x0 /* UART0_TXD */ +				>; +				pinctrl-single,bias-pulldown = < +					PULL_DIS +					PULL_DOWN +					PULL_DIS +					PULL_DOWN +				>; +				pinctrl-single,bias-pullup = < +					PULL_DIS +					PULL_UP +					PULL_DIS +					PULL_UP +				>; +				pinctrl-single,drive-strength = < +					DRIVE7_02MA DRIVE6_MASK +				>; +			}; + +			uart6_cfg_func: uart6_cfg_func { +				pinctrl-single,pins = < +					0x0d8 0x0 /* UART6_CTS_N */ +					0x0dc 0x0 /* UART6_RTS_N */ +					0x0e0 0x0 /* UART6_RXD */ +					0x0e4 0x0 /* UART6_TXD */ +				>; +				pinctrl-single,bias-pulldown = < +					PULL_DIS +					PULL_DOWN +					PULL_DIS +					PULL_DOWN +				>; +				pinctrl-single,bias-pullup = < +					PULL_DIS +					PULL_UP +					PULL_DIS +					PULL_UP +				>; +				pinctrl-single,drive-strength = < +					DRIVE7_02MA DRIVE6_MASK +				>; +			}; + +			uart3_cfg_func: uart3_cfg_func { +				pinctrl-single,pins = < +					0x0e8 0x0 /* UART3_CTS_N */ +					0x0ec 0x0 /* UART3_RTS_N */ +					0x0f0 0x0 /* UART3_RXD */ +					0x0f4 0x0 /* UART3_TXD */ +				>; +				pinctrl-single,bias-pulldown = < +					PULL_DIS +					PULL_DOWN +					PULL_DIS +					PULL_DOWN +				>; +				pinctrl-single,bias-pullup = < +					PULL_DIS +					PULL_UP +					PULL_DIS +					PULL_UP +				>; +				pinctrl-single,drive-strength = < +					DRIVE7_02MA DRIVE6_MASK +				>; +			}; + +			uart4_cfg_func: uart4_cfg_func { +				pinctrl-single,pins = < +					0x0f8 0x0 /* UART4_CTS_N */ +					0x0fc 0x0 /* UART4_RTS_N */ +					0x100 0x0 /* UART4_RXD */ +					0x104 0x0 /* UART4_TXD */ +				>; +				pinctrl-single,bias-pulldown = < +					PULL_DIS +					PULL_DOWN +					PULL_DIS +					PULL_DOWN +				>; +				pinctrl-single,bias-pullup = < +					PULL_DIS +					PULL_UP +					PULL_DIS +					PULL_UP +				>; +				pinctrl-single,drive-strength = < +					DRIVE7_02MA DRIVE6_MASK +				>; +			}; + +			cam1_rst_cfg_func: cam1_rst_cfg_func { +				pinctrl-single,pins = < +					0x130 0x0 /* CAM1_RST */ +				>; +				pinctrl-single,bias-pulldown = < +					PULL_DIS +					PULL_DOWN +					PULL_DIS +					PULL_DOWN +				>; +				pinctrl-single,bias-pullup = < +					PULL_DIS +					PULL_UP +					PULL_DIS +					PULL_UP +				>; +				pinctrl-single,drive-strength = < +					DRIVE7_04MA DRIVE6_MASK +				>; +			}; +		}; + +		pmx6: pinmux@ff3b6800 { +			compatible = "pinconf-single"; +			reg = <0x0 0xff3b6800 0x0 0x18>; +			#pinctrl-cells = <1>; +			pinctrl-single,register-width = <0x20>; + +			ufs_cfg_func: ufs_cfg_func { +				pinctrl-single,pins = < +					0x000 0x0 /* UFS_REF_CLK */ +					0x004 0x0 /* UFS_RST_N */ +				>; +				pinctrl-single,bias-pulldown = < +					PULL_DIS +					PULL_DOWN +					PULL_DIS +					PULL_DOWN +				>; +				pinctrl-single,bias-pullup = < +					PULL_DIS +					PULL_UP +					PULL_DIS +					PULL_UP +				>; +				pinctrl-single,drive-strength = < +					DRIVE7_08MA DRIVE6_MASK +				>; +			}; + +			spi3_cfg_func: spi3_cfg_func { +				pinctrl-single,pins = < +					0x008 0x0 /* SPI3_CLK */ +					0x0 /* SPI3_DI */ +					0x010 0x0 /* SPI3_DO */ +					0x014 0x0 /* SPI3_CS0_N */ +				>; +				pinctrl-single,bias-pulldown = < +					PULL_DIS +					PULL_DOWN +					PULL_DIS +					PULL_DOWN +				>; +				pinctrl-single,bias-pullup = < +					PULL_DIS +					PULL_UP +					PULL_DIS +					PULL_UP +				>; +				pinctrl-single,drive-strength = < +					DRIVE7_02MA DRIVE6_MASK +				>; +			}; +		}; + +		pmx7: pinmux@ff3fd800 { +			compatible = "pinconf-single"; +			reg = <0x0 0xff3fd800 0x0 0x18>; +			#pinctrl-cells = <1>; +			pinctrl-single,register-width = <0x20>; + +			sdio_clk_cfg_func: sdio_clk_cfg_func { +				pinctrl-single,pins = < +					0x000 0x0 /* SDIO_CLK */ +				>; +				pinctrl-single,bias-pulldown = < +					PULL_DIS +					PULL_DOWN +					PULL_DIS +					PULL_DOWN +				>; +				pinctrl-single,bias-pullup = < +					PULL_DIS +					PULL_UP +					PULL_DIS +					PULL_UP +				>; +				pinctrl-single,drive-strength = < +					DRIVE6_32MA DRIVE6_MASK +				>; +			}; + +			sdio_cfg_func: sdio_cfg_func { +				pinctrl-single,pins = < +					0x004 0x0 /* SDIO_CMD */ +					0x008 0x0 /* SDIO_DATA0 */ +					0x00c 0x0 /* SDIO_DATA1 */ +					0x010 0x0 /* SDIO_DATA2 */ +					0x014 0x0 /* SDIO_DATA3 */ +				>; +				pinctrl-single,bias-pulldown = < +					PULL_DIS +					PULL_DOWN +					PULL_DIS +					PULL_DOWN +				>; +				pinctrl-single,bias-pullup = < +					PULL_UP +					PULL_UP +					PULL_DIS +					PULL_UP +				>; +				pinctrl-single,drive-strength = < +					DRIVE6_19MA DRIVE6_MASK +				>; +			}; +		}; + +		pmx8: pinmux@ff37e800 { +			compatible = "pinconf-single"; +			reg = <0x0 0xff37e800 0x0 0x18>; +			#pinctrl-cells = <1>; +			pinctrl-single,register-width = <0x20>; + +			sd_clk_cfg_func: sd_clk_cfg_func { +				pinctrl-single,pins = < +					0x000 0x0 /* SD_CLK */ +				>; +				pinctrl-single,bias-pulldown = < +					PULL_DIS +					PULL_DOWN +					PULL_DIS +					PULL_DOWN +				>; +				pinctrl-single,bias-pullup = < +					PULL_DIS +					PULL_UP +					PULL_DIS +					PULL_UP +				>; +				pinctrl-single,drive-strength = < +					DRIVE6_32MA +					DRIVE6_MASK +				>; +			}; + +			sd_cfg_func: sd_cfg_func { +				pinctrl-single,pins = < +					0x004 0x0 /* SD_CMD */ +					0x008 0x0 /* SD_DATA0 */ +					0x00c 0x0 /* SD_DATA1 */ +					0x010 0x0 /* SD_DATA2 */ +					0x014 0x0 /* SD_DATA3 */ +				>; +				pinctrl-single,bias-pulldown = < +					PULL_DIS +					PULL_DOWN +					PULL_DIS +					PULL_DOWN +				>; +				pinctrl-single,bias-pullup = < +					PULL_UP +					PULL_UP +					PULL_DIS +					PULL_UP +				>; +				pinctrl-single,drive-strength = < +					DRIVE6_19MA +					DRIVE6_MASK +				>; +			}; +		}; + +		pmx9: pinmux@fff11800 { +			compatible = "pinconf-single"; +			reg = <0x0 0xfff11800 0x0 0xbc>; +			#pinctrl-cells = <1>; +			pinctrl-single,register-width = <0x20>; + +			i2c0_cfg_func: i2c0_cfg_func { +				pinctrl-single,pins = < +					0x01c 0x0 /* I2C0_SCL */ +					0x020 0x0 /* I2C0_SDA */ +				>; +				pinctrl-single,bias-pulldown = < +					PULL_DIS +					PULL_DOWN +					PULL_DIS +					PULL_DOWN +				>; +				pinctrl-single,bias-pullup = < +					PULL_UP +					PULL_UP +					PULL_DIS +					PULL_UP +				>; +				pinctrl-single,drive-strength = < +					DRIVE7_02MA DRIVE6_MASK +				>; +			}; + +			i2c1_cfg_func: i2c1_cfg_func { +				pinctrl-single,pins = < +					0x024 0x0 /* I2C1_SCL */ +					0x028 0x0 /* I2C1_SDA */ +				>; +				pinctrl-single,bias-pulldown = < +					PULL_DIS +					PULL_DOWN +					PULL_DIS +					PULL_DOWN +				>; +				pinctrl-single,bias-pullup = < +					PULL_UP +					PULL_UP +					PULL_DIS +					PULL_UP +				>; +				pinctrl-single,drive-strength = < +					DRIVE7_02MA DRIVE6_MASK +				>; +			}; + +			i2c7_cfg_func: i2c7_cfg_func { +				pinctrl-single,pins = < +					0x02c 0x0 /* I2C7_SCL */ +					0x030 0x0 /* I2C7_SDA */ +				>; +				pinctrl-single,bias-pulldown = < +					PULL_DIS +					PULL_DOWN +					PULL_DIS +					PULL_DOWN +				>; +				pinctrl-single,bias-pullup = < +					PULL_UP +					PULL_UP +					PULL_DIS +					PULL_UP +				>; +				pinctrl-single,drive-strength = < +					DRIVE7_02MA DRIVE6_MASK +				>; +			}; + +			slimbus_cfg_func: slimbus_cfg_func { +				pinctrl-single,pins = < +					0x034 0x0 /* SLIMBUS_CLK */ +					0x038 0x0 /* SLIMBUS_DATA */ +				>; +				pinctrl-single,bias-pulldown = < +					PULL_DIS +					PULL_DOWN +					PULL_DIS +					PULL_DOWN +				>; +				pinctrl-single,bias-pullup = < +					PULL_UP +					PULL_UP +					PULL_DIS +					PULL_UP +				>; +				pinctrl-single,drive-strength = < +					DRIVE7_02MA DRIVE6_MASK +				>; +			}; + +			i2s0_cfg_func: i2s0_cfg_func { +				pinctrl-single,pins = < +					0x040 0x0 /* I2S0_DI */ +					0x044 0x0 /* I2S0_DO */ +					0x048 0x0 /* I2S0_XCLK */ +					0x04c 0x0 /* I2S0_XFS */ +				>; +				pinctrl-single,bias-pulldown = < +					PULL_DIS +					PULL_DOWN +					PULL_DIS +					PULL_DOWN +				>; +				pinctrl-single,bias-pullup = < +					PULL_UP +					PULL_UP +					PULL_DIS +					PULL_UP +				>; +				pinctrl-single,drive-strength = < +					DRIVE7_02MA DRIVE6_MASK +				>; +			}; + +			i2s2_cfg_func: i2s2_cfg_func { +				pinctrl-single,pins = < +					0x050 0x0 /* I2S2_DI */ +					0x054 0x0 /* I2S2_DO */ +					0x058 0x0 /* I2S2_XCLK */ +					0x05c 0x0 /* I2S2_XFS */ +				>; +				pinctrl-single,bias-pulldown = < +					PULL_DIS +					PULL_DOWN +					PULL_DIS +					PULL_DOWN +				>; +				pinctrl-single,bias-pullup = < +					PULL_UP +					PULL_UP +					PULL_DIS +					PULL_UP +				>; +				pinctrl-single,drive-strength = < +					DRIVE7_02MA DRIVE6_MASK +				>; +			}; + +			pcie_cfg_func: pcie_cfg_func { +				pinctrl-single,pins = < +					0x094 0x0 /* PCIE_CLKREQ_N */ +					0x098 0x0 /* PCIE_WAKE_N */ +				>; +				pinctrl-single,bias-pulldown = < +					PULL_DIS +					PULL_DOWN +					PULL_DIS +					PULL_DOWN +				>; +				pinctrl-single,bias-pullup = < +					PULL_UP +					PULL_UP +					PULL_DIS +					PULL_UP +				>; +				pinctrl-single,drive-strength = < +					DRIVE7_02MA DRIVE6_MASK +				>; +			}; + +			spi2_cfg_func: spi2_cfg_func { +				pinctrl-single,pins = < +					0x09c 0x0 /* SPI2_CLK */ +					0x0a0 0x0 /* SPI2_DI */ +					0x0a4 0x0 /* SPI2_DO */ +					0x0a8 0x0 /* SPI2_CS0_N */ +				>; +				pinctrl-single,bias-pulldown = < +					PULL_DIS +					PULL_DOWN +					PULL_DIS +					PULL_DOWN +				>; +				pinctrl-single,bias-pullup = < +					PULL_UP +					PULL_UP +					PULL_DIS +					PULL_UP +				>; +				pinctrl-single,drive-strength = < +					DRIVE7_02MA DRIVE6_MASK +				>; +			}; + +			usb_cfg_func: usb_cfg_func { +				pinctrl-single,pins = < +					0x0ac 0x0 /* GPIO_219 */ +				>; +				pinctrl-single,bias-pulldown = < +					PULL_DIS +					PULL_DOWN +					PULL_DIS +					PULL_DOWN +				>; +				pinctrl-single,bias-pullup = < +					PULL_UP +					PULL_UP +					PULL_DIS +					PULL_UP +				>; +				pinctrl-single,drive-strength = < +					DRIVE7_02MA DRIVE6_MASK +				>; +			}; +		}; +	}; +}; diff --git a/arch/arm/dts/k3-am65-main.dtsi b/arch/arm/dts/k3-am65-main.dtsi index 7d037060576..0f5da9a563d 100644 --- a/arch/arm/dts/k3-am65-main.dtsi +++ b/arch/arm/dts/k3-am65-main.dtsi @@ -5,6 +5,9 @@   * Copyright (C) 2016-2018 Texas Instruments Incorporated - http://www.ti.com/   */ +#include <dt-bindings/phy/phy-am654-serdes.h> +#include <dt-bindings/phy/phy.h> +  &cbass_main {  	gic500: interrupt-controller@1800000 {  		compatible = "arm,gic-v3"; @@ -143,4 +146,109 @@  		clocks = <&k3_clks 113 1>;  		power-domains = <&k3_pds 113 TI_SCI_PD_EXCLUSIVE>;  	}; + +	scm_conf: scm_conf@100000 { +		compatible = "syscon", "simple-mfd"; +		reg = <0 0x00100000 0 0x1c000>; +		#address-cells = <1>; +		#size-cells = <1>; +		ranges = <0x0 0x0 0x00100000 0x1c000>; + +		serdes_mux: mux-controller { +			compatible = "mmio-mux"; +			#mux-control-cells = <1>; +			mux-reg-masks = <0x4080 0x3>, /* SERDES0 lane select */ +					<0x4090 0x3>; /* SERDES1 lane select */ +		}; + +		pcie0_mode: pcie-mode@4060 { +			compatible = "syscon"; +			reg = <0x00004060 0x4>; +		}; + +		pcie1_mode: pcie-mode@4070 { +			compatible = "syscon"; +			reg = <0x00004070 0x4>; +		}; + +		serdes0_clk: serdes_clk@4080 { +			compatible = "syscon"; +			reg = <0x00004080 0x4>; +		}; + +		serdes1_clk: serdes_clk@4090 { +			compatible = "syscon"; +			reg = <0x00004090 0x4>; +		}; + +		pcie_devid: pcie-devid@210 { +			compatible = "syscon"; +			reg = <0x00000210 0x4>; +		}; +	}; + +	serdes0: serdes@900000 { +		compatible = "ti,phy-am654-serdes"; +		reg = <0x0 0x900000 0x0 0x2000>; +		reg-names = "serdes"; +		#phy-cells = <2>; +		power-domains = <&k3_pds 153 TI_SCI_PD_EXCLUSIVE>; +		clocks = <&k3_clks 153 4>, <&k3_clks 153 1>, <&serdes1 AM654_SERDES_LO_REFCLK>; +		clock-output-names = "serdes0_cmu_refclk", "serdes0_lo_refclk", "serdes0_ro_refclk"; +		assigned-clocks = <&k3_clks 153 4>, <&serdes0 AM654_SERDES_CMU_REFCLK>; +		assigned-clock-parents = <&k3_clks 153 8>, <&k3_clks 153 4>; +		ti,serdes-clk = <&serdes0_clk>; +		mux-controls = <&serdes_mux 0>; +		#clock-cells = <1>; +	}; + +	serdes1: serdes@910000 { +		compatible = "ti,phy-am654-serdes"; +		reg = <0x0 0x910000 0x0 0x2000>; +		reg-names = "serdes"; +		#phy-cells = <2>; +		power-domains = <&k3_pds 154 TI_SCI_PD_EXCLUSIVE>; +		clocks = <&serdes0 AM654_SERDES_RO_REFCLK>, <&k3_clks 154 1>, <&k3_clks 154 5>; +		clock-output-names = "serdes1_cmu_refclk", "serdes1_lo_refclk", "serdes1_ro_refclk"; +		assigned-clocks = <&k3_clks 154 5>, <&serdes1 AM654_SERDES_CMU_REFCLK>; +		assigned-clock-parents = <&k3_clks 154 9>, <&k3_clks 154 5>; +		ti,serdes-clk = <&serdes1_clk>; +		mux-controls = <&serdes_mux 1>; +		#clock-cells = <1>; +	}; + +	pcie0_rc: pcie@5500000 { +		compatible = "ti,am654-pcie-rc"; +		reg =  <0x0 0x5500000 0x0 0x1000>, <0x0 0x5501000 0x0 0x1000>, <0x0 0x10000000 0x0 0x2000>, <0x0 0x5506000 0x0 0x1000>; +		reg-names = "app", "dbics", "config", "atu"; +		power-domains = <&k3_pds 120 TI_SCI_PD_EXCLUSIVE>; +		#address-cells = <3>; +		#size-cells = <2>; +		ranges = <0x81000000 0 0          0x0   0x10020000 0 0x00010000 +			  0x82000000 0 0x10030000 0x0   0x10030000 0 0x07FD0000>; +		ti,syscon-pcie-id = <&pcie_devid>; +		ti,syscon-pcie-mode = <&pcie0_mode>; +		bus-range = <0x0 0xff>; +		status = "disabled"; +		device_type = "pci"; +		num-lanes = <1>; +		num-ob-windows = <16>; +		num-viewport = <16>; +		max-link-speed = <3>; +		interrupts = <GIC_SPI 340 IRQ_TYPE_EDGE_RISING>; +		#interrupt-cells = <1>; +		interrupt-map-mask = <0 0 0 7>; +		interrupt-map = <0 0 0 1 &pcie0_intc 0>, /* INT A */ +				<0 0 0 2 &pcie0_intc 0>, /* INT B */ +				<0 0 0 3 &pcie0_intc 0>, /* INT C */ +				<0 0 0 4 &pcie0_intc 0>; /* INT D */ +		msi-map = <0x0 &gic_its 0x0 0x10000>; + +		pcie0_intc: legacy-interrupt-controller@1 { +			interrupt-controller; +			#interrupt-cells = <1>; +			interrupt-parent = <&gic500>; +			interrupts = <GIC_SPI 328 IRQ_TYPE_EDGE_RISING>; +		}; +	};  }; diff --git a/arch/arm/dts/k3-am65.dtsi b/arch/arm/dts/k3-am65.dtsi index a3abd146d10..a1467a4dd4d 100644 --- a/arch/arm/dts/k3-am65.dtsi +++ b/arch/arm/dts/k3-am65.dtsi @@ -69,6 +69,7 @@  			 <0x00 0x00900000 0x00 0x00900000 0x00 0x00012000>, /* serdes */  			 <0x00 0x01000000 0x00 0x01000000 0x00 0x0af02400>, /* Most peripherals */  			 <0x00 0x30800000 0x00 0x30800000 0x00 0x0bc00000>, /* MAIN NAVSS */ +			 <0x00 0x10000000 0x00 0x10000000 0x00 0x10000000>, /* PCIe DAT */  			 /* MCUSS Range */  			 <0x00 0x28380000 0x00 0x28380000 0x00 0x03880000>,  			 <0x00 0x40200000 0x00 0x40200000 0x00 0x00900100>, diff --git a/arch/arm/dts/meson-g12a-sei510.dts b/arch/arm/dts/meson-g12a-sei510.dts new file mode 100644 index 00000000000..c7a87368850 --- /dev/null +++ b/arch/arm/dts/meson-g12a-sei510.dts @@ -0,0 +1,502 @@ +// SPDX-License-Identifier: (GPL-2.0+ OR MIT) +/* + * Copyright (c) 2019 BayLibre SAS. All rights reserved. + */ + +/dts-v1/; + +#include "meson-g12a.dtsi" +#include <dt-bindings/gpio/gpio.h> +#include <dt-bindings/input/input.h> +#include <dt-bindings/gpio/meson-g12a-gpio.h> +#include <dt-bindings/sound/meson-g12a-tohdmitx.h> + +/ { +	compatible = "seirobotics,sei510", "amlogic,g12a"; +	model = "SEI Robotics SEI510"; + +	adc_keys { +		compatible = "adc-keys"; +		io-channels = <&saradc 0>; +		io-channel-names = "buttons"; +		keyup-threshold-microvolt = <1800000>; + +		button-onoff { +			label = "On/Off"; +			linux,code = <KEY_POWER>; +			press-threshold-microvolt = <1700000>; +		}; +	}; + +	aliases { +		serial0 = &uart_AO; +		ethernet0 = ðmac; +	}; + +	mono_dac: audio-codec-0 { +		compatible = "maxim,max98357a"; +		#sound-dai-cells = <0>; +		sound-name-prefix = "U16"; +		sdmode-gpios = <&gpio GPIOX_8 GPIO_ACTIVE_HIGH>; +	}; + +	dmics: audio-codec-1 { +		#sound-dai-cells = <0>; +		compatible = "dmic-codec"; +		num-channels = <2>; +		wakeup-delay-ms = <50>; +		status = "okay"; +		sound-name-prefix = "MIC"; +	}; + +	chosen { +		stdout-path = "serial0:115200n8"; +	}; + +	cvbs-connector { +		compatible = "composite-video-connector"; + +		port { +			cvbs_connector_in: endpoint { +				remote-endpoint = <&cvbs_vdac_out>; +			}; +		}; +	}; + +	emmc_pwrseq: emmc-pwrseq { +		compatible = "mmc-pwrseq-emmc"; +		reset-gpios = <&gpio BOOT_12 GPIO_ACTIVE_LOW>; +	}; + +	hdmi-connector { +		compatible = "hdmi-connector"; +		type = "a"; + +		port { +			hdmi_connector_in: endpoint { +				remote-endpoint = <&hdmi_tx_tmds_out>; +			}; +		}; +	}; + +	memory@0 { +		device_type = "memory"; +		reg = <0x0 0x0 0x0 0x40000000>; +	}; + +	ao_5v: regulator-ao_5v { +		compatible = "regulator-fixed"; +		regulator-name = "AO_5V"; +		regulator-min-microvolt = <5000000>; +		regulator-max-microvolt = <5000000>; +		vin-supply = <&dc_in>; +		regulator-always-on; +	}; + +	dc_in: regulator-dc_in { +		compatible = "regulator-fixed"; +		regulator-name = "DC_IN"; +		regulator-min-microvolt = <5000000>; +		regulator-max-microvolt = <5000000>; +		regulator-always-on; +	}; + +	emmc_1v8: regulator-emmc_1v8 { +		compatible = "regulator-fixed"; +		regulator-name = "EMMC_1V8"; +		regulator-min-microvolt = <1800000>; +		regulator-max-microvolt = <1800000>; +		vin-supply = <&vddao_3v3>; +		regulator-always-on; +	}; + +	vddao_3v3: regulator-vddao_3v3 { +		compatible = "regulator-fixed"; +		regulator-name = "VDDAO_3V3"; +		regulator-min-microvolt = <3300000>; +		regulator-max-microvolt = <3300000>; +		vin-supply = <&dc_in>; +		regulator-always-on; +	}; + +	vddao_3v3_t: regultor-vddao_3v3_t { +		compatible = "regulator-fixed"; +		regulator-name = "VDDAO_3V3_T"; +		regulator-min-microvolt = <3300000>; +		regulator-max-microvolt = <3300000>; +		vin-supply = <&vddao_3v3>; +		gpio = <&gpio GPIOH_8 GPIO_OPEN_DRAIN>; +		enable-active-high; +	}; + +	vddio_ao1v8: regulator-vddio_ao1v8 { +		compatible = "regulator-fixed"; +		regulator-name = "VDDIO_AO1V8"; +		regulator-min-microvolt = <1800000>; +		regulator-max-microvolt = <1800000>; +		vin-supply = <&vddao_3v3>; +		regulator-always-on; +	}; + +	reserved-memory { +		/* TEE Reserved Memory */ +		bl32_reserved: bl32@5000000 { +			reg = <0x0 0x05300000 0x0 0x2000000>; +			no-map; +		}; +	}; + +	sdio_pwrseq: sdio-pwrseq { +		compatible = "mmc-pwrseq-simple"; +		reset-gpios = <&gpio GPIOX_6 GPIO_ACTIVE_LOW>; +		clocks = <&wifi32k>; +		clock-names = "ext_clock"; +	}; + +	wifi32k: wifi32k { +		compatible = "pwm-clock"; +		#clock-cells = <0>; +		clock-frequency = <32768>; +		pwms = <&pwm_ef 0 30518 0>; /* PWM_E at 32.768KHz */ +	}; + +	sound { +		compatible = "amlogic,axg-sound-card"; +		model = "G12A-SEI510"; +		audio-aux-devs = <&tdmout_a>, <&tdmout_b>, +				 <&tdmin_a>, <&tdmin_b>; +		audio-routing = "TDMOUT_A IN 0", "FRDDR_A OUT 0", +				"TDMOUT_A IN 1", "FRDDR_B OUT 0", +				"TDMOUT_A IN 2", "FRDDR_C OUT 0", +				"TDM_A Playback", "TDMOUT_A OUT", +				"TDMOUT_B IN 0", "FRDDR_A OUT 1", +				"TDMOUT_B IN 1", "FRDDR_B OUT 1", +				"TDMOUT_B IN 2", "FRDDR_C OUT 1", +				"TDM_B Playback", "TDMOUT_B OUT", +				"TODDR_A IN 4", "PDM Capture", +				"TODDR_B IN 4", "PDM Capture", +				"TODDR_C IN 4", "PDM Capture", +				"TDMIN_A IN 0", "TDM_A Capture", +				"TDMIN_A IN 3", "TDM_A Loopback", +				"TDMIN_B IN 0", "TDM_A Capture", +				"TDMIN_B IN 3", "TDM_A Loopback", +				"TDMIN_A IN 1", "TDM_B Capture", +				"TDMIN_A IN 4", "TDM_B Loopback", +				"TDMIN_B IN 1", "TDM_B Capture", +				"TDMIN_B IN 4", "TDM_B Loopback", +				"TODDR_A IN 0", "TDMIN_A OUT", +				"TODDR_B IN 0", "TDMIN_A OUT", +				"TODDR_C IN 0", "TDMIN_A OUT", +				"TODDR_A IN 1", "TDMIN_B OUT", +				"TODDR_B IN 1", "TDMIN_B OUT", +				"TODDR_C IN 1", "TDMIN_B OUT"; + +		assigned-clocks = <&clkc CLKID_MPLL2>, +				  <&clkc CLKID_MPLL0>, +				  <&clkc CLKID_MPLL1>; +		assigned-clock-parents = <0>, <0>, <0>; +		assigned-clock-rates = <294912000>, +				       <270950400>, +				       <393216000>; +		status = "okay"; + +		dai-link-0 { +			sound-dai = <&frddr_a>; +		}; + +		dai-link-1 { +			sound-dai = <&frddr_b>; +		}; + +		dai-link-2 { +			sound-dai = <&frddr_c>; +		}; + +		dai-link-3 { +			sound-dai = <&toddr_a>; +		}; + +		dai-link-4 { +			sound-dai = <&toddr_b>; +		}; + +		dai-link-5 { +			sound-dai = <&toddr_c>; +		}; + +		/* internal speaker interface */ +		dai-link-6 { +			sound-dai = <&tdmif_a>; +			dai-format = "i2s"; +			dai-tdm-slot-tx-mask-0 = <1 1>; +			mclk-fs = <256>; + +			codec-0 { +				sound-dai = <&mono_dac>; +			}; + +			codec-1 { +				sound-dai = <&tohdmitx TOHDMITX_I2S_IN_A>; +			}; +		}; + +		/* 8ch hdmi interface */ +		dai-link-7 { +			sound-dai = <&tdmif_b>; +			dai-format = "i2s"; +			dai-tdm-slot-tx-mask-0 = <1 1>; +			dai-tdm-slot-tx-mask-1 = <1 1>; +			dai-tdm-slot-tx-mask-2 = <1 1>; +			dai-tdm-slot-tx-mask-3 = <1 1>; +			mclk-fs = <256>; + +			codec@0 { +				sound-dai = <&tohdmitx TOHDMITX_I2S_IN_B>; +			}; +		}; + +		/* internal digital mics */ +		dai-link-8 { +			sound-dai = <&pdm>; + +			codec { +				sound-dai = <&dmics>; +			}; +		}; + +		/* hdmi glue */ +		dai-link-9 { +			sound-dai = <&tohdmitx TOHDMITX_I2S_OUT>; + +			codec { +				sound-dai = <&hdmi_tx>; +			}; +		}; +	}; +}; + +&arb { +	status = "okay"; +}; + +&cec_AO { +	pinctrl-0 = <&cec_ao_a_h_pins>; +	pinctrl-names = "default"; +	status = "disabled"; +	hdmi-phandle = <&hdmi_tx>; +}; + +&cecb_AO { +	pinctrl-0 = <&cec_ao_b_h_pins>; +	pinctrl-names = "default"; +	status = "okay"; +	hdmi-phandle = <&hdmi_tx>; +}; + +&clkc_audio { +	status = "okay"; +}; + +&cvbs_vdac_port { +	cvbs_vdac_out: endpoint { +		remote-endpoint = <&cvbs_connector_in>; +	}; +}; + +ðmac { +	status = "okay"; +	phy-handle = <&internal_ephy>; +	phy-mode = "rmii"; +}; + +&frddr_a { +	status = "okay"; +}; + +&frddr_b { +	status = "okay"; +}; + +&frddr_c { +	status = "okay"; +}; + +&hdmi_tx { +	status = "okay"; +	pinctrl-0 = <&hdmitx_hpd_pins>, <&hdmitx_ddc_pins>; +	pinctrl-names = "default"; +}; + +&hdmi_tx_tmds_port { +	hdmi_tx_tmds_out: endpoint { +		remote-endpoint = <&hdmi_connector_in>; +	}; +}; + +&i2c3 { +	status = "okay"; +	pinctrl-0 = <&i2c3_sda_a_pins>, <&i2c3_sck_a_pins>; +	pinctrl-names = "default"; +}; + +&pwm_ef { +	status = "okay"; +	pinctrl-0 = <&pwm_e_pins>; +	pinctrl-names = "default"; +	clocks = <&xtal>; +	clock-names = "clkin0"; +}; + +&pdm { +	pinctrl-0 = <&pdm_din0_z_pins>, <&pdm_din1_z_pins>, +		    <&pdm_din2_z_pins>, <&pdm_din3_z_pins>, +		    <&pdm_dclk_z_pins>; +	pinctrl-names = "default"; +	status = "okay"; +}; + +&saradc { +	status = "okay"; +	vref-supply = <&vddio_ao1v8>; +}; + +/* SDIO */ +&sd_emmc_a { +	status = "okay"; +	pinctrl-0 = <&sdio_pins>; +	pinctrl-1 = <&sdio_clk_gate_pins>; +	pinctrl-names = "default", "clk-gate"; +	#address-cells = <1>; +	#size-cells = <0>; + +	bus-width = <4>; +	cap-sd-highspeed; +	sd-uhs-sdr50; +	max-frequency = <100000000>; + +	non-removable; +	disable-wp; + +	mmc-pwrseq = <&sdio_pwrseq>; + +	vmmc-supply = <&vddao_3v3>; +	vqmmc-supply = <&vddio_ao1v8>; + +	brcmf: wifi@1 { +		reg = <1>; +		compatible = "brcm,bcm4329-fmac"; +	}; +}; + +/* SD card */ +&sd_emmc_b { +	status = "okay"; +	pinctrl-0 = <&sdcard_c_pins>; +	pinctrl-1 = <&sdcard_clk_gate_c_pins>; +	pinctrl-names = "default", "clk-gate"; + +	bus-width = <4>; +	cap-sd-highspeed; +	max-frequency = <50000000>; +	disable-wp; + +	cd-gpios = <&gpio GPIOC_6 GPIO_ACTIVE_LOW>; +	vmmc-supply = <&vddao_3v3>; +	vqmmc-supply = <&vddao_3v3>; +}; + +/* eMMC */ +&sd_emmc_c { +	status = "okay"; +	pinctrl-0 = <&emmc_pins>, <&emmc_ds_pins>; +	pinctrl-1 = <&emmc_clk_gate_pins>; +	pinctrl-names = "default", "clk-gate"; + +	bus-width = <8>; +	cap-mmc-highspeed; +	mmc-ddr-1_8v; +	mmc-hs200-1_8v; +	max-frequency = <200000000>; +	non-removable; +	disable-wp; + +	mmc-pwrseq = <&emmc_pwrseq>; +	vmmc-supply = <&vddao_3v3>; +	vqmmc-supply = <&emmc_1v8>; +}; + +&tdmif_a { +	pinctrl-0 = <&tdm_a_dout0_pins>, <&tdm_a_fs_pins>, <&tdm_a_sclk_pins>; +	pinctrl-names = "default"; +	status = "okay"; + +	assigned-clocks = <&clkc_audio AUD_CLKID_TDM_SCLK_PAD0>, +			  <&clkc_audio AUD_CLKID_TDM_LRCLK_PAD0>; +	assigned-clock-parents = <&clkc_audio AUD_CLKID_MST_A_SCLK>, +				 <&clkc_audio AUD_CLKID_MST_A_LRCLK>; +	assigned-clock-rates = <0>, <0>; +}; + +&tdmif_b { +	status = "okay"; +}; + +&tdmin_a { +	status = "okay"; +}; + +&tdmin_b { +	status = "okay"; +}; + +&tdmout_a { +	status = "okay"; +}; + +&tdmout_b { +	status = "okay"; +}; + +&toddr_a { +	status = "okay"; +}; + +&toddr_b { +	status = "okay"; +}; + +&toddr_c { +	status = "okay"; +}; + +&tohdmitx { +	status = "okay"; +}; + +&uart_A { +	status = "okay"; +	pinctrl-0 = <&uart_a_pins>, <&uart_a_cts_rts_pins>; +	pinctrl-names = "default"; +	uart-has-rtscts; + +	bluetooth { +		compatible = "brcm,bcm43438-bt"; +		shutdown-gpios = <&gpio GPIOX_17 GPIO_ACTIVE_HIGH>; +		max-speed = <2000000>; +		clocks = <&wifi32k>; +		clock-names = "lpo"; +		vbat-supply = <&vddao_3v3>; +		vddio-supply = <&vddio_ao1v8>; +	}; +}; + +&uart_AO { +	status = "okay"; +	pinctrl-0 = <&uart_ao_a_pins>; +	pinctrl-names = "default"; +}; + +&usb { +	status = "okay"; +	dr_mode = "host"; +}; diff --git a/arch/arm/include/asm/arch-hi3660/hi3660.h b/arch/arm/include/asm/arch-hi3660/hi3660.h new file mode 100644 index 00000000000..3ca0951543b --- /dev/null +++ b/arch/arm/include/asm/arch-hi3660/hi3660.h @@ -0,0 +1,52 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* + * (C) Copyright 2019 Linaro + * Author: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org> + */ + +#ifndef __HI3660_H__ +#define __HI3660_H__ + +#define HI3660_UART6_BASE			0xfff32000 + +#define PMU_REG_BASE                            0xfff34000 +#define PMIC_HARDWARE_CTRL0                     (PMU_REG_BASE + (0x0C5 << 2)) + +#define SCTRL_REG_BASE                          0xfff0a000 +#define SCTRL_SCFPLLCTRL0                       (SCTRL_REG_BASE + 0x120) +#define SCTRL_SCFPLLCTRL0_FPLL0_EN              BIT(0) + +#define CRG_REG_BASE                            0xfff35000 +#define CRG_PEREN2                              (CRG_REG_BASE + 0x020) +#define CRG_PERDIS2                             (CRG_REG_BASE + 0x024) +#define CRG_PERCLKEN2                           (CRG_REG_BASE + 0x028) +#define CRG_PERSTAT2                            (CRG_REG_BASE + 0x02C) +#define CRG_PEREN4                              (CRG_REG_BASE + 0x040) +#define CRG_PERDIS4                             (CRG_REG_BASE + 0x044) +#define CRG_PERCLKEN4                           (CRG_REG_BASE + 0x048) +#define CRG_PERSTAT4                            (CRG_REG_BASE + 0x04C) +#define CRG_PERRSTEN2                           (CRG_REG_BASE + 0x078) +#define CRG_PERRSTDIS2                          (CRG_REG_BASE + 0x07C) +#define CRG_PERRSTSTAT2                         (CRG_REG_BASE + 0x080) +#define CRG_PERRSTEN3                           (CRG_REG_BASE + 0x084) +#define CRG_PERRSTDIS3                          (CRG_REG_BASE + 0x088) +#define CRG_PERRSTSTAT3                         (CRG_REG_BASE + 0x08C) +#define CRG_PERRSTEN4                           (CRG_REG_BASE + 0x090) +#define CRG_PERRSTDIS4                          (CRG_REG_BASE + 0x094) +#define CRG_PERRSTSTAT4                         (CRG_REG_BASE + 0x098) +#define CRG_ISOEN                               (CRG_REG_BASE + 0x144) +#define CRG_ISODIS                              (CRG_REG_BASE + 0x148) +#define CRG_ISOSTAT                             (CRG_REG_BASE + 0x14C) + +#define PINMUX4_BASE				0xfff11000 +#define PINMUX4_SDDET				(PINMUX4_BASE + 0x60) + +#define PINCONF3_BASE				0xff37e800 +#define PINCONF3_SDCLK				(PINCONF3_BASE + 0x00) +#define PINCONF3_SDCMD				(PINCONF3_BASE + 0x04) +#define PINCONF3_SDDATA0			(PINCONF3_BASE + 0x08) +#define PINCONF3_SDDATA1			(PINCONF3_BASE + 0x0c) +#define PINCONF3_SDDATA2			(PINCONF3_BASE + 0x10) +#define PINCONF3_SDDATA3			(PINCONF3_BASE + 0x14) + +#endif /*__HI3660_H__*/ diff --git a/arch/arm/include/asm/arch-meson/sm.h b/arch/arm/include/asm/arch-meson/sm.h index 60d04ae2283..f3ae46a6d6b 100644 --- a/arch/arm/include/asm/arch-meson/sm.h +++ b/arch/arm/include/asm/arch-meson/sm.h @@ -12,4 +12,22 @@ ssize_t meson_sm_read_efuse(uintptr_t offset, void *buffer, size_t size);  int meson_sm_get_serial(void *buffer, size_t size); +enum { +	REBOOT_REASON_COLD = 0, +	REBOOT_REASON_NORMAL = 1, +	REBOOT_REASON_RECOVERY = 2, +	REBOOT_REASON_UPDATE = 3, +	REBOOT_REASON_FASTBOOT = 4, +	REBOOT_REASON_SUSPEND_OFF = 5, +	REBOOT_REASON_HIBERNATE = 6, +	REBOOT_REASON_BOOTLOADER = 7, +	REBOOT_REASON_SHUTDOWN_REBOOT = 8, +	REBOOT_REASON_RPMBP = 9, +	REBOOT_REASON_CRASH_DUMP = 11, +	REBOOT_REASON_KERNEL_PANIC = 12, +	REBOOT_REASON_WATCHDOG_REBOOT = 13, +}; + +int meson_sm_get_reboot_reason(void); +  #endif /* __MESON_SM_H__ */ diff --git a/arch/arm/include/asm/ti-common/omap_wdt.h b/arch/arm/include/asm/ti-common/omap_wdt.h index 7d72e3af02b..fbc421b6305 100644 --- a/arch/arm/include/asm/ti-common/omap_wdt.h +++ b/arch/arm/include/asm/ti-common/omap_wdt.h @@ -56,4 +56,9 @@ struct wd_timer {  	unsigned int wdt_unfr;	/* offset 0x100 */  }; +struct omap3_wdt_priv { +	struct wd_timer *regs; +	unsigned int wdt_trgr_pattern; +}; +  #endif /* __OMAP_WDT_H__ */ diff --git a/arch/arm/lib/bootm.c b/arch/arm/lib/bootm.c index bf68a5ba622..1638f1e81d7 100644 --- a/arch/arm/lib/bootm.c +++ b/arch/arm/lib/bootm.c @@ -15,6 +15,7 @@  #include <command.h>  #include <dm.h>  #include <dm/root.h> +#include <env.h>  #include <image.h>  #include <u-boot/zlib.h>  #include <asm/byteorder.h> diff --git a/arch/arm/mach-davinci/misc.c b/arch/arm/mach-davinci/misc.c index df500c8f35b..80e964274e1 100644 --- a/arch/arm/mach-davinci/misc.c +++ b/arch/arm/mach-davinci/misc.c @@ -9,7 +9,7 @@   */  #include <common.h> -#include <environment.h> +#include <env.h>  #include <i2c.h>  #include <net.h>  #include <asm/arch/hardware.h> diff --git a/arch/arm/mach-imx/cmd_dek.c b/arch/arm/mach-imx/cmd_dek.c index 463b869420b..1b111ba26b1 100644 --- a/arch/arm/mach-imx/cmd_dek.c +++ b/arch/arm/mach-imx/cmd_dek.c @@ -7,7 +7,6 @@  #include <common.h>  #include <command.h> -#include <environment.h>  #include <malloc.h>  #include <asm/byteorder.h>  #include <linux/compiler.h> diff --git a/arch/arm/mach-imx/mx6/opos6ul.c b/arch/arm/mach-imx/mx6/opos6ul.c index 264fa8a48e3..3ab9a3f022f 100644 --- a/arch/arm/mach-imx/mx6/opos6ul.c +++ b/arch/arm/mach-imx/mx6/opos6ul.c @@ -13,7 +13,7 @@  #include <asm/mach-imx/iomux-v3.h>  #include <asm/io.h>  #include <common.h> -#include <environment.h> +#include <env.h>  DECLARE_GLOBAL_DATA_PTR; @@ -127,7 +127,7 @@ int board_late_init(void)  	/* In bootstrap don't use the env vars */  	if (((reg & 0x3000000) >> 24) == 0x1) { -		set_default_env(NULL, 0); +		env_set_default(NULL, 0);  		env_set("preboot", "");  	} diff --git a/arch/arm/mach-imx/mx7/soc.c b/arch/arm/mach-imx/mx7/soc.c index 1b4bbc50373..3b8e1ba9c3a 100644 --- a/arch/arm/mach-imx/mx7/soc.c +++ b/arch/arm/mach-imx/mx7/soc.c @@ -14,6 +14,7 @@  #include <asm/arch/imx-rdc.h>  #include <asm/arch/crm_regs.h>  #include <dm.h> +#include <env.h>  #include <imx_thermal.h>  #include <fsl_sec.h>  #include <asm/setup.h> diff --git a/arch/arm/mach-imx/video.c b/arch/arm/mach-imx/video.c index 22a371a212d..1bc9b7cc7e1 100644 --- a/arch/arm/mach-imx/video.c +++ b/arch/arm/mach-imx/video.c @@ -1,6 +1,7 @@  // SPDX-License-Identifier: GPL-2.0+  #include <common.h> +#include <env.h>  #include <linux/errno.h>  #include <asm/mach-imx/video.h> diff --git a/arch/arm/mach-k3/sysfw-loader.c b/arch/arm/mach-k3/sysfw-loader.c index 2ede82004ab..7a482bdc8a3 100644 --- a/arch/arm/mach-k3/sysfw-loader.c +++ b/arch/arm/mach-k3/sysfw-loader.c @@ -251,10 +251,21 @@ void k3_sysfw_loader(void (*config_pm_done_callback)(void))  	if (config_pm_done_callback)  		config_pm_done_callback(); -	/* Output System Firmware version info */ -	printf("SYSFW ABI: %d.%d (firmware rev 0x%04x '%.*s')\n", +	/* +	 * Output System Firmware version info. Note that since the +	 * 'firmware_description' field is not guaranteed to be zero- +	 * terminated we manually add a \0 terminator if needed. Further +	 * note that we intentionally no longer rely on the extended +	 * printf() formatter '%.*s' to not having to require a more +	 * full-featured printf() implementation. +	 */ +	char fw_desc[sizeof(ti_sci->version.firmware_description) + 1]; + +	strncpy(fw_desc, ti_sci->version.firmware_description, +		sizeof(ti_sci->version.firmware_description)); +	fw_desc[sizeof(fw_desc) - 1] = '\0'; + +	printf("SYSFW ABI: %d.%d (firmware rev 0x%04x '%s')\n",  	       ti_sci->version.abi_major, ti_sci->version.abi_minor, -	       ti_sci->version.firmware_revision, -	       sizeof(ti_sci->version.firmware_description), -	       ti_sci->version.firmware_description); +	       ti_sci->version.firmware_revision, fw_desc);  } diff --git a/arch/arm/mach-kirkwood/cpu.c b/arch/arm/mach-kirkwood/cpu.c index 8f8e3003854..6ad25434386 100644 --- a/arch/arm/mach-kirkwood/cpu.c +++ b/arch/arm/mach-kirkwood/cpu.c @@ -6,6 +6,7 @@   */  #include <common.h> +#include <env.h>  #include <netdev.h>  #include <asm/cache.h>  #include <asm/io.h> diff --git a/arch/arm/mach-meson/board-common.c b/arch/arm/mach-meson/board-common.c index 18383f774ee..d261b4ea331 100644 --- a/arch/arm/mach-meson/board-common.c +++ b/arch/arm/mach-meson/board-common.c @@ -5,15 +5,20 @@  #include <common.h>  #include <asm/arch/boot.h> +#include <env.h>  #include <linux/libfdt.h>  #include <linux/err.h> -#include <environment.h>  #include <asm/arch/mem.h>  #include <asm/arch/sm.h>  #include <asm/armv8/mmu.h>  #include <asm/unaligned.h>  #include <efi_loader.h> +#if CONFIG_IS_ENABLED(FASTBOOT) +#include <asm/psci.h> +#include <fastboot.h> +#endif +  DECLARE_GLOBAL_DATA_PTR;  __weak int board_init(void) @@ -142,7 +147,35 @@ int board_late_init(void)  	return meson_board_late_init();  } +#if CONFIG_IS_ENABLED(FASTBOOT) +static unsigned int reboot_reason = REBOOT_REASON_NORMAL; + +int fastboot_set_reboot_flag() +{ +	reboot_reason = REBOOT_REASON_BOOTLOADER; + +	printf("Using reboot reason: 0x%x\n", reboot_reason); + +	return 0; +} + +void reset_cpu(ulong addr) +{ +	struct pt_regs regs; + +	regs.regs[0] = ARM_PSCI_0_2_FN_SYSTEM_RESET; +	regs.regs[1] = reboot_reason; + +	printf("Rebooting with reason: 0x%lx\n", regs.regs[1]); + +	smc_call(®s); + +	while (1) +		; +} +#else  void reset_cpu(ulong addr)  {  	psci_system_reset();  } +#endif diff --git a/arch/arm/mach-meson/sm.c b/arch/arm/mach-meson/sm.c index 05b7f0bdf2c..fabcb3bfd74 100644 --- a/arch/arm/mach-meson/sm.c +++ b/arch/arm/mach-meson/sm.c @@ -8,6 +8,10 @@  #include <common.h>  #include <asm/arch/sm.h>  #include <linux/kernel.h> +#include <dm.h> +#include <linux/bitfield.h> +#include <regmap.h> +#include <syscon.h>  #define FN_GET_SHARE_MEM_INPUT_BASE	0x82000020  #define FN_GET_SHARE_MEM_OUTPUT_BASE	0x82000021 @@ -77,3 +81,132 @@ int meson_sm_get_serial(void *buffer, size_t size)  	return 0;  } + +#define AO_SEC_SD_CFG15		0xfc +#define REBOOT_REASON_MASK	GENMASK(15, 12) + +int meson_sm_get_reboot_reason(void) +{ +	struct regmap *regmap; +	int nodeoffset; +	ofnode node; +	unsigned int reason; + +	/* find the offset of compatible node */ +	nodeoffset = fdt_node_offset_by_compatible(gd->fdt_blob, -1, +						   "amlogic,meson-gx-ao-secure"); +	if (nodeoffset < 0) { +		printf("%s: failed to get amlogic,meson-gx-ao-secure\n", +		       __func__); +		return -ENODEV; +	} + +	/* get regmap from the syscon node */ +	node = offset_to_ofnode(nodeoffset); +	regmap = syscon_node_to_regmap(node); +	if (IS_ERR(regmap)) { +		printf("%s: failed to get regmap\n", __func__); +		return -EINVAL; +	} + +	regmap_read(regmap, AO_SEC_SD_CFG15, &reason); + +	/* The SMC call is not used, we directly use AO_SEC_SD_CFG15 */ +	return FIELD_GET(REBOOT_REASON_MASK, reason); +} + +static int do_sm_serial(cmd_tbl_t *cmdtp, int flag, int argc, +			char *const argv[]) +{ +	ulong address; +	int ret; + +	if (argc < 2) +		return CMD_RET_USAGE; + +	address = simple_strtoul(argv[1], NULL, 0); + +	ret = meson_sm_get_serial((void *)address, SM_CHIP_ID_SIZE); +	if (ret) +		return CMD_RET_FAILURE; + +	return CMD_RET_SUCCESS; +} + +#define MAX_REBOOT_REASONS 14 + +static const char *reboot_reasons[MAX_REBOOT_REASONS] = { +	[REBOOT_REASON_COLD] = "cold_boot", +	[REBOOT_REASON_NORMAL] = "normal", +	[REBOOT_REASON_RECOVERY] = "recovery", +	[REBOOT_REASON_UPDATE] = "update", +	[REBOOT_REASON_FASTBOOT] = "fastboot", +	[REBOOT_REASON_SUSPEND_OFF] = "suspend_off", +	[REBOOT_REASON_HIBERNATE] = "hibernate", +	[REBOOT_REASON_BOOTLOADER] = "bootloader", +	[REBOOT_REASON_SHUTDOWN_REBOOT] = "shutdown_reboot", +	[REBOOT_REASON_RPMBP] = "rpmbp", +	[REBOOT_REASON_CRASH_DUMP] = "crash_dump", +	[REBOOT_REASON_KERNEL_PANIC] = "kernel_panic", +	[REBOOT_REASON_WATCHDOG_REBOOT] = "watchdog_reboot", +}; + +static int do_sm_reboot_reason(cmd_tbl_t *cmdtp, int flag, int argc, +			char *const argv[]) +{ +	const char *reason_str; +	char *destarg = NULL; +	int reason; + +	if (argc > 1) +		destarg = argv[1]; + +	reason = meson_sm_get_reboot_reason(); +	if (reason < 0) +		return CMD_RET_FAILURE; + +	if (reason >= MAX_REBOOT_REASONS || +	    !reboot_reasons[reason]) +		reason_str = "unknown"; +	else +		reason_str = reboot_reasons[reason]; + +	if (destarg) +		env_set(destarg, reason_str); +	else +		printf("reboot reason: %s (%x)\n", reason_str, reason); + +	return CMD_RET_SUCCESS; +} + +static cmd_tbl_t cmd_sm_sub[] = { +	U_BOOT_CMD_MKENT(serial, 2, 1, do_sm_serial, "", ""), +	U_BOOT_CMD_MKENT(reboot_reason, 1, 1, do_sm_reboot_reason, "", ""), +}; + +static int do_sm(cmd_tbl_t *cmdtp, int flag, int argc, +		 char *const argv[]) +{ +	cmd_tbl_t *c; + +	if (argc < 2) +		return CMD_RET_USAGE; + +	/* Strip off leading 'sm' command argument */ +	argc--; +	argv++; + +	c = find_cmd_tbl(argv[0], &cmd_sm_sub[0], ARRAY_SIZE(cmd_sm_sub)); + +	if (c) +		return c->cmd(cmdtp, flag, argc, argv); +	else +		return CMD_RET_USAGE; +} + +U_BOOT_CMD( +	sm, 5, 0, do_sm, +	"Secure Monitor Control", +	"serial <address> - read chip unique id to memory address\n" +	"sm reboot_reason [name] - get reboot reason and store to to environment" +); diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig index efe89eed0bd..ed8056e8718 100644 --- a/arch/arm/mach-omap2/Kconfig +++ b/arch/arm/mach-omap2/Kconfig @@ -176,6 +176,7 @@ source "arch/arm/mach-omap2/omap5/Kconfig"  source "arch/arm/mach-omap2/am33xx/Kconfig"  source "board/BuR/brxre1/Kconfig" +source "board/BuR/brsmarc1/Kconfig"  source "board/BuR/brppt1/Kconfig"  source "board/siemens/draco/Kconfig"  source "board/siemens/pxm2/Kconfig" diff --git a/arch/arm/mach-omap2/am33xx/Kconfig b/arch/arm/mach-omap2/am33xx/Kconfig index 9da2a16a994..7f6b344c82b 100644 --- a/arch/arm/mach-omap2/am33xx/Kconfig +++ b/arch/arm/mach-omap2/am33xx/Kconfig @@ -121,6 +121,10 @@ config TARGET_BRXRE1  	bool "Support BRXRE1"  	select BOARD_LATE_INIT +config TARGET_BRSMARC1 +	bool "Support BRSMARC1" +	select BOARD_LATE_INIT +  config TARGET_BRPPT1  	bool "Support BRPPT1"  	select BOARD_LATE_INIT diff --git a/arch/arm/mach-omap2/boot-common.c b/arch/arm/mach-omap2/boot-common.c index c8b8ac657fb..734fa9d9e6f 100644 --- a/arch/arm/mach-omap2/boot-common.c +++ b/arch/arm/mach-omap2/boot-common.c @@ -9,7 +9,6 @@  #include <common.h>  #include <ahci.h> -#include <environment.h>  #include <spl.h>  #include <asm/omap_common.h>  #include <asm/arch/omap.h> @@ -208,7 +207,7 @@ void spl_board_init(void)  #if defined(CONFIG_AM33XX) && defined(CONFIG_SPL_MUSB_NEW_SUPPORT)  	arch_misc_init();  #endif -#if defined(CONFIG_HW_WATCHDOG) +#if defined(CONFIG_HW_WATCHDOG) || defined(CONFIG_WATCHDOG)  	hw_watchdog_init();  #endif  #ifdef CONFIG_AM33XX diff --git a/arch/arm/mach-omap2/omap3/clock.c b/arch/arm/mach-omap2/omap3/clock.c index cb9e91ebc3b..71f73492c6c 100644 --- a/arch/arm/mach-omap2/omap3/clock.c +++ b/arch/arm/mach-omap2/omap3/clock.c @@ -17,7 +17,6 @@  #include <asm/arch/clocks_omap3.h>  #include <asm/arch/mem.h>  #include <asm/arch/sys_proto.h> -#include <environment.h>  #include <command.h>  /****************************************************************************** diff --git a/arch/arm/mach-omap2/utils.c b/arch/arm/mach-omap2/utils.c index 7d014469409..0d5ca20e8e8 100644 --- a/arch/arm/mach-omap2/utils.c +++ b/arch/arm/mach-omap2/utils.c @@ -4,7 +4,7 @@   * Aneesh V <aneesh@ti.com>   */  #include <common.h> -#include <environment.h> +#include <env.h>  #include <asm/setup.h>  #include <asm/arch/sys_proto.h>  #include <asm/omap_common.h> diff --git a/arch/arm/mach-rmobile/cpu_info.c b/arch/arm/mach-rmobile/cpu_info.c index dc407d2a612..9ef94a48993 100644 --- a/arch/arm/mach-rmobile/cpu_info.c +++ b/arch/arm/mach-rmobile/cpu_info.c @@ -5,6 +5,7 @@   */  #include <common.h>  #include <asm/io.h> +#include <env.h>  #include <linux/ctype.h>  #ifdef CONFIG_ARCH_CPU_INIT diff --git a/arch/arm/mach-rockchip/rk3288/rk3288.c b/arch/arm/mach-rockchip/rk3288/rk3288.c index b462c090699..057ce920809 100644 --- a/arch/arm/mach-rockchip/rk3288/rk3288.c +++ b/arch/arm/mach-rockchip/rk3288/rk3288.c @@ -4,6 +4,7 @@   */  #include <common.h>  #include <dm.h> +#include <env.h>  #include <clk.h>  #include <asm/armv7.h>  #include <asm/io.h> diff --git a/arch/arm/mach-socfpga/misc_gen5.c b/arch/arm/mach-socfpga/misc_gen5.c index 71547d81ab6..31681b799d4 100644 --- a/arch/arm/mach-socfpga/misc_gen5.c +++ b/arch/arm/mach-socfpga/misc_gen5.c @@ -5,6 +5,7 @@  #include <common.h>  #include <asm/io.h> +#include <env.h>  #include <errno.h>  #include <fdtdec.h>  #include <linux/libfdt.h> diff --git a/arch/arm/mach-socfpga/misc_s10.c b/arch/arm/mach-socfpga/misc_s10.c index 29abc4a54c3..0a5fab11c0d 100644 --- a/arch/arm/mach-socfpga/misc_s10.c +++ b/arch/arm/mach-socfpga/misc_s10.c @@ -6,6 +6,7 @@  #include <altera.h>  #include <common.h> +#include <env.h>  #include <errno.h>  #include <fdtdec.h>  #include <miiphy.h> diff --git a/arch/arm/mach-stm32mp/cpu.c b/arch/arm/mach-stm32mp/cpu.c index 10190f40d4e..a46e8438f7c 100644 --- a/arch/arm/mach-stm32mp/cpu.c +++ b/arch/arm/mach-stm32mp/cpu.c @@ -5,7 +5,7 @@  #include <common.h>  #include <clk.h>  #include <debug_uart.h> -#include <environment.h> +#include <env.h>  #include <misc.h>  #include <asm/io.h>  #include <asm/arch/stm32.h> diff --git a/arch/arm/mach-tegra/board2.c b/arch/arm/mach-tegra/board2.c index bbc487aa3bf..f13bd256cc2 100644 --- a/arch/arm/mach-tegra/board2.c +++ b/arch/arm/mach-tegra/board2.c @@ -7,6 +7,7 @@  #include <common.h>  #include <dm.h>  #include <efi_loader.h> +#include <env.h>  #include <errno.h>  #include <ns16550.h>  #include <usb.h> diff --git a/arch/arm/mach-tegra/cboot.c b/arch/arm/mach-tegra/cboot.c index a829ef794f2..0433081c6c5 100644 --- a/arch/arm/mach-tegra/cboot.c +++ b/arch/arm/mach-tegra/cboot.c @@ -4,7 +4,7 @@   */  #include <common.h> -#include <environment.h> +#include <env.h>  #include <fdt_support.h>  #include <fdtdec.h>  #include <stdlib.h> diff --git a/arch/arm/mach-uniphier/board_late_init.c b/arch/arm/mach-uniphier/board_late_init.c index 3180b24330b..14b61fc7dfd 100644 --- a/arch/arm/mach-uniphier/board_late_init.c +++ b/arch/arm/mach-uniphier/board_late_init.c @@ -6,6 +6,7 @@   */  #include <common.h> +#include <env.h>  #include <spl.h>  #include <linux/libfdt.h>  #include <nand.h> diff --git a/arch/arm/mach-uniphier/mmc-first-dev.c b/arch/arm/mach-uniphier/mmc-first-dev.c index 2f1c109b9e2..149e662070f 100644 --- a/arch/arm/mach-uniphier/mmc-first-dev.c +++ b/arch/arm/mach-uniphier/mmc-first-dev.c @@ -5,6 +5,7 @@   */  #include <common.h> +#include <env.h>  #include <mmc.h>  #include <linux/errno.h> diff --git a/arch/m68k/lib/bootm.c b/arch/m68k/lib/bootm.c index 1b154302979..19445b3fc7a 100644 --- a/arch/m68k/lib/bootm.c +++ b/arch/m68k/lib/bootm.c @@ -6,11 +6,11 @@  #include <common.h>  #include <command.h> +#include <env.h>  #include <image.h>  #include <u-boot/zlib.h>  #include <bzlib.h>  #include <watchdog.h> -#include <environment.h>  #include <asm/byteorder.h>  #ifdef CONFIG_SHOW_BOOT_PROGRESS  # include <status_led.h> diff --git a/arch/microblaze/lib/bootm.c b/arch/microblaze/lib/bootm.c index 083a43c3a5c..ec332944d8e 100644 --- a/arch/microblaze/lib/bootm.c +++ b/arch/microblaze/lib/bootm.c @@ -9,6 +9,7 @@  #include <common.h>  #include <command.h> +#include <env.h>  #include <fdt_support.h>  #include <image.h>  #include <u-boot/zlib.h> diff --git a/arch/mips/lib/bootm.c b/arch/mips/lib/bootm.c index 6a462f3e5a5..8c0d7672f24 100644 --- a/arch/mips/lib/bootm.c +++ b/arch/mips/lib/bootm.c @@ -5,6 +5,7 @@   */  #include <common.h> +#include <env.h>  #include <image.h>  #include <fdt_support.h>  #include <asm/addrspace.h> diff --git a/arch/nds32/include/asm/u-boot.h b/arch/nds32/include/asm/u-boot.h index 68701d6da9a..8c949e7fb71 100644 --- a/arch/nds32/include/asm/u-boot.h +++ b/arch/nds32/include/asm/u-boot.h @@ -21,7 +21,6 @@  #include <asm/u-boot-nds32.h> -#include <environment.h>  typedef struct bd_info {  	unsigned long	bi_arch_number;	/* unique id for this board */ diff --git a/arch/nds32/lib/bootm.c b/arch/nds32/lib/bootm.c index 0cfdc52b465..a472f6a1873 100644 --- a/arch/nds32/lib/bootm.c +++ b/arch/nds32/lib/bootm.c @@ -7,6 +7,7 @@  #include <common.h>  #include <command.h> +#include <env.h>  #include <image.h>  #include <u-boot/zlib.h>  #include <asm/byteorder.h> diff --git a/arch/powerpc/cpu/mpc85xx/cpu_init.c b/arch/powerpc/cpu/mpc85xx/cpu_init.c index cbcd62e19a0..cac92807904 100644 --- a/arch/powerpc/cpu/mpc85xx/cpu_init.c +++ b/arch/powerpc/cpu/mpc85xx/cpu_init.c @@ -10,6 +10,7 @@   */  #include <common.h> +#include <env.h>  #include <watchdog.h>  #include <asm/processor.h>  #include <ioports.h> diff --git a/arch/powerpc/cpu/mpc85xx/fdt.c b/arch/powerpc/cpu/mpc85xx/fdt.c index 20ecca605ff..db12aefb290 100644 --- a/arch/powerpc/cpu/mpc85xx/fdt.c +++ b/arch/powerpc/cpu/mpc85xx/fdt.c @@ -7,7 +7,7 @@   */  #include <common.h> -#include <environment.h> +#include <env.h>  #include <linux/libfdt.h>  #include <fdt_support.h>  #include <asm/processor.h> diff --git a/arch/powerpc/cpu/mpc85xx/fsl_corenet_serdes.c b/arch/powerpc/cpu/mpc85xx/fsl_corenet_serdes.c index 2fab9aaff41..fcfa7302334 100644 --- a/arch/powerpc/cpu/mpc85xx/fsl_corenet_serdes.c +++ b/arch/powerpc/cpu/mpc85xx/fsl_corenet_serdes.c @@ -4,6 +4,7 @@   */  #include <common.h> +#include <env.h>  #ifdef CONFIG_SYS_P4080_ERRATUM_SERDES8  #include <hwconfig.h>  #endif diff --git a/arch/powerpc/cpu/mpc85xx/mp.c b/arch/powerpc/cpu/mpc85xx/mp.c index b0aa72ed6e0..3882c95f92e 100644 --- a/arch/powerpc/cpu/mpc85xx/mp.c +++ b/arch/powerpc/cpu/mpc85xx/mp.c @@ -4,7 +4,9 @@   */  #include <common.h> +#include <env.h>  #include <asm/processor.h> +#include <env.h>  #include <ioports.h>  #include <lmb.h>  #include <asm/io.h> diff --git a/arch/powerpc/lib/bootm.c b/arch/powerpc/lib/bootm.c index 15e9c2a83e5..84691b75546 100644 --- a/arch/powerpc/lib/bootm.c +++ b/arch/powerpc/lib/bootm.c @@ -8,13 +8,13 @@  #include <common.h> +#include <env.h>  #include <watchdog.h>  #include <command.h>  #include <image.h>  #include <malloc.h>  #include <u-boot/zlib.h>  #include <bzlib.h> -#include <environment.h>  #include <asm/byteorder.h>  #include <asm/mp.h>  #include <bootm.h> diff --git a/arch/riscv/include/asm/u-boot.h b/arch/riscv/include/asm/u-boot.h index 3186835e0ad..5ba8e778128 100644 --- a/arch/riscv/include/asm/u-boot.h +++ b/arch/riscv/include/asm/u-boot.h @@ -20,7 +20,6 @@  #include <asm/u-boot-riscv.h> -#include <environment.h>  typedef struct bd_info {  	unsigned long	bi_boot_params;	/* where this board expects params */ diff --git a/arch/x86/cpu/qemu/e820.c b/arch/x86/cpu/qemu/e820.c index 0a690fde685..e6824865471 100644 --- a/arch/x86/cpu/qemu/e820.c +++ b/arch/x86/cpu/qemu/e820.c @@ -4,6 +4,7 @@   */  #include <common.h> +#include <env_internal.h>  #include <asm/e820.h>  DECLARE_GLOBAL_DATA_PTR; diff --git a/arch/x86/lib/zimage.c b/arch/x86/lib/zimage.c index 230b38e9384..6a6258a5057 100644 --- a/arch/x86/lib/zimage.c +++ b/arch/x86/lib/zimage.c @@ -13,6 +13,7 @@   */  #include <common.h> +#include <env.h>  #include <malloc.h>  #include <asm/acpi_table.h>  #include <asm/io.h> diff --git a/arch/xtensa/lib/bootm.c b/arch/xtensa/lib/bootm.c index aceed153d75..93eea53c5f2 100644 --- a/arch/xtensa/lib/bootm.c +++ b/arch/xtensa/lib/bootm.c @@ -6,6 +6,7 @@  #include <common.h>  #include <command.h> +#include <env.h>  #include <u-boot/zlib.h>  #include <asm/byteorder.h>  #include <asm/addrspace.h> | 
