imx: add i.MX8QXP support
Subsystems (15)
Peng Fan
reviewercover imx: add i.MX8QXP support
This patchset is to upstream i.MX8QXP and mek board support, with some drivers update to support i.MX8QXP. The information about the processor could be found
https://www.nxp.com/products/processors-and-microcontrollers/applications-processors/i.mx-applications-processors/i.mx-8-processors/i.mx-8x-family-arm-cortex-a35-3d-graphics-4k-video-dsp-error-correcting-code-on-ddr:i.MX8X
The architecture of i.MX8QXP is different from i.MX6/7/8M, inside i.MX8QXP, there is a dedicated processor(SCU) used for power/clock/pin/ pad/resource management/thermal and etc. The ACore need to communicate with SCU using SCFW API. The SCFW API is exported by SCFW, so we directly import it into U-Boot source code.
Gao Pan (1):
imx: lpi2c: fix clock issue when NACK detected
Peng Fan (32):
imx: import SCFW API
imx: add Kconfig entry for i.MX8
arm: build mach-imx for i.MX8
imx8: add IPC communication support between ACore and SCU
arm: global_data: introduce ipc_channel_handle
imx: boot_mode: Add FLEXSPI boot entry
imx8: add imx-regs header file
imx8: pins: include i.MX8QXP pin header when CONFIG_IMX8QXP defined
imx: add i.MX8 cpu type
imx8: add basic cpu support
imx8: add boot device detection
imx8: implement mmc_get_env_dev
imx8: implement imx_get_mac_from_fuse
imx8: implement get_board_serial
imx8: add mmu and dram related functiions
imx8: add bootaux support
imx8: add arch_cpu_init
imx8: add clock driver
imx8: add iomux configuration code
serial_lpuart: Update lpuart driver to support i.MX8
net: fec: do not access reserved register for i.MX8
gpio: mxc_gpio: add support for i.MX8
pinctrl: Add pinctrl driver for i.MX8
power: Add power domain driver for i.MX8
power: Add PD device lookup interface to power domain uclass
power-domain: add dummy functions when CONFIG_POWER_DOMAIN not defined
dm: core: device: enable power domain in probe
drivers: regulator: fixed: add off-on-delay-us
log: include command header file
i2c-mux: pca954x: support pca9646 i2c switch
dts: imx8qxp: Add DTS and binding header files
imx: 8qxp_mek: Add i.MX8QXP MEK board support
Ye Li (8):
fsl_esdhc: Update usdhc driver to support i.MX8
serial: lpuart: Enable RX and TX FIFO
imx_lpi2c: Update lpi2c driver to support imx8
lpi2c: Fix bus stop problem in xfer
lpi2c: Add bus busy error handling
net: fec_mxc: Add the init_clk_fec function
sata: Add i.MX8 SATA support
mmc: fsl_esdhc: fix sd/mmc ddr mode clock setting issue
arch/arm/Kconfig | 8 +
arch/arm/Makefile | 2 +-
arch/arm/dts/Makefile | 2 +
arch/arm/dts/fsl-imx8qxp-mek.dts | 416 +++++
arch/arm/dts/fsl-imx8qxp.dtsi | 1593 ++++++++++++++++++++
arch/arm/include/asm/arch-imx/cpu.h | 5 +
arch/arm/include/asm/arch-imx8/clock.h | 36 +
arch/arm/include/asm/arch-imx8/cpu.h | 26 +
arch/arm/include/asm/arch-imx8/fsl_mu_hal.h | 54 +
arch/arm/include/asm/arch-imx8/gpio.h | 22 +
arch/arm/include/asm/arch-imx8/i2c.h | 34 +
arch/arm/include/asm/arch-imx8/imx-regs.h | 119 ++
arch/arm/include/asm/arch-imx8/imx8-pins.h | 15 +
arch/arm/include/asm/arch-imx8/imx8qm_pads.h | 295 ++++
arch/arm/include/asm/arch-imx8/imx8qxp_pads.h | 200 +++
arch/arm/include/asm/arch-imx8/iomux.h | 40 +
arch/arm/include/asm/arch-imx8/power-domain.h | 15 +
arch/arm/include/asm/arch-imx8/sci/ipc.h | 67 +
arch/arm/include/asm/arch-imx8/sci/rpc.h | 131 ++
arch/arm/include/asm/arch-imx8/sci/sci.h | 39 +
arch/arm/include/asm/arch-imx8/sci/svc/irq/api.h | 160 ++
arch/arm/include/asm/arch-imx8/sci/svc/misc/api.h | 523 +++++++
arch/arm/include/asm/arch-imx8/sci/svc/pad/api.h | 568 +++++++
arch/arm/include/asm/arch-imx8/sci/svc/pm/api.h | 686 +++++++++
arch/arm/include/asm/arch-imx8/sci/svc/rm/api.h | 759 ++++++++++
arch/arm/include/asm/arch-imx8/sci/svc/timer/api.h | 306 ++++
arch/arm/include/asm/arch-imx8/sci/types.h | 862 +++++++++++
arch/arm/include/asm/arch-imx8/sys_proto.h | 19 +
arch/arm/include/asm/global_data.h | 4 +
arch/arm/include/asm/mach-imx/boot_mode.h | 1 +
arch/arm/include/asm/mach-imx/sys_proto.h | 3 +
arch/arm/mach-imx/Makefile | 1 +
arch/arm/mach-imx/imx8/Kconfig | 26 +
arch/arm/mach-imx/imx8/Makefile | 13 +
arch/arm/mach-imx/imx8/clock.c | 361 +++++
arch/arm/mach-imx/imx8/cpu.c | 783 ++++++++++
arch/arm/mach-imx/imx8/fsl_mu_hal.c | 28 +
arch/arm/mach-imx/imx8/iomux.c | 47 +
arch/arm/mach-imx/imx8/sci/ipc.c | 100 ++
arch/arm/mach-imx/imx8/sci/svc/irq/rpc.h | 54 +
arch/arm/mach-imx/imx8/sci/svc/irq/rpc_clnt.c | 76 +
arch/arm/mach-imx/imx8/sci/svc/misc/rpc.h | 76 +
arch/arm/mach-imx/imx8/sci/svc/misc/rpc_clnt.c | 515 +++++++
arch/arm/mach-imx/imx8/sci/svc/pad/rpc.h | 68 +
arch/arm/mach-imx/imx8/sci/svc/pad/rpc_clnt.c | 475 ++++++
arch/arm/mach-imx/imx8/sci/svc/pm/rpc.h | 73 +
arch/arm/mach-imx/imx8/sci/svc/pm/rpc_clnt.c | 460 ++++++
arch/arm/mach-imx/imx8/sci/svc/rm/rpc.h | 83 +
arch/arm/mach-imx/imx8/sci/svc/rm/rpc_clnt.c | 645 ++++++++
arch/arm/mach-imx/imx8/sci/svc/timer/rpc.h | 67 +
arch/arm/mach-imx/imx8/sci/svc/timer/rpc_clnt.c | 365 +++++
board/freescale/imx8qxp_mek/Kconfig | 14 +
board/freescale/imx8qxp_mek/MAINTAINERS | 6 +
board/freescale/imx8qxp_mek/Makefile | 7 +
board/freescale/imx8qxp_mek/imx8qxp_mek.c | 159 ++
configs/imx8qxp_mek_defconfig | 47 +
drivers/ata/Kconfig | 6 +
drivers/ata/Makefile | 1 +
drivers/ata/ahci.c | 25 +
drivers/ata/sata_imx.c | 64 +
drivers/core/device.c | 7 +
drivers/gpio/mxc_gpio.c | 30 +-
drivers/i2c/imx_lpi2c.c | 82 +-
drivers/i2c/muxes/pca954x.c | 9 +-
drivers/mmc/fsl_esdhc.c | 32 +-
drivers/net/fec_mxc.c | 9 +-
drivers/pinctrl/nxp/Kconfig | 18 +
drivers/pinctrl/nxp/Makefile | 2 +
drivers/pinctrl/nxp/pinctrl-imx.c | 209 +--
drivers/pinctrl/nxp/pinctrl-imx.h | 16 +
drivers/pinctrl/nxp/pinctrl-imx8.c | 42 +
drivers/pinctrl/nxp/pinctrl-scu.c | 72 +
drivers/power/domain/Kconfig | 6 +
drivers/power/domain/Makefile | 1 +
drivers/power/domain/imx8-power-domain.c | 315 ++++
drivers/power/domain/power-domain-uclass.c | 42 +
drivers/power/regulator/fixed.c | 6 +
drivers/serial/serial_lpuart.c | 48 +-
include/configs/imx8qxp_mek.h | 157 ++
include/dt-bindings/clock/imx8qxp-clock.h | 533 +++++++
include/dt-bindings/pinctrl/pads-imx8qm.h | 975 ++++++++++++
include/dt-bindings/pinctrl/pads-imx8qxp.h | 770 ++++++++++
include/dt-bindings/soc/imx8_pd.h | 197 +++
include/dt-bindings/soc/imx_rsrc.h | 560 +++++++
include/fsl_lpuart.h | 2 +-
.../asm/arch-mx7ulp => include}/imx_lpi2c.h | 0
include/log.h | 1 +
include/power-domain.h | 52 +
88 files changed, 15691 insertions(+), 157 deletions(-)
create mode 100644 arch/arm/dts/fsl-imx8qxp-mek.dts
create mode 100644 arch/arm/dts/fsl-imx8qxp.dtsi
create mode 100644 arch/arm/include/asm/arch-imx8/clock.h
create mode 100644 arch/arm/include/asm/arch-imx8/cpu.h
create mode 100644 arch/arm/include/asm/arch-imx8/fsl_mu_hal.h
create mode 100644 arch/arm/include/asm/arch-imx8/gpio.h
create mode 100644 arch/arm/include/asm/arch-imx8/i2c.h
create mode 100644 arch/arm/include/asm/arch-imx8/imx-regs.h
create mode 100644 arch/arm/include/asm/arch-imx8/imx8-pins.h
create mode 100644 arch/arm/include/asm/arch-imx8/imx8qm_pads.h
create mode 100644 arch/arm/include/asm/arch-imx8/imx8qxp_pads.h
create mode 100644 arch/arm/include/asm/arch-imx8/iomux.h
create mode 100644 arch/arm/include/asm/arch-imx8/power-domain.h
create mode 100755 arch/arm/include/asm/arch-imx8/sci/ipc.h
create mode 100755 arch/arm/include/asm/arch-imx8/sci/rpc.h
create mode 100644 arch/arm/include/asm/arch-imx8/sci/sci.h
create mode 100755 arch/arm/include/asm/arch-imx8/sci/svc/irq/api.h
create mode 100755 arch/arm/include/asm/arch-imx8/sci/svc/misc/api.h
create mode 100755 arch/arm/include/asm/arch-imx8/sci/svc/pad/api.h
create mode 100755 arch/arm/include/asm/arch-imx8/sci/svc/pm/api.h
create mode 100755 arch/arm/include/asm/arch-imx8/sci/svc/rm/api.h
create mode 100755 arch/arm/include/asm/arch-imx8/sci/svc/timer/api.h
create mode 100755 arch/arm/include/asm/arch-imx8/sci/types.h
create mode 100644 arch/arm/include/asm/arch-imx8/sys_proto.h
create mode 100644 arch/arm/mach-imx/imx8/Kconfig
create mode 100644 arch/arm/mach-imx/imx8/Makefile
create mode 100644 arch/arm/mach-imx/imx8/clock.c
create mode 100644 arch/arm/mach-imx/imx8/cpu.c
create mode 100644 arch/arm/mach-imx/imx8/fsl_mu_hal.c
create mode 100644 arch/arm/mach-imx/imx8/iomux.c
create mode 100644 arch/arm/mach-imx/imx8/sci/ipc.c
create mode 100644 arch/arm/mach-imx/imx8/sci/svc/irq/rpc.h
create mode 100644 arch/arm/mach-imx/imx8/sci/svc/irq/rpc_clnt.c
create mode 100644 arch/arm/mach-imx/imx8/sci/svc/misc/rpc.h
create mode 100644 arch/arm/mach-imx/imx8/sci/svc/misc/rpc_clnt.c
create mode 100644 arch/arm/mach-imx/imx8/sci/svc/pad/rpc.h
create mode 100644 arch/arm/mach-imx/imx8/sci/svc/pad/rpc_clnt.c
create mode 100644 arch/arm/mach-imx/imx8/sci/svc/pm/rpc.h
create mode 100644 arch/arm/mach-imx/imx8/sci/svc/pm/rpc_clnt.c
create mode 100644 arch/arm/mach-imx/imx8/sci/svc/rm/rpc.h
create mode 100644 arch/arm/mach-imx/imx8/sci/svc/rm/rpc_clnt.c
create mode 100644 arch/arm/mach-imx/imx8/sci/svc/timer/rpc.h
create mode 100644 arch/arm/mach-imx/imx8/sci/svc/timer/rpc_clnt.c
create mode 100644 board/freescale/imx8qxp_mek/Kconfig
create mode 100644 board/freescale/imx8qxp_mek/MAINTAINERS
create mode 100644 board/freescale/imx8qxp_mek/Makefile
create mode 100644 board/freescale/imx8qxp_mek/imx8qxp_mek.c
create mode 100644 configs/imx8qxp_mek_defconfig
create mode 100644 drivers/ata/sata_imx.c
create mode 100644 drivers/pinctrl/nxp/pinctrl-imx8.c
create mode 100644 drivers/pinctrl/nxp/pinctrl-scu.c
create mode 100644 drivers/power/domain/imx8-power-domain.c
create mode 100644 include/configs/imx8qxp_mek.h
create mode 100644 include/dt-bindings/clock/imx8qxp-clock.h
create mode 100644 include/dt-bindings/pinctrl/pads-imx8qm.h
create mode 100644 include/dt-bindings/pinctrl/pads-imx8qxp.h
create mode 100644 include/dt-bindings/soc/imx8_pd.h
create mode 100644 include/dt-bindings/soc/imx_rsrc.h
rename {arch/arm/include/asm/arch-mx7ulp => include}/imx_lpi2c.h (100%)Signature · 1 line
2.14.1
Peng Fan
reviewerPATCH 1/41 imx: import SCFW API
The SCFW API files are generated from scfw source code and imported to U-Boot source code withou code changes.
The commit in SCFW is
commit a5759de95691("SCF-69 Fix the voltage for 1.06GHz setpoint on A72.")
--- arch/arm/include/asm/arch-imx8/imx8qm_pads.h | 295 +++++++ arch/arm/include/asm/arch-imx8/imx8qxp_pads.h | 200 +++++ arch/arm/include/asm/arch-imx8/sci/ipc.h | 67 ++ arch/arm/include/asm/arch-imx8/sci/rpc.h | 131 +++ arch/arm/include/asm/arch-imx8/sci/svc/irq/api.h | 160 ++++ arch/arm/include/asm/arch-imx8/sci/svc/misc/api.h | 523 +++++++++++ arch/arm/include/asm/arch-imx8/sci/svc/pad/api.h | 568 ++++++++++++ arch/arm/include/asm/arch-imx8/sci/svc/pm/api.h | 686 +++++++++++++++ arch/arm/include/asm/arch-imx8/sci/svc/rm/api.h | 759 ++++++++++++++++ arch/arm/include/asm/arch-imx8/sci/svc/timer/api.h | 306 +++++++ arch/arm/include/asm/arch-imx8/sci/types.h | 862 ++++++++++++++++++ arch/arm/mach-imx/imx8/Makefile | 11 + arch/arm/mach-imx/imx8/sci/svc/irq/rpc.h | 54 ++ arch/arm/mach-imx/imx8/sci/svc/irq/rpc_clnt.c | 76 ++ arch/arm/mach-imx/imx8/sci/svc/misc/rpc.h | 76 ++ arch/arm/mach-imx/imx8/sci/svc/misc/rpc_clnt.c | 515 +++++++++++ arch/arm/mach-imx/imx8/sci/svc/pad/rpc.h | 68 ++ arch/arm/mach-imx/imx8/sci/svc/pad/rpc_clnt.c | 475 ++++++++++ arch/arm/mach-imx/imx8/sci/svc/pm/rpc.h | 73 ++ arch/arm/mach-imx/imx8/sci/svc/pm/rpc_clnt.c | 460 ++++++++++ arch/arm/mach-imx/imx8/sci/svc/rm/rpc.h | 83 ++ arch/arm/mach-imx/imx8/sci/svc/rm/rpc_clnt.c | 645 ++++++++++++++ arch/arm/mach-imx/imx8/sci/svc/timer/rpc.h | 67 ++ arch/arm/mach-imx/imx8/sci/svc/timer/rpc_clnt.c | 365 ++++++++ include/dt-bindings/pinctrl/pads-imx8qm.h | 975 +++++++++++++++++++++ include/dt-bindings/pinctrl/pads-imx8qxp.h | 770 ++++++++++++++++ include/dt-bindings/soc/imx_rsrc.h | 560 ++++++++++++ 27 files changed, 9830 insertions(+) create mode 100644 arch/arm/include/asm/arch-imx8/imx8qm_pads.h create mode 100644 arch/arm/include/asm/arch-imx8/imx8qxp_pads.h create mode 100755 arch/arm/include/asm/arch-imx8/sci/ipc.h create mode 100755 arch/arm/include/asm/arch-imx8/sci/rpc.h create mode 100755 arch/arm/include/asm/arch-imx8/sci/svc/irq/api.h create mode 100755 arch/arm/include/asm/arch-imx8/sci/svc/misc/api.h create mode 100755 arch/arm/include/asm/arch-imx8/sci/svc/pad/api.h create mode 100755 arch/arm/include/asm/arch-imx8/sci/svc/pm/api.h create mode 100755 arch/arm/include/asm/arch-imx8/sci/svc/rm/api.h create mode 100755 arch/arm/include/asm/arch-imx8/sci/svc/timer/api.h create mode 100755 arch/arm/include/asm/arch-imx8/sci/types.h create mode 100644 arch/arm/mach-imx/imx8/Makefile create mode 100644 arch/arm/mach-imx/imx8/sci/svc/irq/rpc.h create mode 100644 arch/arm/mach-imx/imx8/sci/svc/irq/rpc_clnt.c create mode 100644 arch/arm/mach-imx/imx8/sci/svc/misc/rpc.h create mode 100644 arch/arm/mach-imx/imx8/sci/svc/misc/rpc_clnt.c create mode 100644 arch/arm/mach-imx/imx8/sci/svc/pad/rpc.h create mode 100644 arch/arm/mach-imx/imx8/sci/svc/pad/rpc_clnt.c create mode 100644 arch/arm/mach-imx/imx8/sci/svc/pm/rpc.h create mode 100644 arch/arm/mach-imx/imx8/sci/svc/pm/rpc_clnt.c create mode 100644 arch/arm/mach-imx/imx8/sci/svc/rm/rpc.h create mode 100644 arch/arm/mach-imx/imx8/sci/svc/rm/rpc_clnt.c create mode 100644 arch/arm/mach-imx/imx8/sci/svc/timer/rpc.h create mode 100644 arch/arm/mach-imx/imx8/sci/svc/timer/rpc_clnt.c create mode 100644 include/dt-bindings/pinctrl/pads-imx8qm.h create mode 100644 include/dt-bindings/pinctrl/pads-imx8qxp.h create mode 100644 include/dt-bindings/soc/imx_rsrc.h
arch/arm/include/asm/arch-imx8/imx8qm_pads.h new file +295 -0
@@ -0,0 +1,295 @@ +/* +* Copyright (C) 2016 Freescale Semiconductor, Inc. +* Copyright 2017-2018 NXP +* +* SPDX-License-Identifier: GPL-2.0+ +*/ + +/*! +* Header file used to configure SoC pad list. +*/ + +#ifndef SC_PADS_H +#define SC_PADS_H + +/* Includes */ + +/* Defines */ + +/*! +* @name Pad Definitions +*/ +/*@{*/ +#define SC_P_SIM0_CLK 0/*!< DMA.SIM0.CLK, LSIO.GPIO0.IO00 */ +#define SC_P_SIM0_RST 1/*!< DMA.SIM0.RST, LSIO.GPIO0.IO01 */ +#define SC_P_SIM0_IO 2/*!< DMA.SIM0.IO, LSIO.GPIO0.IO02 */ +#define SC_P_SIM0_PD 3/*!< DMA.SIM0.PD, DMA.I2C3.SCL, LSIO.GPIO0.IO03 */ +#define SC_P_SIM0_POWER_EN 4/*!< DMA.SIM0.POWER_EN, DMA.I2C3.SDA, LSIO.GPIO0.IO04 */ +#define SC_P_SIM0_GPIO0_00 5/*!< DMA.SIM0.POWER_EN, LSIO.GPIO0.IO05 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_SIM 6/*!< */ +#define SC_P_M40_I2C0_SCL 7/*!< M40.I2C0.SCL, M40.UART0.RX, M40.GPIO0.IO02, LSIO.GPIO0.IO06 */ +#define SC_P_M40_I2C0_SDA 8/*!< M40.I2C0.SDA, M40.UART0.TX, M40.GPIO0.IO03, LSIO.GPIO0.IO07 */ +#define SC_P_M40_GPIO0_00 9/*!< M40.GPIO0.IO00, M40.TPM0.CH0, DMA.UART4.RX, LSIO.GPIO0.IO08 */ +#define SC_P_M40_GPIO0_01 10/*!< M40.GPIO0.IO01, M40.TPM0.CH1, DMA.UART4.TX, LSIO.GPIO0.IO09 */ +#define SC_P_M41_I2C0_SCL 11/*!< M41.I2C0.SCL, M41.UART0.RX, M41.GPIO0.IO02, LSIO.GPIO0.IO10 */ +#define SC_P_M41_I2C0_SDA 12/*!< M41.I2C0.SDA, M41.UART0.TX, M41.GPIO0.IO03, LSIO.GPIO0.IO11 */ +#define SC_P_M41_GPIO0_00 13/*!< M41.GPIO0.IO00, M41.TPM0.CH0, DMA.UART3.RX, LSIO.GPIO0.IO12 */ +#define SC_P_M41_GPIO0_01 14/*!< M41.GPIO0.IO01, M41.TPM0.CH1, DMA.UART3.TX, LSIO.GPIO0.IO13 */ +#define SC_P_GPT0_CLK 15/*!< LSIO.GPT0.CLK, DMA.I2C1.SCL, LSIO.KPP0.COL4, LSIO.GPIO0.IO14 */ +#define SC_P_GPT0_CAPTURE 16/*!< LSIO.GPT0.CAPTURE, DMA.I2C1.SDA, LSIO.KPP0.COL5, LSIO.GPIO0.IO15 */ +#define SC_P_GPT0_COMPARE 17/*!< LSIO.GPT0.COMPARE, LSIO.PWM3.OUT, LSIO.KPP0.COL6, LSIO.GPIO0.IO16 */ +#define SC_P_GPT1_CLK 18/*!< LSIO.GPT1.CLK, DMA.I2C2.SCL, LSIO.KPP0.COL7, LSIO.GPIO0.IO17 */ +#define SC_P_GPT1_CAPTURE 19/*!< LSIO.GPT1.CAPTURE, DMA.I2C2.SDA, LSIO.KPP0.ROW4, LSIO.GPIO0.IO18 */ +#define SC_P_GPT1_COMPARE 20/*!< LSIO.GPT1.COMPARE, LSIO.PWM2.OUT, LSIO.KPP0.ROW5, LSIO.GPIO0.IO19 */ +#define SC_P_UART0_RX 21/*!< DMA.UART0.RX, SCU.UART0.RX, LSIO.GPIO0.IO20 */ +#define SC_P_UART0_TX 22/*!< DMA.UART0.TX, SCU.UART0.TX, LSIO.GPIO0.IO21 */ +#define SC_P_UART0_RTS_B 23/*!< DMA.UART0.RTS_B, LSIO.PWM0.OUT, DMA.UART2.RX, LSIO.GPIO0.IO22 */ +#define SC_P_UART0_CTS_B 24/*!< DMA.UART0.CTS_B, LSIO.PWM1.OUT, DMA.UART2.TX, LSIO.GPIO0.IO23 */ +#define SC_P_UART1_TX 25/*!< DMA.UART1.TX, DMA.SPI3.SCK, LSIO.GPIO0.IO24 */ +#define SC_P_UART1_RX 26/*!< DMA.UART1.RX, DMA.SPI3.SDO, LSIO.GPIO0.IO25 */ +#define SC_P_UART1_RTS_B 27/*!< DMA.UART1.RTS_B, DMA.SPI3.SDI, DMA.UART1.CTS_B, LSIO.GPIO0.IO26 */ +#define SC_P_UART1_CTS_B 28/*!< DMA.UART1.CTS_B, DMA.SPI3.CS0, DMA.UART1.RTS_B, LSIO.GPIO0.IO27 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_GPIOLH 29/*!< */ +#define SC_P_SCU_PMIC_MEMC_ON 30/*!< SCU.GPIO0.IOXX_PMIC_MEMC_ON */ +#define SC_P_SCU_WDOG_OUT 31/*!< SCU.WDOG0.WDOG_OUT */ +#define SC_P_PMIC_I2C_SDA 32/*!< SCU.PMIC_I2C.SDA */ +#define SC_P_PMIC_I2C_SCL 33/*!< SCU.PMIC_I2C.SCL */ +#define SC_P_PMIC_EARLY_WARNING 34/*!< SCU.PMIC_EARLY_WARNING */ +#define SC_P_PMIC_INT_B 35/*!< SCU.DSC.PMIC_INT_B */ +#define SC_P_SCU_GPIO0_00 36/*!< SCU.GPIO0.IO00, SCU.UART0.RX, LSIO.GPIO0.IO28 */ +#define SC_P_SCU_GPIO0_01 37/*!< SCU.GPIO0.IO01, SCU.UART0.TX, LSIO.GPIO0.IO29 */ +#define SC_P_SCU_GPIO0_02 38/*!< SCU.GPIO0.IO02, SCU.GPIO0.IOXX_PMIC_GPU0_ON, LSIO.GPIO0.IO30 */ +#define SC_P_SCU_GPIO0_03 39/*!< SCU.GPIO0.IO03, SCU.GPIO0.IOXX_PMIC_GPU1_ON, LSIO.GPIO0.IO31 */ +#define SC_P_SCU_GPIO0_04 40/*!< SCU.GPIO0.IO04, SCU.GPIO0.IOXX_PMIC_A72_ON, LSIO.GPIO1.IO00 */ +#define SC_P_SCU_GPIO0_05 41/*!< SCU.GPIO0.IO05, SCU.GPIO0.IOXX_PMIC_A53_ON, LSIO.GPIO1.IO01 */ +#define SC_P_SCU_GPIO0_06 42/*!< SCU.GPIO0.IO06, SCU.TPM0.CH0, LSIO.GPIO1.IO02 */ +#define SC_P_SCU_GPIO0_07 43/*!< SCU.GPIO0.IO07, SCU.TPM0.CH1, SCU.DSC.RTC_CLOCK_OUTPUT_32K, LSIO.GPIO1.IO03 */ +#define SC_P_SCU_BOOT_MODE0 44/*!< SCU.DSC.BOOT_MODE0 */ +#define SC_P_SCU_BOOT_MODE1 45/*!< SCU.DSC.BOOT_MODE1 */ +#define SC_P_SCU_BOOT_MODE2 46/*!< SCU.DSC.BOOT_MODE2 */ +#define SC_P_SCU_BOOT_MODE3 47/*!< SCU.DSC.BOOT_MODE3 */ +#define SC_P_SCU_BOOT_MODE4 48/*!< SCU.DSC.BOOT_MODE4, SCU.PMIC_I2C.SCL */ +#define SC_P_SCU_BOOT_MODE5 49/*!< SCU.DSC.BOOT_MODE5, SCU.PMIC_I2C.SDA */ +#define SC_P_LVDS0_GPIO00 50/*!< LVDS0.GPIO0.IO00, LVDS0.PWM0.OUT, LSIO.GPIO1.IO04 */ +#define SC_P_LVDS0_GPIO01 51/*!< LVDS0.GPIO0.IO01, LSIO.GPIO1.IO05 */ +#define SC_P_LVDS0_I2C0_SCL 52/*!< LVDS0.I2C0.SCL, LVDS0.GPIO0.IO02, LSIO.GPIO1.IO06 */ +#define SC_P_LVDS0_I2C0_SDA 53/*!< LVDS0.I2C0.SDA, LVDS0.GPIO0.IO03, LSIO.GPIO1.IO07 */ +#define SC_P_LVDS0_I2C1_SCL 54/*!< LVDS0.I2C1.SCL, DMA.UART2.TX, LSIO.GPIO1.IO08 */ +#define SC_P_LVDS0_I2C1_SDA 55/*!< LVDS0.I2C1.SDA, DMA.UART2.RX, LSIO.GPIO1.IO09 */ +#define SC_P_LVDS1_GPIO00 56/*!< LVDS1.GPIO0.IO00, LVDS1.PWM0.OUT, LSIO.GPIO1.IO10 */ +#define SC_P_LVDS1_GPIO01 57/*!< LVDS1.GPIO0.IO01, LSIO.GPIO1.IO11 */ +#define SC_P_LVDS1_I2C0_SCL 58/*!< LVDS1.I2C0.SCL, LVDS1.GPIO0.IO02, LSIO.GPIO1.IO12 */ +#define SC_P_LVDS1_I2C0_SDA 59/*!< LVDS1.I2C0.SDA, LVDS1.GPIO0.IO03, LSIO.GPIO1.IO13 */ +#define SC_P_LVDS1_I2C1_SCL 60/*!< LVDS1.I2C1.SCL, DMA.UART3.TX, LSIO.GPIO1.IO14 */ +#define SC_P_LVDS1_I2C1_SDA 61/*!< LVDS1.I2C1.SDA, DMA.UART3.RX, LSIO.GPIO1.IO15 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_LVDSGPIO 62/*!< */ +#define SC_P_MIPI_DSI0_I2C0_SCL 63/*!< MIPI_DSI0.I2C0.SCL, LSIO.GPIO1.IO16 */ +#define SC_P_MIPI_DSI0_I2C0_SDA 64/*!< MIPI_DSI0.I2C0.SDA, LSIO.GPIO1.IO17 */ +#define SC_P_MIPI_DSI0_GPIO0_00 65/*!< MIPI_DSI0.GPIO0.IO00, MIPI_DSI0.PWM0.OUT, LSIO.GPIO1.IO18 */ +#define SC_P_MIPI_DSI0_GPIO0_01 66/*!< MIPI_DSI0.GPIO0.IO01, LSIO.GPIO1.IO19 */ +#define SC_P_MIPI_DSI1_I2C0_SCL 67/*!< MIPI_DSI1.I2C0.SCL, LSIO.GPIO1.IO20 */ +#define SC_P_MIPI_DSI1_I2C0_SDA 68/*!< MIPI_DSI1.I2C0.SDA, LSIO.GPIO1.IO21 */ +#define SC_P_MIPI_DSI1_GPIO0_00 69/*!< MIPI_DSI1.GPIO0.IO00, MIPI_DSI1.PWM0.OUT, LSIO.GPIO1.IO22 */ +#define SC_P_MIPI_DSI1_GPIO0_01 70/*!< MIPI_DSI1.GPIO0.IO01, LSIO.GPIO1.IO23 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_MIPIDSIGPIO 71/*!< */ +#define SC_P_MIPI_CSI0_MCLK_OUT 72/*!< MIPI_CSI0.ACM.MCLK_OUT, LSIO.GPIO1.IO24 */ +#define SC_P_MIPI_CSI0_I2C0_SCL 73/*!< MIPI_CSI0.I2C0.SCL, LSIO.GPIO1.IO25 */ +#define SC_P_MIPI_CSI0_I2C0_SDA 74/*!< MIPI_CSI0.I2C0.SDA, LSIO.GPIO1.IO26 */ +#define SC_P_MIPI_CSI0_GPIO0_00 75/*!< MIPI_CSI0.GPIO0.IO00, DMA.I2C0.SCL, MIPI_CSI1.I2C0.SCL, LSIO.GPIO1.IO27 */ +#define SC_P_MIPI_CSI0_GPIO0_01 76/*!< MIPI_CSI0.GPIO0.IO01, DMA.I2C0.SDA, MIPI_CSI1.I2C0.SDA, LSIO.GPIO1.IO28 */ +#define SC_P_MIPI_CSI1_MCLK_OUT 77/*!< MIPI_CSI1.ACM.MCLK_OUT, LSIO.GPIO1.IO29 */ +#define SC_P_MIPI_CSI1_GPIO0_00 78/*!< MIPI_CSI1.GPIO0.IO00, DMA.UART4.RX, LSIO.GPIO1.IO30 */ +#define SC_P_MIPI_CSI1_GPIO0_01 79/*!< MIPI_CSI1.GPIO0.IO01, DMA.UART4.TX, LSIO.GPIO1.IO31 */ +#define SC_P_MIPI_CSI1_I2C0_SCL 80/*!< MIPI_CSI1.I2C0.SCL, LSIO.GPIO2.IO00 */ +#define SC_P_MIPI_CSI1_I2C0_SDA 81/*!< MIPI_CSI1.I2C0.SDA, LSIO.GPIO2.IO01 */ +#define SC_P_HDMI_TX0_TS_SCL 82/*!< HDMI_TX0.I2C0.SCL, DMA.I2C0.SCL, LSIO.GPIO2.IO02 */ +#define SC_P_HDMI_TX0_TS_SDA 83/*!< HDMI_TX0.I2C0.SDA, DMA.I2C0.SDA, LSIO.GPIO2.IO03 */ +#define SC_P_COMP_CTL_GPIO_3V3_HDMIGPIO 84/*!< */ +#define SC_P_ESAI1_FSR 85/*!< AUD.ESAI1.FSR, LSIO.GPIO2.IO04 */ +#define SC_P_ESAI1_FST 86/*!< AUD.ESAI1.FST, AUD.SPDIF0.EXT_CLK, LSIO.GPIO2.IO05 */ +#define SC_P_ESAI1_SCKR 87/*!< AUD.ESAI1.SCKR, LSIO.GPIO2.IO06 */ +#define SC_P_ESAI1_SCKT 88/*!< AUD.ESAI1.SCKT, AUD.SAI2.RXC, AUD.SPDIF0.EXT_CLK, LSIO.GPIO2.IO07 */ +#define SC_P_ESAI1_TX0 89/*!< AUD.ESAI1.TX0, AUD.SAI2.RXD, AUD.SPDIF0.RX, LSIO.GPIO2.IO08 */ +#define SC_P_ESAI1_TX1 90/*!< AUD.ESAI1.TX1, AUD.SAI2.RXFS, AUD.SPDIF0.TX, LSIO.GPIO2.IO09 */ +#define SC_P_ESAI1_TX2_RX3 91/*!< AUD.ESAI1.TX2_RX3, AUD.SPDIF0.RX, LSIO.GPIO2.IO10 */ +#define SC_P_ESAI1_TX3_RX2 92/*!< AUD.ESAI1.TX3_RX2, AUD.SPDIF0.TX, LSIO.GPIO2.IO11 */ +#define SC_P_ESAI1_TX4_RX1 93/*!< AUD.ESAI1.TX4_RX1, LSIO.GPIO2.IO12 */ +#define SC_P_ESAI1_TX5_RX0 94/*!< AUD.ESAI1.TX5_RX0, LSIO.GPIO2.IO13 */ +#define SC_P_SPDIF0_RX 95/*!< AUD.SPDIF0.RX, AUD.MQS.R, AUD.ACM.MCLK_IN1, LSIO.GPIO2.IO14 */ +#define SC_P_SPDIF0_TX 96/*!< AUD.SPDIF0.TX, AUD.MQS.L, AUD.ACM.MCLK_OUT1, LSIO.GPIO2.IO15 */ +#define SC_P_SPDIF0_EXT_CLK 97/*!< AUD.SPDIF0.EXT_CLK, DMA.DMA0.REQ_IN0, LSIO.GPIO2.IO16 */ +#define SC_P_SPI3_SCK 98/*!< DMA.SPI3.SCK, LSIO.GPIO2.IO17 */ +#define SC_P_SPI3_SDO 99/*!< DMA.SPI3.SDO, DMA.FTM.CH0, LSIO.GPIO2.IO18 */ +#define SC_P_SPI3_SDI 100/*!< DMA.SPI3.SDI, DMA.FTM.CH1, LSIO.GPIO2.IO19 */ +#define SC_P_SPI3_CS0 101/*!< DMA.SPI3.CS0, DMA.FTM.CH2, LSIO.GPIO2.IO20 */ +#define SC_P_SPI3_CS1 102/*!< DMA.SPI3.CS1, LSIO.GPIO2.IO21 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_GPIORHB 103/*!< */ +#define SC_P_ESAI0_FSR 104/*!< AUD.ESAI0.FSR, LSIO.GPIO2.IO22 */ +#define SC_P_ESAI0_FST 105/*!< AUD.ESAI0.FST, LSIO.GPIO2.IO23 */ +#define SC_P_ESAI0_SCKR 106/*!< AUD.ESAI0.SCKR, LSIO.GPIO2.IO24 */ +#define SC_P_ESAI0_SCKT 107/*!< AUD.ESAI0.SCKT, LSIO.GPIO2.IO25 */ +#define SC_P_ESAI0_TX0 108/*!< AUD.ESAI0.TX0, LSIO.GPIO2.IO26 */ +#define SC_P_ESAI0_TX1 109/*!< AUD.ESAI0.TX1, LSIO.GPIO2.IO27 */ +#define SC_P_ESAI0_TX2_RX3 110/*!< AUD.ESAI0.TX2_RX3, LSIO.GPIO2.IO28 */ +#define SC_P_ESAI0_TX3_RX2 111/*!< AUD.ESAI0.TX3_RX2, LSIO.GPIO2.IO29 */ +#define SC_P_ESAI0_TX4_RX1 112/*!< AUD.ESAI0.TX4_RX1, LSIO.GPIO2.IO30 */ +#define SC_P_ESAI0_TX5_RX0 113/*!< AUD.ESAI0.TX5_RX0, LSIO.GPIO2.IO31 */ +#define SC_P_MCLK_IN0 114/*!< AUD.ACM.MCLK_IN0, AUD.ESAI0.RX_HF_CLK, AUD.ESAI1.RX_HF_CLK, LSIO.GPIO3.IO00 */ +#define SC_P_MCLK_OUT0 115/*!< AUD.ACM.MCLK_OUT0, AUD.ESAI0.TX_HF_CLK, AUD.ESAI1.TX_HF_CLK, LSIO.GPIO3.IO01 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_GPIORHC 116/*!< */ +#define SC_P_SPI0_SCK 117/*!< DMA.SPI0.SCK, AUD.SAI0.RXC, LSIO.GPIO3.IO02 */ +#define SC_P_SPI0_SDO 118/*!< DMA.SPI0.SDO, AUD.SAI0.TXD, LSIO.GPIO3.IO03 */ +#define SC_P_SPI0_SDI 119/*!< DMA.SPI0.SDI, AUD.SAI0.RXD, LSIO.GPIO3.IO04 */ +#define SC_P_SPI0_CS0 120/*!< DMA.SPI0.CS0, AUD.SAI0.RXFS, LSIO.GPIO3.IO05 */ +#define SC_P_SPI0_CS1 121/*!< DMA.SPI0.CS1, AUD.SAI0.TXC, LSIO.GPIO3.IO06 */ +#define SC_P_SPI2_SCK 122/*!< DMA.SPI2.SCK, LSIO.GPIO3.IO07 */ +#define SC_P_SPI2_SDO 123/*!< DMA.SPI2.SDO, LSIO.GPIO3.IO08 */ +#define SC_P_SPI2_SDI 124/*!< DMA.SPI2.SDI, LSIO.GPIO3.IO09 */ +#define SC_P_SPI2_CS0 125/*!< DMA.SPI2.CS0, LSIO.GPIO3.IO10 */ +#define SC_P_SPI2_CS1 126/*!< DMA.SPI2.CS1, AUD.SAI0.TXFS, LSIO.GPIO3.IO11 */ +#define SC_P_SAI1_RXC 127/*!< AUD.SAI1.RXC, AUD.SAI0.TXD, LSIO.GPIO3.IO12 */ +#define SC_P_SAI1_RXD 128/*!< AUD.SAI1.RXD, AUD.SAI0.TXFS, LSIO.GPIO3.IO13 */ +#define SC_P_SAI1_RXFS 129/*!< AUD.SAI1.RXFS, AUD.SAI0.RXD, LSIO.GPIO3.IO14 */ +#define SC_P_SAI1_TXC 130/*!< AUD.SAI1.TXC, AUD.SAI0.TXC, LSIO.GPIO3.IO15 */ +#define SC_P_SAI1_TXD 131/*!< AUD.SAI1.TXD, AUD.SAI1.RXC, LSIO.GPIO3.IO16 */ +#define SC_P_SAI1_TXFS 132/*!< AUD.SAI1.TXFS, AUD.SAI1.RXFS, LSIO.GPIO3.IO17 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_GPIORHT 133/*!< */ +#define SC_P_ADC_IN7 134/*!< DMA.ADC1.IN3, DMA.SPI1.CS1, LSIO.KPP0.ROW3, LSIO.GPIO3.IO25 */ +#define SC_P_ADC_IN6 135/*!< DMA.ADC1.IN2, DMA.SPI1.CS0, LSIO.KPP0.ROW2, LSIO.GPIO3.IO24 */ +#define SC_P_ADC_IN5 136/*!< DMA.ADC1.IN1, DMA.SPI1.SDI, LSIO.KPP0.ROW1, LSIO.GPIO3.IO23 */ +#define SC_P_ADC_IN4 137/*!< DMA.ADC1.IN0, DMA.SPI1.SDO, LSIO.KPP0.ROW0, LSIO.GPIO3.IO22 */ +#define SC_P_ADC_IN3 138/*!< DMA.ADC0.IN3, DMA.SPI1.SCK, LSIO.KPP0.COL3, LSIO.GPIO3.IO21 */ +#define SC_P_ADC_IN2 139/*!< DMA.ADC0.IN2, LSIO.KPP0.COL2, LSIO.GPIO3.IO20 */ +#define SC_P_ADC_IN1 140/*!< DMA.ADC0.IN1, LSIO.KPP0.COL1, LSIO.GPIO3.IO19 */ +#define SC_P_ADC_IN0 141/*!< DMA.ADC0.IN0, LSIO.KPP0.COL0, LSIO.GPIO3.IO18 */ +#define SC_P_MLB_SIG 142/*!< CONN.MLB.SIG, AUD.SAI3.RXC, LSIO.GPIO3.IO26 */ +#define SC_P_MLB_CLK 143/*!< CONN.MLB.CLK, AUD.SAI3.RXFS, LSIO.GPIO3.IO27 */ +#define SC_P_MLB_DATA 144/*!< CONN.MLB.DATA, AUD.SAI3.RXD, LSIO.GPIO3.IO28 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_GPIOLHT 145/*!< */ +#define SC_P_FLEXCAN0_RX 146/*!< DMA.FLEXCAN0.RX, LSIO.GPIO3.IO29 */ +#define SC_P_FLEXCAN0_TX 147/*!< DMA.FLEXCAN0.TX, LSIO.GPIO3.IO30 */ +#define SC_P_FLEXCAN1_RX 148/*!< DMA.FLEXCAN1.RX, LSIO.GPIO3.IO31 */ +#define SC_P_FLEXCAN1_TX 149/*!< DMA.FLEXCAN1.TX, LSIO.GPIO4.IO00 */ +#define SC_P_FLEXCAN2_RX 150/*!< DMA.FLEXCAN2.RX, LSIO.GPIO4.IO01 */ +#define SC_P_FLEXCAN2_TX 151/*!< DMA.FLEXCAN2.TX, LSIO.GPIO4.IO02 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_GPIOTHR 152/*!< */ +#define SC_P_USB_SS3_TC0 153/*!< DMA.I2C1.SCL, CONN.USB_OTG1.PWR, LSIO.GPIO4.IO03 */ +#define SC_P_USB_SS3_TC1 154/*!< DMA.I2C1.SCL, CONN.USB_OTG2.PWR, LSIO.GPIO4.IO04 */ +#define SC_P_USB_SS3_TC2 155/*!< DMA.I2C1.SDA, CONN.USB_OTG1.OC, LSIO.GPIO4.IO05 */ +#define SC_P_USB_SS3_TC3 156/*!< DMA.I2C1.SDA, CONN.USB_OTG2.OC, LSIO.GPIO4.IO06 */ +#define SC_P_COMP_CTL_GPIO_3V3_USB3IO 157/*!< */ +#define SC_P_USDHC1_RESET_B 158/*!< CONN.USDHC1.RESET_B, LSIO.GPIO4.IO07 */ +#define SC_P_USDHC1_VSELECT 159/*!< CONN.USDHC1.VSELECT, LSIO.GPIO4.IO08 */ +#define SC_P_USDHC2_RESET_B 160/*!< CONN.USDHC2.RESET_B, LSIO.GPIO4.IO09 */ +#define SC_P_USDHC2_VSELECT 161/*!< CONN.USDHC2.VSELECT, LSIO.GPIO4.IO10 */ +#define SC_P_USDHC2_WP 162/*!< CONN.USDHC2.WP, LSIO.GPIO4.IO11 */ +#define SC_P_USDHC2_CD_B 163/*!< CONN.USDHC2.CD_B, LSIO.GPIO4.IO12 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_VSELSEP 164/*!< */ +#define SC_P_ENET0_MDIO 165/*!< CONN.ENET0.MDIO, DMA.I2C4.SDA, LSIO.GPIO4.IO13 */ +#define SC_P_ENET0_MDC 166/*!< CONN.ENET0.MDC, DMA.I2C4.SCL, LSIO.GPIO4.IO14 */ +#define SC_P_ENET0_REFCLK_125M_25M 167/*!< CONN.ENET0.REFCLK_125M_25M, CONN.ENET0.PPS, LSIO.GPIO4.IO15 */ +#define SC_P_ENET1_REFCLK_125M_25M 168/*!< CONN.ENET1.REFCLK_125M_25M, CONN.ENET1.PPS, LSIO.GPIO4.IO16 */ +#define SC_P_ENET1_MDIO 169/*!< CONN.ENET1.MDIO, DMA.I2C4.SDA, LSIO.GPIO4.IO17 */ +#define SC_P_ENET1_MDC 170/*!< CONN.ENET1.MDC, DMA.I2C4.SCL, LSIO.GPIO4.IO18 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_GPIOCT 171/*!< */ +#define SC_P_QSPI1A_SS0_B 172/*!< LSIO.QSPI1A.SS0_B, LSIO.GPIO4.IO19 */ +#define SC_P_QSPI1A_SS1_B 173/*!< LSIO.QSPI1A.SS1_B, LSIO.QSPI1A.SCLK2, LSIO.GPIO4.IO20 */ +#define SC_P_QSPI1A_SCLK 174/*!< LSIO.QSPI1A.SCLK, LSIO.GPIO4.IO21 */ +#define SC_P_QSPI1A_DQS 175/*!< LSIO.QSPI1A.DQS, LSIO.GPIO4.IO22 */ +#define SC_P_QSPI1A_DATA3 176/*!< LSIO.QSPI1A.DATA3, DMA.I2C1.SDA, CONN.USB_OTG1.OC, LSIO.GPIO4.IO23 */ +#define SC_P_QSPI1A_DATA2 177/*!< LSIO.QSPI1A.DATA2, DMA.I2C1.SCL, CONN.USB_OTG2.PWR, LSIO.GPIO4.IO24 */ +#define SC_P_QSPI1A_DATA1 178/*!< LSIO.QSPI1A.DATA1, DMA.I2C1.SDA, CONN.USB_OTG2.OC, LSIO.GPIO4.IO25 */ +#define SC_P_QSPI1A_DATA0 179/*!< LSIO.QSPI1A.DATA0, LSIO.GPIO4.IO26 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_QSPI1 180/*!< */ +#define SC_P_QSPI0A_DATA0 181/*!< LSIO.QSPI0A.DATA0 */ +#define SC_P_QSPI0A_DATA1 182/*!< LSIO.QSPI0A.DATA1 */ +#define SC_P_QSPI0A_DATA2 183/*!< LSIO.QSPI0A.DATA2 */ +#define SC_P_QSPI0A_DATA3 184/*!< LSIO.QSPI0A.DATA3 */ +#define SC_P_QSPI0A_DQS 185/*!< LSIO.QSPI0A.DQS */ +#define SC_P_QSPI0A_SS0_B 186/*!< LSIO.QSPI0A.SS0_B */ +#define SC_P_QSPI0A_SS1_B 187/*!< LSIO.QSPI0A.SS1_B, LSIO.QSPI0A.SCLK2 */ +#define SC_P_QSPI0A_SCLK 188/*!< LSIO.QSPI0A.SCLK */ +#define SC_P_QSPI0B_SCLK 189/*!< LSIO.QSPI0B.SCLK */ +#define SC_P_QSPI0B_DATA0 190/*!< LSIO.QSPI0B.DATA0 */ +#define SC_P_QSPI0B_DATA1 191/*!< LSIO.QSPI0B.DATA1 */ +#define SC_P_QSPI0B_DATA2 192/*!< LSIO.QSPI0B.DATA2 */ +#define SC_P_QSPI0B_DATA3 193/*!< LSIO.QSPI0B.DATA3 */ +#define SC_P_QSPI0B_DQS 194/*!< LSIO.QSPI0B.DQS */ +#define SC_P_QSPI0B_SS0_B 195/*!< LSIO.QSPI0B.SS0_B */ +#define SC_P_QSPI0B_SS1_B 196/*!< LSIO.QSPI0B.SS1_B, LSIO.QSPI0B.SCLK2 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_QSPI0 197/*!< */ +#define SC_P_PCIE_CTRL0_CLKREQ_B 198/*!< HSIO.PCIE0.CLKREQ_B, LSIO.GPIO4.IO27 */ +#define SC_P_PCIE_CTRL0_WAKE_B 199/*!< HSIO.PCIE0.WAKE_B, LSIO.GPIO4.IO28 */ +#define SC_P_PCIE_CTRL0_PERST_B 200/*!< HSIO.PCIE0.PERST_B, LSIO.GPIO4.IO29 */ +#define SC_P_PCIE_CTRL1_CLKREQ_B 201/*!< HSIO.PCIE1.CLKREQ_B, DMA.I2C1.SDA, CONN.USB_OTG2.OC, LSIO.GPIO4.IO30 */ +#define SC_P_PCIE_CTRL1_WAKE_B 202/*!< HSIO.PCIE1.WAKE_B, DMA.I2C1.SCL, CONN.USB_OTG2.PWR, LSIO.GPIO4.IO31 */ +#define SC_P_PCIE_CTRL1_PERST_B 203/*!< HSIO.PCIE1.PERST_B, DMA.I2C1.SCL, CONN.USB_OTG1.PWR, LSIO.GPIO5.IO00 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_PCIESEP 204/*!< */ +#define SC_P_USB_HSIC0_DATA 205/*!< CONN.USB_HSIC0.DATA, DMA.I2C1.SDA, LSIO.GPIO5.IO01 */ +#define SC_P_USB_HSIC0_STROBE 206/*!< CONN.USB_HSIC0.STROBE, DMA.I2C1.SCL, LSIO.GPIO5.IO02 */ +#define SC_P_CALIBRATION_0_HSIC 207/*!< */ +#define SC_P_CALIBRATION_1_HSIC 208/*!< */ +#define SC_P_EMMC0_CLK 209/*!< CONN.EMMC0.CLK, CONN.NAND.READY_B */ +#define SC_P_EMMC0_CMD 210/*!< CONN.EMMC0.CMD, CONN.NAND.DQS, AUD.MQS.R, LSIO.GPIO5.IO03 */ +#define SC_P_EMMC0_DATA0 211/*!< CONN.EMMC0.DATA0, CONN.NAND.DATA00, LSIO.GPIO5.IO04 */ +#define SC_P_EMMC0_DATA1 212/*!< CONN.EMMC0.DATA1, CONN.NAND.DATA01, LSIO.GPIO5.IO05 */ +#define SC_P_EMMC0_DATA2 213/*!< CONN.EMMC0.DATA2, CONN.NAND.DATA02, LSIO.GPIO5.IO06 */ +#define SC_P_EMMC0_DATA3 214/*!< CONN.EMMC0.DATA3, CONN.NAND.DATA03, LSIO.GPIO5.IO07 */ +#define SC_P_EMMC0_DATA4 215/*!< CONN.EMMC0.DATA4, CONN.NAND.DATA04, LSIO.GPIO5.IO08 */ +#define SC_P_EMMC0_DATA5 216/*!< CONN.EMMC0.DATA5, CONN.NAND.DATA05, LSIO.GPIO5.IO09 */ +#define SC_P_EMMC0_DATA6 217/*!< CONN.EMMC0.DATA6, CONN.NAND.DATA06, LSIO.GPIO5.IO10 */ +#define SC_P_EMMC0_DATA7 218/*!< CONN.EMMC0.DATA7, CONN.NAND.DATA07, LSIO.GPIO5.IO11 */ +#define SC_P_EMMC0_STROBE 219/*!< CONN.EMMC0.STROBE, CONN.NAND.CLE, LSIO.GPIO5.IO12 */ +#define SC_P_EMMC0_RESET_B 220/*!< CONN.EMMC0.RESET_B, CONN.NAND.WP_B, CONN.USDHC1.VSELECT, LSIO.GPIO5.IO13 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_SD1FIX 221/*!< */ +#define SC_P_USDHC1_CLK 222/*!< CONN.USDHC1.CLK, AUD.MQS.R */ +#define SC_P_USDHC1_CMD 223/*!< CONN.USDHC1.CMD, AUD.MQS.L, LSIO.GPIO5.IO14 */ +#define SC_P_USDHC1_DATA0 224/*!< CONN.USDHC1.DATA0, CONN.NAND.RE_N, LSIO.GPIO5.IO15 */ +#define SC_P_USDHC1_DATA1 225/*!< CONN.USDHC1.DATA1, CONN.NAND.RE_P, LSIO.GPIO5.IO16 */ +#define SC_P_CTL_NAND_RE_P_N 226/*!< */ +#define SC_P_USDHC1_DATA2 227/*!< CONN.USDHC1.DATA2, CONN.NAND.DQS_N, LSIO.GPIO5.IO17 */ +#define SC_P_USDHC1_DATA3 228/*!< CONN.USDHC1.DATA3, CONN.NAND.DQS_P, LSIO.GPIO5.IO18 */ +#define SC_P_CTL_NAND_DQS_P_N 229/*!< */ +#define SC_P_USDHC1_DATA4 230/*!< CONN.USDHC1.DATA4, CONN.NAND.CE0_B, AUD.MQS.R, LSIO.GPIO5.IO19 */ +#define SC_P_USDHC1_DATA5 231/*!< CONN.USDHC1.DATA5, CONN.NAND.RE_B, AUD.MQS.L, LSIO.GPIO5.IO20 */ +#define SC_P_USDHC1_DATA6 232/*!< CONN.USDHC1.DATA6, CONN.NAND.WE_B, CONN.USDHC1.WP, LSIO.GPIO5.IO21 */ +#define SC_P_USDHC1_DATA7 233/*!< CONN.USDHC1.DATA7, CONN.NAND.ALE, CONN.USDHC1.CD_B, LSIO.GPIO5.IO22 */ +#define SC_P_USDHC1_STROBE 234/*!< CONN.USDHC1.STROBE, CONN.NAND.CE1_B, CONN.USDHC1.RESET_B, LSIO.GPIO5.IO23 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_VSEL2 235/*!< */ +#define SC_P_USDHC2_CLK 236/*!< CONN.USDHC2.CLK, AUD.MQS.R, LSIO.GPIO5.IO24 */ +#define SC_P_USDHC2_CMD 237/*!< CONN.USDHC2.CMD, AUD.MQS.L, LSIO.GPIO5.IO25 */ +#define SC_P_USDHC2_DATA0 238/*!< CONN.USDHC2.DATA0, DMA.UART4.RX, LSIO.GPIO5.IO26 */ +#define SC_P_USDHC2_DATA1 239/*!< CONN.USDHC2.DATA1, DMA.UART4.TX, LSIO.GPIO5.IO27 */ +#define SC_P_USDHC2_DATA2 240/*!< CONN.USDHC2.DATA2, DMA.UART4.CTS_B, LSIO.GPIO5.IO28 */ +#define SC_P_USDHC2_DATA3 241/*!< CONN.USDHC2.DATA3, DMA.UART4.RTS_B, LSIO.GPIO5.IO29 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_VSEL3 242/*!< */ +#define SC_P_ENET0_RGMII_TXC 243/*!< CONN.ENET0.RGMII_TXC, CONN.ENET0.RCLK50M_OUT, CONN.ENET0.RCLK50M_IN, LSIO.GPIO5.IO30 */ +#define SC_P_ENET0_RGMII_TX_CTL 244/*!< CONN.ENET0.RGMII_TX_CTL, LSIO.GPIO5.IO31 */ +#define SC_P_ENET0_RGMII_TXD0 245/*!< CONN.ENET0.RGMII_TXD0, LSIO.GPIO6.IO00 */ +#define SC_P_ENET0_RGMII_TXD1 246/*!< CONN.ENET0.RGMII_TXD1, LSIO.GPIO6.IO01 */ +#define SC_P_ENET0_RGMII_TXD2 247/*!< CONN.ENET0.RGMII_TXD2, DMA.UART3.TX, VPU.TSI_S1.VID, LSIO.GPIO6.IO02 */ +#define SC_P_ENET0_RGMII_TXD3 248/*!< CONN.ENET0.RGMII_TXD3, DMA.UART3.RTS_B, VPU.TSI_S1.SYNC, LSIO.GPIO6.IO03 */ +#define SC_P_ENET0_RGMII_RXC 249/*!< CONN.ENET0.RGMII_RXC, DMA.UART3.CTS_B, VPU.TSI_S1.DATA, LSIO.GPIO6.IO04 */ +#define SC_P_ENET0_RGMII_RX_CTL 250/*!< CONN.ENET0.RGMII_RX_CTL, VPU.TSI_S0.VID, LSIO.GPIO6.IO05 */ +#define SC_P_ENET0_RGMII_RXD0 251/*!< CONN.ENET0.RGMII_RXD0, VPU.TSI_S0.SYNC, LSIO.GPIO6.IO06 */ +#define SC_P_ENET0_RGMII_RXD1 252/*!< CONN.ENET0.RGMII_RXD1, VPU.TSI_S0.DATA, LSIO.GPIO6.IO07 */ +#define SC_P_ENET0_RGMII_RXD2 253/*!< CONN.ENET0.RGMII_RXD2, CONN.ENET0.RMII_RX_ER, VPU.TSI_S0.CLK, LSIO.GPIO6.IO08 */ +#define SC_P_ENET0_RGMII_RXD3 254/*!< CONN.ENET0.RGMII_RXD3, DMA.UART3.RX, VPU.TSI_S1.CLK, LSIO.GPIO6.IO09 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_ENET_ENETB 255/*!< */ +#define SC_P_ENET1_RGMII_TXC 256/*!< CONN.ENET1.RGMII_TXC, CONN.ENET1.RCLK50M_OUT, CONN.ENET1.RCLK50M_IN, LSIO.GPIO6.IO10 */ +#define SC_P_ENET1_RGMII_TX_CTL 257/*!< CONN.ENET1.RGMII_TX_CTL, LSIO.GPIO6.IO11 */ +#define SC_P_ENET1_RGMII_TXD0 258/*!< CONN.ENET1.RGMII_TXD0, LSIO.GPIO6.IO12 */ +#define SC_P_ENET1_RGMII_TXD1 259/*!< CONN.ENET1.RGMII_TXD1, LSIO.GPIO6.IO13 */ +#define SC_P_ENET1_RGMII_TXD2 260/*!< CONN.ENET1.RGMII_TXD2, DMA.UART3.TX, VPU.TSI_S1.VID, LSIO.GPIO6.IO14 */ +#define SC_P_ENET1_RGMII_TXD3 261/*!< CONN.ENET1.RGMII_TXD3, DMA.UART3.RTS_B, VPU.TSI_S1.SYNC, LSIO.GPIO6.IO15 */ +#define SC_P_ENET1_RGMII_RXC 262/*!< CONN.ENET1.RGMII_RXC, DMA.UART3.CTS_B, VPU.TSI_S1.DATA, LSIO.GPIO6.IO16 */ +#define SC_P_ENET1_RGMII_RX_CTL 263/*!< CONN.ENET1.RGMII_RX_CTL, VPU.TSI_S0.VID, LSIO.GPIO6.IO17 */ +#define SC_P_ENET1_RGMII_RXD0 264/*!< CONN.ENET1.RGMII_RXD0, VPU.TSI_S0.SYNC, LSIO.GPIO6.IO18 */ +#define SC_P_ENET1_RGMII_RXD1 265/*!< CONN.ENET1.RGMII_RXD1, VPU.TSI_S0.DATA, LSIO.GPIO6.IO19 */ +#define SC_P_ENET1_RGMII_RXD2 266/*!< CONN.ENET1.RGMII_RXD2, CONN.ENET1.RMII_RX_ER, VPU.TSI_S0.CLK, LSIO.GPIO6.IO20 */ +#define SC_P_ENET1_RGMII_RXD3 267/*!< CONN.ENET1.RGMII_RXD3, DMA.UART3.RX, VPU.TSI_S1.CLK, LSIO.GPIO6.IO21 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_ENET_ENETA 268/*!< */ +/*@}*/ + +#endif /* SC_PADS_H */ +
arch/arm/include/asm/arch-imx8/imx8qxp_pads.h new file +200 -0
200 lines not on this page · raw message
arch/arm/include/asm/arch-imx8/sci/ipc.h new file +67 -0
67 lines not on this page · raw message
arch/arm/include/asm/arch-imx8/sci/rpc.h new file +131 -0
131 lines not on this page · raw message
arch/arm/include/asm/arch-imx8/sci/svc/irq/api.h new file +160 -0
160 lines not on this page · raw message
arch/arm/include/asm/arch-imx8/sci/svc/misc/api.h new file +523 -0
523 lines not on this page · raw message
arch/arm/include/asm/arch-imx8/sci/svc/pad/api.h new file +568 -0
568 lines not on this page · raw message
arch/arm/include/asm/arch-imx8/sci/svc/pm/api.h new file +686 -0
686 lines not on this page · raw message
arch/arm/include/asm/arch-imx8/sci/svc/rm/api.h new file +759 -0
370 lines not on this page · raw message
arch/arm/include/asm/arch-imx8/sci/svc/timer/api.h new file +306 -0
306 lines not on this page · raw message
arch/arm/include/asm/arch-imx8/sci/types.h new file +862 -0
862 lines not on this page · raw message
arch/arm/mach-imx/imx8/Makefile new file +11 -0
Lines of this file are not shown. View the raw message.
arch/arm/mach-imx/imx8/sci/svc/irq/rpc.h new file +54 -0
54 lines not on this page · raw message
arch/arm/mach-imx/imx8/sci/svc/irq/rpc_clnt.c new file +76 -0
76 lines not on this page · raw message
arch/arm/mach-imx/imx8/sci/svc/misc/rpc.h new file +76 -0
76 lines not on this page · raw message
arch/arm/mach-imx/imx8/sci/svc/misc/rpc_clnt.c new file +515 -0
515 lines not on this page · raw message
arch/arm/mach-imx/imx8/sci/svc/pad/rpc.h new file +68 -0
68 lines not on this page · raw message
arch/arm/mach-imx/imx8/sci/svc/pad/rpc_clnt.c new file +475 -0
475 lines not on this page · raw message
arch/arm/mach-imx/imx8/sci/svc/pm/rpc.h new file +73 -0
73 lines not on this page · raw message
arch/arm/mach-imx/imx8/sci/svc/pm/rpc_clnt.c new file +460 -0
460 lines not on this page · raw message
arch/arm/mach-imx/imx8/sci/svc/rm/rpc.h new file +83 -0
83 lines not on this page · raw message
arch/arm/mach-imx/imx8/sci/svc/rm/rpc_clnt.c new file +645 -0
645 lines not on this page · raw message
arch/arm/mach-imx/imx8/sci/svc/timer/rpc.h new file +67 -0
67 lines not on this page · raw message
arch/arm/mach-imx/imx8/sci/svc/timer/rpc_clnt.c new file +365 -0
365 lines not on this page · raw message
include/dt-bindings/pinctrl/pads-imx8qm.h new file +975 -0
975 lines not on this page · raw message
include/dt-bindings/pinctrl/pads-imx8qxp.h new file +770 -0
770 lines not on this page · raw message
include/dt-bindings/soc/imx_rsrc.h new file +560 -0
560 lines not on this page · raw message
The rest of this diff is not shown. View the raw message.
Signature · 1 line
2.14.1
Part of the diff is not shown here. View the raw message.
Peng Fan
reviewerPATCH 1/41 imx: import SCFW API
Hi Stefano, Fabio,
Do you have any comments on the patchset?
Thanks,
Peng.
Quoted 12,558 lines
-----Original Message-----
From: Peng Fan
Sent: 2018年5月28日 20:25
To: sbabic at denx.de; Fabio Estevam <[email protected]>
Cc: u-boot at lists.denx.de; Peng Fan <[email protected]>
Subject: [PATCH 01/41] imx: import SCFW APIThe SCFW API files are generated from scfw source code and imported to U-Boot source code withou code changes.
The commit in SCFW is
commita5759de95691("SCF-69 Fix the voltage for 1.06GHz setpoint on A72.")Signed-off-by Peng Fan <[email protected]>--- arch/arm/include/asm/arch-imx8/imx8qm_pads.h | 295 +++++++ arch/arm/include/asm/arch-imx8/imx8qxp_pads.h | 200 +++++ arch/arm/include/asm/arch-imx8/sci/ipc.h | 67 ++ arch/arm/include/asm/arch-imx8/sci/rpc.h | 131 +++ arch/arm/include/asm/arch-imx8/sci/svc/irq/api.h | 160 ++++ arch/arm/include/asm/arch-imx8/sci/svc/misc/api.h | 523 +++++++++++ arch/arm/include/asm/arch-imx8/sci/svc/pad/api.h | 568 ++++++++++++ arch/arm/include/asm/arch-imx8/sci/svc/pm/api.h | 686 +++++++++++++++ arch/arm/include/asm/arch-imx8/sci/svc/rm/api.h | 759 ++++++++++++++++ arch/arm/include/asm/arch-imx8/sci/svc/timer/api.h | 306 +++++++ arch/arm/include/asm/arch-imx8/sci/types.h | 862 ++++++++++++++++++ arch/arm/mach-imx/imx8/Makefile | 11 + arch/arm/mach-imx/imx8/sci/svc/irq/rpc.h | 54 ++ arch/arm/mach-imx/imx8/sci/svc/irq/rpc_clnt.c | 76 ++ arch/arm/mach-imx/imx8/sci/svc/misc/rpc.h | 76 ++ arch/arm/mach-imx/imx8/sci/svc/misc/rpc_clnt.c | 515 +++++++++++ arch/arm/mach-imx/imx8/sci/svc/pad/rpc.h | 68 ++ arch/arm/mach-imx/imx8/sci/svc/pad/rpc_clnt.c | 475 ++++++++++ arch/arm/mach-imx/imx8/sci/svc/pm/rpc.h | 73 ++ arch/arm/mach-imx/imx8/sci/svc/pm/rpc_clnt.c | 460 ++++++++++ arch/arm/mach-imx/imx8/sci/svc/rm/rpc.h | 83 ++ arch/arm/mach-imx/imx8/sci/svc/rm/rpc_clnt.c | 645 ++++++++++++++ arch/arm/mach-imx/imx8/sci/svc/timer/rpc.h | 67 ++ arch/arm/mach-imx/imx8/sci/svc/timer/rpc_clnt.c | 365 ++++++++ include/dt-bindings/pinctrl/pads-imx8qm.h | 975 +++++++++++++++++++++ include/dt-bindings/pinctrl/pads-imx8qxp.h | 770 ++++++++++++++++ include/dt-bindings/soc/imx_rsrc.h | 560 ++++++++++++ 27 files changed, 9830 insertions(+) create mode 100644 arch/arm/include/asm/arch-imx8/imx8qm_pads.h create mode 100644 arch/arm/include/asm/arch-imx8/imx8qxp_pads.h create mode 100755 arch/arm/include/asm/arch-imx8/sci/ipc.h create mode 100755 arch/arm/include/asm/arch-imx8/sci/rpc.h create mode 100755 arch/arm/include/asm/arch-imx8/sci/svc/irq/api.h create mode 100755 arch/arm/include/asm/arch-imx8/sci/svc/misc/api.h create mode 100755 arch/arm/include/asm/arch-imx8/sci/svc/pad/api.h create mode 100755 arch/arm/include/asm/arch-imx8/sci/svc/pm/api.h create mode 100755 arch/arm/include/asm/arch-imx8/sci/svc/rm/api.h create mode 100755 arch/arm/include/asm/arch-imx8/sci/svc/timer/api.h create mode 100755 arch/arm/include/asm/arch-imx8/sci/types.h create mode 100644 arch/arm/mach-imx/imx8/Makefile create mode 100644 arch/arm/mach-imx/imx8/sci/svc/irq/rpc.h create mode 100644 arch/arm/mach-imx/imx8/sci/svc/irq/rpc_clnt.c create mode 100644 arch/arm/mach-imx/imx8/sci/svc/misc/rpc.h create mode 100644 arch/arm/mach-imx/imx8/sci/svc/misc/rpc_clnt.c create mode 100644 arch/arm/mach-imx/imx8/sci/svc/pad/rpc.h create mode 100644 arch/arm/mach-imx/imx8/sci/svc/pad/rpc_clnt.c create mode 100644 arch/arm/mach-imx/imx8/sci/svc/pm/rpc.h create mode 100644 arch/arm/mach-imx/imx8/sci/svc/pm/rpc_clnt.c create mode 100644 arch/arm/mach-imx/imx8/sci/svc/rm/rpc.h create mode 100644 arch/arm/mach-imx/imx8/sci/svc/rm/rpc_clnt.c create mode 100644 arch/arm/mach-imx/imx8/sci/svc/timer/rpc.h create mode 100644 arch/arm/mach-imx/imx8/sci/svc/timer/rpc_clnt.c create mode 100644 include/dt-bindings/pinctrl/pads-imx8qm.h create mode 100644 include/dt-bindings/pinctrl/pads-imx8qxp.h create mode 100644 include/dt-bindings/soc/imx_rsrc.harch/arm/include/asm/arch-imx8/imx8qm_pads.h new file +23
-0@@ -0,0 +1,295 @@ +/* +* Copyright (C) 2016 Freescale Semiconductor, Inc. +* Copyright 2017-2018 NXP +* +* SPDX-License-Identifier: GPL-2.0+ +*/ + +/*! +* Header file used to configure SoC pad list. +*/ + +#ifndef SC_PADS_H +#define SC_PADS_H + +/* Includes */ + +/* Defines */ + +/*! +* @name Pad Definitions +*/ +/*@{*/ +#define SC_P_SIM0_CLK 0/*!< DMA.SIM0.CLK, LSIO.GPIO0.IO00 */
+#defineSC_P_SIM0_RST1 /*!<
DMA.SIM0.RST, LSIO.GPIO0.IO01 */
+#defineSC_P_SIM0_IO2 /*!<
DMA.SIM0.IO, LSIO.GPIO0.IO02 */
+#defineSC_P_SIM0_PD3 /*!<
DMA.SIM0.PD, DMA.I2C3.SCL, LSIO.GPIO0.IO03 */
+#defineSC_P_SIM0_POWER_EN4 /*!<
DMA.SIM0.POWER_EN, DMA.I2C3.SDA, LSIO.GPIO0.IO04 */
+#defineSC_P_SIM0_GPIO0_005 /*!<
DMA.SIM0.POWER_EN, LSIO.GPIO0.IO05 */arch/arm/include/asm/arch-imx8/imx8qm_pads.h new file +2
-0+#define SC_P_COMP_CTL_GPIO_1V8_3V3_SIM 6/*!< */ +#define SC_P_M40_I2C0_SCL 7/*!< M40.I2C0.SCL, M40.UART0.RX, M40.GPIO0.IO02, LSIO.GPIO0.IO06 */
+#defineSC_P_M40_I2C0_SDA8 /*!<
M40.I2C0.SDA, M40.UART0.TX, M40.GPIO0.IO03, LSIO.GPIO0.IO07 */
+#defineSC_P_M40_GPIO0_009 /*!<
M40.GPIO0.IO00, M40.TPM0.CH0, DMA.UART4.RX, LSIO.GPIO0.IO08 */
+#defineSC_P_M40_GPIO0_0110 /*!<
M40.GPIO0.IO01, M40.TPM0.CH1, DMA.UART4.TX, LSIO.GPIO0.IO09 */
+#defineSC_P_M41_I2C0_SCL11 /*!<
M41.I2C0.SCL, M41.UART0.RX, M41.GPIO0.IO02, LSIO.GPIO0.IO10 */
+#defineSC_P_M41_I2C0_SDA12 /*!<
M41.I2C0.SDA, M41.UART0.TX, M41.GPIO0.IO03, LSIO.GPIO0.IO11 */
+#defineSC_P_M41_GPIO0_0013 /*!<
M41.GPIO0.IO00, M41.TPM0.CH0, DMA.UART3.RX, LSIO.GPIO0.IO12 */
+#defineSC_P_M41_GPIO0_0114 /*!<
M41.GPIO0.IO01, M41.TPM0.CH1, DMA.UART3.TX, LSIO.GPIO0.IO13 */
+#defineSC_P_GPT0_CLK15 /*!<
LSIO.GPT0.CLK, DMA.I2C1.SCL, LSIO.KPP0.COL4, LSIO.GPIO0.IO14 */
+#defineSC_P_GPT0_CAPTURE16 /*!<
LSIO.GPT0.CAPTURE, DMA.I2C1.SDA, LSIO.KPP0.COL5, LSIO.GPIO0.IO15 */
+#defineSC_P_GPT0_COMPARE17 /*!<
LSIO.GPT0.COMPARE, LSIO.PWM3.OUT, LSIO.KPP0.COL6, LSIO.GPIO0.IO16 */
+#defineSC_P_GPT1_CLK18 /*!<
LSIO.GPT1.CLK, DMA.I2C2.SCL, LSIO.KPP0.COL7, LSIO.GPIO0.IO17 */
+#defineSC_P_GPT1_CAPTURE19 /*!<
LSIO.GPT1.CAPTURE, DMA.I2C2.SDA, LSIO.KPP0.ROW4, LSIO.GPIO0.IO18 */
+#defineSC_P_GPT1_COMPARE20 /*!<
LSIO.GPT1.COMPARE, LSIO.PWM2.OUT, LSIO.KPP0.ROW5, LSIO.GPIO0.IO19 */
+#defineSC_P_UART0_RX21 /*!<
DMA.UART0.RX, SCU.UART0.RX, LSIO.GPIO0.IO20 */
+#defineSC_P_UART0_TX22 /*!<
DMA.UART0.TX, SCU.UART0.TX, LSIO.GPIO0.IO21 */
+#defineSC_P_UART0_RTS_B23 /*!<
DMA.UART0.RTS_B, LSIO.PWM0.OUT, DMA.UART2.RX, LSIO.GPIO0.IO22 */
+#defineSC_P_UART0_CTS_B24 /*!<
DMA.UART0.CTS_B, LSIO.PWM1.OUT, DMA.UART2.TX, LSIO.GPIO0.IO23 */
+#defineSC_P_UART1_TX25 /*!<
DMA.UART1.TX, DMA.SPI3.SCK, LSIO.GPIO0.IO24 */
+#defineSC_P_UART1_RX26 /*!<
DMA.UART1.RX, DMA.SPI3.SDO, LSIO.GPIO0.IO25 */
+#defineSC_P_UART1_RTS_B27 /*!<
DMA.UART1.RTS_B, DMA.SPI3.SDI, DMA.UART1.CTS_B, LSIO.GPIO0.IO26 */
+#defineSC_P_UART1_CTS_B28 /*!<
DMA.UART1.CTS_B, DMA.SPI3.CS0, DMA.UART1.RTS_B, LSIO.GPIO0.IO27 */arch/arm/include/asm/arch-imx8/imx8qm_pads.h new file +2
-0+#define SC_P_COMP_CTL_GPIO_1V8_3V3_GPIOLH 29/*!< */ +#define SC_P_SCU_PMIC_MEMC_ON 30/*!< SCU.GPIO0.IOXX_PMIC_MEMC_ON */
+#defineSC_P_SCU_WDOG_OUT31 /*!<
SCU.WDOG0.WDOG_OUT */
+#defineSC_P_PMIC_I2C_SDA32 /*!<
SCU.PMIC_I2C.SDA */
+#defineSC_P_PMIC_I2C_SCL33 /*!<
SCU.PMIC_I2C.SCL */
+#defineSC_P_PMIC_EARLY_WARNING34 /*!<
SCU.PMIC_EARLY_WARNING */
+#defineSC_P_PMIC_INT_B35 /*!<
SCU.DSC.PMIC_INT_B */
+#defineSC_P_SCU_GPIO0_0036 /*!<
SCU.GPIO0.IO00, SCU.UART0.RX, LSIO.GPIO0.IO28 */
+#defineSC_P_SCU_GPIO0_0137 /*!<
SCU.GPIO0.IO01, SCU.UART0.TX, LSIO.GPIO0.IO29 */
+#defineSC_P_SCU_GPIO0_0238 /*!<
SCU.GPIO0.IO02, SCU.GPIO0.IOXX_PMIC_GPU0_ON, LSIO.GPIO0.IO30 */
+#defineSC_P_SCU_GPIO0_0339 /*!<
SCU.GPIO0.IO03, SCU.GPIO0.IOXX_PMIC_GPU1_ON, LSIO.GPIO0.IO31 */
+#defineSC_P_SCU_GPIO0_0440 /*!<
SCU.GPIO0.IO04, SCU.GPIO0.IOXX_PMIC_A72_ON, LSIO.GPIO1.IO00 */
+#defineSC_P_SCU_GPIO0_0541 /*!<
SCU.GPIO0.IO05, SCU.GPIO0.IOXX_PMIC_A53_ON, LSIO.GPIO1.IO01 */
+#defineSC_P_SCU_GPIO0_0642 /*!<
SCU.GPIO0.IO06, SCU.TPM0.CH0, LSIO.GPIO1.IO02 */
+#defineSC_P_SCU_GPIO0_0743 /*!<
SCU.GPIO0.IO07, SCU.TPM0.CH1, SCU.DSC.RTC_CLOCK_OUTPUT_32K, LSIO.GPIO1.IO03 */
+#defineSC_P_SCU_BOOT_MODE044 /*!<
SCU.DSC.BOOT_MODE0 */
+#defineSC_P_SCU_BOOT_MODE145 /*!<
SCU.DSC.BOOT_MODE1 */
+#defineSC_P_SCU_BOOT_MODE246 /*!<
SCU.DSC.BOOT_MODE2 */
+#defineSC_P_SCU_BOOT_MODE347 /*!<
SCU.DSC.BOOT_MODE3 */
+#defineSC_P_SCU_BOOT_MODE448 /*!<
SCU.DSC.BOOT_MODE4, SCU.PMIC_I2C.SCL */
+#defineSC_P_SCU_BOOT_MODE549 /*!<
SCU.DSC.BOOT_MODE5, SCU.PMIC_I2C.SDA */
+#defineSC_P_LVDS0_GPIO0050 /*!<
LVDS0.GPIO0.IO00, LVDS0.PWM0.OUT, LSIO.GPIO1.IO04 */
+#defineSC_P_LVDS0_GPIO0151 /*!<
LVDS0.GPIO0.IO01, LSIO.GPIO1.IO05 */
+#defineSC_P_LVDS0_I2C0_SCL52 /*!<
LVDS0.I2C0.SCL, LVDS0.GPIO0.IO02, LSIO.GPIO1.IO06 */
+#defineSC_P_LVDS0_I2C0_SDA53 /*!<
LVDS0.I2C0.SDA, LVDS0.GPIO0.IO03, LSIO.GPIO1.IO07 */
+#defineSC_P_LVDS0_I2C1_SCL54 /*!<
LVDS0.I2C1.SCL, DMA.UART2.TX, LSIO.GPIO1.IO08 */
+#defineSC_P_LVDS0_I2C1_SDA55 /*!<
LVDS0.I2C1.SDA, DMA.UART2.RX, LSIO.GPIO1.IO09 */
+#defineSC_P_LVDS1_GPIO0056 /*!<
LVDS1.GPIO0.IO00, LVDS1.PWM0.OUT, LSIO.GPIO1.IO10 */
+#defineSC_P_LVDS1_GPIO0157 /*!<
LVDS1.GPIO0.IO01, LSIO.GPIO1.IO11 */
+#defineSC_P_LVDS1_I2C0_SCL58 /*!<
LVDS1.I2C0.SCL, LVDS1.GPIO0.IO02, LSIO.GPIO1.IO12 */
+#defineSC_P_LVDS1_I2C0_SDA59 /*!<
LVDS1.I2C0.SDA, LVDS1.GPIO0.IO03, LSIO.GPIO1.IO13 */
+#defineSC_P_LVDS1_I2C1_SCL60 /*!<
LVDS1.I2C1.SCL, DMA.UART3.TX, LSIO.GPIO1.IO14 */
+#defineSC_P_LVDS1_I2C1_SDA61 /*!<
LVDS1.I2C1.SDA, DMA.UART3.RX, LSIO.GPIO1.IO15 */arch/arm/include/asm/arch-imx8/imx8qm_pads.h new file +2
-0+#define SC_P_COMP_CTL_GPIO_1V8_3V3_LVDSGPIO 62/*!< */ +#define SC_P_MIPI_DSI0_I2C0_SCL 63/*!< MIPI_DSI0.I2C0.SCL, LSIO.GPIO1.IO16 */
+#defineSC_P_MIPI_DSI0_I2C0_SDA64 /*!<
MIPI_DSI0.I2C0.SDA, LSIO.GPIO1.IO17 */
+#defineSC_P_MIPI_DSI0_GPIO0_0065 /*!<
MIPI_DSI0.GPIO0.IO00, MIPI_DSI0.PWM0.OUT, LSIO.GPIO1.IO18 */
+#defineSC_P_MIPI_DSI0_GPIO0_0166 /*!<
MIPI_DSI0.GPIO0.IO01, LSIO.GPIO1.IO19 */
+#defineSC_P_MIPI_DSI1_I2C0_SCL67 /*!<
MIPI_DSI1.I2C0.SCL, LSIO.GPIO1.IO20 */
+#defineSC_P_MIPI_DSI1_I2C0_SDA68 /*!<
MIPI_DSI1.I2C0.SDA, LSIO.GPIO1.IO21 */
+#defineSC_P_MIPI_DSI1_GPIO0_0069 /*!<
MIPI_DSI1.GPIO0.IO00, MIPI_DSI1.PWM0.OUT, LSIO.GPIO1.IO22 */
+#defineSC_P_MIPI_DSI1_GPIO0_0170 /*!<
MIPI_DSI1.GPIO0.IO01, LSIO.GPIO1.IO23 */arch/arm/include/asm/arch-imx8/imx8qm_pads.h new file +2
-0+#define SC_P_COMP_CTL_GPIO_1V8_3V3_MIPIDSIGPIO 71/*!< */ +#define SC_P_MIPI_CSI0_MCLK_OUT 72/*!< MIPI_CSI0.ACM.MCLK_OUT, LSIO.GPIO1.IO24 */
+#defineSC_P_MIPI_CSI0_I2C0_SCL73 /*!<
MIPI_CSI0.I2C0.SCL, LSIO.GPIO1.IO25 */
+#defineSC_P_MIPI_CSI0_I2C0_SDA74 /*!<
MIPI_CSI0.I2C0.SDA, LSIO.GPIO1.IO26 */
+#defineSC_P_MIPI_CSI0_GPIO0_0075 /*!<
MIPI_CSI0.GPIO0.IO00, DMA.I2C0.SCL, MIPI_CSI1.I2C0.SCL, LSIO.GPIO1.IO27 */
+#defineSC_P_MIPI_CSI0_GPIO0_0176 /*!<
MIPI_CSI0.GPIO0.IO01, DMA.I2C0.SDA, MIPI_CSI1.I2C0.SDA, LSIO.GPIO1.IO28 */
+#defineSC_P_MIPI_CSI1_MCLK_OUT77 /*!<
MIPI_CSI1.ACM.MCLK_OUT, LSIO.GPIO1.IO29 */
+#defineSC_P_MIPI_CSI1_GPIO0_0078 /*!<
MIPI_CSI1.GPIO0.IO00, DMA.UART4.RX, LSIO.GPIO1.IO30 */
+#defineSC_P_MIPI_CSI1_GPIO0_0179 /*!<
MIPI_CSI1.GPIO0.IO01, DMA.UART4.TX, LSIO.GPIO1.IO31 */
+#defineSC_P_MIPI_CSI1_I2C0_SCL80 /*!<
MIPI_CSI1.I2C0.SCL, LSIO.GPIO2.IO00 */
+#defineSC_P_MIPI_CSI1_I2C0_SDA81 /*!<
MIPI_CSI1.I2C0.SDA, LSIO.GPIO2.IO01 */
+#defineSC_P_HDMI_TX0_TS_SCL82 /*!<
HDMI_TX0.I2C0.SCL, DMA.I2C0.SCL, LSIO.GPIO2.IO02 */
+#defineSC_P_HDMI_TX0_TS_SDA83 /*!<
HDMI_TX0.I2C0.SDA, DMA.I2C0.SDA, LSIO.GPIO2.IO03 */arch/arm/include/asm/arch-imx8/imx8qm_pads.h new file +2
-0+#define SC_P_COMP_CTL_GPIO_3V3_HDMIGPIO 84/*!< */ +#define SC_P_ESAI1_FSR 85/*!< AUD.ESAI1.FSR, LSIO.GPIO2.IO04 */
+#defineSC_P_ESAI1_FST86 /*!<
AUD.ESAI1.FST, AUD.SPDIF0.EXT_CLK, LSIO.GPIO2.IO05 */
+#defineSC_P_ESAI1_SCKR87 /*!<
AUD.ESAI1.SCKR, LSIO.GPIO2.IO06 */
+#defineSC_P_ESAI1_SCKT88 /*!<
AUD.ESAI1.SCKT, AUD.SAI2.RXC, AUD.SPDIF0.EXT_CLK, LSIO.GPIO2.IO07 */
+#defineSC_P_ESAI1_TX089 /*!<
AUD.ESAI1.TX0, AUD.SAI2.RXD, AUD.SPDIF0.RX, LSIO.GPIO2.IO08 */
+#defineSC_P_ESAI1_TX190 /*!<
AUD.ESAI1.TX1, AUD.SAI2.RXFS, AUD.SPDIF0.TX, LSIO.GPIO2.IO09 */
+#defineSC_P_ESAI1_TX2_RX391 /*!<
AUD.ESAI1.TX2_RX3, AUD.SPDIF0.RX, LSIO.GPIO2.IO10 */
+#defineSC_P_ESAI1_TX3_RX292 /*!<
AUD.ESAI1.TX3_RX2, AUD.SPDIF0.TX, LSIO.GPIO2.IO11 */
+#defineSC_P_ESAI1_TX4_RX193 /*!<
AUD.ESAI1.TX4_RX1, LSIO.GPIO2.IO12 */
+#defineSC_P_ESAI1_TX5_RX094 /*!<
AUD.ESAI1.TX5_RX0, LSIO.GPIO2.IO13 */
+#defineSC_P_SPDIF0_RX95 /*!<
AUD.SPDIF0.RX, AUD.MQS.R, AUD.ACM.MCLK_IN1, LSIO.GPIO2.IO14 */
+#defineSC_P_SPDIF0_TX96 /*!<
AUD.SPDIF0.TX, AUD.MQS.L, AUD.ACM.MCLK_OUT1, LSIO.GPIO2.IO15 */
+#defineSC_P_SPDIF0_EXT_CLK97 /*!<
AUD.SPDIF0.EXT_CLK, DMA.DMA0.REQ_IN0, LSIO.GPIO2.IO16 */
+#defineSC_P_SPI3_SCK98 /*!<
DMA.SPI3.SCK, LSIO.GPIO2.IO17 */
+#defineSC_P_SPI3_SDO99 /*!<
DMA.SPI3.SDO, DMA.FTM.CH0, LSIO.GPIO2.IO18 */
+#defineSC_P_SPI3_SDI100 /*!<
DMA.SPI3.SDI, DMA.FTM.CH1, LSIO.GPIO2.IO19 */
+#defineSC_P_SPI3_CS0101 /*!<
DMA.SPI3.CS0, DMA.FTM.CH2, LSIO.GPIO2.IO20 */
+#defineSC_P_SPI3_CS1102 /*!<
DMA.SPI3.CS1, LSIO.GPIO2.IO21 */arch/arm/include/asm/arch-imx8/imx8qm_pads.h new file +2
-0+#define SC_P_COMP_CTL_GPIO_1V8_3V3_GPIORHB 103/*!< */ +#define SC_P_ESAI0_FSR 104/*!< AUD.ESAI0.FSR, LSIO.GPIO2.IO22 */
+#defineSC_P_ESAI0_FST105 /*!<
AUD.ESAI0.FST, LSIO.GPIO2.IO23 */
+#defineSC_P_ESAI0_SCKR106 /*!<
AUD.ESAI0.SCKR, LSIO.GPIO2.IO24 */
+#defineSC_P_ESAI0_SCKT107 /*!<
AUD.ESAI0.SCKT, LSIO.GPIO2.IO25 */
+#defineSC_P_ESAI0_TX0108 /*!<
AUD.ESAI0.TX0, LSIO.GPIO2.IO26 */
+#defineSC_P_ESAI0_TX1109 /*!<
AUD.ESAI0.TX1, LSIO.GPIO2.IO27 */
+#defineSC_P_ESAI0_TX2_RX3110 /*!<
AUD.ESAI0.TX2_RX3, LSIO.GPIO2.IO28 */
+#defineSC_P_ESAI0_TX3_RX2111 /*!<
AUD.ESAI0.TX3_RX2, LSIO.GPIO2.IO29 */
+#defineSC_P_ESAI0_TX4_RX1112 /*!<
AUD.ESAI0.TX4_RX1, LSIO.GPIO2.IO30 */
+#defineSC_P_ESAI0_TX5_RX0113 /*!<
AUD.ESAI0.TX5_RX0, LSIO.GPIO2.IO31 */
+#defineSC_P_MCLK_IN0114 /*!<
AUD.ACM.MCLK_IN0, AUD.ESAI0.RX_HF_CLK, AUD.ESAI1.RX_HF_CLK, LSIO.GPIO3.IO00 */
+#defineSC_P_MCLK_OUT0115 /*!<
AUD.ACM.MCLK_OUT0, AUD.ESAI0.TX_HF_CLK, AUD.ESAI1.TX_HF_CLK, LSIO.GPIO3.IO01 */arch/arm/include/asm/arch-imx8/imx8qm_pads.h new file +2
-0+#define SC_P_COMP_CTL_GPIO_1V8_3V3_GPIORHC 116/*!< */ +#define SC_P_SPI0_SCK 117/*!< DMA.SPI0.SCK, AUD.SAI0.RXC, LSIO.GPIO3.IO02 */
+#defineSC_P_SPI0_SDO118 /*!<
DMA.SPI0.SDO, AUD.SAI0.TXD, LSIO.GPIO3.IO03 */
+#defineSC_P_SPI0_SDI119 /*!<
DMA.SPI0.SDI, AUD.SAI0.RXD, LSIO.GPIO3.IO04 */
+#defineSC_P_SPI0_CS0120 /*!<
DMA.SPI0.CS0, AUD.SAI0.RXFS, LSIO.GPIO3.IO05 */
+#defineSC_P_SPI0_CS1121 /*!<
DMA.SPI0.CS1, AUD.SAI0.TXC, LSIO.GPIO3.IO06 */
+#defineSC_P_SPI2_SCK122 /*!<
DMA.SPI2.SCK, LSIO.GPIO3.IO07 */
+#defineSC_P_SPI2_SDO123 /*!<
DMA.SPI2.SDO, LSIO.GPIO3.IO08 */
+#defineSC_P_SPI2_SDI124 /*!<
DMA.SPI2.SDI, LSIO.GPIO3.IO09 */
+#defineSC_P_SPI2_CS0125 /*!<
DMA.SPI2.CS0, LSIO.GPIO3.IO10 */
+#defineSC_P_SPI2_CS1126 /*!<
DMA.SPI2.CS1, AUD.SAI0.TXFS, LSIO.GPIO3.IO11 */
+#defineSC_P_SAI1_RXC127 /*!<
AUD.SAI1.RXC, AUD.SAI0.TXD, LSIO.GPIO3.IO12 */
+#defineSC_P_SAI1_RXD128 /*!<
AUD.SAI1.RXD, AUD.SAI0.TXFS, LSIO.GPIO3.IO13 */
+#defineSC_P_SAI1_RXFS129 /*!<
AUD.SAI1.RXFS, AUD.SAI0.RXD, LSIO.GPIO3.IO14 */
+#defineSC_P_SAI1_TXC130 /*!<
AUD.SAI1.TXC, AUD.SAI0.TXC, LSIO.GPIO3.IO15 */
+#defineSC_P_SAI1_TXD131 /*!<
AUD.SAI1.TXD, AUD.SAI1.RXC, LSIO.GPIO3.IO16 */
+#defineSC_P_SAI1_TXFS132 /*!<
AUD.SAI1.TXFS, AUD.SAI1.RXFS, LSIO.GPIO3.IO17 */arch/arm/include/asm/arch-imx8/imx8qm_pads.h new file +2
-0+#define SC_P_COMP_CTL_GPIO_1V8_3V3_GPIORHT 133/*!< */ +#define SC_P_ADC_IN7 134/*!< DMA.ADC1.IN3, DMA.SPI1.CS1, LSIO.KPP0.ROW3, LSIO.GPIO3.IO25 */
+#defineSC_P_ADC_IN6135 /*!<
DMA.ADC1.IN2, DMA.SPI1.CS0, LSIO.KPP0.ROW2, LSIO.GPIO3.IO24 */
+#defineSC_P_ADC_IN5136 /*!<
DMA.ADC1.IN1, DMA.SPI1.SDI, LSIO.KPP0.ROW1, LSIO.GPIO3.IO23 */
+#defineSC_P_ADC_IN4137 /*!<
DMA.ADC1.IN0, DMA.SPI1.SDO, LSIO.KPP0.ROW0, LSIO.GPIO3.IO22 */
+#defineSC_P_ADC_IN3138 /*!<
DMA.ADC0.IN3, DMA.SPI1.SCK, LSIO.KPP0.COL3, LSIO.GPIO3.IO21 */
+#defineSC_P_ADC_IN2139 /*!<
DMA.ADC0.IN2, LSIO.KPP0.COL2, LSIO.GPIO3.IO20 */
+#defineSC_P_ADC_IN1140 /*!<
DMA.ADC0.IN1, LSIO.KPP0.COL1, LSIO.GPIO3.IO19 */
+#defineSC_P_ADC_IN0141 /*!<
DMA.ADC0.IN0, LSIO.KPP0.COL0, LSIO.GPIO3.IO18 */
+#defineSC_P_MLB_SIG142 /*!<
CONN.MLB.SIG, AUD.SAI3.RXC, LSIO.GPIO3.IO26 */
+#defineSC_P_MLB_CLK143 /*!<
CONN.MLB.CLK, AUD.SAI3.RXFS, LSIO.GPIO3.IO27 */
+#defineSC_P_MLB_DATA144 /*!<
CONN.MLB.DATA, AUD.SAI3.RXD, LSIO.GPIO3.IO28 */arch/arm/include/asm/arch-imx8/imx8qm_pads.h new file +2
-0+#define SC_P_COMP_CTL_GPIO_1V8_3V3_GPIOLHT 145/*!< */ +#define SC_P_FLEXCAN0_RX 146/*!< DMA.FLEXCAN0.RX, LSIO.GPIO3.IO29 */
+#defineSC_P_FLEXCAN0_TX147 /*!<
DMA.FLEXCAN0.TX, LSIO.GPIO3.IO30 */
+#defineSC_P_FLEXCAN1_RX148 /*!<
DMA.FLEXCAN1.RX, LSIO.GPIO3.IO31 */
+#defineSC_P_FLEXCAN1_TX149 /*!<
DMA.FLEXCAN1.TX, LSIO.GPIO4.IO00 */
+#defineSC_P_FLEXCAN2_RX150 /*!<
DMA.FLEXCAN2.RX, LSIO.GPIO4.IO01 */
+#defineSC_P_FLEXCAN2_TX151 /*!<
DMA.FLEXCAN2.TX, LSIO.GPIO4.IO02 */arch/arm/include/asm/arch-imx8/imx8qm_pads.h new file +2
-0+#define SC_P_COMP_CTL_GPIO_1V8_3V3_GPIOTHR 152/*!< */ +#define SC_P_USB_SS3_TC0 153/*!< DMA.I2C1.SCL, CONN.USB_OTG1.PWR, LSIO.GPIO4.IO03 */
+#defineSC_P_USB_SS3_TC1154 /*!<
DMA.I2C1.SCL, CONN.USB_OTG2.PWR, LSIO.GPIO4.IO04 */
+#defineSC_P_USB_SS3_TC2155 /*!<
DMA.I2C1.SDA, CONN.USB_OTG1.OC, LSIO.GPIO4.IO05 */
+#defineSC_P_USB_SS3_TC3156 /*!<
DMA.I2C1.SDA, CONN.USB_OTG2.OC, LSIO.GPIO4.IO06 */arch/arm/include/asm/arch-imx8/imx8qm_pads.h new file +2
-0+#define SC_P_COMP_CTL_GPIO_3V3_USB3IO 157/*!< */ +#define SC_P_USDHC1_RESET_B 158/*!< CONN.USDHC1.RESET_B, LSIO.GPIO4.IO07 */
+#defineSC_P_USDHC1_VSELECT159 /*!<
CONN.USDHC1.VSELECT, LSIO.GPIO4.IO08 */
+#defineSC_P_USDHC2_RESET_B160 /*!<
CONN.USDHC2.RESET_B, LSIO.GPIO4.IO09 */
+#defineSC_P_USDHC2_VSELECT161 /*!<
CONN.USDHC2.VSELECT, LSIO.GPIO4.IO10 */
+#defineSC_P_USDHC2_WP162 /*!<
CONN.USDHC2.WP, LSIO.GPIO4.IO11 */
+#defineSC_P_USDHC2_CD_B163 /*!<
CONN.USDHC2.CD_B, LSIO.GPIO4.IO12 */arch/arm/include/asm/arch-imx8/imx8qm_pads.h new file +2
-0+#define SC_P_COMP_CTL_GPIO_1V8_3V3_VSELSEP 164/*!< */ +#define SC_P_ENET0_MDIO 165/*!< CONN.ENET0.MDIO, DMA.I2C4.SDA, LSIO.GPIO4.IO13 */
+#defineSC_P_ENET0_MDC166 /*!<
CONN.ENET0.MDC, DMA.I2C4.SCL, LSIO.GPIO4.IO14 */
+#defineSC_P_ENET0_REFCLK_125M_25M167 /*!<
CONN.ENET0.REFCLK_125M_25M, CONN.ENET0.PPS, LSIO.GPIO4.IO15 */
+#defineSC_P_ENET1_REFCLK_125M_25M168 /*!<
CONN.ENET1.REFCLK_125M_25M, CONN.ENET1.PPS, LSIO.GPIO4.IO16 */
+#defineSC_P_ENET1_MDIO169 /*!<
CONN.ENET1.MDIO, DMA.I2C4.SDA, LSIO.GPIO4.IO17 */
+#defineSC_P_ENET1_MDC170 /*!<
CONN.ENET1.MDC, DMA.I2C4.SCL, LSIO.GPIO4.IO18 */arch/arm/include/asm/arch-imx8/imx8qm_pads.h new file +2
-0+#define SC_P_COMP_CTL_GPIO_1V8_3V3_GPIOCT 171/*!< */ +#define SC_P_QSPI1A_SS0_B 172/*!< LSIO.QSPI1A.SS0_B, LSIO.GPIO4.IO19 */
+#defineSC_P_QSPI1A_SS1_B173 /*!<
LSIO.QSPI1A.SS1_B, LSIO.QSPI1A.SCLK2, LSIO.GPIO4.IO20 */
+#defineSC_P_QSPI1A_SCLK174 /*!<
LSIO.QSPI1A.SCLK, LSIO.GPIO4.IO21 */
+#defineSC_P_QSPI1A_DQS175 /*!<
LSIO.QSPI1A.DQS, LSIO.GPIO4.IO22 */
+#defineSC_P_QSPI1A_DATA3176 /*!<
LSIO.QSPI1A.DATA3, DMA.I2C1.SDA, CONN.USB_OTG1.OC, LSIO.GPIO4.IO23 */
+#defineSC_P_QSPI1A_DATA2177 /*!<
LSIO.QSPI1A.DATA2, DMA.I2C1.SCL, CONN.USB_OTG2.PWR, LSIO.GPIO4.IO24 */
+#defineSC_P_QSPI1A_DATA1178 /*!<
LSIO.QSPI1A.DATA1, DMA.I2C1.SDA, CONN.USB_OTG2.OC, LSIO.GPIO4.IO25 */
+#defineSC_P_QSPI1A_DATA0179 /*!<
LSIO.QSPI1A.DATA0, LSIO.GPIO4.IO26 */arch/arm/include/asm/arch-imx8/imx8qm_pads.h new file +2
-0+#define SC_P_COMP_CTL_GPIO_1V8_3V3_QSPI1 180/*!< */ +#define SC_P_QSPI0A_DATA0 181/*!< LSIO.QSPI0A.DATA0 */
+#defineSC_P_QSPI0A_DATA1182 /*!<
LSIO.QSPI0A.DATA1 */
+#defineSC_P_QSPI0A_DATA2183 /*!<
LSIO.QSPI0A.DATA2 */
+#defineSC_P_QSPI0A_DATA3184 /*!<
LSIO.QSPI0A.DATA3 */
+#defineSC_P_QSPI0A_DQS185 /*!<
LSIO.QSPI0A.DQS */
+#defineSC_P_QSPI0A_SS0_B186 /*!<
LSIO.QSPI0A.SS0_B */
+#defineSC_P_QSPI0A_SS1_B187 /*!<
LSIO.QSPI0A.SS1_B, LSIO.QSPI0A.SCLK2 */
+#defineSC_P_QSPI0A_SCLK188 /*!<
LSIO.QSPI0A.SCLK */
+#defineSC_P_QSPI0B_SCLK189 /*!<
LSIO.QSPI0B.SCLK */
+#defineSC_P_QSPI0B_DATA0190 /*!<
LSIO.QSPI0B.DATA0 */
+#defineSC_P_QSPI0B_DATA1191 /*!<
LSIO.QSPI0B.DATA1 */
+#defineSC_P_QSPI0B_DATA2192 /*!<
LSIO.QSPI0B.DATA2 */
+#defineSC_P_QSPI0B_DATA3193 /*!<
LSIO.QSPI0B.DATA3 */
+#defineSC_P_QSPI0B_DQS194 /*!<
LSIO.QSPI0B.DQS */
+#defineSC_P_QSPI0B_SS0_B195 /*!<
LSIO.QSPI0B.SS0_B */
+#defineSC_P_QSPI0B_SS1_B196 /*!<
LSIO.QSPI0B.SS1_B, LSIO.QSPI0B.SCLK2 */arch/arm/include/asm/arch-imx8/imx8qm_pads.h new file +2
-0+#define SC_P_COMP_CTL_GPIO_1V8_3V3_QSPI0 197/*!< */ +#define SC_P_PCIE_CTRL0_CLKREQ_B 198/*!< HSIO.PCIE0.CLKREQ_B, LSIO.GPIO4.IO27 */
+#defineSC_P_PCIE_CTRL0_WAKE_B199 /*!<
HSIO.PCIE0.WAKE_B, LSIO.GPIO4.IO28 */
+#defineSC_P_PCIE_CTRL0_PERST_B200 /*!<
HSIO.PCIE0.PERST_B, LSIO.GPIO4.IO29 */
+#defineSC_P_PCIE_CTRL1_CLKREQ_B201 /*!<
HSIO.PCIE1.CLKREQ_B, DMA.I2C1.SDA, CONN.USB_OTG2.OC, LSIO.GPIO4.IO30 */
+#defineSC_P_PCIE_CTRL1_WAKE_B202 /*!<
HSIO.PCIE1.WAKE_B, DMA.I2C1.SCL, CONN.USB_OTG2.PWR, LSIO.GPIO4.IO31 */
+#defineSC_P_PCIE_CTRL1_PERST_B203 /*!<
HSIO.PCIE1.PERST_B, DMA.I2C1.SCL, CONN.USB_OTG1.PWR, LSIO.GPIO5.IO00 */arch/arm/include/asm/arch-imx8/imx8qm_pads.h new file +2
-0+#define SC_P_COMP_CTL_GPIO_1V8_3V3_PCIESEP 204/*!< */ +#define SC_P_USB_HSIC0_DATA 205/*!< CONN.USB_HSIC0.DATA, DMA.I2C1.SDA, LSIO.GPIO5.IO01 */
+#defineSC_P_USB_HSIC0_STROBE206 /*!<
CONN.USB_HSIC0.STROBE, DMA.I2C1.SCL, LSIO.GPIO5.IO02 */arch/arm/include/asm/arch-imx8/imx8qm_pads.h new file +3
-0+#define SC_P_CALIBRATION_0_HSIC 207/*!< */ +#define SC_P_CALIBRATION_1_HSIC 208/*!< */ +#define SC_P_EMMC0_CLK 209/*!< CONN.EMMC0.CLK, CONN.NAND.READY_B */
+#defineSC_P_EMMC0_CMD210 /*!<
CONN.EMMC0.CMD, CONN.NAND.DQS, AUD.MQS.R, LSIO.GPIO5.IO03 */
+#defineSC_P_EMMC0_DATA0211 /*!<
CONN.EMMC0.DATA0, CONN.NAND.DATA00, LSIO.GPIO5.IO04 */
+#defineSC_P_EMMC0_DATA1212 /*!<
CONN.EMMC0.DATA1, CONN.NAND.DATA01, LSIO.GPIO5.IO05 */
+#defineSC_P_EMMC0_DATA2213 /*!<
CONN.EMMC0.DATA2, CONN.NAND.DATA02, LSIO.GPIO5.IO06 */
+#defineSC_P_EMMC0_DATA3214 /*!<
CONN.EMMC0.DATA3, CONN.NAND.DATA03, LSIO.GPIO5.IO07 */
+#defineSC_P_EMMC0_DATA4215 /*!<
CONN.EMMC0.DATA4, CONN.NAND.DATA04, LSIO.GPIO5.IO08 */
+#defineSC_P_EMMC0_DATA5216 /*!<
CONN.EMMC0.DATA5, CONN.NAND.DATA05, LSIO.GPIO5.IO09 */
+#defineSC_P_EMMC0_DATA6217 /*!<
CONN.EMMC0.DATA6, CONN.NAND.DATA06, LSIO.GPIO5.IO10 */
+#defineSC_P_EMMC0_DATA7218 /*!<
CONN.EMMC0.DATA7, CONN.NAND.DATA07, LSIO.GPIO5.IO11 */
+#defineSC_P_EMMC0_STROBE219 /*!<
CONN.EMMC0.STROBE, CONN.NAND.CLE, LSIO.GPIO5.IO12 */
+#defineSC_P_EMMC0_RESET_B220 /*!<
CONN.EMMC0.RESET_B, CONN.NAND.WP_B, CONN.USDHC1.VSELECT, LSIO.GPIO5.IO13 */arch/arm/include/asm/arch-imx8/imx8qm_pads.h new file +2
-0+#define SC_P_COMP_CTL_GPIO_1V8_3V3_SD1FIX 221/*!< */ +#define SC_P_USDHC1_CLK 222/*!< CONN.USDHC1.CLK, AUD.MQS.R */
+#defineSC_P_USDHC1_CMD223 /*!<
CONN.USDHC1.CMD, AUD.MQS.L, LSIO.GPIO5.IO14 */
+#defineSC_P_USDHC1_DATA0224 /*!<
CONN.USDHC1.DATA0, CONN.NAND.RE_N, LSIO.GPIO5.IO15 */
+#defineSC_P_USDHC1_DATA1225 /*!<
CONN.USDHC1.DATA1, CONN.NAND.RE_P, LSIO.GPIO5.IO16 */arch/arm/include/asm/arch-imx8/imx8qm_pads.h new file +2
-0+#define SC_P_CTL_NAND_RE_P_N 226/*!< */ +#define SC_P_USDHC1_DATA2 227/*!< CONN.USDHC1.DATA2, CONN.NAND.DQS_N, LSIO.GPIO5.IO17 */
+#defineSC_P_USDHC1_DATA3228 /*!<
CONN.USDHC1.DATA3, CONN.NAND.DQS_P, LSIO.GPIO5.IO18 */arch/arm/include/asm/arch-imx8/imx8qm_pads.h new file +2
-0+#define SC_P_CTL_NAND_DQS_P_N 229/*!< */ +#define SC_P_USDHC1_DATA4 230/*!< CONN.USDHC1.DATA4, CONN.NAND.CE0_B, AUD.MQS.R, LSIO.GPIO5.IO19 */
+#defineSC_P_USDHC1_DATA5231 /*!<
CONN.USDHC1.DATA5, CONN.NAND.RE_B, AUD.MQS.L, LSIO.GPIO5.IO20 */
+#defineSC_P_USDHC1_DATA6232 /*!<
CONN.USDHC1.DATA6, CONN.NAND.WE_B, CONN.USDHC1.WP, LSIO.GPIO5.IO21 */
+#defineSC_P_USDHC1_DATA7233 /*!<
CONN.USDHC1.DATA7, CONN.NAND.ALE, CONN.USDHC1.CD_B, LSIO.GPIO5.IO22 */
+#defineSC_P_USDHC1_STROBE234 /*!<
CONN.USDHC1.STROBE, CONN.NAND.CE1_B, CONN.USDHC1.RESET_B, LSIO.GPIO5.IO23 */arch/arm/include/asm/arch-imx8/imx8qm_pads.h new file +2
-0+#define SC_P_COMP_CTL_GPIO_1V8_3V3_VSEL2 235/*!< */ +#define SC_P_USDHC2_CLK 236/*!< CONN.USDHC2.CLK, AUD.MQS.R, LSIO.GPIO5.IO24 */
+#defineSC_P_USDHC2_CMD237 /*!<
CONN.USDHC2.CMD, AUD.MQS.L, LSIO.GPIO5.IO25 */
+#defineSC_P_USDHC2_DATA0238 /*!<
CONN.USDHC2.DATA0, DMA.UART4.RX, LSIO.GPIO5.IO26 */
+#defineSC_P_USDHC2_DATA1239 /*!<
CONN.USDHC2.DATA1, DMA.UART4.TX, LSIO.GPIO5.IO27 */
+#defineSC_P_USDHC2_DATA2240 /*!<
CONN.USDHC2.DATA2, DMA.UART4.CTS_B, LSIO.GPIO5.IO28 */
+#defineSC_P_USDHC2_DATA3241 /*!<
CONN.USDHC2.DATA3, DMA.UART4.RTS_B, LSIO.GPIO5.IO29 */arch/arm/include/asm/arch-imx8/imx8qm_pads.h new file +2
-0+#define SC_P_COMP_CTL_GPIO_1V8_3V3_VSEL3 242/*!< */ +#define SC_P_ENET0_RGMII_TXC 243/*!< CONN.ENET0.RGMII_TXC, CONN.ENET0.RCLK50M_OUT, CONN.ENET0.RCLK50M_IN, LSIO.GPIO5.IO30 */
+#defineSC_P_ENET0_RGMII_TX_CTL244 /*!<
CONN.ENET0.RGMII_TX_CTL, LSIO.GPIO5.IO31 */
+#defineSC_P_ENET0_RGMII_TXD0245 /*!<
CONN.ENET0.RGMII_TXD0, LSIO.GPIO6.IO00 */
+#defineSC_P_ENET0_RGMII_TXD1246 /*!<
CONN.ENET0.RGMII_TXD1, LSIO.GPIO6.IO01 */
+#defineSC_P_ENET0_RGMII_TXD2247 /*!<
CONN.ENET0.RGMII_TXD2, DMA.UART3.TX, VPU.TSI_S1.VID, LSIO.GPIO6.IO02 */
+#defineSC_P_ENET0_RGMII_TXD3248 /*!<
CONN.ENET0.RGMII_TXD3, DMA.UART3.RTS_B, VPU.TSI_S1.SYNC, LSIO.GPIO6.IO03 */
+#defineSC_P_ENET0_RGMII_RXC249 /*!<
CONN.ENET0.RGMII_RXC, DMA.UART3.CTS_B, VPU.TSI_S1.DATA, LSIO.GPIO6.IO04 */
+#defineSC_P_ENET0_RGMII_RX_CTL250 /*!<
CONN.ENET0.RGMII_RX_CTL, VPU.TSI_S0.VID, LSIO.GPIO6.IO05 */
+#defineSC_P_ENET0_RGMII_RXD0251 /*!<
CONN.ENET0.RGMII_RXD0, VPU.TSI_S0.SYNC, LSIO.GPIO6.IO06 */
+#defineSC_P_ENET0_RGMII_RXD1252 /*!<
CONN.ENET0.RGMII_RXD1, VPU.TSI_S0.DATA, LSIO.GPIO6.IO07 */
+#defineSC_P_ENET0_RGMII_RXD2253 /*!<
CONN.ENET0.RGMII_RXD2, CONN.ENET0.RMII_RX_ER, VPU.TSI_S0.CLK, LSIO.GPIO6.IO08 */
+#defineSC_P_ENET0_RGMII_RXD3254 /*!<
CONN.ENET0.RGMII_RXD3, DMA.UART3.RX, VPU.TSI_S1.CLK, LSIO.GPIO6.IO09 */arch/arm/include/asm/arch-imx8/imx8qm_pads.h new file +2
-0+#define SC_P_COMP_CTL_GPIO_1V8_3V3_ENET_ENETB 255/*!< */ +#define SC_P_ENET1_RGMII_TXC 256/*!< CONN.ENET1.RGMII_TXC, CONN.ENET1.RCLK50M_OUT, CONN.ENET1.RCLK50M_IN, LSIO.GPIO6.IO10 */
+#defineSC_P_ENET1_RGMII_TX_CTL257 /*!<
CONN.ENET1.RGMII_TX_CTL, LSIO.GPIO6.IO11 */
+#defineSC_P_ENET1_RGMII_TXD0258 /*!<
CONN.ENET1.RGMII_TXD0, LSIO.GPIO6.IO12 */
+#defineSC_P_ENET1_RGMII_TXD1259 /*!<
CONN.ENET1.RGMII_TXD1, LSIO.GPIO6.IO13 */
+#defineSC_P_ENET1_RGMII_TXD2260 /*!<
CONN.ENET1.RGMII_TXD2, DMA.UART3.TX, VPU.TSI_S1.VID, LSIO.GPIO6.IO14 */
+#defineSC_P_ENET1_RGMII_TXD3261 /*!<
CONN.ENET1.RGMII_TXD3, DMA.UART3.RTS_B, VPU.TSI_S1.SYNC, LSIO.GPIO6.IO15 */
+#defineSC_P_ENET1_RGMII_RXC262 /*!<
CONN.ENET1.RGMII_RXC, DMA.UART3.CTS_B, VPU.TSI_S1.DATA, LSIO.GPIO6.IO16 */
+#defineSC_P_ENET1_RGMII_RX_CTL263 /*!<
CONN.ENET1.RGMII_RX_CTL, VPU.TSI_S0.VID, LSIO.GPIO6.IO17 */
+#defineSC_P_ENET1_RGMII_RXD0264 /*!<
CONN.ENET1.RGMII_RXD0, VPU.TSI_S0.SYNC, LSIO.GPIO6.IO18 */
+#defineSC_P_ENET1_RGMII_RXD1265 /*!<
CONN.ENET1.RGMII_RXD1, VPU.TSI_S0.DATA, LSIO.GPIO6.IO19 */
+#defineSC_P_ENET1_RGMII_RXD2266 /*!<
CONN.ENET1.RGMII_RXD2, CONN.ENET1.RMII_RX_ER, VPU.TSI_S0.CLK, LSIO.GPIO6.IO20 */
+#defineSC_P_ENET1_RGMII_RXD3267 /*!<
CONN.ENET1.RGMII_RXD3, DMA.UART3.RX, VPU.TSI_S1.CLK, LSIO.GPIO6.IO21 */arch/arm/include/asm/arch-imx8/imx8qm_pads.h new file +5
-0+#define SC_P_COMP_CTL_GPIO_1V8_3V3_ENET_ENETA 268/*!< */ +/*@}*/ + +#endif /* SC_PADS_H */ +arch/arm/include/asm/arch-imx8/imx8qxp_pads.h new file +23
-0@@ -0,0 +1,200 @@ +/* +* Copyright (C) 2016 Freescale Semiconductor, Inc. +* Copyright 2017-2018 NXP +* +* SPDX-License-Identifier: GPL-2.0+ +*/ + +/*! +* Header file used to configure SoC pad list. +*/ + +#ifndef SC_PADS_H +#define SC_PADS_H + +/* Includes */ + +/* Defines */ + +/*! +* @name Pad Definitions +*/ +/*@{*/ +#define SC_P_PCIE_CTRL0_PERST_B 0/*!< HSIO.PCIE0.PERST_B, LSIO.GPIO4.IO00 */
+#defineSC_P_PCIE_CTRL0_CLKREQ_B1 /*!<
HSIO.PCIE0.CLKREQ_B, LSIO.GPIO4.IO01 */
+#defineSC_P_PCIE_CTRL0_WAKE_B2 /*!<
HSIO.PCIE0.WAKE_B, LSIO.GPIO4.IO02 */arch/arm/include/asm/arch-imx8/imx8qxp_pads.h new file +2
-0+#define SC_P_COMP_CTL_GPIO_1V8_3V3_PCIESEP 3/*!< */ +#define SC_P_USB_SS3_TC0 4/*!< ADMA.I2C1.SCL, CONN.USB_OTG1.PWR, CONN.USB_OTG2.PWR, LSIO.GPIO4.IO03 */
+#defineSC_P_USB_SS3_TC15 /*!<
ADMA.I2C1.SCL, CONN.USB_OTG2.PWR, LSIO.GPIO4.IO04 */
+#defineSC_P_USB_SS3_TC26 /*!<
ADMA.I2C1.SDA, CONN.USB_OTG1.OC, CONN.USB_OTG2.OC, LSIO.GPIO4.IO05 */
+#defineSC_P_USB_SS3_TC37 /*!<
ADMA.I2C1.SDA, CONN.USB_OTG2.OC, LSIO.GPIO4.IO06 */arch/arm/include/asm/arch-imx8/imx8qxp_pads.h new file +2
-0+#define SC_P_COMP_CTL_GPIO_3V3_USB3IO 8/*!< */ +#define SC_P_EMMC0_CLK 9/*!< CONN.EMMC0.CLK, CONN.NAND.READY_B, LSIO.GPIO4.IO07 */
+#defineSC_P_EMMC0_CMD10 /*!<
CONN.EMMC0.CMD, CONN.NAND.DQS, LSIO.GPIO4.IO08 */
+#defineSC_P_EMMC0_DATA011 /*!<
CONN.EMMC0.DATA0, CONN.NAND.DATA00, LSIO.GPIO4.IO09 */
+#defineSC_P_EMMC0_DATA112 /*!<
CONN.EMMC0.DATA1, CONN.NAND.DATA01, LSIO.GPIO4.IO10 */
+#defineSC_P_EMMC0_DATA213 /*!<
CONN.EMMC0.DATA2, CONN.NAND.DATA02, LSIO.GPIO4.IO11 */
+#defineSC_P_EMMC0_DATA314 /*!<
CONN.EMMC0.DATA3, CONN.NAND.DATA03, LSIO.GPIO4.IO12 */arch/arm/include/asm/arch-imx8/imx8qxp_pads.h new file +2
-0+#define SC_P_COMP_CTL_GPIO_1V8_3V3_SD1FIX0 15/*!< */ +#define SC_P_EMMC0_DATA4 16/*!< CONN.EMMC0.DATA4, CONN.NAND.DATA04, CONN.EMMC0.WP, LSIO.GPIO4.IO13 */
+#defineSC_P_EMMC0_DATA517 /*!<
CONN.EMMC0.DATA5, CONN.NAND.DATA05, CONN.EMMC0.VSELECT, LSIO.GPIO4.IO14 */
+#defineSC_P_EMMC0_DATA618 /*!<
CONN.EMMC0.DATA6, CONN.NAND.DATA06, CONN.MLB.CLK, LSIO.GPIO4.IO15 */
+#defineSC_P_EMMC0_DATA719 /*!<
CONN.EMMC0.DATA7, CONN.NAND.DATA07, CONN.MLB.SIG, LSIO.GPIO4.IO16 */
+#defineSC_P_EMMC0_STROBE20 /*!<
CONN.EMMC0.STROBE, CONN.NAND.CLE, CONN.MLB.DATA, LSIO.GPIO4.IO17 */
+#defineSC_P_EMMC0_RESET_B21 /*!<
CONN.EMMC0.RESET_B, CONN.NAND.WP_B, LSIO.GPIO4.IO18 */arch/arm/include/asm/arch-imx8/imx8qxp_pads.h new file +2
-0+#define SC_P_COMP_CTL_GPIO_1V8_3V3_SD1FIX1 22/*!< */ +#define SC_P_USDHC1_RESET_B 23/*!< CONN.USDHC1.RESET_B, CONN.NAND.RE_N, ADMA.SPI2.SCK, LSIO.GPIO4.IO19 */
+#defineSC_P_USDHC1_VSELECT24 /*!<
CONN.USDHC1.VSELECT, CONN.NAND.RE_P, ADMA.SPI2.SDO, CONN.NAND.RE_B, LSIO.GPIO4.IO20 */arch/arm/include/asm/arch-imx8/imx8qxp_pads.h new file +2
-0+#define SC_P_CTL_NAND_RE_P_N 25/*!< */ +#define SC_P_USDHC1_WP 26/*!< CONN.USDHC1.WP, CONN.NAND.DQS_N, ADMA.SPI2.SDI, LSIO.GPIO4.IO21 */
+#defineSC_P_USDHC1_CD_B27 /*!<
CONN.USDHC1.CD_B, CONN.NAND.DQS_P, ADMA.SPI2.CS0, CONN.NAND.DQS, LSIO.GPIO4.IO22 */arch/arm/include/asm/arch-imx8/imx8qxp_pads.h new file +3
-0+#define SC_P_CTL_NAND_DQS_P_N 28/*!< */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_VSELSEP 29/*!< */ +#define SC_P_USDHC1_CLK 30/*!< CONN.USDHC1.CLK, ADMA.UART3.RX, LSIO.GPIO4.IO23 */
+#defineSC_P_USDHC1_CMD31 /*!<
CONN.USDHC1.CMD, CONN.NAND.CE0_B, ADMA.MQS.R, LSIO.GPIO4.IO24 */
+#defineSC_P_USDHC1_DATA032 /*!<
CONN.USDHC1.DATA0, CONN.NAND.CE1_B, ADMA.MQS.L, LSIO.GPIO4.IO25 */
+#defineSC_P_USDHC1_DATA133 /*!<
CONN.USDHC1.DATA1, CONN.NAND.RE_B, ADMA.UART3.TX, LSIO.GPIO4.IO26 */
+#defineSC_P_USDHC1_DATA234 /*!<
CONN.USDHC1.DATA2, CONN.NAND.WE_B, ADMA.UART3.CTS_B, LSIO.GPIO4.IO27 */
+#defineSC_P_USDHC1_DATA335 /*!<
CONN.USDHC1.DATA3, CONN.NAND.ALE, ADMA.UART3.RTS_B, LSIO.GPIO4.IO28 */arch/arm/include/asm/arch-imx8/imx8qxp_pads.h new file +2
-0+#define SC_P_COMP_CTL_GPIO_1V8_3V3_VSEL3 36/*!< */ +#define SC_P_ENET0_RGMII_TXC 37/*!< CONN.ENET0.RGMII_TXC, CONN.ENET0.RCLK50M_OUT, CONN.ENET0.RCLK50M_IN, CONN.NAND.CE1_B, LSIO.GPIO4.IO29 */
+#defineSC_P_ENET0_RGMII_TX_CTL38 /*!<
CONN.ENET0.RGMII_TX_CTL, CONN.USDHC1.RESET_B, LSIO.GPIO4.IO30 */
+#defineSC_P_ENET0_RGMII_TXD039 /*!<
CONN.ENET0.RGMII_TXD0, CONN.USDHC1.VSELECT, LSIO.GPIO4.IO31 */
+#defineSC_P_ENET0_RGMII_TXD140 /*!<
CONN.ENET0.RGMII_TXD1, CONN.USDHC1.WP, LSIO.GPIO5.IO00 */
+#defineSC_P_ENET0_RGMII_TXD241 /*!<
CONN.ENET0.RGMII_TXD2, CONN.MLB.CLK, CONN.NAND.CE0_B, CONN.USDHC1.CD_B, LSIO.GPIO5.IO01 */
+#defineSC_P_ENET0_RGMII_TXD342 /*!<
CONN.ENET0.RGMII_TXD3, CONN.MLB.SIG, CONN.NAND.RE_B, LSIO.GPIO5.IO02 */arch/arm/include/asm/arch-imx8/imx8qxp_pads.h new file +2
-0+#define SC_P_COMP_CTL_GPIO_1V8_3V3_ENET_ENETB0 43/*!< */ +#define SC_P_ENET0_RGMII_RXC 44/*!< CONN.ENET0.RGMII_RXC, CONN.MLB.DATA, CONN.NAND.WE_B, CONN.USDHC1.CLK, LSIO.GPIO5.IO03 */
+#defineSC_P_ENET0_RGMII_RX_CTL45 /*!<
CONN.ENET0.RGMII_RX_CTL, CONN.USDHC1.CMD, LSIO.GPIO5.IO04 */
+#defineSC_P_ENET0_RGMII_RXD046 /*!<
CONN.ENET0.RGMII_RXD0, CONN.USDHC1.DATA0, LSIO.GPIO5.IO05 */
+#defineSC_P_ENET0_RGMII_RXD147 /*!<
CONN.ENET0.RGMII_RXD1, CONN.USDHC1.DATA1, LSIO.GPIO5.IO06 */
+#defineSC_P_ENET0_RGMII_RXD248 /*!<
CONN.ENET0.RGMII_RXD2, CONN.ENET0.RMII_RX_ER, CONN.USDHC1.DATA2, LSIO.GPIO5.IO07 */
+#defineSC_P_ENET0_RGMII_RXD349 /*!<
CONN.ENET0.RGMII_RXD3, CONN.NAND.ALE, CONN.USDHC1.DATA3, LSIO.GPIO5.IO08 */arch/arm/include/asm/arch-imx8/imx8qxp_pads.h new file +2
-0+#define SC_P_COMP_CTL_GPIO_1V8_3V3_ENET_ENETB1 50/*!< */ +#define SC_P_ENET0_REFCLK_125M_25M 51/*!< CONN.ENET0.REFCLK_125M_25M, CONN.ENET0.PPS, CONN.ENET1.PPS, LSIO.GPIO5.IO09 */
+#defineSC_P_ENET0_MDIO52 /*!<
CONN.ENET0.MDIO, ADMA.I2C3.SDA, CONN.ENET1.MDIO, LSIO.GPIO5.IO10 */
+#defineSC_P_ENET0_MDC53 /*!<
CONN.ENET0.MDC, ADMA.I2C3.SCL, CONN.ENET1.MDC, LSIO.GPIO5.IO11 */arch/arm/include/asm/arch-imx8/imx8qxp_pads.h new file +2
-0+#define SC_P_COMP_CTL_GPIO_1V8_3V3_GPIOCT 54/*!< */ +#define SC_P_ESAI0_FSR 55/*!< ADMA.ESAI0.FSR, CONN.ENET1.RCLK50M_OUT, ADMA.LCDIF.D00, CONN.ENET1.RGMII_TXC, CONN.ENET1.RCLK50M_IN */
+#defineSC_P_ESAI0_FST56 /*!<
ADMA.ESAI0.FST, CONN.MLB.CLK, ADMA.LCDIF.D01, CONN.ENET1.RGMII_TXD2, LSIO.GPIO0.IO01 */
+#defineSC_P_ESAI0_SCKR57 /*!<
ADMA.ESAI0.SCKR, ADMA.LCDIF.D02, CONN.ENET1.RGMII_TX_CTL, LSIO.GPIO0.IO02 */
+#defineSC_P_ESAI0_SCKT58 /*!<
ADMA.ESAI0.SCKT, CONN.MLB.SIG, ADMA.LCDIF.D03, CONN.ENET1.RGMII_TXD3, LSIO.GPIO0.IO03 */
+#defineSC_P_ESAI0_TX059 /*!<
ADMA.ESAI0.TX0, CONN.MLB.DATA, ADMA.LCDIF.D04, CONN.ENET1.RGMII_RXC, LSIO.GPIO0.IO04 */
+#defineSC_P_ESAI0_TX160 /*!<
ADMA.ESAI0.TX1, ADMA.LCDIF.D05, CONN.ENET1.RGMII_RXD3, LSIO.GPIO0.IO05 */
+#defineSC_P_ESAI0_TX2_RX361 /*!<
ADMA.ESAI0.TX2_RX3, CONN.ENET1.RMII_RX_ER, ADMA.LCDIF.D06, CONN.ENET1.RGMII_RXD2, LSIO.GPIO0.IO06 */
+#defineSC_P_ESAI0_TX3_RX262 /*!<
ADMA.ESAI0.TX3_RX2, ADMA.LCDIF.D07, CONN.ENET1.RGMII_RXD1, LSIO.GPIO0.IO07 */
+#defineSC_P_ESAI0_TX4_RX163 /*!<
ADMA.ESAI0.TX4_RX1, ADMA.LCDIF.D08, CONN.ENET1.RGMII_TXD0, LSIO.GPIO0.IO08 */
+#defineSC_P_ESAI0_TX5_RX064 /*!<
ADMA.ESAI0.TX5_RX0, ADMA.LCDIF.D09, CONN.ENET1.RGMII_TXD1, LSIO.GPIO0.IO09 */
+#defineSC_P_SPDIF0_RX65 /*!<
ADMA.SPDIF0.RX, ADMA.MQS.R, ADMA.LCDIF.D10, CONN.ENET1.RGMII_RXD0, LSIO.GPIO0.IO10 */
+#defineSC_P_SPDIF0_TX66 /*!<
ADMA.SPDIF0.TX, ADMA.MQS.L, ADMA.LCDIF.D11, CONN.ENET1.RGMII_RX_CTL, LSIO.GPIO0.IO11 */
+#defineSC_P_SPDIF0_EXT_CLK67 /*!<
ADMA.SPDIF0.EXT_CLK, ADMA.LCDIF.D12, CONN.ENET1.REFCLK_125M_25M, LSIO.GPIO0.IO12 */arch/arm/include/asm/arch-imx8/imx8qxp_pads.h new file +2
-0+#define SC_P_COMP_CTL_GPIO_1V8_3V3_GPIORHB 68/*!< */ +#define SC_P_SPI3_SCK 69/*!< ADMA.SPI3.SCK, ADMA.LCDIF.D13, LSIO.GPIO0.IO13 */
+#defineSC_P_SPI3_SDO70 /*!<
ADMA.SPI3.SDO, ADMA.LCDIF.D14, LSIO.GPIO0.IO14 */
+#defineSC_P_SPI3_SDI71 /*!<
ADMA.SPI3.SDI, ADMA.LCDIF.D15, LSIO.GPIO0.IO15 */
+#defineSC_P_SPI3_CS072 /*!<
ADMA.SPI3.CS0, ADMA.ACM.MCLK_OUT1, ADMA.LCDIF.HSYNC, LSIO.GPIO0.IO16 */
+#defineSC_P_SPI3_CS173 /*!<
ADMA.SPI3.CS1, ADMA.I2C3.SCL, ADMA.LCDIF.RESET, ADMA.SPI2.CS0, ADMA.LCDIF.D16 */
+#defineSC_P_MCLK_IN174 /*!<
ADMA.ACM.MCLK_IN1, ADMA.I2C3.SDA, ADMA.LCDIF.EN, ADMA.SPI2.SCK, ADMA.LCDIF.D17 */
+#defineSC_P_MCLK_IN075 /*!<
ADMA.ACM.MCLK_IN0, ADMA.ESAI0.RX_HF_CLK, ADMA.LCDIF.VSYNC, ADMA.SPI2.SDI, LSIO.GPIO0.IO19 */
+#defineSC_P_MCLK_OUT076 /*!<
ADMA.ACM.MCLK_OUT0, ADMA.ESAI0.TX_HF_CLK, ADMA.LCDIF.CLK, ADMA.SPI2.SDO, LSIO.GPIO0.IO20 */
+#defineSC_P_UART1_TX77 /*!<
ADMA.UART1.TX, LSIO.PWM0.OUT, LSIO.GPT0.CAPTURE, LSIO.GPIO0.IO21 */
+#defineSC_P_UART1_RX78 /*!<
ADMA.UART1.RX, LSIO.PWM1.OUT, LSIO.GPT0.COMPARE, LSIO.GPT1.CLK, LSIO.GPIO0.IO22 */
+#defineSC_P_UART1_RTS_B79 /*!<
ADMA.UART1.RTS_B, LSIO.PWM2.OUT, ADMA.LCDIF.D16, LSIO.GPT1.CAPTURE, LSIO.GPT0.CLK */
+#defineSC_P_UART1_CTS_B80 /*!<
ADMA.UART1.CTS_B, LSIO.PWM3.OUT, ADMA.LCDIF.D17, LSIO.GPT1.COMPARE, LSIO.GPIO0.IO24 */arch/arm/include/asm/arch-imx8/imx8qxp_pads.h new file +2
-0+#define SC_P_COMP_CTL_GPIO_1V8_3V3_GPIORHK 81/*!< */ +#define SC_P_SAI0_TXD 82/*!< ADMA.SAI0.TXD, ADMA.SAI1.RXC, ADMA.SPI1.SDO, ADMA.LCDIF.D18, LSIO.GPIO0.IO25 */
+#defineSC_P_SAI0_TXC83 /*!<
ADMA.SAI0.TXC, ADMA.SAI1.TXD, ADMA.SPI1.SDI, ADMA.LCDIF.D19, LSIO.GPIO0.IO26 */
+#defineSC_P_SAI0_RXD84 /*!<
ADMA.SAI0.RXD, ADMA.SAI1.RXFS, ADMA.SPI1.CS0, ADMA.LCDIF.D20, LSIO.GPIO0.IO27 */
+#defineSC_P_SAI0_TXFS85 /*!<
ADMA.SAI0.TXFS, ADMA.SPI2.CS1, ADMA.SPI1.SCK, LSIO.GPIO0.IO28 */
+#defineSC_P_SAI1_RXD86 /*!<
ADMA.SAI1.RXD, ADMA.SAI0.RXFS, ADMA.SPI1.CS1, ADMA.LCDIF.D21, LSIO.GPIO0.IO29 */
+#defineSC_P_SAI1_RXC87 /*!<
ADMA.SAI1.RXC, ADMA.SAI1.TXC, ADMA.LCDIF.D22, LSIO.GPIO0.IO30 */
+#defineSC_P_SAI1_RXFS88 /*!<
ADMA.SAI1.RXFS, ADMA.SAI1.TXFS, ADMA.LCDIF.D23, LSIO.GPIO0.IO31 */
+#defineSC_P_SPI2_CS089 /*!<
ADMA.SPI2.CS0, LSIO.GPIO1.IO00 */
+#defineSC_P_SPI2_SDO90 /*!<
ADMA.SPI2.SDO, LSIO.GPIO1.IO01 */
+#defineSC_P_SPI2_SDI91 /*!<
ADMA.SPI2.SDI, LSIO.GPIO1.IO02 */
+#defineSC_P_SPI2_SCK92 /*!<
ADMA.SPI2.SCK, LSIO.GPIO1.IO03 */
+#defineSC_P_SPI0_SCK93 /*!<
ADMA.SPI0.SCK, ADMA.SAI0.TXC, M40.I2C0.SCL, M40.GPIO0.IO00, LSIO.GPIO1.IO04 */
+#defineSC_P_SPI0_SDI94 /*!<
ADMA.SPI0.SDI, ADMA.SAI0.TXD, M40.TPM0.CH0, M40.GPIO0.IO02, LSIO.GPIO1.IO05 */
+#defineSC_P_SPI0_SDO95 /*!<
ADMA.SPI0.SDO, ADMA.SAI0.TXFS, M40.I2C0.SDA, M40.GPIO0.IO01, LSIO.GPIO1.IO06 */
+#defineSC_P_SPI0_CS196 /*!<
ADMA.SPI0.CS1, ADMA.SAI0.RXC, ADMA.SAI1.TXD, ADMA.LCD_PWM0.OUT, LSIO.GPIO1.IO07 */
+#defineSC_P_SPI0_CS097 /*!<
ADMA.SPI0.CS0, ADMA.SAI0.RXD, M40.TPM0.CH1, M40.GPIO0.IO03, LSIO.GPIO1.IO08 */arch/arm/include/asm/arch-imx8/imx8qxp_pads.h new file +2
-0+#define SC_P_COMP_CTL_GPIO_1V8_3V3_GPIORHT 98/*!< */ +#define SC_P_ADC_IN1 99/*!< ADMA.ADC.IN1, M40.I2C0.SDA, M40.GPIO0.IO01, LSIO.GPIO1.IO09 */
+#defineSC_P_ADC_IN0100 /*!<
ADMA.ADC.IN0, M40.I2C0.SCL, M40.GPIO0.IO00, LSIO.GPIO1.IO10 */
+#defineSC_P_ADC_IN3101 /*!<
ADMA.ADC.IN3, M40.UART0.TX, M40.GPIO0.IO03, ADMA.ACM.MCLK_OUT0, LSIO.GPIO1.IO11 */
+#defineSC_P_ADC_IN2102 /*!<
ADMA.ADC.IN2, M40.UART0.RX, M40.GPIO0.IO02, ADMA.ACM.MCLK_IN0, LSIO.GPIO1.IO12 */
+#defineSC_P_ADC_IN5103 /*!<
ADMA.ADC.IN5, M40.TPM0.CH1, M40.GPIO0.IO05, LSIO.GPIO1.IO13 */
+#defineSC_P_ADC_IN4104 /*!<
ADMA.ADC.IN4, M40.TPM0.CH0, M40.GPIO0.IO04, LSIO.GPIO1.IO14 */
+#defineSC_P_FLEXCAN0_RX105 /*!<
ADMA.FLEXCAN0.RX, ADMA.SAI2.RXC, ADMA.UART0.RTS_B, ADMA.SAI1.TXC, LSIO.GPIO1.IO15 */
+#defineSC_P_FLEXCAN0_TX106 /*!<
ADMA.FLEXCAN0.TX, ADMA.SAI2.RXD, ADMA.UART0.CTS_B, ADMA.SAI1.TXFS, LSIO.GPIO1.IO16 */
+#defineSC_P_FLEXCAN1_RX107 /*!<
ADMA.FLEXCAN1.RX, ADMA.SAI2.RXFS, ADMA.FTM.CH2, ADMA.SAI1.TXD, LSIO.GPIO1.IO17 */
+#defineSC_P_FLEXCAN1_TX108 /*!<
ADMA.FLEXCAN1.TX, ADMA.SAI3.RXC, ADMA.DMA0.REQ_IN0, ADMA.SAI1.RXD, LSIO.GPIO1.IO18 */
+#defineSC_P_FLEXCAN2_RX109 /*!<
ADMA.FLEXCAN2.RX, ADMA.SAI3.RXD, ADMA.UART3.RX, ADMA.SAI1.RXFS, LSIO.GPIO1.IO19 */
+#defineSC_P_FLEXCAN2_TX110 /*!<
ADMA.FLEXCAN2.TX, ADMA.SAI3.RXFS, ADMA.UART3.TX, ADMA.SAI1.RXC, LSIO.GPIO1.IO20 */
+#defineSC_P_UART0_RX111 /*!<
ADMA.UART0.RX, ADMA.MQS.R, ADMA.FLEXCAN0.RX, SCU.UART0.RX, LSIO.GPIO1.IO21 */
+#defineSC_P_UART0_TX112 /*!<
ADMA.UART0.TX, ADMA.MQS.L, ADMA.FLEXCAN0.TX, SCU.UART0.TX, LSIO.GPIO1.IO22 */
+#defineSC_P_UART2_TX113 /*!<
ADMA.UART2.TX, ADMA.FTM.CH1, ADMA.FLEXCAN1.TX, LSIO.GPIO1.IO23 */
+#defineSC_P_UART2_RX114 /*!<
ADMA.UART2.RX, ADMA.FTM.CH0, ADMA.FLEXCAN1.RX, LSIO.GPIO1.IO24 */arch/arm/include/asm/arch-imx8/imx8qxp_pads.h new file +2
-0+#define SC_P_COMP_CTL_GPIO_1V8_3V3_GPIOLH 115/*!< */ +#define SC_P_MIPI_DSI0_I2C0_SCL 116/*!< MIPI_DSI0.I2C0.SCL, MIPI_DSI1.GPIO0.IO02, LSIO.GPIO1.IO25 */
+#defineSC_P_MIPI_DSI0_I2C0_SDA117 /*!<
MIPI_DSI0.I2C0.SDA, MIPI_DSI1.GPIO0.IO03, LSIO.GPIO1.IO26 */
+#defineSC_P_MIPI_DSI0_GPIO0_00118 /*!<
MIPI_DSI0.GPIO0.IO00, ADMA.I2C1.SCL, MIPI_DSI0.PWM0.OUT, LSIO.GPIO1.IO27 */
+#defineSC_P_MIPI_DSI0_GPIO0_01119 /*!<
MIPI_DSI0.GPIO0.IO01, ADMA.I2C1.SDA, LSIO.GPIO1.IO28 */
+#defineSC_P_MIPI_DSI1_I2C0_SCL120 /*!<
MIPI_DSI1.I2C0.SCL, MIPI_DSI0.GPIO0.IO02, LSIO.GPIO1.IO29 */
+#defineSC_P_MIPI_DSI1_I2C0_SDA121 /*!<
MIPI_DSI1.I2C0.SDA, MIPI_DSI0.GPIO0.IO03, LSIO.GPIO1.IO30 */
+#defineSC_P_MIPI_DSI1_GPIO0_00122 /*!<
MIPI_DSI1.GPIO0.IO00, ADMA.I2C2.SCL, MIPI_DSI1.PWM0.OUT, LSIO.GPIO1.IO31 */
+#defineSC_P_MIPI_DSI1_GPIO0_01123 /*!<
MIPI_DSI1.GPIO0.IO01, ADMA.I2C2.SDA, LSIO.GPIO2.IO00 */arch/arm/include/asm/arch-imx8/imx8qxp_pads.h new file +2
-0+#define SC_P_COMP_CTL_GPIO_1V8_3V3_MIPIDSIGPIO 124/*!< */ +#define SC_P_JTAG_TRST_B 125/*!< SCU.JTAG.TRST_B, SCU.WDOG0.WDOG_OUT */
+#defineSC_P_PMIC_I2C_SCL126 /*!<
SCU.PMIC_I2C.SCL, SCU.GPIO0.IOXX_PMIC_A35_ON, LSIO.GPIO2.IO01 */
+#defineSC_P_PMIC_I2C_SDA127 /*!<
SCU.PMIC_I2C.SDA, SCU.GPIO0.IOXX_PMIC_GPU_ON, LSIO.GPIO2.IO02 */
+#defineSC_P_PMIC_INT_B128 /*!<
SCU.DSC.PMIC_INT_B */
+#defineSC_P_SCU_GPIO0_00129 /*!<
SCU.GPIO0.IO00, SCU.UART0.RX, M40.UART0.RX, ADMA.UART3.RX, LSIO.GPIO2.IO03 */
+#defineSC_P_SCU_GPIO0_01130 /*!<
SCU.GPIO0.IO01, SCU.UART0.TX, M40.UART0.TX, ADMA.UART3.TX, SCU.WDOG0.WDOG_OUT */
+#defineSC_P_SCU_PMIC_STANDBY131 /*!<
SCU.DSC.PMIC_STANDBY */
+#defineSC_P_SCU_BOOT_MODE0132 /*!<
SCU.DSC.BOOT_MODE0 */
+#defineSC_P_SCU_BOOT_MODE1133 /*!<
SCU.DSC.BOOT_MODE1 */
+#defineSC_P_SCU_BOOT_MODE2134 /*!<
SCU.DSC.BOOT_MODE2, SCU.PMIC_I2C.SDA */
+#defineSC_P_SCU_BOOT_MODE3135 /*!<
SCU.DSC.BOOT_MODE3, SCU.PMIC_I2C.SCL, SCU.DSC.RTC_CLOCK_OUTPUT_32K */
+#defineSC_P_CSI_D00136 /*!<
CI_PI.D02, ADMA.SAI0.RXC */
+#defineSC_P_CSI_D01137 /*!<
CI_PI.D03, ADMA.SAI0.RXD */
+#defineSC_P_CSI_D02138 /*!<
CI_PI.D04, ADMA.SAI0.RXFS */
+#defineSC_P_CSI_D03139 /*!<
CI_PI.D05, ADMA.SAI2.RXC */
+#defineSC_P_CSI_D04140 /*!<
CI_PI.D06, ADMA.SAI2.RXD */
+#defineSC_P_CSI_D05141 /*!<
CI_PI.D07, ADMA.SAI2.RXFS */
+#defineSC_P_CSI_D06142 /*!<
CI_PI.D08, ADMA.SAI3.RXC */
+#defineSC_P_CSI_D07143 /*!<
CI_PI.D09, ADMA.SAI3.RXD */
+#defineSC_P_CSI_HSYNC144 /*!<
CI_PI.HSYNC, CI_PI.D00, ADMA.SAI3.RXFS */
+#defineSC_P_CSI_VSYNC145 /*!<
CI_PI.VSYNC, CI_PI.D01 */
+#defineSC_P_CSI_PCLK146 /*!<
CI_PI.PCLK, MIPI_CSI0.I2C0.SCL, ADMA.SPI1.SCK, LSIO.GPIO3.IO00 */
+#defineSC_P_CSI_MCLK147 /*!<
CI_PI.MCLK, MIPI_CSI0.I2C0.SDA, ADMA.SPI1.SDO, LSIO.GPIO3.IO01 */
+#defineSC_P_CSI_EN148 /*!< CI_PI.EN,
CI_PI.I2C.SCL, ADMA.I2C3.SCL, ADMA.SPI1.SDI, LSIO.GPIO3.IO02 */
+#defineSC_P_CSI_RESET149 /*!<
CI_PI.RESET, CI_PI.I2C.SDA, ADMA.I2C3.SDA, ADMA.SPI1.CS0, LSIO.GPIO3.IO03 */arch/arm/include/asm/arch-imx8/imx8qxp_pads.h new file +2
-0+#define SC_P_COMP_CTL_GPIO_1V8_3V3_GPIORHD 150/*!< */ +#define SC_P_MIPI_CSI0_MCLK_OUT 151/*!< MIPI_CSI0.ACM.MCLK_OUT, LSIO.GPIO3.IO04 */
+#defineSC_P_MIPI_CSI0_I2C0_SCL152 /*!<
MIPI_CSI0.I2C0.SCL, MIPI_CSI0.GPIO0.IO02, LSIO.GPIO3.IO05 */
+#defineSC_P_MIPI_CSI0_I2C0_SDA153 /*!<
MIPI_CSI0.I2C0.SDA, MIPI_CSI0.GPIO0.IO03, LSIO.GPIO3.IO06 */
+#defineSC_P_MIPI_CSI0_GPIO0_01154 /*!<
MIPI_CSI0.GPIO0.IO01, ADMA.I2C0.SDA, LSIO.GPIO3.IO07 */
+#defineSC_P_MIPI_CSI0_GPIO0_00155 /*!<
MIPI_CSI0.GPIO0.IO00, ADMA.I2C0.SCL, LSIO.GPIO3.IO08 */
+#defineSC_P_QSPI0A_DATA0156 /*!<
LSIO.QSPI0A.DATA0, LSIO.GPIO3.IO09 */
+#defineSC_P_QSPI0A_DATA1157 /*!<
LSIO.QSPI0A.DATA1, LSIO.GPIO3.IO10 */
+#defineSC_P_QSPI0A_DATA2158 /*!<
LSIO.QSPI0A.DATA2, LSIO.GPIO3.IO11 */
+#defineSC_P_QSPI0A_DATA3159 /*!<
LSIO.QSPI0A.DATA3, LSIO.GPIO3.IO12 */
+#defineSC_P_QSPI0A_DQS160 /*!<
LSIO.QSPI0A.DQS, LSIO.GPIO3.IO13 */
+#defineSC_P_QSPI0A_SS0_B161 /*!<
LSIO.QSPI0A.SS0_B, LSIO.GPIO3.IO14 */
+#defineSC_P_QSPI0A_SS1_B162 /*!<
LSIO.QSPI0A.SS1_B, LSIO.GPIO3.IO15 */
+#defineSC_P_QSPI0A_SCLK163 /*!<
LSIO.QSPI0A.SCLK, LSIO.GPIO3.IO16 */arch/arm/include/asm/arch-imx8/imx8qxp_pads.h new file +2
-0+#define SC_P_COMP_CTL_GPIO_1V8_3V3_QSPI0A 164/*!< */ +#define SC_P_QSPI0B_SCLK 165/*!< LSIO.QSPI0B.SCLK, LSIO.QSPI1A.SCLK, LSIO.KPP0.COL0, LSIO.GPIO3.IO17 */
+#defineSC_P_QSPI0B_DATA0166 /*!<
LSIO.QSPI0B.DATA0, LSIO.QSPI1A.DATA0, LSIO.KPP0.COL1, LSIO.GPIO3.IO18 */
+#defineSC_P_QSPI0B_DATA1167 /*!<
LSIO.QSPI0B.DATA1, LSIO.QSPI1A.DATA1, LSIO.KPP0.COL2, LSIO.GPIO3.IO19 */
+#defineSC_P_QSPI0B_DATA2168 /*!<
LSIO.QSPI0B.DATA2, LSIO.QSPI1A.DATA2, LSIO.KPP0.COL3, LSIO.GPIO3.IO20 */
+#defineSC_P_QSPI0B_DATA3169 /*!<
LSIO.QSPI0B.DATA3, LSIO.QSPI1A.DATA3, LSIO.KPP0.ROW0, LSIO.GPIO3.IO21 */
+#defineSC_P_QSPI0B_DQS170 /*!<
LSIO.QSPI0B.DQS, LSIO.QSPI1A.DQS, LSIO.KPP0.ROW1, LSIO.GPIO3.IO22 */
+#defineSC_P_QSPI0B_SS0_B171 /*!<
LSIO.QSPI0B.SS0_B, LSIO.QSPI1A.SS0_B, LSIO.KPP0.ROW2, LSIO.GPIO3.IO23 */
+#defineSC_P_QSPI0B_SS1_B172 /*!<
LSIO.QSPI0B.SS1_B, LSIO.QSPI1A.SS1_B, LSIO.KPP0.ROW3, LSIO.GPIO3.IO24 */arch/arm/include/asm/arch-imx8/imx8qxp_pads.h new file +5
-0+#define SC_P_COMP_CTL_GPIO_1V8_3V3_QSPI0B 173/*!< */ +/*@}*/ + +#endif /* SC_PADS_H */ +arch/arm/include/asm/arch-imx8/sci/ipc.h new file +67
-0@@ -0,0 +1,67 @@ +/* +* Copyright (C) 2016 Freescale Semiconductor, Inc. +* Copyright 2017-2018 NXP +* +* SPDX-License-Identifier: GPL-2.0+ +*/ + +/*! +* Header file for the IPC implementation. +*/ + +#ifndef SC_IPC_H +#define SC_IPC_H + +/* Includes */ + +#include <asm/arch/sci/types.h> + +/* Defines */ + +/* Types */ + +/* Functions */ + +/*! +* This function opens an IPC channel. +* +* @param[out] ipc return pointer for ipc handle +* @param[in] id id of channel to open +* +* @return Returns an error code (SC_ERR_NONE = success, SC_ERR_IPC +* otherwise). +* +* The \a id parameter is implementation specific. Could be an MU +* address, pointer to a driver path, channel index, etc. +*/ +sc_err_t sc_ipc_open (sc_ipc_t *ipc,sc_ipc_id_t id); + +/*! +* This function closes an IPC channel. +* +* @param[in] ipc id of channel to close +*/ +void sc_ipc_close (sc_ipc_t ipc); + +/*! +* This function reads a message from an IPC channel. +* +* @param[in] ipc id of channel read from +* @param[out] data pointer to message buffer to read +* +* This function will block if no message is available to be read. +*/ +void sc_ipc_read (sc_ipc_t ipc,void *data); + +/*! +* This function writes a message to an IPC channel. +* +* @param[in] ipc id of channel to write to +* @param[in] data pointer to message buffer to write +* +* This function will block if the outgoing buffer is full. +*/ +void sc_ipc_write (sc_ipc_t ipc,void *data); + +#endif /* SC_IPC_H */ +arch/arm/include/asm/arch-imx8/sci/rpc.h new file +131
-0@@ -0,0 +1,131 @@ +/* +* Copyright (C) 2016 Freescale Semiconductor, Inc. +* Copyright 2017-2018 NXP +* +* SPDX-License-Identifier: GPL-2.0+ +*/ + +/*! +* Header file for the RPC implementation. +*/ + +#ifndef SC_RPC_H +#define SC_RPC_H + +/* Includes */ + +#include <asm/arch/sci/types.h> +#include <asm/arch/sci/ipc.h> + +/* Defines */ + +#define SC_RPC_VERSION 1U + +#define SC_RPC_MAX_MSG 8U + +#define RPC_VER (MSG ) ((MSG)->version) +#define RPC_SIZE (MSG ) ((MSG)->size) +#define RPC_SVC (MSG ) ((MSG)->svc) +#define RPC_FUNC (MSG ) ((MSG)->func) +#define RPC_R8 (MSG ) ((MSG)->func) +#define RPC_I32 (MSG ,IDX ) ((MSG)->DATA.i32[(IDX) / 4U]) +#define RPC_I16 (MSG ,IDX ) ((MSG)->DATA.i16[(IDX) / 2U]) +#define RPC_I8 (MSG ,IDX ) ((MSG)->DATA.i8[(IDX)]) +#define RPC_U32 (MSG ,IDX ) ((MSG)->DATA.u32[(IDX) / 4U]) +#define RPC_U16 (MSG ,IDX ) ((MSG)->DATA.u16[(IDX) / 2U]) +#define RPC_U8 (MSG ,IDX ) ((MSG)->DATA.u8[(IDX)]) + +#define SC_RPC_SVC_UNKNOWN 0U +#define SC_RPC_SVC_RETURN 1U +#define SC_RPC_SVC_PM 2U +#define SC_RPC_SVC_RM 3U +#define SC_RPC_SVC_TIMER 5U +#define SC_RPC_SVC_PAD 6U +#define SC_RPC_SVC_MISC 7U +#define SC_RPC_SVC_IRQ 8U +#define SC_RPC_SVC_ABORT 9U + +#define SC_RPC_ASYNC_STATE_RD_START 0U +#define SC_RPC_ASYNC_STATE_RD_ACTIVE 1U +#define SC_RPC_ASYNC_STATE_RD_DONE 2U +#define SC_RPC_ASYNC_STATE_WR_START 3U +#define SC_RPC_ASYNC_STATE_WR_ACTIVE 4U +#define SC_RPC_ASYNC_STATE_WR_DONE 5U + +#define SC_RPC_MU_GIR_SVC 0x1U +#define SC_RPC_MU_GIR_DBG 0x8U + +/* Types */ + +typedef uint8_t sc_rpc_svc_t ; + +typedef struct sc_rpc_msg_s +{ +uint8_t version; +uint8_t size; +uint8_t svc; +uint8_t func; +union + { +int32_t i32[(SC_RPC_MAX_MSG -1U )]; +int16_t i16[(SC_RPC_MAX_MSG -1U ) *2U ]; +int8_t i8[(SC_RPC_MAX_MSG -1U ) *4U ]; +uint32_t u32[(SC_RPC_MAX_MSG -1U )]; +uint16_t u16[(SC_RPC_MAX_MSG -1U ) *2U ]; +uint8_t u8[(SC_RPC_MAX_MSG -1U ) *4U ]; + } DATA; +}sc_rpc_msg_t ; + +typedef uint8_t sc_rpc_async_state_t ; + +typedef struct sc_rpc_async_msg_s +{ +sc_rpc_async_state_t state; +uint8_t wordIdx; +sc_rpc_msg_t msg; +uint32_t timeStamp; +}sc_rpc_async_msg_t ; + +/* Functions */ + +/*! +* This is an internal function to send an RPC message over an IPC +* channel. It is called by client-side SCFW API function shims. +* +* @param[in] ipc IPC handle +* @param[in,out] msg handle to a message +* @param[in] no_resp response flag +* +* If \a no_resp is SC_FALSE then this function waits for a response +* and returns the result in \a msg. +*/ +void sc_call_rpc (sc_ipc_t ipc,sc_rpc_msg_t *msg,sc_bool_t no_resp); + +/*! +* This is an internal function to dispath an RPC call that has +* arrived via IPC over an MU. It is called by server-side SCFW. +* +* @param[in] mu MU message arrived on +* @param[in,out] msg handle to a message +* +* The function result is returned in \a msg. +*/ +void sc_rpc_dispatch (sc_rsrc_t mu,sc_rpc_msg_t *msg); + +/*! +* This function translates an RPC message and forwards on to the +* normal RPC API. It is used only by hypervisors. +* +* @param[in] ipc IPC handle +* @param[in,out] msg handle to a message +* +* This function decodes a message, calls macros to translate the +* resources, pads, addresses, partitions, memory regions, etc. and +* then forwards on to the hypervisors SCFW API.Return results are +* translated back abd placed back into the message to be returned +* to the original API. +*/ +void sc_rpc_xlate (sc_ipc_t ipc,sc_rpc_msg_t *msg); + +#endif /* SC_RPC_H */ +arch/arm/include/asm/arch-imx8/sci/svc/irq/api.h new file +44
-0@@ -0,0 +1,160 @@ +/* +* Copyright (C) 2016 Freescale Semiconductor, Inc. +* Copyright 2017-2018 NXP +* +* SPDX-License-Identifier: GPL-2.0+ +*/ + +/*! +* Header file containing the public API for the System Controller (SC) +* Interrupt (IRQ) function. +* +* @addtogroup IRQ_SVC (SVC) Interrupt Service +* +* Module for the Interrupt (IRQ) service. +* +* @{ +*/ + +#ifndef SC_IRQ_API_H +#define SC_IRQ_API_H + +/* Includes */ + +#include <asm/arch/sci/types.h> + +/* Defines */ + +#define SC_IRQ_NUM_GROUP 4U/*!< Number of groups */ + +/*! +* @name Defines for sc_irq_group_t +*/ +/*@{*/ +#define SC_IRQ_GROUP_TEMP 0U/*!< Temp interrupts */ +#define SC_IRQ_GROUP_WDOG 1U/*!< Watchdog interrupts */ +#define SC_IRQ_GROUP_RTC 2U/*!< RTC interrupts */ +#define SC_IRQ_GROUP_WAKE 3U/*!< Wakeup interrupts */ +/*@}*/ + +/*! +* @name Defines for sc_irq_temp_t +*/ +/*@{*/ +#define SC_IRQ_TEMP_HIGH (1U << 0U)/*!< Temp alarm interrupt */
+#defineSC_IRQ_TEMP_CPU0_HIGH(1U << 1U) /*!< CPU0 temp alarm
interrupt */
+#defineSC_IRQ_TEMP_CPU1_HIGH(1U << 2U) /*!< CPU1 temp alarm
interrupt */
+#defineSC_IRQ_TEMP_GPU0_HIGH(1U << 3U) /*!< GPU0 temp
alarm interrupt */
+#defineSC_IRQ_TEMP_GPU1_HIGH(1U << 4U) /*!< GPU1 temp
alarm interrupt */
+#defineSC_IRQ_TEMP_DRC0_HIGH(1U << 5U) /*!< DRC0 temp alarm
interrupt */
+#defineSC_IRQ_TEMP_DRC1_HIGH(1U << 6U) /*!< DRC1 temp alarm
interrupt */
+#defineSC_IRQ_TEMP_VPU_HIGH(1U << 7U) /*!< DRC1 temp
alarm interrupt */
+#defineSC_IRQ_TEMP_PMIC0_HIGH(1U << 8U) /*!< PMIC0 temp
alarm interrupt */
+#defineSC_IRQ_TEMP_PMIC1_HIGH(1U << 9U) /*!< PMIC1 temp
alarm interrupt */
+#defineSC_IRQ_TEMP_LOW(1U << 10U) /*!< Temp alarm
interrupt */
+#defineSC_IRQ_TEMP_CPU0_LOW(1U << 11U) /*!< CPU0 temp
alarm interrupt */
+#defineSC_IRQ_TEMP_CPU1_LOW(1U << 12U) /*!< CPU1 temp
alarm interrupt */
+#defineSC_IRQ_TEMP_GPU0_LOW(1U << 13U) /*!< GPU0 temp
alarm interrupt */
+#defineSC_IRQ_TEMP_GPU1_LOW(1U << 14U) /*!< GPU1 temp
alarm interrupt */
+#defineSC_IRQ_TEMP_DRC0_LOW(1U << 15U) /*!< DRC0 temp
alarm interrupt */
+#defineSC_IRQ_TEMP_DRC1_LOW(1U << 16U) /*!< DRC1 temp
alarm interrupt */
+#defineSC_IRQ_TEMP_VPU_LOW(1U << 17U) /*!< DRC1 temp
alarm interrupt */
+#defineSC_IRQ_TEMP_PMIC0_LOW(1U << 18U) /*!< PMIC0 temp
alarm interrupt */
+#defineSC_IRQ_TEMP_PMIC1_LOW(1U << 19U) /*!< PMIC1 temp
alarm interrupt */
+#defineSC_IRQ_TEMP_PMIC2_HIGH(1U << 20U) /*!< PMIC2 temp
alarm interrupt */
+#defineSC_IRQ_TEMP_PMIC2_LOW(1U << 21U) /*!< PMIC2 temp
alarm interrupt */arch/arm/include/asm/arch-imx8/sci/svc/irq/api.h new file +7
-0+/*@}*/ + +/*! +* @name Defines for sc_irq_wdog_t +*/ +/*@{*/ +#define SC_IRQ_WDOG (1U << 0U/*!< Watchdog interrupt */
arch/arm/include/asm/arch-imx8/sci/svc/irq/api.h new file +14
-0+/*@}*/ + +/*! +* @name Defines for sc_irq_rtc_t +*/ +/*@{*/ +#define SC_IRQ_RTC (1U << 0U)/*!< RTC interrupt */ +/*@}*/ + +/*! +* @name Defines for sc_irq_wake_t +*/ +/*@{*/ +#define SC_IRQ_BUTTON (1U << 0U)/*!< Button interrupt */
arch/arm/include/asm/arch-imx8/sci/svc/irq/api.h new file +74
-0+#define SC_IRQ_PAD (1U << 1U)/*!< Pad wakeup */ +/*@}*/ + +/* Types */ + +/*! +* This type is used to declare an interrupt group. +*/ +typedef uint8_t sc_irq_group_t ; + +/*! +* This type is used to declare a bit mask of temp interrupts. +*/ +typedef uint8_t sc_irq_temp_t ; + +/*! +* This type is used to declare a bit mask of watchdog interrupts. +*/ +typedef uint8_t sc_irq_wdog_t ; + +/*! +* This type is used to declare a bit mask of RTC interrupts. +*/ +typedef uint8_t sc_irq_rtc_t ; + +/*! +* This type is used to declare a bit mask of wakeup interrupts. +*/ +typedef uint8_t sc_irq_wake_t ; + +/* Functions */ + +/*! +* This function enables/disables interrupts. If pending interrupts +* are unmasked, an interrupt will be triggered. +* +* @param[in] ipc IPC handle +* @param[in] resource MU channel +* @param[in] group group the interrupts are in +* @param[in] mask mask of interrupts to affect +* @param[in] enable state to change interrupts to +* +* @return Returns an error code (SC_ERR_NONE = success). +* +* Return errors: +* - SC_PARM if group invalid +*/ +sc_err_t sc_irq_enable (sc_ipc_t ipc,sc_rsrc_t resource, +sc_irq_group_t group,uint32_t mask,sc_bool_t enable); + +/*! +* This function returns the current interrupt status (regardless if +* masked). Automatically clears pending interrupts. +* +* @param[in] ipc IPC handle +* @param[in] resource MU channel +* @param[in] group groups the interrupts are in +* @param[in] status status of interrupts +* +* @return Returns an error code (SC_ERR_NONE = success). +* +* Return errors: +* - SC_PARM if group invalid +* +* The returned \a status may show interrupts pending that are +* currently masked. +*/ +sc_err_t sc_irq_status (sc_ipc_t ipc,sc_rsrc_t resource, +sc_irq_group_t group,uint32_t *status); + +#endif /* SC_IRQ_API_H */ + +/**@}*/ +arch/arm/include/asm/arch-imx8/sci/svc/misc/api.h new file +33
-0@@ -0,0 +1,523 @@ +/* +* Copyright (C) 2016 Freescale Semiconductor, Inc. +* Copyright 2017-2018 NXP +* +* SPDX-License-Identifier: GPL-2.0+ +*/ + +/*! +* Header file containing the public API for the System Controller (SC) +* Miscellaneous (MISC) function. +* +* @addtogroup MISC_SVC (SVC) Miscellaneous Service +* +* Module for the Miscellaneous (MISC) service. +* +* @{ +*/ + +#ifndef SC_MISC_API_H +#define SC_MISC_API_H + +/* Includes */ + +#include <asm/arch/sci/types.h> +#include <asm/arch/sci/svc/rm/api.h> + +/* Defines */ + +/*! +* @name Defines for type widths +*/ +/*@{*/ +#define SC_MISC_DMA_GRP_W 5U/*!< Width of
sc_misc_dma_group_t*/arch/arm/include/asm/arch-imx8/sci/svc/misc/api.h new file +11
-0+/*@}*/ + +/*! Max DMA channel priority group */ +#define SC_MISC_DMA_GRP_MAX 31U + +/*! +* @name Defines for sc_misc_boot_status_t +*/ +/*@{*/ +#define SC_MISC_BOOT_STATUS_SUCCESS 0U/*!< Success */ +#define SC_MISC_BOOT_STATUS_SECURITY 1U/*!< Security violation */
arch/arm/include/asm/arch-imx8/sci/svc/misc/api.h new file +7
-0+/*@}*/ + +/*! +* @name Defines for sc_misc_seco_auth_cmd_t +*/ +/*@{*/ +#define SC_MISC_SECO_AUTH_SECO_FW 0U/*!< SECO Firmware */
+#defineSC_MISC_SECO_AUTH_HDMI_TX_FW1U /*!< HDMI TX
Firmware */
+#defineSC_MISC_SECO_AUTH_HDMI_RX_FW2U /*!< HDMI RX
Firmware */arch/arm/include/asm/arch-imx8/sci/svc/misc/api.h new file +8
-0+/*@}*/ + +/*! +* @name Defines for sc_misc_temp_t +*/ +/*@{*/ +#define SC_MISC_TEMP 0U/*!< Temp sensor */ +#define SC_MISC_TEMP_HIGH 1U/*!< Temp high alarm */
+#defineSC_MISC_TEMP_LOW2U /*!< Temp low alarm
*/arch/arm/include/asm/arch-imx8/sci/svc/misc/api.h new file +7
-0+/*@}*/ + +/*! +* @name Defines for sc_misc_seco_auth_cmd_t +*/ +/*@{*/ +#define SC_MISC_AUTH_CONTAINER 0U/*!< Authenticate container */
arch/arm/include/asm/arch-imx8/sci/svc/misc/api.h new file +2
-0+#define SC_MISC_VERIFY_IMAGE 1U/*!< Verify image */ +#define SC_MISC_REL_CONTAINER 2U/*!< Release container */
arch/arm/include/asm/arch-imx8/sci/svc/misc/api.h new file +296
-0+/*@}*/ + +/* Types */ + +/*! +* This type is used to store a DMA channel priority group. +*/ +typedef uint8_t sc_misc_dma_group_t ; + +/*! +* This type is used report boot status. +*/ +typedef uint8_t sc_misc_boot_status_t ; + +/*! +* This type is used to issue SECO authenticate commands. +*/ +typedef uint8_t sc_misc_seco_auth_cmd_t ; + +/*! +* This type is used report boot status. +*/ +typedef uint8_t sc_misc_temp_t ; + +/* Functions */ + +/*! +* @name Control Functions +* @{ +*/ + +/*! +* This function sets a miscellaneous control value. +* +* @param[in] ipc IPC handle +* @param[in] resource resource the control is associated with +* @param[in] ctrl control to change +* @param[in] val value to apply to the control +* +* @return Returns an error code (SC_ERR_NONE = success). +* +* Return errors: +* - SC_PARM if arguments out of range or invalid, +* - SC_ERR_NOACCESS if caller's partition is not the resource owner or parent +* of the owner +* +* Refer to the [Control List](@ref CONTROLS) for valid control values. +*/ +sc_err_t sc_misc_set_control (sc_ipc_t ipc,sc_rsrc_t resource, +sc_ctrl_t ctrl,uint32_t val); + +/*! +* This function gets a miscellaneous control value. +* +* @param[in] ipc IPC handle +* @param[in] resource resource the control is associated with +* @param[in] ctrl control to get +* @param[out] val pointer to return the control value +* +* @return Returns an error code (SC_ERR_NONE = success). +* +* Return errors: +* - SC_PARM if arguments out of range or invalid, +* - SC_ERR_NOACCESS if caller's partition is not the resource owner or parent +* of the owner +* +* Refer to the [Control List](@ref CONTROLS) for valid control values. +*/ +sc_err_t sc_misc_get_control (sc_ipc_t ipc,sc_rsrc_t resource, +sc_ctrl_t ctrl,uint32_t *val); + +/* @} */ + +/*! +* @name DMA Functions +* @{ +*/ + +/*! +* This function configures the max DMA channel priority group for a +* partition. +* +* @param[in] ipc IPC handle +* @param[in] pt handle of partition to assign \a max +* @param[in] max max priority group (0-31) +* +* @return Returns an error code (SC_ERR_NONE = success). +* +* Return errors: +* - SC_PARM if arguments out of range or invalid, +* - SC_ERR_NOACCESS if caller's partition is not the parent +* of the affected partition +* +* Valid \a max range is 0-31 with 0 being the lowest and 31 the highest. +* Default is the max priority group for the parent partition of \a pt. +*/ +sc_err_t sc_misc_set_max_dma_group (sc_ipc_t ipc,sc_rm_pt_t pt, +sc_misc_dma_group_t max); + +/*! +* This function configures the priority group for a DMA channel. +* +* @param[in] ipc IPC handle +* @param[in] resource DMA channel resource +* @param[in] group priority group (0-31) +* +* @return Returns an error code (SC_ERR_NONE = success). +* +* Return errors: +* - SC_PARM if arguments out of range or invalid, +* - SC_ERR_NOACCESS if caller's partition is not the owner or parent +* of the owner of the DMA channel +* +* Valid \a group range is 0-31 with 0 being the lowest and 31 the highest. +* The max value of \a group is limited by the partition max set using +* sc_misc_set_max_dma_group(). +*/ +sc_err_t sc_misc_set_dma_group (sc_ipc_t ipc,sc_rsrc_t resource, +sc_misc_dma_group_t group); + +/* @} */ + +/*! +* @name Security Functions +* @{ +*/ + +/*! +* This function loads a SECO image. +* +* @param[in] ipc IPC handle +* @param[in] addr_src address of image source +* @param[in] addr_dst address of image destination +* @param[in] len lenth of image to load +* @param[in] fw SC_TRUE = firmware load +* +* @return Returns an error code (SC_ERR_NONE = success). +* +* Return errors codes: +* - SC_ERR_PARM if word fuse index param out of range or invalid +* - SC_ERR_UNAVAILABLE if SECO not available +* +* This is used to load images via the SECO. Examples include SECO +* Firmware and IVT/CSF data used for authentication. These are usually +* loaded into SECO TCM. \a addr_src is in secure memory. +* +* See the Security Reference Manual (SRM) for more info. +*/ +sc_err_t sc_misc_seco_image_load (sc_ipc_t ipc,sc_faddr_t addr_src, +sc_faddr_t addr_dst,uint32_t len,sc_bool_t fw); + +/*! +* This function is used to authenticate a SECO image or command. +* +* @param[in] ipc IPC handle +* @param[in] cmd authenticate command +* @param[in] addr address of/or metadata +* +* @return Returns an error code (SC_ERR_NONE = success). +* +* Return errors codes: +* - SC_ERR_PARM if word fuse index param out of range or invalid +* - SC_ERR_UNAVAILABLE if SECO not available +* +* This is used to authenticate a SECO image or issue a security +* command. \a addr often points to an container. It is also +* just data (or even unused) for some commands. +* +* See the Security Reference Manual (SRM) for more info. +*/ +sc_err_t sc_misc_seco_authenticate (sc_ipc_t ipc, +sc_misc_seco_auth_cmd_t cmd,sc_faddr_t addr); + +/*! +* This function securely writes a group of fuse words. +* +* @param[in] ipc IPC handle +* @param[in] addr address of message block +* +* @return Returns and error code (SC_ERR_NONE = success). +* +* Return errors codes: +* - SC_ERR_UNAVAILABLE if SECO not available +* +* Note \a addr must be a pointer into secure RAM. The contents at +* this location are a signed fuse command message block. +* +* See the Security Reference Manual (SRM) for more info. +*/ +sc_err_t sc_misc_seco_fuse_write (sc_ipc_t ipc,sc_faddr_t addr); + +/*! +* This function securely enables debug. +* +* @param[in] ipc IPC handle +* @param[in] addr address of message block +* +* @return Returns and error code (SC_ERR_NONE = success). +* +* Return errors codes: +* - SC_ERR_UNAVAILABLE if SECO not available +* +* Note \a addr must be a pointer into secure RAM. The contents at +* this location are a signed fuse command message block. +* +* See the Security Reference Manual (SRM) for more info. +*/ +sc_err_t sc_misc_seco_enable_debug (sc_ipc_t ipc,sc_faddr_t addr); + +/*! +* This function updates the lifecycle of the device. +* +* @param[in] ipc IPC handle +* @param[in] lifecycle new lifecycle +* +* @return Returns and error code (SC_ERR_NONE = success). +* +* Return errors codes: +* - SC_ERR_UNAVAILABLE if SECO not available +* +* See the Security Reference Manual (SRM) for more info. +*/ +sc_err_t sc_misc_seco_forward_lifecycle (sc_ipc_t ipc,uint32_t lifecycle); + +/*! +* This function securely reverses the lifecycle. +* +* @param[in] ipc IPC handle +* @param[in] addr address of message block +* +* @return Returns and error code (SC_ERR_NONE = success). +* +* Return errors codes: +* - SC_ERR_UNAVAILABLE if SECO not available +* +* Note \a addr must be a pointer into secure RAM. The contents at +* this location are a signed fuse command message block. +* +* See the Security Reference Manual (SRM) for more info. +*/ +sc_err_t sc_misc_seco_return_lifecycle (sc_ipc_t ipc,sc_faddr_t addr); + +/*! +* This function is used to return the SECO FW build info. +* +* @param[in] ipc IPC handle +* @param[out] version pointer to return build number +* @param[out] commit pointer to return commit ID (git SHA-1) +*/ +void sc_misc_seco_build_info (sc_ipc_t ipc,uint32_t *version, +uint32_t *commit); + +/* @} */ + +/*! +* @name Debug Functions +* @{ +*/ + +/*! +* This function is used output a debug character from the SCU UART. +* +* @param[in] ipc IPC handle +* @param[in] ch character to output +*/ +void sc_misc_debug_out (sc_ipc_t ipc,uint8_t ch); + +/*! +* This function starts/stops emulation waveform capture. +* +* @param[in] ipc IPC handle +* @param[in] enable flag to enable/disable capture +* +* @return Returns an error code (SC_ERR_NONE = success). +* +* Return errors: +* - SC_ERR_UNAVAILABLE if not running on emulation +*/ +sc_err_t sc_misc_waveform_capture (sc_ipc_t ipc,sc_bool_t enable); + +/*! +* This function is used to return the SCFW build info. +* +* @param[in] ipc IPC handle +* @param[out] build pointer to return build number +* @param[out] commit pointer to return commit ID (git SHA-1) +*/ +void sc_misc_build_info (sc_ipc_t ipc,uint32_t *build, +uint32_t *commit); + +/*! +* This function is used to return the device's unique ID. +* +* @param[in] ipc IPC handle +* @param[out] id_l pointer to return lower 32-bit of ID [31:0] +* @param[out] id_h pointer to return upper 32-bits of ID [63:32]
+ */arch/arm/include/asm/arch-imx8/sci/svc/misc/api.h new file +155
-0+void sc_misc_unique_id (sc_ipc_t ipc,uint32_t *id_l, +uint32_t *id_h); + +/* @} */ + +/*! +* @name Other Functions +* @{ +*/ + +/*! +* This function configures the ARI match value for PCIe/SATA resources. +* +* @param[in] ipc IPC handle +* @param[in] resource match resource +* @param[in] resource_mst PCIe/SATA master to match +* @param[in] ari ARI to match +* @param[in] enable enable match or not +* +* @return Returns an error code (SC_ERR_NONE = success). +* +* Return errors: +* - SC_PARM if arguments out of range or invalid, +* - SC_ERR_NOACCESS if caller's partition is not the owner or parent +* of the owner of the resource and translation +* +* For PCIe, the ARI is the 16-bit value that includes the bus number, +* device number, and function number. For SATA, this value includes the +* FISType and PM_Port. +*/ +sc_err_t sc_misc_set_ari (sc_ipc_t ipc,sc_rsrc_t resource, +sc_rsrc_t resource_mst,uint16_t ari,sc_bool_t enable); + +/*! +* This function reports boot status. +* +* @param[in] ipc IPC handle +* @param[in] status boot status +* +* This is used by SW partitions to report status of boot. This is +* normally used to report a boot failure. +*/ +void sc_misc_boot_status (sc_ipc_t ipc,sc_misc_boot_status_t status); + +/*! +* This function tells the SCFW that a CPU is done booting. +* +* @param[in] ipc IPC handle +* @param[in] cpu CPU that is done booting +* +* This is called by early booting CPUs to report they are done with +* initialization. After starting early CPUs, the SCFW halts the +* booting process until they are done. During this time, early +* CPUs can call the SCFW with lower latency as the SCFW is idle. +* +* @return Returns an error code (SC_ERR_NONE = success). +* +* Return errors: +* - SC_PARM if arguments out of range or invalid, +* - SC_ERR_NOACCESS if caller's partition is not the CPU owner +*/ +sc_err_t sc_misc_boot_done (sc_ipc_t ipc,sc_rsrc_t cpu); + +/*! +* This function reads a given fuse word index. +* +* @param[in] ipc IPC handle +* @param[in] word fuse word index +* @param[out] val fuse read value +* +* @return Returns and error code (SC_ERR_NONE = success). +* +* Return errors codes: +* - SC_ERR_PARM if word fuse index param out of range or invalid +* - SC_ERR_NOACCESS if read operation failed +* - SC_ERR_LOCKED if read operation is locked +*/ +sc_err_t sc_misc_otp_fuse_read (sc_ipc_t ipc,uint32_t word,uint32_t *val); + +/*! +* This function writes a given fuse word index. +* +* @param[in] ipc IPC handle +* @param[in] word fuse word index +* @param[in] val fuse write value +* +* @return Returns and error code (SC_ERR_NONE = success). +* +* Return errors codes: +* - SC_ERR_PARM if word fuse index param out of range or invalid +* - SC_ERR_NOACCESS if write operation failed +* - SC_ERR_LOCKED if write operation is locked +*/ +sc_err_t sc_misc_otp_fuse_write (sc_ipc_t ipc,uint32_t word,uint32_t val); + +/*! +* This function sets a temp sensor alarm. +* +* @param[in] ipc IPC handle +* @param[in] resource resource with sensor +* @param[in] temp alarm to set +* @param[in] celsius whole part of temp to set +* @param[in] tenths fractional part of temp to set +* +* @return Returns and error code (SC_ERR_NONE = success). +* +* This function will enable the alarm interrupt if the temp requested is +* not the min/max temp. This enable automatically clears when the alarm +* occurs and this function has to be called again to re-enable. +* +* Return errors codes: +* - SC_ERR_PARM if parameters invalid +*/ +sc_err_t sc_misc_set_temp (sc_ipc_t ipc,sc_rsrc_t resource, +sc_misc_temp_t temp,int16_t celsius,int8_t tenths); + +/*! +* This function gets a temp sensor value. +* +* @param[in] ipc IPC handle +* @param[in] resource resource with sensor +* @param[in] temp value to get (sensor or alarm) +* @param[out] celsius whole part of temp to get +* @param[out] tenths fractional part of temp to get +* +* @return Returns and error code (SC_ERR_NONE = success). +* +* Return errors codes: +* - SC_ERR_PARM if parameters invalid +*/ +sc_err_t sc_misc_get_temp (sc_ipc_t ipc,sc_rsrc_t resource, +sc_misc_temp_t temp,int16_t *celsius,int8_t *tenths); + +/*! +* This function returns the boot device. +* +* @param[in] ipc IPC handle +* @param[out] dev pointer to return boot device +*/ +void sc_misc_get_boot_dev (sc_ipc_t ipc,sc_rsrc_t *dev); + +/*! +* This function returns the current status of the ON/OFF button. +* +* @param[in] ipc IPC handle +* @param[out] status pointer to return button status +*/ +void sc_misc_get_button_status (sc_ipc_t ipc,sc_bool_t *status); + +/* @} */ + +#endif /* SC_MISC_API_H */ + +/**@}*/ +arch/arm/include/asm/arch-imx8/sci/svc/pad/api.h new file +44
-0@@ -0,0 +1,568 @@ +/* +* Copyright (C) 2016 Freescale Semiconductor, Inc. +* Copyright 2017-2018 NXP +* +* SPDX-License-Identifier: GPL-2.0+ +*/ + +/*! +* Header file containing the public API for the System Controller (SC) +* Pad Control (PAD) function. +* +* @addtogroup PAD_SVC (SVC) Pad Service +* +* Module for the Pad Control (PAD) service. +* +* @details +* +* Pad configuration is managed by SC firmware. The pad configuration +* features supported by the SC firmware include: +* +* - Configuring the mux, input/output connection, and low-power isolation +mode. +* - Configuring the technology-specific pad setting such as drive strength, +* pullup/pulldown, etc. +* - Configuring compensation for pad groups with dual voltage capability. +* +* Pad functions fall into one of three categories. Generic functions are +* common to all SoCs and all process technologies. SoC functions are raw +* low-level functions. Technology-specific functions are specific to the +* process technology. +* +* The list of pads is SoC specific. Refer to the SoC [Pad List](@ref PADS) +* for valid pad values. Note that all pads exist on a die but may or +* may not be brought out by the specific package. Mapping of pads to +* package pins/balls is documented in the associated Data Sheet. Some pads +* may not be brought out because the part (die+package) is defeatured and +* some pads may connect to the substrate in the package. +* +* Some pads (SC_P_COMP_*) that can be specified are not individual pads +* but are in fact pad groups. These groups have additional configuration +* that can be done using the sc_pad_set_gp_28fdsoi_comp() function. More +* info on these can be found in the associated Reference Manual. +* +* Pads are managed as a resource by the Resource Manager (RM). They have
+ * assigned owners and only the owners can configure the pads. Some of the
+ * pads are reserved for use by the SCFW itself and this can be overriden
+ * with the implementation ofboard_config_sc(). Additionally, pads may
+ * be assigned to various other partitions via the implementation of
+ *board_system_config().
+ *
+ * Note muxing two input pads to the same IP functional signal will
+ * result in undefined behavior.
+ * @{
+ */arch/arm/include/asm/arch-imx8/sci/svc/pad/api.h new file +16
-0+ +#ifndef SC_PAD_API_H +#define SC_PAD_API_H + +/* Includes */ + +#include <asm/arch/sci/types.h> +#include <asm/arch/sci/svc/rm/api.h> + +/* Defines */ + +/*! +* @name Defines for type widths +*/ +/*@{*/ +#define SC_PAD_MUX_W 3U/*!< Width of mux parameter */
arch/arm/include/asm/arch-imx8/sci/svc/pad/api.h new file +27
-0+/*@}*/ + +/*! +* @name Defines for sc_pad_config_t +*/ +/*@{*/ +#define SC_PAD_CONFIG_NORMAL 0U/*!< Normal */ +#define SC_PAD_CONFIG_OD 1U/*!< Open Drain */ +#define SC_PAD_CONFIG_OD_IN 2U/*!< Open Drain and input */ +#define SC_PAD_CONFIG_OUT_IN 3U/*!< Output and input */ +/*@}*/ + +/*! +* @name Defines for sc_pad_iso_t +*/ +/*@{*/ +#define SC_PAD_ISO_OFF 0U/*!< ISO latch is transparent */ +#define SC_PAD_ISO_EARLY 1U/*!< Follow EARLY_ISO */ +#define SC_PAD_ISO_LATE 2U/*!< Follow LATE_ISO */ +#define SC_PAD_ISO_ON 3U/*!< ISO latched data is held */ +/*@}*/ + +/*! +* @name Defines for sc_pad_28fdsoi_dse_t +*/ +/*@{*/ +#define SC_PAD_28FDSOI_DSE_18V_1MA 0U/*!< Drive strength of 1mA for 1.8v */
+#defineSC_PAD_28FDSOI_DSE_18V_2MA1U /*!< Drive strength of
2mA for 1.8v */
+#defineSC_PAD_28FDSOI_DSE_18V_4MA2U /*!< Drive strength of
4mA for 1.8v */
+#defineSC_PAD_28FDSOI_DSE_18V_6MA3U /*!< Drive strength of
6mA for 1.8v */
+#defineSC_PAD_28FDSOI_DSE_18V_8MA4U /*!< Drive strength of
8mA for 1.8v */
+#defineSC_PAD_28FDSOI_DSE_18V_10MA5U /*!< Drive strength of
10mA for 1.8v */
+#defineSC_PAD_28FDSOI_DSE_18V_12MA6U /*!< Drive strength of
12mA for 1.8v */
+#defineSC_PAD_28FDSOI_DSE_18V_HS7U /*!< High-speed drive
strength for 1.8v */
+#defineSC_PAD_28FDSOI_DSE_33V_2MA0U /*!< Drive strength of
2mA for 3.3v */
+#defineSC_PAD_28FDSOI_DSE_33V_4MA1U /*!< Drive strength of
4mA for 3.3v */
+#defineSC_PAD_28FDSOI_DSE_33V_8MA2U /*!< Drive strength of
8mA for 3.3v */
+#defineSC_PAD_28FDSOI_DSE_33V_12MA3U /*!< Drive strength of
12mA for 3.3v */
+#defineSC_PAD_28FDSOI_DSE_DV_HIGH0U /*!< High drive strength
for dual volt */
+#defineSC_PAD_28FDSOI_DSE_DV_LOW1U /*!< Low drive strength
for dual volt */arch/arm/include/asm/arch-imx8/sci/svc/pad/api.h new file +7
-0+/*@}*/ + +/*! +* @name Defines for sc_pad_28fdsoi_ps_t +*/ +/*@{*/ +#define SC_PAD_28FDSOI_PS_KEEPER 0U/*!< Bus-keeper (only valid for 1.8v) */
arch/arm/include/asm/arch-imx8/sci/svc/pad/api.h new file +424
-0+#define SC_PAD_28FDSOI_PS_PU 1U/*!< Pull-up */ +#define SC_PAD_28FDSOI_PS_PD 2U/*!< Pull-down */ +#define SC_PAD_28FDSOI_PS_NONE 3U/*!< No pull (disabled) */ +/*@}*/ + +/*! +* @name Defines for sc_pad_28fdsoi_pus_t +*/ +/*@{*/ +#define SC_PAD_28FDSOI_PUS_30K_PD 0U/*!< 30K pull-down */ +#define SC_PAD_28FDSOI_PUS_100K_PU 1U/*!< 100K pull-up */ +#define SC_PAD_28FDSOI_PUS_3K_PU 2U/*!< 3K pull-up */ +#define SC_PAD_28FDSOI_PUS_30K_PU 3U/*!< 30K pull-up */ +/*@}*/ + +/*! +* @name Defines for sc_pad_wakeup_t +*/ +/*@{*/ +#define SC_PAD_WAKEUP_OFF 0U/*!< Off */ +#define SC_PAD_WAKEUP_CLEAR 1U/*!< Clears pending flag */ +#define SC_PAD_WAKEUP_LOW_LVL 4U/*!< Low level */ +#define SC_PAD_WAKEUP_FALL_EDGE 5U/*!< Falling edge */ +#define SC_PAD_WAKEUP_RISE_EDGE 6U/*!< Rising edge */ +#define SC_PAD_WAKEUP_HIGH_LVL 7U/*!< High-level */ +/*@}*/ + +/* Types */ + +/*! +* This type is used to declare a pad config. It determines how the +* output data is driven, pull-up is controlled, and input signal is +* connected. Normal and OD are typical and only connect the input +* when the output is not driven. The IN options are less common and +* force an input connection even when driving the output. +*/ +typedef uint8_t sc_pad_config_t ; + +/*! +* This type is used to declare a pad low-power isolation config. +* ISO_LATE is the most common setting. ISO_EARLY is only used when +* an output pad is directly determined by another input pad. The +* other two are only used when SW wants to directly contol isolation. +*/ +typedef uint8_t sc_pad_iso_t ; + +/*! +* This type is used to declare a drive strength. Note it is specific +* to 28FDSOI. Also note that valid values depend on the pad type. +*/ +typedef uint8_t sc_pad_28fdsoi_dse_t ; + +/*! +* This type is used to declare a pull select. Note it is specific +* to 28FDSOI. +*/ +typedef uint8_t sc_pad_28fdsoi_ps_t ; + +/*! +* This type is used to declare a pull-up select. Note it is specific +* to 28FDSOI HSIC pads. +*/ +typedef uint8_t sc_pad_28fdsoi_pus_t ; + +/*! +* This type is used to declare a wakeup mode of a pad. +*/ +typedef uint8_t sc_pad_wakeup_t ; + +/* Functions */ + +/*! +* @name Generic Functions +* @{ +*/ + +/*! +* This function configures the mux settings for a pad. This includes +* the signal mux, pad config, and low-power isolation mode. +* +* @param[in] ipc IPC handle +* @param[in] pad pad to configure +* @param[in] mux mux setting +* @param[in] config pad config +* @param[in] iso low-power isolation mode +* +* @return Returns an error code (SC_ERR_NONE = success). +* +* Return errors: +* - SC_PARM if arguments out of range or invalid, +* - SC_ERR_NOACCESS if caller's partition is not the pad owner +* +* Note muxing two input pads to the same IP functional signal will +* result in undefined behavior. +* +* Refer to the SoC [Pad List](@ref PADS) for valid pad values. +*/ +sc_err_t sc_pad_set_mux (sc_ipc_t ipc,sc_pad_t pad, +uint8_t mux,sc_pad_config_t config,sc_pad_iso_t iso); + +/*! +* This function gets the mux settings for a pad. This includes +* the signal mux, pad config, and low-power isolation mode. +* +* @param[in] ipc IPC handle +* @param[in] pad pad to query +* @param[out] mux pointer to return mux setting +* @param[out] config pointer to return pad config +* @param[out] iso pointer to return low-power isolation mode +* +* @return Returns an error code (SC_ERR_NONE = success). +* +* Return errors: +* - SC_PARM if arguments out of range or invalid, +* - SC_ERR_NOACCESS if caller's partition is not the pad owner +* +* Refer to the SoC [Pad List](@ref PADS) for valid pad values. +*/ +sc_err_t sc_pad_get_mux (sc_ipc_t ipc,sc_pad_t pad, +uint8_t *mux,sc_pad_config_t *config,sc_pad_iso_t *iso); + +/*! +* This function configures the general purpose pad control. This +* is technology dependent and includes things like drive strength, +* slew rate, pull up/down, etc. Refer to the SoC Reference Manual +* for bit field details. +* +* @param[in] ipc IPC handle +* @param[in] pad pad to configure +* @param[in] ctrl control value to set +* +* @return Returns an error code (SC_ERR_NONE = success). +* +* Return errors: +* - SC_PARM if arguments out of range or invalid, +* - SC_ERR_NOACCESS if caller's partition is not the pad owner +* +* Refer to the SoC [Pad List](@ref PADS) for valid pad values. +*/ +sc_err_t sc_pad_set_gp (sc_ipc_t ipc,sc_pad_t pad,uint32_t ctrl); + +/*! +* This function gets the general purpose pad control. This +* is technology dependent and includes things like drive strength, +* slew rate, pull up/down, etc. Refer to the SoC Reference Manual +* for bit field details. +* +* @param[in] ipc IPC handle +* @param[in] pad pad to query +* @param[out] ctrl pointer to return control value +* +* @return Returns an error code (SC_ERR_NONE = success). +* +* Return errors: +* - SC_PARM if arguments out of range or invalid, +* - SC_ERR_NOACCESS if caller's partition is not the pad owner +* +* Refer to the SoC [Pad List](@ref PADS) for valid pad values. +*/ +sc_err_t sc_pad_get_gp (sc_ipc_t ipc,sc_pad_t pad,uint32_t *ctrl); + +/*! +* This function configures the wakeup mode of the pad. +* +* @param[in] ipc IPC handle +* @param[in] pad pad to configure +* @param[in] wakeup wakeup to set +* +* @return Returns an error code (SC_ERR_NONE = success). +* +* Return errors: +* - SC_PARM if arguments out of range or invalid, +* - SC_ERR_NOACCESS if caller's partition is not the pad owner +* +* Refer to the SoC [Pad List](@ref PADS) for valid pad values. +*/ +sc_err_t sc_pad_set_wakeup (sc_ipc_t ipc,sc_pad_t pad, +sc_pad_wakeup_t wakeup); + +/*! +* This function gets the wakeup mode of a pad. +* +* @param[in] ipc IPC handle +* @param[in] pad pad to query +* @param[out] wakeup pointer to return wakeup +* +* @return Returns an error code (SC_ERR_NONE = success). +* +* Return errors: +* - SC_PARM if arguments out of range or invalid, +* - SC_ERR_NOACCESS if caller's partition is not the pad owner +* +* Refer to the SoC [Pad List](@ref PADS) for valid pad values. +*/ +sc_err_t sc_pad_get_wakeup (sc_ipc_t ipc,sc_pad_t pad, +sc_pad_wakeup_t *wakeup); + +/*! +* This function configures a pad. +* +* @param[in] ipc IPC handle +* @param[in] pad pad to configure +* @param[in] mux mux setting +* @param[in] config pad config +* @param[in] iso low-power isolation mode +* @param[in] ctrl control value +* @param[in] wakeup wakeup to set +* +* @see sc_pad_set_mux(). +* @see sc_pad_set_gp(). +* +* Return errors: +* - SC_PARM if arguments out of range or invalid, +* - SC_ERR_NOACCESS if caller's partition is not the pad owner +* +* @return Returns an error code (SC_ERR_NONE = success). +* +* Note muxing two input pads to the same IP functional signal will +* result in undefined behavior. +* +* Refer to the SoC [Pad List](@ref PADS) for valid pad values. +*/ +sc_err_t sc_pad_set_all (sc_ipc_t ipc,sc_pad_t pad,uint8_t mux, +sc_pad_config_t config,sc_pad_iso_t iso,uint32_t ctrl, +sc_pad_wakeup_t wakeup); + +/*! +* This function gets a pad's config. +* +* @param[in] ipc IPC handle +* @param[in] pad pad to query +* @param[out] mux pointer to return mux setting +* @param[out] config pointer to return pad config +* @param[out] iso pointer to return low-power isolation mode +* @param[out] ctrl pointer to return control value +* @param[out] wakeup pointer to return wakeup to set +* +* @see sc_pad_set_mux(). +* @see sc_pad_set_gp(). +* +* Return errors: +* - SC_PARM if arguments out of range or invalid, +* - SC_ERR_NOACCESS if caller's partition is not the pad owner +* +* @return Returns an error code (SC_ERR_NONE = success). +* +* Refer to the SoC [Pad List](@ref PADS) for valid pad values. +*/ +sc_err_t sc_pad_get_all (sc_ipc_t ipc,sc_pad_t pad,uint8_t *mux, +sc_pad_config_t *config,sc_pad_iso_t *iso,uint32_t *ctrl, +sc_pad_wakeup_t *wakeup); + +/* @} */ + +/*! +* @name SoC Specific Functions +* @{ +*/ + +/*! +* This function configures the settings for a pad. This setting is SoC +* specific. +* +* @param[in] ipc IPC handle +* @param[in] pad pad to configure +* @param[in] val value to set +* +* @return Returns an error code (SC_ERR_NONE = success). +* +* Return errors: +* - SC_PARM if arguments out of range or invalid, +* - SC_ERR_NOACCESS if caller's partition is not the pad owner +* +* Refer to the SoC [Pad List](@ref PADS) for valid pad values. +*/ +sc_err_t sc_pad_set (sc_ipc_t ipc,sc_pad_t pad,uint32_t val); + +/*! +* This function gets the settings for a pad. This setting is SoC +* specific. +* +* @param[in] ipc IPC handle +* @param[in] pad pad to query +* @param[out] val pointer to return setting +* +* @return Returns an error code (SC_ERR_NONE = success). +* +* Return errors: +* - SC_PARM if arguments out of range or invalid, +* - SC_ERR_NOACCESS if caller's partition is not the pad owner +* +* Refer to the SoC [Pad List](@ref PADS) for valid pad values. +*/ +sc_err_t sc_pad_get (sc_ipc_t ipc,sc_pad_t pad,uint32_t *val); + +/* @} */ + +/*! +* @name Technology Specific Functions +* @{ +*/ + +/*! +* This function configures the pad control specific to 28FDSOI. +* +* @param[in] ipc IPC handle +* @param[in] pad pad to configure +* @param[in] dse drive strength +* @param[in] ps pull select +* +* @return Returns an error code (SC_ERR_NONE = success). +* +* Return errors: +* - SC_PARM if arguments out of range or invalid, +* - SC_ERR_NOACCESS if caller's partition is not the pad owner, +* - SC_ERR_UNAVAILABLE if process not applicable +* +* Refer to the SoC [Pad List](@ref PADS) for valid pad values. +*/ +sc_err_t sc_pad_set_gp_28fdsoi (sc_ipc_t ipc,sc_pad_t pad, +sc_pad_28fdsoi_dse_t dse,sc_pad_28fdsoi_ps_t ps); + +/*! +* This function gets the pad control specific to 28FDSOI. +* +* @param[in] ipc IPC handle +* @param[in] pad pad to query +* @param[out] dse pointer to return drive strength +* @param[out] ps pointer to return pull select +* +* @return Returns an error code (SC_ERR_NONE = success). +* +* Return errors: +* - SC_PARM if arguments out of range or invalid, +* - SC_ERR_NOACCESS if caller's partition is not the pad owner, +* - SC_ERR_UNAVAILABLE if process not applicable +* +* Refer to the SoC [Pad List](@ref PADS) for valid pad values. +*/ +sc_err_t sc_pad_get_gp_28fdsoi (sc_ipc_t ipc,sc_pad_t pad, +sc_pad_28fdsoi_dse_t *dse,sc_pad_28fdsoi_ps_t *ps); + +/*! +* This function configures the pad control specific to 28FDSOI. +* +* @param[in] ipc IPC handle +* @param[in] pad pad to configure +* @param[in] dse drive strength +* @param[in] hys hysteresis +* @param[in] pus pull-up select +* @param[in] pke pull keeper enable +* @param[in] pue pull-up enable +* +* @return Returns an error code (SC_ERR_NONE = success). +* +* Return errors: +* - SC_PARM if arguments out of range or invalid, +* - SC_ERR_NOACCESS if caller's partition is not the pad owner, +* - SC_ERR_UNAVAILABLE if process not applicable +* +* Refer to the SoC [Pad List](@ref PADS) for valid pad values. +*/ +sc_err_t sc_pad_set_gp_28fdsoi_hsic (sc_ipc_t ipc,sc_pad_t pad, +sc_pad_28fdsoi_dse_t dse,sc_bool_t hys,sc_pad_28fdsoi_pus_t pus, +sc_bool_t pke,sc_bool_t pue); + +/*! +* This function gets the pad control specific to 28FDSOI. +* +* @param[in] ipc IPC handle +* @param[in] pad pad to query +* @param[out] dse pointer to return drive strength +* @param[out] hys pointer to return hysteresis +* @param[out] pus pointer to return pull-up select +* @param[out] pke pointer to return pull keeper enable +* @param[out] pue pointer to return pull-up enable +* +* @return Returns an error code (SC_ERR_NONE = success). +* +* Return errors: +* - SC_PARM if arguments out of range or invalid, +* - SC_ERR_NOACCESS if caller's partition is not the pad owner, +* - SC_ERR_UNAVAILABLE if process not applicable +* +* Refer to the SoC [Pad List](@ref PADS) for valid pad values. +*/ +sc_err_t sc_pad_get_gp_28fdsoi_hsic (sc_ipc_t ipc,sc_pad_t pad, +sc_pad_28fdsoi_dse_t *dse,sc_bool_t *hys,sc_pad_28fdsoi_pus_t *pus, +sc_bool_t *pke,sc_bool_t *pue); + +/*! +* This function configures the compensation control specific to 28FDSOI. +* +* @param[in] ipc IPC handle +* @param[in] pad pad to configure +* @param[in] compen compensation/freeze mode +* @param[in] fastfrz fast freeze +* @param[in] rasrcp compensation code for PMOS +* @param[in] rasrcn compensation code for NMOS +* @param[in] nasrc_sel NASRC read select +* @param[in] psw_ovr 2.5v override +* +* @return Returns an error code (SC_ERR_NONE = success). +* +* Return errors: +* - SC_PARM if arguments out of range or invalid, +* - SC_ERR_NOACCESS if caller's partition is not the pad owner, +* - SC_ERR_UNAVAILABLE if process not applicable +* +* Refer to the SoC [Pad List](@ref PADS) for valid pad values. +* +* Note \a psw_ovr is only applicable to pads supporting 2.5 volt +* operation (e.g. some Ethernet pads). +*/ +sc_err_t sc_pad_set_gp_28fdsoi_comp (sc_ipc_t ipc,sc_pad_t pad, +uint8_t compen,sc_bool_t fastfrz,uint8_t rasrcp,uint8_t rasrcn, +sc_bool_t nasrc_sel,sc_bool_t psw_ovr); + +/*! +* This function gets the compensation control specific to 28FDSOI. +* +* @param[in] ipc IPC handle +* @param[in] pad pad to query +* @param[out] compen pointer to return compensation/freeze mode
+ * @param[out] fastfrz pointer to return fast freeze + * @param[out] rasrcp pointer to return compensation code for PMOS + * @param[out] rasrcn pointer to return compensation code for NMOS + * @param[out] nasrc_sel pointer to return NASRC read select + * @param[out] compok pointer to return compensation status + * @param[out] nasrc pointer to return NASRCP/NASRCN + * @param[out] psw_ovr pointer to return the 2.5v override+ *
+ * @return Returns an error code (SC_ERR_NONE= success).
+ *
+ * Return errors:
+ * -SC_PARMif arguments out of range or invalid,
+ * -SC_ERR_NOACCESSif caller's partition is not the pad owner,
+ * -SC_ERR_UNAVAILABLEif process not applicable
+ *
+ * Refer to the SoC [Pad List](@ref PADS) for valid pad values.
+ */arch/arm/include/asm/arch-imx8/sci/svc/pad/api.h new file +3
-0+sc_err_t sc_pad_get_gp_28fdsoi_comp (sc_ipc_t ipc,sc_pad_t pad, +uint8_t *compen,sc_bool_t *fastfrz,uint8_t *rasrcp,uint8_t *rasrcn, + sc_bool_t *nasrc_sel, sc_bool_t *compok, uint8_t *nasrc, sc_bool_t
*psw_ovr);arch/arm/include/asm/arch-imx8/sci/svc/pad/api.h new file +7
-0+ +/* @} */ + +#endif /* SC_PAD_API_H */ + +/**@}*/ +arch/arm/include/asm/arch-imx8/sci/svc/pm/api.h new file +34
-0@@ -0,0 +1,686 @@ +/* +* Copyright (C) 2016 Freescale Semiconductor, Inc. +* Copyright 2017-2018 NXP +* +* SPDX-License-Identifier: GPL-2.0+ +*/ + +/*! +* Header file containing the public API for the System Controller (SC) +* Power Management (PM) function. This includes functions for power state +* control, clock control, reset control, and wake-up event control. +* +* @addtogroup PM_SVC (SVC) Power Management Service +* +* Module for the Power Management (PM) service. +* +* @{ +*/ + +#ifndef SC_PM_API_H +#define SC_PM_API_H + +/* Includes */ + +#include <asm/arch/sci/types.h> +#include <asm/arch/sci/svc/rm/api.h> + +/* Defines */ + +/*! +* @name Defines for type widths +*/ +/*@{*/ +#define SC_PM_POWER_MODE_W 2U/*!< Width of
sc_pm_power_mode_t*/
+#defineSC_PM_CLOCK_MODE_W3U /*!< Width ofsc_pm_clock_mode_t*/
+#defineSC_PM_RESET_TYPE_W2U /*!< Width ofsc_pm_reset_type_t*/
+#defineSC_PM_RESET_REASON_W3U /*!< Width ofsc_pm_reset_reason_t*/arch/arm/include/asm/arch-imx8/sci/svc/pm/api.h new file +49
-0+/*@}*/ + +/*! +* @name Defines for clock indexes (sc_pm_clk_t) +*/ +/*@{*/ +/*@}*/ + +/*! +* @name Defines for ALL parameters +*/ +/*@{*/ +#define SC_PM_CLK_ALL UINT8_MAX/*!< All clocks */ +/*@}*/ + +/*! +* @name Defines for sc_pm_power_mode_t +*/ +/*@{*/ +#define SC_PM_PW_MODE_OFF 0U/*!< Power off */ +#define SC_PM_PW_MODE_STBY 1U/*!< Power in standby */ +#define SC_PM_PW_MODE_LP 2U/*!< Power in low-power */ +#define SC_PM_PW_MODE_ON 3U/*!< Power on */ +/*@}*/ + +/*! +* @name Defines for sc_pm_clk_t +*/ +/*@{*/ +#define SC_PM_CLK_SLV_BUS 0U/*!< Slave bus clock */ +#define SC_PM_CLK_MST_BUS 1U/*!< Master bus clock */ +#define SC_PM_CLK_PER 2U/*!< Peripheral clock */ +#define SC_PM_CLK_PHY 3U/*!< Phy clock */ +#define SC_PM_CLK_MISC 4U/*!< Misc clock */ +#define SC_PM_CLK_MISC0 0U/*!< Misc 0 clock */ +#define SC_PM_CLK_MISC1 1U/*!< Misc 1 clock */ +#define SC_PM_CLK_MISC2 2U/*!< Misc 2 clock */ +#define SC_PM_CLK_MISC3 3U/*!< Misc 3 clock */ +#define SC_PM_CLK_MISC4 4U/*!< Misc 4 clock */ +#define SC_PM_CLK_CPU 2U/*!< CPU clock */ +#define SC_PM_CLK_PLL 4U/*!< PLL */ +#define SC_PM_CLK_BYPASS 4U/*!< Bypass clock */ +/*@}*/ + +/*! +* @name Defines for sc_pm_clk_mode_t +*/ +/*@{*/ +#define SC_PM_CLK_MODE_ROM_INIT 0U/*!< Clock is initialized by ROM. */
+#defineSC_PM_CLK_MODE_OFF1U /*!< Clock is disabled
*/
+#defineSC_PM_CLK_MODE_ON2U /*!< Clock is enabled.
*/
+#defineSC_PM_CLK_MODE_AUTOGATE_SW3U /*!< Clock is in SW
autogate mode */
+#defineSC_PM_CLK_MODE_AUTOGATE_HW4U /*!< Clock is in HW
autogate mode */
+#defineSC_PM_CLK_MODE_AUTOGATE_SW_HW5U /*!< Clock is in
SW-HW autogate mode */arch/arm/include/asm/arch-imx8/sci/svc/pm/api.h new file +9
-0+/*@}*/ + +/*! +* @name Defines for sc_pm_clk_parent_t +*/ +/*@{*/ +#define SC_PM_PARENT_XTAL 0U/*!< Parent is XTAL. */ +#define SC_PM_PARENT_PLL0 1U/*!< Parent is PLL0 */ +#define SC_PM_PARENT_PLL1 2U/*!< Parent is PLL1 or PLL0/2 */
+#defineSC_PM_PARENT_PLL23U /*!< Parent in PLL2 or
PLL0/4 */
+#defineSC_PM_PARENT_BYPS4U /*!< Parent is a bypass
clock. */arch/arm/include/asm/arch-imx8/sci/svc/pm/api.h new file +16
-0+/*@}*/ + +/*! +* @name Defines for sc_pm_reset_type_t +*/ +/*@{*/ +#define SC_PM_RESET_TYPE_COLD 0U/*!< Cold reset */ +#define SC_PM_RESET_TYPE_WARM 1U/*!< Warm reset */ +#define SC_PM_RESET_TYPE_BOARD 2U/*!< Board reset */ +/*@}*/ + +/*! +* @name Defines for sc_pm_reset_cause_t +*/ +/*@{*/ +#define SC_PM_RESET_CAUSE_TEMP 0U/*!< Reset due to temp panic alarm */
+#defineSC_PM_RESET_CAUSE_FAULT1U /*!< Reset due to fault
exception */
+#defineSC_PM_RESET_CAUSE_IRQ2U /*!< Reset due to SCU
reset IRQ */
+#defineSC_PM_RESET_CAUSE_WDOG3U /*!< Reset due to SW
WDOG */
+#defineSC_PM_RESET_CAUSE_API4U /*!< Reset due topm_reset()or monitor */arch/arm/include/asm/arch-imx8/sci/svc/pm/api.h new file +7
-0+/*@}*/ + +/*! +* @name Defines for sc_pm_reset_reason_t +*/ +/*@{*/ +#define SC_PM_RESET_REASON_POR 0U/*!< Power on reset */
arch/arm/include/asm/arch-imx8/sci/svc/pm/api.h new file +2
-0+#define SC_PM_RESET_REASON_WARM 1U/*!< Warm reset */ +#define SC_PM_RESET_REASON_SW 2U/*!< Software reset */
+#defineSC_PM_RESET_REASON_WDOG3U /*!< Watchdog
reset */arch/arm/include/asm/arch-imx8/sci/svc/pm/api.h new file +4
-0+#define SC_PM_RESET_REASON_LOCKUP 4U/*!< Lockup reset */ +#define SC_PM_RESET_REASON_TAMPER 5U/*!< Tamper reset */ +#define SC_PM_RESET_REASON_TEMP 6U/*!< Temp reset */ +#define SC_PM_RESET_REASON_LOW_VOLT 7U/*!< Low voltage reset */
arch/arm/include/asm/arch-imx8/sci/svc/pm/api.h new file +7
-0+/*@}*/ + +/*! +* @name Defines for sc_pm_sys_if_t +*/ +/*@{*/ +#define SC_PM_SYS_IF_INTERCONNECT 0U/*!< System interconnect */
+#defineSC_PM_SYS_IF_MU1U /*!< AP -> SCU
message units */
+#defineSC_PM_SYS_IF_OCMEM2U /*!< On-chip memory
(ROM/OCRAM) */arch/arm/include/asm/arch-imx8/sci/svc/pm/api.h new file +8
-0+#define SC_PM_SYS_IF_DDR 3U/*!< DDR memory */ +/*@}*/ + +/*! +* @name Defines for sc_pm_wake_src_t +*/ +/*@{*/ +#define SC_PM_WAKE_SRC_NONE 0U/*!< No wake source, used for self-kill */
+#defineSC_PM_WAKE_SRC_SCU1U /*!< Wakeup from
SCU to resume CPU (IRQSTEER & GIC powered down) */
+#defineSC_PM_WAKE_SRC_IRQSTEER2U /*!< Wakeup from
IRQSTEER to resume CPU (GIC powered down) */
+#defineSC_PM_WAKE_SRC_IRQSTEER_GIC3U /*!< Wakeup from
IRQSTEER+GIC to wake CPU (GIC clock gated) */
+#defineSC_PM_WAKE_SRC_GIC4U /*!< Wakeup from GIC
to wake CPU */arch/arm/include/asm/arch-imx8/sci/svc/pm/api.h new file +7
-0+/*@}*/ + +/* Types */ + +/*! +* This type is used to declare a power mode. Note resources only use +* SC_PM_PW_MODE_OFF and SC_PM_PW_MODE_ON. The other modes are used only
+ * as system power modes.
+ */arch/arm/include/asm/arch-imx8/sci/svc/pm/api.h new file +70
-0+typedef uint8_t sc_pm_power_mode_t ; + +/*! +* This type is used to declare a clock. +*/ +typedef uint8_t sc_pm_clk_t ; + +/*! +* This type is used to declare a clock mode. +*/ +typedef uint8_t sc_pm_clk_mode_t ; + +/*! +* This type is used to declare the clock parent. +*/ +typedef uint8_t sc_pm_clk_parent_t ; + +/*! +* This type is used to declare clock rates. +*/ +typedef uint32_t sc_pm_clock_rate_t ; + +/*! +* This type is used to declare a desired reset type. +*/ +typedef uint8_t sc_pm_reset_type_t ; + +/*! +* This type is used to declare a desired reset type. +*/ +typedef uint8_t sc_pm_reset_cause ; + +/*! +* This type is used to declare a reason for a reset. +*/ +typedef uint8_t sc_pm_reset_reason_t ; + +/*! +* This type is used to specify a system-level interface to be power managed. +*/ +typedef uint8_t sc_pm_sys_if_t ; + +/*! +* This type is used to specify a wake source for CPU resources. +*/ +typedef uint8_t sc_pm_wake_src_t ; + +/* Functions */ + +/*! +* @name Power Functions +* @{ +*/ + +/*! +* This function sets the system power mode. Only the owner of the +* SC_R_SYSTEM resource can do this. +* +* @param[in] ipc IPC handle +* @param[in] mode power mode to apply +* +* @return Returns an error code (SC_ERR_NONE = success). +* +* Return errors: +* - SC_ERR_PARM if invalid mode, +* - SC_ERR_NOACCESS if caller not the owner of SC_R_SYSTEM +* +* @see sc_pm_set_sys_power_mode(). +*/ +sc_err_t sc_pm_set_sys_power_mode(sc_ipc_t ipc, sc_pm_power_mode_tmode);
arch/arm/include/asm/arch-imx8/sci/svc/pm/api.h new file +53
-0+ +/*! +* This function sets the power mode of a partition. +* +* @param[in] ipc IPC handle +* @param[in] pt handle of partition +* @param[in] mode power mode to apply +* +* @return Returns an error code (SC_ERR_NONE = success). +* +* Return errors: +* - SC_ERR_PARM if invalid partition or mode, +* - SC_ERR_NOACCESS if caller's partition is not the owner or +* parent of \a pt +* +* The power mode of the partitions is a max power any resource will +* be set to. Calling this will result in all resources owned +* by \a pt to have their power changed to the lower of \a mode or the +* individual resource mode set using sc_pm_set_resource_power_mode(). +*/ +sc_err_t sc_pm_set_partition_power_mode (sc_ipc_t ipc,sc_rm_pt_t pt, +sc_pm_power_mode_t mode); + +/*! +* This function gets the power mode of a partition. +* +* @param[in] ipc IPC handle +* @param[in] pt handle of partition +* @param[out] mode pointer to return power mode +* +* @return Returns an error code (SC_ERR_NONE = success). +* +* Return errors: +* - SC_ERR_PARM if invalid partition +*/ +sc_err_t sc_pm_get_sys_power_mode (sc_ipc_t ipc,sc_rm_pt_t pt, +sc_pm_power_mode_t *mode); + +/*! +* This function sets the power mode of a resource. +* +* @param[in] ipc IPC handle +* @param[in] resource ID of the resource +* @param[in] mode power mode to apply +* +* @return Returns an error code (SC_ERR_NONE = success). +* +* Return errors: +* - SC_ERR_PARM if invalid resource or mode, +* - SC_ERR_NOACCESS if caller's partition is not the resource owner +* or parent of the owner +* +* Resources must be at SC_PM_PW_MODE_LP mode or higher to access them,
+ * otherwise the master will get a bus error or hang.
+ *
+ * This function will record the individual resource power mode
+ * and change it if the requested mode is lower than or equal to the
+ * partition power mode set withsc_pm_set_partition_power_mode().
+ * In other words, the power mode of the resource will be the minimum
+ * of the resource power mode and the partition power mode.
+ *
+ * Note some resources are still not accessible even when powered up if bus
+ * transactions go through a fabric not powered up. Examples of this are
+ * resources in display and capture subsystems which require the display
+ * controller or the imaging subsytem to be powered up first.
+ *
+ * Not that resources are grouped into power domains by the underlying
+ * hardware. If any resource in the domain is on, the entire power domain
+ * will be on. Other power domains required to access the resource will
+ * also be turned on. Clocks required to access the peripheral will be
+ * turned on. Refer to the SoC RM for more info on power domains and access
+ * infrastructure (bus fabrics, clock domains, etc.).
+ */arch/arm/include/asm/arch-imx8/sci/svc/pm/api.h new file +13
-0+sc_err_t sc_pm_set_resource_power_mode (sc_ipc_t ipc,sc_rsrc_t resource, +sc_pm_power_mode_t mode); + +/*! +* This function gets the power mode of a resource. +* +* @param[in] ipc IPC handle +* @param[in] resource ID of the resource +* @param[out] mode pointer to return power mode +* +* @return Returns an error code (SC_ERR_NONE = success). +* +* Note only SC_PM_PW_MODE_OFF and SC_PM_PW_MODE_ON are valid. The value
+ * returned does not reflect the power mode of the partition..
+ */arch/arm/include/asm/arch-imx8/sci/svc/pm/api.h new file +102
-0+sc_err_t sc_pm_get_resource_power_mode (sc_ipc_t ipc,sc_rsrc_t resource, +sc_pm_power_mode_t *mode); + +/*! +* This function requests the low power mode some of the resources +* can enter based on their state. This API is only valid for the +* following resources : SC_R_A53, SC_R_A53_0, SC_R_A53_1, SC_A53_2, +* SC_A53_3, SC_R_A72, SC_R_A72_0, SC_R_A72_1, SC_R_CC1, SC_R_A35, +* SC_R_A35_0, SC_R_A35_1, SC_R_A35_2, SC_R_A35_3. +* For all other resources it will return SC_ERR_PARAM. +* This function will set the low power mode the cores, cluster +* and cluster associated resources will enter when all the cores +* in a given cluster execute WFI +* +* @param[in] ipc IPC handle +* @param[in] resource ID of the resource +* @param[in] mode power mode to apply +* +* @return Returns an error code (SC_ERR_NONE = success). +* +*/ +sc_err_t sc_pm_req_low_power_mode (sc_ipc_t ipc,sc_rsrc_t resource, +sc_pm_power_mode_t mode); + +/*! +* This function requests low-power mode entry for CPU/cluster +* resources. This API is only valid for the following resources: +* SC_R_A53, SC_R_A53_x, SC_R_A72, SC_R_A72_x, SC_R_A35, SC_R_A35_x, +* SC_R_CCI. For all other resources it will return SC_ERR_PARAM. +* For individual core resources, the specified power mode +* and wake source will be applied after the core has entered +* WFI. For cluster resources, the specified power mode is +* applied after all cores in the cluster have entered low-power mode. +* For multicluster resources, the specified power mode is applied +* after all clusters have reached low-power mode. +* +* @param[in] ipc IPC handle +* @param[in] resource ID of the resource +* @param[in] mode power mode to apply +* @param[in] wake_src wake source for low-power exit +* +* @return Returns an error code (SC_ERR_NONE = success). +* +*/ +sc_err_t sc_pm_req_cpu_low_power_mode (sc_ipc_t ipc,sc_rsrc_t resource, +sc_pm_power_mode_t mode,sc_pm_wake_src_t wake_src); + +/*! +* This function is used to set the resume address of a CPU. +* +* @param[in] ipc IPC handle +* @param[in] resource ID of the CPU resource +* @param[in] address 64-bit resume address +* +* @return Returns an error code (SC_ERR_NONE = success). +* +* Return errors: +* - SC_ERR_PARM if invalid resource or address, +* - SC_ERR_NOACCESS if caller's partition is not the parent of the +* resource (CPU) owner +*/ +sc_err_t sc_pm_set_cpu_resume_addr (sc_ipc_t ipc,sc_rsrc_t resource, +sc_faddr_t address); + +/*! +* This function is used to set parameters for CPU resume from +* low-power mode. +* +* @param[in] ipc IPC handle +* @param[in] resource ID of the CPU resource +* @param[in] isPrimary set SC_TRUE if primary wake CPU +* @param[in] address 64-bit resume address +* +* @return Returns an error code (SC_ERR_NONE = success). +* +* Return errors: +* - SC_ERR_PARM if invalid resource or address, +* - SC_ERR_NOACCESS if caller's partition is not the parent of the +* resource (CPU) owner +*/ +sc_err_t sc_pm_set_cpu_resume (sc_ipc_t ipc,sc_rsrc_t resource, +sc_bool_t isPrimary,sc_faddr_t address); + +/*! +* This function requests the power mode configuration for system-level +* interfaces including messaging units, interconnect, and memories. This API +* is only valid for the following resources : SC_R_A53, SC_R_A72, and +* SC_R_M4_x_PID_y. For all other resources, it will return SC_ERR_PARAM. +* The requested power mode will be captured and applied to system-level +* resources as system conditions allow. +* +* @param[in] ipc IPC handle +* @param[in] resource ID of the resource +* @param[in] sys_if system-level interface to be configured +* @param[in] hpm high-power mode for the system interface +* @param[in] lpm low-power mode for the system interface +* +* @return Returns an error code (SC_ERR_NONE = success). +* +*/ +sc_err_t sc_pm_req_sys_if_power_mode(sc_ipc_t ipc, sc_rsrc_t resource, + sc_pm_sys_if_t sys_if, sc_pm_power_mode_t hpm,
sc_pm_power_mode_tlpm);arch/arm/include/asm/arch-imx8/sci/svc/pm/api.h new file +260
-0+ +/* @} */ + +/*! +* @name Clock/PLL Functions +* @{ +*/ + +/*! +* This function sets the rate of a resource's clock/PLL. +* +* @param[in] ipc IPC handle +* @param[in] resource ID of the resource +* @param[in] clk clock/PLL to affect +* @param[in,out] rate pointer to rate to set, +* return actual rate +* @return Returns an error code (SC_ERR_NONE = success). +* +* Return errors: +* - SC_ERR_PARM if invalid resource or clock/PLL, +* - SC_ERR_NOACCESS if caller's partition is not the resource owner +* or parent of the owner, +* - SC_ERR_UNAVAILABLE if clock/PLL not applicable to this resource, +* - SC_ERR_LOCKED if rate locked (usually because shared clock/PLL) +* +* Refer to the [Clock List](@ref CLOCKS) for valid clock/PLL values. +*/ +sc_err_t sc_pm_set_clock_rate (sc_ipc_t ipc,sc_rsrc_t resource, +sc_pm_clk_t clk,sc_pm_clock_rate_t *rate); + +/*! +* This function gets the rate of a resource's clock/PLL. +* +* @param[in] ipc IPC handle +* @param[in] resource ID of the resource +* @param[in] clk clock/PLL to affect +* @param[out] rate pointer to return rate +* +* @return Returns an error code (SC_ERR_NONE = success). +* +* Return errors: +* - SC_ERR_PARM if invalid resource or clock/PLL, +* - SC_ERR_NOACCESS if caller's partition is not the resource owner +* or parent of the owner, +* - SC_ERR_UNAVAILABLE if clock/PLL not applicable to this resource +* +* Refer to the [Clock List](@ref CLOCKS) for valid clock/PLL values. +*/ +sc_err_t sc_pm_get_clock_rate (sc_ipc_t ipc,sc_rsrc_t resource, +sc_pm_clk_t clk,sc_pm_clock_rate_t *rate); + +/*! +* This function enables/disables a resource's clock. +* +* @param[in] ipc IPC handle +* @param[in] resource ID of the resource +* @param[in] clk clock to affect +* @param[in] enable enable if SC_TRUE; otherwise disabled +* @param[in] autog HW auto clock gating +* +* If \a resource is SC_R_ALL then all resources owned will be affected. +* No error will be returned. +* +* If \a clk is SC_PM_CLK_ALL, then an error will be returned if any +* of the available clocks returns an error. +* +* @return Returns an error code (SC_ERR_NONE = success). +* +* Return errors: +* - SC_ERR_PARM if invalid resource or clock, +* - SC_ERR_NOACCESS if caller's partition is not the resource owner +* or parent of the owner, +* - SC_ERR_UNAVAILABLE if clock not applicable to this resource +* +* Refer to the [Clock List](@ref CLOCKS) for valid clock values. +*/ +sc_err_t sc_pm_clock_enable (sc_ipc_t ipc,sc_rsrc_t resource, +sc_pm_clk_t clk,sc_bool_t enable,sc_bool_t autog); + +/*! +* This function sets the parent of a resource's clock. +* This function should only be called when the clock is disabled. +* +* @param[in] ipc IPC handle +* @param[in] resource ID of the resource +* @param[in] clk clock to affect +* @param[in] parent New parent of the clock. +* +* @return Returns an error code (SC_ERR_NONE = success). +* +* Return errors: +* - SC_ERR_PARM if invalid resource or clock, +* - SC_ERR_NOACCESS if caller's partition is not the resource owner +* or parent of the owner, +* - SC_ERR_UNAVAILABLE if clock not applicable to this resource +* - SC_ERR_BUSY if clock is currently enabled. +* - SC_ERR_NOPOWER if resource not powered +* +* Refer to the [Clock List](@ref CLOCKS) for valid clock values. +*/ +sc_err_t sc_pm_set_clock_parent (sc_ipc_t ipc,sc_rsrc_t resource, +sc_pm_clk_t clk,sc_pm_clk_parent_t parent); + +/*! +* This function gets the parent of a resource's clock. +* +* @param[in] ipc IPC handle +* @param[in] resource ID of the resource +* @param[in] clk clock to affect +* @param[out] parent pointer to return parent of clock. +* +* @return Returns an error code (SC_ERR_NONE = success). +* +* Return errors: +* - SC_ERR_PARM if invalid resource or clock, +* - SC_ERR_NOACCESS if caller's partition is not the resource owner +* or parent of the owner, +* - SC_ERR_UNAVAILABLE if clock not applicable to this resource +* +* Refer to the [Clock List](@ref CLOCKS) for valid clock values. +*/ +sc_err_t sc_pm_get_clock_parent (sc_ipc_t ipc,sc_rsrc_t resource, +sc_pm_clk_t clk,sc_pm_clk_parent_t *parent); + +/* @} */ + +/*! +* @name Reset Functions +* @{ +*/ + +/*! +* This function is used to reset the system. Only the owner of the +* SC_R_SYSTEM resource can do this. +* +* @param[in] ipc IPC handle +* @param[in] type reset type +* +* @return Returns an error code (SC_ERR_NONE = success). +* +* Return errors: +* - SC_ERR_PARM if invalid type, +* - SC_ERR_NOACCESS if caller not the owner of SC_R_SYSTEM +* +* If this function returns, then the reset did not occur due to an +* invalid parameter. +*/ +sc_err_t sc_pm_reset (sc_ipc_t ipc,sc_pm_reset_type_t type); + +/*! +* This function gets a caller's reset reason. +* +* @param[in] ipc IPC handle +* @param[out] reason pointer to return reset reason +* +* @return Returns an error code (SC_ERR_NONE = success). +*/ +sc_err_t sc_pm_reset_reason (sc_ipc_t ipc,sc_pm_reset_reason_t *reason); + +/*! +* This function is used to boot a partition. +* +* @param[in] ipc IPC handle +* @param[in] pt handle of partition to boot +* @param[in] resource_cpu ID of the CPU resource to start +* @param[in] boot_addr 64-bit boot address +* @param[in] resource_mu ID of the MU that must be powered +* @param[in] resource_dev ID of the boot device that must be powered +* +* @return Returns an error code (SC_ERR_NONE = success). +* +* Return errors: +* - SC_ERR_PARM if invalid partition, resource, or addr, +* - SC_ERR_NOACCESS if caller's partition is not the parent of the +* partition to boot +*/ +sc_err_t sc_pm_boot (sc_ipc_t ipc,sc_rm_pt_t pt, +sc_rsrc_t resource_cpu,sc_faddr_t boot_addr, +sc_rsrc_t resource_mu,sc_rsrc_t resource_dev); + +/*! +* This function is used to reboot the caller's partition. +* +* @param[in] ipc IPC handle +* @param[in] type reset type +* +* If \a type is SC_PM_RESET_TYPE_COLD, then most peripherals owned by +* the calling partition will be reset if possible. SC state (partitions, +* power, clocks, etc.) is reset. The boot SW of the booting CPU must be +* able to handle peripherals that that are not reset. +* +* If \a type is SC_PM_RESET_TYPE_WARM, then only the boot CPU is reset. +* SC state (partitions, power, clocks, etc.) are NOT reset. The boot SW +* of the booting CPU must be able to handle peripherals and SC state that +* that are not reset. +* +* If \a type is SC_PM_RESET_TYPE_BOARD, then return with no action. +* +* If this function returns, then the reset did not occur due to an +* invalid parameter. +*/ +void sc_pm_reboot (sc_ipc_t ipc,sc_pm_reset_type_t type); + +/*! +* This function is used to reboot a partition. +* +* @param[in] ipc IPC handle +* @param[in] pt handle of partition to reboot +* @param[in] type reset type +* +* If \a type is SC_PM_RESET_TYPE_COLD, then most peripherals owned by +* the calling partition will be reset if possible. SC state (partitions, +* power, clocks, etc.) is reset. The boot SW of the booting CPU must be +* able to handle peripherals that that are not reset. +* +* If \a type is SC_PM_RESET_TYPE_WARM, then only the boot CPU is reset. +* SC state (partitions, power, clocks, etc.) are NOT reset. The boot SW +* of the booting CPU must be able to handle peripherals and SC state that +* that are not reset. +* +* If \a type is SC_PM_RESET_TYPE_BOARD, then return with no action. +* +* @return Returns an error code (SC_ERR_NONE = success). +* +* Return errors: +* - SC_ERR_PARM if invalid partition or type +* - SC_ERR_NOACCESS if caller's partition is not the parent of \a pt, +* +* Most peripherals owned by the partition will be reset if +* possible. SC state (partitions, power, clocks, etc.) is reset. The +* boot SW of the booting CPU must be able to handle peripherals that +* that are not reset. +*/ +sc_err_t sc_pm_reboot_partition (sc_ipc_t ipc,sc_rm_pt_t pt, +sc_pm_reset_type_t type); + +/*! +* This function is used to start/stop a CPU. +* +* @param[in] ipc IPC handle +* @param[in] resource ID of the CPU resource +* @param[in] enable start if SC_TRUE; otherwise stop +* @param[in] address 64-bit boot address +* +* @return Returns an error code (SC_ERR_NONE = success). +* +* Return errors: +* - SC_ERR_PARM if invalid resource or address, +* - SC_ERR_NOACCESS if caller's partition is not the parent of the +* resource (CPU) owner +*/ +sc_err_t sc_pm_cpu_start (sc_ipc_t ipc,sc_rsrc_t resource,sc_bool_t enable, +sc_faddr_t address); + +/* @} */ + +#endif /* SC_PM_API_H */ + +/**@}*/ +arch/arm/include/asm/arch-imx8/sci/svc/rm/api.h new file +47
-0@@ -0,0 +1,759 @@ +/* +* Copyright (C) 2016 Freescale Semiconductor, Inc. +* Copyright 2017-2018 NXP +* +* SPDX-License-Identifier: GPL-2.0+ +*/ + +/*! +* Header file containing the public API for the System Controller (SC) +* Resource Management (RM) function. This includes functions for +* partitioning resources, pads, and memory regions. +* +* @addtogroup RM_SVC (SVC) Resource Management Service +* +* Module for the Resource Management (RM) service. +* +* @includedoc rm/details.dox +* +* @{ +*/ + +#ifndef SC_RM_API_H +#define SC_RM_API_H + +/* Includes */ + +#include <asm/arch/sci/types.h> + +/* Defines */ + +/*! +* @name Defines for type widths +*/ +/*@{*/ +#define SC_RM_PARTITION_W 5U/*!< Width of sc_rm_pt_t */ +#define SC_RM_MEMREG_W 6U/*!< Width of sc_rm_mr_t */ +#define SC_RM_DID_W 4U/*!< Width of sc_rm_did_t */ +#define SC_RM_SID_W 6U/*!< Width of sc_rm_sid_t */ +#define SC_RM_SPA_W 2U/*!< Width of sc_rm_spa_t */ +#define SC_RM_PERM_W 3U/*!< Width of sc_rm_perm_t */ +/*@}*/ + +/*! +* @name Defines for ALL parameters +*/ +/*@{*/ +#define SC_RM_PT_ALL ((sc_rm_pt_t) UINT8_MAX)/*!< All partitions */
+#defineSC_RM_MR_ALL((sc_rm_mr_t)UINT8_MAX) /*!< All
memory regions */arch/arm/include/asm/arch-imx8/sci/svc/rm/api.h new file +7
-0+/*@}*/ + +/*! +* @name Defines for sc_rm_spa_t +*/ +/*@{*/ +#define SC_RM_SPA_PASSTHRU 0U/*!< Pass through (attribute driven by master) */
arch/arm/include/asm/arch-imx8/sci/svc/rm/api.h new file +2
-0+#define SC_RM_SPA_PASSSID 1U/*!< Pass through and output on SID */ +#define SC_RM_SPA_ASSERT 2U/*!< Assert (force to be secure/privileged) */
+#defineSC_RM_SPA_NEGATE3U /*!< Negate (force to be
non-secure/user) */arch/arm/include/asm/arch-imx8/sci/svc/rm/api.h new file +11
-0+/*@}*/ + +/*! +* @name Defines for sc_rm_perm_t +*/ +/*@{*/ +#define SC_RM_PERM_NONE 0U/*!< No access */ +#define SC_RM_PERM_SEC_R 1U/*!< Secure RO */ +#define SC_RM_PERM_SECPRIV_RW 2U/*!< Secure privilege R/W */ +#define SC_RM_PERM_SEC_RW 3U/*!< Secure R/W */ +#define SC_RM_PERM_NSPRIV_R 4U/*!< Secure R/W, non-secure privilege RO */
+#defineSC_RM_PERM_NS_R5U /*!< Secure R/W, non-secure RO
*/
+#defineSC_RM_PERM_NSPRIV_RW6U /*!< Secure R/W, non-secure
privilege R/W */arch/arm/include/asm/arch-imx8/sci/svc/rm/api.h new file +49
-0+#define SC_RM_PERM_FULL 7U/*!< Full access */ +/*@}*/ + +/* Types */ + +/*! +* This type is used to declare a resource partition. +*/ +typedef uint8_t sc_rm_pt_t ; + +/*! +* This type is used to declare a memory region. +*/ +typedef uint8_t sc_rm_mr_t ; + +/*! +* This type is used to declare a resource domain ID used by the +* isolation HW. +*/ +typedef uint8_t sc_rm_did_t ; + +/*! +* This type is used to declare an SMMU StreamID. +*/ +typedef uint16_t sc_rm_sid_t ; + +/*! +* This type is a used to declare master transaction attributes. +*/ +typedef uint8_t sc_rm_spa_t ; + +/*! +* This type is used to declare a resource/memory region access permission. +* Refer to the XRDC2 Block Guide for more information. +*/ +typedef uint8_t sc_rm_perm_t ; + +/* Functions */ + +/*! +* @name Partition Functions +* @{ +*/ + +/*! +* This function requests that the SC create a new resource partition. +* +* @param[in] ipc IPC handle +* @param[out] pt return handle for partition; used for subsequent function
+ * calls associated with this partition
+ * @param[in] secure boolean indicating if this partition should
be secure; only
+ * valid if caller is secure
+ * @param[in] isolated boolean indicating if this partition should be
HW isolated
+ * via XRDC; setSC_TRUEif new DID is
desired
+ * @param[in] restricted boolean indicating if this partition should be
restricted; set
+ *SC_TRUEif masters in this partition
cannot create new partitions
+ * @param[in] grant boolean indicating if this partition should
always grant
+ * access and control to the parent
+ * @param[in] coherent boolean indicating if this partition is
coherent;
+ * setSC_TRUEif only this partition will
contain both AP clusters
+ * and they will be coherent via the CCI
+ *
+ * @return Returns an error code (SC_ERR_NONE= success).
+ *
+ * Return errors:
+ * -SC_ERR_NOACCESSif caller's partition is restricted,
+ * -SC_ERR_PARMif caller's partition is not secure but a new secure partition is requested,
+ * -SC_ERR_LOCKEDif caller's partition is locked,
+ * -SC_ERR_UNAVAILABLEif partition table is full (no more allocation space)
+ *
+ * Marking as non-secure prevents subsequent functions from configuring masters in this
+ * partition to assert the secure signal. If restricted then the new partition is limited
+ * in what functions it can call, especially those associated with managing partitions.
+ *
+ * The grant option is usually used to isolate a bus master's traffic to specific
+ * memory without isolating the peripheral interface of the master or the API
+ * controls of that master.
+ */arch/arm/include/asm/arch-imx8/sci/svc/rm/api.h new file +2
-0+sc_err_t sc_rm_partition_alloc (sc_ipc_t ipc,sc_rm_pt_t *pt,sc_bool_t secure, + sc_bool_t isolated, sc_bool_t restricted, sc_bool_t grant, sc_bool_tcoherent);
arch/arm/include/asm/arch-imx8/sci/svc/rm/api.h new file +91
-0+ +/*! +* This function makes a partition confidential. +* +* @param[in] ipc IPC handle +* @param[in] pt handle of partition that is granting +* @param[in] retro retroactive +* +* @return Returns an error code (SC_ERR_NONE = success). +* +* Return errors: +* - SC_PARM if \a pt out of range, +* - SC_ERR_NOACCESS if caller's not allowed to change \a pt +* - SC_ERR_LOCKED if partition \a pt is locked +* +* Call to make a partition confidential. Confidential means only this +* partition should be able to grant access permissions to this partition. +* +* If retroactive, then all resources owned by other partitions will have +* access rights for this partition removed, even if locked. +*/ +sc_err_t sc_rm_set_confidential (sc_ipc_t ipc,sc_rm_pt_t pt,sc_bool_t retro); + +/*! +* This function frees a partition and assigns all resources to the caller. +* +* @param[in] ipc IPC handle +* @param[in] pt handle of partition to free +* +* @return Returns an error code (SC_ERR_NONE = success). +* +* Return errors: +* - SC_ERR_NOACCESS if caller's partition is restricted, +* - SC_PARM if \a pt out of range or invalid, +* - SC_ERR_NOACCESS if \a pt is the SC partition, +* - SC_ERR_NOACCESS if caller's partition is not the parent of \a pt, +* - SC_ERR_LOCKED if \a pt or caller's partition is locked +* +* All resources, memory regions, and pads are assigned to the caller/parent. +* The partition watchdog is disabled (even if locked). DID is freed. +*/ +sc_err_t sc_rm_partition_free (sc_ipc_t ipc,sc_rm_pt_t pt); + +/*! +* This function returns the DID of a partition. +* +* @param[in] ipc IPC handle +* +* @return Returns the domain ID (DID) of the caller's partition. +* +* The DID is a SoC-specific internal ID used by the HW resource +* protection mechanism. It is only required by clients when using the +* SEMA42 module as the DID is sometimes connected to the master ID. +*/ +sc_rm_did_t sc_rm_get_did (sc_ipc_t ipc); + +/*! +* This function forces a partition to use a specific static DID. +* +* @param[in] ipc IPC handle +* @param[in] pt handle of partition to assign \a did +* @param[in] did static DID to assign +* +* @return Returns an error code (SC_ERR_NONE = success). +* +* Return errors: +* - SC_ERR_NOACCESS if caller's partition is restricted, +* - SC_PARM if \a pt or \a did out of range, +* - SC_ERR_NOACCESS if caller's partition is not the parent of \a pt, +* - SC_ERR_LOCKED if \a pt is locked +* +* Assumes no assigned resources or memory regions yet! The number of static +* DID is fixed by the SC at boot. +*/ +sc_err_t sc_rm_partition_static (sc_ipc_t ipc,sc_rm_pt_t pt, +sc_rm_did_t did); + +/*! +* This function locks a partition. +* +* @param[in] ipc IPC handle +* @param[in] pt handle of partition to lock +* +* @return Returns an error code (SC_ERR_NONE = success). +* +* Return errors: +* - SC_PARM if \a pt out of range, +* - SC_ERR_NOACCESS if caller's partition is not the parent of \a pt +* +* If a partition is locked it cannot be freed, have resources/pads assigned +* to/from it, memory regions created/assigned, DID changed, or parent changed.
+ */arch/arm/include/asm/arch-imx8/sci/svc/rm/api.h new file +39
-0+sc_err_t sc_rm_partition_lock (sc_ipc_t ipc,sc_rm_pt_t pt); + +/*! +* This function gets the partition handle of the caller. +* +* @param[in] ipc IPC handle +* @param[out] pt return handle for caller's partition +* +* @return Returns an error code (SC_ERR_NONE = success). +*/ +sc_err_t sc_rm_get_partition (sc_ipc_t ipc,sc_rm_pt_t *pt); + +/*! +* This function sets a new parent for a partition. +* +* @param[in] ipc IPC handle +* @param[in] pt handle of partition for which parent is to be +* changed +* @param[in] pt_parent handle of partition to set as parent +* +* @return Returns an error code (SC_ERR_NONE = success). +* +* Return errors: +* - SC_ERR_NOACCESS if caller's partition is restricted, +* - SC_PARM if arguments out of range or invalid, +* - SC_ERR_NOACCESS if caller's partition is not the parent of \a pt, +* - SC_ERR_LOCKED if either partition is locked +*/ +sc_err_t sc_rm_set_parent (sc_ipc_t ipc,sc_rm_pt_t pt, +sc_rm_pt_t pt_parent); + +/*! +* This function moves all movable resources/pads owned by a source partition +* to a destination partition. It can be used to more quickly set up a new +* partition if a majority of the caller's resources are to be moved to a +* new partition. +* +* @param[in] ipc IPC handle +* @param[in] pt_src handle of partition from which resources should
+ * be moved from
+ * @param[in]pt_dsthandle of partition to which resources
should be
+ * moved to
+ * @param[in]move_rsrcboolean to indicate if resources should be
moved
+ * @param[in]move_padsboolean to indicate if pads should be
moved
+ *
+ * @return Returns an error code (SC_ERR_NONE= success).
+ *
+ * By default, all resources are movable. This can be changed using the
+ *sc_rm_set_resource_movable()function. Note all masters defaulted to SMMU
+ * bypass.
+ *
+ * Return errors:
+ * -SC_ERR_NOACCESSif caller's partition is restricted,
+ * -SC_PARMif arguments out of range or invalid,
+ * -SC_ERR_NOACCESSif caller's partition is not \apt_srcor the
+ * parent of \apt_src,
+ * -SC_ERR_LOCKEDif either partition is locked
+ */arch/arm/include/asm/arch-imx8/sci/svc/rm/api.h new file +15
-0+sc_err_t sc_rm_move_all (sc_ipc_t ipc,sc_rm_pt_t pt_src,sc_rm_pt_t pt_dst, +sc_bool_t move_rsrc,sc_bool_t move_pads); + +/* @} */ + +/*! +* @name Resource Functions +* @{ +*/ + +/*! +* This function assigns ownership of a resource to a partition. +* +* @param[in] ipc IPC handle +* @param[in] pt handle of partition to which resource should be
+ * assigned
+ * @param[in] resource resource to assign
+ *
+ * @return Returns an error code (SC_ERR_NONE= success).
+ *
+ * This action resets the resource's master and peripheral attributes.
+ * Privilege attribute will be PASSTHRU, security attribute will be
+ * ASSERT if the partition si secure and NEGATE if it is not, and
+ * masters will defaulted to SMMU bypass. Access permissions will reset
+ * toSEC_RWfor the owning partition only for secure partitions, FULL for
+ * non-secure. DEfault is no access by other partitions.
+ *
+ * Return errors:
+ * -SC_ERR_NOACCESSif caller's partition is restricted,
+ * -SC_PARMif arguments out of range or invalid,
+ * -SC_ERR_NOACCESSif caller's partition is not the resource owner or parent
+ * of the owner,
+ * -SC_ERR_LOCKEDif the owning partition or \a pt is locked
+ */arch/arm/include/asm/arch-imx8/sci/svc/rm/api.h new file +51
-0+sc_err_t sc_rm_assign_resource (sc_ipc_t ipc,sc_rm_pt_t pt, +sc_rsrc_t resource); + +/*! +* This function flags resources as movable or not. +* +* @param[in] ipc IPC handle +* @param[in] resource_fst first resource for which flag should be set +* @param[in] resource_lst last resource for which flag should be set +* @param[in] movable movable flag (SC_TRUE is movable) +* +* @return Returns an error code (SC_ERR_NONE = success). +* +* Return errors: +* - SC_PARM if resources are out of range, +* - SC_ERR_NOACCESS if caller's partition is not a parent of a resource owner, +* - SC_ERR_LOCKED if the owning partition is locked +* +* This function is used to determine the set of resources that will be +* moved using the sc_rm_move_all() function. All resources are movable +* by default so this function is normally used to prevent a set of +* resources from moving. +*/ +sc_err_t sc_rm_set_resource_movable (sc_ipc_t ipc,sc_rsrc_t resource_fst, +sc_rsrc_t resource_lst,sc_bool_t movable); + +/*! +* This function flags all of a subsystem's resources as movable +* or not. +* +* @param[in] ipc IPC handle +* @param[in] resource resource to use to identify subsystem +* @param[in] movable movable flag (SC_TRUE is movable) +* +* @return Returns an error code (SC_ERR_NONE = success). +* +* Return errors: +* - SC_ERR_PARM if a function argument is out of range +* +* Note \a resource is used to find the associated subsystem. Only +* resources owned by the caller are set. +*/ +sc_err_t sc_rm_set_subsys_rsrc_movable (sc_ipc_t ipc,sc_rsrc_t resource, +sc_bool_t movable); + +/*! +* This function sets attributes for a resource which is a bus master (i.e. +* capable of DMA). +* +* @param[in] ipc IPC handle +* @param[in] resource master resource for which attributes should apply
+ * @param[in] sa security attribute + * @param[in] pa privilege attribute + * @param[in] smmu_bypass SMMU bypass mode+ *
+ * @return Returns an error code (SC_ERR_NONE= success).
+ *
+ * Return errors:
+ * -SC_ERR_NOACCESSif caller's partition is restricted,
+ * -SC_PARMif arguments out of range or invalid,
+ * -SC_ERR_NOACCESSif caller's partition is not a parent of the resource owner,
+ * -SC_ERR_LOCKEDif the owning partition is locked
+ *
+ * This function configures how the HW isolation will see bus transactions
+ * from the specified master. Note the security attribute will only be
+ * changed if the caller's partition is secure.
+ */arch/arm/include/asm/arch-imx8/sci/svc/rm/api.h new file +9
-0+sc_err_t sc_rm_set_master_attributes (sc_ipc_t ipc,sc_rsrc_t resource, +sc_rm_spa_t sa,sc_rm_spa_t pa,sc_bool_t smmu_bypass); + +/*! +* This function sets the StreamID for a resource which is a bus master (i.e. +* capable of DMA). +* +* @param[in] ipc IPC handle +* @param[in] resource master resource for which attributes should apply
+ * @param[in] sid StreamID
+ *
+ * @return Returns an error code (SC_ERR_NONE= success).
+ *
+ * Return errors:
+ * -SC_ERR_NOACCESSif caller's partition is restricted,
+ * -SC_PARMif arguments out of range or invalid,
+ * -SC_ERR_NOACCESSif caller's partition is not the resource owner or parent
+ * of the owner,
+ * -SC_ERR_LOCKEDif the owning partition is locked
+ *
+ * This function configures the SID attribute associated with all bus transactions
+ * from this master. Note 0 is not a valid SID as it is reserved to indicate
+ * bypass.
+ */arch/arm/include/asm/arch-imx8/sci/svc/rm/api.h new file +8
-0+sc_err_t sc_rm_set_master_sid (sc_ipc_t ipc,sc_rsrc_t resource, +sc_rm_sid_t sid); + +/*! +* This function sets access permissions for a peripheral resource. +* +* @param[in] ipc IPC handle +* @param[in] resource peripheral resource for which permissions should apply
+ * @param[in] pt handle of partition \a perm should by
applied for
+ * @param[in] perm permissions to apply to \a resource for \a
pt
+ *
+ * @return Returns an error code (SC_ERR_NONE= success).
+ *
+ * Return errors:
+ * -SC_PARMif arguments out of range or invalid,
+ * -SC_ERR_NOACCESSif caller's partition is not the resource owner or parent
+ * of the owner,
+ * -SC_ERR_LOCKEDif the owning partition is locked
+ * -SC_ERR_LOCKEDif the \a pt is confidential and the caller isn't \a pt
+ *
+ * This function configures how the HW isolation will restrict access to a
+ * peripheral based on the attributes of a transaction from bus master.
+ */arch/arm/include/asm/arch-imx8/sci/svc/rm/api.h new file +78
-0+sc_err_t sc_rm_set_peripheral_permissions (sc_ipc_t ipc,sc_rsrc_t resource, +sc_rm_pt_t pt,sc_rm_perm_t perm); + +/*! +* This function gets ownership status of a resource. +* +* @param[in] ipc IPC handle +* @param[in] resource resource to check +* +* @return Returns a boolean (SC_TRUE if caller's partition owns the resource). +* +* If \a resource is out of range then SC_FALSE is returned. +*/ +sc_bool_t sc_rm_is_resource_owned (sc_ipc_t ipc,sc_rsrc_t resource); + +/*! +* This function is used to test if a resource is a bus master. +* +* @param[in] ipc IPC handle +* @param[in] resource resource to check +* +* @return Returns a boolean (SC_TRUE if the resource is a bus master). +* +* If \a resource is out of range then SC_FALSE is returned. +*/ +sc_bool_t sc_rm_is_resource_master (sc_ipc_t ipc,sc_rsrc_t resource); + +/*! +* This function is used to test if a resource is a peripheral. +* +* @param[in] ipc IPC handle +* @param[in] resource resource to check +* +* @return Returns a boolean (SC_TRUE if the resource is a peripheral). +* +* If \a resource is out of range then SC_FALSE is returned. +*/ +sc_bool_t sc_rm_is_resource_peripheral (sc_ipc_t ipc,sc_rsrc_t resource); + +/*! +* This function is used to obtain info about a resource. +* +* @param[in] ipc IPC handle +* @param[in] resource resource to inquire about +* @param[out] sid pointer to return StreamID +* +* @return Returns an error code (SC_ERR_NONE = success). +* +* Return errors: +* - SC_PARM if \a resource is out of range +*/ +sc_err_t sc_rm_get_resource_info (sc_ipc_t ipc,sc_rsrc_t resource, +sc_rm_sid_t *sid); + +/* @} */ + +/*! +* @name Memory Region Functions +* @{ +*/ + +/*! +* This function requests that the SC create a new memory region. +* +* @param[in] ipc IPC handle +* @param[out] mr return handle for region; used for +* subsequent function calls +* associated with this region +* @param[in] addr_start start address of region (physical) +* @param[in] addr_end end address of region (physical) +* +* @return Returns an error code (SC_ERR_NONE = success). +* +* Return errors: +* - SC_ERR_PARM if the new memory region is misaligned, +* - SC_ERR_LOCKED if caller's partition is locked, +* - SC_ERR_PARM if the new memory region spans multiple existing regions, +* - SC_ERR_NOACCESS if caller's partition does not own the memory containing
+ * the new region,
+ * -SC_ERR_UNAVAILABLEif memory region table is full (no more allocation
+ * space)
+ *
+ * The area covered by the memory region must currently be owned by the caller.
+ * By default, the new region will have access permission set to allow the
+ * caller to access.
+ */arch/arm/include/asm/arch-imx8/sci/svc/rm/api.h new file +21
-0+sc_err_t sc_rm_memreg_alloc (sc_ipc_t ipc,sc_rm_mr_t *mr, +sc_faddr_t addr_start,sc_faddr_t addr_end); + +/*! +* This function requests that the SC split a memory region. +* +* @param[in] ipc IPC handle +* @param[in] mr handle of memory region to split +* @param[out] mr_ret return handle for new region; used for +* subsequent function calls +* associated with this region +* @param[in] addr_start start address of region (physical) +* @param[in] addr_end end address of region (physical) +* +* @return Returns an error code (SC_ERR_NONE = success). +* +* Return errors: +* - SC_ERR_PARM if the new memory region is not start/end part of mr, +* - SC_ERR_LOCKED if caller's partition is locked, +* - SC_ERR_PARM if the new memory region spans multiple existing regions, +* - SC_ERR_NOACCESS if caller's partition does not own the memory containing
+ * the new region,
+ * -SC_ERR_UNAVAILABLEif memory region table is full (no more allocation
+ * space)
+ *
+ * Note the new region must start or end on the split region.
+ */arch/arm/include/asm/arch-imx8/sci/svc/rm/api.h new file +67
-0+sc_err_t sc_rm_memreg_split (sc_ipc_t ipc,sc_rm_mr_t mr, +sc_rm_mr_t *mr_ret,sc_faddr_t addr_start,sc_faddr_t addr_end); + +/*! +* This function frees a memory region. +* +* @param[in] ipc IPC handle +* @param[in] mr handle of memory region to free +* +* @return Returns an error code (SC_ERR_NONE = success). +* +* Return errors: +* - SC_PARM if \a mr out of range or invalid, +* - SC_ERR_NOACCESS if caller's partition is not a parent of \a mr, +* - SC_ERR_LOCKED if the owning partition of \a mr is locked +*/ +sc_err_t sc_rm_memreg_free (sc_ipc_t ipc,sc_rm_mr_t mr); + +/*! +* Internal SC function to find a memory region. +* +* @see sc_rm_find_memreg(). +*/ +/*! +* This function finds a memory region. +* +* @param[in] ipc IPC handle +* @param[out] mr return handle for region; used for +* subsequent function calls +* associated with this region +* @param[in] addr_start start address of region to search for +* @param[in] addr_end end address of region to search for +* +* @return Returns an error code (SC_ERR_NONE = success). +* +* Return errors: +* - SC_ERR_NOTFOUND if region not found, +* +* Searches only for regions owned by the caller. Finds first +* region containing the range specified. +*/ +sc_err_t sc_rm_find_memreg (sc_ipc_t ipc,sc_rm_mr_t *mr, +sc_faddr_t addr_start,sc_faddr_t addr_end); + +/*! +* This function assigns ownership of a memory region. +* +* @param[in] ipc IPC handle +* @param[in] pt handle of partition to which memory region +* should be assigned +* @param[in] mr handle of memory region to assign +* +* @return Returns an error code (SC_ERR_NONE = success). +* +* Return errors: +* - SC_PARM if arguments out of range or invalid, +* - SC_ERR_NOACCESS if caller's partition is not the \a mr owner or parent +* of the owner, +* - SC_ERR_LOCKED if the owning partition or \a pt is locked +*/ +sc_err_t sc_rm_assign_memreg (sc_ipc_t ipc,sc_rm_pt_t pt,sc_rm_mr_t mr); + +/*! +* This function sets access permissions for a memory region. +* +* @param[in] ipc IPC handle +* @param[in] mr handle of memory region for which permissions
+ * should apply + * @param[in] pt handle of partition \a perm should by + * applied for + * @param[in] perm permissions to apply to \a mr for \a pt+ *
+ * @return Returns an error code (SC_ERR_NONE= success).
+ *
+ * Return errors:
+ * -SC_PARMif arguments out of range or invalid,
+ * -SC_ERR_NOACCESSif caller's partition is not the region owner or parent
+ * of the owner,
+ * -SC_ERR_LOCKEDif the owning partition is locked
+ * -SC_ERR_LOCKEDif the \a pt is confidential and the caller isn't \a pt
+ *
+ * This function configures how the HW isolation will restrict access to a
+ * memory region based on the attributes of a transaction from bus master.
+ */arch/arm/include/asm/arch-imx8/sci/svc/rm/api.h new file +113
-0+sc_err_t sc_rm_set_memreg_permissions (sc_ipc_t ipc,sc_rm_mr_t mr, +sc_rm_pt_t pt,sc_rm_perm_t perm); + +/*! +* This function gets ownership status of a memory region. +* +* @param[in] ipc IPC handle +* @param[in] mr handle of memory region to check +* +* @return Returns a boolean (SC_TRUE if caller's partition owns the +* memory region). +* +* If \a mr is out of range then SC_FALSE is returned. +*/ +sc_bool_t sc_rm_is_memreg_owned (sc_ipc_t ipc,sc_rm_mr_t mr); + +/*! +* This function is used to obtain info about a memory region. +* +* @param[in] ipc IPC handle +* @param[in] mr handle of memory region to inquire about +* @param[out] addr_start pointer to return start address +* @param[out] addr_end pointer to return end address +* +* @return Returns an error code (SC_ERR_NONE = success). +* +* Return errors: +* - SC_PARM if \a mr is out of range +*/ +sc_err_t sc_rm_get_memreg_info (sc_ipc_t ipc,sc_rm_mr_t mr, +sc_faddr_t *addr_start,sc_faddr_t *addr_end); + +/* @} */ + +/*! +* @name Pad Functions +* @{ +*/ + +/*! +* This function assigns ownership of a pad to a partition. +* +* @param[in] ipc IPC handle +* @param[in] pt handle of partition to which pad should +* be assigned +* @param[in] pad pad to assign +* +* @return Returns an error code (SC_ERR_NONE = success). +* +* Return errors: +* - SC_ERR_NOACCESS if caller's partition is restricted, +* - SC_PARM if arguments out of range or invalid, +* - SC_ERR_NOACCESS if caller's partition is not the pad owner or parent +* of the owner, +* - SC_ERR_LOCKED if the owning partition or \a pt is locked +*/ +sc_err_t sc_rm_assign_pad (sc_ipc_t ipc,sc_rm_pt_t pt,sc_pad_t pad); + +/*! +* This function flags pads as movable or not. +* +* @param[in] ipc IPC handle +* @param[in] pad_fst first pad for which flag should be set +* @param[in] pad_lst last pad for which flag should be set +* @param[in] movable movable flag (SC_TRUE is movable) +* +* @return Returns an error code (SC_ERR_NONE = success). +* +* Return errors: +* - SC_PARM if pads are out of range, +* - SC_ERR_NOACCESS if caller's partition is not a parent of a pad owner, +* - SC_ERR_LOCKED if the owning partition is locked +* +* This function is used to determine the set of pads that will be +* moved using the sc_rm_move_all() function. All pads are movable +* by default so this function is normally used to prevent a set of +* pads from moving. +*/ +sc_err_t sc_rm_set_pad_movable (sc_ipc_t ipc,sc_pad_t pad_fst, +sc_pad_t pad_lst,sc_bool_t movable); + +/*! +* This function gets ownership status of a pad. +* +* @param[in] ipc IPC handle +* @param[in] pad pad to check +* +* @return Returns a boolean (SC_TRUE if caller's partition owns the pad). +* +* If \a pad is out of range then SC_FALSE is returned. +*/ +sc_bool_t sc_rm_is_pad_owned (sc_ipc_t ipc,sc_pad_t pad); + +/* @} */ + +/*! +* @name Debug Functions +* @{ +*/ + +/*! +* This function dumps the RM state for debug. +* +* @param[in] ipc IPC handle +*/ +void sc_rm_dump (sc_ipc_t ipc); + +/* @} */ + +#endif /* SC_RM_API_H */ + +/**@}*/ +arch/arm/include/asm/arch-imx8/sci/svc/timer/api.h new file +35
-0@@ -0,0 +1,306 @@ +/* +* Copyright (C) 2016 Freescale Semiconductor, Inc. +* Copyright 2017-2018 NXP +* +* SPDX-License-Identifier: GPL-2.0+ +*/ + +/*! +* Header file containing the public API for the System Controller (SC) +* Timer function. +* +* @addtogroup TIMER_SVC (SVC) Timer Service +* +* Module for the Timer service. This includes support for the watchdog, RTC, +* and system counter. Note every resource partition has a watchdog it can +* use. +* +* @{ +*/ + +#ifndef SC_TIMER_API_H +#define SC_TIMER_API_H + +/* Includes */ + +#include <asm/arch/sci/types.h> +#include <asm/arch/sci/svc/rm/api.h> + +/* Defines */ + +/*! +* @name Defines for type widths +*/ +/*@{*/ +#define SC_TIMER_ACTION_W 3U/*!< Width of
sc_timer_wdog_action_t*/arch/arm/include/asm/arch-imx8/sci/svc/timer/api.h new file +7
-0+/*@}*/ + +/*! +* @name Defines for sc_timer_wdog_action_t +*/ +/*@{*/ +#define SC_TIMER_WDOG_ACTION_PARTITION 0U/*!< Reset partition */
+#defineSC_TIMER_WDOG_ACTION_WARM1U /*!< Warm
reset system */
+#defineSC_TIMER_WDOG_ACTION_COLD2U /*!< Cold reset
system */
+#defineSC_TIMER_WDOG_ACTION_BOARD3U /*!< Reset
board */
+#defineSC_TIMER_WDOG_ACTION_IRQ4U /*!< Only
generate IRQs */arch/arm/include/asm/arch-imx8/sci/svc/timer/api.h new file +115
-0+/*@}*/ + +/* Types */ + +/*! +* This type is used to configure the watchdog action. +*/ +typedef uint8_t sc_timer_wdog_action_t ; + +/*! +* This type is used to declare a watchdog time value in milliseconds. +*/ +typedef uint32_t sc_timer_wdog_time_t ; + +/* Functions */ + +/*! +* @name Wathdog Functions +* @{ +*/ + +/*! +* This function sets the watchdog timeout in milliseconds. If not +* set then the timeout defaults to the max. Once locked this value +* cannot be changed. +* +* @param[in] ipc IPC handle +* @param[in] timeout timeout period for the watchdog +* +* @return Returns an error code (SC_ERR_NONE = success, SC_ERR_LOCKED +* = locked). +*/ +sc_err_t sc_timer_set_wdog_timeout (sc_ipc_t ipc, +sc_timer_wdog_time_t timeout); + +/*! +* This function sets the watchdog pre-timeout in milliseconds. If not +* set then the pre-timeout defaults to the max. Once locked this value +* cannot be changed. +* +* @param[in] ipc IPC handle +* @param[in] pre_timeout pre-timeout period for the watchdog +* +* When the pre-timout expires an IRQ will be generated. Note this timeout +* clears when the IRQ is triggered. An IRQ is generated for the failing +* partition and all of its child partitions. +* +* @return Returns an error code (SC_ERR_NONE = success). +*/ +sc_err_t sc_timer_set_wdog_pre_timeout (sc_ipc_t ipc, +sc_timer_wdog_time_t pre_timeout); + +/*! +* This function starts the watchdog. +* +* @param[in] ipc IPC handle +* @param[in] lock boolean indicating the lock status +* +* @return Returns an error code (SC_ERR_NONE = success). +* +* If \a lock is set then the watchdog cannot be stopped or the timeout +* period changed. +*/ +sc_err_t sc_timer_start_wdog (sc_ipc_t ipc,sc_bool_t lock); + +/*! +* This function stops the watchdog if it is not locked. +* +* @param[in] ipc IPC handle +* +* @return Returns an error code (SC_ERR_NONE = success, SC_ERR_LOCKED +* = locked). +*/ +sc_err_t sc_timer_stop_wdog (sc_ipc_t ipc); + +/*! +* This function pings (services, kicks) the watchdog resetting the time +* before expiration back to the timeout. +* +* @param[in] ipc IPC handle +* +* @return Returns an error code (SC_ERR_NONE = success). +*/ +sc_err_t sc_timer_ping_wdog (sc_ipc_t ipc); + +/*! +* This function gets the status of the watchdog. All arguments are +* in milliseconds. +* +* @param[in] ipc IPC handle +* @param[out] timeout pointer to return the timeout +* @param[out] max_timeout pointer to return the max timeout +* @param[out] remaining_time pointer to return the time remaining +* until trigger +* +* @return Returns an error code (SC_ERR_NONE = success). +*/ +sc_err_t sc_timer_get_wdog_status (sc_ipc_t ipc, +sc_timer_wdog_time_t *timeout,sc_timer_wdog_time_t *max_timeout, +sc_timer_wdog_time_t *remaining_time); + +/*! +* This function gets the status of the watchdog of a partition. All +* arguments are in milliseconds. +* +* @param[in] ipc IPC handle +* @param[in] pt partition to query +* @param[out] enb pointer to return enable status +* @param[out] timeout pointer to return the timeout +* @param[out] remaining_time pointer to return the time remaining +* until trigger +* +* @return Returns an error code (SC_ERR_NONE = success). +*/ +sc_err_t sc_timer_pt_get_wdog_status(sc_ipc_t ipc, sc_rm_pt_t pt, sc_bool_t*enb,
+sc_timer_wdog_time_t*timeout,sc_timer_wdog_time_t*remaining_time);arch/arm/include/asm/arch-imx8/sci/svc/timer/api.h new file +125
-0+ +/*! +* This function configures the action to be taken when a watchdog +* expires. +* +* @param[in] ipc IPC handle +* @param[in] pt partition to affect +* @param[in] action action to take +* +* Default action is inherited from the parent. +* +* @return Returns an error code (SC_ERR_NONE = success). +* +* Return errors: +* - SC_ERR_PARM if invalid parameters, +* - SC_ERR_NOACCESS if caller's partition is not the SYSTEM owner, +* - SC_ERR_LOCKED if the watchdog is locked +*/ +sc_err_t sc_timer_set_wdog_action (sc_ipc_t ipc, +sc_rm_pt_t pt,sc_timer_wdog_action_t action); + +/* @} */ + +/*! +* @name Real-Time Clock (RTC) Functions +* @{ +*/ + +/*! +* This function sets the RTC time. Only the owner of the SC_R_SYSTEM +* resource can set the time. +* +* @param[in] ipc IPC handle +* @param[in] year year (min 1970) +* @param[in] mon month (1-12) +* @param[in] day day of the month (1-31) +* @param[in] hour hour (0-23) +* @param[in] min minute (0-59) +* @param[in] sec second (0-59) +* +* @return Returns an error code (SC_ERR_NONE = success). +* +* Return errors: +* - SC_ERR_PARM if invalid time/date parameters, +* - SC_ERR_NOACCESS if caller's partition is not the SYSTEM owner +*/ +sc_err_t sc_timer_set_rtc_time (sc_ipc_t ipc,uint16_t year,uint8_t mon, +uint8_t day,uint8_t hour,uint8_t min,uint8_t sec); + +/*! +* This function gets the RTC time. +* +* @param[in] ipc IPC handle +* @param[out] year pointer to return year (min 1970) +* @param[out] mon pointer to return month (1-12) +* @param[out] day pointer to return day of the month (1-31) +* @param[out] hour pointer to return hour (0-23) +* @param[out] min pointer to return minute (0-59) +* @param[out] sec pointer to return second (0-59) +* +* @return Returns an error code (SC_ERR_NONE = success). +*/ +sc_err_t sc_timer_get_rtc_time (sc_ipc_t ipc,uint16_t *year,uint8_t *mon, +uint8_t *day,uint8_t *hour,uint8_t *min,uint8_t *sec); + +/*! +* This function gets the RTC time in seconds since 1/1/1970. +* +* @param[in] ipc IPC handle +* @param[out] sec pointer to return second Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
SC_R_SYSTEM
+ * resource can set the calibration.
+ *+ * @param[in] ipc IPC handle + * @param[in] count calbration count (-16 to 15)+ *
+ * The calibration value is a 5-bit value including the sign bit, which is
+ * implemented in 2's complement. It is added or subtracted from the RTC on
+ * a perdiodic basis, once per 32768 cycles of the RTC clock.
+ *
+ * @return Returns an error code (SC_ERR_NONE= success).
+ */arch/arm/include/asm/arch-imx8/sci/svc/timer/api.h new file +8
-0Lines of this file are not shown. View the raw message.
arch/arm/include/asm/arch-imx8/sci/types.h new file +166
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
*/
arch/arm/include/asm/arch-imx8/sci/types.h new file +2
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
*/
arch/arm/include/asm/arch-imx8/sci/types.h new file +4
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
busy/active */
arch/arm/include/asm/arch-imx8/sci/types.h new file +551
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
resources */
arch/arm/include/asm/arch-imx8/sci/types.h new file +139
-0Lines of this file are not shown. View the raw message.
arch/arm/mach-imx/imx8/Makefile new file +11
-0Lines of this file are not shown. View the raw message.
arch/arm/mach-imx/imx8/sci/svc/irq/rpc.h new file +54
-0Lines of this file are not shown. View the raw message.
arch/arm/mach-imx/imx8/sci/svc/irq/rpc_clnt.c new file +76
-0Lines of this file are not shown. View the raw message.
arch/arm/mach-imx/imx8/sci/svc/misc/rpc.h new file +27
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
call */
+#defineMISC_FUNC_GET_CONTROL2U /*!< Index formisc_get_control()RPC call */
+#defineMISC_FUNC_SET_MAX_DMA_GROUP4U /*!< Index formisc_set_max_dma_group()RPC call */
+#defineMISC_FUNC_SET_DMA_GROUP5U /*!< Index formisc_set_dma_group()RPC call */
+#defineMISC_FUNC_SECO_IMAGE_LOAD8U /*!< Index formisc_seco_image_load()RPC call */
+#defineMISC_FUNC_SECO_AUTHENTICATE9U /*!< Index formisc_seco_authenticate()RPC call */
+#defineMISC_FUNC_SECO_FUSE_WRITE20U /*!< Index formisc_seco_fuse_write()RPC call */
+#defineMISC_FUNC_SECO_ENABLE_DEBUG21U /*!< Index formisc_seco_enable_debug()RPC call */
+#defineMISC_FUNC_SECO_FORWARD_LIFECYCLE22U /*!< Index formisc_seco_forward_lifecycle()RPC call */
+#defineMISC_FUNC_SECO_RETURN_LIFECYCLE23U /*!< Index formisc_seco_return_lifecycle()RPC call */
+#defineMISC_FUNC_SECO_BUILD_INFO24U /*!< Index formisc_seco_build_info()RPC call */
+#defineMISC_FUNC_DEBUG_OUT10U /*!< Index formisc_debug_out()RPC call */
+#defineMISC_FUNC_WAVEFORM_CAPTURE6U /*!< Index formisc_waveform_capture()RPC call */
+#defineMISC_FUNC_BUILD_INFO15U /*!< Index formisc_build_info()RPC call */
+#defineMISC_FUNC_UNIQUE_ID19U /*!< Index formisc_unique_id()RPC call */arch/arm/mach-imx/imx8/sci/svc/misc/rpc.h new file +2
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
call */
+#defineMISC_FUNC_BOOT_DONE14U /*!< Index formisc_boot_done()RPC call */
+#defineMISC_FUNC_OTP_FUSE_READ11U /*!< Index formisc_otp_fuse_read()RPC call */
+#defineMISC_FUNC_OTP_FUSE_WRITE17U /*!< Index formisc_otp_fuse_write()RPC call */
+#defineMISC_FUNC_SET_TEMP12U /*!< Index formisc_set_temp()RPC call */
+#defineMISC_FUNC_GET_TEMP13U /*!< Index formisc_get_temp()RPC call */
+#defineMISC_FUNC_GET_BOOT_DEV16U /*!< Index formisc_get_boot_dev()RPC call */
+#defineMISC_FUNC_GET_BUTTON_STATUS18U /*!< Index formisc_get_button_status()RPC call */arch/arm/mach-imx/imx8/sci/svc/misc/rpc.h new file +26
-0Lines of this file are not shown. View the raw message.
arch/arm/mach-imx/imx8/sci/svc/misc/rpc_clnt.c new file +515
-0Lines of this file are not shown. View the raw message.
arch/arm/mach-imx/imx8/sci/svc/pad/rpc.h new file +31
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
call */
+#definePAD_FUNC_GET_WAKEUP9U /*!< Index forpad_get_wakeup()RPC call */arch/arm/mach-imx/imx8/sci/svc/pad/rpc.h new file +5
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
RPC call */
+#definePAD_FUNC_GET_GP_28FDSOI12U /*!< Index forpad_get_gp_28fdsoi()RPC call */
+#definePAD_FUNC_SET_GP_28FDSOI_HSIC3U /*!< Index forpad_set_gp_28fdsoi_hsic()RPC call */
+#definePAD_FUNC_GET_GP_28FDSOI_HSIC8U /*!< Index forpad_get_gp_28fdsoi_hsic()RPC call */
+#definePAD_FUNC_SET_GP_28FDSOI_COMP13U /*!< Index forpad_set_gp_28fdsoi_comp()RPC call */
+#definePAD_FUNC_GET_GP_28FDSOI_COMP14U /*!< Index forpad_get_gp_28fdsoi_comp()RPC call */arch/arm/mach-imx/imx8/sci/svc/pad/rpc.h new file +26
-0Lines of this file are not shown. View the raw message.
arch/arm/mach-imx/imx8/sci/svc/pad/rpc_clnt.c new file +417
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
*psw_ovr)arch/arm/mach-imx/imx8/sci/svc/pad/rpc_clnt.c new file +58
-0Lines of this file are not shown. View the raw message.
arch/arm/mach-imx/imx8/sci/svc/pm/rpc.h new file +27
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
pm_set_sys_power_mode()RPC call */
+#definePM_FUNC_SET_PARTITION_POWER_MODE1U /*!< Index forpm_set_partition_power_mode()RPC call */
+#definePM_FUNC_GET_SYS_POWER_MODE2U /*!< Index forpm_get_sys_power_mode()RPC call */
+#definePM_FUNC_SET_RESOURCE_POWER_MODE3U /*!< Index forpm_set_resource_power_mode()RPC call */
+#definePM_FUNC_GET_RESOURCE_POWER_MODE4U /*!< Index forpm_get_resource_power_mode()RPC call */
+#definePM_FUNC_REQ_LOW_POWER_MODE16U /*!< Index forpm_req_low_power_mode()RPC call */
+#definePM_FUNC_REQ_CPU_LOW_POWER_MODE20U /*!< Index forpm_req_cpu_low_power_mode()RPC call */
+#definePM_FUNC_SET_CPU_RESUME_ADDR17U /*!< Index forpm_set_cpu_resume_addr()RPC call */
+#definePM_FUNC_SET_CPU_RESUME21U /*!< Index forpm_set_cpu_resume()RPC call */
+#definePM_FUNC_REQ_SYS_IF_POWER_MODE18U /*!< Index forpm_req_sys_if_power_mode()RPC call */
+#definePM_FUNC_SET_CLOCK_RATE5U /*!< Index forpm_set_clock_rate()RPC call */
+#definePM_FUNC_GET_CLOCK_RATE6U /*!< Index forpm_get_clock_rate()RPC call */
+#definePM_FUNC_CLOCK_ENABLE7U /*!< Index forpm_clock_enable()RPC call */
+#definePM_FUNC_SET_CLOCK_PARENT14U /*!< Index forpm_set_clock_parent()RPC call */
+#definePM_FUNC_GET_CLOCK_PARENT15U /*!< Index forpm_get_clock_parent()RPC call */arch/arm/mach-imx/imx8/sci/svc/pm/rpc.h new file +2
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
call */
arch/arm/mach-imx/imx8/sci/svc/pm/rpc.h new file +3
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
pm_reboot_partition()RPC call */arch/arm/mach-imx/imx8/sci/svc/pm/rpc.h new file +27
-0Lines of this file are not shown. View the raw message.
arch/arm/mach-imx/imx8/sci/svc/pm/rpc_clnt.c new file +30
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
mode)
arch/arm/mach-imx/imx8/sci/svc/pm/rpc_clnt.c new file +25
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
PM_FUNC_SET_PARTITION_POWER_MODE;arch/arm/mach-imx/imx8/sci/svc/pm/rpc_clnt.c new file +42
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
PM_FUNC_SET_RESOURCE_POWER_MODE;arch/arm/mach-imx/imx8/sci/svc/pm/rpc_clnt.c new file +19
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
PM_FUNC_GET_RESOURCE_POWER_MODE;arch/arm/mach-imx/imx8/sci/svc/pm/rpc_clnt.c new file +42
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
PM_FUNC_REQ_CPU_LOW_POWER_MODE;arch/arm/mach-imx/imx8/sci/svc/pm/rpc_clnt.c new file +54
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
sc_pm_power_mode_tlpm)arch/arm/mach-imx/imx8/sci/svc/pm/rpc_clnt.c new file +248
-0Lines of this file are not shown. View the raw message.
arch/arm/mach-imx/imx8/sci/svc/rm/rpc.h new file +27
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
RPC call */
+#defineRM_FUNC_SET_CONFIDENTIAL31U /*!< Index forrm_set_confidential()RPC call */
+#defineRM_FUNC_PARTITION_FREE2U /*!< Index forrm_partition_free()RPC call */arch/arm/mach-imx/imx8/sci/svc/rm/rpc.h new file +2
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
RPC call */
+#defineRM_FUNC_PARTITION_LOCK4U /*!< Index forrm_partition_lock()RPC call */
+#defineRM_FUNC_GET_PARTITION5U /*!< Index forrm_get_partition()RPC call */arch/arm/mach-imx/imx8/sci/svc/rm/rpc.h new file +3
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
RPC call */
+#defineRM_FUNC_SET_RESOURCE_MOVABLE9U /*!< Index forrm_set_resource_movable()RPC call */
+#defineRM_FUNC_SET_SUBSYS_RSRC_MOVABLE28U /*!< Index forrm_set_subsys_rsrc_movable()RPC call */
+#defineRM_FUNC_SET_MASTER_ATTRIBUTES10U /*!< Index forrm_set_master_attributes()RPC call */
+#defineRM_FUNC_SET_MASTER_SID11U /*!< Index forrm_set_master_sid()RPC call */
+#defineRM_FUNC_SET_PERIPHERAL_PERMISSIONS12U /*!< Index forrm_set_peripheral_permissions()RPC call */
+#defineRM_FUNC_IS_RESOURCE_OWNED13U /*!< Index forrm_is_resource_owned()RPC call */
+#defineRM_FUNC_IS_RESOURCE_MASTER14U /*!< Index forrm_is_resource_master()RPC call */
+#defineRM_FUNC_IS_RESOURCE_PERIPHERAL15U /*!< Index forrm_is_resource_peripheral()RPC call */
+#defineRM_FUNC_GET_RESOURCE_INFO16U /*!< Index forrm_get_resource_info()RPC call */
+#defineRM_FUNC_MEMREG_ALLOC17U /*!< Index forrm_memreg_alloc()RPC call */
+#defineRM_FUNC_MEMREG_SPLIT29U /*!< Index forrm_memreg_split()RPC call */
+#defineRM_FUNC_MEMREG_FREE18U /*!< Index forrm_memreg_free()RPC call */
+#defineRM_FUNC_FIND_MEMREG30U /*!< Index forrm_find_memreg()RPC call */
+#defineRM_FUNC_ASSIGN_MEMREG19U /*!< Index forrm_assign_memreg()RPC call */
+#defineRM_FUNC_SET_MEMREG_PERMISSIONS20U /*!< Index forrm_set_memreg_permissions()RPC call */
+#defineRM_FUNC_IS_MEMREG_OWNED21U /*!< Index forrm_is_memreg_owned()RPC call */
+#defineRM_FUNC_GET_MEMREG_INFO22U /*!< Index forrm_get_memreg_info()RPC call */
+#defineRM_FUNC_ASSIGN_PAD23U /*!< Index forrm_assign_pad()RPC call */
+#defineRM_FUNC_SET_PAD_MOVABLE24U /*!< Index forrm_set_pad_movable()RPC call */
+#defineRM_FUNC_IS_PAD_OWNED25U /*!< Index forrm_is_pad_owned()RPC call */arch/arm/mach-imx/imx8/sci/svc/rm/rpc.h new file +27
-0Lines of this file are not shown. View the raw message.
arch/arm/mach-imx/imx8/sci/svc/rm/rpc_clnt.c new file +30
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
coherent)
arch/arm/mach-imx/imx8/sci/svc/rm/rpc_clnt.c new file +280
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
RM_FUNC_SET_PERIPHERAL_PERMISSIONS;arch/arm/mach-imx/imx8/sci/svc/rm/rpc_clnt.c new file +253
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
RPC_U32(&msg, 4U);arch/arm/mach-imx/imx8/sci/svc/rm/rpc_clnt.c new file +5
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
RPC_U32(&msg, 12U);arch/arm/mach-imx/imx8/sci/svc/rm/rpc_clnt.c new file +77
-0Lines of this file are not shown. View the raw message.
arch/arm/mach-imx/imx8/sci/svc/timer/rpc.h new file +27
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
timer_set_wdog_timeout()RPC call */
+#defineTIMER_FUNC_SET_WDOG_PRE_TIMEOUT12U /*!< Index fortimer_set_wdog_pre_timeout()RPC call */
+#defineTIMER_FUNC_START_WDOG2U /*!< Index fortimer_start_wdog()RPC call */
+#defineTIMER_FUNC_STOP_WDOG3U /*!< Index fortimer_stop_wdog()RPC call */
+#defineTIMER_FUNC_PING_WDOG4U /*!< Index fortimer_ping_wdog()RPC call */
+#defineTIMER_FUNC_GET_WDOG_STATUS5U /*!< Index fortimer_get_wdog_status()RPC call */
+#defineTIMER_FUNC_PT_GET_WDOG_STATUS13U /*!< Index fortimer_pt_get_wdog_status()RPC call */
+#defineTIMER_FUNC_SET_WDOG_ACTION10U /*!< Index fortimer_set_wdog_action()RPC call */
+#defineTIMER_FUNC_SET_RTC_TIME6U /*!< Index fortimer_set_rtc_time()RPC call */
+#defineTIMER_FUNC_GET_RTC_TIME7U /*!< Index fortimer_get_rtc_time()RPC call */
+#defineTIMER_FUNC_GET_RTC_SEC19709U /*!< Index fortimer_get_rtc_sec1970()RPC call */
+#defineTIMER_FUNC_SET_RTC_ALARM8U /*!< Index fortimer_set_rtc_alarm()RPC call */
+#defineTIMER_FUNC_SET_RTC_PERIODIC_ALARM14U /*!< Index fortimer_set_rtc_periodic_alarm()RPC call */
+#defineTIMER_FUNC_CANCEL_RTC_ALARM15U /*!< Index fortimer_cancel_rtc_alarm()RPC call */
+#defineTIMER_FUNC_SET_RTC_CALB11U /*!< Index fortimer_set_rtc_calb()RPC call */arch/arm/mach-imx/imx8/sci/svc/timer/rpc.h new file +26
-0Lines of this file are not shown. View the raw message.
arch/arm/mach-imx/imx8/sci/svc/timer/rpc_clnt.c new file +148
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
*enb,
+sc_timer_wdog_time_t*timeout,sc_timer_wdog_time_t*remaining_time)arch/arm/mach-imx/imx8/sci/svc/timer/rpc_clnt.c new file +216
-0Lines of this file are not shown. View the raw message.
include/dt-bindings/pinctrl/pads-imx8qm.h new file +23
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
DMA.SIM0.CLK, LSIO.GPIO0.IO00 */
+#defineSC_P_SIM0_RST1 /*!<
DMA.SIM0.RST, LSIO.GPIO0.IO01 */
+#defineSC_P_SIM0_IO2 /*!<
DMA.SIM0.IO, LSIO.GPIO0.IO02 */
+#defineSC_P_SIM0_PD3 /*!<
DMA.SIM0.PD, DMA.I2C3.SCL, LSIO.GPIO0.IO03 */
+#defineSC_P_SIM0_POWER_EN4 /*!<
DMA.SIM0.POWER_EN, DMA.I2C3.SDA, LSIO.GPIO0.IO04 */
+#defineSC_P_SIM0_GPIO0_005 /*!<
DMA.SIM0.POWER_EN, LSIO.GPIO0.IO05 */include/dt-bindings/pinctrl/pads-imx8qm.h new file +2
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
M40.I2C0.SCL, M40.UART0.RX, M40.GPIO0.IO02, LSIO.GPIO0.IO06 */
+#defineSC_P_M40_I2C0_SDA8 /*!<
M40.I2C0.SDA, M40.UART0.TX, M40.GPIO0.IO03, LSIO.GPIO0.IO07 */
+#defineSC_P_M40_GPIO0_009 /*!<
M40.GPIO0.IO00, M40.TPM0.CH0, DMA.UART4.RX, LSIO.GPIO0.IO08 */
+#defineSC_P_M40_GPIO0_0110 /*!<
M40.GPIO0.IO01, M40.TPM0.CH1, DMA.UART4.TX, LSIO.GPIO0.IO09 */
+#defineSC_P_M41_I2C0_SCL11 /*!<
M41.I2C0.SCL, M41.UART0.RX, M41.GPIO0.IO02, LSIO.GPIO0.IO10 */
+#defineSC_P_M41_I2C0_SDA12 /*!<
M41.I2C0.SDA, M41.UART0.TX, M41.GPIO0.IO03, LSIO.GPIO0.IO11 */
+#defineSC_P_M41_GPIO0_0013 /*!<
M41.GPIO0.IO00, M41.TPM0.CH0, DMA.UART3.RX, LSIO.GPIO0.IO12 */
+#defineSC_P_M41_GPIO0_0114 /*!<
M41.GPIO0.IO01, M41.TPM0.CH1, DMA.UART3.TX, LSIO.GPIO0.IO13 */
+#defineSC_P_GPT0_CLK15 /*!<
LSIO.GPT0.CLK, DMA.I2C1.SCL, LSIO.KPP0.COL4, LSIO.GPIO0.IO14 */
+#defineSC_P_GPT0_CAPTURE16 /*!<
LSIO.GPT0.CAPTURE, DMA.I2C1.SDA, LSIO.KPP0.COL5, LSIO.GPIO0.IO15 */
+#defineSC_P_GPT0_COMPARE17 /*!<
LSIO.GPT0.COMPARE, LSIO.PWM3.OUT, LSIO.KPP0.COL6, LSIO.GPIO0.IO16 */
+#defineSC_P_GPT1_CLK18 /*!<
LSIO.GPT1.CLK, DMA.I2C2.SCL, LSIO.KPP0.COL7, LSIO.GPIO0.IO17 */
+#defineSC_P_GPT1_CAPTURE19 /*!<
LSIO.GPT1.CAPTURE, DMA.I2C2.SDA, LSIO.KPP0.ROW4, LSIO.GPIO0.IO18 */
+#defineSC_P_GPT1_COMPARE20 /*!<
LSIO.GPT1.COMPARE, LSIO.PWM2.OUT, LSIO.KPP0.ROW5, LSIO.GPIO0.IO19 */
+#defineSC_P_UART0_RX21 /*!<
DMA.UART0.RX, SCU.UART0.RX, LSIO.GPIO0.IO20 */
+#defineSC_P_UART0_TX22 /*!<
DMA.UART0.TX, SCU.UART0.TX, LSIO.GPIO0.IO21 */
+#defineSC_P_UART0_RTS_B23 /*!<
DMA.UART0.RTS_B, LSIO.PWM0.OUT, DMA.UART2.RX, LSIO.GPIO0.IO22 */
+#defineSC_P_UART0_CTS_B24 /*!<
DMA.UART0.CTS_B, LSIO.PWM1.OUT, DMA.UART2.TX, LSIO.GPIO0.IO23 */
+#defineSC_P_UART1_TX25 /*!<
DMA.UART1.TX, DMA.SPI3.SCK, LSIO.GPIO0.IO24 */
+#defineSC_P_UART1_RX26 /*!<
DMA.UART1.RX, DMA.SPI3.SDO, LSIO.GPIO0.IO25 */
+#defineSC_P_UART1_RTS_B27 /*!<
DMA.UART1.RTS_B, DMA.SPI3.SDI, DMA.UART1.CTS_B, LSIO.GPIO0.IO26 */
+#defineSC_P_UART1_CTS_B28 /*!<
DMA.UART1.CTS_B, DMA.SPI3.CS0, DMA.UART1.RTS_B, LSIO.GPIO0.IO27 */include/dt-bindings/pinctrl/pads-imx8qm.h new file +2
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
SCU.GPIO0.IOXX_PMIC_MEMC_ON */
+#defineSC_P_SCU_WDOG_OUT31 /*!<
SCU.WDOG0.WDOG_OUT */
+#defineSC_P_PMIC_I2C_SDA32 /*!<
SCU.PMIC_I2C.SDA */
+#defineSC_P_PMIC_I2C_SCL33 /*!<
SCU.PMIC_I2C.SCL */
+#defineSC_P_PMIC_EARLY_WARNING34 /*!<
SCU.PMIC_EARLY_WARNING */
+#defineSC_P_PMIC_INT_B35 /*!<
SCU.DSC.PMIC_INT_B */
+#defineSC_P_SCU_GPIO0_0036 /*!<
SCU.GPIO0.IO00, SCU.UART0.RX, LSIO.GPIO0.IO28 */
+#defineSC_P_SCU_GPIO0_0137 /*!<
SCU.GPIO0.IO01, SCU.UART0.TX, LSIO.GPIO0.IO29 */
+#defineSC_P_SCU_GPIO0_0238 /*!<
SCU.GPIO0.IO02, SCU.GPIO0.IOXX_PMIC_GPU0_ON, LSIO.GPIO0.IO30 */
+#defineSC_P_SCU_GPIO0_0339 /*!<
SCU.GPIO0.IO03, SCU.GPIO0.IOXX_PMIC_GPU1_ON, LSIO.GPIO0.IO31 */
+#defineSC_P_SCU_GPIO0_0440 /*!<
SCU.GPIO0.IO04, SCU.GPIO0.IOXX_PMIC_A72_ON, LSIO.GPIO1.IO00 */
+#defineSC_P_SCU_GPIO0_0541 /*!<
SCU.GPIO0.IO05, SCU.GPIO0.IOXX_PMIC_A53_ON, LSIO.GPIO1.IO01 */
+#defineSC_P_SCU_GPIO0_0642 /*!<
SCU.GPIO0.IO06, SCU.TPM0.CH0, LSIO.GPIO1.IO02 */
+#defineSC_P_SCU_GPIO0_0743 /*!<
SCU.GPIO0.IO07, SCU.TPM0.CH1, SCU.DSC.RTC_CLOCK_OUTPUT_32K, LSIO.GPIO1.IO03 */
+#defineSC_P_SCU_BOOT_MODE044 /*!<
SCU.DSC.BOOT_MODE0 */
+#defineSC_P_SCU_BOOT_MODE145 /*!<
SCU.DSC.BOOT_MODE1 */
+#defineSC_P_SCU_BOOT_MODE246 /*!<
SCU.DSC.BOOT_MODE2 */
+#defineSC_P_SCU_BOOT_MODE347 /*!<
SCU.DSC.BOOT_MODE3 */
+#defineSC_P_SCU_BOOT_MODE448 /*!<
SCU.DSC.BOOT_MODE4, SCU.PMIC_I2C.SCL */
+#defineSC_P_SCU_BOOT_MODE549 /*!<
SCU.DSC.BOOT_MODE5, SCU.PMIC_I2C.SDA */
+#defineSC_P_LVDS0_GPIO0050 /*!<
LVDS0.GPIO0.IO00, LVDS0.PWM0.OUT, LSIO.GPIO1.IO04 */
+#defineSC_P_LVDS0_GPIO0151 /*!<
LVDS0.GPIO0.IO01, LSIO.GPIO1.IO05 */
+#defineSC_P_LVDS0_I2C0_SCL52 /*!<
LVDS0.I2C0.SCL, LVDS0.GPIO0.IO02, LSIO.GPIO1.IO06 */
+#defineSC_P_LVDS0_I2C0_SDA53 /*!<
LVDS0.I2C0.SDA, LVDS0.GPIO0.IO03, LSIO.GPIO1.IO07 */
+#defineSC_P_LVDS0_I2C1_SCL54 /*!<
LVDS0.I2C1.SCL, DMA.UART2.TX, LSIO.GPIO1.IO08 */
+#defineSC_P_LVDS0_I2C1_SDA55 /*!<
LVDS0.I2C1.SDA, DMA.UART2.RX, LSIO.GPIO1.IO09 */
+#defineSC_P_LVDS1_GPIO0056 /*!<
LVDS1.GPIO0.IO00, LVDS1.PWM0.OUT, LSIO.GPIO1.IO10 */
+#defineSC_P_LVDS1_GPIO0157 /*!<
LVDS1.GPIO0.IO01, LSIO.GPIO1.IO11 */
+#defineSC_P_LVDS1_I2C0_SCL58 /*!<
LVDS1.I2C0.SCL, LVDS1.GPIO0.IO02, LSIO.GPIO1.IO12 */
+#defineSC_P_LVDS1_I2C0_SDA59 /*!<
LVDS1.I2C0.SDA, LVDS1.GPIO0.IO03, LSIO.GPIO1.IO13 */
+#defineSC_P_LVDS1_I2C1_SCL60 /*!<
LVDS1.I2C1.SCL, DMA.UART3.TX, LSIO.GPIO1.IO14 */
+#defineSC_P_LVDS1_I2C1_SDA61 /*!<
LVDS1.I2C1.SDA, DMA.UART3.RX, LSIO.GPIO1.IO15 */include/dt-bindings/pinctrl/pads-imx8qm.h new file +2
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
MIPI_DSI0.I2C0.SCL, LSIO.GPIO1.IO16 */
+#defineSC_P_MIPI_DSI0_I2C0_SDA64 /*!<
MIPI_DSI0.I2C0.SDA, LSIO.GPIO1.IO17 */
+#defineSC_P_MIPI_DSI0_GPIO0_0065 /*!<
MIPI_DSI0.GPIO0.IO00, MIPI_DSI0.PWM0.OUT, LSIO.GPIO1.IO18 */
+#defineSC_P_MIPI_DSI0_GPIO0_0166 /*!<
MIPI_DSI0.GPIO0.IO01, LSIO.GPIO1.IO19 */
+#defineSC_P_MIPI_DSI1_I2C0_SCL67 /*!<
MIPI_DSI1.I2C0.SCL, LSIO.GPIO1.IO20 */
+#defineSC_P_MIPI_DSI1_I2C0_SDA68 /*!<
MIPI_DSI1.I2C0.SDA, LSIO.GPIO1.IO21 */
+#defineSC_P_MIPI_DSI1_GPIO0_0069 /*!<
MIPI_DSI1.GPIO0.IO00, MIPI_DSI1.PWM0.OUT, LSIO.GPIO1.IO22 */
+#defineSC_P_MIPI_DSI1_GPIO0_0170 /*!<
MIPI_DSI1.GPIO0.IO01, LSIO.GPIO1.IO23 */include/dt-bindings/pinctrl/pads-imx8qm.h new file +2
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
MIPI_CSI0.ACM.MCLK_OUT, LSIO.GPIO1.IO24 */
+#defineSC_P_MIPI_CSI0_I2C0_SCL73 /*!<
MIPI_CSI0.I2C0.SCL, LSIO.GPIO1.IO25 */
+#defineSC_P_MIPI_CSI0_I2C0_SDA74 /*!<
MIPI_CSI0.I2C0.SDA, LSIO.GPIO1.IO26 */
+#defineSC_P_MIPI_CSI0_GPIO0_0075 /*!<
MIPI_CSI0.GPIO0.IO00, DMA.I2C0.SCL, MIPI_CSI1.I2C0.SCL, LSIO.GPIO1.IO27 */
+#defineSC_P_MIPI_CSI0_GPIO0_0176 /*!<
MIPI_CSI0.GPIO0.IO01, DMA.I2C0.SDA, MIPI_CSI1.I2C0.SDA, LSIO.GPIO1.IO28 */
+#defineSC_P_MIPI_CSI1_MCLK_OUT77 /*!<
MIPI_CSI1.ACM.MCLK_OUT, LSIO.GPIO1.IO29 */
+#defineSC_P_MIPI_CSI1_GPIO0_0078 /*!<
MIPI_CSI1.GPIO0.IO00, DMA.UART4.RX, LSIO.GPIO1.IO30 */
+#defineSC_P_MIPI_CSI1_GPIO0_0179 /*!<
MIPI_CSI1.GPIO0.IO01, DMA.UART4.TX, LSIO.GPIO1.IO31 */
+#defineSC_P_MIPI_CSI1_I2C0_SCL80 /*!<
MIPI_CSI1.I2C0.SCL, LSIO.GPIO2.IO00 */
+#defineSC_P_MIPI_CSI1_I2C0_SDA81 /*!<
MIPI_CSI1.I2C0.SDA, LSIO.GPIO2.IO01 */
+#defineSC_P_HDMI_TX0_TS_SCL82 /*!<
HDMI_TX0.I2C0.SCL, DMA.I2C0.SCL, LSIO.GPIO2.IO02 */
+#defineSC_P_HDMI_TX0_TS_SDA83 /*!<
HDMI_TX0.I2C0.SDA, DMA.I2C0.SDA, LSIO.GPIO2.IO03 */include/dt-bindings/pinctrl/pads-imx8qm.h new file +2
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
AUD.ESAI1.FSR, LSIO.GPIO2.IO04 */
+#defineSC_P_ESAI1_FST86 /*!<
AUD.ESAI1.FST, AUD.SPDIF0.EXT_CLK, LSIO.GPIO2.IO05 */
+#defineSC_P_ESAI1_SCKR87 /*!<
AUD.ESAI1.SCKR, LSIO.GPIO2.IO06 */
+#defineSC_P_ESAI1_SCKT88 /*!<
AUD.ESAI1.SCKT, AUD.SAI2.RXC, AUD.SPDIF0.EXT_CLK, LSIO.GPIO2.IO07 */
+#defineSC_P_ESAI1_TX089 /*!<
AUD.ESAI1.TX0, AUD.SAI2.RXD, AUD.SPDIF0.RX, LSIO.GPIO2.IO08 */
+#defineSC_P_ESAI1_TX190 /*!<
AUD.ESAI1.TX1, AUD.SAI2.RXFS, AUD.SPDIF0.TX, LSIO.GPIO2.IO09 */
+#defineSC_P_ESAI1_TX2_RX391 /*!<
AUD.ESAI1.TX2_RX3, AUD.SPDIF0.RX, LSIO.GPIO2.IO10 */
+#defineSC_P_ESAI1_TX3_RX292 /*!<
AUD.ESAI1.TX3_RX2, AUD.SPDIF0.TX, LSIO.GPIO2.IO11 */
+#defineSC_P_ESAI1_TX4_RX193 /*!<
AUD.ESAI1.TX4_RX1, LSIO.GPIO2.IO12 */
+#defineSC_P_ESAI1_TX5_RX094 /*!<
AUD.ESAI1.TX5_RX0, LSIO.GPIO2.IO13 */
+#defineSC_P_SPDIF0_RX95 /*!<
AUD.SPDIF0.RX, AUD.MQS.R, AUD.ACM.MCLK_IN1, LSIO.GPIO2.IO14 */
+#defineSC_P_SPDIF0_TX96 /*!<
AUD.SPDIF0.TX, AUD.MQS.L, AUD.ACM.MCLK_OUT1, LSIO.GPIO2.IO15 */
+#defineSC_P_SPDIF0_EXT_CLK97 /*!<
AUD.SPDIF0.EXT_CLK, DMA.DMA0.REQ_IN0, LSIO.GPIO2.IO16 */
+#defineSC_P_SPI3_SCK98 /*!<
DMA.SPI3.SCK, LSIO.GPIO2.IO17 */
+#defineSC_P_SPI3_SDO99 /*!<
DMA.SPI3.SDO, DMA.FTM.CH0, LSIO.GPIO2.IO18 */
+#defineSC_P_SPI3_SDI100 /*!<
DMA.SPI3.SDI, DMA.FTM.CH1, LSIO.GPIO2.IO19 */
+#defineSC_P_SPI3_CS0101 /*!<
DMA.SPI3.CS0, DMA.FTM.CH2, LSIO.GPIO2.IO20 */
+#defineSC_P_SPI3_CS1102 /*!<
DMA.SPI3.CS1, LSIO.GPIO2.IO21 */include/dt-bindings/pinctrl/pads-imx8qm.h new file +2
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
AUD.ESAI0.FSR, LSIO.GPIO2.IO22 */
+#defineSC_P_ESAI0_FST105 /*!<
AUD.ESAI0.FST, LSIO.GPIO2.IO23 */
+#defineSC_P_ESAI0_SCKR106 /*!<
AUD.ESAI0.SCKR, LSIO.GPIO2.IO24 */
+#defineSC_P_ESAI0_SCKT107 /*!<
AUD.ESAI0.SCKT, LSIO.GPIO2.IO25 */
+#defineSC_P_ESAI0_TX0108 /*!<
AUD.ESAI0.TX0, LSIO.GPIO2.IO26 */
+#defineSC_P_ESAI0_TX1109 /*!<
AUD.ESAI0.TX1, LSIO.GPIO2.IO27 */
+#defineSC_P_ESAI0_TX2_RX3110 /*!<
AUD.ESAI0.TX2_RX3, LSIO.GPIO2.IO28 */
+#defineSC_P_ESAI0_TX3_RX2111 /*!<
AUD.ESAI0.TX3_RX2, LSIO.GPIO2.IO29 */
+#defineSC_P_ESAI0_TX4_RX1112 /*!<
AUD.ESAI0.TX4_RX1, LSIO.GPIO2.IO30 */
+#defineSC_P_ESAI0_TX5_RX0113 /*!<
AUD.ESAI0.TX5_RX0, LSIO.GPIO2.IO31 */
+#defineSC_P_MCLK_IN0114 /*!<
AUD.ACM.MCLK_IN0, AUD.ESAI0.RX_HF_CLK, AUD.ESAI1.RX_HF_CLK, LSIO.GPIO3.IO00 */
+#defineSC_P_MCLK_OUT0115 /*!<
AUD.ACM.MCLK_OUT0, AUD.ESAI0.TX_HF_CLK, AUD.ESAI1.TX_HF_CLK, LSIO.GPIO3.IO01 */include/dt-bindings/pinctrl/pads-imx8qm.h new file +2
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
DMA.SPI0.SCK, AUD.SAI0.RXC, LSIO.GPIO3.IO02 */
+#defineSC_P_SPI0_SDO118 /*!<
DMA.SPI0.SDO, AUD.SAI0.TXD, LSIO.GPIO3.IO03 */
+#defineSC_P_SPI0_SDI119 /*!<
DMA.SPI0.SDI, AUD.SAI0.RXD, LSIO.GPIO3.IO04 */
+#defineSC_P_SPI0_CS0120 /*!<
DMA.SPI0.CS0, AUD.SAI0.RXFS, LSIO.GPIO3.IO05 */
+#defineSC_P_SPI0_CS1121 /*!<
DMA.SPI0.CS1, AUD.SAI0.TXC, LSIO.GPIO3.IO06 */
+#defineSC_P_SPI2_SCK122 /*!<
DMA.SPI2.SCK, LSIO.GPIO3.IO07 */
+#defineSC_P_SPI2_SDO123 /*!<
DMA.SPI2.SDO, LSIO.GPIO3.IO08 */
+#defineSC_P_SPI2_SDI124 /*!<
DMA.SPI2.SDI, LSIO.GPIO3.IO09 */
+#defineSC_P_SPI2_CS0125 /*!<
DMA.SPI2.CS0, LSIO.GPIO3.IO10 */
+#defineSC_P_SPI2_CS1126 /*!<
DMA.SPI2.CS1, AUD.SAI0.TXFS, LSIO.GPIO3.IO11 */
+#defineSC_P_SAI1_RXC127 /*!<
AUD.SAI1.RXC, AUD.SAI0.TXD, LSIO.GPIO3.IO12 */
+#defineSC_P_SAI1_RXD128 /*!<
AUD.SAI1.RXD, AUD.SAI0.TXFS, LSIO.GPIO3.IO13 */
+#defineSC_P_SAI1_RXFS129 /*!<
AUD.SAI1.RXFS, AUD.SAI0.RXD, LSIO.GPIO3.IO14 */
+#defineSC_P_SAI1_TXC130 /*!<
AUD.SAI1.TXC, AUD.SAI0.TXC, LSIO.GPIO3.IO15 */
+#defineSC_P_SAI1_TXD131 /*!<
AUD.SAI1.TXD, AUD.SAI1.RXC, LSIO.GPIO3.IO16 */
+#defineSC_P_SAI1_TXFS132 /*!<
AUD.SAI1.TXFS, AUD.SAI1.RXFS, LSIO.GPIO3.IO17 */include/dt-bindings/pinctrl/pads-imx8qm.h new file +2
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
DMA.ADC1.IN3, DMA.SPI1.CS1, LSIO.KPP0.ROW3, LSIO.GPIO3.IO25 */
+#defineSC_P_ADC_IN6135 /*!<
DMA.ADC1.IN2, DMA.SPI1.CS0, LSIO.KPP0.ROW2, LSIO.GPIO3.IO24 */
+#defineSC_P_ADC_IN5136 /*!<
DMA.ADC1.IN1, DMA.SPI1.SDI, LSIO.KPP0.ROW1, LSIO.GPIO3.IO23 */
+#defineSC_P_ADC_IN4137 /*!<
DMA.ADC1.IN0, DMA.SPI1.SDO, LSIO.KPP0.ROW0, LSIO.GPIO3.IO22 */
+#defineSC_P_ADC_IN3138 /*!<
DMA.ADC0.IN3, DMA.SPI1.SCK, LSIO.KPP0.COL3, LSIO.GPIO3.IO21 */
+#defineSC_P_ADC_IN2139 /*!<
DMA.ADC0.IN2, LSIO.KPP0.COL2, LSIO.GPIO3.IO20 */
+#defineSC_P_ADC_IN1140 /*!<
DMA.ADC0.IN1, LSIO.KPP0.COL1, LSIO.GPIO3.IO19 */
+#defineSC_P_ADC_IN0141 /*!<
DMA.ADC0.IN0, LSIO.KPP0.COL0, LSIO.GPIO3.IO18 */
+#defineSC_P_MLB_SIG142 /*!<
CONN.MLB.SIG, AUD.SAI3.RXC, LSIO.GPIO3.IO26 */
+#defineSC_P_MLB_CLK143 /*!<
CONN.MLB.CLK, AUD.SAI3.RXFS, LSIO.GPIO3.IO27 */
+#defineSC_P_MLB_DATA144 /*!<
CONN.MLB.DATA, AUD.SAI3.RXD, LSIO.GPIO3.IO28 */include/dt-bindings/pinctrl/pads-imx8qm.h new file +2
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
DMA.FLEXCAN0.RX, LSIO.GPIO3.IO29 */
+#defineSC_P_FLEXCAN0_TX147 /*!<
DMA.FLEXCAN0.TX, LSIO.GPIO3.IO30 */
+#defineSC_P_FLEXCAN1_RX148 /*!<
DMA.FLEXCAN1.RX, LSIO.GPIO3.IO31 */
+#defineSC_P_FLEXCAN1_TX149 /*!<
DMA.FLEXCAN1.TX, LSIO.GPIO4.IO00 */
+#defineSC_P_FLEXCAN2_RX150 /*!<
DMA.FLEXCAN2.RX, LSIO.GPIO4.IO01 */
+#defineSC_P_FLEXCAN2_TX151 /*!<
DMA.FLEXCAN2.TX, LSIO.GPIO4.IO02 */include/dt-bindings/pinctrl/pads-imx8qm.h new file +2
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
DMA.I2C1.SCL, CONN.USB_OTG1.PWR, LSIO.GPIO4.IO03 */
+#defineSC_P_USB_SS3_TC1154 /*!<
DMA.I2C1.SCL, CONN.USB_OTG2.PWR, LSIO.GPIO4.IO04 */
+#defineSC_P_USB_SS3_TC2155 /*!<
DMA.I2C1.SDA, CONN.USB_OTG1.OC, LSIO.GPIO4.IO05 */
+#defineSC_P_USB_SS3_TC3156 /*!<
DMA.I2C1.SDA, CONN.USB_OTG2.OC, LSIO.GPIO4.IO06 */include/dt-bindings/pinctrl/pads-imx8qm.h new file +2
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
CONN.USDHC1.RESET_B, LSIO.GPIO4.IO07 */
+#defineSC_P_USDHC1_VSELECT159 /*!<
CONN.USDHC1.VSELECT, LSIO.GPIO4.IO08 */
+#defineSC_P_USDHC2_RESET_B160 /*!<
CONN.USDHC2.RESET_B, LSIO.GPIO4.IO09 */
+#defineSC_P_USDHC2_VSELECT161 /*!<
CONN.USDHC2.VSELECT, LSIO.GPIO4.IO10 */
+#defineSC_P_USDHC2_WP162 /*!<
CONN.USDHC2.WP, LSIO.GPIO4.IO11 */
+#defineSC_P_USDHC2_CD_B163 /*!<
CONN.USDHC2.CD_B, LSIO.GPIO4.IO12 */include/dt-bindings/pinctrl/pads-imx8qm.h new file +2
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
CONN.ENET0.MDIO, DMA.I2C4.SDA, LSIO.GPIO4.IO13 */
+#defineSC_P_ENET0_MDC166 /*!<
CONN.ENET0.MDC, DMA.I2C4.SCL, LSIO.GPIO4.IO14 */
+#defineSC_P_ENET0_REFCLK_125M_25M167 /*!<
CONN.ENET0.REFCLK_125M_25M, CONN.ENET0.PPS, LSIO.GPIO4.IO15 */
+#defineSC_P_ENET1_REFCLK_125M_25M168 /*!<
CONN.ENET1.REFCLK_125M_25M, CONN.ENET1.PPS, LSIO.GPIO4.IO16 */
+#defineSC_P_ENET1_MDIO169 /*!<
CONN.ENET1.MDIO, DMA.I2C4.SDA, LSIO.GPIO4.IO17 */
+#defineSC_P_ENET1_MDC170 /*!<
CONN.ENET1.MDC, DMA.I2C4.SCL, LSIO.GPIO4.IO18 */include/dt-bindings/pinctrl/pads-imx8qm.h new file +2
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
LSIO.QSPI1A.SS0_B, LSIO.GPIO4.IO19 */
+#defineSC_P_QSPI1A_SS1_B173 /*!<
LSIO.QSPI1A.SS1_B, LSIO.QSPI1A.SCLK2, LSIO.GPIO4.IO20 */
+#defineSC_P_QSPI1A_SCLK174 /*!<
LSIO.QSPI1A.SCLK, LSIO.GPIO4.IO21 */
+#defineSC_P_QSPI1A_DQS175 /*!<
LSIO.QSPI1A.DQS, LSIO.GPIO4.IO22 */
+#defineSC_P_QSPI1A_DATA3176 /*!<
LSIO.QSPI1A.DATA3, DMA.I2C1.SDA, CONN.USB_OTG1.OC, LSIO.GPIO4.IO23 */
+#defineSC_P_QSPI1A_DATA2177 /*!<
LSIO.QSPI1A.DATA2, DMA.I2C1.SCL, CONN.USB_OTG2.PWR, LSIO.GPIO4.IO24 */
+#defineSC_P_QSPI1A_DATA1178 /*!<
LSIO.QSPI1A.DATA1, DMA.I2C1.SDA, CONN.USB_OTG2.OC, LSIO.GPIO4.IO25 */
+#defineSC_P_QSPI1A_DATA0179 /*!<
LSIO.QSPI1A.DATA0, LSIO.GPIO4.IO26 */include/dt-bindings/pinctrl/pads-imx8qm.h new file +2
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
LSIO.QSPI0A.DATA0 */
+#defineSC_P_QSPI0A_DATA1182 /*!<
LSIO.QSPI0A.DATA1 */
+#defineSC_P_QSPI0A_DATA2183 /*!<
LSIO.QSPI0A.DATA2 */
+#defineSC_P_QSPI0A_DATA3184 /*!<
LSIO.QSPI0A.DATA3 */
+#defineSC_P_QSPI0A_DQS185 /*!<
LSIO.QSPI0A.DQS */
+#defineSC_P_QSPI0A_SS0_B186 /*!<
LSIO.QSPI0A.SS0_B */
+#defineSC_P_QSPI0A_SS1_B187 /*!<
LSIO.QSPI0A.SS1_B, LSIO.QSPI0A.SCLK2 */
+#defineSC_P_QSPI0A_SCLK188 /*!<
LSIO.QSPI0A.SCLK */
+#defineSC_P_QSPI0B_SCLK189 /*!<
LSIO.QSPI0B.SCLK */
+#defineSC_P_QSPI0B_DATA0190 /*!<
LSIO.QSPI0B.DATA0 */
+#defineSC_P_QSPI0B_DATA1191 /*!<
LSIO.QSPI0B.DATA1 */
+#defineSC_P_QSPI0B_DATA2192 /*!<
LSIO.QSPI0B.DATA2 */
+#defineSC_P_QSPI0B_DATA3193 /*!<
LSIO.QSPI0B.DATA3 */
+#defineSC_P_QSPI0B_DQS194 /*!<
LSIO.QSPI0B.DQS */
+#defineSC_P_QSPI0B_SS0_B195 /*!<
LSIO.QSPI0B.SS0_B */
+#defineSC_P_QSPI0B_SS1_B196 /*!<
LSIO.QSPI0B.SS1_B, LSIO.QSPI0B.SCLK2 */include/dt-bindings/pinctrl/pads-imx8qm.h new file +2
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
HSIO.PCIE0.CLKREQ_B, LSIO.GPIO4.IO27 */
+#defineSC_P_PCIE_CTRL0_WAKE_B199 /*!<
HSIO.PCIE0.WAKE_B, LSIO.GPIO4.IO28 */
+#defineSC_P_PCIE_CTRL0_PERST_B200 /*!<
HSIO.PCIE0.PERST_B, LSIO.GPIO4.IO29 */
+#defineSC_P_PCIE_CTRL1_CLKREQ_B201 /*!<
HSIO.PCIE1.CLKREQ_B, DMA.I2C1.SDA, CONN.USB_OTG2.OC, LSIO.GPIO4.IO30 */
+#defineSC_P_PCIE_CTRL1_WAKE_B202 /*!<
HSIO.PCIE1.WAKE_B, DMA.I2C1.SCL, CONN.USB_OTG2.PWR, LSIO.GPIO4.IO31 */
+#defineSC_P_PCIE_CTRL1_PERST_B203 /*!<
HSIO.PCIE1.PERST_B, DMA.I2C1.SCL, CONN.USB_OTG1.PWR, LSIO.GPIO5.IO00 */include/dt-bindings/pinctrl/pads-imx8qm.h new file +2
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
CONN.USB_HSIC0.DATA, DMA.I2C1.SDA, LSIO.GPIO5.IO01 */
+#defineSC_P_USB_HSIC0_STROBE206 /*!<
CONN.USB_HSIC0.STROBE, DMA.I2C1.SCL, LSIO.GPIO5.IO02 */include/dt-bindings/pinctrl/pads-imx8qm.h new file +3
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
CONN.EMMC0.CLK, CONN.NAND.READY_B */
+#defineSC_P_EMMC0_CMD210 /*!<
CONN.EMMC0.CMD, CONN.NAND.DQS, AUD.MQS.R, LSIO.GPIO5.IO03 */
+#defineSC_P_EMMC0_DATA0211 /*!<
CONN.EMMC0.DATA0, CONN.NAND.DATA00, LSIO.GPIO5.IO04 */
+#defineSC_P_EMMC0_DATA1212 /*!<
CONN.EMMC0.DATA1, CONN.NAND.DATA01, LSIO.GPIO5.IO05 */
+#defineSC_P_EMMC0_DATA2213 /*!<
CONN.EMMC0.DATA2, CONN.NAND.DATA02, LSIO.GPIO5.IO06 */
+#defineSC_P_EMMC0_DATA3214 /*!<
CONN.EMMC0.DATA3, CONN.NAND.DATA03, LSIO.GPIO5.IO07 */
+#defineSC_P_EMMC0_DATA4215 /*!<
CONN.EMMC0.DATA4, CONN.NAND.DATA04, LSIO.GPIO5.IO08 */
+#defineSC_P_EMMC0_DATA5216 /*!<
CONN.EMMC0.DATA5, CONN.NAND.DATA05, LSIO.GPIO5.IO09 */
+#defineSC_P_EMMC0_DATA6217 /*!<
CONN.EMMC0.DATA6, CONN.NAND.DATA06, LSIO.GPIO5.IO10 */
+#defineSC_P_EMMC0_DATA7218 /*!<
CONN.EMMC0.DATA7, CONN.NAND.DATA07, LSIO.GPIO5.IO11 */
+#defineSC_P_EMMC0_STROBE219 /*!<
CONN.EMMC0.STROBE, CONN.NAND.CLE, LSIO.GPIO5.IO12 */
+#defineSC_P_EMMC0_RESET_B220 /*!<
CONN.EMMC0.RESET_B, CONN.NAND.WP_B, CONN.USDHC1.VSELECT, LSIO.GPIO5.IO13 */include/dt-bindings/pinctrl/pads-imx8qm.h new file +2
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
CONN.USDHC1.CLK, AUD.MQS.R */
+#defineSC_P_USDHC1_CMD223 /*!<
CONN.USDHC1.CMD, AUD.MQS.L, LSIO.GPIO5.IO14 */
+#defineSC_P_USDHC1_DATA0224 /*!<
CONN.USDHC1.DATA0, CONN.NAND.RE_N, LSIO.GPIO5.IO15 */
+#defineSC_P_USDHC1_DATA1225 /*!<
CONN.USDHC1.DATA1, CONN.NAND.RE_P, LSIO.GPIO5.IO16 */include/dt-bindings/pinctrl/pads-imx8qm.h new file +2
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
CONN.USDHC1.DATA2, CONN.NAND.DQS_N, LSIO.GPIO5.IO17 */
+#defineSC_P_USDHC1_DATA3228 /*!<
CONN.USDHC1.DATA3, CONN.NAND.DQS_P, LSIO.GPIO5.IO18 */include/dt-bindings/pinctrl/pads-imx8qm.h new file +2
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
CONN.USDHC1.DATA4, CONN.NAND.CE0_B, AUD.MQS.R, LSIO.GPIO5.IO19 */
+#defineSC_P_USDHC1_DATA5231 /*!<
CONN.USDHC1.DATA5, CONN.NAND.RE_B, AUD.MQS.L, LSIO.GPIO5.IO20 */
+#defineSC_P_USDHC1_DATA6232 /*!<
CONN.USDHC1.DATA6, CONN.NAND.WE_B, CONN.USDHC1.WP, LSIO.GPIO5.IO21 */
+#defineSC_P_USDHC1_DATA7233 /*!<
CONN.USDHC1.DATA7, CONN.NAND.ALE, CONN.USDHC1.CD_B, LSIO.GPIO5.IO22 */
+#defineSC_P_USDHC1_STROBE234 /*!<
CONN.USDHC1.STROBE, CONN.NAND.CE1_B, CONN.USDHC1.RESET_B, LSIO.GPIO5.IO23 */include/dt-bindings/pinctrl/pads-imx8qm.h new file +2
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
CONN.USDHC2.CLK, AUD.MQS.R, LSIO.GPIO5.IO24 */
+#defineSC_P_USDHC2_CMD237 /*!<
CONN.USDHC2.CMD, AUD.MQS.L, LSIO.GPIO5.IO25 */
+#defineSC_P_USDHC2_DATA0238 /*!<
CONN.USDHC2.DATA0, DMA.UART4.RX, LSIO.GPIO5.IO26 */
+#defineSC_P_USDHC2_DATA1239 /*!<
CONN.USDHC2.DATA1, DMA.UART4.TX, LSIO.GPIO5.IO27 */
+#defineSC_P_USDHC2_DATA2240 /*!<
CONN.USDHC2.DATA2, DMA.UART4.CTS_B, LSIO.GPIO5.IO28 */
+#defineSC_P_USDHC2_DATA3241 /*!<
CONN.USDHC2.DATA3, DMA.UART4.RTS_B, LSIO.GPIO5.IO29 */include/dt-bindings/pinctrl/pads-imx8qm.h new file +2
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
CONN.ENET0.RGMII_TXC, CONN.ENET0.RCLK50M_OUT, CONN.ENET0.RCLK50M_IN, LSIO.GPIO5.IO30 */
+#defineSC_P_ENET0_RGMII_TX_CTL244 /*!<
CONN.ENET0.RGMII_TX_CTL, LSIO.GPIO5.IO31 */
+#defineSC_P_ENET0_RGMII_TXD0245 /*!<
CONN.ENET0.RGMII_TXD0, LSIO.GPIO6.IO00 */
+#defineSC_P_ENET0_RGMII_TXD1246 /*!<
CONN.ENET0.RGMII_TXD1, LSIO.GPIO6.IO01 */
+#defineSC_P_ENET0_RGMII_TXD2247 /*!<
CONN.ENET0.RGMII_TXD2, DMA.UART3.TX, VPU.TSI_S1.VID, LSIO.GPIO6.IO02 */
+#defineSC_P_ENET0_RGMII_TXD3248 /*!<
CONN.ENET0.RGMII_TXD3, DMA.UART3.RTS_B, VPU.TSI_S1.SYNC, LSIO.GPIO6.IO03 */
+#defineSC_P_ENET0_RGMII_RXC249 /*!<
CONN.ENET0.RGMII_RXC, DMA.UART3.CTS_B, VPU.TSI_S1.DATA, LSIO.GPIO6.IO04 */
+#defineSC_P_ENET0_RGMII_RX_CTL250 /*!<
CONN.ENET0.RGMII_RX_CTL, VPU.TSI_S0.VID, LSIO.GPIO6.IO05 */
+#defineSC_P_ENET0_RGMII_RXD0251 /*!<
CONN.ENET0.RGMII_RXD0, VPU.TSI_S0.SYNC, LSIO.GPIO6.IO06 */
+#defineSC_P_ENET0_RGMII_RXD1252 /*!<
CONN.ENET0.RGMII_RXD1, VPU.TSI_S0.DATA, LSIO.GPIO6.IO07 */
+#defineSC_P_ENET0_RGMII_RXD2253 /*!<
CONN.ENET0.RGMII_RXD2, CONN.ENET0.RMII_RX_ER, VPU.TSI_S0.CLK, LSIO.GPIO6.IO08 */
+#defineSC_P_ENET0_RGMII_RXD3254 /*!<
CONN.ENET0.RGMII_RXD3, DMA.UART3.RX, VPU.TSI_S1.CLK, LSIO.GPIO6.IO09 */include/dt-bindings/pinctrl/pads-imx8qm.h new file +2
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
CONN.ENET1.RGMII_TXC, CONN.ENET1.RCLK50M_OUT, CONN.ENET1.RCLK50M_IN, LSIO.GPIO6.IO10 */
+#defineSC_P_ENET1_RGMII_TX_CTL257 /*!<
CONN.ENET1.RGMII_TX_CTL, LSIO.GPIO6.IO11 */
+#defineSC_P_ENET1_RGMII_TXD0258 /*!<
CONN.ENET1.RGMII_TXD0, LSIO.GPIO6.IO12 */
+#defineSC_P_ENET1_RGMII_TXD1259 /*!<
CONN.ENET1.RGMII_TXD1, LSIO.GPIO6.IO13 */
+#defineSC_P_ENET1_RGMII_TXD2260 /*!<
CONN.ENET1.RGMII_TXD2, DMA.UART3.TX, VPU.TSI_S1.VID, LSIO.GPIO6.IO14 */
+#defineSC_P_ENET1_RGMII_TXD3261 /*!<
CONN.ENET1.RGMII_TXD3, DMA.UART3.RTS_B, VPU.TSI_S1.SYNC, LSIO.GPIO6.IO15 */
+#defineSC_P_ENET1_RGMII_RXC262 /*!<
CONN.ENET1.RGMII_RXC, DMA.UART3.CTS_B, VPU.TSI_S1.DATA, LSIO.GPIO6.IO16 */
+#defineSC_P_ENET1_RGMII_RX_CTL263 /*!<
CONN.ENET1.RGMII_RX_CTL, VPU.TSI_S0.VID, LSIO.GPIO6.IO17 */
+#defineSC_P_ENET1_RGMII_RXD0264 /*!<
CONN.ENET1.RGMII_RXD0, VPU.TSI_S0.SYNC, LSIO.GPIO6.IO18 */
+#defineSC_P_ENET1_RGMII_RXD1265 /*!<
CONN.ENET1.RGMII_RXD1, VPU.TSI_S0.DATA, LSIO.GPIO6.IO19 */
+#defineSC_P_ENET1_RGMII_RXD2266 /*!<
CONN.ENET1.RGMII_RXD2, CONN.ENET1.RMII_RX_ER, VPU.TSI_S0.CLK, LSIO.GPIO6.IO20 */
+#defineSC_P_ENET1_RGMII_RXD3267 /*!<
CONN.ENET1.RGMII_RXD3, DMA.UART3.RX, VPU.TSI_S1.CLK, LSIO.GPIO6.IO21 */include/dt-bindings/pinctrl/pads-imx8qm.h new file +9
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
SC_P_SIM0_CLK0
+#defineSC_P_SIM0_CLK_LSIO_GPIO0_IO00SC_P_SIM0_CLK3
+#defineSC_P_SIM0_RST_DMA_SIM0_RSTSC_P_SIM0_RST0
+#defineSC_P_SIM0_RST_LSIO_GPIO0_IO01SC_P_SIM0_RST3
+#defineSC_P_SIM0_IO_DMA_SIM0_IOSC_P_SIM0_IO0
+#defineSC_P_SIM0_IO_LSIO_GPIO0_IO02SC_P_SIM0_IO3
+#defineSC_P_SIM0_PD_DMA_SIM0_PDSC_P_SIM0_PD0
+#defineSC_P_SIM0_PD_DMA_I2C3_SCLSC_P_SIM0_PD1
+#defineSC_P_SIM0_PD_LSIO_GPIO0_IO03SC_P_SIM0_PD3
+#defineSC_P_SIM0_POWER_EN_DMA_SIM0_POWER_ENSC_P_SIM0_POWER_EN0
+#defineSC_P_SIM0_POWER_EN_DMA_I2C3_SDASC_P_SIM0_POWER_EN1
+#defineSC_P_SIM0_POWER_EN_LSIO_GPIO0_IO04SC_P_SIM0_POWER_EN3
+#defineSC_P_SIM0_GPIO0_00_DMA_SIM0_POWER_ENSC_P_SIM0_GPIO0_000
+#defineSC_P_SIM0_GPIO0_00_LSIO_GPIO0_IO05SC_P_SIM0_GPIO0_003
+#defineSC_P_M40_I2C0_SCL_M40_I2C0_SCLSC_P_M40_I2C0_SCL0
+#defineSC_P_M40_I2C0_SCL_M40_UART0_RXSC_P_M40_I2C0_SCL1
+#defineSC_P_M40_I2C0_SCL_M40_GPIO0_IO02SC_P_M40_I2C0_SCL2
+#defineSC_P_M40_I2C0_SCL_LSIO_GPIO0_IO06SC_P_M40_I2C0_SCL3
+#defineSC_P_M40_I2C0_SDA_M40_I2C0_SDASC_P_M40_I2C0_SDA0
+#defineSC_P_M40_I2C0_SDA_M40_UART0_TXSC_P_M40_I2C0_SDA1
+#defineSC_P_M40_I2C0_SDA_M40_GPIO0_IO03SC_P_M40_I2C0_SDA2
+#defineSC_P_M40_I2C0_SDA_LSIO_GPIO0_IO07SC_P_M40_I2C0_SDA3
+#defineSC_P_M40_GPIO0_00_M40_GPIO0_IO00SC_P_M40_GPIO0_000
+#defineSC_P_M40_GPIO0_00_M40_TPM0_CH0SC_P_M40_GPIO0_001
+#defineSC_P_M40_GPIO0_00_DMA_UART4_RXSC_P_M40_GPIO0_002
+#defineSC_P_M40_GPIO0_00_LSIO_GPIO0_IO08SC_P_M40_GPIO0_003
+#defineSC_P_M40_GPIO0_01_M40_GPIO0_IO01SC_P_M40_GPIO0_010
+#defineSC_P_M40_GPIO0_01_M40_TPM0_CH1SC_P_M40_GPIO0_011
+#defineSC_P_M40_GPIO0_01_DMA_UART4_TXSC_P_M40_GPIO0_012
+#defineSC_P_M40_GPIO0_01_LSIO_GPIO0_IO09SC_P_M40_GPIO0_013
+#defineSC_P_M41_I2C0_SCL_M41_I2C0_SCLSC_P_M41_I2C0_SCL0
+#defineSC_P_M41_I2C0_SCL_M41_UART0_RXSC_P_M41_I2C0_SCL1
+#defineSC_P_M41_I2C0_SCL_M41_GPIO0_IO02SC_P_M41_I2C0_SCL2
+#defineSC_P_M41_I2C0_SCL_LSIO_GPIO0_IO10SC_P_M41_I2C0_SCL3
+#defineSC_P_M41_I2C0_SDA_M41_I2C0_SDASC_P_M41_I2C0_SDA0
+#defineSC_P_M41_I2C0_SDA_M41_UART0_TXSC_P_M41_I2C0_SDA1
+#defineSC_P_M41_I2C0_SDA_M41_GPIO0_IO03SC_P_M41_I2C0_SDA2
+#defineSC_P_M41_I2C0_SDA_LSIO_GPIO0_IO11SC_P_M41_I2C0_SDA3
+#defineSC_P_M41_GPIO0_00_M41_GPIO0_IO00SC_P_M41_GPIO0_000
+#defineSC_P_M41_GPIO0_00_M41_TPM0_CH0SC_P_M41_GPIO0_001
+#defineSC_P_M41_GPIO0_00_DMA_UART3_RXSC_P_M41_GPIO0_002
+#defineSC_P_M41_GPIO0_00_LSIO_GPIO0_IO12SC_P_M41_GPIO0_003
+#defineSC_P_M41_GPIO0_01_M41_GPIO0_IO01SC_P_M41_GPIO0_010
+#defineSC_P_M41_GPIO0_01_M41_TPM0_CH1SC_P_M41_GPIO0_011
+#defineSC_P_M41_GPIO0_01_DMA_UART3_TXSC_P_M41_GPIO0_012
+#defineSC_P_M41_GPIO0_01_LSIO_GPIO0_IO13SC_P_M41_GPIO0_013
+#defineSC_P_GPT0_CLK_LSIO_GPT0_CLKSC_P_GPT0_CLK0
+#defineSC_P_GPT0_CLK_DMA_I2C1_SCLSC_P_GPT0_CLK1
+#defineSC_P_GPT0_CLK_LSIO_KPP0_COL4SC_P_GPT0_CLK2
+#defineSC_P_GPT0_CLK_LSIO_GPIO0_IO14SC_P_GPT0_CLK3
+#defineSC_P_GPT0_CAPTURE_LSIO_GPT0_CAPTURESC_P_GPT0_CAPTURE0
+#defineSC_P_GPT0_CAPTURE_DMA_I2C1_SDASC_P_GPT0_CAPTURE1
+#defineSC_P_GPT0_CAPTURE_LSIO_KPP0_COL5SC_P_GPT0_CAPTURE2
+#defineSC_P_GPT0_CAPTURE_LSIO_GPIO0_IO15SC_P_GPT0_CAPTURE3
+#defineSC_P_GPT0_COMPARE_LSIO_GPT0_COMPARESC_P_GPT0_COMPARE0
+#defineSC_P_GPT0_COMPARE_LSIO_PWM3_OUTSC_P_GPT0_COMPARE1
+#defineSC_P_GPT0_COMPARE_LSIO_KPP0_COL6SC_P_GPT0_COMPARE2
+#defineSC_P_GPT0_COMPARE_LSIO_GPIO0_IO16SC_P_GPT0_COMPARE3
+#defineSC_P_GPT1_CLK_LSIO_GPT1_CLKSC_P_GPT1_CLK0
+#defineSC_P_GPT1_CLK_DMA_I2C2_SCLSC_P_GPT1_CLK1
+#defineSC_P_GPT1_CLK_LSIO_KPP0_COL7SC_P_GPT1_CLK2
+#defineSC_P_GPT1_CLK_LSIO_GPIO0_IO17SC_P_GPT1_CLK3
+#defineSC_P_GPT1_CAPTURE_LSIO_GPT1_CAPTURESC_P_GPT1_CAPTURE0
+#defineSC_P_GPT1_CAPTURE_DMA_I2C2_SDASC_P_GPT1_CAPTURE1
+#defineSC_P_GPT1_CAPTURE_LSIO_KPP0_ROW4SC_P_GPT1_CAPTURE2
+#defineSC_P_GPT1_CAPTURE_LSIO_GPIO0_IO18SC_P_GPT1_CAPTURE3
+#defineSC_P_GPT1_COMPARE_LSIO_GPT1_COMPARESC_P_GPT1_COMPARE0
+#defineSC_P_GPT1_COMPARE_LSIO_PWM2_OUTSC_P_GPT1_COMPARE1
+#defineSC_P_GPT1_COMPARE_LSIO_KPP0_ROW5SC_P_GPT1_COMPARE2
+#defineSC_P_GPT1_COMPARE_LSIO_GPIO0_IO19SC_P_GPT1_COMPARE3
+#defineSC_P_UART0_RX_DMA_UART0_RXSC_P_UART0_RX0
+#defineSC_P_UART0_RX_SCU_UART0_RXSC_P_UART0_RX1
+#defineSC_P_UART0_RX_LSIO_GPIO0_IO20SC_P_UART0_RX3
+#defineSC_P_UART0_TX_DMA_UART0_TXSC_P_UART0_TX0
+#defineSC_P_UART0_TX_SCU_UART0_TXSC_P_UART0_TX1
+#defineSC_P_UART0_TX_LSIO_GPIO0_IO21SC_P_UART0_TX3
+#defineSC_P_UART0_RTS_B_DMA_UART0_RTS_BSC_P_UART0_RTS_B0
+#defineSC_P_UART0_RTS_B_LSIO_PWM0_OUTSC_P_UART0_RTS_B1
+#defineSC_P_UART0_RTS_B_DMA_UART2_RXSC_P_UART0_RTS_B2
+#defineSC_P_UART0_RTS_B_LSIO_GPIO0_IO22SC_P_UART0_RTS_B3
+#defineSC_P_UART0_CTS_B_DMA_UART0_CTS_BSC_P_UART0_CTS_B0
+#defineSC_P_UART0_CTS_B_LSIO_PWM1_OUTSC_P_UART0_CTS_B1
+#defineSC_P_UART0_CTS_B_DMA_UART2_TXSC_P_UART0_CTS_B2
+#defineSC_P_UART0_CTS_B_LSIO_GPIO0_IO23SC_P_UART0_CTS_B3
+#defineSC_P_UART1_TX_DMA_UART1_TXSC_P_UART1_TX0
+#defineSC_P_UART1_TX_DMA_SPI3_SCKSC_P_UART1_TX1
+#defineSC_P_UART1_TX_LSIO_GPIO0_IO24SC_P_UART1_TX3
+#defineSC_P_UART1_RX_DMA_UART1_RXSC_P_UART1_RX0
+#defineSC_P_UART1_RX_DMA_SPI3_SDOSC_P_UART1_RX1
+#defineSC_P_UART1_RX_LSIO_GPIO0_IO25SC_P_UART1_RX3
+#defineSC_P_UART1_RTS_B_DMA_UART1_RTS_BSC_P_UART1_RTS_B0
+#defineSC_P_UART1_RTS_B_DMA_SPI3_SDISC_P_UART1_RTS_B1
+#defineSC_P_UART1_RTS_B_DMA_UART1_CTS_BSC_P_UART1_RTS_B2
+#defineSC_P_UART1_RTS_B_LSIO_GPIO0_IO26SC_P_UART1_RTS_B3
+#defineSC_P_UART1_CTS_B_DMA_UART1_CTS_BSC_P_UART1_CTS_B0
+#defineSC_P_UART1_CTS_B_DMA_SPI3_CS0SC_P_UART1_CTS_B1
+#defineSC_P_UART1_CTS_B_DMA_UART1_RTS_BSC_P_UART1_CTS_B2
+#defineSC_P_UART1_CTS_B_LSIO_GPIO0_IO27SC_P_UART1_CTS_B3
+#defineSC_P_SCU_PMIC_MEMC_ON_SCU_GPIO0_IOXX_PMIC_MEMC_ONSC_P_SCU_PMIC_MEMC_ON0
+#defineSC_P_SCU_WDOG_OUT_SCU_WDOG0_WDOG_OUTSC_P_SCU_WDOG_OUT0
+#defineSC_P_PMIC_I2C_SDA_SCU_PMIC_I2C_SDASC_P_PMIC_I2C_SDA0
+#defineSC_P_PMIC_I2C_SCL_SCU_PMIC_I2C_SCLSC_P_PMIC_I2C_SCL0
+#defineSC_P_PMIC_EARLY_WARNING_SCU_PMIC_EARLY_WARNINGSC_P_PMIC_EARLY_WARNING0
+#defineSC_P_PMIC_INT_B_SCU_DSC_PMIC_INT_BSC_P_PMIC_INT_B0
+#defineSC_P_SCU_GPIO0_00_SCU_GPIO0_IO00SC_P_SCU_GPIO0_000
+#defineSC_P_SCU_GPIO0_00_SCU_UART0_RXSC_P_SCU_GPIO0_001
+#defineSC_P_SCU_GPIO0_00_LSIO_GPIO0_IO28SC_P_SCU_GPIO0_003
+#defineSC_P_SCU_GPIO0_01_SCU_GPIO0_IO01SC_P_SCU_GPIO0_010
+#defineSC_P_SCU_GPIO0_01_SCU_UART0_TXSC_P_SCU_GPIO0_011
+#defineSC_P_SCU_GPIO0_01_LSIO_GPIO0_IO29SC_P_SCU_GPIO0_013
+#defineSC_P_SCU_GPIO0_02_SCU_GPIO0_IO02SC_P_SCU_GPIO0_020
+#defineSC_P_SCU_GPIO0_02_SCU_GPIO0_IOXX_PMIC_GPU0_ONSC_P_SCU_GPIO0_021
+#defineSC_P_SCU_GPIO0_02_LSIO_GPIO0_IO30SC_P_SCU_GPIO0_023
+#defineSC_P_SCU_GPIO0_03_SCU_GPIO0_IO03SC_P_SCU_GPIO0_030
+#defineSC_P_SCU_GPIO0_03_SCU_GPIO0_IOXX_PMIC_GPU1_ONSC_P_SCU_GPIO0_031
+#defineSC_P_SCU_GPIO0_03_LSIO_GPIO0_IO31SC_P_SCU_GPIO0_033
+#defineSC_P_SCU_GPIO0_04_SCU_GPIO0_IO04SC_P_SCU_GPIO0_040
+#defineSC_P_SCU_GPIO0_04_SCU_GPIO0_IOXX_PMIC_A72_ONSC_P_SCU_GPIO0_041
+#defineSC_P_SCU_GPIO0_04_LSIO_GPIO1_IO00SC_P_SCU_GPIO0_043
+#defineSC_P_SCU_GPIO0_05_SCU_GPIO0_IO05SC_P_SCU_GPIO0_050
+#defineSC_P_SCU_GPIO0_05_SCU_GPIO0_IOXX_PMIC_A53_ONSC_P_SCU_GPIO0_051
+#defineSC_P_SCU_GPIO0_05_LSIO_GPIO1_IO01SC_P_SCU_GPIO0_053
+#defineSC_P_SCU_GPIO0_06_SCU_GPIO0_IO06SC_P_SCU_GPIO0_060
+#defineSC_P_SCU_GPIO0_06_SCU_TPM0_CH0SC_P_SCU_GPIO0_061
+#defineSC_P_SCU_GPIO0_06_LSIO_GPIO1_IO02SC_P_SCU_GPIO0_063
+#defineSC_P_SCU_GPIO0_07_SCU_GPIO0_IO07SC_P_SCU_GPIO0_070
+#defineSC_P_SCU_GPIO0_07_SCU_TPM0_CH1SC_P_SCU_GPIO0_071
+#defineSC_P_SCU_GPIO0_07_SCU_DSC_RTC_CLOCK_OUTPUT_32KSC_P_SCU_GPIO0_072
+#defineSC_P_SCU_GPIO0_07_LSIO_GPIO1_IO03SC_P_SCU_GPIO0_073
+#defineSC_P_SCU_BOOT_MODE0_SCU_DSC_BOOT_MODE0SC_P_SCU_BOOT_MODE00
+#defineSC_P_SCU_BOOT_MODE1_SCU_DSC_BOOT_MODE1SC_P_SCU_BOOT_MODE10
+#defineSC_P_SCU_BOOT_MODE2_SCU_DSC_BOOT_MODE2SC_P_SCU_BOOT_MODE20
+#defineSC_P_SCU_BOOT_MODE3_SCU_DSC_BOOT_MODE3SC_P_SCU_BOOT_MODE30
+#defineSC_P_SCU_BOOT_MODE4_SCU_DSC_BOOT_MODE4SC_P_SCU_BOOT_MODE40
+#defineSC_P_SCU_BOOT_MODE4_SCU_PMIC_I2C_SCLSC_P_SCU_BOOT_MODE41
+#defineSC_P_SCU_BOOT_MODE5_SCU_DSC_BOOT_MODE5SC_P_SCU_BOOT_MODE50
+#defineSC_P_SCU_BOOT_MODE5_SCU_PMIC_I2C_SDASC_P_SCU_BOOT_MODE51
+#defineSC_P_LVDS0_GPIO00_LVDS0_GPIO0_IO00SC_P_LVDS0_GPIO000
+#defineSC_P_LVDS0_GPIO00_LVDS0_PWM0_OUTSC_P_LVDS0_GPIO001
+#defineSC_P_LVDS0_GPIO00_LSIO_GPIO1_IO04SC_P_LVDS0_GPIO003
+#defineSC_P_LVDS0_GPIO01_LVDS0_GPIO0_IO01SC_P_LVDS0_GPIO010
+#defineSC_P_LVDS0_GPIO01_LSIO_GPIO1_IO05SC_P_LVDS0_GPIO013
+#defineSC_P_LVDS0_I2C0_SCL_LVDS0_I2C0_SCLSC_P_LVDS0_I2C0_SCL0
+#defineSC_P_LVDS0_I2C0_SCL_LVDS0_GPIO0_IO02SC_P_LVDS0_I2C0_SCL1
+#defineSC_P_LVDS0_I2C0_SCL_LSIO_GPIO1_IO06SC_P_LVDS0_I2C0_SCL3
+#defineSC_P_LVDS0_I2C0_SDA_LVDS0_I2C0_SDASC_P_LVDS0_I2C0_SDA0
+#defineSC_P_LVDS0_I2C0_SDA_LVDS0_GPIO0_IO03SC_P_LVDS0_I2C0_SDA1
+#defineSC_P_LVDS0_I2C0_SDA_LSIO_GPIO1_IO07SC_P_LVDS0_I2C0_SDA3
+#defineSC_P_LVDS0_I2C1_SCL_LVDS0_I2C1_SCLSC_P_LVDS0_I2C1_SCL0
+#defineSC_P_LVDS0_I2C1_SCL_DMA_UART2_TXSC_P_LVDS0_I2C1_SCL1
+#defineSC_P_LVDS0_I2C1_SCL_LSIO_GPIO1_IO08SC_P_LVDS0_I2C1_SCL3
+#defineSC_P_LVDS0_I2C1_SDA_LVDS0_I2C1_SDASC_P_LVDS0_I2C1_SDA0
+#defineSC_P_LVDS0_I2C1_SDA_DMA_UART2_RXSC_P_LVDS0_I2C1_SDA1
+#defineSC_P_LVDS0_I2C1_SDA_LSIO_GPIO1_IO09SC_P_LVDS0_I2C1_SDA3
+#defineSC_P_LVDS1_GPIO00_LVDS1_GPIO0_IO00SC_P_LVDS1_GPIO000
+#defineSC_P_LVDS1_GPIO00_LVDS1_PWM0_OUTSC_P_LVDS1_GPIO001
+#defineSC_P_LVDS1_GPIO00_LSIO_GPIO1_IO10SC_P_LVDS1_GPIO003
+#defineSC_P_LVDS1_GPIO01_LVDS1_GPIO0_IO01SC_P_LVDS1_GPIO010
+#defineSC_P_LVDS1_GPIO01_LSIO_GPIO1_IO11SC_P_LVDS1_GPIO013
+#defineSC_P_LVDS1_I2C0_SCL_LVDS1_I2C0_SCLSC_P_LVDS1_I2C0_SCL0
+#defineSC_P_LVDS1_I2C0_SCL_LVDS1_GPIO0_IO02SC_P_LVDS1_I2C0_SCL1
+#defineSC_P_LVDS1_I2C0_SCL_LSIO_GPIO1_IO12SC_P_LVDS1_I2C0_SCL3
+#defineSC_P_LVDS1_I2C0_SDA_LVDS1_I2C0_SDASC_P_LVDS1_I2C0_SDA0
+#defineSC_P_LVDS1_I2C0_SDA_LVDS1_GPIO0_IO03SC_P_LVDS1_I2C0_SDA1
+#defineSC_P_LVDS1_I2C0_SDA_LSIO_GPIO1_IO13SC_P_LVDS1_I2C0_SDA3
+#defineSC_P_LVDS1_I2C1_SCL_LVDS1_I2C1_SCLSC_P_LVDS1_I2C1_SCL0
+#defineSC_P_LVDS1_I2C1_SCL_DMA_UART3_TXSC_P_LVDS1_I2C1_SCL1
+#defineSC_P_LVDS1_I2C1_SCL_LSIO_GPIO1_IO14SC_P_LVDS1_I2C1_SCL3
+#defineSC_P_LVDS1_I2C1_SDA_LVDS1_I2C1_SDASC_P_LVDS1_I2C1_SDA0
+#defineSC_P_LVDS1_I2C1_SDA_DMA_UART3_RXSC_P_LVDS1_I2C1_SDA1
+#defineSC_P_LVDS1_I2C1_SDA_LSIO_GPIO1_IO15SC_P_LVDS1_I2C1_SDA3
+#defineSC_P_MIPI_DSI0_I2C0_SCL_MIPI_DSI0_I2C0_SCLSC_P_MIPI_DSI0_I2C0_SCL0
+#defineSC_P_MIPI_DSI0_I2C0_SCL_LSIO_GPIO1_IO16SC_P_MIPI_DSI0_I2C0_SCL3
+#defineSC_P_MIPI_DSI0_I2C0_SDA_MIPI_DSI0_I2C0_SDASC_P_MIPI_DSI0_I2C0_SDA0
+#defineSC_P_MIPI_DSI0_I2C0_SDA_LSIO_GPIO1_IO17SC_P_MIPI_DSI0_I2C0_SDA3
+#defineSC_P_MIPI_DSI0_GPIO0_00_MIPI_DSI0_GPIO0_IO00SC_P_MIPI_DSI0_GPIO0_000
+#defineSC_P_MIPI_DSI0_GPIO0_00_MIPI_DSI0_PWM0_OUTSC_P_MIPI_DSI0_GPIO0_001
+#defineSC_P_MIPI_DSI0_GPIO0_00_LSIO_GPIO1_IO18SC_P_MIPI_DSI0_GPIO0_003
+#defineSC_P_MIPI_DSI0_GPIO0_01_MIPI_DSI0_GPIO0_IO01SC_P_MIPI_DSI0_GPIO0_010
+#defineSC_P_MIPI_DSI0_GPIO0_01_LSIO_GPIO1_IO19SC_P_MIPI_DSI0_GPIO0_013
+#defineSC_P_MIPI_DSI1_I2C0_SCL_MIPI_DSI1_I2C0_SCLSC_P_MIPI_DSI1_I2C0_SCL0
+#defineSC_P_MIPI_DSI1_I2C0_SCL_LSIO_GPIO1_IO20SC_P_MIPI_DSI1_I2C0_SCL3
+#defineSC_P_MIPI_DSI1_I2C0_SDA_MIPI_DSI1_I2C0_SDASC_P_MIPI_DSI1_I2C0_SDA0
+#defineSC_P_MIPI_DSI1_I2C0_SDA_LSIO_GPIO1_IO21SC_P_MIPI_DSI1_I2C0_SDA3
+#defineSC_P_MIPI_DSI1_GPIO0_00_MIPI_DSI1_GPIO0_IO00SC_P_MIPI_DSI1_GPIO0_000
+#defineSC_P_MIPI_DSI1_GPIO0_00_MIPI_DSI1_PWM0_OUTSC_P_MIPI_DSI1_GPIO0_001
+#defineSC_P_MIPI_DSI1_GPIO0_00_LSIO_GPIO1_IO22SC_P_MIPI_DSI1_GPIO0_003
+#defineSC_P_MIPI_DSI1_GPIO0_01_MIPI_DSI1_GPIO0_IO01SC_P_MIPI_DSI1_GPIO0_010
+#defineSC_P_MIPI_DSI1_GPIO0_01_LSIO_GPIO1_IO23SC_P_MIPI_DSI1_GPIO0_013
+#defineSC_P_MIPI_CSI0_MCLK_OUT_MIPI_CSI0_ACM_MCLK_OUTSC_P_MIPI_CSI0_MCLK_OUT0
+#defineSC_P_MIPI_CSI0_MCLK_OUT_LSIO_GPIO1_IO24SC_P_MIPI_CSI0_MCLK_OUT3
+#defineSC_P_MIPI_CSI0_I2C0_SCL_MIPI_CSI0_I2C0_SCLSC_P_MIPI_CSI0_I2C0_SCL0
+#defineSC_P_MIPI_CSI0_I2C0_SCL_LSIO_GPIO1_IO25SC_P_MIPI_CSI0_I2C0_SCL3
+#defineSC_P_MIPI_CSI0_I2C0_SDA_MIPI_CSI0_I2C0_SDASC_P_MIPI_CSI0_I2C0_SDA0
+#defineSC_P_MIPI_CSI0_I2C0_SDA_LSIO_GPIO1_IO26SC_P_MIPI_CSI0_I2C0_SDA3
+#defineSC_P_MIPI_CSI0_GPIO0_00_MIPI_CSI0_GPIO0_IO00SC_P_MIPI_CSI0_GPIO0_000
+#defineSC_P_MIPI_CSI0_GPIO0_00_DMA_I2C0_SCLSC_P_MIPI_CSI0_GPIO0_001
+#defineSC_P_MIPI_CSI0_GPIO0_00_MIPI_CSI1_I2C0_SCLSC_P_MIPI_CSI0_GPIO0_002
+#defineSC_P_MIPI_CSI0_GPIO0_00_LSIO_GPIO1_IO27SC_P_MIPI_CSI0_GPIO0_003
+#defineSC_P_MIPI_CSI0_GPIO0_01_MIPI_CSI0_GPIO0_IO01SC_P_MIPI_CSI0_GPIO0_010
+#defineSC_P_MIPI_CSI0_GPIO0_01_DMA_I2C0_SDASC_P_MIPI_CSI0_GPIO0_011
+#defineSC_P_MIPI_CSI0_GPIO0_01_MIPI_CSI1_I2C0_SDASC_P_MIPI_CSI0_GPIO0_012
+#defineSC_P_MIPI_CSI0_GPIO0_01_LSIO_GPIO1_IO28SC_P_MIPI_CSI0_GPIO0_013
+#defineSC_P_MIPI_CSI1_MCLK_OUT_MIPI_CSI1_ACM_MCLK_OUTSC_P_MIPI_CSI1_MCLK_OUT0
+#defineSC_P_MIPI_CSI1_MCLK_OUT_LSIO_GPIO1_IO29SC_P_MIPI_CSI1_MCLK_OUT3
+#defineSC_P_MIPI_CSI1_GPIO0_00_MIPI_CSI1_GPIO0_IO00SC_P_MIPI_CSI1_GPIO0_000
+#defineSC_P_MIPI_CSI1_GPIO0_00_DMA_UART4_RXSC_P_MIPI_CSI1_GPIO0_001
+#defineSC_P_MIPI_CSI1_GPIO0_00_LSIO_GPIO1_IO30SC_P_MIPI_CSI1_GPIO0_003
+#defineSC_P_MIPI_CSI1_GPIO0_01_MIPI_CSI1_GPIO0_IO01SC_P_MIPI_CSI1_GPIO0_010
+#defineSC_P_MIPI_CSI1_GPIO0_01_DMA_UART4_TXSC_P_MIPI_CSI1_GPIO0_011
+#defineSC_P_MIPI_CSI1_GPIO0_01_LSIO_GPIO1_IO31SC_P_MIPI_CSI1_GPIO0_013
+#defineSC_P_MIPI_CSI1_I2C0_SCL_MIPI_CSI1_I2C0_SCLSC_P_MIPI_CSI1_I2C0_SCL0
+#defineSC_P_MIPI_CSI1_I2C0_SCL_LSIO_GPIO2_IO00SC_P_MIPI_CSI1_I2C0_SCL3
+#defineSC_P_MIPI_CSI1_I2C0_SDA_MIPI_CSI1_I2C0_SDASC_P_MIPI_CSI1_I2C0_SDA0
+#defineSC_P_MIPI_CSI1_I2C0_SDA_LSIO_GPIO2_IO01SC_P_MIPI_CSI1_I2C0_SDA3
+#defineSC_P_HDMI_TX0_TS_SCL_HDMI_TX0_I2C0_SCLSC_P_HDMI_TX0_TS_SCL0
+#defineSC_P_HDMI_TX0_TS_SCL_DMA_I2C0_SCLSC_P_HDMI_TX0_TS_SCL1
+#defineSC_P_HDMI_TX0_TS_SCL_LSIO_GPIO2_IO02SC_P_HDMI_TX0_TS_SCL3
+#defineSC_P_HDMI_TX0_TS_SDA_HDMI_TX0_I2C0_SDASC_P_HDMI_TX0_TS_SDA0
+#defineSC_P_HDMI_TX0_TS_SDA_DMA_I2C0_SDASC_P_HDMI_TX0_TS_SDA1
+#defineSC_P_HDMI_TX0_TS_SDA_LSIO_GPIO2_IO03SC_P_HDMI_TX0_TS_SDA3
+#defineSC_P_ESAI1_FSR_AUD_ESAI1_FSRSC_P_ESAI1_FSR0
+#defineSC_P_ESAI1_FSR_LSIO_GPIO2_IO04SC_P_ESAI1_FSR3
+#defineSC_P_ESAI1_FST_AUD_ESAI1_FSTSC_P_ESAI1_FST0
+#defineSC_P_ESAI1_FST_AUD_SPDIF0_EXT_CLKSC_P_ESAI1_FST1
+#defineSC_P_ESAI1_FST_LSIO_GPIO2_IO05SC_P_ESAI1_FST3
+#defineSC_P_ESAI1_SCKR_AUD_ESAI1_SCKRSC_P_ESAI1_SCKR0
+#defineSC_P_ESAI1_SCKR_LSIO_GPIO2_IO06SC_P_ESAI1_SCKR3
+#defineSC_P_ESAI1_SCKT_AUD_ESAI1_SCKTSC_P_ESAI1_SCKT0
+#defineSC_P_ESAI1_SCKT_AUD_SAI2_RXCSC_P_ESAI1_SCKT1
+#defineSC_P_ESAI1_SCKT_AUD_SPDIF0_EXT_CLKSC_P_ESAI1_SCKT2
+#defineSC_P_ESAI1_SCKT_LSIO_GPIO2_IO07SC_P_ESAI1_SCKT3
+#defineSC_P_ESAI1_TX0_AUD_ESAI1_TX0SC_P_ESAI1_TX00
+#defineSC_P_ESAI1_TX0_AUD_SAI2_RXDSC_P_ESAI1_TX01
+#defineSC_P_ESAI1_TX0_AUD_SPDIF0_RXSC_P_ESAI1_TX02
+#defineSC_P_ESAI1_TX0_LSIO_GPIO2_IO08SC_P_ESAI1_TX03
+#defineSC_P_ESAI1_TX1_AUD_ESAI1_TX1SC_P_ESAI1_TX10
+#defineSC_P_ESAI1_TX1_AUD_SAI2_RXFSSC_P_ESAI1_TX11
+#defineSC_P_ESAI1_TX1_AUD_SPDIF0_TXSC_P_ESAI1_TX12
+#defineSC_P_ESAI1_TX1_LSIO_GPIO2_IO09SC_P_ESAI1_TX13
+#defineSC_P_ESAI1_TX2_RX3_AUD_ESAI1_TX2_RX3SC_P_ESAI1_TX2_RX30
+#defineSC_P_ESAI1_TX2_RX3_AUD_SPDIF0_RXSC_P_ESAI1_TX2_RX31
+#defineSC_P_ESAI1_TX2_RX3_LSIO_GPIO2_IO10SC_P_ESAI1_TX2_RX33
+#defineSC_P_ESAI1_TX3_RX2_AUD_ESAI1_TX3_RX2SC_P_ESAI1_TX3_RX20
+#defineSC_P_ESAI1_TX3_RX2_AUD_SPDIF0_TXSC_P_ESAI1_TX3_RX21
+#defineSC_P_ESAI1_TX3_RX2_LSIO_GPIO2_IO11SC_P_ESAI1_TX3_RX23
+#defineSC_P_ESAI1_TX4_RX1_AUD_ESAI1_TX4_RX1SC_P_ESAI1_TX4_RX10
+#defineSC_P_ESAI1_TX4_RX1_LSIO_GPIO2_IO12SC_P_ESAI1_TX4_RX13
+#defineSC_P_ESAI1_TX5_RX0_AUD_ESAI1_TX5_RX0SC_P_ESAI1_TX5_RX00
+#defineSC_P_ESAI1_TX5_RX0_LSIO_GPIO2_IO13SC_P_ESAI1_TX5_RX03
+#defineSC_P_SPDIF0_RX_AUD_SPDIF0_RXSC_P_SPDIF0_RX0
+#defineSC_P_SPDIF0_RX_AUD_MQS_RSC_P_SPDIF0_RX1
+#defineSC_P_SPDIF0_RX_AUD_ACM_MCLK_IN1SC_P_SPDIF0_RX2
+#defineSC_P_SPDIF0_RX_LSIO_GPIO2_IO14SC_P_SPDIF0_RX3
+#defineSC_P_SPDIF0_TX_AUD_SPDIF0_TXSC_P_SPDIF0_TX0
+#defineSC_P_SPDIF0_TX_AUD_MQS_LSC_P_SPDIF0_TX1
+#defineSC_P_SPDIF0_TX_AUD_ACM_MCLK_OUT1SC_P_SPDIF0_TX2
+#defineSC_P_SPDIF0_TX_LSIO_GPIO2_IO15SC_P_SPDIF0_TX3
+#defineSC_P_SPDIF0_EXT_CLK_AUD_SPDIF0_EXT_CLKSC_P_SPDIF0_EXT_CLK0
+#defineSC_P_SPDIF0_EXT_CLK_DMA_DMA0_REQ_IN0SC_P_SPDIF0_EXT_CLK1
+#defineSC_P_SPDIF0_EXT_CLK_LSIO_GPIO2_IO16SC_P_SPDIF0_EXT_CLK3
+#defineSC_P_SPI3_SCK_DMA_SPI3_SCKSC_P_SPI3_SCK0
+#defineSC_P_SPI3_SCK_LSIO_GPIO2_IO17SC_P_SPI3_SCK3
+#defineSC_P_SPI3_SDO_DMA_SPI3_SDOSC_P_SPI3_SDO0
+#defineSC_P_SPI3_SDO_DMA_FTM_CH0SC_P_SPI3_SDO1
+#defineSC_P_SPI3_SDO_LSIO_GPIO2_IO18SC_P_SPI3_SDO3
+#defineSC_P_SPI3_SDI_DMA_SPI3_SDISC_P_SPI3_SDI0
+#defineSC_P_SPI3_SDI_DMA_FTM_CH1SC_P_SPI3_SDI1
+#defineSC_P_SPI3_SDI_LSIO_GPIO2_IO19SC_P_SPI3_SDI3
+#defineSC_P_SPI3_CS0_DMA_SPI3_CS0SC_P_SPI3_CS00
+#defineSC_P_SPI3_CS0_DMA_FTM_CH2SC_P_SPI3_CS01
+#defineSC_P_SPI3_CS0_LSIO_GPIO2_IO20SC_P_SPI3_CS03
+#defineSC_P_SPI3_CS1_DMA_SPI3_CS1SC_P_SPI3_CS10
+#defineSC_P_SPI3_CS1_LSIO_GPIO2_IO21SC_P_SPI3_CS13
+#defineSC_P_ESAI0_FSR_AUD_ESAI0_FSRSC_P_ESAI0_FSR0
+#defineSC_P_ESAI0_FSR_LSIO_GPIO2_IO22SC_P_ESAI0_FSR3
+#defineSC_P_ESAI0_FST_AUD_ESAI0_FSTSC_P_ESAI0_FST0
+#defineSC_P_ESAI0_FST_LSIO_GPIO2_IO23SC_P_ESAI0_FST3
+#defineSC_P_ESAI0_SCKR_AUD_ESAI0_SCKRSC_P_ESAI0_SCKR0
+#defineSC_P_ESAI0_SCKR_LSIO_GPIO2_IO24SC_P_ESAI0_SCKR3
+#defineSC_P_ESAI0_SCKT_AUD_ESAI0_SCKTSC_P_ESAI0_SCKT0
+#defineSC_P_ESAI0_SCKT_LSIO_GPIO2_IO25SC_P_ESAI0_SCKT3
+#defineSC_P_ESAI0_TX0_AUD_ESAI0_TX0SC_P_ESAI0_TX00
+#defineSC_P_ESAI0_TX0_LSIO_GPIO2_IO26SC_P_ESAI0_TX03
+#defineSC_P_ESAI0_TX1_AUD_ESAI0_TX1SC_P_ESAI0_TX10
+#defineSC_P_ESAI0_TX1_LSIO_GPIO2_IO27SC_P_ESAI0_TX13
+#defineSC_P_ESAI0_TX2_RX3_AUD_ESAI0_TX2_RX3SC_P_ESAI0_TX2_RX30
+#defineSC_P_ESAI0_TX2_RX3_LSIO_GPIO2_IO28SC_P_ESAI0_TX2_RX33
+#defineSC_P_ESAI0_TX3_RX2_AUD_ESAI0_TX3_RX2SC_P_ESAI0_TX3_RX20
+#defineSC_P_ESAI0_TX3_RX2_LSIO_GPIO2_IO29SC_P_ESAI0_TX3_RX23
+#defineSC_P_ESAI0_TX4_RX1_AUD_ESAI0_TX4_RX1SC_P_ESAI0_TX4_RX10
+#defineSC_P_ESAI0_TX4_RX1_LSIO_GPIO2_IO30SC_P_ESAI0_TX4_RX13
+#defineSC_P_ESAI0_TX5_RX0_AUD_ESAI0_TX5_RX0SC_P_ESAI0_TX5_RX00
+#defineSC_P_ESAI0_TX5_RX0_LSIO_GPIO2_IO31SC_P_ESAI0_TX5_RX03
+#defineSC_P_MCLK_IN0_AUD_ACM_MCLK_IN0SC_P_MCLK_IN00
+#defineSC_P_MCLK_IN0_AUD_ESAI0_RX_HF_CLKSC_P_MCLK_IN01
+#defineSC_P_MCLK_IN0_AUD_ESAI1_RX_HF_CLKSC_P_MCLK_IN02
+#defineSC_P_MCLK_IN0_LSIO_GPIO3_IO00SC_P_MCLK_IN03
+#defineSC_P_MCLK_OUT0_AUD_ACM_MCLK_OUT0SC_P_MCLK_OUT00
+#defineSC_P_MCLK_OUT0_AUD_ESAI0_TX_HF_CLKSC_P_MCLK_OUT01
+#defineSC_P_MCLK_OUT0_AUD_ESAI1_TX_HF_CLKSC_P_MCLK_OUT02
+#defineSC_P_MCLK_OUT0_LSIO_GPIO3_IO01SC_P_MCLK_OUT03
+#defineSC_P_SPI0_SCK_DMA_SPI0_SCKSC_P_SPI0_SCK0
+#defineSC_P_SPI0_SCK_AUD_SAI0_RXCSC_P_SPI0_SCK1
+#defineSC_P_SPI0_SCK_LSIO_GPIO3_IO02SC_P_SPI0_SCK3
+#defineSC_P_SPI0_SDO_DMA_SPI0_SDOSC_P_SPI0_SDO0
+#defineSC_P_SPI0_SDO_AUD_SAI0_TXDSC_P_SPI0_SDO1
+#defineSC_P_SPI0_SDO_LSIO_GPIO3_IO03SC_P_SPI0_SDO3
+#defineSC_P_SPI0_SDI_DMA_SPI0_SDISC_P_SPI0_SDI0
+#defineSC_P_SPI0_SDI_AUD_SAI0_RXDSC_P_SPI0_SDI1
+#defineSC_P_SPI0_SDI_LSIO_GPIO3_IO04SC_P_SPI0_SDI3
+#defineSC_P_SPI0_CS0_DMA_SPI0_CS0SC_P_SPI0_CS00
+#defineSC_P_SPI0_CS0_AUD_SAI0_RXFSSC_P_SPI0_CS01
+#defineSC_P_SPI0_CS0_LSIO_GPIO3_IO05SC_P_SPI0_CS03
+#defineSC_P_SPI0_CS1_DMA_SPI0_CS1SC_P_SPI0_CS10
+#defineSC_P_SPI0_CS1_AUD_SAI0_TXCSC_P_SPI0_CS11
+#defineSC_P_SPI0_CS1_LSIO_GPIO3_IO06SC_P_SPI0_CS13
+#defineSC_P_SPI2_SCK_DMA_SPI2_SCKSC_P_SPI2_SCK0
+#defineSC_P_SPI2_SCK_LSIO_GPIO3_IO07SC_P_SPI2_SCK3
+#defineSC_P_SPI2_SDO_DMA_SPI2_SDOSC_P_SPI2_SDO0
+#defineSC_P_SPI2_SDO_LSIO_GPIO3_IO08SC_P_SPI2_SDO3
+#defineSC_P_SPI2_SDI_DMA_SPI2_SDISC_P_SPI2_SDI0
+#defineSC_P_SPI2_SDI_LSIO_GPIO3_IO09SC_P_SPI2_SDI3
+#defineSC_P_SPI2_CS0_DMA_SPI2_CS0SC_P_SPI2_CS00
+#defineSC_P_SPI2_CS0_LSIO_GPIO3_IO10SC_P_SPI2_CS03
+#defineSC_P_SPI2_CS1_DMA_SPI2_CS1SC_P_SPI2_CS10
+#defineSC_P_SPI2_CS1_AUD_SAI0_TXFSSC_P_SPI2_CS11
+#defineSC_P_SPI2_CS1_LSIO_GPIO3_IO11SC_P_SPI2_CS13
+#defineSC_P_SAI1_RXC_AUD_SAI1_RXCSC_P_SAI1_RXC0
+#defineSC_P_SAI1_RXC_AUD_SAI0_TXDSC_P_SAI1_RXC1
+#defineSC_P_SAI1_RXC_LSIO_GPIO3_IO12SC_P_SAI1_RXC3
+#defineSC_P_SAI1_RXD_AUD_SAI1_RXDSC_P_SAI1_RXD0
+#defineSC_P_SAI1_RXD_AUD_SAI0_TXFSSC_P_SAI1_RXD1
+#defineSC_P_SAI1_RXD_LSIO_GPIO3_IO13SC_P_SAI1_RXD3
+#defineSC_P_SAI1_RXFS_AUD_SAI1_RXFSSC_P_SAI1_RXFS0
+#defineSC_P_SAI1_RXFS_AUD_SAI0_RXDSC_P_SAI1_RXFS1
+#defineSC_P_SAI1_RXFS_LSIO_GPIO3_IO14SC_P_SAI1_RXFS3
+#defineSC_P_SAI1_TXC_AUD_SAI1_TXCSC_P_SAI1_TXC0
+#defineSC_P_SAI1_TXC_AUD_SAI0_TXCSC_P_SAI1_TXC1
+#defineSC_P_SAI1_TXC_LSIO_GPIO3_IO15SC_P_SAI1_TXC3
+#defineSC_P_SAI1_TXD_AUD_SAI1_TXDSC_P_SAI1_TXD0
+#defineSC_P_SAI1_TXD_AUD_SAI1_RXCSC_P_SAI1_TXD1
+#defineSC_P_SAI1_TXD_LSIO_GPIO3_IO16SC_P_SAI1_TXD3
+#defineSC_P_SAI1_TXFS_AUD_SAI1_TXFSSC_P_SAI1_TXFS0
+#defineSC_P_SAI1_TXFS_AUD_SAI1_RXFSSC_P_SAI1_TXFS1
+#defineSC_P_SAI1_TXFS_LSIO_GPIO3_IO17SC_P_SAI1_TXFS3
+#defineSC_P_ADC_IN7_DMA_ADC1_IN3SC_P_ADC_IN70
+#defineSC_P_ADC_IN7_DMA_SPI1_CS1SC_P_ADC_IN71
+#defineSC_P_ADC_IN7_LSIO_KPP0_ROW3SC_P_ADC_IN72
+#defineSC_P_ADC_IN7_LSIO_GPIO3_IO25SC_P_ADC_IN73
+#defineSC_P_ADC_IN6_DMA_ADC1_IN2SC_P_ADC_IN60
+#defineSC_P_ADC_IN6_DMA_SPI1_CS0SC_P_ADC_IN61
+#defineSC_P_ADC_IN6_LSIO_KPP0_ROW2SC_P_ADC_IN62
+#defineSC_P_ADC_IN6_LSIO_GPIO3_IO24SC_P_ADC_IN63
+#defineSC_P_ADC_IN5_DMA_ADC1_IN1SC_P_ADC_IN50
+#defineSC_P_ADC_IN5_DMA_SPI1_SDISC_P_ADC_IN51
+#defineSC_P_ADC_IN5_LSIO_KPP0_ROW1SC_P_ADC_IN52
+#defineSC_P_ADC_IN5_LSIO_GPIO3_IO23SC_P_ADC_IN53
+#defineSC_P_ADC_IN4_DMA_ADC1_IN0SC_P_ADC_IN40
+#defineSC_P_ADC_IN4_DMA_SPI1_SDOSC_P_ADC_IN41
+#defineSC_P_ADC_IN4_LSIO_KPP0_ROW0SC_P_ADC_IN42
+#defineSC_P_ADC_IN4_LSIO_GPIO3_IO22SC_P_ADC_IN43
+#defineSC_P_ADC_IN3_DMA_ADC0_IN3SC_P_ADC_IN30
+#defineSC_P_ADC_IN3_DMA_SPI1_SCKSC_P_ADC_IN31
+#defineSC_P_ADC_IN3_LSIO_KPP0_COL3SC_P_ADC_IN32
+#defineSC_P_ADC_IN3_LSIO_GPIO3_IO21SC_P_ADC_IN33
+#defineSC_P_ADC_IN2_DMA_ADC0_IN2SC_P_ADC_IN20
+#defineSC_P_ADC_IN2_LSIO_KPP0_COL2SC_P_ADC_IN22
+#defineSC_P_ADC_IN2_LSIO_GPIO3_IO20SC_P_ADC_IN23
+#defineSC_P_ADC_IN1_DMA_ADC0_IN1SC_P_ADC_IN10
+#defineSC_P_ADC_IN1_LSIO_KPP0_COL1SC_P_ADC_IN12
+#defineSC_P_ADC_IN1_LSIO_GPIO3_IO19SC_P_ADC_IN13
+#defineSC_P_ADC_IN0_DMA_ADC0_IN0SC_P_ADC_IN00
+#defineSC_P_ADC_IN0_LSIO_KPP0_COL0SC_P_ADC_IN02
+#defineSC_P_ADC_IN0_LSIO_GPIO3_IO18SC_P_ADC_IN03
+#defineSC_P_MLB_SIG_CONN_MLB_SIGSC_P_MLB_SIG0
+#defineSC_P_MLB_SIG_AUD_SAI3_RXCSC_P_MLB_SIG1
+#defineSC_P_MLB_SIG_LSIO_GPIO3_IO26SC_P_MLB_SIG3
+#defineSC_P_MLB_CLK_CONN_MLB_CLKSC_P_MLB_CLK0
+#defineSC_P_MLB_CLK_AUD_SAI3_RXFSSC_P_MLB_CLK1
+#defineSC_P_MLB_CLK_LSIO_GPIO3_IO27SC_P_MLB_CLK3
+#defineSC_P_MLB_DATA_CONN_MLB_DATASC_P_MLB_DATA0
+#defineSC_P_MLB_DATA_AUD_SAI3_RXDSC_P_MLB_DATA1
+#defineSC_P_MLB_DATA_LSIO_GPIO3_IO28SC_P_MLB_DATA3
+#defineSC_P_FLEXCAN0_RX_DMA_FLEXCAN0_RXSC_P_FLEXCAN0_RX0
+#defineSC_P_FLEXCAN0_RX_LSIO_GPIO3_IO29SC_P_FLEXCAN0_RX3
+#defineSC_P_FLEXCAN0_TX_DMA_FLEXCAN0_TXSC_P_FLEXCAN0_TX0
+#defineSC_P_FLEXCAN0_TX_LSIO_GPIO3_IO30SC_P_FLEXCAN0_TX3
+#defineSC_P_FLEXCAN1_RX_DMA_FLEXCAN1_RXSC_P_FLEXCAN1_RX0
+#defineSC_P_FLEXCAN1_RX_LSIO_GPIO3_IO31SC_P_FLEXCAN1_RX3
+#defineSC_P_FLEXCAN1_TX_DMA_FLEXCAN1_TXSC_P_FLEXCAN1_TX0
+#defineSC_P_FLEXCAN1_TX_LSIO_GPIO4_IO00SC_P_FLEXCAN1_TX3
+#defineSC_P_FLEXCAN2_RX_DMA_FLEXCAN2_RXSC_P_FLEXCAN2_RX0
+#defineSC_P_FLEXCAN2_RX_LSIO_GPIO4_IO01SC_P_FLEXCAN2_RX3
+#defineSC_P_FLEXCAN2_TX_DMA_FLEXCAN2_TXSC_P_FLEXCAN2_TX0
+#defineSC_P_FLEXCAN2_TX_LSIO_GPIO4_IO02SC_P_FLEXCAN2_TX3
+#defineSC_P_USB_SS3_TC0_DMA_I2C1_SCLSC_P_USB_SS3_TC00
+#defineSC_P_USB_SS3_TC0_CONN_USB_OTG1_PWRSC_P_USB_SS3_TC01
+#defineSC_P_USB_SS3_TC0_LSIO_GPIO4_IO03SC_P_USB_SS3_TC03
+#defineSC_P_USB_SS3_TC1_DMA_I2C1_SCLSC_P_USB_SS3_TC10
+#defineSC_P_USB_SS3_TC1_CONN_USB_OTG2_PWRSC_P_USB_SS3_TC11
+#defineSC_P_USB_SS3_TC1_LSIO_GPIO4_IO04SC_P_USB_SS3_TC13
+#defineSC_P_USB_SS3_TC2_DMA_I2C1_SDASC_P_USB_SS3_TC20
+#defineSC_P_USB_SS3_TC2_CONN_USB_OTG1_OCSC_P_USB_SS3_TC21
+#defineSC_P_USB_SS3_TC2_LSIO_GPIO4_IO05SC_P_USB_SS3_TC23
+#defineSC_P_USB_SS3_TC3_DMA_I2C1_SDASC_P_USB_SS3_TC30
+#defineSC_P_USB_SS3_TC3_CONN_USB_OTG2_OCSC_P_USB_SS3_TC31
+#defineSC_P_USB_SS3_TC3_LSIO_GPIO4_IO06SC_P_USB_SS3_TC33
+#defineSC_P_USDHC1_RESET_B_CONN_USDHC1_RESET_BSC_P_USDHC1_RESET_B0
+#defineSC_P_USDHC1_RESET_B_LSIO_GPIO4_IO07SC_P_USDHC1_RESET_B3
+#defineSC_P_USDHC1_VSELECT_CONN_USDHC1_VSELECTSC_P_USDHC1_VSELECT0
+#defineSC_P_USDHC1_VSELECT_LSIO_GPIO4_IO08SC_P_USDHC1_VSELECT3
+#defineSC_P_USDHC2_RESET_B_CONN_USDHC2_RESET_BSC_P_USDHC2_RESET_B0
+#defineSC_P_USDHC2_RESET_B_LSIO_GPIO4_IO09SC_P_USDHC2_RESET_B3
+#defineSC_P_USDHC2_VSELECT_CONN_USDHC2_VSELECTSC_P_USDHC2_VSELECT0
+#defineSC_P_USDHC2_VSELECT_LSIO_GPIO4_IO10SC_P_USDHC2_VSELECT3
+#defineSC_P_USDHC2_WP_CONN_USDHC2_WPSC_P_USDHC2_WP0
+#defineSC_P_USDHC2_WP_LSIO_GPIO4_IO11SC_P_USDHC2_WP3
+#defineSC_P_USDHC2_CD_B_CONN_USDHC2_CD_BSC_P_USDHC2_CD_B0
+#defineSC_P_USDHC2_CD_B_LSIO_GPIO4_IO12SC_P_USDHC2_CD_B3
+#defineSC_P_ENET0_MDIO_CONN_ENET0_MDIOSC_P_ENET0_MDIO0
+#defineSC_P_ENET0_MDIO_DMA_I2C4_SDASC_P_ENET0_MDIO1
+#defineSC_P_ENET0_MDIO_LSIO_GPIO4_IO13SC_P_ENET0_MDIO3
+#defineSC_P_ENET0_MDC_CONN_ENET0_MDCSC_P_ENET0_MDC0
+#defineSC_P_ENET0_MDC_DMA_I2C4_SCLSC_P_ENET0_MDC1
+#defineSC_P_ENET0_MDC_LSIO_GPIO4_IO14SC_P_ENET0_MDC3
+#defineSC_P_ENET0_REFCLK_125M_25M_CONN_ENET0_REFCLK_125M_25MSC_P_ENET0_REFCLK_125M_25M0
+#defineSC_P_ENET0_REFCLK_125M_25M_CONN_ENET0_PPSSC_P_ENET0_REFCLK_125M_25M1
+#defineSC_P_ENET0_REFCLK_125M_25M_LSIO_GPIO4_IO15SC_P_ENET0_REFCLK_125M_25M3
+#defineSC_P_ENET1_REFCLK_125M_25M_CONN_ENET1_REFCLK_125M_25MSC_P_ENET1_REFCLK_125M_25M0
+#defineSC_P_ENET1_REFCLK_125M_25M_CONN_ENET1_PPSSC_P_ENET1_REFCLK_125M_25M1
+#defineSC_P_ENET1_REFCLK_125M_25M_LSIO_GPIO4_IO16SC_P_ENET1_REFCLK_125M_25M3
+#defineSC_P_ENET1_MDIO_CONN_ENET1_MDIOSC_P_ENET1_MDIO0
+#defineSC_P_ENET1_MDIO_DMA_I2C4_SDASC_P_ENET1_MDIO1
+#defineSC_P_ENET1_MDIO_LSIO_GPIO4_IO17SC_P_ENET1_MDIO3
+#defineSC_P_ENET1_MDC_CONN_ENET1_MDCSC_P_ENET1_MDC0
+#defineSC_P_ENET1_MDC_DMA_I2C4_SCLSC_P_ENET1_MDC1
+#defineSC_P_ENET1_MDC_LSIO_GPIO4_IO18SC_P_ENET1_MDC3
+#defineSC_P_QSPI1A_SS0_B_LSIO_QSPI1A_SS0_BSC_P_QSPI1A_SS0_B0
+#defineSC_P_QSPI1A_SS0_B_LSIO_GPIO4_IO19SC_P_QSPI1A_SS0_B3
+#defineSC_P_QSPI1A_SS1_B_LSIO_QSPI1A_SS1_BSC_P_QSPI1A_SS1_B0
+#defineSC_P_QSPI1A_SS1_B_LSIO_QSPI1A_SCLK2SC_P_QSPI1A_SS1_B1
+#defineSC_P_QSPI1A_SS1_B_LSIO_GPIO4_IO20SC_P_QSPI1A_SS1_B3
+#defineSC_P_QSPI1A_SCLK_LSIO_QSPI1A_SCLKSC_P_QSPI1A_SCLK0
+#defineSC_P_QSPI1A_SCLK_LSIO_GPIO4_IO21SC_P_QSPI1A_SCLK3
+#defineSC_P_QSPI1A_DQS_LSIO_QSPI1A_DQSSC_P_QSPI1A_DQS0
+#defineSC_P_QSPI1A_DQS_LSIO_GPIO4_IO22SC_P_QSPI1A_DQS3
+#defineSC_P_QSPI1A_DATA3_LSIO_QSPI1A_DATA3SC_P_QSPI1A_DATA30
+#defineSC_P_QSPI1A_DATA3_DMA_I2C1_SDASC_P_QSPI1A_DATA31
+#defineSC_P_QSPI1A_DATA3_CONN_USB_OTG1_OCSC_P_QSPI1A_DATA32
+#defineSC_P_QSPI1A_DATA3_LSIO_GPIO4_IO23SC_P_QSPI1A_DATA33
+#defineSC_P_QSPI1A_DATA2_LSIO_QSPI1A_DATA2SC_P_QSPI1A_DATA20
+#defineSC_P_QSPI1A_DATA2_DMA_I2C1_SCLSC_P_QSPI1A_DATA21
+#defineSC_P_QSPI1A_DATA2_CONN_USB_OTG2_PWRSC_P_QSPI1A_DATA22
+#defineSC_P_QSPI1A_DATA2_LSIO_GPIO4_IO24SC_P_QSPI1A_DATA23
+#defineSC_P_QSPI1A_DATA1_LSIO_QSPI1A_DATA1SC_P_QSPI1A_DATA10
+#defineSC_P_QSPI1A_DATA1_DMA_I2C1_SDASC_P_QSPI1A_DATA11
+#defineSC_P_QSPI1A_DATA1_CONN_USB_OTG2_OCSC_P_QSPI1A_DATA12
+#defineSC_P_QSPI1A_DATA1_LSIO_GPIO4_IO25SC_P_QSPI1A_DATA13
+#defineSC_P_QSPI1A_DATA0_LSIO_QSPI1A_DATA0SC_P_QSPI1A_DATA00
+#defineSC_P_QSPI1A_DATA0_LSIO_GPIO4_IO26SC_P_QSPI1A_DATA03
+#defineSC_P_QSPI0A_DATA0_LSIO_QSPI0A_DATA0SC_P_QSPI0A_DATA00
+#defineSC_P_QSPI0A_DATA1_LSIO_QSPI0A_DATA1SC_P_QSPI0A_DATA10
+#defineSC_P_QSPI0A_DATA2_LSIO_QSPI0A_DATA2SC_P_QSPI0A_DATA20
+#defineSC_P_QSPI0A_DATA3_LSIO_QSPI0A_DATA3SC_P_QSPI0A_DATA30
+#defineSC_P_QSPI0A_DQS_LSIO_QSPI0A_DQSSC_P_QSPI0A_DQS0
+#defineSC_P_QSPI0A_SS0_B_LSIO_QSPI0A_SS0_BSC_P_QSPI0A_SS0_B0
+#defineSC_P_QSPI0A_SS1_B_LSIO_QSPI0A_SS1_BSC_P_QSPI0A_SS1_B0
+#defineSC_P_QSPI0A_SS1_B_LSIO_QSPI0A_SCLK2SC_P_QSPI0A_SS1_B1
+#defineSC_P_QSPI0A_SCLK_LSIO_QSPI0A_SCLKSC_P_QSPI0A_SCLK0
+#defineSC_P_QSPI0B_SCLK_LSIO_QSPI0B_SCLKSC_P_QSPI0B_SCLK0
+#defineSC_P_QSPI0B_DATA0_LSIO_QSPI0B_DATA0SC_P_QSPI0B_DATA00
+#defineSC_P_QSPI0B_DATA1_LSIO_QSPI0B_DATA1SC_P_QSPI0B_DATA10
+#defineSC_P_QSPI0B_DATA2_LSIO_QSPI0B_DATA2SC_P_QSPI0B_DATA20
+#defineSC_P_QSPI0B_DATA3_LSIO_QSPI0B_DATA3SC_P_QSPI0B_DATA30
+#defineSC_P_QSPI0B_DQS_LSIO_QSPI0B_DQSSC_P_QSPI0B_DQS0
+#defineSC_P_QSPI0B_SS0_B_LSIO_QSPI0B_SS0_BSC_P_QSPI0B_SS0_B0
+#defineSC_P_QSPI0B_SS1_B_LSIO_QSPI0B_SS1_BSC_P_QSPI0B_SS1_B0
+#defineSC_P_QSPI0B_SS1_B_LSIO_QSPI0B_SCLK2SC_P_QSPI0B_SS1_B1
+#defineSC_P_PCIE_CTRL0_CLKREQ_B_HSIO_PCIE0_CLKREQ_BSC_P_PCIE_CTRL0_CLKREQ_B0
+#defineSC_P_PCIE_CTRL0_CLKREQ_B_LSIO_GPIO4_IO27SC_P_PCIE_CTRL0_CLKREQ_B3
+#defineSC_P_PCIE_CTRL0_WAKE_B_HSIO_PCIE0_WAKE_BSC_P_PCIE_CTRL0_WAKE_B0
+#defineSC_P_PCIE_CTRL0_WAKE_B_LSIO_GPIO4_IO28SC_P_PCIE_CTRL0_WAKE_B3
+#defineSC_P_PCIE_CTRL0_PERST_B_HSIO_PCIE0_PERST_BSC_P_PCIE_CTRL0_PERST_B0
+#defineSC_P_PCIE_CTRL0_PERST_B_LSIO_GPIO4_IO29SC_P_PCIE_CTRL0_PERST_B3
+#defineSC_P_PCIE_CTRL1_CLKREQ_B_HSIO_PCIE1_CLKREQ_BSC_P_PCIE_CTRL1_CLKREQ_B0
+#defineSC_P_PCIE_CTRL1_CLKREQ_B_DMA_I2C1_SDASC_P_PCIE_CTRL1_CLKREQ_B1
+#defineSC_P_PCIE_CTRL1_CLKREQ_B_CONN_USB_OTG2_OCSC_P_PCIE_CTRL1_CLKREQ_B2
+#defineSC_P_PCIE_CTRL1_CLKREQ_B_LSIO_GPIO4_IO30SC_P_PCIE_CTRL1_CLKREQ_B3
+#defineSC_P_PCIE_CTRL1_WAKE_B_HSIO_PCIE1_WAKE_BSC_P_PCIE_CTRL1_WAKE_B0
+#defineSC_P_PCIE_CTRL1_WAKE_B_DMA_I2C1_SCLSC_P_PCIE_CTRL1_WAKE_B1
+#defineSC_P_PCIE_CTRL1_WAKE_B_CONN_USB_OTG2_PWRSC_P_PCIE_CTRL1_WAKE_B2
+#defineSC_P_PCIE_CTRL1_WAKE_B_LSIO_GPIO4_IO31SC_P_PCIE_CTRL1_WAKE_B3
+#defineSC_P_PCIE_CTRL1_PERST_B_HSIO_PCIE1_PERST_BSC_P_PCIE_CTRL1_PERST_B0
+#defineSC_P_PCIE_CTRL1_PERST_B_DMA_I2C1_SCLSC_P_PCIE_CTRL1_PERST_B1
+#defineSC_P_PCIE_CTRL1_PERST_B_CONN_USB_OTG1_PWRSC_P_PCIE_CTRL1_PERST_B2
+#defineSC_P_PCIE_CTRL1_PERST_B_LSIO_GPIO5_IO00SC_P_PCIE_CTRL1_PERST_B3
+#defineSC_P_USB_HSIC0_DATA_CONN_USB_HSIC0_DATASC_P_USB_HSIC0_DATA0
+#defineSC_P_USB_HSIC0_DATA_DMA_I2C1_SDASC_P_USB_HSIC0_DATA1
+#defineSC_P_USB_HSIC0_DATA_LSIO_GPIO5_IO01SC_P_USB_HSIC0_DATA3
+#defineSC_P_USB_HSIC0_STROBE_CONN_USB_HSIC0_STROBESC_P_USB_HSIC0_STROBE0
+#defineSC_P_USB_HSIC0_STROBE_DMA_I2C1_SCLSC_P_USB_HSIC0_STROBE1
+#defineSC_P_USB_HSIC0_STROBE_LSIO_GPIO5_IO02SC_P_USB_HSIC0_STROBE3
+#defineSC_P_EMMC0_CLK_CONN_EMMC0_CLKSC_P_EMMC0_CLK0
+#defineSC_P_EMMC0_CLK_CONN_NAND_READY_BSC_P_EMMC0_CLK1
+#defineSC_P_EMMC0_CMD_CONN_EMMC0_CMDSC_P_EMMC0_CMD0
+#defineSC_P_EMMC0_CMD_CONN_NAND_DQSSC_P_EMMC0_CMD1
+#defineSC_P_EMMC0_CMD_AUD_MQS_RSC_P_EMMC0_CMD2
+#defineSC_P_EMMC0_CMD_LSIO_GPIO5_IO03SC_P_EMMC0_CMD3
+#defineSC_P_EMMC0_DATA0_CONN_EMMC0_DATA0SC_P_EMMC0_DATA00
+#defineSC_P_EMMC0_DATA0_CONN_NAND_DATA00SC_P_EMMC0_DATA01
+#defineSC_P_EMMC0_DATA0_LSIO_GPIO5_IO04SC_P_EMMC0_DATA03
+#defineSC_P_EMMC0_DATA1_CONN_EMMC0_DATA1SC_P_EMMC0_DATA10
+#defineSC_P_EMMC0_DATA1_CONN_NAND_DATA01SC_P_EMMC0_DATA11
+#defineSC_P_EMMC0_DATA1_LSIO_GPIO5_IO05SC_P_EMMC0_DATA13
+#defineSC_P_EMMC0_DATA2_CONN_EMMC0_DATA2SC_P_EMMC0_DATA20
+#defineSC_P_EMMC0_DATA2_CONN_NAND_DATA02SC_P_EMMC0_DATA21
+#defineSC_P_EMMC0_DATA2_LSIO_GPIO5_IO06SC_P_EMMC0_DATA23
+#defineSC_P_EMMC0_DATA3_CONN_EMMC0_DATA3SC_P_EMMC0_DATA30
+#defineSC_P_EMMC0_DATA3_CONN_NAND_DATA03SC_P_EMMC0_DATA31
+#defineSC_P_EMMC0_DATA3_LSIO_GPIO5_IO07SC_P_EMMC0_DATA33
+#defineSC_P_EMMC0_DATA4_CONN_EMMC0_DATA4SC_P_EMMC0_DATA40
+#defineSC_P_EMMC0_DATA4_CONN_NAND_DATA04SC_P_EMMC0_DATA41
+#defineSC_P_EMMC0_DATA4_LSIO_GPIO5_IO08SC_P_EMMC0_DATA43
+#defineSC_P_EMMC0_DATA5_CONN_EMMC0_DATA5SC_P_EMMC0_DATA50
+#defineSC_P_EMMC0_DATA5_CONN_NAND_DATA05SC_P_EMMC0_DATA51
+#defineSC_P_EMMC0_DATA5_LSIO_GPIO5_IO09SC_P_EMMC0_DATA53
+#defineSC_P_EMMC0_DATA6_CONN_EMMC0_DATA6SC_P_EMMC0_DATA60
+#defineSC_P_EMMC0_DATA6_CONN_NAND_DATA06SC_P_EMMC0_DATA61
+#defineSC_P_EMMC0_DATA6_LSIO_GPIO5_IO10SC_P_EMMC0_DATA63
+#defineSC_P_EMMC0_DATA7_CONN_EMMC0_DATA7SC_P_EMMC0_DATA70
+#defineSC_P_EMMC0_DATA7_CONN_NAND_DATA07SC_P_EMMC0_DATA71
+#defineSC_P_EMMC0_DATA7_LSIO_GPIO5_IO11SC_P_EMMC0_DATA73
+#defineSC_P_EMMC0_STROBE_CONN_EMMC0_STROBESC_P_EMMC0_STROBE0
+#defineSC_P_EMMC0_STROBE_CONN_NAND_CLESC_P_EMMC0_STROBE1
+#defineSC_P_EMMC0_STROBE_LSIO_GPIO5_IO12SC_P_EMMC0_STROBE3
+#defineSC_P_EMMC0_RESET_B_CONN_EMMC0_RESET_BSC_P_EMMC0_RESET_B0
+#defineSC_P_EMMC0_RESET_B_CONN_NAND_WP_BSC_P_EMMC0_RESET_B1
+#defineSC_P_EMMC0_RESET_B_CONN_USDHC1_VSELECTSC_P_EMMC0_RESET_B2
+#defineSC_P_EMMC0_RESET_B_LSIO_GPIO5_IO13SC_P_EMMC0_RESET_B3
+#defineSC_P_USDHC1_CLK_CONN_USDHC1_CLKSC_P_USDHC1_CLK0
+#defineSC_P_USDHC1_CLK_AUD_MQS_RSC_P_USDHC1_CLK1
+#defineSC_P_USDHC1_CMD_CONN_USDHC1_CMDSC_P_USDHC1_CMD0
+#defineSC_P_USDHC1_CMD_AUD_MQS_LSC_P_USDHC1_CMD1
+#defineSC_P_USDHC1_CMD_LSIO_GPIO5_IO14SC_P_USDHC1_CMD3
+#defineSC_P_USDHC1_DATA0_CONN_USDHC1_DATA0SC_P_USDHC1_DATA00
+#defineSC_P_USDHC1_DATA0_CONN_NAND_RE_NSC_P_USDHC1_DATA01
+#defineSC_P_USDHC1_DATA0_LSIO_GPIO5_IO15SC_P_USDHC1_DATA03
+#defineSC_P_USDHC1_DATA1_CONN_USDHC1_DATA1SC_P_USDHC1_DATA10
+#defineSC_P_USDHC1_DATA1_CONN_NAND_RE_PSC_P_USDHC1_DATA11
+#defineSC_P_USDHC1_DATA1_LSIO_GPIO5_IO16SC_P_USDHC1_DATA13
+#defineSC_P_USDHC1_DATA2_CONN_USDHC1_DATA2SC_P_USDHC1_DATA20
+#defineSC_P_USDHC1_DATA2_CONN_NAND_DQS_NSC_P_USDHC1_DATA21
+#defineSC_P_USDHC1_DATA2_LSIO_GPIO5_IO17SC_P_USDHC1_DATA23
+#defineSC_P_USDHC1_DATA3_CONN_USDHC1_DATA3SC_P_USDHC1_DATA30
+#defineSC_P_USDHC1_DATA3_CONN_NAND_DQS_PSC_P_USDHC1_DATA31
+#defineSC_P_USDHC1_DATA3_LSIO_GPIO5_IO18SC_P_USDHC1_DATA33
+#defineSC_P_USDHC1_DATA4_CONN_USDHC1_DATA4SC_P_USDHC1_DATA40
+#defineSC_P_USDHC1_DATA4_CONN_NAND_CE0_BSC_P_USDHC1_DATA41
+#defineSC_P_USDHC1_DATA4_AUD_MQS_RSC_P_USDHC1_DATA42
+#defineSC_P_USDHC1_DATA4_LSIO_GPIO5_IO19SC_P_USDHC1_DATA43
+#defineSC_P_USDHC1_DATA5_CONN_USDHC1_DATA5SC_P_USDHC1_DATA50
+#defineSC_P_USDHC1_DATA5_CONN_NAND_RE_BSC_P_USDHC1_DATA51
+#defineSC_P_USDHC1_DATA5_AUD_MQS_LSC_P_USDHC1_DATA52
+#defineSC_P_USDHC1_DATA5_LSIO_GPIO5_IO20SC_P_USDHC1_DATA53
+#defineSC_P_USDHC1_DATA6_CONN_USDHC1_DATA6SC_P_USDHC1_DATA60
+#defineSC_P_USDHC1_DATA6_CONN_NAND_WE_BSC_P_USDHC1_DATA61
+#defineSC_P_USDHC1_DATA6_CONN_USDHC1_WPSC_P_USDHC1_DATA62
+#defineSC_P_USDHC1_DATA6_LSIO_GPIO5_IO21SC_P_USDHC1_DATA63
+#defineSC_P_USDHC1_DATA7_CONN_USDHC1_DATA7SC_P_USDHC1_DATA70
+#defineSC_P_USDHC1_DATA7_CONN_NAND_ALESC_P_USDHC1_DATA71
+#defineSC_P_USDHC1_DATA7_CONN_USDHC1_CD_BSC_P_USDHC1_DATA72
+#defineSC_P_USDHC1_DATA7_LSIO_GPIO5_IO22SC_P_USDHC1_DATA73
+#defineSC_P_USDHC1_STROBE_CONN_USDHC1_STROBESC_P_USDHC1_STROBE0
+#defineSC_P_USDHC1_STROBE_CONN_NAND_CE1_BSC_P_USDHC1_STROBE1
+#defineSC_P_USDHC1_STROBE_CONN_USDHC1_RESET_BSC_P_USDHC1_STROBE2
+#defineSC_P_USDHC1_STROBE_LSIO_GPIO5_IO23SC_P_USDHC1_STROBE3
+#defineSC_P_USDHC2_CLK_CONN_USDHC2_CLKSC_P_USDHC2_CLK0
+#defineSC_P_USDHC2_CLK_AUD_MQS_RSC_P_USDHC2_CLK1
+#defineSC_P_USDHC2_CLK_LSIO_GPIO5_IO24SC_P_USDHC2_CLK3
+#defineSC_P_USDHC2_CMD_CONN_USDHC2_CMDSC_P_USDHC2_CMD0
+#defineSC_P_USDHC2_CMD_AUD_MQS_LSC_P_USDHC2_CMD1
+#defineSC_P_USDHC2_CMD_LSIO_GPIO5_IO25SC_P_USDHC2_CMD3
+#defineSC_P_USDHC2_DATA0_CONN_USDHC2_DATA0SC_P_USDHC2_DATA00
+#defineSC_P_USDHC2_DATA0_DMA_UART4_RXSC_P_USDHC2_DATA01
+#defineSC_P_USDHC2_DATA0_LSIO_GPIO5_IO26SC_P_USDHC2_DATA03
+#defineSC_P_USDHC2_DATA1_CONN_USDHC2_DATA1SC_P_USDHC2_DATA10
+#defineSC_P_USDHC2_DATA1_DMA_UART4_TXSC_P_USDHC2_DATA11
+#defineSC_P_USDHC2_DATA1_LSIO_GPIO5_IO27SC_P_USDHC2_DATA13
+#defineSC_P_USDHC2_DATA2_CONN_USDHC2_DATA2SC_P_USDHC2_DATA20
+#defineSC_P_USDHC2_DATA2_DMA_UART4_CTS_BSC_P_USDHC2_DATA21
+#defineSC_P_USDHC2_DATA2_LSIO_GPIO5_IO28SC_P_USDHC2_DATA23
+#defineSC_P_USDHC2_DATA3_CONN_USDHC2_DATA3SC_P_USDHC2_DATA30
+#defineSC_P_USDHC2_DATA3_DMA_UART4_RTS_BSC_P_USDHC2_DATA31
+#defineSC_P_USDHC2_DATA3_LSIO_GPIO5_IO29SC_P_USDHC2_DATA33
+#defineSC_P_ENET0_RGMII_TXC_CONN_ENET0_RGMII_TXCSC_P_ENET0_RGMII_TXC0
+#defineSC_P_ENET0_RGMII_TXC_CONN_ENET0_RCLK50M_OUTSC_P_ENET0_RGMII_TXC1
+#defineSC_P_ENET0_RGMII_TXC_CONN_ENET0_RCLK50M_INSC_P_ENET0_RGMII_TXC2
+#defineSC_P_ENET0_RGMII_TXC_LSIO_GPIO5_IO30SC_P_ENET0_RGMII_TXC3
+#defineSC_P_ENET0_RGMII_TX_CTL_CONN_ENET0_RGMII_TX_CTLSC_P_ENET0_RGMII_TX_CTL0
+#defineSC_P_ENET0_RGMII_TX_CTL_LSIO_GPIO5_IO31SC_P_ENET0_RGMII_TX_CTL3
+#defineSC_P_ENET0_RGMII_TXD0_CONN_ENET0_RGMII_TXD0SC_P_ENET0_RGMII_TXD00
+#defineSC_P_ENET0_RGMII_TXD0_LSIO_GPIO6_IO00SC_P_ENET0_RGMII_TXD03
+#defineSC_P_ENET0_RGMII_TXD1_CONN_ENET0_RGMII_TXD1SC_P_ENET0_RGMII_TXD10
+#defineSC_P_ENET0_RGMII_TXD1_LSIO_GPIO6_IO01SC_P_ENET0_RGMII_TXD13
+#defineSC_P_ENET0_RGMII_TXD2_CONN_ENET0_RGMII_TXD2SC_P_ENET0_RGMII_TXD20
+#defineSC_P_ENET0_RGMII_TXD2_DMA_UART3_TXSC_P_ENET0_RGMII_TXD21
+#defineSC_P_ENET0_RGMII_TXD2_VPU_TSI_S1_VIDSC_P_ENET0_RGMII_TXD22
+#defineSC_P_ENET0_RGMII_TXD2_LSIO_GPIO6_IO02SC_P_ENET0_RGMII_TXD23
+#defineSC_P_ENET0_RGMII_TXD3_CONN_ENET0_RGMII_TXD3SC_P_ENET0_RGMII_TXD30
+#defineSC_P_ENET0_RGMII_TXD3_DMA_UART3_RTS_BSC_P_ENET0_RGMII_TXD31
+#defineSC_P_ENET0_RGMII_TXD3_VPU_TSI_S1_SYNCSC_P_ENET0_RGMII_TXD32
+#defineSC_P_ENET0_RGMII_TXD3_LSIO_GPIO6_IO03SC_P_ENET0_RGMII_TXD33
+#defineSC_P_ENET0_RGMII_RXC_CONN_ENET0_RGMII_RXCSC_P_ENET0_RGMII_RXC0
+#defineSC_P_ENET0_RGMII_RXC_DMA_UART3_CTS_BSC_P_ENET0_RGMII_RXC1
+#defineSC_P_ENET0_RGMII_RXC_VPU_TSI_S1_DATASC_P_ENET0_RGMII_RXC2
+#defineSC_P_ENET0_RGMII_RXC_LSIO_GPIO6_IO04SC_P_ENET0_RGMII_RXC3
+#defineSC_P_ENET0_RGMII_RX_CTL_CONN_ENET0_RGMII_RX_CTLSC_P_ENET0_RGMII_RX_CTL0
+#defineSC_P_ENET0_RGMII_RX_CTL_VPU_TSI_S0_VIDSC_P_ENET0_RGMII_RX_CTL2
+#defineSC_P_ENET0_RGMII_RX_CTL_LSIO_GPIO6_IO05SC_P_ENET0_RGMII_RX_CTL3
+#defineSC_P_ENET0_RGMII_RXD0_CONN_ENET0_RGMII_RXD0SC_P_ENET0_RGMII_RXD00
+#defineSC_P_ENET0_RGMII_RXD0_VPU_TSI_S0_SYNCSC_P_ENET0_RGMII_RXD02
+#defineSC_P_ENET0_RGMII_RXD0_LSIO_GPIO6_IO06SC_P_ENET0_RGMII_RXD03
+#defineSC_P_ENET0_RGMII_RXD1_CONN_ENET0_RGMII_RXD1SC_P_ENET0_RGMII_RXD10
+#defineSC_P_ENET0_RGMII_RXD1_VPU_TSI_S0_DATASC_P_ENET0_RGMII_RXD12
+#defineSC_P_ENET0_RGMII_RXD1_LSIO_GPIO6_IO07SC_P_ENET0_RGMII_RXD13
+#defineSC_P_ENET0_RGMII_RXD2_CONN_ENET0_RGMII_RXD2SC_P_ENET0_RGMII_RXD20
+#defineSC_P_ENET0_RGMII_RXD2_CONN_ENET0_RMII_RX_ERSC_P_ENET0_RGMII_RXD21
+#defineSC_P_ENET0_RGMII_RXD2_VPU_TSI_S0_CLKSC_P_ENET0_RGMII_RXD22
+#defineSC_P_ENET0_RGMII_RXD2_LSIO_GPIO6_IO08SC_P_ENET0_RGMII_RXD23
+#defineSC_P_ENET0_RGMII_RXD3_CONN_ENET0_RGMII_RXD3SC_P_ENET0_RGMII_RXD30
+#defineSC_P_ENET0_RGMII_RXD3_DMA_UART3_RXSC_P_ENET0_RGMII_RXD31
+#defineSC_P_ENET0_RGMII_RXD3_VPU_TSI_S1_CLKSC_P_ENET0_RGMII_RXD32
+#defineSC_P_ENET0_RGMII_RXD3_LSIO_GPIO6_IO09SC_P_ENET0_RGMII_RXD33
+#defineSC_P_ENET1_RGMII_TXC_CONN_ENET1_RGMII_TXCSC_P_ENET1_RGMII_TXC0
+#defineSC_P_ENET1_RGMII_TXC_CONN_ENET1_RCLK50M_OUTSC_P_ENET1_RGMII_TXC1
+#defineSC_P_ENET1_RGMII_TXC_CONN_ENET1_RCLK50M_INSC_P_ENET1_RGMII_TXC2
+#defineSC_P_ENET1_RGMII_TXC_LSIO_GPIO6_IO10SC_P_ENET1_RGMII_TXC3
+#defineSC_P_ENET1_RGMII_TX_CTL_CONN_ENET1_RGMII_TX_CTLSC_P_ENET1_RGMII_TX_CTL0
+#defineSC_P_ENET1_RGMII_TX_CTL_LSIO_GPIO6_IO11SC_P_ENET1_RGMII_TX_CTL3
+#defineSC_P_ENET1_RGMII_TXD0_CONN_ENET1_RGMII_TXD0SC_P_ENET1_RGMII_TXD00
+#defineSC_P_ENET1_RGMII_TXD0_LSIO_GPIO6_IO12SC_P_ENET1_RGMII_TXD03
+#defineSC_P_ENET1_RGMII_TXD1_CONN_ENET1_RGMII_TXD1SC_P_ENET1_RGMII_TXD10
+#defineSC_P_ENET1_RGMII_TXD1_LSIO_GPIO6_IO13SC_P_ENET1_RGMII_TXD13
+#defineSC_P_ENET1_RGMII_TXD2_CONN_ENET1_RGMII_TXD2SC_P_ENET1_RGMII_TXD20
+#defineSC_P_ENET1_RGMII_TXD2_DMA_UART3_TXSC_P_ENET1_RGMII_TXD21
+#defineSC_P_ENET1_RGMII_TXD2_VPU_TSI_S1_VIDSC_P_ENET1_RGMII_TXD22
+#defineSC_P_ENET1_RGMII_TXD2_LSIO_GPIO6_IO14SC_P_ENET1_RGMII_TXD23
+#defineSC_P_ENET1_RGMII_TXD3_CONN_ENET1_RGMII_TXD3SC_P_ENET1_RGMII_TXD30
+#defineSC_P_ENET1_RGMII_TXD3_DMA_UART3_RTS_BSC_P_ENET1_RGMII_TXD31
+#defineSC_P_ENET1_RGMII_TXD3_VPU_TSI_S1_SYNCSC_P_ENET1_RGMII_TXD32
+#defineSC_P_ENET1_RGMII_TXD3_LSIO_GPIO6_IO15SC_P_ENET1_RGMII_TXD33
+#defineSC_P_ENET1_RGMII_RXC_CONN_ENET1_RGMII_RXCSC_P_ENET1_RGMII_RXC0
+#defineSC_P_ENET1_RGMII_RXC_DMA_UART3_CTS_BSC_P_ENET1_RGMII_RXC1
+#defineSC_P_ENET1_RGMII_RXC_VPU_TSI_S1_DATASC_P_ENET1_RGMII_RXC2
+#defineSC_P_ENET1_RGMII_RXC_LSIO_GPIO6_IO16SC_P_ENET1_RGMII_RXC3
+#defineSC_P_ENET1_RGMII_RX_CTL_CONN_ENET1_RGMII_RX_CTLSC_P_ENET1_RGMII_RX_CTL0
+#defineSC_P_ENET1_RGMII_RX_CTL_VPU_TSI_S0_VIDSC_P_ENET1_RGMII_RX_CTL2
+#defineSC_P_ENET1_RGMII_RX_CTL_LSIO_GPIO6_IO17SC_P_ENET1_RGMII_RX_CTL3
+#defineSC_P_ENET1_RGMII_RXD0_CONN_ENET1_RGMII_RXD0SC_P_ENET1_RGMII_RXD00
+#defineSC_P_ENET1_RGMII_RXD0_VPU_TSI_S0_SYNCSC_P_ENET1_RGMII_RXD02
+#defineSC_P_ENET1_RGMII_RXD0_LSIO_GPIO6_IO18SC_P_ENET1_RGMII_RXD03
+#defineSC_P_ENET1_RGMII_RXD1_CONN_ENET1_RGMII_RXD1SC_P_ENET1_RGMII_RXD10
+#defineSC_P_ENET1_RGMII_RXD1_VPU_TSI_S0_DATASC_P_ENET1_RGMII_RXD12
+#defineSC_P_ENET1_RGMII_RXD1_LSIO_GPIO6_IO19SC_P_ENET1_RGMII_RXD13
+#defineSC_P_ENET1_RGMII_RXD2_CONN_ENET1_RGMII_RXD2SC_P_ENET1_RGMII_RXD20
+#defineSC_P_ENET1_RGMII_RXD2_CONN_ENET1_RMII_RX_ERSC_P_ENET1_RGMII_RXD21
+#defineSC_P_ENET1_RGMII_RXD2_VPU_TSI_S0_CLKSC_P_ENET1_RGMII_RXD22
+#defineSC_P_ENET1_RGMII_RXD2_LSIO_GPIO6_IO20SC_P_ENET1_RGMII_RXD23
+#defineSC_P_ENET1_RGMII_RXD3_CONN_ENET1_RGMII_RXD3SC_P_ENET1_RGMII_RXD30
+#defineSC_P_ENET1_RGMII_RXD3_DMA_UART3_RXSC_P_ENET1_RGMII_RXD31
+#defineSC_P_ENET1_RGMII_RXD3_VPU_TSI_S1_CLKSC_P_ENET1_RGMII_RXD32
+#defineSC_P_ENET1_RGMII_RXD3_LSIO_GPIO6_IO21SC_P_ENET1_RGMII_RXD33include/dt-bindings/pinctrl/pads-imx8qm.h new file +4
-0Lines of this file are not shown. View the raw message.
include/dt-bindings/pinctrl/pads-imx8qxp.h new file +23
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
HSIO.PCIE0.PERST_B, LSIO.GPIO4.IO00 */
+#defineSC_P_PCIE_CTRL0_CLKREQ_B1 /*!<
HSIO.PCIE0.CLKREQ_B, LSIO.GPIO4.IO01 */
+#defineSC_P_PCIE_CTRL0_WAKE_B2 /*!<
HSIO.PCIE0.WAKE_B, LSIO.GPIO4.IO02 */include/dt-bindings/pinctrl/pads-imx8qxp.h new file +2
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
ADMA.I2C1.SCL, CONN.USB_OTG1.PWR, CONN.USB_OTG2.PWR, LSIO.GPIO4.IO03 */
+#defineSC_P_USB_SS3_TC15 /*!<
ADMA.I2C1.SCL, CONN.USB_OTG2.PWR, LSIO.GPIO4.IO04 */
+#defineSC_P_USB_SS3_TC26 /*!<
ADMA.I2C1.SDA, CONN.USB_OTG1.OC, CONN.USB_OTG2.OC, LSIO.GPIO4.IO05 */
+#defineSC_P_USB_SS3_TC37 /*!<
ADMA.I2C1.SDA, CONN.USB_OTG2.OC, LSIO.GPIO4.IO06 */include/dt-bindings/pinctrl/pads-imx8qxp.h new file +2
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
CONN.EMMC0.CLK, CONN.NAND.READY_B, LSIO.GPIO4.IO07 */
+#defineSC_P_EMMC0_CMD10 /*!<
CONN.EMMC0.CMD, CONN.NAND.DQS, LSIO.GPIO4.IO08 */
+#defineSC_P_EMMC0_DATA011 /*!<
CONN.EMMC0.DATA0, CONN.NAND.DATA00, LSIO.GPIO4.IO09 */
+#defineSC_P_EMMC0_DATA112 /*!<
CONN.EMMC0.DATA1, CONN.NAND.DATA01, LSIO.GPIO4.IO10 */
+#defineSC_P_EMMC0_DATA213 /*!<
CONN.EMMC0.DATA2, CONN.NAND.DATA02, LSIO.GPIO4.IO11 */
+#defineSC_P_EMMC0_DATA314 /*!<
CONN.EMMC0.DATA3, CONN.NAND.DATA03, LSIO.GPIO4.IO12 */include/dt-bindings/pinctrl/pads-imx8qxp.h new file +2
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
CONN.EMMC0.DATA4, CONN.NAND.DATA04, CONN.EMMC0.WP, LSIO.GPIO4.IO13 */
+#defineSC_P_EMMC0_DATA517 /*!<
CONN.EMMC0.DATA5, CONN.NAND.DATA05, CONN.EMMC0.VSELECT, LSIO.GPIO4.IO14 */
+#defineSC_P_EMMC0_DATA618 /*!<
CONN.EMMC0.DATA6, CONN.NAND.DATA06, CONN.MLB.CLK, LSIO.GPIO4.IO15 */
+#defineSC_P_EMMC0_DATA719 /*!<
CONN.EMMC0.DATA7, CONN.NAND.DATA07, CONN.MLB.SIG, LSIO.GPIO4.IO16 */
+#defineSC_P_EMMC0_STROBE20 /*!<
CONN.EMMC0.STROBE, CONN.NAND.CLE, CONN.MLB.DATA, LSIO.GPIO4.IO17 */
+#defineSC_P_EMMC0_RESET_B21 /*!<
CONN.EMMC0.RESET_B, CONN.NAND.WP_B, LSIO.GPIO4.IO18 */include/dt-bindings/pinctrl/pads-imx8qxp.h new file +2
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
CONN.USDHC1.RESET_B, CONN.NAND.RE_N, ADMA.SPI2.SCK, LSIO.GPIO4.IO19 */
+#defineSC_P_USDHC1_VSELECT24 /*!<
CONN.USDHC1.VSELECT, CONN.NAND.RE_P, ADMA.SPI2.SDO, CONN.NAND.RE_B, LSIO.GPIO4.IO20 */include/dt-bindings/pinctrl/pads-imx8qxp.h new file +2
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
CONN.USDHC1.WP, CONN.NAND.DQS_N, ADMA.SPI2.SDI, LSIO.GPIO4.IO21 */
+#defineSC_P_USDHC1_CD_B27 /*!<
CONN.USDHC1.CD_B, CONN.NAND.DQS_P, ADMA.SPI2.CS0, CONN.NAND.DQS, LSIO.GPIO4.IO22 */include/dt-bindings/pinctrl/pads-imx8qxp.h new file +3
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
CONN.USDHC1.CLK, ADMA.UART3.RX, LSIO.GPIO4.IO23 */
+#defineSC_P_USDHC1_CMD31 /*!<
CONN.USDHC1.CMD, CONN.NAND.CE0_B, ADMA.MQS.R, LSIO.GPIO4.IO24 */
+#defineSC_P_USDHC1_DATA032 /*!<
CONN.USDHC1.DATA0, CONN.NAND.CE1_B, ADMA.MQS.L, LSIO.GPIO4.IO25 */
+#defineSC_P_USDHC1_DATA133 /*!<
CONN.USDHC1.DATA1, CONN.NAND.RE_B, ADMA.UART3.TX, LSIO.GPIO4.IO26 */
+#defineSC_P_USDHC1_DATA234 /*!<
CONN.USDHC1.DATA2, CONN.NAND.WE_B, ADMA.UART3.CTS_B, LSIO.GPIO4.IO27 */
+#defineSC_P_USDHC1_DATA335 /*!<
CONN.USDHC1.DATA3, CONN.NAND.ALE, ADMA.UART3.RTS_B, LSIO.GPIO4.IO28 */include/dt-bindings/pinctrl/pads-imx8qxp.h new file +2
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
CONN.ENET0.RGMII_TXC, CONN.ENET0.RCLK50M_OUT, CONN.ENET0.RCLK50M_IN, CONN.NAND.CE1_B, LSIO.GPIO4.IO29 */
+#defineSC_P_ENET0_RGMII_TX_CTL38 /*!<
CONN.ENET0.RGMII_TX_CTL, CONN.USDHC1.RESET_B, LSIO.GPIO4.IO30 */
+#defineSC_P_ENET0_RGMII_TXD039 /*!<
CONN.ENET0.RGMII_TXD0, CONN.USDHC1.VSELECT, LSIO.GPIO4.IO31 */
+#defineSC_P_ENET0_RGMII_TXD140 /*!<
CONN.ENET0.RGMII_TXD1, CONN.USDHC1.WP, LSIO.GPIO5.IO00 */
+#defineSC_P_ENET0_RGMII_TXD241 /*!<
CONN.ENET0.RGMII_TXD2, CONN.MLB.CLK, CONN.NAND.CE0_B, CONN.USDHC1.CD_B, LSIO.GPIO5.IO01 */
+#defineSC_P_ENET0_RGMII_TXD342 /*!<
CONN.ENET0.RGMII_TXD3, CONN.MLB.SIG, CONN.NAND.RE_B, LSIO.GPIO5.IO02 */include/dt-bindings/pinctrl/pads-imx8qxp.h new file +2
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
CONN.ENET0.RGMII_RXC, CONN.MLB.DATA, CONN.NAND.WE_B, CONN.USDHC1.CLK, LSIO.GPIO5.IO03 */
+#defineSC_P_ENET0_RGMII_RX_CTL45 /*!<
CONN.ENET0.RGMII_RX_CTL, CONN.USDHC1.CMD, LSIO.GPIO5.IO04 */
+#defineSC_P_ENET0_RGMII_RXD046 /*!<
CONN.ENET0.RGMII_RXD0, CONN.USDHC1.DATA0, LSIO.GPIO5.IO05 */
+#defineSC_P_ENET0_RGMII_RXD147 /*!<
CONN.ENET0.RGMII_RXD1, CONN.USDHC1.DATA1, LSIO.GPIO5.IO06 */
+#defineSC_P_ENET0_RGMII_RXD248 /*!<
CONN.ENET0.RGMII_RXD2, CONN.ENET0.RMII_RX_ER, CONN.USDHC1.DATA2, LSIO.GPIO5.IO07 */
+#defineSC_P_ENET0_RGMII_RXD349 /*!<
CONN.ENET0.RGMII_RXD3, CONN.NAND.ALE, CONN.USDHC1.DATA3, LSIO.GPIO5.IO08 */include/dt-bindings/pinctrl/pads-imx8qxp.h new file +2
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
CONN.ENET0.REFCLK_125M_25M, CONN.ENET0.PPS, CONN.ENET1.PPS, LSIO.GPIO5.IO09 */
+#defineSC_P_ENET0_MDIO52 /*!<
CONN.ENET0.MDIO, ADMA.I2C3.SDA, CONN.ENET1.MDIO, LSIO.GPIO5.IO10 */
+#defineSC_P_ENET0_MDC53 /*!<
CONN.ENET0.MDC, ADMA.I2C3.SCL, CONN.ENET1.MDC, LSIO.GPIO5.IO11 */include/dt-bindings/pinctrl/pads-imx8qxp.h new file +2
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
ADMA.ESAI0.FSR, CONN.ENET1.RCLK50M_OUT, ADMA.LCDIF.D00, CONN.ENET1.RGMII_TXC, CONN.ENET1.RCLK50M_IN */
+#defineSC_P_ESAI0_FST56 /*!<
ADMA.ESAI0.FST, CONN.MLB.CLK, ADMA.LCDIF.D01, CONN.ENET1.RGMII_TXD2, LSIO.GPIO0.IO01 */
+#defineSC_P_ESAI0_SCKR57 /*!<
ADMA.ESAI0.SCKR, ADMA.LCDIF.D02, CONN.ENET1.RGMII_TX_CTL, LSIO.GPIO0.IO02 */
+#defineSC_P_ESAI0_SCKT58 /*!<
ADMA.ESAI0.SCKT, CONN.MLB.SIG, ADMA.LCDIF.D03, CONN.ENET1.RGMII_TXD3, LSIO.GPIO0.IO03 */
+#defineSC_P_ESAI0_TX059 /*!<
ADMA.ESAI0.TX0, CONN.MLB.DATA, ADMA.LCDIF.D04, CONN.ENET1.RGMII_RXC, LSIO.GPIO0.IO04 */
+#defineSC_P_ESAI0_TX160 /*!<
ADMA.ESAI0.TX1, ADMA.LCDIF.D05, CONN.ENET1.RGMII_RXD3, LSIO.GPIO0.IO05 */
+#defineSC_P_ESAI0_TX2_RX361 /*!<
ADMA.ESAI0.TX2_RX3, CONN.ENET1.RMII_RX_ER, ADMA.LCDIF.D06, CONN.ENET1.RGMII_RXD2, LSIO.GPIO0.IO06 */
+#defineSC_P_ESAI0_TX3_RX262 /*!<
ADMA.ESAI0.TX3_RX2, ADMA.LCDIF.D07, CONN.ENET1.RGMII_RXD1, LSIO.GPIO0.IO07 */
+#defineSC_P_ESAI0_TX4_RX163 /*!<
ADMA.ESAI0.TX4_RX1, ADMA.LCDIF.D08, CONN.ENET1.RGMII_TXD0, LSIO.GPIO0.IO08 */
+#defineSC_P_ESAI0_TX5_RX064 /*!<
ADMA.ESAI0.TX5_RX0, ADMA.LCDIF.D09, CONN.ENET1.RGMII_TXD1, LSIO.GPIO0.IO09 */
+#defineSC_P_SPDIF0_RX65 /*!<
ADMA.SPDIF0.RX, ADMA.MQS.R, ADMA.LCDIF.D10, CONN.ENET1.RGMII_RXD0, LSIO.GPIO0.IO10 */
+#defineSC_P_SPDIF0_TX66 /*!<
ADMA.SPDIF0.TX, ADMA.MQS.L, ADMA.LCDIF.D11, CONN.ENET1.RGMII_RX_CTL, LSIO.GPIO0.IO11 */
+#defineSC_P_SPDIF0_EXT_CLK67 /*!<
ADMA.SPDIF0.EXT_CLK, ADMA.LCDIF.D12, CONN.ENET1.REFCLK_125M_25M, LSIO.GPIO0.IO12 */include/dt-bindings/pinctrl/pads-imx8qxp.h new file +2
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
ADMA.SPI3.SCK, ADMA.LCDIF.D13, LSIO.GPIO0.IO13 */
+#defineSC_P_SPI3_SDO70 /*!<
ADMA.SPI3.SDO, ADMA.LCDIF.D14, LSIO.GPIO0.IO14 */
+#defineSC_P_SPI3_SDI71 /*!<
ADMA.SPI3.SDI, ADMA.LCDIF.D15, LSIO.GPIO0.IO15 */
+#defineSC_P_SPI3_CS072 /*!<
ADMA.SPI3.CS0, ADMA.ACM.MCLK_OUT1, ADMA.LCDIF.HSYNC, LSIO.GPIO0.IO16 */
+#defineSC_P_SPI3_CS173 /*!<
ADMA.SPI3.CS1, ADMA.I2C3.SCL, ADMA.LCDIF.RESET, ADMA.SPI2.CS0, ADMA.LCDIF.D16 */
+#defineSC_P_MCLK_IN174 /*!<
ADMA.ACM.MCLK_IN1, ADMA.I2C3.SDA, ADMA.LCDIF.EN, ADMA.SPI2.SCK, ADMA.LCDIF.D17 */
+#defineSC_P_MCLK_IN075 /*!<
ADMA.ACM.MCLK_IN0, ADMA.ESAI0.RX_HF_CLK, ADMA.LCDIF.VSYNC, ADMA.SPI2.SDI, LSIO.GPIO0.IO19 */
+#defineSC_P_MCLK_OUT076 /*!<
ADMA.ACM.MCLK_OUT0, ADMA.ESAI0.TX_HF_CLK, ADMA.LCDIF.CLK, ADMA.SPI2.SDO, LSIO.GPIO0.IO20 */
+#defineSC_P_UART1_TX77 /*!<
ADMA.UART1.TX, LSIO.PWM0.OUT, LSIO.GPT0.CAPTURE, LSIO.GPIO0.IO21 */
+#defineSC_P_UART1_RX78 /*!<
ADMA.UART1.RX, LSIO.PWM1.OUT, LSIO.GPT0.COMPARE, LSIO.GPT1.CLK, LSIO.GPIO0.IO22 */
+#defineSC_P_UART1_RTS_B79 /*!<
ADMA.UART1.RTS_B, LSIO.PWM2.OUT, ADMA.LCDIF.D16, LSIO.GPT1.CAPTURE, LSIO.GPT0.CLK */
+#defineSC_P_UART1_CTS_B80 /*!<
ADMA.UART1.CTS_B, LSIO.PWM3.OUT, ADMA.LCDIF.D17, LSIO.GPT1.COMPARE, LSIO.GPIO0.IO24 */include/dt-bindings/pinctrl/pads-imx8qxp.h new file +2
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
ADMA.SAI0.TXD, ADMA.SAI1.RXC, ADMA.SPI1.SDO, ADMA.LCDIF.D18, LSIO.GPIO0.IO25 */
+#defineSC_P_SAI0_TXC83 /*!<
ADMA.SAI0.TXC, ADMA.SAI1.TXD, ADMA.SPI1.SDI, ADMA.LCDIF.D19, LSIO.GPIO0.IO26 */
+#defineSC_P_SAI0_RXD84 /*!<
ADMA.SAI0.RXD, ADMA.SAI1.RXFS, ADMA.SPI1.CS0, ADMA.LCDIF.D20, LSIO.GPIO0.IO27 */
+#defineSC_P_SAI0_TXFS85 /*!<
ADMA.SAI0.TXFS, ADMA.SPI2.CS1, ADMA.SPI1.SCK, LSIO.GPIO0.IO28 */
+#defineSC_P_SAI1_RXD86 /*!<
ADMA.SAI1.RXD, ADMA.SAI0.RXFS, ADMA.SPI1.CS1, ADMA.LCDIF.D21, LSIO.GPIO0.IO29 */
+#defineSC_P_SAI1_RXC87 /*!<
ADMA.SAI1.RXC, ADMA.SAI1.TXC, ADMA.LCDIF.D22, LSIO.GPIO0.IO30 */
+#defineSC_P_SAI1_RXFS88 /*!<
ADMA.SAI1.RXFS, ADMA.SAI1.TXFS, ADMA.LCDIF.D23, LSIO.GPIO0.IO31 */
+#defineSC_P_SPI2_CS089 /*!<
ADMA.SPI2.CS0, LSIO.GPIO1.IO00 */
+#defineSC_P_SPI2_SDO90 /*!<
ADMA.SPI2.SDO, LSIO.GPIO1.IO01 */
+#defineSC_P_SPI2_SDI91 /*!<
ADMA.SPI2.SDI, LSIO.GPIO1.IO02 */
+#defineSC_P_SPI2_SCK92 /*!<
ADMA.SPI2.SCK, LSIO.GPIO1.IO03 */
+#defineSC_P_SPI0_SCK93 /*!<
ADMA.SPI0.SCK, ADMA.SAI0.TXC, M40.I2C0.SCL, M40.GPIO0.IO00, LSIO.GPIO1.IO04 */
+#defineSC_P_SPI0_SDI94 /*!<
ADMA.SPI0.SDI, ADMA.SAI0.TXD, M40.TPM0.CH0, M40.GPIO0.IO02, LSIO.GPIO1.IO05 */
+#defineSC_P_SPI0_SDO95 /*!<
ADMA.SPI0.SDO, ADMA.SAI0.TXFS, M40.I2C0.SDA, M40.GPIO0.IO01, LSIO.GPIO1.IO06 */
+#defineSC_P_SPI0_CS196 /*!<
ADMA.SPI0.CS1, ADMA.SAI0.RXC, ADMA.SAI1.TXD, ADMA.LCD_PWM0.OUT, LSIO.GPIO1.IO07 */
+#defineSC_P_SPI0_CS097 /*!<
ADMA.SPI0.CS0, ADMA.SAI0.RXD, M40.TPM0.CH1, M40.GPIO0.IO03, LSIO.GPIO1.IO08 */include/dt-bindings/pinctrl/pads-imx8qxp.h new file +2
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
ADMA.ADC.IN1, M40.I2C0.SDA, M40.GPIO0.IO01, LSIO.GPIO1.IO09 */
+#defineSC_P_ADC_IN0100 /*!<
ADMA.ADC.IN0, M40.I2C0.SCL, M40.GPIO0.IO00, LSIO.GPIO1.IO10 */
+#defineSC_P_ADC_IN3101 /*!<
ADMA.ADC.IN3, M40.UART0.TX, M40.GPIO0.IO03, ADMA.ACM.MCLK_OUT0, LSIO.GPIO1.IO11 */
+#defineSC_P_ADC_IN2102 /*!<
ADMA.ADC.IN2, M40.UART0.RX, M40.GPIO0.IO02, ADMA.ACM.MCLK_IN0, LSIO.GPIO1.IO12 */
+#defineSC_P_ADC_IN5103 /*!<
ADMA.ADC.IN5, M40.TPM0.CH1, M40.GPIO0.IO05, LSIO.GPIO1.IO13 */
+#defineSC_P_ADC_IN4104 /*!<
ADMA.ADC.IN4, M40.TPM0.CH0, M40.GPIO0.IO04, LSIO.GPIO1.IO14 */
+#defineSC_P_FLEXCAN0_RX105 /*!<
ADMA.FLEXCAN0.RX, ADMA.SAI2.RXC, ADMA.UART0.RTS_B, ADMA.SAI1.TXC, LSIO.GPIO1.IO15 */
+#defineSC_P_FLEXCAN0_TX106 /*!<
ADMA.FLEXCAN0.TX, ADMA.SAI2.RXD, ADMA.UART0.CTS_B, ADMA.SAI1.TXFS, LSIO.GPIO1.IO16 */
+#defineSC_P_FLEXCAN1_RX107 /*!<
ADMA.FLEXCAN1.RX, ADMA.SAI2.RXFS, ADMA.FTM.CH2, ADMA.SAI1.TXD, LSIO.GPIO1.IO17 */
+#defineSC_P_FLEXCAN1_TX108 /*!<
ADMA.FLEXCAN1.TX, ADMA.SAI3.RXC, ADMA.DMA0.REQ_IN0, ADMA.SAI1.RXD, LSIO.GPIO1.IO18 */
+#defineSC_P_FLEXCAN2_RX109 /*!<
ADMA.FLEXCAN2.RX, ADMA.SAI3.RXD, ADMA.UART3.RX, ADMA.SAI1.RXFS, LSIO.GPIO1.IO19 */
+#defineSC_P_FLEXCAN2_TX110 /*!<
ADMA.FLEXCAN2.TX, ADMA.SAI3.RXFS, ADMA.UART3.TX, ADMA.SAI1.RXC, LSIO.GPIO1.IO20 */
+#defineSC_P_UART0_RX111 /*!<
ADMA.UART0.RX, ADMA.MQS.R, ADMA.FLEXCAN0.RX, SCU.UART0.RX, LSIO.GPIO1.IO21 */
+#defineSC_P_UART0_TX112 /*!<
ADMA.UART0.TX, ADMA.MQS.L, ADMA.FLEXCAN0.TX, SCU.UART0.TX, LSIO.GPIO1.IO22 */
+#defineSC_P_UART2_TX113 /*!<
ADMA.UART2.TX, ADMA.FTM.CH1, ADMA.FLEXCAN1.TX, LSIO.GPIO1.IO23 */
+#defineSC_P_UART2_RX114 /*!<
ADMA.UART2.RX, ADMA.FTM.CH0, ADMA.FLEXCAN1.RX, LSIO.GPIO1.IO24 */include/dt-bindings/pinctrl/pads-imx8qxp.h new file +2
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
MIPI_DSI0.I2C0.SCL, MIPI_DSI1.GPIO0.IO02, LSIO.GPIO1.IO25 */
+#defineSC_P_MIPI_DSI0_I2C0_SDA117 /*!<
MIPI_DSI0.I2C0.SDA, MIPI_DSI1.GPIO0.IO03, LSIO.GPIO1.IO26 */
+#defineSC_P_MIPI_DSI0_GPIO0_00118 /*!<
MIPI_DSI0.GPIO0.IO00, ADMA.I2C1.SCL, MIPI_DSI0.PWM0.OUT, LSIO.GPIO1.IO27 */
+#defineSC_P_MIPI_DSI0_GPIO0_01119 /*!<
MIPI_DSI0.GPIO0.IO01, ADMA.I2C1.SDA, LSIO.GPIO1.IO28 */
+#defineSC_P_MIPI_DSI1_I2C0_SCL120 /*!<
MIPI_DSI1.I2C0.SCL, MIPI_DSI0.GPIO0.IO02, LSIO.GPIO1.IO29 */
+#defineSC_P_MIPI_DSI1_I2C0_SDA121 /*!<
MIPI_DSI1.I2C0.SDA, MIPI_DSI0.GPIO0.IO03, LSIO.GPIO1.IO30 */
+#defineSC_P_MIPI_DSI1_GPIO0_00122 /*!<
MIPI_DSI1.GPIO0.IO00, ADMA.I2C2.SCL, MIPI_DSI1.PWM0.OUT, LSIO.GPIO1.IO31 */
+#defineSC_P_MIPI_DSI1_GPIO0_01123 /*!<
MIPI_DSI1.GPIO0.IO01, ADMA.I2C2.SDA, LSIO.GPIO2.IO00 */include/dt-bindings/pinctrl/pads-imx8qxp.h new file +2
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
SCU.JTAG.TRST_B, SCU.WDOG0.WDOG_OUT */
+#defineSC_P_PMIC_I2C_SCL126 /*!<
SCU.PMIC_I2C.SCL, SCU.GPIO0.IOXX_PMIC_A35_ON, LSIO.GPIO2.IO01 */
+#defineSC_P_PMIC_I2C_SDA127 /*!<
SCU.PMIC_I2C.SDA, SCU.GPIO0.IOXX_PMIC_GPU_ON, LSIO.GPIO2.IO02 */
+#defineSC_P_PMIC_INT_B128 /*!<
SCU.DSC.PMIC_INT_B */
+#defineSC_P_SCU_GPIO0_00129 /*!<
SCU.GPIO0.IO00, SCU.UART0.RX, M40.UART0.RX, ADMA.UART3.RX, LSIO.GPIO2.IO03 */
+#defineSC_P_SCU_GPIO0_01130 /*!<
SCU.GPIO0.IO01, SCU.UART0.TX, M40.UART0.TX, ADMA.UART3.TX, SCU.WDOG0.WDOG_OUT */
+#defineSC_P_SCU_PMIC_STANDBY131 /*!<
SCU.DSC.PMIC_STANDBY */
+#defineSC_P_SCU_BOOT_MODE0132 /*!<
SCU.DSC.BOOT_MODE0 */
+#defineSC_P_SCU_BOOT_MODE1133 /*!<
SCU.DSC.BOOT_MODE1 */
+#defineSC_P_SCU_BOOT_MODE2134 /*!<
SCU.DSC.BOOT_MODE2, SCU.PMIC_I2C.SDA */
+#defineSC_P_SCU_BOOT_MODE3135 /*!<
SCU.DSC.BOOT_MODE3, SCU.PMIC_I2C.SCL, SCU.DSC.RTC_CLOCK_OUTPUT_32K */
+#defineSC_P_CSI_D00136 /*!<
CI_PI.D02, ADMA.SAI0.RXC */
+#defineSC_P_CSI_D01137 /*!<
CI_PI.D03, ADMA.SAI0.RXD */
+#defineSC_P_CSI_D02138 /*!<
CI_PI.D04, ADMA.SAI0.RXFS */
+#defineSC_P_CSI_D03139 /*!<
CI_PI.D05, ADMA.SAI2.RXC */
+#defineSC_P_CSI_D04140 /*!<
CI_PI.D06, ADMA.SAI2.RXD */
+#defineSC_P_CSI_D05141 /*!<
CI_PI.D07, ADMA.SAI2.RXFS */
+#defineSC_P_CSI_D06142 /*!<
CI_PI.D08, ADMA.SAI3.RXC */
+#defineSC_P_CSI_D07143 /*!<
CI_PI.D09, ADMA.SAI3.RXD */
+#defineSC_P_CSI_HSYNC144 /*!<
CI_PI.HSYNC, CI_PI.D00, ADMA.SAI3.RXFS */
+#defineSC_P_CSI_VSYNC145 /*!<
CI_PI.VSYNC, CI_PI.D01 */
+#defineSC_P_CSI_PCLK146 /*!<
CI_PI.PCLK, MIPI_CSI0.I2C0.SCL, ADMA.SPI1.SCK, LSIO.GPIO3.IO00 */
+#defineSC_P_CSI_MCLK147 /*!<
CI_PI.MCLK, MIPI_CSI0.I2C0.SDA, ADMA.SPI1.SDO, LSIO.GPIO3.IO01 */
+#defineSC_P_CSI_EN148 /*!< CI_PI.EN,
CI_PI.I2C.SCL, ADMA.I2C3.SCL, ADMA.SPI1.SDI, LSIO.GPIO3.IO02 */
+#defineSC_P_CSI_RESET149 /*!<
CI_PI.RESET, CI_PI.I2C.SDA, ADMA.I2C3.SDA, ADMA.SPI1.CS0, LSIO.GPIO3.IO03 */include/dt-bindings/pinctrl/pads-imx8qxp.h new file +2
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
MIPI_CSI0.ACM.MCLK_OUT, LSIO.GPIO3.IO04 */
+#defineSC_P_MIPI_CSI0_I2C0_SCL152 /*!<
MIPI_CSI0.I2C0.SCL, MIPI_CSI0.GPIO0.IO02, LSIO.GPIO3.IO05 */
+#defineSC_P_MIPI_CSI0_I2C0_SDA153 /*!<
MIPI_CSI0.I2C0.SDA, MIPI_CSI0.GPIO0.IO03, LSIO.GPIO3.IO06 */
+#defineSC_P_MIPI_CSI0_GPIO0_01154 /*!<
MIPI_CSI0.GPIO0.IO01, ADMA.I2C0.SDA, LSIO.GPIO3.IO07 */
+#defineSC_P_MIPI_CSI0_GPIO0_00155 /*!<
MIPI_CSI0.GPIO0.IO00, ADMA.I2C0.SCL, LSIO.GPIO3.IO08 */
+#defineSC_P_QSPI0A_DATA0156 /*!<
LSIO.QSPI0A.DATA0, LSIO.GPIO3.IO09 */
+#defineSC_P_QSPI0A_DATA1157 /*!<
LSIO.QSPI0A.DATA1, LSIO.GPIO3.IO10 */
+#defineSC_P_QSPI0A_DATA2158 /*!<
LSIO.QSPI0A.DATA2, LSIO.GPIO3.IO11 */
+#defineSC_P_QSPI0A_DATA3159 /*!<
LSIO.QSPI0A.DATA3, LSIO.GPIO3.IO12 */
+#defineSC_P_QSPI0A_DQS160 /*!<
LSIO.QSPI0A.DQS, LSIO.GPIO3.IO13 */
+#defineSC_P_QSPI0A_SS0_B161 /*!<
LSIO.QSPI0A.SS0_B, LSIO.GPIO3.IO14 */
+#defineSC_P_QSPI0A_SS1_B162 /*!<
LSIO.QSPI0A.SS1_B, LSIO.GPIO3.IO15 */
+#defineSC_P_QSPI0A_SCLK163 /*!<
LSIO.QSPI0A.SCLK, LSIO.GPIO3.IO16 */include/dt-bindings/pinctrl/pads-imx8qxp.h new file +2
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
LSIO.QSPI0B.SCLK, LSIO.QSPI1A.SCLK, LSIO.KPP0.COL0, LSIO.GPIO3.IO17 */
+#defineSC_P_QSPI0B_DATA0166 /*!<
LSIO.QSPI0B.DATA0, LSIO.QSPI1A.DATA0, LSIO.KPP0.COL1, LSIO.GPIO3.IO18 */
+#defineSC_P_QSPI0B_DATA1167 /*!<
LSIO.QSPI0B.DATA1, LSIO.QSPI1A.DATA1, LSIO.KPP0.COL2, LSIO.GPIO3.IO19 */
+#defineSC_P_QSPI0B_DATA2168 /*!<
LSIO.QSPI0B.DATA2, LSIO.QSPI1A.DATA2, LSIO.KPP0.COL3, LSIO.GPIO3.IO20 */
+#defineSC_P_QSPI0B_DATA3169 /*!<
LSIO.QSPI0B.DATA3, LSIO.QSPI1A.DATA3, LSIO.KPP0.ROW0, LSIO.GPIO3.IO21 */
+#defineSC_P_QSPI0B_DQS170 /*!<
LSIO.QSPI0B.DQS, LSIO.QSPI1A.DQS, LSIO.KPP0.ROW1, LSIO.GPIO3.IO22 */
+#defineSC_P_QSPI0B_SS0_B171 /*!<
LSIO.QSPI0B.SS0_B, LSIO.QSPI1A.SS0_B, LSIO.KPP0.ROW2, LSIO.GPIO3.IO23 */
+#defineSC_P_QSPI0B_SS1_B172 /*!<
LSIO.QSPI0B.SS1_B, LSIO.QSPI1A.SS1_B, LSIO.KPP0.ROW3, LSIO.GPIO3.IO24 */include/dt-bindings/pinctrl/pads-imx8qxp.h new file +9
-0Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
SC_P_PCIE_CTRL0_PERST_B0
+#defineSC_P_PCIE_CTRL0_PERST_B_LSIO_GPIO4_IO00SC_P_PCIE_CTRL0_PERST_B4
+#defineSC_P_PCIE_CTRL0_CLKREQ_B_HSIO_PCIE0_CLKREQ_BSC_P_PCIE_CTRL0_CLKREQ_B0
+#defineSC_P_PCIE_CTRL0_CLKREQ_B_LSIO_GPIO4_IO01SC_P_PCIE_CTRL0_CLKREQ_B4
+#defineSC_P_PCIE_CTRL0_WAKE_B_HSIO_PCIE0_WAKE_BSC_P_PCIE_CTRL0_WAKE_B0
+#defineSC_P_PCIE_CTRL0_WAKE_B_LSIO_GPIO4_IO02SC_P_PCIE_CTRL0_WAKE_B4
+#defineSC_P_USB_SS3_TC0_ADMA_I2C1_SCLSC_P_USB_SS3_TC00
+#defineSC_P_USB_SS3_TC0_CONN_USB_OTG1_PWRSC_P_USB_SS3_TC01
+#defineSC_P_USB_SS3_TC0_CONN_USB_OTG2_PWRSC_P_USB_SS3_TC02
+#defineSC_P_USB_SS3_TC0_LSIO_GPIO4_IO03SC_P_USB_SS3_TC04
+#defineSC_P_USB_SS3_TC1_ADMA_I2C1_SCLSC_P_USB_SS3_TC10
+#defineSC_P_USB_SS3_TC1_CONN_USB_OTG2_PWRSC_P_USB_SS3_TC11
+#defineSC_P_USB_SS3_TC1_LSIO_GPIO4_IO04SC_P_USB_SS3_TC14
+#defineSC_P_USB_SS3_TC2_ADMA_I2C1_SDASC_P_USB_SS3_TC20
+#defineSC_P_USB_SS3_TC2_CONN_USB_OTG1_OCSC_P_USB_SS3_TC21
+#defineSC_P_USB_SS3_TC2_CONN_USB_OTG2_OCSC_P_USB_SS3_TC22
+#defineSC_P_USB_SS3_TC2_LSIO_GPIO4_IO05SC_P_USB_SS3_TC24
+#defineSC_P_USB_SS3_TC3_ADMA_I2C1_SDASC_P_USB_SS3_TC30
+#defineSC_P_USB_SS3_TC3_CONN_USB_OTG2_OCSC_P_USB_SS3_TC31
+#defineSC_P_USB_SS3_TC3_LSIO_GPIO4_IO06SC_P_USB_SS3_TC34
+#defineSC_P_EMMC0_CLK_CONN_EMMC0_CLKSC_P_EMMC0_CLK0
+#defineSC_P_EMMC0_CLK_CONN_NAND_READY_BSC_P_EMMC0_CLK1
+#defineSC_P_EMMC0_CLK_LSIO_GPIO4_IO07SC_P_EMMC0_CLK4
+#defineSC_P_EMMC0_CMD_CONN_EMMC0_CMDSC_P_EMMC0_CMD0
+#defineSC_P_EMMC0_CMD_CONN_NAND_DQSSC_P_EMMC0_CMD1
+#defineSC_P_EMMC0_CMD_LSIO_GPIO4_IO08SC_P_EMMC0_CMD4
+#defineSC_P_EMMC0_DATA0_CONN_EMMC0_DATA0SC_P_EMMC0_DATA00
+#defineSC_P_EMMC0_DATA0_CONN_NAND_DATA00SC_P_EMMC0_DATA01
+#defineSC_P_EMMC0_DATA0_LSIO_GPIO4_IO09SC_P_EMMC0_DATA04
+#defineSC_P_EMMC0_DATA1_CONN_EMMC0_DATA1SC_P_EMMC0_DATA10
+#defineSC_P_EMMC0_DATA1_CONN_NAND_DATA01SC_P_EMMC0_DATA11
+#defineSC_P_EMMC0_DATA1_LSIO_GPIO4_IO10SC_P_EMMC0_DATA14
+#defineSC_P_EMMC0_DATA2_CONN_EMMC0_DATA2SC_P_EMMC0_DATA20
+#defineSC_P_EMMC0_DATA2_CONN_NAND_DATA02SC_P_EMMC0_DATA21
+#defineSC_P_EMMC0_DATA2_LSIO_GPIO4_IO11SC_P_EMMC0_DATA24
+#defineSC_P_EMMC0_DATA3_CONN_EMMC0_DATA3SC_P_EMMC0_DATA30
+#defineSC_P_EMMC0_DATA3_CONN_NAND_DATA03SC_P_EMMC0_DATA31
+#defineSC_P_EMMC0_DATA3_LSIO_GPIO4_IO12SC_P_EMMC0_DATA34
+#defineSC_P_EMMC0_DATA4_CONN_EMMC0_DATA4SC_P_EMMC0_DATA40
+#defineSC_P_EMMC0_DATA4_CONN_NAND_DATA04SC_P_EMMC0_DATA41
+#defineSC_P_EMMC0_DATA4_CONN_EMMC0_WPSC_P_EMMC0_DATA43
+#defineSC_P_EMMC0_DATA4_LSIO_GPIO4_IO13SC_P_EMMC0_DATA44
+#defineSC_P_EMMC0_DATA5_CONN_EMMC0_DATA5SC_P_EMMC0_DATA50
+#defineSC_P_EMMC0_DATA5_CONN_NAND_DATA05SC_P_EMMC0_DATA51
+#defineSC_P_EMMC0_DATA5_CONN_EMMC0_VSELECTSC_P_EMMC0_DATA53
+#defineSC_P_EMMC0_DATA5_LSIO_GPIO4_IO14SC_P_EMMC0_DATA54
+#defineSC_P_EMMC0_DATA6_CONN_EMMC0_DATA6SC_P_EMMC0_DATA60
+#defineSC_P_EMMC0_DATA6_CONN_NAND_DATA06SC_P_EMMC0_DATA61
+#defineSC_P_EMMC0_DATA6_CONN_MLB_CLKSC_P_EMMC0_DATA63
+#defineSC_P_EMMC0_DATA6_LSIO_GPIO4_IO15SC_P_EMMC0_DATA64
+#defineSC_P_EMMC0_DATA7_CONN_EMMC0_DATA7SC_P_EMMC0_DATA70
+#defineSC_P_EMMC0_DATA7_CONN_NAND_DATA07SC_P_EMMC0_DATA71
+#defineSC_P_EMMC0_DATA7_CONN_MLB_SIGSC_P_EMMC0_DATA73
+#defineSC_P_EMMC0_DATA7_LSIO_GPIO4_IO16SC_P_EMMC0_DATA74
+#defineSC_P_EMMC0_STROBE_CONN_EMMC0_STROBESC_P_EMMC0_STROBE0
+#defineSC_P_EMMC0_STROBE_CONN_NAND_CLESC_P_EMMC0_STROBE1
+#defineSC_P_EMMC0_STROBE_CONN_MLB_DATASC_P_EMMC0_STROBE3
+#defineSC_P_EMMC0_STROBE_LSIO_GPIO4_IO17SC_P_EMMC0_STROBE4
+#defineSC_P_EMMC0_RESET_B_CONN_EMMC0_RESET_BSC_P_EMMC0_RESET_B0
+#defineSC_P_EMMC0_RESET_B_CONN_NAND_WP_BSC_P_EMMC0_RESET_B1
+#defineSC_P_EMMC0_RESET_B_LSIO_GPIO4_IO18SC_P_EMMC0_RESET_B4
+#defineSC_P_USDHC1_RESET_B_CONN_USDHC1_RESET_BSC_P_USDHC1_RESET_B0
+#defineSC_P_USDHC1_RESET_B_CONN_NAND_RE_NSC_P_USDHC1_RESET_B1
+#defineSC_P_USDHC1_RESET_B_ADMA_SPI2_SCKSC_P_USDHC1_RESET_B2
+#defineSC_P_USDHC1_RESET_B_LSIO_GPIO4_IO19SC_P_USDHC1_RESET_B4
+#defineSC_P_USDHC1_VSELECT_CONN_USDHC1_VSELECTSC_P_USDHC1_VSELECT0
+#defineSC_P_USDHC1_VSELECT_CONN_NAND_RE_PSC_P_USDHC1_VSELECT1
+#defineSC_P_USDHC1_VSELECT_ADMA_SPI2_SDOSC_P_USDHC1_VSELECT2
+#defineSC_P_USDHC1_VSELECT_CONN_NAND_RE_BSC_P_USDHC1_VSELECT3
+#defineSC_P_USDHC1_VSELECT_LSIO_GPIO4_IO20SC_P_USDHC1_VSELECT4
+#defineSC_P_USDHC1_WP_CONN_USDHC1_WPSC_P_USDHC1_WP0
+#defineSC_P_USDHC1_WP_CONN_NAND_DQS_NSC_P_USDHC1_WP1
+#defineSC_P_USDHC1_WP_ADMA_SPI2_SDISC_P_USDHC1_WP2
+#defineSC_P_USDHC1_WP_LSIO_GPIO4_IO21SC_P_USDHC1_WP4
+#defineSC_P_USDHC1_CD_B_CONN_USDHC1_CD_BSC_P_USDHC1_CD_B0
+#defineSC_P_USDHC1_CD_B_CONN_NAND_DQS_PSC_P_USDHC1_CD_B1
+#defineSC_P_USDHC1_CD_B_ADMA_SPI2_CS0SC_P_USDHC1_CD_B2
+#defineSC_P_USDHC1_CD_B_CONN_NAND_DQSSC_P_USDHC1_CD_B3
+#defineSC_P_USDHC1_CD_B_LSIO_GPIO4_IO22SC_P_USDHC1_CD_B4
+#defineSC_P_USDHC1_CLK_CONN_USDHC1_CLKSC_P_USDHC1_CLK0
+#defineSC_P_USDHC1_CLK_ADMA_UART3_RXSC_P_USDHC1_CLK2
+#defineSC_P_USDHC1_CLK_LSIO_GPIO4_IO23SC_P_USDHC1_CLK4
+#defineSC_P_USDHC1_CMD_CONN_USDHC1_CMDSC_P_USDHC1_CMD0
+#defineSC_P_USDHC1_CMD_CONN_NAND_CE0_BSC_P_USDHC1_CMD1
+#defineSC_P_USDHC1_CMD_ADMA_MQS_RSC_P_USDHC1_CMD2
+#defineSC_P_USDHC1_CMD_LSIO_GPIO4_IO24SC_P_USDHC1_CMD4
+#defineSC_P_USDHC1_DATA0_CONN_USDHC1_DATA0SC_P_USDHC1_DATA00
+#defineSC_P_USDHC1_DATA0_CONN_NAND_CE1_BSC_P_USDHC1_DATA01
+#defineSC_P_USDHC1_DATA0_ADMA_MQS_LSC_P_USDHC1_DATA02
+#defineSC_P_USDHC1_DATA0_LSIO_GPIO4_IO25SC_P_USDHC1_DATA04
+#defineSC_P_USDHC1_DATA1_CONN_USDHC1_DATA1SC_P_USDHC1_DATA10
+#defineSC_P_USDHC1_DATA1_CONN_NAND_RE_BSC_P_USDHC1_DATA11
+#defineSC_P_USDHC1_DATA1_ADMA_UART3_TXSC_P_USDHC1_DATA12
+#defineSC_P_USDHC1_DATA1_LSIO_GPIO4_IO26SC_P_USDHC1_DATA14
+#defineSC_P_USDHC1_DATA2_CONN_USDHC1_DATA2SC_P_USDHC1_DATA20
+#defineSC_P_USDHC1_DATA2_CONN_NAND_WE_BSC_P_USDHC1_DATA21
+#defineSC_P_USDHC1_DATA2_ADMA_UART3_CTS_BSC_P_USDHC1_DATA22
+#defineSC_P_USDHC1_DATA2_LSIO_GPIO4_IO27SC_P_USDHC1_DATA24
+#defineSC_P_USDHC1_DATA3_CONN_USDHC1_DATA3SC_P_USDHC1_DATA30
+#defineSC_P_USDHC1_DATA3_CONN_NAND_ALESC_P_USDHC1_DATA31
+#defineSC_P_USDHC1_DATA3_ADMA_UART3_RTS_BSC_P_USDHC1_DATA32
+#defineSC_P_USDHC1_DATA3_LSIO_GPIO4_IO28SC_P_USDHC1_DATA34
+#defineSC_P_ENET0_RGMII_TXC_CONN_ENET0_RGMII_TXCSC_P_ENET0_RGMII_TXC0
+#defineSC_P_ENET0_RGMII_TXC_CONN_ENET0_RCLK50M_OUTSC_P_ENET0_RGMII_TXC1
+#defineSC_P_ENET0_RGMII_TXC_CONN_ENET0_RCLK50M_INSC_P_ENET0_RGMII_TXC2
+#defineSC_P_ENET0_RGMII_TXC_CONN_NAND_CE1_BSC_P_ENET0_RGMII_TXC3
+#defineSC_P_ENET0_RGMII_TXC_LSIO_GPIO4_IO29SC_P_ENET0_RGMII_TXC4
+#defineSC_P_ENET0_RGMII_TX_CTL_CONN_ENET0_RGMII_TX_CTLSC_P_ENET0_RGMII_TX_CTL0
+#defineSC_P_ENET0_RGMII_TX_CTL_CONN_USDHC1_RESET_BSC_P_ENET0_RGMII_TX_CTL3
+#defineSC_P_ENET0_RGMII_TX_CTL_LSIO_GPIO4_IO30SC_P_ENET0_RGMII_TX_CTL4
+#defineSC_P_ENET0_RGMII_TXD0_CONN_ENET0_RGMII_TXD0SC_P_ENET0_RGMII_TXD00
+#defineSC_P_ENET0_RGMII_TXD0_CONN_USDHC1_VSELECTSC_P_ENET0_RGMII_TXD03
+#defineSC_P_ENET0_RGMII_TXD0_LSIO_GPIO4_IO31SC_P_ENET0_RGMII_TXD04
+#defineSC_P_ENET0_RGMII_TXD1_CONN_ENET0_RGMII_TXD1SC_P_ENET0_RGMII_TXD10
+#defineSC_P_ENET0_RGMII_TXD1_CONN_USDHC1_WPSC_P_ENET0_RGMII_TXD13
+#defineSC_P_ENET0_RGMII_TXD1_LSIO_GPIO5_IO00SC_P_ENET0_RGMII_TXD14
+#defineSC_P_ENET0_RGMII_TXD2_CONN_ENET0_RGMII_TXD2SC_P_ENET0_RGMII_TXD20
+#defineSC_P_ENET0_RGMII_TXD2_CONN_MLB_CLKSC_P_ENET0_RGMII_TXD21
+#defineSC_P_ENET0_RGMII_TXD2_CONN_NAND_CE0_BSC_P_ENET0_RGMII_TXD22
+#defineSC_P_ENET0_RGMII_TXD2_CONN_USDHC1_CD_BSC_P_ENET0_RGMII_TXD23
+#defineSC_P_ENET0_RGMII_TXD2_LSIO_GPIO5_IO01SC_P_ENET0_RGMII_TXD24
+#defineSC_P_ENET0_RGMII_TXD3_CONN_ENET0_RGMII_TXD3SC_P_ENET0_RGMII_TXD30
+#defineSC_P_ENET0_RGMII_TXD3_CONN_MLB_SIGSC_P_ENET0_RGMII_TXD31
+#defineSC_P_ENET0_RGMII_TXD3_CONN_NAND_RE_BSC_P_ENET0_RGMII_TXD32
+#defineSC_P_ENET0_RGMII_TXD3_LSIO_GPIO5_IO02SC_P_ENET0_RGMII_TXD34
+#defineSC_P_ENET0_RGMII_RXC_CONN_ENET0_RGMII_RXCSC_P_ENET0_RGMII_RXC0
+#defineSC_P_ENET0_RGMII_RXC_CONN_MLB_DATASC_P_ENET0_RGMII_RXC1
+#defineSC_P_ENET0_RGMII_RXC_CONN_NAND_WE_BSC_P_ENET0_RGMII_RXC2
+#defineSC_P_ENET0_RGMII_RXC_CONN_USDHC1_CLKSC_P_ENET0_RGMII_RXC3
+#defineSC_P_ENET0_RGMII_RXC_LSIO_GPIO5_IO03SC_P_ENET0_RGMII_RXC4
+#defineSC_P_ENET0_RGMII_RX_CTL_CONN_ENET0_RGMII_RX_CTLSC_P_ENET0_RGMII_RX_CTL0
+#defineSC_P_ENET0_RGMII_RX_CTL_CONN_USDHC1_CMDSC_P_ENET0_RGMII_RX_CTL3
+#defineSC_P_ENET0_RGMII_RX_CTL_LSIO_GPIO5_IO04SC_P_ENET0_RGMII_RX_CTL4
+#defineSC_P_ENET0_RGMII_RXD0_CONN_ENET0_RGMII_RXD0SC_P_ENET0_RGMII_RXD00
+#defineSC_P_ENET0_RGMII_RXD0_CONN_USDHC1_DATA0SC_P_ENET0_RGMII_RXD03
+#defineSC_P_ENET0_RGMII_RXD0_LSIO_GPIO5_IO05SC_P_ENET0_RGMII_RXD04
+#defineSC_P_ENET0_RGMII_RXD1_CONN_ENET0_RGMII_RXD1SC_P_ENET0_RGMII_RXD10
+#defineSC_P_ENET0_RGMII_RXD1_CONN_USDHC1_DATA1SC_P_ENET0_RGMII_RXD13
+#defineSC_P_ENET0_RGMII_RXD1_LSIO_GPIO5_IO06SC_P_ENET0_RGMII_RXD14
+#defineSC_P_ENET0_RGMII_RXD2_CONN_ENET0_RGMII_RXD2SC_P_ENET0_RGMII_RXD20
+#defineSC_P_ENET0_RGMII_RXD2_CONN_ENET0_RMII_RX_ERSC_P_ENET0_RGMII_RXD21
+#defineSC_P_ENET0_RGMII_RXD2_CONN_USDHC1_DATA2SC_P_ENET0_RGMII_RXD23
+#defineSC_P_ENET0_RGMII_RXD2_LSIO_GPIO5_IO07SC_P_ENET0_RGMII_RXD24
+#defineSC_P_ENET0_RGMII_RXD3_CONN_ENET0_RGMII_RXD3SC_P_ENET0_RGMII_RXD30
+#defineSC_P_ENET0_RGMII_RXD3_CONN_NAND_ALESC_P_ENET0_RGMII_RXD32
+#defineSC_P_ENET0_RGMII_RXD3_CONN_USDHC1_DATA3SC_P_ENET0_RGMII_RXD33
+#defineSC_P_ENET0_RGMII_RXD3_LSIO_GPIO5_IO08SC_P_ENET0_RGMII_RXD34
+#defineSC_P_ENET0_REFCLK_125M_25M_CONN_ENET0_REFCLK_125M_25MSC_P_ENET0_REFCLK_125M_25M0
+#defineSC_P_ENET0_REFCLK_125M_25M_CONN_ENET0_PPSSC_P_ENET0_REFCLK_125M_25M1
+#defineSC_P_ENET0_REFCLK_125M_25M_CONN_ENET1_PPSSC_P_ENET0_REFCLK_125M_25M2
+#defineSC_P_ENET0_REFCLK_125M_25M_LSIO_GPIO5_IO09SC_P_ENET0_REFCLK_125M_25M4
+#defineSC_P_ENET0_MDIO_CONN_ENET0_MDIOSC_P_ENET0_MDIO0
+#defineSC_P_ENET0_MDIO_ADMA_I2C3_SDASC_P_ENET0_MDIO1
+#defineSC_P_ENET0_MDIO_CONN_ENET1_MDIOSC_P_ENET0_MDIO2
+#defineSC_P_ENET0_MDIO_LSIO_GPIO5_IO10SC_P_ENET0_MDIO4
+#defineSC_P_ENET0_MDC_CONN_ENET0_MDCSC_P_ENET0_MDC0
+#defineSC_P_ENET0_MDC_ADMA_I2C3_SCLSC_P_ENET0_MDC1
+#defineSC_P_ENET0_MDC_CONN_ENET1_MDCSC_P_ENET0_MDC2
+#defineSC_P_ENET0_MDC_LSIO_GPIO5_IO11SC_P_ENET0_MDC4
+#defineSC_P_ESAI0_FSR_ADMA_ESAI0_FSRSC_P_ESAI0_FSR0
+#defineSC_P_ESAI0_FSR_CONN_ENET1_RCLK50M_OUTSC_P_ESAI0_FSR1
+#defineSC_P_ESAI0_FSR_ADMA_LCDIF_D00SC_P_ESAI0_FSR2
+#defineSC_P_ESAI0_FSR_CONN_ENET1_RGMII_TXCSC_P_ESAI0_FSR3
+#defineSC_P_ESAI0_FSR_CONN_ENET1_RCLK50M_INSC_P_ESAI0_FSR4
+#defineSC_P_ESAI0_FST_ADMA_ESAI0_FSTSC_P_ESAI0_FST0
+#defineSC_P_ESAI0_FST_CONN_MLB_CLKSC_P_ESAI0_FST1
+#defineSC_P_ESAI0_FST_ADMA_LCDIF_D01SC_P_ESAI0_FST2
+#defineSC_P_ESAI0_FST_CONN_ENET1_RGMII_TXD2SC_P_ESAI0_FST3
+#defineSC_P_ESAI0_FST_LSIO_GPIO0_IO01SC_P_ESAI0_FST4
+#defineSC_P_ESAI0_SCKR_ADMA_ESAI0_SCKRSC_P_ESAI0_SCKR0
+#defineSC_P_ESAI0_SCKR_ADMA_LCDIF_D02SC_P_ESAI0_SCKR2
+#defineSC_P_ESAI0_SCKR_CONN_ENET1_RGMII_TX_CTLSC_P_ESAI0_SCKR3
+#defineSC_P_ESAI0_SCKR_LSIO_GPIO0_IO02SC_P_ESAI0_SCKR4
+#defineSC_P_ESAI0_SCKT_ADMA_ESAI0_SCKTSC_P_ESAI0_SCKT0
+#defineSC_P_ESAI0_SCKT_CONN_MLB_SIGSC_P_ESAI0_SCKT1
+#defineSC_P_ESAI0_SCKT_ADMA_LCDIF_D03SC_P_ESAI0_SCKT2
+#defineSC_P_ESAI0_SCKT_CONN_ENET1_RGMII_TXD3SC_P_ESAI0_SCKT3
+#defineSC_P_ESAI0_SCKT_LSIO_GPIO0_IO03SC_P_ESAI0_SCKT4
+#defineSC_P_ESAI0_TX0_ADMA_ESAI0_TX0SC_P_ESAI0_TX00
+#defineSC_P_ESAI0_TX0_CONN_MLB_DATASC_P_ESAI0_TX01
+#defineSC_P_ESAI0_TX0_ADMA_LCDIF_D04SC_P_ESAI0_TX02
+#defineSC_P_ESAI0_TX0_CONN_ENET1_RGMII_RXCSC_P_ESAI0_TX03
+#defineSC_P_ESAI0_TX0_LSIO_GPIO0_IO04SC_P_ESAI0_TX04
+#defineSC_P_ESAI0_TX1_ADMA_ESAI0_TX1SC_P_ESAI0_TX10
+#defineSC_P_ESAI0_TX1_ADMA_LCDIF_D05SC_P_ESAI0_TX12
+#defineSC_P_ESAI0_TX1_CONN_ENET1_RGMII_RXD3SC_P_ESAI0_TX13
+#defineSC_P_ESAI0_TX1_LSIO_GPIO0_IO05SC_P_ESAI0_TX14
+#defineSC_P_ESAI0_TX2_RX3_ADMA_ESAI0_TX2_RX3SC_P_ESAI0_TX2_RX30
+#defineSC_P_ESAI0_TX2_RX3_CONN_ENET1_RMII_RX_ERSC_P_ESAI0_TX2_RX31
+#defineSC_P_ESAI0_TX2_RX3_ADMA_LCDIF_D06SC_P_ESAI0_TX2_RX32
+#defineSC_P_ESAI0_TX2_RX3_CONN_ENET1_RGMII_RXD2SC_P_ESAI0_TX2_RX33
+#defineSC_P_ESAI0_TX2_RX3_LSIO_GPIO0_IO06SC_P_ESAI0_TX2_RX34
+#defineSC_P_ESAI0_TX3_RX2_ADMA_ESAI0_TX3_RX2SC_P_ESAI0_TX3_RX20
+#defineSC_P_ESAI0_TX3_RX2_ADMA_LCDIF_D07SC_P_ESAI0_TX3_RX22
+#defineSC_P_ESAI0_TX3_RX2_CONN_ENET1_RGMII_RXD1SC_P_ESAI0_TX3_RX23
+#defineSC_P_ESAI0_TX3_RX2_LSIO_GPIO0_IO07SC_P_ESAI0_TX3_RX24
+#defineSC_P_ESAI0_TX4_RX1_ADMA_ESAI0_TX4_RX1SC_P_ESAI0_TX4_RX10
+#defineSC_P_ESAI0_TX4_RX1_ADMA_LCDIF_D08SC_P_ESAI0_TX4_RX12
+#defineSC_P_ESAI0_TX4_RX1_CONN_ENET1_RGMII_TXD0SC_P_ESAI0_TX4_RX13
+#defineSC_P_ESAI0_TX4_RX1_LSIO_GPIO0_IO08SC_P_ESAI0_TX4_RX14
+#defineSC_P_ESAI0_TX5_RX0_ADMA_ESAI0_TX5_RX0SC_P_ESAI0_TX5_RX00
+#defineSC_P_ESAI0_TX5_RX0_ADMA_LCDIF_D09SC_P_ESAI0_TX5_RX02
+#defineSC_P_ESAI0_TX5_RX0_CONN_ENET1_RGMII_TXD1SC_P_ESAI0_TX5_RX03
+#defineSC_P_ESAI0_TX5_RX0_LSIO_GPIO0_IO09SC_P_ESAI0_TX5_RX04
+#defineSC_P_SPDIF0_RX_ADMA_SPDIF0_RXSC_P_SPDIF0_RX0
+#defineSC_P_SPDIF0_RX_ADMA_MQS_RSC_P_SPDIF0_RX1
+#defineSC_P_SPDIF0_RX_ADMA_LCDIF_D10SC_P_SPDIF0_RX2
+#defineSC_P_SPDIF0_RX_CONN_ENET1_RGMII_RXD0SC_P_SPDIF0_RX3
+#defineSC_P_SPDIF0_RX_LSIO_GPIO0_IO10SC_P_SPDIF0_RX4
+#defineSC_P_SPDIF0_TX_ADMA_SPDIF0_TXSC_P_SPDIF0_TX0
+#defineSC_P_SPDIF0_TX_ADMA_MQS_LSC_P_SPDIF0_TX1
+#defineSC_P_SPDIF0_TX_ADMA_LCDIF_D11SC_P_SPDIF0_TX2
+#defineSC_P_SPDIF0_TX_CONN_ENET1_RGMII_RX_CTLSC_P_SPDIF0_TX3
+#defineSC_P_SPDIF0_TX_LSIO_GPIO0_IO11SC_P_SPDIF0_TX4
+#defineSC_P_SPDIF0_EXT_CLK_ADMA_SPDIF0_EXT_CLKSC_P_SPDIF0_EXT_CLK0
+#defineSC_P_SPDIF0_EXT_CLK_ADMA_LCDIF_D12SC_P_SPDIF0_EXT_CLK2
+#defineSC_P_SPDIF0_EXT_CLK_CONN_ENET1_REFCLK_125M_25MSC_P_SPDIF0_EXT_CLK3
+#defineSC_P_SPDIF0_EXT_CLK_LSIO_GPIO0_IO12SC_P_SPDIF0_EXT_CLK4
+#defineSC_P_SPI3_SCK_ADMA_SPI3_SCKSC_P_SPI3_SCK0
+#defineSC_P_SPI3_SCK_ADMA_LCDIF_D13SC_P_SPI3_SCK2
+#defineSC_P_SPI3_SCK_LSIO_GPIO0_IO13SC_P_SPI3_SCK4
+#defineSC_P_SPI3_SDO_ADMA_SPI3_SDOSC_P_SPI3_SDO0
+#defineSC_P_SPI3_SDO_ADMA_LCDIF_D14SC_P_SPI3_SDO2
+#defineSC_P_SPI3_SDO_LSIO_GPIO0_IO14SC_P_SPI3_SDO4
+#defineSC_P_SPI3_SDI_ADMA_SPI3_SDISC_P_SPI3_SDI0
+#defineSC_P_SPI3_SDI_ADMA_LCDIF_D15SC_P_SPI3_SDI2
+#defineSC_P_SPI3_SDI_LSIO_GPIO0_IO15SC_P_SPI3_SDI4
+#defineSC_P_SPI3_CS0_ADMA_SPI3_CS0SC_P_SPI3_CS00
+#defineSC_P_SPI3_CS0_ADMA_ACM_MCLK_OUT1SC_P_SPI3_CS01
+#defineSC_P_SPI3_CS0_ADMA_LCDIF_HSYNCSC_P_SPI3_CS02
+#defineSC_P_SPI3_CS0_LSIO_GPIO0_IO16SC_P_SPI3_CS04
+#defineSC_P_SPI3_CS1_ADMA_SPI3_CS1SC_P_SPI3_CS10
+#defineSC_P_SPI3_CS1_ADMA_I2C3_SCLSC_P_SPI3_CS11
+#defineSC_P_SPI3_CS1_ADMA_LCDIF_RESETSC_P_SPI3_CS12
+#defineSC_P_SPI3_CS1_ADMA_SPI2_CS0SC_P_SPI3_CS13
+#defineSC_P_SPI3_CS1_ADMA_LCDIF_D16SC_P_SPI3_CS14
+#defineSC_P_MCLK_IN1_ADMA_ACM_MCLK_IN1SC_P_MCLK_IN10
+#defineSC_P_MCLK_IN1_ADMA_I2C3_SDASC_P_MCLK_IN11
+#defineSC_P_MCLK_IN1_ADMA_LCDIF_ENSC_P_MCLK_IN12
+#defineSC_P_MCLK_IN1_ADMA_SPI2_SCKSC_P_MCLK_IN13
+#defineSC_P_MCLK_IN1_ADMA_LCDIF_D17SC_P_MCLK_IN14
+#defineSC_P_MCLK_IN0_ADMA_ACM_MCLK_IN0SC_P_MCLK_IN00
+#defineSC_P_MCLK_IN0_ADMA_ESAI0_RX_HF_CLKSC_P_MCLK_IN01
+#defineSC_P_MCLK_IN0_ADMA_LCDIF_VSYNCSC_P_MCLK_IN02
+#defineSC_P_MCLK_IN0_ADMA_SPI2_SDISC_P_MCLK_IN03
+#defineSC_P_MCLK_IN0_LSIO_GPIO0_IO19SC_P_MCLK_IN04
+#defineSC_P_MCLK_OUT0_ADMA_ACM_MCLK_OUT0SC_P_MCLK_OUT00
+#defineSC_P_MCLK_OUT0_ADMA_ESAI0_TX_HF_CLKSC_P_MCLK_OUT01
+#defineSC_P_MCLK_OUT0_ADMA_LCDIF_CLKSC_P_MCLK_OUT02
+#defineSC_P_MCLK_OUT0_ADMA_SPI2_SDOSC_P_MCLK_OUT03
+#defineSC_P_MCLK_OUT0_LSIO_GPIO0_IO20SC_P_MCLK_OUT04
+#defineSC_P_UART1_TX_ADMA_UART1_TXSC_P_UART1_TX0
+#defineSC_P_UART1_TX_LSIO_PWM0_OUTSC_P_UART1_TX1
+#defineSC_P_UART1_TX_LSIO_GPT0_CAPTURESC_P_UART1_TX2
+#defineSC_P_UART1_TX_LSIO_GPIO0_IO21SC_P_UART1_TX4
+#defineSC_P_UART1_RX_ADMA_UART1_RXSC_P_UART1_RX0
+#defineSC_P_UART1_RX_LSIO_PWM1_OUTSC_P_UART1_RX1
+#defineSC_P_UART1_RX_LSIO_GPT0_COMPARESC_P_UART1_RX2
+#defineSC_P_UART1_RX_LSIO_GPT1_CLKSC_P_UART1_RX3
+#defineSC_P_UART1_RX_LSIO_GPIO0_IO22SC_P_UART1_RX4
+#defineSC_P_UART1_RTS_B_ADMA_UART1_RTS_BSC_P_UART1_RTS_B0
+#defineSC_P_UART1_RTS_B_LSIO_PWM2_OUTSC_P_UART1_RTS_B1
+#defineSC_P_UART1_RTS_B_ADMA_LCDIF_D16SC_P_UART1_RTS_B2
+#defineSC_P_UART1_RTS_B_LSIO_GPT1_CAPTURESC_P_UART1_RTS_B3
+#defineSC_P_UART1_RTS_B_LSIO_GPT0_CLKSC_P_UART1_RTS_B4
+#defineSC_P_UART1_CTS_B_ADMA_UART1_CTS_BSC_P_UART1_CTS_B0
+#defineSC_P_UART1_CTS_B_LSIO_PWM3_OUTSC_P_UART1_CTS_B1
+#defineSC_P_UART1_CTS_B_ADMA_LCDIF_D17SC_P_UART1_CTS_B2
+#defineSC_P_UART1_CTS_B_LSIO_GPT1_COMPARESC_P_UART1_CTS_B3
+#defineSC_P_UART1_CTS_B_LSIO_GPIO0_IO24SC_P_UART1_CTS_B4
+#defineSC_P_SAI0_TXD_ADMA_SAI0_TXDSC_P_SAI0_TXD0
+#defineSC_P_SAI0_TXD_ADMA_SAI1_RXCSC_P_SAI0_TXD1
+#defineSC_P_SAI0_TXD_ADMA_SPI1_SDOSC_P_SAI0_TXD2
+#defineSC_P_SAI0_TXD_ADMA_LCDIF_D18SC_P_SAI0_TXD3
+#defineSC_P_SAI0_TXD_LSIO_GPIO0_IO25SC_P_SAI0_TXD4
+#defineSC_P_SAI0_TXC_ADMA_SAI0_TXCSC_P_SAI0_TXC0
+#defineSC_P_SAI0_TXC_ADMA_SAI1_TXDSC_P_SAI0_TXC1
+#defineSC_P_SAI0_TXC_ADMA_SPI1_SDISC_P_SAI0_TXC2
+#defineSC_P_SAI0_TXC_ADMA_LCDIF_D19SC_P_SAI0_TXC3
+#defineSC_P_SAI0_TXC_LSIO_GPIO0_IO26SC_P_SAI0_TXC4
+#defineSC_P_SAI0_RXD_ADMA_SAI0_RXDSC_P_SAI0_RXD0
+#defineSC_P_SAI0_RXD_ADMA_SAI1_RXFSSC_P_SAI0_RXD1
+#defineSC_P_SAI0_RXD_ADMA_SPI1_CS0SC_P_SAI0_RXD2
+#defineSC_P_SAI0_RXD_ADMA_LCDIF_D20SC_P_SAI0_RXD3
+#defineSC_P_SAI0_RXD_LSIO_GPIO0_IO27SC_P_SAI0_RXD4
+#defineSC_P_SAI0_TXFS_ADMA_SAI0_TXFSSC_P_SAI0_TXFS0
+#defineSC_P_SAI0_TXFS_ADMA_SPI2_CS1SC_P_SAI0_TXFS1
+#defineSC_P_SAI0_TXFS_ADMA_SPI1_SCKSC_P_SAI0_TXFS2
+#defineSC_P_SAI0_TXFS_LSIO_GPIO0_IO28SC_P_SAI0_TXFS4
+#defineSC_P_SAI1_RXD_ADMA_SAI1_RXDSC_P_SAI1_RXD0
+#defineSC_P_SAI1_RXD_ADMA_SAI0_RXFSSC_P_SAI1_RXD1
+#defineSC_P_SAI1_RXD_ADMA_SPI1_CS1SC_P_SAI1_RXD2
+#defineSC_P_SAI1_RXD_ADMA_LCDIF_D21SC_P_SAI1_RXD3
+#defineSC_P_SAI1_RXD_LSIO_GPIO0_IO29SC_P_SAI1_RXD4
+#defineSC_P_SAI1_RXC_ADMA_SAI1_RXCSC_P_SAI1_RXC0
+#defineSC_P_SAI1_RXC_ADMA_SAI1_TXCSC_P_SAI1_RXC1
+#defineSC_P_SAI1_RXC_ADMA_LCDIF_D22SC_P_SAI1_RXC3
+#defineSC_P_SAI1_RXC_LSIO_GPIO0_IO30SC_P_SAI1_RXC4
+#defineSC_P_SAI1_RXFS_ADMA_SAI1_RXFSSC_P_SAI1_RXFS0
+#defineSC_P_SAI1_RXFS_ADMA_SAI1_TXFSSC_P_SAI1_RXFS1
+#defineSC_P_SAI1_RXFS_ADMA_LCDIF_D23SC_P_SAI1_RXFS3
+#defineSC_P_SAI1_RXFS_LSIO_GPIO0_IO31SC_P_SAI1_RXFS4
+#defineSC_P_SPI2_CS0_ADMA_SPI2_CS0SC_P_SPI2_CS00
+#defineSC_P_SPI2_CS0_LSIO_GPIO1_IO00SC_P_SPI2_CS04
+#defineSC_P_SPI2_SDO_ADMA_SPI2_SDOSC_P_SPI2_SDO0
+#defineSC_P_SPI2_SDO_LSIO_GPIO1_IO01SC_P_SPI2_SDO4
+#defineSC_P_SPI2_SDI_ADMA_SPI2_SDISC_P_SPI2_SDI0
+#defineSC_P_SPI2_SDI_LSIO_GPIO1_IO02SC_P_SPI2_SDI4
+#defineSC_P_SPI2_SCK_ADMA_SPI2_SCKSC_P_SPI2_SCK0
+#defineSC_P_SPI2_SCK_LSIO_GPIO1_IO03SC_P_SPI2_SCK4
+#defineSC_P_SPI0_SCK_ADMA_SPI0_SCKSC_P_SPI0_SCK0
+#defineSC_P_SPI0_SCK_ADMA_SAI0_TXCSC_P_SPI0_SCK1
+#defineSC_P_SPI0_SCK_M40_I2C0_SCLSC_P_SPI0_SCK2
+#defineSC_P_SPI0_SCK_M40_GPIO0_IO00SC_P_SPI0_SCK3
+#defineSC_P_SPI0_SCK_LSIO_GPIO1_IO04SC_P_SPI0_SCK4
+#defineSC_P_SPI0_SDI_ADMA_SPI0_SDISC_P_SPI0_SDI0
+#defineSC_P_SPI0_SDI_ADMA_SAI0_TXDSC_P_SPI0_SDI1
+#defineSC_P_SPI0_SDI_M40_TPM0_CH0SC_P_SPI0_SDI2
+#defineSC_P_SPI0_SDI_M40_GPIO0_IO02SC_P_SPI0_SDI3
+#defineSC_P_SPI0_SDI_LSIO_GPIO1_IO05SC_P_SPI0_SDI4
+#defineSC_P_SPI0_SDO_ADMA_SPI0_SDOSC_P_SPI0_SDO0
+#defineSC_P_SPI0_SDO_ADMA_SAI0_TXFSSC_P_SPI0_SDO1
+#defineSC_P_SPI0_SDO_M40_I2C0_SDASC_P_SPI0_SDO2
+#defineSC_P_SPI0_SDO_M40_GPIO0_IO01SC_P_SPI0_SDO3
+#defineSC_P_SPI0_SDO_LSIO_GPIO1_IO06SC_P_SPI0_SDO4
+#defineSC_P_SPI0_CS1_ADMA_SPI0_CS1SC_P_SPI0_CS10
+#defineSC_P_SPI0_CS1_ADMA_SAI0_RXCSC_P_SPI0_CS11
+#defineSC_P_SPI0_CS1_ADMA_SAI1_TXDSC_P_SPI0_CS12
+#defineSC_P_SPI0_CS1_ADMA_LCD_PWM0_OUTSC_P_SPI0_CS13
+#defineSC_P_SPI0_CS1_LSIO_GPIO1_IO07SC_P_SPI0_CS14
+#defineSC_P_SPI0_CS0_ADMA_SPI0_CS0SC_P_SPI0_CS00
+#defineSC_P_SPI0_CS0_ADMA_SAI0_RXDSC_P_SPI0_CS01
+#defineSC_P_SPI0_CS0_M40_TPM0_CH1SC_P_SPI0_CS02
+#defineSC_P_SPI0_CS0_M40_GPIO0_IO03SC_P_SPI0_CS03
+#defineSC_P_SPI0_CS0_LSIO_GPIO1_IO08SC_P_SPI0_CS04
+#defineSC_P_ADC_IN1_ADMA_ADC_IN1SC_P_ADC_IN10
+#defineSC_P_ADC_IN1_M40_I2C0_SDASC_P_ADC_IN11
+#defineSC_P_ADC_IN1_M40_GPIO0_IO01SC_P_ADC_IN12
+#defineSC_P_ADC_IN1_LSIO_GPIO1_IO09SC_P_ADC_IN14
+#defineSC_P_ADC_IN0_ADMA_ADC_IN0SC_P_ADC_IN00
+#defineSC_P_ADC_IN0_M40_I2C0_SCLSC_P_ADC_IN01
+#defineSC_P_ADC_IN0_M40_GPIO0_IO00SC_P_ADC_IN02
+#defineSC_P_ADC_IN0_LSIO_GPIO1_IO10SC_P_ADC_IN04
+#defineSC_P_ADC_IN3_ADMA_ADC_IN3SC_P_ADC_IN30
+#defineSC_P_ADC_IN3_M40_UART0_TXSC_P_ADC_IN31
+#defineSC_P_ADC_IN3_M40_GPIO0_IO03SC_P_ADC_IN32
+#defineSC_P_ADC_IN3_ADMA_ACM_MCLK_OUT0SC_P_ADC_IN33
+#defineSC_P_ADC_IN3_LSIO_GPIO1_IO11SC_P_ADC_IN34
+#defineSC_P_ADC_IN2_ADMA_ADC_IN2SC_P_ADC_IN20
+#defineSC_P_ADC_IN2_M40_UART0_RXSC_P_ADC_IN21
+#defineSC_P_ADC_IN2_M40_GPIO0_IO02SC_P_ADC_IN22
+#defineSC_P_ADC_IN2_ADMA_ACM_MCLK_IN0SC_P_ADC_IN23
+#defineSC_P_ADC_IN2_LSIO_GPIO1_IO12SC_P_ADC_IN24
+#defineSC_P_ADC_IN5_ADMA_ADC_IN5SC_P_ADC_IN50
+#defineSC_P_ADC_IN5_M40_TPM0_CH1SC_P_ADC_IN51
+#defineSC_P_ADC_IN5_M40_GPIO0_IO05SC_P_ADC_IN52
+#defineSC_P_ADC_IN5_LSIO_GPIO1_IO13SC_P_ADC_IN54
+#defineSC_P_ADC_IN4_ADMA_ADC_IN4SC_P_ADC_IN40
+#defineSC_P_ADC_IN4_M40_TPM0_CH0SC_P_ADC_IN41
+#defineSC_P_ADC_IN4_M40_GPIO0_IO04SC_P_ADC_IN42
+#defineSC_P_ADC_IN4_LSIO_GPIO1_IO14SC_P_ADC_IN44
+#defineSC_P_FLEXCAN0_RX_ADMA_FLEXCAN0_RXSC_P_FLEXCAN0_RX0
+#defineSC_P_FLEXCAN0_RX_ADMA_SAI2_RXCSC_P_FLEXCAN0_RX1
+#defineSC_P_FLEXCAN0_RX_ADMA_UART0_RTS_BSC_P_FLEXCAN0_RX2
+#defineSC_P_FLEXCAN0_RX_ADMA_SAI1_TXCSC_P_FLEXCAN0_RX3
+#defineSC_P_FLEXCAN0_RX_LSIO_GPIO1_IO15SC_P_FLEXCAN0_RX4
+#defineSC_P_FLEXCAN0_TX_ADMA_FLEXCAN0_TXSC_P_FLEXCAN0_TX0
+#defineSC_P_FLEXCAN0_TX_ADMA_SAI2_RXDSC_P_FLEXCAN0_TX1
+#defineSC_P_FLEXCAN0_TX_ADMA_UART0_CTS_BSC_P_FLEXCAN0_TX2
+#defineSC_P_FLEXCAN0_TX_ADMA_SAI1_TXFSSC_P_FLEXCAN0_TX3
+#defineSC_P_FLEXCAN0_TX_LSIO_GPIO1_IO16SC_P_FLEXCAN0_TX4
+#defineSC_P_FLEXCAN1_RX_ADMA_FLEXCAN1_RXSC_P_FLEXCAN1_RX0
+#defineSC_P_FLEXCAN1_RX_ADMA_SAI2_RXFSSC_P_FLEXCAN1_RX1
+#defineSC_P_FLEXCAN1_RX_ADMA_FTM_CH2SC_P_FLEXCAN1_RX2
+#defineSC_P_FLEXCAN1_RX_ADMA_SAI1_TXDSC_P_FLEXCAN1_RX3
+#defineSC_P_FLEXCAN1_RX_LSIO_GPIO1_IO17SC_P_FLEXCAN1_RX4
+#defineSC_P_FLEXCAN1_TX_ADMA_FLEXCAN1_TXSC_P_FLEXCAN1_TX0
+#defineSC_P_FLEXCAN1_TX_ADMA_SAI3_RXCSC_P_FLEXCAN1_TX1
+#defineSC_P_FLEXCAN1_TX_ADMA_DMA0_REQ_IN0SC_P_FLEXCAN1_TX2
+#defineSC_P_FLEXCAN1_TX_ADMA_SAI1_RXDSC_P_FLEXCAN1_TX3
+#defineSC_P_FLEXCAN1_TX_LSIO_GPIO1_IO18SC_P_FLEXCAN1_TX4
+#defineSC_P_FLEXCAN2_RX_ADMA_FLEXCAN2_RXSC_P_FLEXCAN2_RX0
+#defineSC_P_FLEXCAN2_RX_ADMA_SAI3_RXDSC_P_FLEXCAN2_RX1
+#defineSC_P_FLEXCAN2_RX_ADMA_UART3_RXSC_P_FLEXCAN2_RX2
+#defineSC_P_FLEXCAN2_RX_ADMA_SAI1_RXFSSC_P_FLEXCAN2_RX3
+#defineSC_P_FLEXCAN2_RX_LSIO_GPIO1_IO19SC_P_FLEXCAN2_RX4
+#defineSC_P_FLEXCAN2_TX_ADMA_FLEXCAN2_TXSC_P_FLEXCAN2_TX0
+#defineSC_P_FLEXCAN2_TX_ADMA_SAI3_RXFSSC_P_FLEXCAN2_TX1
+#defineSC_P_FLEXCAN2_TX_ADMA_UART3_TXSC_P_FLEXCAN2_TX2
+#defineSC_P_FLEXCAN2_TX_ADMA_SAI1_RXCSC_P_FLEXCAN2_TX3
+#defineSC_P_FLEXCAN2_TX_LSIO_GPIO1_IO20SC_P_FLEXCAN2_TX4
+#defineSC_P_UART0_RX_ADMA_UART0_RXSC_P_UART0_RX0
+#defineSC_P_UART0_RX_ADMA_MQS_RSC_P_UART0_RX1
+#defineSC_P_UART0_RX_ADMA_FLEXCAN0_RXSC_P_UART0_RX2
+#defineSC_P_UART0_RX_SCU_UART0_RXSC_P_UART0_RX3
+#defineSC_P_UART0_RX_LSIO_GPIO1_IO21SC_P_UART0_RX4
+#defineSC_P_UART0_TX_ADMA_UART0_TXSC_P_UART0_TX0
+#defineSC_P_UART0_TX_ADMA_MQS_LSC_P_UART0_TX1
+#defineSC_P_UART0_TX_ADMA_FLEXCAN0_TXSC_P_UART0_TX2
+#defineSC_P_UART0_TX_SCU_UART0_TXSC_P_UART0_TX3
+#defineSC_P_UART0_TX_LSIO_GPIO1_IO22SC_P_UART0_TX4
+#defineSC_P_UART2_TX_ADMA_UART2_TXSC_P_UART2_TX0
+#defineSC_P_UART2_TX_ADMA_FTM_CH1SC_P_UART2_TX1
+#defineSC_P_UART2_TX_ADMA_FLEXCAN1_TXSC_P_UART2_TX2
+#defineSC_P_UART2_TX_LSIO_GPIO1_IO23SC_P_UART2_TX4
+#defineSC_P_UART2_RX_ADMA_UART2_RXSC_P_UART2_RX0
+#defineSC_P_UART2_RX_ADMA_FTM_CH0SC_P_UART2_RX1
+#defineSC_P_UART2_RX_ADMA_FLEXCAN1_RXSC_P_UART2_RX2
+#defineSC_P_UART2_RX_LSIO_GPIO1_IO24SC_P_UART2_RX4
+#defineSC_P_MIPI_DSI0_I2C0_SCL_MIPI_DSI0_I2C0_SCLSC_P_MIPI_DSI0_I2C0_SCL0
+#defineSC_P_MIPI_DSI0_I2C0_SCL_MIPI_DSI1_GPIO0_IO02SC_P_MIPI_DSI0_I2C0_SCL1
+#defineSC_P_MIPI_DSI0_I2C0_SCL_LSIO_GPIO1_IO25SC_P_MIPI_DSI0_I2C0_SCL4
+#defineSC_P_MIPI_DSI0_I2C0_SDA_MIPI_DSI0_I2C0_SDASC_P_MIPI_DSI0_I2C0_SDA0
+#defineSC_P_MIPI_DSI0_I2C0_SDA_MIPI_DSI1_GPIO0_IO03SC_P_MIPI_DSI0_I2C0_SDA1
+#defineSC_P_MIPI_DSI0_I2C0_SDA_LSIO_GPIO1_IO26SC_P_MIPI_DSI0_I2C0_SDA4
+#defineSC_P_MIPI_DSI0_GPIO0_00_MIPI_DSI0_GPIO0_IO00SC_P_MIPI_DSI0_GPIO0_000
+#defineSC_P_MIPI_DSI0_GPIO0_00_ADMA_I2C1_SCLSC_P_MIPI_DSI0_GPIO0_001
+#defineSC_P_MIPI_DSI0_GPIO0_00_MIPI_DSI0_PWM0_OUTSC_P_MIPI_DSI0_GPIO0_002
+#defineSC_P_MIPI_DSI0_GPIO0_00_LSIO_GPIO1_IO27SC_P_MIPI_DSI0_GPIO0_004
+#defineSC_P_MIPI_DSI0_GPIO0_01_MIPI_DSI0_GPIO0_IO01SC_P_MIPI_DSI0_GPIO0_010
+#defineSC_P_MIPI_DSI0_GPIO0_01_ADMA_I2C1_SDASC_P_MIPI_DSI0_GPIO0_011
+#defineSC_P_MIPI_DSI0_GPIO0_01_LSIO_GPIO1_IO28SC_P_MIPI_DSI0_GPIO0_014
+#defineSC_P_MIPI_DSI1_I2C0_SCL_MIPI_DSI1_I2C0_SCLSC_P_MIPI_DSI1_I2C0_SCL0
+#defineSC_P_MIPI_DSI1_I2C0_SCL_MIPI_DSI0_GPIO0_IO02SC_P_MIPI_DSI1_I2C0_SCL1
+#defineSC_P_MIPI_DSI1_I2C0_SCL_LSIO_GPIO1_IO29SC_P_MIPI_DSI1_I2C0_SCL4
+#defineSC_P_MIPI_DSI1_I2C0_SDA_MIPI_DSI1_I2C0_SDASC_P_MIPI_DSI1_I2C0_SDA0
+#defineSC_P_MIPI_DSI1_I2C0_SDA_MIPI_DSI0_GPIO0_IO03SC_P_MIPI_DSI1_I2C0_SDA1
+#defineSC_P_MIPI_DSI1_I2C0_SDA_LSIO_GPIO1_IO30SC_P_MIPI_DSI1_I2C0_SDA4
+#defineSC_P_MIPI_DSI1_GPIO0_00_MIPI_DSI1_GPIO0_IO00SC_P_MIPI_DSI1_GPIO0_000
+#defineSC_P_MIPI_DSI1_GPIO0_00_ADMA_I2C2_SCLSC_P_MIPI_DSI1_GPIO0_001
+#defineSC_P_MIPI_DSI1_GPIO0_00_MIPI_DSI1_PWM0_OUTSC_P_MIPI_DSI1_GPIO0_002
+#defineSC_P_MIPI_DSI1_GPIO0_00_LSIO_GPIO1_IO31SC_P_MIPI_DSI1_GPIO0_004
+#defineSC_P_MIPI_DSI1_GPIO0_01_MIPI_DSI1_GPIO0_IO01SC_P_MIPI_DSI1_GPIO0_010
+#defineSC_P_MIPI_DSI1_GPIO0_01_ADMA_I2C2_SDASC_P_MIPI_DSI1_GPIO0_011
+#defineSC_P_MIPI_DSI1_GPIO0_01_LSIO_GPIO2_IO00SC_P_MIPI_DSI1_GPIO0_014
+#defineSC_P_JTAG_TRST_B_SCU_JTAG_TRST_BSC_P_JTAG_TRST_B0
+#defineSC_P_JTAG_TRST_B_SCU_WDOG0_WDOG_OUTSC_P_JTAG_TRST_B1
+#defineSC_P_PMIC_I2C_SCL_SCU_PMIC_I2C_SCLSC_P_PMIC_I2C_SCL0
+#defineSC_P_PMIC_I2C_SCL_SCU_GPIO0_IOXX_PMIC_A35_ONSC_P_PMIC_I2C_SCL1
+#defineSC_P_PMIC_I2C_SCL_LSIO_GPIO2_IO01SC_P_PMIC_I2C_SCL4
+#defineSC_P_PMIC_I2C_SDA_SCU_PMIC_I2C_SDASC_P_PMIC_I2C_SDA0
+#defineSC_P_PMIC_I2C_SDA_SCU_GPIO0_IOXX_PMIC_GPU_ONSC_P_PMIC_I2C_SDA1
+#defineSC_P_PMIC_I2C_SDA_LSIO_GPIO2_IO02SC_P_PMIC_I2C_SDA4
+#defineSC_P_PMIC_INT_B_SCU_DSC_PMIC_INT_BSC_P_PMIC_INT_B0
+#defineSC_P_SCU_GPIO0_00_SCU_GPIO0_IO00SC_P_SCU_GPIO0_000
+#defineSC_P_SCU_GPIO0_00_SCU_UART0_RXSC_P_SCU_GPIO0_001
+#defineSC_P_SCU_GPIO0_00_M40_UART0_RXSC_P_SCU_GPIO0_002
+#defineSC_P_SCU_GPIO0_00_ADMA_UART3_RXSC_P_SCU_GPIO0_003
+#defineSC_P_SCU_GPIO0_00_LSIO_GPIO2_IO03SC_P_SCU_GPIO0_004
+#defineSC_P_SCU_GPIO0_01_SCU_GPIO0_IO01SC_P_SCU_GPIO0_010
+#defineSC_P_SCU_GPIO0_01_SCU_UART0_TXSC_P_SCU_GPIO0_011
+#defineSC_P_SCU_GPIO0_01_M40_UART0_TXSC_P_SCU_GPIO0_012
+#defineSC_P_SCU_GPIO0_01_ADMA_UART3_TXSC_P_SCU_GPIO0_013
+#defineSC_P_SCU_GPIO0_01_SCU_WDOG0_WDOG_OUTSC_P_SCU_GPIO0_014
+#defineSC_P_SCU_PMIC_STANDBY_SCU_DSC_PMIC_STANDBYSC_P_SCU_PMIC_STANDBY0
+#defineSC_P_SCU_BOOT_MODE0_SCU_DSC_BOOT_MODE0SC_P_SCU_BOOT_MODE00
+#defineSC_P_SCU_BOOT_MODE1_SCU_DSC_BOOT_MODE1SC_P_SCU_BOOT_MODE10
+#defineSC_P_SCU_BOOT_MODE2_SCU_DSC_BOOT_MODE2SC_P_SCU_BOOT_MODE20
+#defineSC_P_SCU_BOOT_MODE2_SCU_PMIC_I2C_SDASC_P_SCU_BOOT_MODE21
+#defineSC_P_SCU_BOOT_MODE3_SCU_DSC_BOOT_MODE3SC_P_SCU_BOOT_MODE30
+#defineSC_P_SCU_BOOT_MODE3_SCU_PMIC_I2C_SCLSC_P_SCU_BOOT_MODE31
+#defineSC_P_SCU_BOOT_MODE3_SCU_DSC_RTC_CLOCK_OUTPUT_32KSC_P_SCU_BOOT_MODE33
+#defineSC_P_CSI_D00_CI_PI_D02SC_P_CSI_D000
+#defineSC_P_CSI_D00_ADMA_SAI0_RXCSC_P_CSI_D002
+#defineSC_P_CSI_D01_CI_PI_D03SC_P_CSI_D010
+#defineSC_P_CSI_D01_ADMA_SAI0_RXDSC_P_CSI_D012
+#defineSC_P_CSI_D02_CI_PI_D04SC_P_CSI_D020
+#defineSC_P_CSI_D02_ADMA_SAI0_RXFSSC_P_CSI_D022
+#defineSC_P_CSI_D03_CI_PI_D05SC_P_CSI_D030
+#defineSC_P_CSI_D03_ADMA_SAI2_RXCSC_P_CSI_D032
+#defineSC_P_CSI_D04_CI_PI_D06SC_P_CSI_D040
+#defineSC_P_CSI_D04_ADMA_SAI2_RXDSC_P_CSI_D042
+#defineSC_P_CSI_D05_CI_PI_D07SC_P_CSI_D050
+#defineSC_P_CSI_D05_ADMA_SAI2_RXFSSC_P_CSI_D052
+#defineSC_P_CSI_D06_CI_PI_D08SC_P_CSI_D060
+#defineSC_P_CSI_D06_ADMA_SAI3_RXCSC_P_CSI_D062
+#defineSC_P_CSI_D07_CI_PI_D09SC_P_CSI_D070
+#defineSC_P_CSI_D07_ADMA_SAI3_RXDSC_P_CSI_D072
+#defineSC_P_CSI_HSYNC_CI_PI_HSYNCSC_P_CSI_HSYNC0
+#defineSC_P_CSI_HSYNC_CI_PI_D00SC_P_CSI_HSYNC1
+#defineSC_P_CSI_HSYNC_ADMA_SAI3_RXFSSC_P_CSI_HSYNC2
+#defineSC_P_CSI_VSYNC_CI_PI_VSYNCSC_P_CSI_VSYNC0
+#defineSC_P_CSI_VSYNC_CI_PI_D01SC_P_CSI_VSYNC1
+#defineSC_P_CSI_PCLK_CI_PI_PCLKSC_P_CSI_PCLK0
+#defineSC_P_CSI_PCLK_MIPI_CSI0_I2C0_SCLSC_P_CSI_PCLK1
+#defineSC_P_CSI_PCLK_ADMA_SPI1_SCKSC_P_CSI_PCLK3
+#defineSC_P_CSI_PCLK_LSIO_GPIO3_IO00SC_P_CSI_PCLK4
+#defineSC_P_CSI_MCLK_CI_PI_MCLKSC_P_CSI_MCLK0
+#defineSC_P_CSI_MCLK_MIPI_CSI0_I2C0_SDASC_P_CSI_MCLK1
+#defineSC_P_CSI_MCLK_ADMA_SPI1_SDOSC_P_CSI_MCLK3
+#defineSC_P_CSI_MCLK_LSIO_GPIO3_IO01SC_P_CSI_MCLK4
+#defineSC_P_CSI_EN_CI_PI_ENSC_P_CSI_EN0
+#defineSC_P_CSI_EN_CI_PI_I2C_SCLSC_P_CSI_EN1
+#defineSC_P_CSI_EN_ADMA_I2C3_SCLSC_P_CSI_EN2
+#defineSC_P_CSI_EN_ADMA_SPI1_SDISC_P_CSI_EN3
+#defineSC_P_CSI_EN_LSIO_GPIO3_IO02SC_P_CSI_EN4
+#defineSC_P_CSI_RESET_CI_PI_RESETSC_P_CSI_RESET0
+#defineSC_P_CSI_RESET_CI_PI_I2C_SDASC_P_CSI_RESET1
+#defineSC_P_CSI_RESET_ADMA_I2C3_SDASC_P_CSI_RESET2
+#defineSC_P_CSI_RESET_ADMA_SPI1_CS0SC_P_CSI_RESET3
+#defineSC_P_CSI_RESET_LSIO_GPIO3_IO03SC_P_CSI_RESET4
+#defineSC_P_MIPI_CSI0_MCLK_OUT_MIPI_CSI0_ACM_MCLK_OUTSC_P_MIPI_CSI0_MCLK_OUT0
+#defineSC_P_MIPI_CSI0_MCLK_OUT_LSIO_GPIO3_IO04SC_P_MIPI_CSI0_MCLK_OUT4
+#defineSC_P_MIPI_CSI0_I2C0_SCL_MIPI_CSI0_I2C0_SCLSC_P_MIPI_CSI0_I2C0_SCL0
+#defineSC_P_MIPI_CSI0_I2C0_SCL_MIPI_CSI0_GPIO0_IO02SC_P_MIPI_CSI0_I2C0_SCL1
+#defineSC_P_MIPI_CSI0_I2C0_SCL_LSIO_GPIO3_IO05SC_P_MIPI_CSI0_I2C0_SCL4
+#defineSC_P_MIPI_CSI0_I2C0_SDA_MIPI_CSI0_I2C0_SDASC_P_MIPI_CSI0_I2C0_SDA0
+#defineSC_P_MIPI_CSI0_I2C0_SDA_MIPI_CSI0_GPIO0_IO03SC_P_MIPI_CSI0_I2C0_SDA1
+#defineSC_P_MIPI_CSI0_I2C0_SDA_LSIO_GPIO3_IO06SC_P_MIPI_CSI0_I2C0_SDA4
+#defineSC_P_MIPI_CSI0_GPIO0_01_MIPI_CSI0_GPIO0_IO01SC_P_MIPI_CSI0_GPIO0_010
+#defineSC_P_MIPI_CSI0_GPIO0_01_ADMA_I2C0_SDASC_P_MIPI_CSI0_GPIO0_011
+#defineSC_P_MIPI_CSI0_GPIO0_01_LSIO_GPIO3_IO07SC_P_MIPI_CSI0_GPIO0_014
+#defineSC_P_MIPI_CSI0_GPIO0_00_MIPI_CSI0_GPIO0_IO00SC_P_MIPI_CSI0_GPIO0_000
+#defineSC_P_MIPI_CSI0_GPIO0_00_ADMA_I2C0_SCLSC_P_MIPI_CSI0_GPIO0_001
+#defineSC_P_MIPI_CSI0_GPIO0_00_LSIO_GPIO3_IO08SC_P_MIPI_CSI0_GPIO0_004
+#defineSC_P_QSPI0A_DATA0_LSIO_QSPI0A_DATA0SC_P_QSPI0A_DATA00
+#defineSC_P_QSPI0A_DATA0_LSIO_GPIO3_IO09SC_P_QSPI0A_DATA04
+#defineSC_P_QSPI0A_DATA1_LSIO_QSPI0A_DATA1SC_P_QSPI0A_DATA10
+#defineSC_P_QSPI0A_DATA1_LSIO_GPIO3_IO10SC_P_QSPI0A_DATA14
+#defineSC_P_QSPI0A_DATA2_LSIO_QSPI0A_DATA2SC_P_QSPI0A_DATA20
+#defineSC_P_QSPI0A_DATA2_LSIO_GPIO3_IO11SC_P_QSPI0A_DATA24
+#defineSC_P_QSPI0A_DATA3_LSIO_QSPI0A_DATA3SC_P_QSPI0A_DATA30
+#defineSC_P_QSPI0A_DATA3_LSIO_GPIO3_IO12SC_P_QSPI0A_DATA34
+#defineSC_P_QSPI0A_DQS_LSIO_QSPI0A_DQSSC_P_QSPI0A_DQS0
+#defineSC_P_QSPI0A_DQS_LSIO_GPIO3_IO13SC_P_QSPI0A_DQS4
+#defineSC_P_QSPI0A_SS0_B_LSIO_QSPI0A_SS0_BSC_P_QSPI0A_SS0_B0
+#defineSC_P_QSPI0A_SS0_B_LSIO_GPIO3_IO14SC_P_QSPI0A_SS0_B4
+#defineSC_P_QSPI0A_SS1_B_LSIO_QSPI0A_SS1_BSC_P_QSPI0A_SS1_B0
+#defineSC_P_QSPI0A_SS1_B_LSIO_GPIO3_IO15SC_P_QSPI0A_SS1_B4
+#defineSC_P_QSPI0A_SCLK_LSIO_QSPI0A_SCLKSC_P_QSPI0A_SCLK0
+#defineSC_P_QSPI0A_SCLK_LSIO_GPIO3_IO16SC_P_QSPI0A_SCLK4
+#defineSC_P_QSPI0B_SCLK_LSIO_QSPI0B_SCLKSC_P_QSPI0B_SCLK0
+#defineSC_P_QSPI0B_SCLK_LSIO_QSPI1A_SCLKSC_P_QSPI0B_SCLK1
+#defineSC_P_QSPI0B_SCLK_LSIO_KPP0_COL0SC_P_QSPI0B_SCLK2
+#defineSC_P_QSPI0B_SCLK_LSIO_GPIO3_IO17SC_P_QSPI0B_SCLK4
+#defineSC_P_QSPI0B_DATA0_LSIO_QSPI0B_DATA0SC_P_QSPI0B_DATA00
+#defineSC_P_QSPI0B_DATA0_LSIO_QSPI1A_DATA0SC_P_QSPI0B_DATA01
+#defineSC_P_QSPI0B_DATA0_LSIO_KPP0_COL1SC_P_QSPI0B_DATA02
+#defineSC_P_QSPI0B_DATA0_LSIO_GPIO3_IO18SC_P_QSPI0B_DATA04
+#defineSC_P_QSPI0B_DATA1_LSIO_QSPI0B_DATA1SC_P_QSPI0B_DATA10
+#defineSC_P_QSPI0B_DATA1_LSIO_QSPI1A_DATA1SC_P_QSPI0B_DATA11
+#defineSC_P_QSPI0B_DATA1_LSIO_KPP0_COL2SC_P_QSPI0B_DATA12
+#defineSC_P_QSPI0B_DATA1_LSIO_GPIO3_IO19SC_P_QSPI0B_DATA14
+#defineSC_P_QSPI0B_DATA2_LSIO_QSPI0B_DATA2SC_P_QSPI0B_DATA20
+#defineSC_P_QSPI0B_DATA2_LSIO_QSPI1A_DATA2SC_P_QSPI0B_DATA21
+#defineSC_P_QSPI0B_DATA2_LSIO_KPP0_COL3SC_P_QSPI0B_DATA22
+#defineSC_P_QSPI0B_DATA2_LSIO_GPIO3_IO20SC_P_QSPI0B_DATA24
+#defineSC_P_QSPI0B_DATA3_LSIO_QSPI0B_DATA3SC_P_QSPI0B_DATA30
+#defineSC_P_QSPI0B_DATA3_LSIO_QSPI1A_DATA3SC_P_QSPI0B_DATA31
+#defineSC_P_QSPI0B_DATA3_LSIO_KPP0_ROW0SC_P_QSPI0B_DATA32
+#defineSC_P_QSPI0B_DATA3_LSIO_GPIO3_IO21SC_P_QSPI0B_DATA34
+#defineSC_P_QSPI0B_DQS_LSIO_QSPI0B_DQSSC_P_QSPI0B_DQS0
+#defineSC_P_QSPI0B_DQS_LSIO_QSPI1A_DQSSC_P_QSPI0B_DQS1
+#defineSC_P_QSPI0B_DQS_LSIO_KPP0_ROW1SC_P_QSPI0B_DQS2
+#defineSC_P_QSPI0B_DQS_LSIO_GPIO3_IO22SC_P_QSPI0B_DQS4
+#defineSC_P_QSPI0B_SS0_B_LSIO_QSPI0B_SS0_BSC_P_QSPI0B_SS0_B0
+#defineSC_P_QSPI0B_SS0_B_LSIO_QSPI1A_SS0_BSC_P_QSPI0B_SS0_B1
+#defineSC_P_QSPI0B_SS0_B_LSIO_KPP0_ROW2SC_P_QSPI0B_SS0_B2
+#defineSC_P_QSPI0B_SS0_B_LSIO_GPIO3_IO23SC_P_QSPI0B_SS0_B4
+#defineSC_P_QSPI0B_SS1_B_LSIO_QSPI0B_SS1_BSC_P_QSPI0B_SS1_B0
+#defineSC_P_QSPI0B_SS1_B_LSIO_QSPI1A_SS1_BSC_P_QSPI0B_SS1_B1
+#defineSC_P_QSPI0B_SS1_B_LSIO_KPP0_ROW3SC_P_QSPI0B_SS1_B2
+#defineSC_P_QSPI0B_SS1_B_LSIO_GPIO3_IO24SC_P_QSPI0B_SS1_B4include/dt-bindings/pinctrl/pads-imx8qxp.h new file +4
-0Lines of this file are not shown. View the raw message.
include/dt-bindings/soc/imx_rsrc.h new file +560
-1Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
2.14.1
Part of the diff is not shown here. View the raw message.
Peng Fan
reviewerPATCH 2/41 imx: add Kconfig entry for i.MX8
In reply to Peng FanAdd Kconfig entry for i.MX8 and i.MX8QXP
Select HAVE_SC_FIRMWARE for i.MX8QXP
--- arch/arm/Kconfig | 8 ++++++++ arch/arm/mach-imx/Makefile | 1 + arch/arm/mach-imx/imx8/Kconfig | 13 +++++++++++++ 3 files changed, 22 insertions(+) create mode 100644 arch/arm/mach-imx/imx8/Kconfig
arch/arm/Kconfig +8 -0
@@ -635,6 +635,12 @@ config ARCH_MESON targeted at media players and tablet computers. We currently support the S905 (GXBaby) 64-bit SoC. +config ARCH_IMX8 + bool "NXP i.MX8 platform" + select ARM64 + select DM + select OF_CONTROL + config ARCH_MX8M bool "NXP i.MX8M platform" select ARM64
@@ -1325,6 +1331,8 @@ source "arch/arm/mach-imx/mx7/Kconfig" source "arch/arm/mach-imx/mx7ulp/Kconfig" +source "arch/arm/mach-imx/imx8/Kconfig" + source "arch/arm/mach-imx/mx8m/Kconfig" source "arch/arm/mach-imx/mxs/Kconfig"
arch/arm/mach-imx/Makefile +1 -0
@@ -141,3 +141,4 @@ obj-$(CONFIG_MX6) += mx6/ obj-$(CONFIG_MX7) += mx7/ obj-$(CONFIG_ARCH_MX7ULP) += mx7ulp/ obj-$(CONFIG_MX8M) += mx8m/ +obj-$(CONFIG_ARCH_IMX8) += imx8/
arch/arm/mach-imx/imx8/Kconfig new file +13 -0
@@ -0,0 +1,13 @@ +if ARCH_IMX8 + +config IMX8 + bool + default y + +config IMX8QXP + bool + +config SYS_SOC + default "imx8" + +endif
Signature · 1 line
2.14.1
PATCH 2/41 imx: add Kconfig entry for i.MX8
Quoted 56 lines · Peng Fan
Add
Kconfigentry for i.MX8 and i.MX8QXP
SelectHAVE_SC_FIRMWAREfor i.MX8QXPSigned-off-by Peng Fan <[email protected]>--- arch/arm/Kconfig | 8 ++++++++ arch/arm/mach-imx/Makefile | 1 + arch/arm/mach-imx/imx8/Kconfig | 13 +++++++++++++ 3 files changed, 22 insertions(+) create mode 100644 arch/arm/mach-imx/imx8/Kconfigarch/arm/Kconfig +8
-0@@ -635,6 +635,12 @@ config ARCH_MESON targeted at media players and tablet computers. We currently support the S905 (GXBaby) 64-bit SoC. +config ARCH_IMX8 + bool "NXP i.MX8 platform" + select ARM64 + select DM + select OF_CONTROL + config ARCH_MX8M bool "NXP i.MX8M platform" select ARM64@@ -1325,6 +1331,8 @@ source "arch/arm/mach-imx/mx7/Kconfig" source "arch/arm/mach-imx/mx7ulp/Kconfig" +source "arch/arm/mach-imx/imx8/Kconfig" + source "arch/arm/mach-imx/mx8m/Kconfig" source "arch/arm/mach-imx/mxs/Kconfig"arch/arm/mach-imx/Makefile +1
-0@@ -141,3 +141,4 @@ obj-$(CONFIG_MX6) += mx6/ obj-$(CONFIG_MX7) += mx7/ obj-$(CONFIG_ARCH_MX7ULP) += mx7ulp/ obj-$(CONFIG_MX8M) += mx8m/ +obj-$(CONFIG_ARCH_IMX8) += imx8/arch/arm/mach-imx/imx8/Kconfig new file +3
-0@@ -0,0 +1,13 @@ +if ARCH_IMX8 + +config IMX8
arch/arm/mach-imx/imx8/Kconfig line 13
Quoted 10 lines
arch/arm/mach-imx/imx8/Kconfig new file +10
-0+ bool + default y + +config IMX8QXP + bool + +config SYS_SOC + default "imx8" + +endif
Just to be sure. We introduce several switches:
ARCH_IMX8 ==> architecture IMX8 ==> set for all SOC variants IMX8QXP ==> specific variant
then we will have, as usual, a TARGET_ for the board. This reflects the MX6, yes (but why do you introduce a "I" in the name ? Shouldn't we use MX8 instead of IMX8 ?).
Best regards,
Stefano Babic
Signature · 5 lines
===================================================================== DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sbabic at denx.de =====================================================================
Peng Fan
reviewerPATCH 2/41 imx: add Kconfig entry for i.MX8
Hi Stefano,
Quoted 78 lines
-----Original Message-----
From: Stefano Babic [mailto:sbabic at denx.de]
Sent: 2018年6月27日 16:20
To: Peng Fan <[email protected]>; sbabic at denx.de; Fabio Estevam <[email protected]>
Cc: u-boot at lists.denx.de
Subject: Re: [PATCH 02/41] imx: addKconfigentry for i.MX8Quoted 56 lines · Peng Fan
Add
Kconfigentry for i.MX8 and i.MX8QXP SelectHAVE_SC_FIRMWAREfor i.MX8QXPSigned-off-by Peng Fan <[email protected]>--- arch/arm/Kconfig | 8 ++++++++ arch/arm/mach-imx/Makefile | 1 + arch/arm/mach-imx/imx8/Kconfig | 13 +++++++++++++ 3 files changed, 22 insertions(+) create mode 100644 arch/arm/mach-imx/imx8/Kconfigarch/arm/Kconfig index renamed from arch/arm/Kconfig +0
-0
3e05f79f63..0406c1dada100644arch/arm/Kconfig +8
-0@@ -635,6 +635,12 @@ config ARCH_MESON targeted at media players and tablet computers. We currently support the S905 (GXBaby) 64-bit SoC. +config ARCH_IMX8 + bool "NXP i.MX8 platform" + select ARM64 + select DM + select OF_CONTROL + config ARCH_MX8M bool "NXP i.MX8M platform" select ARM64@@ -1325,6 +1331,8 @@ source "arch/arm/mach-imx/mx7/Kconfig" source "arch/arm/mach-imx/mx7ulp/Kconfig" +source "arch/arm/mach-imx/imx8/Kconfig" + source "arch/arm/mach-imx/mx8m/Kconfig" source "arch/arm/mach-imx/mxs/Kconfig"arch/arm/mach-imx/Makefile +1
-0@@ -141,3 +141,4 @@ obj-$(CONFIG_MX6) += mx6/ obj-$(CONFIG_MX7) += mx7/ obj-$(CONFIG_ARCH_MX7ULP) += mx7ulp/ obj-$(CONFIG_MX8M) += mx8m/ +obj-$(CONFIG_ARCH_IMX8) += imx8/(quoted diff) +0
-0b/arch/arm/mach-imx/imx8/Kconfig new file mode 100644 index 0000000000..58cb19946f
arch/arm/mach-imx/imx8/Kconfig new file +3
-0@@ -0,0 +1,13 @@ +if ARCH_IMX8 + +config IMX8arch/arm/mach-imx/imx8/Kconfig line 13
Quoted 10 lines
arch/arm/mach-imx/imx8/Kconfig new file +10
-0+ bool + default y + +config IMX8QXP + bool + +config SYS_SOC + default "imx8" + +endifJust to be sure. We introduce several switches:
Quoted 7 lines
ARCH_IMX8 ==> architecture IMX8 ==> set for all SOC variants IMX8QXP ==> specific variantthen we will have, as usual, a
TARGET_for the board. This reflects the MX6, yes (but why do you introduce a "I" in the name ? Shouldn't we use
MX8 instead of IMX8 ?).
We are asked to use IMX8 to better reflect i.MX8 from marketing team. So we switch to use IMX8 for i.MX8 Family.
Thanks,
Peng.
Quoted 12 lines
Best regards,
Stefano Babic--
================================================================
=====
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sbabic at denx.de
================================================================
=====
Peng Fan
reviewerPATCH 3/41 arm: build mach-imx for i.MX8
In reply to Peng FanBuild mach-imx for i.MX8
--- arch/arm/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm/Makefile +1 -1
@@ -101,7 +101,7 @@ ifneq (,$(CONFIG_MX23)$(CONFIG_MX28)$(CONFIG_MX35)$(filter $(SOC), mx25 mx5 mx6 libs-y += arch/arm/mach-imx/ endif else -ifneq (,$(filter $(SOC), mx25 mx27 mx5 mx6 mx7 mx7ulp mx31 mx35 mxs mx8m vf610)) +ifneq (,$(filter $(SOC), mx25 mx27 mx5 mx6 mx7 mx7ulp mx31 mx35 mxs mx8m imx8 vf610)) libs-y += arch/arm/mach-imx/ endif endif
Signature · 1 line
2.14.1
Peng Fan
reviewerPATCH 4/41 imx8: add IPC communication support between ACore and SCU
In reply to Peng FanThe IPC communication is based on Message Unit(MU) between ACore and SCU.
Add the lowlevel MU initialization, message send/receive code.
--- arch/arm/include/asm/arch-imx8/fsl_mu_hal.h | 54 +++++++++++++++ arch/arm/include/asm/arch-imx8/sci/sci.h | 39 +++++++++++ arch/arm/mach-imx/imx8/Makefile | 1 + arch/arm/mach-imx/imx8/fsl_mu_hal.c | 28 ++++++++ arch/arm/mach-imx/imx8/sci/ipc.c | 100 ++++++++++++++++++++++++++++ 5 files changed, 222 insertions(+) create mode 100644 arch/arm/include/asm/arch-imx8/fsl_mu_hal.h create mode 100644 arch/arm/include/asm/arch-imx8/sci/sci.h create mode 100644 arch/arm/mach-imx/imx8/fsl_mu_hal.c create mode 100644 arch/arm/mach-imx/imx8/sci/ipc.c
arch/arm/include/asm/arch-imx8/fsl_mu_hal.h new file +54 -0
@@ -0,0 +1,54 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* +* Copyright 2018 NXP +*/ + +#ifndef __FSL_MU_HAL_H__ +#define __FSL_MU_HAL_H__ + +#include <asm/io.h> +#include <linux/bitops.h> + +struct mu_type { +u32 tr[4 ]; +u32 rr[4 ]; +u32 sr; +u32 cr; +}; + +#define MU_SR_GIP0_MASK BIT(31) +#define MU_SR_RF0_MASK BIT(27) +#define MU_SR_TE0_MASK BIT(23) +#define MU_CR_GIE0_MASK BIT(31) +#define MU_CR_RIE0_MASK BIT(27) +#define MU_CR_TIE0_MASK BIT(23) +#define MU_CR_GIR0_MASK BIT(19) + +#define MU_CR_GIEn_MASK 0xF0000000u +#define MU_CR_RIEn_MASK 0x0F000000u +#define MU_CR_TIEn_MASK 0x00F00000u +#define MU_CR_GIRn_MASK 0x000F0000u +#define MU_CR_Fn_MASK 0x7u +#define MU_CR_NMI_MASK 0x8u + +#define MU_CR_GIRn_NMI_MASK (MU_CR_GIRn_MASK | MU_CR_NMI_MASK) + +#define MU_TR_COUNT 4 +#define MU_RR_COUNT 4 + +static inline void mu_hal_init (struct mu_type *base) +{ +/* Clear GIEn, RIEn, TIEn, GIRn and ABFn. */ +clrbits_le32 (&base->cr, MU_CR_GIEn_MASK | MU_CR_RIEn_MASK | + MU_CR_TIEn_MASK | MU_CR_GIRn_MASK | MU_CR_Fn_MASK); +} + +static inline void mu_hal_enablerxfullint (struct mu_type *base,u32 index) +{ +clrsetbits_le32 (&base->cr, MU_CR_GIRn_NMI_MASK, +MU_CR_RIE0_MASK >> index); +} + +void mu_hal_sendmsg (struct mu_type *base,u32 regindex,u32 msg); +void mu_hal_receivemsg (struct mu_type *base,u32 regindex,u32 *msg); +#endif /* __FSL_MU_HAL_H__ */
arch/arm/include/asm/arch-imx8/sci/sci.h new file +39 -0
@@ -0,0 +1,39 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* +* Copyright 2018 NXP +*/ + +#ifndef _SC_SCI_H +#define _SC_SCI_H + +/*! +* This type is used to declare a handle for an IPC communication +* channel. Its meaning is specific to the IPC implementation. +*/ +typedef u64 sc_ipc_t ; + +/*! +* This type is used to declare an ID for an IPC communication +* channel. Its meaning is specific to the IPC implementation. +*/ +typedef u64 sc_ipc_id_t ; + +#include <asm/arch/sci/types.h> +#include <asm/arch/sci/ipc.h> +#include <asm/arch/sci/svc/misc/api.h> +#include <asm/arch/sci/svc/pad/api.h> +#include <asm/arch/sci/svc/pm/api.h> +#include <asm/arch/sci/svc/rm/api.h> +#include <asm/arch/sci/svc/timer/api.h> + +#define MU_BASE_ADDR (id) (0x5D1B0000U + (id * 0x10000)) + +#define SC_IPC_AP_CH0 (MU_BASE_ADDR(0)) +#define SC_IPC_AP_CH1 (MU_BASE_ADDR(1)) +#define SC_IPC_AP_CH2 (MU_BASE_ADDR(2)) +#define SC_IPC_AP_CH3 (MU_BASE_ADDR(3)) +#define SC_IPC_AP_CH4 (MU_BASE_ADDR(4)) + +#define SC_IPC_CH SC_IPC_AP_CH1 + +#endif
arch/arm/mach-imx/imx8/Makefile +1 -0
@@ -4,6 +4,7 @@ # SPDX-License-Identifier: GPL-2.0+ # +obj-y += fsl_mu_hal.o sci/ipc.o obj-y += sci/svc/misc/rpc_clnt.o obj-y += sci/svc/pad/rpc_clnt.o obj-y += sci/svc/pm/rpc_clnt.o
arch/arm/mach-imx/imx8/fsl_mu_hal.c new file +28 -0
@@ -0,0 +1,28 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* +* Copyright 2018 NXP +*/ + +#include <log.h> +#include <asm/arch/fsl_mu_hal.h> + +void mu_hal_sendmsg (struct mu_type *base,u32 regindex,u32 msg) +{ +assert (regindex <MU_TR_COUNT ); +u32 mask =MU_SR_TE0_MASK >> regindex; +/* Wait TX register to be empty. */ +while (!(readl (&base->sr) & mask)) + ; +writel (msg, &base->tr[regindex]); +} + +void mu_hal_receivemsg (struct mu_type *base,u32 regindex,u32 *msg) +{ +assert (regindex <MU_TR_COUNT ); +u32 mask =MU_SR_RF0_MASK >> regindex; + +/* Wait RX register to be full. */ +while (!(readl (&base->sr) & mask)) + ; + *msg =readl (&base->rr[regindex]); +}
arch/arm/mach-imx/imx8/sci/ipc.c new file +100 -0
100 lines not on this page · raw message
Signature · 1 line
2.14.1
Peng Fan
reviewerPATCH 5/41 arm: global_data: introduce ipc_channel_handle
In reply to Peng FanIntroduce ipc_channel_handle holding the communication between Acore and SCU.
--- arch/arm/include/asm/global_data.h | 4 ++++ 1 file changed, 4 insertions(+)
arch/arm/include/asm/global_data.h +4 -0
@@ -74,6 +74,10 @@ struct arch_global_data {#if defined(CONFIG_FSL_LSCH3 ) && defined(CONFIG_SYS_FSL_HAS_DP_DDR )unsigned long mem2_clk;#endif + +#ifdef CONFIG_ARCH_IMX8 +u64 ipc_channel_handle; +#endif };#include <asm-generic/global_data.h>
Signature · 1 line
2.14.1
Peng Fan
reviewerPATCH 6/41 imx: boot_mode: Add FLEXSPI boot entry
In reply to Peng Fani.MX8 support FLEXSPI boot support. So add FLEXSPI boot entry.
--- arch/arm/include/asm/mach-imx/boot_mode.h | 1 + 1 file changed, 1 insertion(+)
arch/arm/include/asm/mach-imx/boot_mode.h +1 -0
@@ -25,6 +25,7 @@ enum boot_device {MMC4_BOOT ,NAND_BOOT ,QSPI_BOOT , +FLEXSPI_BOOT ,USB_BOOT ,UNKNOWN_BOOT , BOOT_DEV_NUM = UNKNOWN_BOOT,
Signature · 1 line
2.14.1
Peng Fan
reviewerPATCH 7/41 imx8: add imx-regs header file
In reply to Peng FanAdd imx-regs header file to include the register base definition and usbphy_regs structure.
--- arch/arm/include/asm/arch-imx8/imx-regs.h | 117 ++++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 arch/arm/include/asm/arch-imx8/imx-regs.h
arch/arm/include/asm/arch-imx8/imx-regs.h new file +117 -0
@@ -0,0 +1,117 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* +* Copyright 2018 NXP +*/ + +#ifndef __ASM_ARCH_IMX_REGS_H__ +#define __ASM_ARCH_IMX_REGS_H__ + +#define LPUART_BASE 0x5A060000 + +#define GPT1_BASE_ADDR 0x5D140000 +#define SCU_LPUART_BASE 0x33220000 +#define GPIO1_BASE_ADDR 0x5D080000 +#define GPIO2_BASE_ADDR 0x5D090000 +#define GPIO3_BASE_ADDR 0x5D0A0000 +#define GPIO4_BASE_ADDR 0x5D0B0000 +#define GPIO5_BASE_ADDR 0x5D0C0000 +#define GPIO6_BASE_ADDR 0x5D0D0000 +#define GPIO7_BASE_ADDR 0x5D0E0000 +#define GPIO8_BASE_ADDR 0x5D0F0000 +#define LPI2C1_BASE_ADDR 0x5A800000 +#define LPI2C2_BASE_ADDR 0x5A810000 +#define LPI2C3_BASE_ADDR 0x5A820000 +#define LPI2C4_BASE_ADDR 0x5A830000 +#define LPI2C5_BASE_ADDR 0x5A840000 + +#ifdef CONFIG_IMX8QXP +#define LVDS0_PHYCTRL_BASE 0x56221000 +#define LVDS1_PHYCTRL_BASE 0x56241000 +#define MIPI0_SS_BASE 0x56220000 +#define MIPI1_SS_BASE 0x56240000 +#endif + +#define APBH_DMA_ARB_BASE_ADDR 0x5B810000 +#define APBH_DMA_ARB_END_ADDR 0x5B81FFFF +#define MXS_APBH_BASE APBH_DMA_ARB_BASE_ADDR + +#define MXS_GPMI_BASE (APBH_DMA_ARB_BASE_ADDR + 0x02000) +#define MXS_BCH_BASE (APBH_DMA_ARB_BASE_ADDR + 0x04000) + +#define USB_BASE_ADDR 0x5b0d0000 +#define USB_PHY0_BASE_ADDR 0x5b100000 + +#if !(defined(__KERNEL_STRICT_NAMES) || defined(__ASSEMBLY__)) +#include <asm/types.h> +#include <stdbool.h> + +struct usbphy_regs { +u32 usbphy_pwd;/* 0x000 */ +u32 usbphy_pwd_set;/* 0x004 */ +u32 usbphy_pwd_clr;/* 0x008 */ +u32 usbphy_pwd_tog;/* 0x00c */ +u32 usbphy_tx;/* 0x010 */ +u32 usbphy_tx_set;/* 0x014 */ +u32 usbphy_tx_clr;/* 0x018 */ +u32 usbphy_tx_tog;/* 0x01c */ +u32 usbphy_rx;/* 0x020 */ +u32 usbphy_rx_set;/* 0x024 */ +u32 usbphy_rx_clr;/* 0x028 */ +u32 usbphy_rx_tog;/* 0x02c */ +u32 usbphy_ctrl;/* 0x030 */ +u32 usbphy_ctrl_set;/* 0x034 */ +u32 usbphy_ctrl_clr;/* 0x038 */ +u32 usbphy_ctrl_tog;/* 0x03c */ +u32 usbphy_status;/* 0x040 */ +u32 reserved0[3 ]; +u32 usbphy_debug0;/* 0x050 */ +u32 usbphy_debug0_set;/* 0x054 */ +u32 usbphy_debug0_clr;/* 0x058 */ +u32 usbphy_debug0_tog;/* 0x05c */ +u32 reserved1[4 ]; +u32 usbphy_debug1;/* 0x070 */ +u32 usbphy_debug1_set;/* 0x074 */ +u32 usbphy_debug1_clr;/* 0x078 */ +u32 usbphy_debug1_tog;/* 0x07c */ +u32 usbphy_version;/* 0x080 */ +u32 reserved2[7 ]; +u32 usb1_pll_480_ctrl;/* 0x0a0 */ +u32 usb1_pll_480_ctrl_set;/* 0x0a4 */ +u32 usb1_pll_480_ctrl_clr;/* 0x0a8 */ +u32 usb1_pll_480_ctrl_tog;/* 0x0ac */ +u32 reserved3[4 ]; +u32 usb1_vbus_detect;/* 0xc0 */ +u32 usb1_vbus_detect_set;/* 0xc4 */ +u32 usb1_vbus_detect_clr;/* 0xc8 */ +u32 usb1_vbus_detect_tog;/* 0xcc */ +u32 usb1_vbus_det_stat;/* 0xd0 */ +u32 reserved4[3 ]; +u32 usb1_chrg_detect;/* 0xe0 */ +u32 usb1_chrg_detect_set;/* 0xe4 */ +u32 usb1_chrg_detect_clr;/* 0xe8 */ +u32 usb1_chrg_detect_tog;/* 0xec */ +u32 usb1_chrg_det_stat;/* 0xf0 */ +u32 reserved5[3 ]; +u32 usbphy_anactrl;/* 0x100 */ +u32 usbphy_anactrl_set;/* 0x104 */ +u32 usbphy_anactrl_clr;/* 0x108 */ +u32 usbphy_anactrl_tog;/* 0x10c */ +u32 usb1_loopback;/* 0x110 */ +u32 usb1_loopback_set;/* 0x114 */ +u32 usb1_loopback_clr;/* 0x118 */ +u32 usb1_loopback_tog;/* 0x11c */ +u32 usb1_loopback_hsfscnt;/* 0x120 */ +u32 usb1_loopback_hsfscnt_set;/* 0x124 */ +u32 usb1_loopback_hsfscnt_clr;/* 0x128 */ +u32 usb1_loopback_hsfscnt_tog;/* 0x12c */ +u32 usphy_trim_override_en;/* 0x130 */ +u32 usphy_trim_override_en_set;/* 0x134 */ +u32 usphy_trim_override_en_clr;/* 0x138 */ +u32 usphy_trim_override_en_tog;/* 0x13c */ +u32 usb1_pfda_ctrl1;/* 0x140 */ +u32 usb1_pfda_ctrl1_set;/* 0x144 */ +u32 usb1_pfda_ctrl1_clr;/* 0x148 */ +u32 usb1_pfda_ctrl1_tog;/* 0x14c */ +}; +#endif +#endif /* __ASM_ARCH_IMX_REGS_H__ */
Signature · 1 line
2.14.1
Peng Fan
reviewerPATCH 8/41 imx8: pins: include i.MX8QXP pin header when CONFIG_IMX8QXP defined
In reply to Peng FanInclude i.MX8QXP pin header when CONFIG_IMX8QXP defined, if no SoC macro defined, report error.
--- arch/arm/include/asm/arch-imx8/imx8-pins.h | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 arch/arm/include/asm/arch-imx8/imx8-pins.h
arch/arm/include/asm/arch-imx8/imx8-pins.h new file +15 -0
@@ -0,0 +1,15 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* +* Copyright 2018 NXP +*/ + +#ifndef __ASM_ARCH_IMX8_PINS_H__ +#define __ASM_ARCH_IMX8_PINS_H__ + +#if defined(CONFIG_IMX8QXP ) +#include "imx8qxp_pads.h" +#else +#error "No pin header" +#endif + +#endif /* __ASM_ARCH_IMX8_PINS_H__ */
Signature · 1 line
2.14.1
Peng Fan
reviewerPATCH 9/41 imx: add i.MX8 cpu type
In reply to Peng FanAdd i.MX8 cpu type and is_imx8/is_imx8qxp help macros.
--- arch/arm/include/asm/arch-imx/cpu.h | 5 +++++ arch/arm/include/asm/mach-imx/sys_proto.h | 3 +++ 2 files changed, 8 insertions(+)
arch/arm/include/asm/arch-imx/cpu.h +5 -0
@@ -25,12 +25,14 @@#define MXC_CPU_MX7S 0x71/* dummy ID */ #define MXC_CPU_MX7D 0x72#define MXC_CPU_MX8MQ 0x82 +#define MXC_CPU_IMX8QXP 0x92/* dummy ID */ #define MXC_CPU_MX7ULP 0xE1/* Temporally hard code */ #define MXC_CPU_VF610 0xF6/* dummy ID */ #define MXC_SOC_MX6 0x60#define MXC_SOC_MX7 0x70#define MXC_SOC_MX8M 0x80 +#define MXC_SOC_IMX8 0x90/* dummy */ #define MXC_SOC_MX7ULP 0xE0/* dummy */ #define CHIP_REV_1_0 0x10
@@ -41,6 +43,9 @@#define CHIP_REV_2_5 0x25#define CHIP_REV_3_0 0x30 +#define CHIP_REV_A 0x0 +#define CHIP_REV_B 0x1 +#define BOARD_REV_1_0 0x0#define BOARD_REV_2_0 0x1#define BOARD_VER_OFFSET 0x8
arch/arm/include/asm/mach-imx/sys_proto.h +3 -0
@@ -27,6 +27,7 @@#define is_mx6 () (is_soc_type(MXC_SOC_MX6))#define is_mx7 () (is_soc_type(MXC_SOC_MX7))#define is_mx8m () (is_soc_type(MXC_SOC_MX8M)) +#define is_imx8 () (is_soc_type(MXC_SOC_IMX8))#define is_mx6dqp () (is_cpu_type(MXC_CPU_MX6QP) || is_cpu_type(MXC_CPU_MX6DP))#define is_mx6dq () (is_cpu_type(MXC_CPU_MX6Q) || is_cpu_type(MXC_CPU_MX6D))
@@ -41,6 +42,8 @@#define is_mx7ulp () (is_cpu_type(MXC_CPU_MX7ULP)) +#define is_imx8qxp () (is_cpu_type(MXC_CPU_IMX8QXP)) +#ifdef CONFIG_MX6 #define IMX6_SRC_GPR10_BMODE BIT(28)
Signature · 1 line
2.14.1
Peng Fan
reviewerPATCH 10/41 imx8: add basic cpu support
In reply to Peng FanAdd basic cpu support, including cpu revision, cpu type, cpu core detection.
--- arch/arm/include/asm/arch-imx8/cpu.h | 26 ++++++++++++ arch/arm/mach-imx/imx8/Makefile | 1 + arch/arm/mach-imx/imx8/cpu.c | 79 ++++++++++++++++++++++++++++++++++++ 3 files changed, 106 insertions(+) create mode 100644 arch/arm/include/asm/arch-imx8/cpu.h create mode 100644 arch/arm/mach-imx/imx8/cpu.c
arch/arm/include/asm/arch-imx8/cpu.h new file +26 -0
@@ -0,0 +1,26 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* +* Copyright 2018 NXP +*/ + +#define MIDR_PARTNUM_CORTEX_A35 0xD04 +#define MIDR_PARTNUM_CORTEX_A53 0xD03 +#define MIDR_PARTNUM_CORTEX_A72 0xD08 +#define MIDR_PARTNUM_SHIFT 0x4 +#define MIDR_PARTNUM_MASK (0xFFF << 0x4) + +static inline unsigned int read_midr (void ) +{ +unsigned long val; + + asmvolatile ("mrs %0, midr_el1" :"=r" (val)); + +return val; +} + +#define is_cortex_a35 () (((read_midr() & MIDR_PARTNUM_MASK) >> \ + MIDR_PARTNUM_SHIFT) == MIDR_PARTNUM_CORTEX_A35) +#define is_cortex_a53 () (((read_midr() & MIDR_PARTNUM_MASK) >> \ + MIDR_PARTNUM_SHIFT) == MIDR_PARTNUM_CORTEX_A53) +#define is_cortex_a72 () (((read_midr() & MIDR_PARTNUM_MASK) >>\ + MIDR_PARTNUM_SHIFT) == MIDR_PARTNUM_CORTEX_A72)
arch/arm/mach-imx/imx8/Makefile +1 -0
@@ -4,6 +4,7 @@ # SPDX-License-Identifier: GPL-2.0+ # +obj-y += cpu.o obj-y += fsl_mu_hal.o sci/ipc.o obj-y += sci/svc/misc/rpc_clnt.o obj-y += sci/svc/pad/rpc_clnt.o
arch/arm/mach-imx/imx8/cpu.c new file +79 -0
79 lines not on this page · raw message
Signature · 1 line
2.14.1
Peng Fan
reviewerPATCH 11/41 imx8: add boot device detection
In reply to Peng FanAdd get_boot_device to detect boot device.
Add print_bootinfo to print the boot device info.
--- arch/arm/include/asm/arch-imx8/sys_proto.h | 10 ++++ arch/arm/mach-imx/imx8/cpu.c | 88 +++++++++++++++++++++++++++++- 2 files changed, 97 insertions(+), 1 deletion(-) create mode 100644 arch/arm/include/asm/arch-imx8/sys_proto.h
arch/arm/include/asm/arch-imx8/sys_proto.h new file +10 -0
@@ -0,0 +1,10 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* +* Copyright 2018 NXP +*/ + +#include <asm/mach-imx/sys_proto.h> +#include <linux/types.h> + +enum boot_device get_boot_device (void ); +int print_bootinfo (void );
arch/arm/mach-imx/imx8/cpu.c +87 -1
100 lines not on this page · raw message
Signature · 1 line
2.14.1
Peng Fan
reviewerPATCH 12/41 imx8: implement mmc_get_env_dev
In reply to Peng FanImplement mmc_get_env_dev for i.MX8.
--- arch/arm/mach-imx/imx8/cpu.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+)
arch/arm/mach-imx/imx8/cpu.c +34 -0
@@ -163,3 +163,37 @@ enum boot_device get_boot_device(void)return boot_dev; } + +#ifdef CONFIG_ENV_IS_IN_MMC +__weak int board_mmc_get_env_dev (int devno) +{ +return CONFIG_SYS_MMC_ENV_DEV ; +} + +int mmc_get_env_dev (void ) +{ +sc_ipc_t ipchndl; +sc_rsrc_t dev_rsrc; +int devno; + + ipchndl = gd->arch.ipc_channel_handle; +sc_misc_get_boot_dev (ipchndl, &dev_rsrc); + +switch (dev_rsrc) { +case SC_R_SDHC_0 : + devno =0 ; +break ; +case SC_R_SDHC_1 : + devno =1 ; +break ; +case SC_R_SDHC_2 : + devno =2 ; +break ; +default : +/* If not boot from sd/mmc, use default value */ +return CONFIG_SYS_MMC_ENV_DEV ; + } + +return board_mmc_get_env_dev (devno); +} +#endif
Signature · 1 line
2.14.1
Peng Fan
reviewerPATCH 13/41 imx8: implement imx_get_mac_from_fuse
In reply to Peng FanImplement imx_get_mac_from_fuse for i.MX8, this will be used by fec_mxc driver to get the mac address.
--- arch/arm/mach-imx/imx8/cpu.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+)
arch/arm/mach-imx/imx8/cpu.c +44 -0
@@ -79,6 +79,50 @@ int print_cpuinfo(void) }#endif +#if defined(CONFIG_IMX8QXP ) +#define FUSE_MAC0_WORD0 708 +#define FUSE_MAC0_WORD1 709 +#define FUSE_MAC1_WORD0 710 +#define FUSE_MAC1_WORD1 711 +#endif + +void imx_get_mac_from_fuse (int dev_id,unsigned char *mac) +{ +sc_err_t err; +sc_ipc_t ipc; +u32 val1 =0 , val2 =0 ; +u32 word1, word2; + + ipc = gd->arch.ipc_channel_handle; + +if (dev_id ==0 ) { + word1 =FUSE_MAC0_WORD0 ; + word2 =FUSE_MAC0_WORD1 ; + }else { + word1 =FUSE_MAC1_WORD0 ; + word2 =FUSE_MAC1_WORD1 ; + } + + err =sc_misc_otp_fuse_read (ipc, word1, &val1); +if (err !=SC_ERR_NONE ) { +printf ("%s fuse %d read error: %d\n" , __func__, word1, err); +return ; + } + + err =sc_misc_otp_fuse_read (ipc, word2, &val2); +if (err !=SC_ERR_NONE ) { +printf ("%s fuse %d read error: %d\n" , __func__, word2, err); +return ; + } + + mac[0 ] = val1; + mac[1 ] = val1 >>8 ; + mac[2 ] = val1 >>16 ; + mac[3 ] = val1 >>24 ; + mac[4 ] = val2; + mac[5 ] = val2 >>8 ; +} +int print_bootinfo (void ) {enum boot_device bt_dev =get_boot_device ();
Signature · 1 line
2.14.1
Peng Fan
reviewerPATCH 14/41 imx8: implement get_board_serial
In reply to Peng FanImplement get_board_serial
--- arch/arm/mach-imx/imx8/cpu.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+)
arch/arm/mach-imx/imx8/cpu.c +32 -0
@@ -11,6 +11,7 @@#include <asm/arch/sci/sci.h> #include <asm/arch-imx/cpu.h> #include <asm/mach-imx/boot_mode.h> +#include <asm/setup.h> DECLARE_GLOBAL_DATA_PTR ;
@@ -208,6 +209,37 @@ enum boot_device get_boot_device(void)return boot_dev; } +#ifdef CONFIG_SERIAL_TAG +#define FUSE_UNIQUE_ID_WORD0 16 +#define FUSE_UNIQUE_ID_WORD1 17 +void get_board_serial (struct tag_serialnr *serialnr) +{ +sc_err_t err; +sc_ipc_t ipc; +u32 val1 =0 , val2 =0 ; +u32 word1, word2; + + ipc = gd->arch.ipc_channel_handle; + + word1 =FUSE_UNIQUE_ID_WORD0 ; + word2 =FUSE_UNIQUE_ID_WORD1 ; + + err =sc_misc_otp_fuse_read (ipc, word1, &val1); +if (err !=SC_ERR_NONE ) { +printf ("%s fuse %d read error: %d\n" , __func__, word1, err); +return ; + } + + err =sc_misc_otp_fuse_read (ipc, word2, &val2); +if (err !=SC_ERR_NONE ) { +printf ("%s fuse %d read error: %d\n" , __func__, word2, err); +return ; + } + serialnr->low = val1; + serialnr->high = val2; +} +#endif /*CONFIG_SERIAL_TAG*/ +#ifdef CONFIG_ENV_IS_IN_MMC __weak int board_mmc_get_env_dev (int devno) {
Signature · 1 line
2.14.1
Peng Fan
reviewerPATCH 15/41 imx8: add mmu and dram related functiions
In reply to Peng FanAdd mmu memmap, some memory regions are reserved by M4, Arm Trusted Firmware, so need to get memreg using SCFW API and setup the memmap.
Add dram_init, dram_init_banksize, get_effective_memsize functions, according to the memreg.
--- arch/arm/mach-imx/imx8/cpu.c | 289 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 289 insertions(+)
arch/arm/mach-imx/imx8/cpu.c +289 -0
@@ -10,6 +10,7 @@#include <asm/arch/sys_proto.h> #include <asm/arch/sci/sci.h> #include <asm/arch-imx/cpu.h> +#include <asm/armv8/mmu.h> #include <asm/mach-imx/boot_mode.h> #include <asm/setup.h>
@@ -273,3 +274,291 @@ int mmc_get_env_dev(void)return board_mmc_get_env_dev (devno); }#endif + +#define MEMSTART_ALIGNMENT SZ_2M/* Align the memory start with 2MB */ + +static int get_owned_memreg (sc_rm_mr_t mr,sc_faddr_t *addr_start, +sc_faddr_t *addr_end) +{ +sc_ipc_t ipchndl; +sc_err_t scierr; +bool owned; +sc_faddr_t start, end; + + ipchndl = gd->arch.ipc_channel_handle; + +if (ipchndl) { + owned =sc_rm_is_memreg_owned (ipchndl, mr); +if (owned) { + scierr =sc_rm_get_memreg_info (ipchndl, mr, &start, + &end); +if (scierr !=SC_ERR_NONE ) { +printf ("Memreg get info failed, %d\n" , scierr); +return -EINVAL ; + } +debug ("0x%llx -- 0x%llx\n" , start, end); + *addr_start = start; + *addr_end = end; + +return 0 ; + } + } + +return -EINVAL ; +} + +phys_size_t get_effective_memsize (void ) +{ +sc_rm_mr_t mr; +sc_faddr_t start, end, end1; +int err; + + end1 = (sc_faddr_t )PHYS_SDRAM_1 +PHYS_SDRAM_1_SIZE ; + +for (mr =0 ; mr <64 ; mr++) { + err =get_owned_memreg (mr, &start, &end); +if (!err) { + start =roundup (start,MEMSTART_ALIGNMENT ); +/* Too small memory region, not use it */ +if (start > end) +continue ; + +/* Find the memory region runs the u-boot */ +if (start >=PHYS_SDRAM_1 && start <= end1 && + (start <=CONFIG_SYS_TEXT_BASE && + end >=CONFIG_SYS_TEXT_BASE )) { +if ((end +1 ) <= ((sc_faddr_t )PHYS_SDRAM_1 + +PHYS_SDRAM_1_SIZE )) +return (end -PHYS_SDRAM_1 +1 ); +else +return PHYS_SDRAM_1_SIZE ; + } + } + } + +return PHYS_SDRAM_1_SIZE ; +} + +int dram_init (void ) +{ +sc_rm_mr_t mr; +sc_faddr_t start, end, end1, end2; +int err; + + end1 = (sc_faddr_t )PHYS_SDRAM_1 +PHYS_SDRAM_1_SIZE ; + end2 = (sc_faddr_t )PHYS_SDRAM_2 +PHYS_SDRAM_2_SIZE ; +for (mr =0 ; mr <64 ; mr++) { + err =get_owned_memreg (mr, &start, &end); +if (!err) { + start =roundup (start,MEMSTART_ALIGNMENT ); +/* Too small memory region, not use it */ +if (start > end) +continue ; + +if (start >=PHYS_SDRAM_1 && start <= end1) { +if ((end +1 ) <= end1) + gd->ram_size += end - start +1 ; +else + gd->ram_size += end1 - start; + }else if (start >=PHYS_SDRAM_2 && start <= end2) { +if ((end +1 ) <= end2) + gd->ram_size += end - start +1 ; +else + gd->ram_size += end2 - start; + } + } + } + +/* If error, set to the default value */ +if (!gd->ram_size) { + gd->ram_size =PHYS_SDRAM_1_SIZE ; + gd->ram_size +=PHYS_SDRAM_2_SIZE ; + } +return 0 ; +} + +static void dram_bank_sort (int current_bank) +{ +phys_addr_t start; +phys_size_t size; + +while (current_bank >0 ) { +if (gd->bd->bi_dram[current_bank -1 ].start > + gd->bd->bi_dram[current_bank].start) { + start = gd->bd->bi_dram[current_bank -1 ].start; + size = gd->bd->bi_dram[current_bank -1 ].size; + + gd->bd->bi_dram[current_bank -1 ].start = + gd->bd->bi_dram[current_bank].start; + gd->bd->bi_dram[current_bank -1 ].size = + gd->bd->bi_dram[current_bank].size; + + gd->bd->bi_dram[current_bank].start = start; + gd->bd->bi_dram[current_bank].size = size; + } + current_bank--; + } +} + +int dram_init_banksize (void ) +{ +sc_rm_mr_t mr; +sc_faddr_t start, end, end1, end2; +int i =0 ; +int err; + + end1 = (sc_faddr_t )PHYS_SDRAM_1 +PHYS_SDRAM_1_SIZE ; + end2 = (sc_faddr_t )PHYS_SDRAM_2 +PHYS_SDRAM_2_SIZE ; + +for (mr =0 ; mr <64 && i <CONFIG_NR_DRAM_BANKS ; mr++) { + err =get_owned_memreg (mr, &start, &end); +if (!err) { + start =roundup (start,MEMSTART_ALIGNMENT ); +if (start > end)/* Small memory region, no use it */ +continue ; + +if (start >=PHYS_SDRAM_1 && start <= end1) { + gd->bd->bi_dram[i].start = start; + +if ((end +1 ) <= end1) + gd->bd->bi_dram[i].size = + end - start +1 ; +else + gd->bd->bi_dram[i].size = end1 - start; + +dram_bank_sort (i); + i++; + }else if (start >=PHYS_SDRAM_2 && start <= end2) { + gd->bd->bi_dram[i].start = start; + +if ((end +1 ) <= end2) + gd->bd->bi_dram[i].size = + end - start +1 ; +else + gd->bd->bi_dram[i].size = end2 - start; + +dram_bank_sort (i); + i++; + } + } + } + +/* If error, set to the default value */ +if (!i) { + gd->bd->bi_dram[0 ].start =PHYS_SDRAM_1 ; + gd->bd->bi_dram[0 ].size =PHYS_SDRAM_1_SIZE ; + gd->bd->bi_dram[1 ].start =PHYS_SDRAM_2 ; + gd->bd->bi_dram[1 ].size =PHYS_SDRAM_2_SIZE ; + } + +return 0 ; +} + +static u64 get_block_attrs (sc_faddr_t addr_start) +{ +u64 attr =PTE_BLOCK_MEMTYPE (MT_DEVICE_NGNRNE ) |PTE_BLOCK_NON_SHARE | +PTE_BLOCK_PXN |PTE_BLOCK_UXN ; + +if ((addr_start >=PHYS_SDRAM_1 && + addr_start <= ((sc_faddr_t )PHYS_SDRAM_1 +PHYS_SDRAM_1_SIZE )) || + (addr_start >=PHYS_SDRAM_2 && + addr_start <= ((sc_faddr_t )PHYS_SDRAM_2 +PHYS_SDRAM_2_SIZE ))) +return (PTE_BLOCK_MEMTYPE (MT_NORMAL ) |PTE_BLOCK_OUTER_SHARE ); + +return attr; +} + +static u64 get_block_size (sc_faddr_t addr_start,sc_faddr_t addr_end) +{ +sc_faddr_t end1, end2; + + end1 = (sc_faddr_t )PHYS_SDRAM_1 +PHYS_SDRAM_1_SIZE ; + end2 = (sc_faddr_t )PHYS_SDRAM_2 +PHYS_SDRAM_2_SIZE ; + +if (addr_start >=PHYS_SDRAM_1 && addr_start <= end1) { +if ((addr_end +1 ) > end1) +return end1 - addr_start; + }else if (addr_start >=PHYS_SDRAM_2 && addr_start <= end2) { +if ((addr_end +1 ) > end2) +return end2 - addr_start; + } + +return (addr_end - addr_start +1 ); +} + +#define MAX_PTE_ENTRIES 512 +#define MAX_MEM_MAP_REGIONS 16 + +static struct mm_region imx8_mem_map[MAX_MEM_MAP_REGIONS ]; +struct mm_region *mem_map = imx8_mem_map; + +void enable_caches (void ) +{ +sc_rm_mr_t mr; +sc_faddr_t start, end; +int err, i; + +/* Create map for registers access from 0x1c000000 to 0x80000000*/ + imx8_mem_map[0 ].virt =0x1c000000UL ; + imx8_mem_map[0 ].phys =0x1c000000UL ; + imx8_mem_map[0 ].size =0x64000000UL ; + imx8_mem_map[0 ].attrs =PTE_BLOCK_MEMTYPE (MT_DEVICE_NGNRNE ) | +PTE_BLOCK_NON_SHARE |PTE_BLOCK_PXN |PTE_BLOCK_UXN ; + + i =1 ; +for (mr =0 ; mr <64 && i <MAX_MEM_MAP_REGIONS ; mr++) { + err =get_owned_memreg (mr, &start, &end); +if (!err) { + imx8_mem_map[i].virt = start; + imx8_mem_map[i].phys = start; + imx8_mem_map[i].size =get_block_size (start, end); + imx8_mem_map[i].attrs =get_block_attrs (start); + i++; + } + } + +if (i <MAX_MEM_MAP_REGIONS ) { + imx8_mem_map[i].size =0 ; + imx8_mem_map[i].attrs =0 ; + }else { +puts ("Error, need more MEM MAP REGIONS reserved\n" ); +icache_enable (); +return ; + } + +for (i =0 ; i <MAX_MEM_MAP_REGIONS ; i++) { +debug ("[%d] vir = 0x%llx phys = 0x%llx size = 0x%llx attrs = 0x%llx\n" , i, + imx8_mem_map[i].virt, imx8_mem_map[i].phys, imx8_mem_map[i].size, imx8_mem_map[i].attrs); + } + +icache_enable (); +dcache_enable (); +} + +#ifndef CONFIG_SYS_DCACHE_OFF +u64 get_page_table_size (void ) +{ +u64 one_pt =MAX_PTE_ENTRIES *sizeof (u64); +u64 size =0 ; + +/* +* For each memory region, the max table size: +* 2 level 3 tables + 2 level 2 tables + 1 level 1 table +*/ + size = (2 +2 +1 ) * one_pt *MAX_MEM_MAP_REGIONS + one_pt; + +/* +* We need to duplicate our page table once to have an emergency pt to +* resort to when splitting page tables later on +*/ + size *=2 ; + +/* +* We may need to split page tables later on if dcache settings change, +* so reserve up to 4 (random pick) page tables for that. +*/ + size += one_pt *4 ; + +return size; +} +#endif
Signature · 1 line
2.14.1
Peng Fan
reviewerPATCH 16/41 imx8: add bootaux support
In reply to Peng FanThere is a M4 Core for genernal purpose and a DSP core for audio, add bootaux function in U-Boot to startup the core.
The DSP image is an ELF image.
--- arch/arm/mach-imx/imx8/cpu.c | 179 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 179 insertions(+)
arch/arm/mach-imx/imx8/cpu.c +179 -0
@@ -13,6 +13,7 @@#include <asm/armv8/mmu.h> #include <asm/mach-imx/boot_mode.h> #include <asm/setup.h> +#include <elf.h> DECLARE_GLOBAL_DATA_PTR ;
@@ -125,6 +126,184 @@ void imx_get_mac_from_fuse(int dev_id, unsigned char *mac) mac[5 ] = val2 >>8 ; } +#ifdef CONFIG_IMX_BOOTAUX +#ifdef CONFIG_IMX8QXP +static unsigned long load_elf_image_shdr (unsigned long addr) +{ +/* Elf header structure pointer */ +Elf32_Ehdr *ehdr; +/* Section header structure pointer */ +Elf32_Shdr *shdr; +/* String table pointer */ +unsigned char *strtab =NULL ; +/* Binary image pointer */ +unsigned char *image; +/* Loop counter */ +int i; + + ehdr = (Elf32_Ehdr *)addr; + +/* Find the section header string table for output info */ + shdr = (Elf32_Shdr *)(addr + ehdr->e_shoff + + (ehdr->e_shstrndx *sizeof (Elf32_Shdr))); + +if (shdr->sh_type ==SHT_STRTAB ) + strtab = (unsigned char *)(addr + shdr->sh_offset); + +/* Load each appropriate section */ +for (i =0 ; i < ehdr->e_shnum; ++i) { + shdr = (Elf32_Shdr *)(addr + ehdr->e_shoff + + (i *sizeof (Elf32_Shdr))); + +if (!(shdr->sh_flags &SHF_ALLOC ) || + shdr->sh_addr ==0 || shdr->sh_size ==0 ) { +continue ; + } + +if (strtab) { +debug ("%sing %s @ 0x%08lx (%ld bytes)\n" , + (shdr->sh_type ==SHT_NOBITS ) ?"Clear" :"Load" , + &strtab[shdr->sh_name], + (unsigned long )shdr->sh_addr, + (long )shdr->sh_size); + } + +if (shdr->sh_type ==SHT_NOBITS ) { +memset ((void *)(uintptr_t )shdr->sh_addr,0 , + shdr->sh_size); + }else { + image = (unsigned char *)addr + shdr->sh_offset; +memcpy ((void *)(uintptr_t )shdr->sh_addr, + (const void *)image, shdr->sh_size); + } +flush_cache (shdr->sh_addr, shdr->sh_size); + } + +return ehdr->e_entry; +} + +int arch_auxiliary_core_up (u32 core_id,ulong boot_private_data) +{ +sc_ipc_t ipchndl; +sc_rsrc_t core_rsrc, mu_rsrc =-1 ; +sc_faddr_t aux_core_ram; +u32 size; +ulong addr; + + ipchndl = gd->arch.ipc_channel_handle; + +switch (core_id) { +case 0 : + core_rsrc =SC_R_M4_0_PID0 ; + aux_core_ram =0x34FE0000 ; + mu_rsrc =SC_R_M4_0_MU_1A ; + size =SZ_128K ; +break ; +case 1 : + core_rsrc =SC_R_DSP ; + aux_core_ram =0x596f8000 ; + size =SZ_2K ; +break ; +default : +printf ("Not support this core boot up, ID:%u\n" , core_id); +return -EINVAL ; + } + + addr = (sc_faddr_t )boot_private_data; + +if (addr >= aux_core_ram && addr <= aux_core_ram + size) { +printf ("Wrong image address 0x%lx, should not in aux core ram\n" , addr); +return -EINVAL ; + } + +printf ("Power on aux core %d\n" , core_id); + +if (sc_pm_set_resource_power_mode (ipchndl, core_rsrc, +SC_PM_PW_MODE_ON ) !=SC_ERR_NONE ) +return -EIO ; + +if (mu_rsrc !=-1 ) { +if (sc_pm_set_resource_power_mode (ipchndl, mu_rsrc, +SC_PM_PW_MODE_ON ) != +SC_ERR_NONE ) +return -EIO ; + } + +if (core_id ==1 ) { +struct power_domain pd; + +if (sc_pm_clock_enable (ipchndl, core_rsrc,SC_PM_CLK_PER , + true, false) !=SC_ERR_NONE ) { +printf ("Error enable clock\n" ); +return -EIO ; + } + +if (!power_domain_lookup_name ("audio_sai0" , &pd)) { +if (power_domain_on (&pd)) { +printf ("Error power on SAI0\n" ); +return -EIO ; + } + } + +if (!power_domain_lookup_name ("audio_ocram" , &pd)) { +if (power_domain_on (&pd)) { +printf ("Error power on HIFI RAM\n" ); +return -EIO ; + } + } + } + +printf ("Copy image from 0x%lx to 0x%lx\n" , addr, (ulong )aux_core_ram); +if (core_id ==0 ) { +/* M4 use bin file */ +memcpy ((void *)aux_core_ram, (void *)addr, size); + }else { +/* HIFI use elf file */ +if (!valid_elf_image (addr)) +return -1 ; + addr =load_elf_image_shdr (addr); + } + +printf ("Start %s\n" , core_id ==0 ?"M4" :"HIFI" ); + +if (sc_pm_cpu_start (ipcHndl, core_rsrc, true, aux_core_ram) != +SC_ERR_NONE ) +return -EIO ; + +puts ("bootaux complete\n" ); + +return 0 ; +} +#endif + +int arch_auxiliary_core_check_up (u32 core_id) +{ +sc_rsrc_t core_rsrc; +sc_pm_power_mode_t power_mode; +sc_ipc_t ipchndl; + + ipchndl = gd->arch.ipc_channel_handle; + +switch (core_id) { +case 0 : + core_rsrc =SC_R_M4_0_PID0 ; +break ; +default : +printf ("Not support this core, ID:%u\n" , core_id); +return 0 ; + } + +if (sc_pm_get_resource_power_mode (ipchndl, core_rsrc, &power_mode) != +SC_ERR_NONE ) +return 0 ; + +if (power_mode !=SC_PM_PW_MODE_OFF ) +return 1 ; + +return 0 ; +} +#endif +int print_bootinfo (void ) {enum boot_device bt_dev =get_boot_device ();
Signature · 1 line
2.14.1
Peng Fan
reviewerPATCH 17/41 imx8: add arch_cpu_init
In reply to Peng FanAdd arch_cpu_init mainly to open the channel between ACore and SCU.
--- arch/arm/include/asm/arch-imx8/imx-regs.h | 2 ++ arch/arm/include/asm/arch-imx8/sys_proto.h | 9 +++++++ arch/arm/mach-imx/imx8/cpu.c | 40 ++++++++++++++++++++++++++++++ 3 files changed, 51 insertions(+)
arch/arm/include/asm/arch-imx8/imx-regs.h +2 -0
@@ -38,6 +38,8 @@#define MXS_GPMI_BASE (APBH_DMA_ARB_BASE_ADDR + 0x02000)#define MXS_BCH_BASE (APBH_DMA_ARB_BASE_ADDR + 0x04000) +#define PASS_OVER_INFO_ADDR 0x0010fe00 +#define USB_BASE_ADDR 0x5b0d0000#define USB_PHY0_BASE_ADDR 0x5b100000
arch/arm/include/asm/arch-imx8/sys_proto.h +9 -0
@@ -6,5 +6,14 @@#include <asm/mach-imx/sys_proto.h> #include <linux/types.h> +struct pass_over_info_t { +u16 barker; +u16 len; +u32 g_bt_cfg_shadow; +u32 card_address_mode; +u32 bad_block_count_met; +u32 g_ap_mu; +}; +enum boot_device get_boot_device (void );int print_bootinfo (void );
arch/arm/mach-imx/imx8/cpu.c +40 -0
@@ -82,6 +82,46 @@ int print_cpuinfo(void) }#endif +#define BT_PASSOVER_TAG 0x504F +struct pass_over_info_t *get_pass_over_info (void ) +{ +struct pass_over_info_t *p = + (struct pass_over_info_t *)PASS_OVER_INFO_ADDR ; + +if (p->barker !=BT_PASSOVER_TAG || + p->len !=sizeof (struct pass_over_info_t )) +return NULL ; + +return p; +} + +int arch_cpu_init (void ) +{ +sc_ipc_t ipchndl; +sc_err_t scierr; +struct pass_over_info_t *pass_over; + + gd->arch.ipc_channel_handle =0 ; + +/* Open IPC channel */ + scierr =sc_ipc_open (&ipchndl,SC_IPC_CH ); +if (scierr !=SC_ERR_NONE ) +return -EPERM ; + + gd->arch.ipc_channel_handle = ipchndl; + + pass_over =get_pass_over_info (); +if (pass_over && pass_over->g_ap_mu ==0 ) { +/* +* When ap_mu is 0, means the u-boot is boot +* from first container +*/ +sc_misc_boot_status (ipchndl,SC_MISC_BOOT_STATUS_SUCCESS ); + } + +return 0 ; +} +#if defined(CONFIG_IMX8QXP )#define FUSE_MAC0_WORD0 708#define FUSE_MAC0_WORD1 709
Signature · 1 line
2.14.1
Peng Fan
reviewerPATCH 18/41 imx8: add clock driver
In reply to Peng FanAdd clock driver for i.MX8, including get arm core clock, peripheral's clock, configure I2C/flexspi/enet/gpmi-nand/usb clock.
--- arch/arm/include/asm/arch-imx8/clock.h | 36 ++++ arch/arm/include/asm/arch-imx8/i2c.h | 34 ++++ arch/arm/mach-imx/imx8/Makefile | 2 +- arch/arm/mach-imx/imx8/clock.c | 361 +++++++++++++++++++++++++++++++++ 4 files changed, 432 insertions(+), 1 deletion(-) create mode 100644 arch/arm/include/asm/arch-imx8/clock.h create mode 100644 arch/arm/include/asm/arch-imx8/i2c.h create mode 100644 arch/arm/mach-imx/imx8/clock.c
arch/arm/include/asm/arch-imx8/clock.h new file +36 -0
@@ -0,0 +1,36 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* +* Copyright 2018 NXP +*/ + +#ifndef __ASM_ARCH_IMX8_CLOCK_H__ +#define __ASM_ARCH_IMX8_CLOCK_H__ + +/* Mainly for compatible to imx common code. */ +enum mxc_clock { +MXC_ARM_CLK =0 , +MXC_AHB_CLK , +MXC_IPG_CLK , +MXC_UART_CLK , +MXC_CSPI_CLK , +MXC_AXI_CLK , +MXC_DDR_CLK , +MXC_ESDHC_CLK , +MXC_ESDHC2_CLK , +MXC_ESDHC3_CLK , +MXC_I2C_CLK , +MXC_FEC_CLK , +}; + +u32 mxc_get_clock (enum mxc_clock clk); +u32 get_lpuart_clk (void ); +int enable_i2c_clk (u8 enable,u32 i2c_num); +u32 imx_get_i2cclk (u32 i2c_num); +void enable_usboh3_clk (bool enable); +int set_clk_qspi (void ); +u32 imx_get_fecclk (void ); +void init_clk_usdhc (u32 index); +void init_clk_gpmi_nand (void ); +void init_clk_usb3 (int index); + +#endif /* __ASM_ARCH_IMX8_CLOCK_H__ */
arch/arm/include/asm/arch-imx8/i2c.h new file +34 -0
@@ -0,0 +1,34 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* +* Copyright 2017 NXP +*/ +#ifndef __ASM_ARCH_IMX8_I2C_H__ +#define __ASM_ARCH_IMX8_I2C_H__ + +#include <asm/arch/sci/sci.h> + +struct imx_i2c_map { +int index; +sc_rsrc_t rsrc; +}; + +static struct imx_i2c_map imx_i2c_desc[] = { + {0 ,SC_R_I2C_0 }, + {1 ,SC_R_I2C_1 }, + {2 ,SC_R_I2C_2 }, + {3 ,SC_R_I2C_3 }, + {4 ,SC_R_I2C_4 }, + {5 ,SC_R_LVDS_0_I2C_0 },/* lvds0 i2c0 */ + {6 ,SC_R_LVDS_0_I2C_0 },/* lvds0 i2c1 */ + {7 ,SC_R_LVDS_1_I2C_0 },/* lvds1 i2c0 */ + {8 ,SC_R_LVDS_1_I2C_0 },/* lvds1 i2c1 */ + {9 ,SC_R_CSI_0_I2C_0 }, + {10 ,SC_R_CSI_1_I2C_0 }, + {11 ,SC_R_HDMI_I2C_0 }, + {12 ,SC_R_HDMI_RX_I2C_0 }, + {13 ,SC_R_MIPI_0_I2C_0 }, + {14 ,SC_R_MIPI_0_I2C_1 }, + {15 ,SC_R_MIPI_1_I2C_0 }, + {16 ,SC_R_MIPI_1_I2C_1 }, +}; +#endif /* __ASM_ARCH_IMX8_I2C_H__ */
arch/arm/mach-imx/imx8/Makefile +1 -1
@@ -4,7 +4,7 @@ # SPDX-License-Identifier: GPL-2.0+ # -obj-y += cpu.o +obj-y += cpu.o clock.o obj-y += fsl_mu_hal.o sci/ipc.o obj-y += sci/svc/misc/rpc_clnt.o obj-y += sci/svc/pad/rpc_clnt.o
arch/arm/mach-imx/imx8/clock.c new file +361 -0
361 lines not on this page · raw message
Signature · 1 line
2.14.1
Peng Fan
reviewerPATCH 19/41 imx8: add iomux configuration code
In reply to Peng FanThe pads are controlled by SCU, so we could not reuse the code as i.MX6/7/8M, so use dedicated iomux code to invoke the SCFW API to configure the pads.
--- arch/arm/include/asm/arch-imx8/iomux.h | 40 +++++++++++++++++++++++++++++ arch/arm/mach-imx/imx8/Makefile | 2 +- arch/arm/mach-imx/imx8/iomux.c | 47 ++++++++++++++++++++++++++++++++++ 3 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 arch/arm/include/asm/arch-imx8/iomux.h create mode 100644 arch/arm/mach-imx/imx8/iomux.c
arch/arm/include/asm/arch-imx8/iomux.h new file +40 -0
@@ -0,0 +1,40 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* +* Copyright 2018 NXP +*/ + +#ifndef __ASM_ARCH_IMX8_IOMUX_H__ +#define __ASM_ARCH_IMX8_IOMUX_H__ + +/* +* We use 64bits value for iomux settings. +* High 32bits are used for padring register value, +* low 16bits are used for pin index. +*/ +typedef u64 iomux_cfg_t ; + +#define PADRING_IFMUX_EN_SHIFT 31 +#define PADRING_IFMUX_EN_MASK BIT(31) +#define PADRING_GP_EN_SHIFT 30 +#define PADRING_GP_EN_MASK BIT(30) +#define PADRING_IFMUX_SHIFT 27 +#define PADRING_IFMUX_MASK GENMASK(29, 27) +#define PADRING_CONFIG_SHIFT 25 +#define PADRING_LPCONFIG_SHIFT 23 +#define PADRING_PULL_SHIFT 5 +#define PADRING_DSE_SHIFT 0 + +#define MUX_PAD_CTRL_SHIFT 32 +#define MUX_PAD_CTRL_MASK ((iomux_cfg_t)0xFFFFFFFF << MUX_PAD_CTRL_SHIFT) +#define MUX_PAD_CTRL (x) ((iomux_cfg_t)(x) << MUX_PAD_CTRL_SHIFT) +#define MUX_MODE_SHIFT (PADRING_IFMUX_SHIFT + MUX_PAD_CTRL_SHIFT) +#define MUX_MODE_MASK ((iomux_cfg_t)0x7 << MUX_MODE_SHIFT) +#define PIN_ID_MASK ((iomux_cfg_t)0xFFFF) + +/* Valid mux alt0 to alt7 */ +#define MUX_MODE_ALT (x) (((iomux_cfg_t)(x) << MUX_MODE_SHIFT) & \ + MUX_MODE_MASK) + +void imx8_iomux_setup_pad (iomux_cfg_t pad); +void imx8_iomux_setup_multiple_pads (iomux_cfg_t const *pad_list,u32 count); +#endif /* __ASM_ARCH_IMX8_IOMUX_H__ */
arch/arm/mach-imx/imx8/Makefile +1 -1
@@ -4,7 +4,7 @@ # SPDX-License-Identifier: GPL-2.0+ # -obj-y += cpu.o clock.o +obj-y += cpu.o clock.o iomux.o obj-y += fsl_mu_hal.o sci/ipc.o obj-y += sci/svc/misc/rpc_clnt.o obj-y += sci/svc/pad/rpc_clnt.o
arch/arm/mach-imx/imx8/iomux.c new file +47 -0
47 lines not on this page · raw message
Signature · 1 line
2.14.1
Peng Fan
reviewerPATCH 20/41 fsl_esdhc: Update usdhc driver to support i.MX8
In reply to Peng FanFrom: Ye Li <[email protected]>
Add CONFIG_IMX8 to use the 64bits support in usdhc driver.
--- drivers/mmc/fsl_esdhc.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
drivers/mmc/fsl_esdhc.c +4 -4
@@ -257,7 +257,7 @@ static int esdhc_setup_data(struct fsl_esdhc_priv *priv, struct mmc *mmc,int timeout;struct fsl_esdhc *regs = priv->esdhc_regs;#if defined(CONFIG_FSL_LAYERSCAPE ) || defined(CONFIG_S32V234 ) || \ - defined(CONFIG_MX8M ) + defined(CONFIG_IMX8 ) || defined(CONFIG_MX8M )dma_addr_t addr;#endif uint wml_value;
@@ -271,7 +271,7 @@ static int esdhc_setup_data(struct fsl_esdhc_priv *priv, struct mmc *mmc,esdhc_clrsetbits32 (®s->wml,WML_RD_WML_MASK , wml_value);#ifndef CONFIG_SYS_FSL_ESDHC_USE_PIO #if defined(CONFIG_FSL_LAYERSCAPE ) || defined(CONFIG_S32V234 ) || \ - defined(CONFIG_MX8M ) + defined(CONFIG_IMX8 ) || defined(CONFIG_MX8M ) addr =virt_to_phys ((void *)(data->dest));if (upper_32_bits (addr))printf ("Error found for upper 32 bits\n" );
@@ -301,7 +301,7 @@ static int esdhc_setup_data(struct fsl_esdhc_priv *priv, struct mmc *mmc, wml_value << 16);#ifndef CONFIG_SYS_FSL_ESDHC_USE_PIO #if defined(CONFIG_FSL_LAYERSCAPE ) || defined(CONFIG_S32V234 ) || \ - defined(CONFIG_MX8M ) + defined(CONFIG_IMX8 ) || defined(CONFIG_MX8M ) addr =virt_to_phys ((void *)(data->src));if (upper_32_bits (addr))printf ("Error found for upper 32 bits\n" );
@@ -367,7 +367,7 @@ static void check_and_invalidate_dcache_rangeunsigned size =roundup (ARCH_DMA_MINALIGN , data->blocks*data->blocksize);#if defined(CONFIG_FSL_LAYERSCAPE ) || defined(CONFIG_S32V234 ) || \ - defined(CONFIG_MX8M ) + defined(CONFIG_IMX8 ) || defined(CONFIG_MX8M )dma_addr_t addr; addr =virt_to_phys ((void *)(data->dest));
Signature · 1 line
2.14.1
Peng Fan
reviewerPATCH 21/41 serial_lpuart: Update lpuart driver to support i.MX8
In reply to Peng FanAdd i.MX8 compatible string and cpu type support to lpuart driver, to use little endian 32 bits configurations.
Also, accroding to RM, the Receive FIFO Enable (RXFE) field in LPUART FIFO register is bit 3, so the definition should change to 0x08 not 0x40 for i.MX8, otherwise the Receive FIFO is not disabled.
--- drivers/serial/serial_lpuart.c | 15 ++++++++++++--- include/fsl_lpuart.h | 2 +- 2 files changed, 13 insertions(+), 4 deletions(-)
drivers/serial/serial_lpuart.c +12 -3
@@ -41,7 +41,11 @@#define CTRL_RE (1 << 18)#define FIFO_TXFE 0x80 +#ifdef CONFIG_IMX8 +#define FIFO_RXFE 0x08 +#else #define FIFO_RXFE 0x40 +#endif #define WATER_TXWATER_OFF 1#define WATER_RXWATER_OFF 16
@@ -54,7 +58,8 @@ DECLARE_GLOBAL_DATA_PTR;enum lpuart_devtype {DEV_VF610 =1 ,DEV_LS1021A , -DEV_MX7ULP +DEV_MX7ULP , +DEV_IMX8 };struct lpuart_serial_platdata {
@@ -325,7 +330,7 @@ static int _lpuart32_serial_init(struct lpuart_serial_platdata *plat)lpuart_write32 (plat->flags, &base->match,0 ); -if (plat->devtype ==DEV_MX7ULP ) { +if (plat->devtype ==DEV_MX7ULP || plat->devtype ==DEV_IMX8 ) {_lpuart32_serial_setbrg_7ulp (plat, gd->baudrate); }else {/* provide data bits, parity, stop bit, etc */
@@ -342,7 +347,7 @@ static int lpuart_serial_setbrg(struct udevice *dev, int baudrate)struct lpuart_serial_platdata *plat = dev->platdata;if (is_lpuart32 (dev)) { -if (plat->devtype ==DEV_MX7ULP ) +if (plat->devtype ==DEV_MX7ULP || plat->devtype ==DEV_IMX8 )_lpuart32_serial_setbrg_7ulp (plat, baudrate);else _lpuart32_serial_setbrg (plat, baudrate);
@@ -427,6 +432,8 @@ static int lpuart_serial_ofdata_to_platdata(struct udevice *dev) plat->devtype =DEV_MX7ULP ; else if (!fdt_node_check_compatible(blob, node, "fsl,vf610-lpuart")) plat->devtype = DEV_VF610; + else if (!fdt_node_check_compatible(blob, node, "fsl,imx8qm-lpuart")) + plat->devtype = DEV_IMX8;return 0 ; }
@@ -444,6 +451,8 @@ static const struct udevice_id lpuart_serial_ids[] = { { .compatible = "fsl,imx7ulp-lpuart", .data = LPUART_FLAG_REGMAP_32BIT_REG }, { .compatible = "fsl,vf610-lpuart"}, + { .compatible = "fsl,imx8qm-lpuart", + .data = LPUART_FLAG_REGMAP_32BIT_REG }, { } };
include/fsl_lpuart.h +1 -1
@@ -4,7 +4,7 @@* */ -#ifdef CONFIG_ARCH_MX7ULP +#if defined(CONFIG_ARCH_MX7ULP) || defined(CONFIG_IMX8) struct lpuart_fsl_reg32 { u32 verid; u32 param;
Signature · 1 line
2.14.1
Peng Fan
reviewerPATCH 22/41 serial: lpuart: Enable RX and TX FIFO
In reply to Peng FanFrom: Ye Li <[email protected]>
Enable the RX and TX FIFO in LPUART driver to avoid the input lost during u-boot boot up.
--- drivers/serial/serial_lpuart.c | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-)
drivers/serial/serial_lpuart.c +26 -7
@@ -40,6 +40,12 @@#define CTRL_TE (1 << 19)#define CTRL_RE (1 << 18) +#define FIFO_RXFLUSH (1 << 14) +#define FIFO_TXFLUSH (1 << 15) +#define FIFO_TXSIZE_MASK 0x70 +#define FIFO_TXSIZE_OFF 4 +#define FIFO_RXSIZE_MASK 0x7 +#define FIFO_RXSIZE_OFF 0#define FIFO_TXFE 0x80#ifdef CONFIG_IMX8 #define FIFO_RXFE 0x08
@@ -47,7 +53,7 @@#define FIFO_RXFE 0x40#endif -#define WATER_TXWATER_OFF 1 +#define WATER_TXWATER_OFF 0#define WATER_RXWATER_OFF 16DECLARE_GLOBAL_DATA_PTR ;
@@ -318,15 +324,28 @@ static int _lpuart32_serial_tstc(struct lpuart_serial_platdata *plat)static int _lpuart32_serial_init (struct lpuart_serial_platdata *plat) {struct lpuart_fsl_reg32 *base = (struct lpuart_fsl_reg32 *)plat->reg; -u32 ctrl; +u32 val, tx_fifo_size; -lpuart_read32 (plat->flags, &base->ctrl, &ctrl); - ctrl &= ~CTRL_RE ; - ctrl &= ~CTRL_TE ; -lpuart_write32 (plat->flags, &base->ctrl, ctrl); +lpuart_read32 (plat->flags, &base->ctrl, &val); + val &= ~CTRL_RE ; + val &= ~CTRL_TE ; +lpuart_write32 (plat->flags, &base->ctrl, val);lpuart_write32 (plat->flags, &base->modir,0 ); -lpuart_write32 (plat->flags, &base->fifo, ~(FIFO_TXFE |FIFO_RXFE )); + +lpuart_read32 (plat->flags, &base->fifo, &val); + tx_fifo_size = (val &FIFO_TXSIZE_MASK ) >>FIFO_TXSIZE_OFF ; +/* Set the TX water to half of FIFO size */ +if (tx_fifo_size >1 ) + tx_fifo_size = tx_fifo_size >>1 ; + +/* Set RX water to 0, to be triggered by any receive data */ +lpuart_write32 (plat->flags, &base->water, + (tx_fifo_size <<WATER_TXWATER_OFF )); + +/* Enable TX and RX FIFO */ + val |= (FIFO_TXFE |FIFO_RXFE |FIFO_TXFLUSH |FIFO_RXFLUSH ); +lpuart_write32 (plat->flags, &base->fifo, val);lpuart_write32 (plat->flags, &base->match,0 );
Signature · 1 line
2.14.1
Peng Fan
reviewerPATCH 23/41 imx_lpi2c: Update lpi2c driver to support imx8
In reply to Peng FanFrom: Ye Li <[email protected]>
Add compatible string for i.MX8 and move imx_lpi2c.h from mx7ulp directory to u-boot include directory as a common header file.
---
drivers/i2c/imx_lpi2c.c | 3 ++-
{arch/arm/include/asm/arch-mx7ulp => include}/imx_lpi2c.h | 0
2 files changed, 2 insertions(+), 1 deletion(-)
rename {arch/arm/include/asm/arch-mx7ulp => include}/imx_lpi2c.h (100%)drivers/i2c/imx_lpi2c.c +2 -1
@@ -8,7 +8,7 @@#include <asm/io.h> #include <asm/arch/clock.h> #include <asm/arch/imx-regs.h> -#include <asm/arch/imx_lpi2c.h> +#include <imx_lpi2c.h> #include <asm/arch/sys_proto.h> #include <dm.h> #include <fdtdec.h>
@@ -447,6 +447,7 @@ static const struct dm_i2c_ops imx_lpi2c_ops = {static const struct udevice_id imx_lpi2c_ids[] = { { .compatible ="fsl,imx7ulp-lpi2c" , }, + { .compatible ="fsl,imx8qm-lpi2c" , }, {} };
include/imx_lpi2c.h renamed from arch/arm/include/asm/arch-mx7ulp/imx_lpi2c.h +0 -0
Signature · 1 line
2.14.1
PATCH 23/41 imx_lpi2c: Update lpi2c driver to support imx8
Hello Peng,
Am 28.05.2018 um 14:25 schrieb Peng Fan:
Quoted 5 lines
From: Ye Li <[email protected]>
Add compatible string for i.MX8 and move
imx_lpi2c.hfrom mx7ulp directory to u-boot include directory as a common header file.
Quoted 8 lines
Signed-off-by Ye Li <[email protected]>Signed-off-by Peng Fan <[email protected]>Cc Heiko Schocher <[email protected]>--- drivers/i2c/imx_lpi2c.c | 3 ++- {arch/arm/include/asm/arch-mx7ulp => include}/imx_lpi2c.h | 0 2 files changed, 2 insertions(+), 1 deletion(-)rename {
arch/arm/include/asm/arch-mx7ulp=>include}/imx_lpi2c.h(100%)
bye,
Heiko
Signature · 3 lines
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: +49-8142-66989-52 Fax: +49-8142-66989-80 Email: hs at denx.de
Peng Fan
reviewerPATCH 24/41 imx: lpi2c: fix clock issue when NACK detected
In reply to Peng FanFrom: Gao Pan <[email protected]>
For LPI2C IP, NACK is detected by the rising edge of the ninth clock. In current uboot driver, once NACK is detected, it will reset and then disable LPI2C master. As a result, we can never see the falling edge of the ninth clock.
--- drivers/i2c/imx_lpi2c.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-)
drivers/i2c/imx_lpi2c.c +10 -4
@@ -15,6 +15,7 @@#include <i2c.h> #define LPI2C_FIFO_SIZE 4 +#define LPI2C_NACK_TOUT_MS 1#define LPI2C_TIMEOUT_MS 100/* Weak linked function for overridden by some SoC power function */
@@ -184,6 +185,7 @@ static int bus_i2c_stop(struct imx_lpi2c_reg *regs) {lpi2c_status_t result;u32 status; +ulong start_time; result =bus_i2c_wait_for_tx_ready (regs);if (result) {
@@ -194,7 +196,8 @@ static int bus_i2c_stop(struct imx_lpi2c_reg *regs)/* send stop command */ writel (LPI2C_MTDR_CMD (0x2 ), ®s->mtdr); -while (result ==LPI2C_SUCESS ) { + start_time =get_timer (0 ); +while (1 ) { status =readl (®s->msr); result =imx_lpci2c_check_clear_error (regs);/* stop detect flag */
@@ -204,6 +207,11 @@ static int bus_i2c_stop(struct imx_lpi2c_reg *regs)writel (status, ®s->msr);break ; } + +if (get_timer (start_time) >LPI2C_NACK_TOUT_MS ) { +debug ("stop timeout\n" ); +return -ETIMEDOUT ; + } }return result;
@@ -363,10 +371,8 @@ static int imx_lpi2c_probe_chip(struct udevice *bus, u32 chip, } result =bus_i2c_stop (regs); -if (result) { +if (result)bus_i2c_init (bus,100000 ); -return -result; - }return result; }
Signature · 1 line
2.14.1
PATCH 24/41 imx: lpi2c: fix clock issue when NACK detected
Hello Peng,
Am 28.05.2018 um 14:25 schrieb Peng Fan:
Quoted 7 lines
From: Gao Pan <[email protected]>
For LPI2C IP, NACK is detected by the rising edge of the ninth clock. In current uboot driver, once NACK is detected, it will reset and then disable LPI2C master. As a result, we can never see the falling edge of the ninth clock.
Quoted 6 lines
Signed-off-by Gao Pan <[email protected]>Signed-off-by Peng Fan <[email protected]>Cc Heiko Schocher <[email protected]>--- drivers/i2c/imx_lpi2c.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-)
Thanks!
bye,
Heiko
Signature · 3 lines
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: +49-8142-66989-52 Fax: +49-8142-66989-80 Email: hs at denx.de
Peng Fan
reviewerPATCH 25/41 lpi2c: Fix bus stop problem in xfer
In reply to Peng FanFrom: Ye Li <[email protected]>
In xfer function, both bus_i2c_read and bus_i2c_write will send a STOP command. This causes a problem when reading register data from i2c device.
Generally two operations comprise the register data reading:
1. Write the register address to i2c device. START | chip_addr | W | ACK | register_addr | ACK |
2. Read the Data from i2c device.
START | chip_addr | R | ACK | DATA | NACK | STOP
The STOP command should happen at the end of the transfer, otherwise we will always get data from register address 0
--- drivers/i2c/imx_lpi2c.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-)
drivers/i2c/imx_lpi2c.c +7 -7
@@ -225,9 +225,6 @@ static int bus_i2c_read(struct imx_lpi2c_reg *regs, u32 chip, u8 *buf, int len)if (result)return result; result =bus_i2c_receive (regs, buf, len); -if (result) -return result; - result =bus_i2c_stop (regs);if (result)return result;
@@ -242,9 +239,6 @@ static int bus_i2c_write(struct imx_lpi2c_reg *regs, u32 chip, u8 *buf, int len)if (result)return result; result =bus_i2c_send (regs, buf, len); -if (result) -return result; - result =bus_i2c_stop (regs);if (result)return result;
@@ -380,7 +374,7 @@ static int imx_lpi2c_probe_chip(struct udevice *bus, u32 chip,static int imx_lpi2c_xfer (struct udevice *bus,struct i2c_msg *msg,int nmsgs) {struct imx_lpi2c_reg *regs; -int ret =0 ; +int ret =0 , ret_stop; regs = (struct imx_lpi2c_reg *)devfdt_get_addr (bus);for (; nmsgs >0 ; nmsgs--, msg++) {
@@ -398,6 +392,12 @@ static int imx_lpi2c_xfer(struct udevice *bus, struct i2c_msg *msg, int nmsgs)if (ret)debug ("i2c_write: error sending\n" ); + ret_stop =bus_i2c_stop (regs); +if (ret_stop) +debug ("i2c_xfer: stop bus error\n" ); + + ret |= ret_stop; +return ret; }
Signature · 1 line
2.14.1
PATCH 25/41 lpi2c: Fix bus stop problem in xfer
Hello Peng,
Am 28.05.2018 um 14:25 schrieb Peng Fan:
Quoted 16 lines
From: Ye Li <[email protected]>
In xfer function, both
bus_i2c_readandbus_i2c_writewill send a STOP command. This causes a problem when reading register data from i2c device.Generally two operations comprise the register data reading:
1. Write the register address to i2c device. START |chip_addr| W | ACK |register_addr| ACK |2. Read the Data from i2c device.
START |chip_addr| R | ACK | DATA | NACK | STOPThe STOP command should happen at the end of the transfer, otherwise we will always get data from register address 0
Quoted 6 lines
Signed-off-by Ye Li <[email protected]>Acked-by Peng Fan <[email protected]>Cc Heiko Schocher <[email protected]>--- drivers/i2c/imx_lpi2c.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-)
Good catch.
bye,
Heiko
Signature · 3 lines
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: +49-8142-66989-52 Fax: +49-8142-66989-80 Email: hs at denx.de
Peng Fan
reviewerPATCH 26/41 lpi2c: Add bus busy error handling
In reply to Peng FanFrom: Ye Li <[email protected]>
When doing "i2c dev 4; i2c probe" with ENET daughter card connected on iMX8QXP MEK board, we met a i2c bus busy issue, that the BBF of lpi2c always show busy, but the master is idle, and stop is detected (SDF set).
This patch addes a handling to re-init the lpi2c master for this case. Then the issue can be worked around.
--- drivers/i2c/imx_lpi2c.c | 53 +++++++++++++++++++++++++++++-------------------- 1 file changed, 32 insertions(+), 21 deletions(-)
drivers/i2c/imx_lpi2c.c +32 -21
@@ -18,6 +18,8 @@#define LPI2C_NACK_TOUT_MS 1#define LPI2C_TIMEOUT_MS 100 +static int bus_i2c_init (struct udevice *bus,int speed); +/* Weak linked function for overridden by some SoC power function */ int __weak init_i2c_power (unsigned i2c_num) {
@@ -91,8 +93,9 @@ static int bus_i2c_wait_for_tx_ready(struct imx_lpi2c_reg *regs)return result; } -static int bus_i2c_send (struct imx_lpi2c_reg *regs,u8 *txbuf,int len) +static int bus_i2c_send (struct udevice *bus,u8 *txbuf,int len) { +struct imx_lpi2c_reg *regs = (struct imx_lpi2c_reg *)devfdt_get_addr (bus);lpi2c_status_t result =LPI2C_SUCESS ;/* empty tx */
@@ -111,8 +114,9 @@ static int bus_i2c_send(struct imx_lpi2c_reg *regs, u8 *txbuf, int len)return result; } -static int bus_i2c_receive (struct imx_lpi2c_reg *regs,u8 *rxbuf,int len) +static int bus_i2c_receive (struct udevice *bus,u8 *rxbuf,int len) { +struct imx_lpi2c_reg *regs = (struct imx_lpi2c_reg *)devfdt_get_addr (bus);lpi2c_status_t result =LPI2C_SUCESS ;u32 val;ulong start_time =get_timer (0 );
@@ -153,15 +157,24 @@ static int bus_i2c_receive(struct imx_lpi2c_reg *regs, u8 *rxbuf, int len)return result; } -static int bus_i2c_start (struct imx_lpi2c_reg *regs,u8 addr,u8 dir) +static int bus_i2c_start (struct udevice *bus,u8 addr,u8 dir) {lpi2c_status_t result; +struct imx_lpi2c_reg *regs = + (struct imx_lpi2c_reg *)devfdt_get_addr (bus);u32 val; result =imx_lpci2c_check_busy_bus (regs);if (result) {debug ("i2c: start check busy bus: 0x%x\n" , result); -return result; + +/* Try to init the lpi2c then check the bus busy again */ +bus_i2c_init (bus,100000 ); + result =imx_lpci2c_check_busy_bus (regs); +if (result) { +printf ("i2c: Error check busy bus: 0x%x\n" , result); +return result; + } }/* clear all status flags */ writel (0x7f00 , ®s->msr);
@@ -181,9 +194,11 @@ static int bus_i2c_start(struct imx_lpi2c_reg *regs, u8 addr, u8 dir)return result; } -static int bus_i2c_stop (struct imx_lpi2c_reg *regs) +static int bus_i2c_stop (struct udevice *bus) {lpi2c_status_t result; +struct imx_lpi2c_reg *regs = + (struct imx_lpi2c_reg *)devfdt_get_addr (bus);u32 status;ulong start_time;
@@ -217,28 +232,28 @@ static int bus_i2c_stop(struct imx_lpi2c_reg *regs)return result; } -static int bus_i2c_read (struct imx_lpi2c_reg *regs,u32 chip,u8 *buf,int len) +static int bus_i2c_read (struct udevice *bus,u32 chip,u8 *buf,int len) {lpi2c_status_t result; - result =bus_i2c_start (regs, chip,1 ); + result =bus_i2c_start (bus, chip,1 );if (result)return result; - result =bus_i2c_receive (regs, buf, len); + result =bus_i2c_receive (bus, buf, len);if (result)return result;return result; } -static int bus_i2c_write (struct imx_lpi2c_reg *regs,u32 chip,u8 *buf,int len) +static int bus_i2c_write (struct udevice *bus,u32 chip,u8 *buf,int len) {lpi2c_status_t result; - result =bus_i2c_start (regs, chip,0 ); + result =bus_i2c_start (bus, chip,0 );if (result)return result; - result =bus_i2c_send (regs, buf, len); + result =bus_i2c_send (bus, buf, len);if (result)return result;
@@ -353,18 +368,16 @@ static int bus_i2c_init(struct udevice *bus, int speed)static int imx_lpi2c_probe_chip (struct udevice *bus,u32 chip,u32 chip_flags) { -struct imx_lpi2c_reg *regs;lpi2c_status_t result; - regs = (struct imx_lpi2c_reg *)devfdt_get_addr (bus); - result =bus_i2c_start (regs, chip,0 ); + result =bus_i2c_start (bus, chip,0 );if (result) { -bus_i2c_stop (regs); +bus_i2c_stop (bus);bus_i2c_init (bus,100000 );return result; } - result =bus_i2c_stop (regs); + result =bus_i2c_stop (bus);if (result)bus_i2c_init (bus,100000 );
@@ -373,16 +386,14 @@ static int imx_lpi2c_probe_chip(struct udevice *bus, u32 chip,static int imx_lpi2c_xfer (struct udevice *bus,struct i2c_msg *msg,int nmsgs) { -struct imx_lpi2c_reg *regs;int ret =0 , ret_stop; - regs = (struct imx_lpi2c_reg *)devfdt_get_addr (bus);for (; nmsgs >0 ; nmsgs--, msg++) {debug ("i2c_xfer: chip=0x%x, len=0x%x\n" , msg->addr, msg->len);if (msg->flags &I2C_M_RD ) - ret =bus_i2c_read (regs, msg->addr, msg->buf, msg->len); + ret =bus_i2c_read (bus, msg->addr, msg->buf, msg->len);else { - ret =bus_i2c_write (regs, msg->addr, msg->buf, + ret =bus_i2c_write (bus, msg->addr, msg->buf, msg->len);if (ret)break ;
@@ -392,7 +403,7 @@ static int imx_lpi2c_xfer(struct udevice *bus, struct i2c_msg *msg, int nmsgs)if (ret)debug ("i2c_write: error sending\n" ); - ret_stop =bus_i2c_stop (regs); + ret_stop =bus_i2c_stop (bus);if (ret_stop)debug ("i2c_xfer: stop bus error\n" );
Signature · 1 line
2.14.1
PATCH 26/41 lpi2c: Add bus busy error handling
Hello Peng,
Am 28.05.2018 um 14:25 schrieb Peng Fan:
Quoted 10 lines
From: Ye Li <[email protected]>
When doing "i2c dev 4; i2c probe" with ENET daughter card connected on iMX8QXP MEK board, we met a i2c bus busy issue, that the BBF of lpi2c always show busy, but the master is idle, and stop is detected (SDF set).
This patch addes a handling to re-init the lpi2c master for this case. Then the issue can be worked around.
Quoted 6 lines
Signed-off-by Ye Li <[email protected]>Acked-by Peng Fan <[email protected]>Cc Heiko Schocher <[email protected]>--- drivers/i2c/imx_lpi2c.c | 53 +++++++++++++++++++++++++++++-------------------- 1 file changed, 32 insertions(+), 21 deletions(-)
I have no such hardware, but the question is why is this bus busy shown?
Nevertheless, trying to re init a busy bus, before ginving up, seems a good attempt to me.
bye,
Heiko
Signature · 3 lines
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: +49-8142-66989-52 Fax: +49-8142-66989-80 Email: hs at denx.de
Peng Fan
reviewerPATCH 27/41 net: fec: do not access reserved register for i.MX8
In reply to Peng FanThe MIB RAM and FIFO receive start register does not exist on i.MX8. Accessing these register will cause SERROR.
--- drivers/net/fec_mxc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/net/fec_mxc.c +1 -1
@@ -564,7 +564,7 @@ static int fec_init(struct eth_device *dev, bd_t *bd)writel (0x00000000 , &fec->eth->gaddr2);/* Do not access reserved register */ -if (!is_mx6ul () && !is_mx6ull () && !is_mx8m ()) { +if (!is_mx6ul () && !is_mx6ull () && !is_mx8m () && !is_imx8 ()) {/* clear MIB RAM */ for (i = mib_ptr; i <= mib_ptr +0xfc ; i +=4 )writel (0 , i);
Signature · 1 line
2.14.1
PATCH 27/41 net: fec: do not access reserved register for i.MX8
Quoted 5 lines · Peng Fan
The MIB RAM and FIFO receive start register does not exist on i.MX8. Accessing these register will cause SERROR.
Signed-off-by Peng Fan <[email protected]>Cc Joe Hershberger <[email protected]>
PATCH 27/41 net: fec: do not access reserved register for i.MX8
In reply to Peng FanHi Peng,
Quoted 8 lines · On Mon, 28 May 2018 20:25:12 +0800 Peng Fan peng.fan at nxp.com wrote:
The MIB RAM and FIFO receive start register does not exist on i.MX8. Accessing these register will cause SERROR.
Signed-off-by Peng Fan <[email protected]>Cc Joe Hershberger <[email protected]>--- drivers/net/fec_mxc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
This should be merged for v2018.11, so
applied to u-boot-staging/agust at denx.de, thanks!
--
Anatolij
Peng Fan
reviewerPATCH 28/41 net: fec_mxc: Add the init_clk_fec function
In reply to Peng FanFrom: Ye Li <[email protected]>
When the power domain driver is enabled, we need to enable clocks after power domain on. So the clock settings can't set in board_init, needs to set them when the device is probed. Add this weak function in driver, that SoC codes can implement the clock settings.
--- drivers/net/fec_mxc.c | 7 +++++++ 1 file changed, 7 insertions(+)
drivers/net/fec_mxc.c +7 -0
@@ -1037,6 +1037,10 @@ struct mii_dev *fec_get_miibus(ulong base_addr, int dev_id)return bus; } +__weak void init_clk_fec (int index) +{ +} +#ifndef CONFIG_DM_ETH #ifdef CONFIG_PHYLIB int fec_probe(bd_t *bd, int dev_id, uint32_t base_addr,
@@ -1154,6 +1158,7 @@ int fecmxc_initialize_multi(bd_t *bd, int dev_id, int phy_id, uint32_t addr)#else base_mii = addr;#endif +init_clk_fec (dev_id);debug ("eth_init: fec_probe(bd, %i, %i) @ %08x\n" , dev_id, phy_id, addr); bus =fec_get_miibus (base_mii, dev_id);if (!bus)
@@ -1253,6 +1258,8 @@ static int fecmxc_probe(struct udevice *dev)uint32_t start;int ret; +init_clk_fec (dev->seq); + ret =fec_alloc_descs (priv);if (ret)return ret;
Signature · 1 line
2.14.1
PATCH 28/41 net: fec_mxc: Add the init_clk_fec function
Hi Peng,
Quoted 6 lines · Peng Fan
From: Ye Li <[email protected]>
When the power domain driver is enabled, we need to enable clocks after power domain on. So the clock settings can't set in
board_init, needs to set them when the device is probed. Add this weak function in driver, that SoC codes can implement the clock settings.
Can you not use clock infrastructure in DM to handle this. We don't really want these direct calls out of drivers like this. Simon?
Thanks,
-Joe
Quoted 46 lines
Reviewed-by Peng Fan <[email protected]>Signed-off-by Ye Li <[email protected]>Cc Joe Hershberger <[email protected]>--- drivers/net/fec_mxc.c | 7 +++++++ 1 file changed, 7 insertions(+)drivers/net/fec_mxc.c +7
-1@@ -1037,6 +1037,10 @@ struct mii_dev *fec_get_miibus(ulong base_addr, int dev_id)return bus; } +__weak void init_clk_fec (int index) +{ +} +#ifndef CONFIG_DM_ETH #ifdef CONFIG_PHYLIB int fec_probe(bd_t *bd, int dev_id, uint32_t base_addr,@@ -1154,6 +1158,7 @@ int fecmxc_initialize_multi(bd_t *bd, int dev_id, int phy_id, uint32_t addr)#else base_mii = addr;#endif +init_clk_fec (dev_id);debug ("eth_init: fec_probe(bd, %i, %i) @ %08x\n" , dev_id, phy_id, addr); bus =fec_get_miibus (base_mii, dev_id);if (!bus)@@ -1253,6 +1258,8 @@ static int fecmxc_probe(struct udevice *dev)uint32_t start;int ret; +init_clk_fec (dev->seq); + ret =fec_alloc_descs (priv);if (ret)return ret; --2.14.1
_______________________________________________
U-Boot mailing list
U-Boot at lists.denx.de
https://lists.denx.de/listinfo/u-boot
PATCH 28/41 net: fec_mxc: Add the init_clk_fec function
Hi,
Quoted 6 lines · Joe Hershberger
Hi Peng,
Quoted 2 lines · Peng Fan
From: Ye Li <[email protected]>
Quoted 8 lines
Quoted 4 lines
When the power domain driver is enabled, we need to enable clocks after power domain on. So the clock settings can't set in
board_init, needs to set them when the device is probed. Add this weak function in driver, that SoC codes can implement the clock settings.Can you not use clock infrastructure in DM to handle this. We don't really want these direct calls out of drivers like this. Simon?
Yes that is definitely bad.
Probably the easiest option is to add a clock driver.
Regards,
Simon
Peng Fan
reviewerPATCH 28/41 net: fec_mxc: Add the init_clk_fec function
Hi Joe, Simon,
Quoted 22 lines
-----Original Message-----
From: sjg at google.com [mailto:sjg at google.com] On Behalf Of Simon Glass
Sent: 2018年6月13日 9:26
To: Joe Hershberger <[email protected]>
Cc: Peng Fan <[email protected]>; Stefano Babic <[email protected]>; Fabio Estevam <[email protected]>; u-boot <[email protected]>
Subject: Re: [U-Boot] [PATCH 28/41] net:fec_mxc: Add theinit_clk_fecfunctionHi,
Quoted 11 lines · Joe Hershberger
Hi Peng,
Quoted 6 lines · Peng Fan
From: Ye Li <[email protected]>
When the power domain driver is enabled, we need to enable clocks after power domain on. So the clock settings can't set in
board_init, needs to set them when the device is probed. Add this weak function in driver, that SoC codes can implement the clock settings.
Quoted 7 lines
Quoted 3 lines
Can you not use clock infrastructure in DM to handle this. We don't really want these direct calls out of drivers like this. Simon?
Yes that is definitely bad.
Probably the easiest option is to add a clock driver.
I'll give a try to add a clock DM driver.
Thanks,
Peng.
Quoted 3 lines
Regards,
Simon
Peng Fan
reviewerPATCH 29/41 sata: Add i.MX8 SATA support
In reply to Peng FanFrom: Ye Li <[email protected]>
- some delay is required between SATA_CTRL0 RST SET and CLR. Otherwise, sata phy link would be down.
- specific the ahci modification by imx8qm platform.
--- drivers/ata/Kconfig | 6 +++++ drivers/ata/Makefile | 1 + drivers/ata/ahci.c | 25 ++++++++++++++++++++ drivers/ata/sata_imx.c | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 96 insertions(+) create mode 100644 drivers/ata/sata_imx.c
drivers/ata/Kconfig +6 -0
@@ -79,6 +79,12 @@ config MVSATA_IDE Enable this driver to support the SATA controller found in some Marvell SoCs, running in IDE compatibility mode using PIO. +config SATA_IMX + bool "Enable SATA driver support for i.MX8QM" + select LIBATA + help + Enable this driver to support the SATA controller found in i.MX8QM SoCs. + config SATA_MV bool "Enable Marvell SATA controller driver support" select LIBATA
drivers/ata/Makefile +1 -0
@@ -13,6 +13,7 @@ obj-$(CONFIG_LIBATA) += libata.o obj-$(CONFIG_MVSATA_IDE) += mvsata_ide.o obj-$(CONFIG_SATA) += sata.o obj-$(CONFIG_SATA_CEVA) += sata_ceva.o +obj-$(CONFIG_SATA_IMX) += sata_imx.o obj-$(CONFIG_SATA_MV) += sata_mv.o obj-$(CONFIG_SATA_SIL3114) += sata_sil3114.o obj-$(CONFIG_SATA_SIL) += sata_sil.o
drivers/ata/ahci.c +25 -0
@@ -26,6 +26,16 @@#include <dm/device-internal.h> #include <dm/lists.h> +#ifdef CONFIG_SCSI_AHCI_PLAT +#ifdef CONFIG_FSL_HSIO +#define HW_PP2C 0xAC +#define HW_PP3C 0xB0 +#define HW_PP4C 0xB4 +#define HW_PP5C 0xB8 +#define HW_PAXIC 0xC0 +#endif +#endif +static int ata_io_flush (struct ahci_uc_priv *uc_priv,u8 port);#ifndef CONFIG_DM_SCSI
@@ -191,6 +201,16 @@ static int ahci_host_init(struct ahci_uc_priv *uc_priv)debug ("ahci_host_init: start\n" ); +#ifdef CONFIG_SCSI_AHCI_PLAT +#ifdef CONFIG_FSL_HSIO +writel ((1 <<28 ) | (1 <<24 ) |readl (mmio +HW_PAXIC ), mmio +HW_PAXIC ); +writel (0x2718461C , mmio +HW_PP2C ); +writel (0x0D081907 , mmio +HW_PP3C ); +writel (0x06000815 , mmio +HW_PP4C ); +writel (0x800C96A4 , mmio +HW_PP5C ); +#endif +#endif + cap_save =readl (mmio +HOST_CAP ); cap_save &= ((1 <<28 ) | (1 <<17 )); cap_save |= (1 <<27 );/* Staggered Spin-up. Not needed. */
@@ -270,6 +290,11 @@ static int ahci_host_init(struct ahci_uc_priv *uc_priv) ret =ahci_link_up (uc_priv, i);if (ret) {printf ("SATA link %d timeout.\n" , i); +#ifdef CONFIG_SCSI_AHCI_PLAT +#ifdef CONFIG_FSL_HSIO +return -ENODEV ; +#endif +#endif continue ; }else {debug ("SATA link ok.\n" );
drivers/ata/sata_imx.c new file +64 -0
64 lines not on this page · raw message
Signature · 1 line
2.14.1
Peng Fan
reviewerPATCH 30/41 gpio: mxc_gpio: add support for i.MX8
In reply to Peng FanAdd i.MX8 support, there are 8 GPIO banks.
--- arch/arm/include/asm/arch-imx8/gpio.h | 22 ++++++++++++++++++++++ drivers/gpio/mxc_gpio.c | 30 +++++++++++++++++++++--------- 2 files changed, 43 insertions(+), 9 deletions(-) create mode 100644 arch/arm/include/asm/arch-imx8/gpio.h
arch/arm/include/asm/arch-imx8/gpio.h new file +22 -0
@@ -0,0 +1,22 @@ +/* +* Copyright 2018 NXP +* +* SPDX-License-Identifier: GPL-2.0+ +*/ + +#ifndef __ASM_ARCH_IMX8_GPIO_H +#define __ASM_ARCH_IMX8_GPIO_H + +#if !(defined(__KERNEL_STRICT_NAMES) || defined(__ASSEMBLY__)) +/* GPIO registers */ +struct gpio_regs { +u32 gpio_dr;/* data */ +u32 gpio_dir;/* direction */ +u32 gpio_psr;/* pad satus */ +}; +#endif + +/* IMX8 the GPIO index is from 0 not 1 */ +#define IMX_GPIO_NR (port, index) (((port) * 32)+((index) & 31)) + +#endif /* __ASM_ARCH_IMX8_GPIO_H */
drivers/gpio/mxc_gpio.c +21 -9
@@ -40,21 +40,27 @@ static unsigned long gpio_ports[] = { [2] = GPIO3_BASE_ADDR,#if defined(CONFIG_MX25 ) || defined(CONFIG_MX27 ) || defined(CONFIG_MX51 ) || \ defined(CONFIG_MX53 ) || defined(CONFIG_MX6 ) || \ - defined(CONFIG_MX7 ) || defined(CONFIG_MX8M ) + defined(CONFIG_MX7 ) || defined(CONFIG_MX8M ) || \ + defined(CONFIG_IMX8 ) [3] = GPIO4_BASE_ADDR,#endif #if defined(CONFIG_MX27 ) || defined(CONFIG_MX53 ) || defined(CONFIG_MX6 ) || \ - defined(CONFIG_MX7 ) || defined(CONFIG_MX8M ) + defined(CONFIG_MX7 ) || defined(CONFIG_MX8M ) || \ + defined(CONFIG_IMX8 ) [4] = GPIO5_BASE_ADDR, #if !(defined(CONFIG_MX6UL) || defined(CONFIG_MX6ULL) || defined(CONFIG_MX8M)) [5] = GPIO6_BASE_ADDR,#endif #endif -#if defined(CONFIG_MX53 ) || defined(CONFIG_MX6 ) || defined(CONFIG_MX7 ) +#if defined(CONFIG_MX53 ) || defined(CONFIG_MX6 ) || defined(CONFIG_MX7 ) || \ + defined(CONFIG_IMX8 )#if !(defined(CONFIG_MX6UL ) || defined(CONFIG_MX6ULL )) [6] = GPIO7_BASE_ADDR,#endif #endif +#if defined(CONFIG_IMX8 ) + [7] = GPIO8_BASE_ADDR, +#endif }; static int mxc_gpio_direction(unsigned int gpio,
@@ -347,19 +353,22 @@ static const struct mxc_gpio_plat mxc_plat[] = { { 2, (struct gpio_regs *)GPIO3_BASE_ADDR }, #if defined(CONFIG_MX25) || defined(CONFIG_MX27) || defined(CONFIG_MX51) || \ defined(CONFIG_MX53) || defined(CONFIG_MX6) || \ - defined(CONFIG_MX8M) + defined(CONFIG_MX8M) || defined(CONFIG_IMX8) { 3, (struct gpio_regs *)GPIO4_BASE_ADDR }, #endif #if defined(CONFIG_MX27) || defined(CONFIG_MX53) || defined(CONFIG_MX6) || \ - defined(CONFIG_MX8M) + defined(CONFIG_MX8M) || defined(CONFIG_IMX8) { 4, (struct gpio_regs *)GPIO5_BASE_ADDR }, #ifndef CONFIG_MX8M { 5, (struct gpio_regs *)GPIO6_BASE_ADDR }, #endif #endif -#if defined(CONFIG_MX53) || defined(CONFIG_MX6) +#if defined(CONFIG_MX53) || defined(CONFIG_MX6) || defined(CONFIG_IMX8) { 6, (struct gpio_regs *)GPIO7_BASE_ADDR }, #endif +#if defined(CONFIG_IMX8) + { 7, (struct gpio_regs *)GPIO8_BASE_ADDR }, +#endif }; U_BOOT_DEVICES(mxc_gpios) = {
@@ -368,19 +377,22 @@ U_BOOT_DEVICES(mxc_gpios) = { { "gpio_mxc", &mxc_plat[2] }, #if defined(CONFIG_MX25) || defined(CONFIG_MX27) || defined(CONFIG_MX51) || \ defined(CONFIG_MX53) || defined(CONFIG_MX6) || \ - defined(CONFIG_MX8M) + defined(CONFIG_MX8M) || defined(CONFIG_IMX8) { "gpio_mxc", &mxc_plat[3] }, #endif #if defined(CONFIG_MX27) || defined(CONFIG_MX53) || defined(CONFIG_MX6) || \ - defined(CONFIG_MX8M) + defined(CONFIG_MX8M) || defined(CONFIG_IMX8) { "gpio_mxc", &mxc_plat[4] }, #ifndef CONFIG_MX8M { "gpio_mxc", &mxc_plat[5] }, #endif #endif -#if defined(CONFIG_MX53) || defined(CONFIG_MX6) +#if defined(CONFIG_MX53) || defined(CONFIG_MX6) || defined(CONFIG_IMX8) { "gpio_mxc", &mxc_plat[6] }, #endif +#if defined(CONFIG_IMX8) + { "gpio_mxc", &mxc_plat[7] }, +#endif }; #endif #endif
Signature · 1 line
2.14.1
Peng Fan
reviewerPATCH 31/41 pinctrl: Add pinctrl driver for i.MX8
In reply to Peng FanAdd pinctrl driver for i.MX8. The pads configuration is controlled by SCU, so need to ask SCU to configure pads through scfw API. Add pinctrl-scu to invoke sc_pad_set to configue pads.
Add a new flag IMX8_USE_SCU to differentiate i.MX8 from other platforms which could directly configure pads from Acore side.
Add CONFIG_PINCTRL_IMX8 as the built gate.
--- drivers/pinctrl/nxp/Kconfig | 18 ++++ drivers/pinctrl/nxp/Makefile | 2 + drivers/pinctrl/nxp/pinctrl-imx.c | 209 ++++++++++++++++++++----------------- drivers/pinctrl/nxp/pinctrl-imx.h | 16 +++ drivers/pinctrl/nxp/pinctrl-imx8.c | 42 ++++++++ drivers/pinctrl/nxp/pinctrl-scu.c | 72 +++++++++++++ 6 files changed, 266 insertions(+), 93 deletions(-) create mode 100644 drivers/pinctrl/nxp/pinctrl-imx8.c create mode 100644 drivers/pinctrl/nxp/pinctrl-scu.c
drivers/pinctrl/nxp/Kconfig +18 -0
@@ -1,6 +1,9 @@ config PINCTRL_IMX bool +config PINCTRL_IMX_SCU + bool + config PINCTRL_IMX5 bool "IMX5 pinctrl driver" depends on ARCH_MX5 && PINCTRL_FULL
@@ -56,3 +59,18 @@ config PINCTRL_IMX7ULP is different from the linux one, this is a simple implementation, only parses the 'fsl,pins' property and configure related registers. + +config PINCTRL_IMX8 + bool "IMX8 pinctrl driver" + depends on ARCH_IMX8 && PINCTRL_FULL + select DEVRES + select PINCTRL_IMX + select PINCTRL_IMX_SCU + help + Say Y here to enable the imx8 pinctrl driver + + This provides a simple pinctrl driver for i.MX8 SoC familiy. + This feature depends on device tree configuration. This driver + is different from the linux one, this is a simple implementation, + only parses the 'fsl,pins' property and configure related + registers.
drivers/pinctrl/nxp/Makefile +2 -0
@@ -3,3 +3,5 @@ obj-$(CONFIG_PINCTRL_IMX5) += pinctrl-imx5.o obj-$(CONFIG_PINCTRL_IMX6) += pinctrl-imx6.o obj-$(CONFIG_PINCTRL_IMX7) += pinctrl-imx7.o obj-$(CONFIG_PINCTRL_IMX7ULP) += pinctrl-imx7ulp.o +obj-$(CONFIG_PINCTRL_IMX_SCU) += pinctrl-scu.o +obj-$(CONFIG_PINCTRL_IMX8) += pinctrl-imx8.o
drivers/pinctrl/nxp/pinctrl-imx.c +116 -93
247 lines not on this page · raw message
drivers/pinctrl/nxp/pinctrl-imx.h +16 -0
@@ -40,13 +40,29 @@ extern const struct pinctrl_ops imx_pinctrl_ops;#define FSL_PIN_SIZE 24#define SHARE_FSL_PIN_SIZE 20 +/* Each pin on imx8qm/qxp consists of 2 u32 PIN_FUNC_ID and 1 u32 CONFIG */ +#define SHARE_IMX8_PIN_SIZE 12 +#define SHARE_MUX_CONF_REG 0x1#define ZERO_OFFSET_VALID 0x2#define CONFIG_IBE_OBE 0x4 +#define IMX8_USE_SCU 0x8#define IOMUXC_CONFIG_SION (0x1 << 4)int imx_pinctrl_probe (struct udevice *dev,struct imx_pinctrl_soc_info *info);int imx_pinctrl_remove (struct udevice *dev); + +#ifdef CONFIG_PINCTRL_IMX_SCU +int imx_pinctrl_scu_conf_pins (struct imx_pinctrl_soc_info *info, +u32 *pin_data,int npins); +#else +static inline int imx_pinctrl_scu_conf_pins (struct imx_pinctrl_soc_info *info, +u32 *pin_data,int npins) +{ +return 0 ; +} +#endif +#endif /* __DRIVERS_PINCTRL_IMX_H */
drivers/pinctrl/nxp/pinctrl-imx8.c new file +42 -0
42 lines not on this page · raw message
drivers/pinctrl/nxp/pinctrl-scu.c new file +72 -0
72 lines not on this page · raw message
Signature · 1 line
2.14.1
Peng Fan
reviewerPATCH 32/41 power: Add power domain driver for i.MX8
In reply to Peng FanAdd the power domain DM driver for i.MX8, that it depends on the DTB power domain trees to generate the power domain provider devices. Users needs add power domain trees with property "compatible = "nxp,imx8-pd";"
When power on one PD device, the driver will power on its ancestor PD devices in power domain tree.
When power off on PD device, the driver will check its child PD devices first, only all child PD devices are off, then power off the current PD device. Then the driver checks sibling PD devices. If sibling PD devices are off, then it will power off parent PD device.
There is no counter maintained in this driver, but a state to hold current on/off state. So the request and free functions are empty.
The power domain implementation in i.MX8 DTB set the "#power-domain-cells" to 0, so there is no ID binding with each PD device. We don't use "id" variable in struct power_domain. At same time, we have to set of_xlate to empty to bypass standard of_xlate in uclass driver.
--- arch/arm/include/asm/arch-imx8/power-domain.h | 15 ++ drivers/power/domain/Kconfig | 6 + drivers/power/domain/Makefile | 1 + drivers/power/domain/imx8-power-domain.c | 315 ++++++++++++++++++++++++++ 4 files changed, 337 insertions(+) create mode 100644 arch/arm/include/asm/arch-imx8/power-domain.h create mode 100644 drivers/power/domain/imx8-power-domain.c
arch/arm/include/asm/arch-imx8/power-domain.h new file +15 -0
@@ -0,0 +1,15 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* +* Copyright 2017 NXP +*/ + +#ifndef _ASM_ARCH_IMX8_POWER_DOMAIN_H +#define _ASM_ARCH_IMX8_POWER_DOMAIN_H + +#include <asm/arch/sci/types.h> + +struct imx8_power_domain_platdata { +sc_rsrc_t resource_id; +}; + +#endif
drivers/power/domain/Kconfig +6 -0
@@ -31,4 +31,10 @@ config TEGRA186_POWER_DOMAIN Enable support for manipulating Tegra's on-SoC power domains via IPC requests to the BPMP (Boot and Power Management Processor). +config IMX8_POWER_DOMAIN + bool "Enable i.MX8 power domain driver" + depends on ARCH_IMX8 + help + Enable support for manipulating NXP i.MX8 on-SoC power domains via IPC + requests to the SCU. endmenu
drivers/power/domain/Makefile +1 -0
@@ -7,3 +7,4 @@ obj-$(CONFIG_BCM6328_POWER_DOMAIN) += bcm6328-power-domain.o obj-$(CONFIG_SANDBOX_POWER_DOMAIN) += sandbox-power-domain.o obj-$(CONFIG_SANDBOX_POWER_DOMAIN) += sandbox-power-domain-test.o obj-$(CONFIG_TEGRA186_POWER_DOMAIN) += tegra186-power-domain.o +obj-$(CONFIG_IMX8_POWER_DOMAIN) += imx8-power-domain.o
drivers/power/domain/imx8-power-domain.c new file +315 -0
315 lines not on this page · raw message
Signature · 1 line
2.14.1
Peng Fan
reviewerPATCH 33/41 power: Add PD device lookup interface to power domain uclass
In reply to Peng FanAdd power_domain_lookup_name interface to power domain uclass to find a power domain device by its DTB node name, not using its associated client device.
Through this interface, we can operate the power domain devices directly. This is needed for non-DM drivers.
--- drivers/power/domain/power-domain-uclass.c | 42 ++++++++++++++++++++++++++++++ include/power-domain.h | 15 +++++++++++ 2 files changed, 57 insertions(+)
drivers/power/domain/power-domain-uclass.c +42 -0
@@ -7,6 +7,8 @@#include <dm.h> #include <power-domain.h> #include <power-domain-uclass.h> +#include <dm/uclass-internal.h> +#include <dm/device-internal.h> static inline struct power_domain_ops *power_domain_dev_ops (struct udevice *dev) {
@@ -28,6 +30,46 @@ static int power_domain_of_xlate_default(struct power_domain *power_domain,return 0 ; } +int power_domain_lookup_name (const char *name, +struct power_domain *power_domain) +{ +struct udevice *dev; +struct power_domain_ops *ops; +int ret; + +debug ("%s(power_domain=%p name=%s)\n" , __func__, power_domain, name); + + ret =uclass_find_device_by_name (UCLASS_POWER_DOMAIN , name, &dev); +if (!ret) { +/* Probe the dev */ +device_probe (dev); + ops =power_domain_dev_ops (dev); + + power_domain->dev = dev; +if (ops->of_xlate) + ret = ops->of_xlate (power_domain,NULL ); +else + ret =power_domain_of_xlate_default (power_domain,NULL ); +if (ret) { +debug ("of_xlate() failed: %d\n" , ret); +return ret; + } + + ret = ops->request (power_domain); +if (ret) { +debug ("ops->request() failed: %d\n" , ret); +return ret; + } + +debug ("%s ok: %s\n" , __func__, dev->name); + +return 0 ; + } + +printf ("%s fail: %s, ret = %d\n" , __func__, name, ret); +return -EINVAL ; +} +int power_domain_get (struct udevice *dev,struct power_domain *power_domain) {struct ofnode_phandle_args args;
include/power-domain.h +15 -0
@@ -74,6 +74,21 @@ struct power_domain {unsigned long id; }; +/** +* power_domain_lookup_name - Lookup the power domain device by name. +* +* This looks up and requests a provider power domain by using its +* device name. This skip the associated client device, but directly +* get the power domain device. +* +* @name: The power domain device's name. +* @power_domain A pointer to a power domain struct to initialize. +* @return 0 if OK, or a negative error code. +*/ + +int power_domain_lookup_name (const char *name, +struct power_domain *power_domain); +/** * power_domain_get - Get/request the power domain for a device. *
Signature · 1 line
2.14.1
PATCH 33/41 power: Add PD device lookup interface to power domain uclass
Hi Peng,
Quoted 7 lines · Peng Fan
Add
power_domain_lookup_nameinterface to power domain uclass to find a power domain device by its DTB node name, not using its associated client device.Through this interface, we can operate the power domain devices directly. This is needed for non-DM drivers.
Quoted 8 lines
Signed-off-by Ye Li <[email protected]>Signed-off-by Peng Fan <[email protected]>Cc Simon Glass <[email protected]>--- drivers/power/domain/power-domain-uclass.c | 42 ++++++++++++++++++++++++++++++ include/power-domain.h | 15 +++++++++++ 2 files changed, 57 insertions(+)
Please add a test to test/dm/power-domain.c for your newe function.
Regards,
Simon
Peng Fan
reviewerPATCH 34/41 power-domain: add dummy functions when CONFIG_POWER_DOMAIN not defined
In reply to Peng FanAdd dummy functions when CONFIG_POWER_DOMAIN not defined.
--- include/power-domain.h | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+)
include/power-domain.h +37 -0
@@ -86,8 +86,16 @@ struct power_domain {* @return 0 if OK, or a negative error code. */ +#ifdef CONFIG_POWER_DOMAIN int power_domain_lookup_name (const char *name,struct power_domain *power_domain); +#else +static inline int power_domain_lookup_name (const char *name, +struct power_domain *power_domain) +{ +return -EINVAL ; +} +#endif /** * power_domain_get - Get/request the power domain for a device.
@@ -102,7 +110,15 @@ int power_domain_lookup_name(const char *name,* @power_domain A pointer to a power domain struct to initialize. * @return 0 if OK, or a negative error code. */ +#ifdef CONFIG_POWER_DOMAIN int power_domain_get (struct udevice *dev,struct power_domain *power_domain); +#else +static inline int power_domain_get (struct udevice *dev, +struct power_domain *power_domain) +{ +return -EINVAL ; +} +#endif /** * power_domain_free - Free a previously requested power domain.
@@ -111,7 +127,14 @@ int power_domain_get(struct udevice *dev, struct power_domain *power_domain);* requested by power_domain_get(). * @return 0 if OK, or a negative error code. */ +#ifdef CONFIG_POWER_DOMAIN int power_domain_free (struct power_domain *power_domain); +#else +static inline int power_domain_free (struct power_domain *power_domain) +{ +return -EINVAL ; +} +#endif /** * power_domain_on - Enable power to a power domain.
@@ -120,7 +143,14 @@ int power_domain_free(struct power_domain *power_domain);* requested by power_domain_get(). * @return 0 if OK, or a negative error code. */ +#ifdef CONFIG_POWER_DOMAIN int power_domain_on (struct power_domain *power_domain); +#else +static inline int power_domain_on (struct power_domain *power_domain); +{ +return -EINVAL ; +} +#endif /** * power_domain_off - Disable power ot a power domain.
@@ -129,6 +159,13 @@ int power_domain_on(struct power_domain *power_domain);* requested by power_domain_get(). * @return 0 if OK, or a negative error code. */ +#ifdef CONFIG_POWER_DOMAIN int power_domain_off (struct power_domain *power_domain); +#else +static inline int power_domain_off (struct power_domain *power_domain) +{ +return -EINVAL ; +} +#endif #endif
Signature · 1 line
2.14.1
PATCH 34/41 power-domain: add dummy functions when CONFIG_POWER_DOMAIN not defined
Quoted 7 lines · Peng Fan
Add dummy functions when
CONFIG_POWER_DOMAINnot defined.Signed-off-by Peng Fan <[email protected]>Cc Simon Glass <[email protected]>--- include/power-domain.h | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+)
Peng Fan
reviewerPATCH 35/41 dm: core: device: enable power domain in probe
In reply to Peng FanEnable power domain associated with the device when probe.
--- drivers/core/device.c | 7 +++++++ 1 file changed, 7 insertions(+)
drivers/core/device.c +7 -0
@@ -26,6 +26,7 @@#include <dm/util.h> #include <linux/err.h> #include <linux/list.h> +#include <power-domain.h> DECLARE_GLOBAL_DATA_PTR ;
@@ -296,6 +297,7 @@ static void *alloc_priv(int size, uint flags)int device_probe (struct udevice *dev) { +struct power_domain pd;const struct driver *drv;int size =0 ;int ret;
@@ -375,6 +377,11 @@ int device_probe(struct udevice *dev)if (dev->parent &&device_get_uclass_id (dev) !=UCLASS_PINCTRL )pinctrl_select_state (dev,"default" ); +if (dev->parent &&device_get_uclass_id (dev) !=UCLASS_POWER_DOMAIN ) { +if (!power_domain_get (dev, &pd)) +power_domain_on (&pd); + } + ret =uclass_pre_probe_device (dev);if (ret) goto fail;
Signature · 1 line
2.14.1
PATCH 35/41 dm: core: device: enable power domain in probe
Quoted 8 lines · Peng Fan
Enable power domain associated with the device when probe.
Signed-off-by Peng Fan <[email protected]>Cc Simon Glass <[email protected]>--- drivers/core/device.c | 7 +++++++ 1 file changed, 7 insertions(+)
How is this feature tested at present? Can you add something to the power-domain test?
Peng Fan
reviewerPATCH 35/41 dm: core: device: enable power domain in probe
Hi Simon
Quoted 18 lines
-----Original Message-----
From: sjg at google.com [mailto:sjg at google.com] On Behalf Of Simon Glass
Sent: 2018年5月31日 3:19
To: Peng Fan <[email protected]>
Cc: Stefano Babic <[email protected]>; Fabio Estevam <[email protected]>; U-Boot Mailing List <[email protected]>
Subject: Re: [PATCH 35/41] dm: core: device: enable power domain in probeQuoted 8 lines · Peng Fan
Enable power domain associated with the device when probe.
Signed-off-by Peng Fan <[email protected]>Cc Simon Glass <[email protected]>--- drivers/core/device.c | 7 +++++++ 1 file changed, 7 insertions(+)
Quoted 2 lines
How is this feature tested at present? Can you add something to the power-domain test?
Sorry for late reply.
Do you mean add code to test/dm/power-domain.c?
And the test is run test/run?
Thanks,
Peng.
PATCH 35/41 dm: core: device: enable power domain in probe
Hi Peng,
Quoted 20 lines · Peng Fan
Hi Simon
Quoted 18 lines
-----Original Message-----
From: sjg at google.com [mailto:sjg at google.com] On Behalf Of Simon Glass
Sent: 2018年5月31日 3:19
To: Peng Fan <[email protected]>
Cc: Stefano Babic <[email protected]>; Fabio Estevam <[email protected]>; U-Boot Mailing List <[email protected]>
Subject: Re: [PATCH 35/41] dm: core: device: enable power domain in probeQuoted 8 lines · Peng Fan
Enable power domain associated with the device when probe.
Signed-off-by Peng Fan <[email protected]>Cc Simon Glass <[email protected]>--- drivers/core/device.c | 7 +++++++ 1 file changed, 7 insertions(+)
Quoted 6 lines
Quoted 2 lines
How is this feature tested at present? Can you add something to the power-domain test?
Sorry for late reply.
Do you mean add code totest/dm/power-domain.c?
And the test is run test/run?
Yes and yes - or 'make tests'.
We really should have a 'make check' target.
Regards,
Simon
Peng Fan
reviewerPATCH 36/41 drivers: regulator: fixed: add off-on-delay-us
In reply to Peng FanAdd off-on-delay-us for fixed regulator.
--- drivers/power/regulator/fixed.c | 6 ++++++ 1 file changed, 6 insertions(+)
drivers/power/regulator/fixed.c +6 -0
@@ -16,6 +16,7 @@struct fixed_regulator_platdata {struct gpio_desc gpio;/* GPIO for regulator enable control */ unsigned int startup_delay_us; +unsigned int off_on_delay_us; };static int fixed_regulator_ofdata_to_platdata (struct udevice *dev)
@@ -50,6 +51,8 @@ static int fixed_regulator_ofdata_to_platdata(struct udevice *dev)/* Get optional ramp up delay */ dev_pdata->startup_delay_us =dev_read_u32_default (dev,"startup-delay-us" ,0 ); + dev_pdata->off_on_delay_us =dev_read_u32_default (dev, +"off-on-delay-us" ,0 );return 0 ; }
@@ -123,6 +126,9 @@ static int fixed_regulator_set_enable(struct udevice *dev, bool enable)udelay (dev_pdata->startup_delay_us);debug ("%s: done\n" , __func__); +if (!enable && dev_pdata->off_on_delay_us) +udelay (dev_pdata->off_on_delay_us); +return 0 ; }
Signature · 1 line
2.14.1
PATCH 36/41 drivers: regulator: fixed: add off-on-delay-us
Quoted 7 lines · Peng Fan
Add off-on-delay-us for fixed regulator.
Signed-off-by Peng Fan <[email protected]>Cc Simon Glass <[email protected]>--- drivers/power/regulator/fixed.c | 6 ++++++ 1 file changed, 6 insertions(+)
Can you also please add the DT binding file for this?
Peng Fan
reviewerPATCH 37/41 mmc: fsl_esdhc: fix sd/mmc ddr mode clock setting issue
In reply to Peng FanFrom: Ye Li <[email protected]>
When sd/mmc work at DDR mode, like HS400/HS400ES/DDR52/DDR50 mode, the actual clock rate is just half of the expected clock.
This patch set the DDR_EN bit first for DDR mode, hardware divide the usdhc clock automatically, then follow the original sdr clock setting method.
--- drivers/mmc/fsl_esdhc.c | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-)
drivers/mmc/fsl_esdhc.c +19 -5
@@ -583,18 +583,32 @@ static void set_sysctl(struct fsl_esdhc_priv *priv, struct mmc *mmc, uint clock)#else int pre_div =2 ;#endif -int ddr_pre_div = mmc->ddr_mode ?2 :1 ;int sdhc_clk = priv->sdhc_clk;uint clk; +/* +* For ddr mode, usdhc need to enable DDR mode first, after select +* this DDR mode, usdhc will automatically divide the usdhc clock +*/ +if (mmc->ddr_mode) { +writel (readl (®s->mixctrl) |MIX_CTRL_DDREN , ®s->mixctrl); + sdhc_clk >>=1 ; + } +if (clock < mmc->cfg->f_min) clock = mmc->cfg->f_min; -while (sdhc_clk / (16 * pre_div * ddr_pre_div) > clock && pre_div <256 ) - pre_div *=2 ; +if ((sdhc_clk /16 ) > clock) { +for (; pre_div <256 ; pre_div *=2 ) +if ((sdhc_clk / pre_div) <= (clock *16 )) +break ; + }else { + pre_div =1 ; + } -while (sdhc_clk / (div * pre_div * ddr_pre_div) > clock && div <16 ) - div++; +for (div =1 ; div <=16 ; div++) +if ((sdhc_clk / (div * pre_div)) <= clock) +break ; pre_div >>=1 ; div -=1 ;
Signature · 1 line
2.14.1
PATCH 37/41 mmc: fsl_esdhc: fix sd/mmc ddr mode clock setting issue
Dear Peng Fan,
Quoted 37 lines · Peng Fan
From: Ye Li <[email protected]>
When sd/mmc work at DDR mode, like HS400/HS400ES/DDR52/DDR50 mode, the actual clock rate is just half of the expected clock.
This patch set the
DDR_ENbit first for DDR mode, hardware divide the usdhc clock automatically, then follow the original sdr clock setting method.Signed-off-by Haibo Chen <[email protected]>Signed-off-by Ye Li <[email protected]>--- drivers/mmc/fsl_esdhc.c | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-)drivers/mmc/fsl_esdhc.c +9
-1@@ -583,18 +583,32 @@ static void set_sysctl(struct fsl_esdhc_priv *priv, struct mmc *mmc, uint clock)#else int pre_div =2 ;#endif -int ddr_pre_div = mmc->ddr_mode ?2 :1 ;int sdhc_clk = priv->sdhc_clk;uint clk; +/* +* For ddr mode, usdhc need to enable DDR mode first, after select +* this DDR mode, usdhc will automatically divide the usdhc clock +*/ +if (mmc->ddr_mode) { +writel (readl (®s->mixctrl) |MIX_CTRL_DDREN , ®s->mixctrl); + sdhc_clk >>=1 ; + } +if (clock < mmc->cfg->f_min)
drivers/mmc/fsl_esdhc.c static void set_sysctl(struct fsl_esdhc_priv *priv, struct mmc *mmc, uint clock) · line 606
Quoted 10 lines
drivers/mmc/fsl_esdhc.c +6
-2clock = mmc->cfg->f_min; -while (sdhc_clk / (16 * pre_div * ddr_pre_div) > clock && pre_div <256 ) - pre_div *=2 ; +if ((sdhc_clk /16 ) > clock) { +for (; pre_div <256 ; pre_div *=2 ) +if ((sdhc_clk / pre_div) <= (clock *16 )) +break ; + }else { + pre_div =1 ;
This value is not always available for this divider. See the conditions in the initialization of this variable giving its minimum value.
drivers/mmc/fsl_esdhc.c static void set_sysctl(struct fsl_esdhc_priv *priv, struct mmc *mmc, uint clock) · line 614
Quoted 10 lines
drivers/mmc/fsl_esdhc.c +4
-2+ } -while (sdhc_clk / (div * pre_div * ddr_pre_div) > clock && div <16 ) - div++; +for (div =1 ; div <=16 ; div++) +if ((sdhc_clk / (div * pre_div)) <= clock) +break ; pre_div >>=1 ; div -=1 ;
Best regards,
Benoît
Peng Fan
reviewerPATCH 37/41 mmc: fsl_esdhc: fix sd/mmc ddr mode clock setting issue
Quoted 65 lines
-----Original Message-----
From: Benoît Thébaudeau [mailto:benoit.thebaudeau.dev at gmail.com]
Sent: 2018年5月29日 6:32
To: Peng Fan <[email protected]>
Cc: sbabic at denx.de; Fabio Estevam <[email protected]>; U-Boot <[email protected]>; Bough Chen <[email protected]>
Subject: Re: [U-Boot] [PATCH 37/41] mmc:fsl_esdhc: fix sd/mmc ddr mode clock setting issueDear Peng Fan,
Quoted 3 lines · Peng Fan
From: Ye Li <[email protected]>
When sd/mmc work at DDR mode, like HS400/HS400ES/DDR52/DDR50 mode,
the
Quoted 20 lines
actual clock rate is just half of the expected clock.
This patch set the
DDR_ENbit first for DDR mode, hardware divide the usdhc clock automatically, then follow the original sdr clock setting method.Signed-off-by Haibo Chen <[email protected]>Signed-off-by Ye Li <[email protected]>--- drivers/mmc/fsl_esdhc.c | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-)drivers/mmc/fsl_esdhc.c index renamed from drivers/mmc/fsl_esdhc.c +0
-0
1b062ff06d..bf4ae74847100644drivers/mmc/fsl_esdhc.c +0
-0@@ -583,18 +583,32 @@ static void set_sysctl(struct fsl_esdhc_priv *priv, struct mmc *mmc, uint clock) #elseint pre_div =2 ;#endif drivers/mmc/fsl_esdhc.c static void set_sysctl(struct fsl_esdhc_priv · line 594
Quoted 10 lines
drivers/mmc/fsl_esdhc.c +6
-1-int ddr_pre_div = mmc->ddr_mode ?2 :1 ;int sdhc_clk = priv->sdhc_clk;uint clk; +/* +* For ddr mode, usdhc need to enable DDR mode first, after select +* this DDR mode, usdhc will automatically divide the usdhc clock +*/ +if (mmc->ddr_mode) { + writel(readl(®s->mixctrl) | MIX_CTRL_DDREN,
®s->mixctrl);drivers/mmc/fsl_esdhc.c static void set_sysctl(struct fsl_esdhc_priv *priv, struct mmc *mmc, uint clock)
Quoted 7 lines
drivers/mmc/fsl_esdhc.c +3
-1+ sdhc_clk >>=1 ; + } +if (clock < mmc->cfg->f_min) clock = mmc->cfg->f_min; - while (sdhc_clk / (16 * pre_div * ddr_pre_div) > clock && pre_div <256)
drivers/mmc/fsl_esdhc.c static void set_sysctl(struct fsl_esdhc_priv *priv, struct mmc *mmc, uint clock) · line 606
Quoted 7 lines
drivers/mmc/fsl_esdhc.c +6
-1- pre_div *=2 ; +if ((sdhc_clk /16 ) > clock) { +for (; pre_div <256 ; pre_div *=2 ) +if ((sdhc_clk / pre_div) <= (clock *16 )) +break ; + }else { + pre_div =1 ;
Quoted 2 lines
This value is not always available for this divider. See the conditions in the initialization of this variable giving its minimum value.
The else {pre_div = 1;} could be removed then.
Thanks,
Peng.
Quoted 14 lines
drivers/mmc/fsl_esdhc.c static void set_sysctl(struct fsl_esdhc_priv *priv, struct mmc *mmc, uint clock) · line 614
Quoted 11 lines
drivers/mmc/fsl_esdhc.c +4
-2+ } -while (sdhc_clk / (div * pre_div * ddr_pre_div) > clock && div <16 ) - div++; +for (div =1 ; div <=16 ; div++) +if ((sdhc_clk / (div * pre_div)) <= clock) +break ; pre_div >>=1 ; div -=1 ;Best regards,
Benoît
PATCH 37/41 mmc: fsl_esdhc: fix sd/mmc ddr mode clock setting issue
Dear Peng Fan,
Some other remarks.
Quoted 42 lines · Peng Fan
Quoted 42 lines
-----Original Message-----
From: Benoît Thébaudeau [mailto:benoit.thebaudeau.dev at gmail.com]
Sent: 2018年5月29日 6:32
To: Peng Fan <[email protected]>
Cc: sbabic at denx.de; Fabio Estevam <[email protected]>; U-Boot <[email protected]>; Bough Chen <[email protected]>
Subject: Re: [U-Boot] [PATCH 37/41] mmc:fsl_esdhc: fix sd/mmc ddr mode clock setting issueDear Peng Fan,
Quoted 3 lines · Peng Fan
From: Ye Li <[email protected]>
When sd/mmc work at DDR mode, like HS400/HS400ES/DDR52/DDR50 mode,
the
Quoted 24 lines
actual clock rate is just half of the expected clock.
This patch set the
DDR_ENbit first for DDR mode, hardware divide the usdhc clock automatically, then follow the original sdr clock setting method.Signed-off-by Haibo Chen <[email protected]>Signed-off-by Ye Li <[email protected]>--- drivers/mmc/fsl_esdhc.c | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-)drivers/mmc/fsl_esdhc.c index renamed from drivers/mmc/fsl_esdhc.c +0
-0
1b062ff06d..bf4ae74847100644drivers/mmc/fsl_esdhc.c +0
-1@@ -583,18 +583,32 @@ static void set_sysctl(struct fsl_esdhc_priv *priv, struct mmc *mmc, uint clock) #elseint pre_div =2 ;#endif -int ddr_pre_div = mmc->ddr_mode ?2 :1 ;int sdhc_clk = priv->sdhc_clk;uint clk;
Quoted 7 lines
Quoted 7 lines
drivers/mmc/fsl_esdhc.c static void set_sysctl(struct fsl_esdhc_priv *priv, struct mmc *mmc, uint clock)
Quoted 6 lines
drivers/mmc/fsl_esdhc.c +6
-0+/* +* For ddr mode, usdhc need to enable DDR mode first, after select +* this DDR mode, usdhc will automatically divide the usdhc clock +*/ +if (mmc->ddr_mode) { + writel(readl(®s->mixctrl) | MIX_CTRL_DDREN,
®s->mixctrl);
Isn't this redundant with what is done in esdhc_set_timing()? According to the reference manual, the prescalers might have to be set after DDREN (as done here), so perhaps DDREN does not have to be set too in esdhc_set_timing().
Quoted 16 lines
Quoted 16 lines
drivers/mmc/fsl_esdhc.c static void set_sysctl(struct fsl_esdhc_priv *priv, struct mmc *mmc, uint clock)
Quoted 7 lines
drivers/mmc/fsl_esdhc.c +3
-1+ sdhc_clk >>=1 ; + } +if (clock < mmc->cfg->f_min) clock = mmc->cfg->f_min; - while (sdhc_clk / (16 * pre_div * ddr_pre_div) > clock && pre_div <256)
Quoted 7 lines
drivers/mmc/fsl_esdhc.c +6
-1- pre_div *=2 ; +if ((sdhc_clk /16 ) > clock) { +for (; pre_div <256 ; pre_div *=2 ) +if ((sdhc_clk / pre_div) <= (clock *16 )) +break ; + }else { + pre_div =1 ;
Quoted 4 lines
Quoted 2 lines
This value is not always available for this divider. See the conditions in the initialization of this variable giving its minimum value.
The else {
pre_div= 1;} could be removed then.
And the if conditioning the for loop becomes useless. In the end, the new loop would be equivalent to the previous while loop.
Quoted 6 lines
Quoted 6 lines
drivers/mmc/fsl_esdhc.c static void set_sysctl(struct fsl_esdhc_priv *priv, struct mmc *mmc, uint clock) · line 609
Quoted 6 lines
drivers/mmc/fsl_esdhc.c +2
-2+ } -while (sdhc_clk / (div * pre_div * ddr_pre_div) > clock && div <16 ) - div++; +for (div =1 ; div <=16 ; div++)
div is already initialized in its definition, so only one of these initializations can be kept.
Quoted 2 lines
Quoted 2 lines
drivers/mmc/fsl_esdhc.c static void set_sysctl(struct fsl_esdhc_priv *priv, struct mmc *mmc, uint clock) · line 611
Quoted 2 lines
drivers/mmc/fsl_esdhc.c +2
-0+if ((sdhc_clk / (div * pre_div)) <= clock) +break ;
The only difference with the previous while loop is the "<= 16", which is correct, but maybe the change could have been limited to that.
Quoted 3 lines
Quoted 3 lines
drivers/mmc/fsl_esdhc.c static void set_sysctl(struct fsl_esdhc_priv *priv, struct mmc *mmc, uint clock) · line 614
Quoted 3 lines
drivers/mmc/fsl_esdhc.c +0
-0pre_div >>=1 ; div -=1 ;
Best regards,
Benoît
Peng Fan
reviewerPATCH 38/41 log: include command header file
In reply to Peng Fancmd_tbl_t is defined in command.h, so include it in log.h
--- include/log.h | 1 + 1 file changed, 1 insertion(+)
include/log.h +1 -0
@@ -9,6 +9,7 @@#ifndef __LOG_H#define __LOG_H +#include <command.h> #include <dm/uclass-id.h> #include <linux/list.h>
Signature · 1 line
2.14.1
PATCH 38/41 log: include command header file
Quoted 8 lines · Peng Fan
cmd_tbl_tis defined incommand.h, so include it inlog.hSigned-off-by Peng Fan <[email protected]>Cc Simon Glass <[email protected]>--- include/log.h | 1 + 1 file changed, 1 insertion(+)
Better I think to get rid of the cmd_tbl_t typedef and forward-declare the struct in log.h
Peng Fan
reviewerPATCH 39/41 i2c-mux: pca954x: support pca9646 i2c switch
In reply to Peng FanAdd the PCA9646 support, which is 2-wire bus switch and buffered 4-channel.
--- drivers/i2c/muxes/pca954x.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-)
drivers/i2c/muxes/pca954x.c +8 -1
@@ -17,7 +17,8 @@ DECLARE_GLOBAL_DATA_PTR;enum pca_type {PCA9544 ,PCA9547 , -PCA9548 +PCA9548 , +PCA9646 };struct chip_desc {
@@ -51,6 +52,11 @@ static const struct chip_desc chips[] = { .muxtype = pca954x_isswi, .width = 8, }, + [PCA9646] = { + .enable = 0x0, + .muxtype = pca954x_isswi, + .width = 4, + }, }; static int pca954x_deselect(struct udevice *mux, struct udevice *bus,
@@ -86,6 +92,7 @@ static const struct udevice_id pca954x_ids[] = { { .compatible = "nxp,pca9544", .data = PCA9544 }, { .compatible = "nxp,pca9547", .data = PCA9547 }, { .compatible = "nxp,pca9548", .data = PCA9548 }, + { .compatible = "nxp,pca9646", .data = PCA9646 }, { } };
Signature · 1 line
2.14.1
Peng Fan
reviewerPATCH 40/41 dts: imx8qxp: Add DTS and binding header files
In reply to Peng FanIntroduce dtsi file for i.MX8QXP.
--- arch/arm/dts/Makefile | 2 + arch/arm/dts/fsl-imx8qxp-mek.dts | 416 ++++++++ arch/arm/dts/fsl-imx8qxp.dtsi | 1593 +++++++++++++++++++++++++++++ include/dt-bindings/clock/imx8qxp-clock.h | 533 ++++++++++ include/dt-bindings/soc/imx8_pd.h | 197 ++++ 5 files changed, 2741 insertions(+) create mode 100644 arch/arm/dts/fsl-imx8qxp-mek.dts create mode 100644 arch/arm/dts/fsl-imx8qxp.dtsi create mode 100644 include/dt-bindings/clock/imx8qxp-clock.h create mode 100644 include/dt-bindings/soc/imx8_pd.h
arch/arm/dts/Makefile +2 -0
@@ -432,6 +432,8 @@ dtb-$(CONFIG_MX7) += imx7-colibri.dtb \ dtb-$(CONFIG_ARCH_MX7ULP) += imx7ulp-evk.dtb +dtb-$(CONFIG_ARCH_IMX8) += fsl-imx8qxp-mek.dtb + dtb-$(CONFIG_RCAR_GEN3) += \ r8a7795-h3ulcb.dtb \ r8a7795-salvator-x.dtb \
arch/arm/dts/fsl-imx8qxp-mek.dts new file +416 -0
416 lines not on this page · raw message
arch/arm/dts/fsl-imx8qxp.dtsi new file +1593 -0
1,593 lines not on this page · raw message
include/dt-bindings/clock/imx8qxp-clock.h new file +533 -0
533 lines not on this page · raw message
include/dt-bindings/soc/imx8_pd.h new file +197 -0
197 lines not on this page · raw message
Signature · 1 line
2.14.1
Peng Fan
reviewerPATCH 41/41 imx: 8qxp_mek: Add i.MX8QXP MEK board support
In reply to Peng FanAdd board level codes and configs for i.MX8QXP MEK board.
- Enabled DM driver:
FEC, LPUART, LPI2C, GPIO, SD/MMC, PCA953X, pinctrl, Power-domain
- Board defconfigs:
imx8qxp_mek_defconfig
Boot log:
"
U-Boot 2018.05-00384-g8907416f0e (May 28 2018 - 14:06:27 +0800)
CPU: Freescale i.MX8QXP revB A35 at 1200 MHz Model: Freescale i.MX8QXP MEK Board: iMX8QXP MEK Boot: SD1 DRAM: 3 GiB MMC: Actual rate for SDHC_0 is 333333333 Actual rate for SDHC_1 is 200000000 FSL_SDHC: 0, FSL_SDHC: 1 Loading Environment from MMC... OK In: serial at 5a060000 Out: serial at 5a060000 Err: serial at 5a060000 Net: No ethernet found. Hit any key to stop autoboot: 0
"
--- arch/arm/mach-imx/imx8/Kconfig | 13 +++ board/freescale/imx8qxp_mek/Kconfig | 14 +++ board/freescale/imx8qxp_mek/MAINTAINERS | 6 ++ board/freescale/imx8qxp_mek/Makefile | 7 ++ board/freescale/imx8qxp_mek/imx8qxp_mek.c | 159 ++++++++++++++++++++++++++++++ configs/imx8qxp_mek_defconfig | 47 +++++++++ include/configs/imx8qxp_mek.h | 157 +++++++++++++++++++++++++++++ 7 files changed, 403 insertions(+) create mode 100644 board/freescale/imx8qxp_mek/Kconfig create mode 100644 board/freescale/imx8qxp_mek/MAINTAINERS create mode 100644 board/freescale/imx8qxp_mek/Makefile create mode 100644 board/freescale/imx8qxp_mek/imx8qxp_mek.c create mode 100644 configs/imx8qxp_mek_defconfig create mode 100644 include/configs/imx8qxp_mek.h
arch/arm/mach-imx/imx8/Kconfig +13 -0
@@ -10,4 +10,17 @@ config IMX8QXP config SYS_SOC default "imx8" +choice + prompt "i.MX8 board select" + optional + +config TARGET_IMX8QXP_MEK + bool "Support i.MX8QXP MEK board" + select BOARD_LATE_INIT + select IMX8QXP + +endchoice + +source "board/freescale/imx8qxp_mek/Kconfig" + endif
board/freescale/imx8qxp_mek/Kconfig new file +14 -0
@@ -0,0 +1,14 @@ +if TARGET_IMX8QXP_MEK + +config SYS_BOARD + default "imx8qxp_mek" + +config SYS_VENDOR + default "freescale" + +config SYS_CONFIG_NAME + default "imx8qxp_mek" + +source "board/freescale/common/Kconfig" + +endif
board/freescale/imx8qxp_mek/MAINTAINERS new file +6 -0
@@ -0,0 +1,6 @@ +i.MX8QXP MEK BOARD +M: Peng Fan <[email protected]> +S: Maintained +F: board/freescale/imx8qxp_mek/ +F: include/configs/imx8qxp_mek.h +F: configs/imx8qxp_mek_defconfig
board/freescale/imx8qxp_mek/Makefile new file +7 -0
@@ -0,0 +1,7 @@ +# +# Copyright 2017 NXP +# +# SPDX-License-Identifier: GPL-2.0+ +# + +obj-y += imx8qxp_mek.o
board/freescale/imx8qxp_mek/imx8qxp_mek.c new file +159 -0
159 lines not on this page · raw message
configs/imx8qxp_mek_defconfig new file +47 -0
47 lines not on this page · raw message
include/configs/imx8qxp_mek.h new file +157 -0
157 lines not on this page · raw message
Signature · 1 line
2.14.1
Peng Fan
reviewercover imx: add i.MX8QXP support
In reply to Peng FanHi Stefano, Fabio,
Sorry for the bother in patch 1, that patch is big. So ask here. Do you have any comments on the patchset?
Thanks,
Peng
Quoted 220 lines
-----Original Message-----
From: Peng Fan
Sent: 2018年5月28日 20:25
To: sbabic at denx.de; Fabio Estevam <[email protected]>
Cc: u-boot at lists.denx.de; Peng Fan <[email protected]>
Subject: [PATCH 00/41] imx: add i.MX8QXP supportThis patchset is to upstream i.MX8QXP and mek board support, with some drivers update to support i.MX8QXP. The information about the processor could be found
https://www.nxp.com/products/processors-and-microcontrollers/applications-p
rocessors/i.mx-applications-processors/i.mx-8-processors/i.mx-8x-family-arm-co rtex-a35-3d-graphics-4k-video-dsp-error-correcting-code-on-ddr:i.MX8XThe architecture of i.MX8QXP is different from i.MX6/7/8M, inside i.MX8QXP, there is a dedicated processor(SCU) used for power/clock/pin/ pad/resource management/thermal and etc. The ACore need to communicate with SCU using SCFW API. The SCFW API is exported by SCFW, so we directly import it into U-Boot source code.
Gao Pan (1):
imx: lpi2c: fix clock issue when NACK detectedPeng Fan (32):
imx: import SCFW API
imx: addKconfigentry for i.MX8
arm: build mach-imx for i.MX8
imx8: add IPC communication support between ACore and SCU
arm:global_data: introduceipc_channel_handle
imx:boot_mode: Add FLEXSPI boot entry
imx8: add imx-regs header file
imx8: pins: include i.MX8QXP pin header whenCONFIG_IMX8QXPdefined
imx: add i.MX8 cpu type
imx8: add basic cpu support
imx8: add boot device detection
imx8: implementmmc_get_env_dev
imx8: implementimx_get_mac_from_fuse
imx8: implementget_board_serial
imx8: add mmu and dram related functiions
imx8: add bootaux support
imx8: addarch_cpu_init
imx8: add clock driver
imx8: add iomux configuration code
serial_lpuart: Update lpuart driver to support i.MX8
net: fec: do not access reserved register for i.MX8
gpio:mxc_gpio: add support for i.MX8
pinctrl: Add pinctrl driver for i.MX8
power: Add power domain driver for i.MX8
power: Add PD device lookup interface to power domain uclass
power-domain: add dummy functions whenCONFIG_POWER_DOMAINnot
defined
dm: core: device: enable power domain in probe
drivers: regulator: fixed: add off-on-delay-us
log: include command header file
i2c-mux: pca954x: support pca9646 i2c switch
dts: imx8qxp: Add DTS and binding header files
imx: 8qxp_mek: Add i.MX8QXP MEK board supportYe Li (8):
fsl_esdhc: Update usdhc driver to support i.MX8
serial: lpuart: Enable RX and TX FIFO
imx_lpi2c: Update lpi2c driver to support imx8
lpi2c: Fix bus stop problem in xfer
lpi2c: Add bus busy error handling
net:fec_mxc: Add theinit_clk_fecfunction
sata: Add i.MX8 SATA support
mmc:fsl_esdhc: fix sd/mmc ddr mode clock setting issuearch/arm/Kconfig | 8 + arch/arm/Makefile | 2 +- arch/arm/dts/Makefile | 2 + arch/arm/dts/fsl-imx8qxp-mek.dts | 416 +++++ arch/arm/dts/fsl-imx8qxp.dtsi | 1593 ++++++++++++++++++++ arch/arm/include/asm/arch-imx/cpu.h | 5 + arch/arm/include/asm/arch-imx8/clock.h | 36 + arch/arm/include/asm/arch-imx8/cpu.h | 26 + arch/arm/include/asm/arch-imx8/fsl_mu_hal.h | 54 + arch/arm/include/asm/arch-imx8/gpio.h | 22 + arch/arm/include/asm/arch-imx8/i2c.h | 34 + arch/arm/include/asm/arch-imx8/imx-regs.h | 119 ++ arch/arm/include/asm/arch-imx8/imx8-pins.h | 15 + arch/arm/include/asm/arch-imx8/imx8qm_pads.h | 295 ++++ arch/arm/include/asm/arch-imx8/imx8qxp_pads.h | 200 +++ arch/arm/include/asm/arch-imx8/iomux.h | 40 + arch/arm/include/asm/arch-imx8/power-domain.h | 15 + arch/arm/include/asm/arch-imx8/sci/ipc.h | 67 + arch/arm/include/asm/arch-imx8/sci/rpc.h | 131 ++ arch/arm/include/asm/arch-imx8/sci/sci.h | 39 + arch/arm/include/asm/arch-imx8/sci/svc/irq/api.h | 160 ++ arch/arm/include/asm/arch-imx8/sci/svc/misc/api.h | 523 +++++++ arch/arm/include/asm/arch-imx8/sci/svc/pad/api.h | 568 +++++++ arch/arm/include/asm/arch-imx8/sci/svc/pm/api.h | 686 +++++++++ arch/arm/include/asm/arch-imx8/sci/svc/rm/api.h | 759 ++++++++++ arch/arm/include/asm/arch-imx8/sci/svc/timer/api.h | 306 ++++ arch/arm/include/asm/arch-imx8/sci/types.h | 862 +++++++++++ arch/arm/include/asm/arch-imx8/sys_proto.h | 19 + arch/arm/include/asm/global_data.h | 4 + arch/arm/include/asm/mach-imx/boot_mode.h | 1 + arch/arm/include/asm/mach-imx/sys_proto.h | 3 + arch/arm/mach-imx/Makefile | 1 + arch/arm/mach-imx/imx8/Kconfig | 26 + arch/arm/mach-imx/imx8/Makefile | 13 + arch/arm/mach-imx/imx8/clock.c | 361 +++++ arch/arm/mach-imx/imx8/cpu.c | 783 ++++++++++ arch/arm/mach-imx/imx8/fsl_mu_hal.c | 28 + arch/arm/mach-imx/imx8/iomux.c | 47 + arch/arm/mach-imx/imx8/sci/ipc.c | 100 ++ arch/arm/mach-imx/imx8/sci/svc/irq/rpc.h | 54 + arch/arm/mach-imx/imx8/sci/svc/irq/rpc_clnt.c | 76 + arch/arm/mach-imx/imx8/sci/svc/misc/rpc.h | 76 + arch/arm/mach-imx/imx8/sci/svc/misc/rpc_clnt.c | 515 +++++++ arch/arm/mach-imx/imx8/sci/svc/pad/rpc.h | 68 + arch/arm/mach-imx/imx8/sci/svc/pad/rpc_clnt.c | 475 ++++++ arch/arm/mach-imx/imx8/sci/svc/pm/rpc.h | 73 + arch/arm/mach-imx/imx8/sci/svc/pm/rpc_clnt.c | 460 ++++++ arch/arm/mach-imx/imx8/sci/svc/rm/rpc.h | 83 + arch/arm/mach-imx/imx8/sci/svc/rm/rpc_clnt.c | 645 ++++++++ arch/arm/mach-imx/imx8/sci/svc/timer/rpc.h | 67 + arch/arm/mach-imx/imx8/sci/svc/timer/rpc_clnt.c | 365 +++++ board/freescale/imx8qxp_mek/Kconfig | 14 + board/freescale/imx8qxp_mek/MAINTAINERS | 6 + board/freescale/imx8qxp_mek/Makefile | 7 + board/freescale/imx8qxp_mek/imx8qxp_mek.c | 159 ++ configs/imx8qxp_mek_defconfig | 47 + drivers/ata/Kconfig | 6 + drivers/ata/Makefile | 1 + drivers/ata/ahci.c | 25 + drivers/ata/sata_imx.c | 64 + drivers/core/device.c | 7 + drivers/gpio/mxc_gpio.c | 30 +- drivers/i2c/imx_lpi2c.c | 82 +- drivers/i2c/muxes/pca954x.c | 9 +- drivers/mmc/fsl_esdhc.c | 32 +- drivers/net/fec_mxc.c | 9 +- drivers/pinctrl/nxp/Kconfig | 18 + drivers/pinctrl/nxp/Makefile | 2 + drivers/pinctrl/nxp/pinctrl-imx.c | 209 +-- drivers/pinctrl/nxp/pinctrl-imx.h | 16 + drivers/pinctrl/nxp/pinctrl-imx8.c | 42 + drivers/pinctrl/nxp/pinctrl-scu.c | 72 + drivers/power/domain/Kconfig | 6 + drivers/power/domain/Makefile | 1 + drivers/power/domain/imx8-power-domain.c | 315 ++++ drivers/power/domain/power-domain-uclass.c | 42 + drivers/power/regulator/fixed.c | 6 + drivers/serial/serial_lpuart.c | 48 +- include/configs/imx8qxp_mek.h | 157 ++ include/dt-bindings/clock/imx8qxp-clock.h | 533 +++++++ include/dt-bindings/pinctrl/pads-imx8qm.h | 975 ++++++++++++ include/dt-bindings/pinctrl/pads-imx8qxp.h | 770 ++++++++++ include/dt-bindings/soc/imx8_pd.h | 197 +++ include/dt-bindings/soc/imx_rsrc.h | 560 +++++++ include/fsl_lpuart.h | 2 +- .../asm/arch-mx7ulp => include}/imx_lpi2c.h | 0 include/log.h | 1 + include/power-domain.h | 52 + 88 files changed, 15691 insertions(+), 157 deletions(-) create mode 100644 arch/arm/dts/fsl-imx8qxp-mek.dts create mode 100644 arch/arm/dts/fsl-imx8qxp.dtsi create mode 100644 arch/arm/include/asm/arch-imx8/clock.h create mode 100644 arch/arm/include/asm/arch-imx8/cpu.h create mode 100644 arch/arm/include/asm/arch-imx8/fsl_mu_hal.h create mode 100644 arch/arm/include/asm/arch-imx8/gpio.h create mode 100644 arch/arm/include/asm/arch-imx8/i2c.h create mode 100644 arch/arm/include/asm/arch-imx8/imx-regs.h create mode 100644 arch/arm/include/asm/arch-imx8/imx8-pins.h create mode 100644 arch/arm/include/asm/arch-imx8/imx8qm_pads.h create mode 100644 arch/arm/include/asm/arch-imx8/imx8qxp_pads.h create mode 100644 arch/arm/include/asm/arch-imx8/iomux.h create mode 100644 arch/arm/include/asm/arch-imx8/power-domain.h create mode 100755 arch/arm/include/asm/arch-imx8/sci/ipc.h create mode 100755 arch/arm/include/asm/arch-imx8/sci/rpc.h create mode 100644 arch/arm/include/asm/arch-imx8/sci/sci.h create mode 100755 arch/arm/include/asm/arch-imx8/sci/svc/irq/api.h create mode 100755 arch/arm/include/asm/arch-imx8/sci/svc/misc/api.h create mode 100755 arch/arm/include/asm/arch-imx8/sci/svc/pad/api.h create mode 100755 arch/arm/include/asm/arch-imx8/sci/svc/pm/api.h create mode 100755 arch/arm/include/asm/arch-imx8/sci/svc/rm/api.h create mode 100755 arch/arm/include/asm/arch-imx8/sci/svc/timer/api.h create mode 100755 arch/arm/include/asm/arch-imx8/sci/types.h create mode 100644 arch/arm/include/asm/arch-imx8/sys_proto.h create mode 100644 arch/arm/mach-imx/imx8/Kconfig create mode 100644
arch/arm/mach-imx/imx8/Makefilecreate mode 100644arch/arm/mach-imx/imx8/clock.ccreate mode 100644arch/arm/mach-imx/imx8/cpu.ccreate mode 100644arch/arm/mach-imx/imx8/fsl_mu_hal.ccreate mode 100644 arch/arm/mach-imx/imx8/iomux.c create mode 100644 arch/arm/mach-imx/imx8/sci/ipc.c create mode 100644 arch/arm/mach-imx/imx8/sci/svc/irq/rpc.h create mode 100644 arch/arm/mach-imx/imx8/sci/svc/irq/rpc_clnt.c create mode 100644 arch/arm/mach-imx/imx8/sci/svc/misc/rpc.h create mode 100644 arch/arm/mach-imx/imx8/sci/svc/misc/rpc_clnt.c create mode 100644 arch/arm/mach-imx/imx8/sci/svc/pad/rpc.h create mode 100644 arch/arm/mach-imx/imx8/sci/svc/pad/rpc_clnt.c create mode 100644 arch/arm/mach-imx/imx8/sci/svc/pm/rpc.h create mode 100644 arch/arm/mach-imx/imx8/sci/svc/pm/rpc_clnt.c create mode 100644 arch/arm/mach-imx/imx8/sci/svc/rm/rpc.h create mode 100644 arch/arm/mach-imx/imx8/sci/svc/rm/rpc_clnt.c create mode 100644 arch/arm/mach-imx/imx8/sci/svc/timer/rpc.h create mode 100644 arch/arm/mach-imx/imx8/sci/svc/timer/rpc_clnt.c create mode 100644 board/freescale/imx8qxp_mek/Kconfig create mode 100644 board/freescale/imx8qxp_mek/MAINTAINERS create mode 100644 board/freescale/imx8qxp_mek/Makefile create mode 100644 board/freescale/imx8qxp_mek/imx8qxp_mek.c create mode 100644 configs/imx8qxp_mek_defconfig create mode 100644 drivers/ata/sata_imx.c create mode 100644 drivers/pinctrl/nxp/pinctrl-imx8.c create mode 100644 drivers/pinctrl/nxp/pinctrl-scu.c create mode 100644 drivers/power/domain/imx8-power-domain.c create mode 100644 include/configs/imx8qxp_mek.h create mode 100644 include/dt-bindings/clock/imx8qxp-clock.h create mode 100644 include/dt-bindings/pinctrl/pads-imx8qm.h create mode 100644 include/dt-bindings/pinctrl/pads-imx8qxp.h create mode 100644 include/dt-bindings/soc/imx8_pd.h create mode 100644 include/dt-bindings/soc/imx_rsrc.h rename {arch/arm/include/asm/arch-mx7ulp => include}/imx_lpi2c.h (100%)--
2.14.1
Fabio Estevam
maintainercover imx: add i.MX8QXP support
Hi Peng,
Quoted 4 lines · Peng Fan
Hi Stefano, Fabio,
Sorry for the bother in patch 1, that patch is big. So ask here. Do you have any comments on the patchset?
It would be better if you could split this 41 patch series into smaller pieces.
For example: you could send driver related patches to each subsystem maintainer separately instead of being part of this the huge series.
I will try to provide some feedback during this week.
Thanks for working on this.
Peng Fan
reviewercover imx: add i.MX8QXP support
Hi Fabio
Quoted 13 lines
-----Original Message-----
From: Fabio Estevam [mailto:festevam at gmail.com]
Sent: 2018年6月12日 22:08
To: Peng Fan <[email protected]>
Cc: sbabic at denx.de; Fabio Estevam <[email protected]>; u-boot at lists.denx.de
Subject: Re: [U-Boot] [PATCH 00/41] imx: add i.MX8QXP supportHi Peng,
Quoted 2 lines · Peng Fan
Hi Stefano, Fabio,
Quoted 7 lines
Quoted 2 lines
Sorry for the bother in patch 1, that patch is big. So ask here. Do you have any comments on the patchset?
It would be better if you could split this 41 patch series into smaller pieces.
For example: you could send driver related patches to each subsystem maintainer separately instead of being part of this the huge series.
Ok. I'll split them into small patchset in next version.
Quoted 2 lines
I will try to provide some feedback during this week.
Thanks.
Thanks,
Peng.
Quoted 2 lines
Thanks for working on this.
cover imx: add i.MX8QXP support
In reply to Peng FanHi Peng,
Quoted 11 lines · Peng Fan
This patchset is to upstream i.MX8QXP and mek board support, with some drivers update to support i.MX8QXP. The information about the processor could be found
https://www.nxp.com/products/processors-and-microcontrollers/applications-processors/i.mx-applications-processors/i.mx-8-processors/i.mx-8x-family-arm-cortex-a35-3d-graphics-4k-video-dsp-error-correcting-code-on-ddr:i.MX8XThe architecture of i.MX8QXP is different from i.MX6/7/8M, inside i.MX8QXP, there is a dedicated processor(SCU) used for power/clock/pin/ pad/resource management/thermal and etc. The ACore need to communicate with SCU using SCFW API. The SCFW API is exported by SCFW, so we directly import it into U-Boot source code.
first at all, thanks for this. It is a huge work, and all of us want to get the MX8 into U-Boot. I would like to plan how we can introduce the architecture in U-Boot.
First at all, I beg you to split the huge series into small pieces. It is quite difficult to review. I suggest you extract parts that are not related to MX8. Some of patches in the series can be already be merged because unrelated.
For example, I2C patches:
lpi2c: Fix bus stop problem in xfer
lpi2c: Add bus busy error handling
They can be simply merged because they fix issues. Some other Ye's patch fall into this category and can be merged independently foro mi.MX8.
I will also ask to split Patch 1 in small and easier to review pieces.
Best regards,
Stefano
Quoted 196 lines
Gao Pan (1):
imx: lpi2c: fix clock issue when NACK detectedPeng Fan (32):
imx: import SCFW API
imx: addKconfigentry for i.MX8
arm: build mach-imx for i.MX8
imx8: add IPC communication support between ACore and SCU
arm:global_data: introduceipc_channel_handle
imx:boot_mode: Add FLEXSPI boot entry
imx8: add imx-regs header file
imx8: pins: include i.MX8QXP pin header whenCONFIG_IMX8QXPdefined
imx: add i.MX8 cpu type
imx8: add basic cpu support
imx8: add boot device detection
imx8: implementmmc_get_env_dev
imx8: implementimx_get_mac_from_fuse
imx8: implementget_board_serial
imx8: add mmu and dram related functiions
imx8: add bootaux support
imx8: addarch_cpu_init
imx8: add clock driver
imx8: add iomux configuration code
serial_lpuart: Update lpuart driver to support i.MX8
net: fec: do not access reserved register for i.MX8
gpio:mxc_gpio: add support for i.MX8
pinctrl: Add pinctrl driver for i.MX8
power: Add power domain driver for i.MX8
power: Add PD device lookup interface to power domain uclass
power-domain: add dummy functions whenCONFIG_POWER_DOMAINnot defined
dm: core: device: enable power domain in probe
drivers: regulator: fixed: add off-on-delay-us
log: include command header file
i2c-mux: pca954x: support pca9646 i2c switch
dts: imx8qxp: Add DTS and binding header files
imx: 8qxp_mek: Add i.MX8QXP MEK board supportYe Li (8):
fsl_esdhc: Update usdhc driver to support i.MX8
serial: lpuart: Enable RX and TX FIFO
imx_lpi2c: Update lpi2c driver to support imx8
lpi2c: Fix bus stop problem in xfer
lpi2c: Add bus busy error handling
net:fec_mxc: Add theinit_clk_fecfunction
sata: Add i.MX8 SATA support
mmc:fsl_esdhc: fix sd/mmc ddr mode clock setting issuearch/arm/Kconfig | 8 + arch/arm/Makefile | 2 +- arch/arm/dts/Makefile | 2 + arch/arm/dts/fsl-imx8qxp-mek.dts | 416 +++++ arch/arm/dts/fsl-imx8qxp.dtsi | 1593 ++++++++++++++++++++ arch/arm/include/asm/arch-imx/cpu.h | 5 + arch/arm/include/asm/arch-imx8/clock.h | 36 + arch/arm/include/asm/arch-imx8/cpu.h | 26 + arch/arm/include/asm/arch-imx8/fsl_mu_hal.h | 54 + arch/arm/include/asm/arch-imx8/gpio.h | 22 + arch/arm/include/asm/arch-imx8/i2c.h | 34 + arch/arm/include/asm/arch-imx8/imx-regs.h | 119 ++ arch/arm/include/asm/arch-imx8/imx8-pins.h | 15 + arch/arm/include/asm/arch-imx8/imx8qm_pads.h | 295 ++++ arch/arm/include/asm/arch-imx8/imx8qxp_pads.h | 200 +++ arch/arm/include/asm/arch-imx8/iomux.h | 40 + arch/arm/include/asm/arch-imx8/power-domain.h | 15 + arch/arm/include/asm/arch-imx8/sci/ipc.h | 67 + arch/arm/include/asm/arch-imx8/sci/rpc.h | 131 ++ arch/arm/include/asm/arch-imx8/sci/sci.h | 39 + arch/arm/include/asm/arch-imx8/sci/svc/irq/api.h | 160 ++ arch/arm/include/asm/arch-imx8/sci/svc/misc/api.h | 523 +++++++ arch/arm/include/asm/arch-imx8/sci/svc/pad/api.h | 568 +++++++ arch/arm/include/asm/arch-imx8/sci/svc/pm/api.h | 686 +++++++++ arch/arm/include/asm/arch-imx8/sci/svc/rm/api.h | 759 ++++++++++ arch/arm/include/asm/arch-imx8/sci/svc/timer/api.h | 306 ++++ arch/arm/include/asm/arch-imx8/sci/types.h | 862 +++++++++++ arch/arm/include/asm/arch-imx8/sys_proto.h | 19 + arch/arm/include/asm/global_data.h | 4 + arch/arm/include/asm/mach-imx/boot_mode.h | 1 + arch/arm/include/asm/mach-imx/sys_proto.h | 3 + arch/arm/mach-imx/Makefile | 1 + arch/arm/mach-imx/imx8/Kconfig | 26 + arch/arm/mach-imx/imx8/Makefile | 13 + arch/arm/mach-imx/imx8/clock.c | 361 +++++ arch/arm/mach-imx/imx8/cpu.c | 783 ++++++++++ arch/arm/mach-imx/imx8/fsl_mu_hal.c | 28 + arch/arm/mach-imx/imx8/iomux.c | 47 + arch/arm/mach-imx/imx8/sci/ipc.c | 100 ++ arch/arm/mach-imx/imx8/sci/svc/irq/rpc.h | 54 + arch/arm/mach-imx/imx8/sci/svc/irq/rpc_clnt.c | 76 + arch/arm/mach-imx/imx8/sci/svc/misc/rpc.h | 76 + arch/arm/mach-imx/imx8/sci/svc/misc/rpc_clnt.c | 515 +++++++ arch/arm/mach-imx/imx8/sci/svc/pad/rpc.h | 68 + arch/arm/mach-imx/imx8/sci/svc/pad/rpc_clnt.c | 475 ++++++ arch/arm/mach-imx/imx8/sci/svc/pm/rpc.h | 73 + arch/arm/mach-imx/imx8/sci/svc/pm/rpc_clnt.c | 460 ++++++ arch/arm/mach-imx/imx8/sci/svc/rm/rpc.h | 83 + arch/arm/mach-imx/imx8/sci/svc/rm/rpc_clnt.c | 645 ++++++++ arch/arm/mach-imx/imx8/sci/svc/timer/rpc.h | 67 + arch/arm/mach-imx/imx8/sci/svc/timer/rpc_clnt.c | 365 +++++ board/freescale/imx8qxp_mek/Kconfig | 14 + board/freescale/imx8qxp_mek/MAINTAINERS | 6 + board/freescale/imx8qxp_mek/Makefile | 7 + board/freescale/imx8qxp_mek/imx8qxp_mek.c | 159 ++ configs/imx8qxp_mek_defconfig | 47 + drivers/ata/Kconfig | 6 + drivers/ata/Makefile | 1 + drivers/ata/ahci.c | 25 + drivers/ata/sata_imx.c | 64 + drivers/core/device.c | 7 + drivers/gpio/mxc_gpio.c | 30 +- drivers/i2c/imx_lpi2c.c | 82 +- drivers/i2c/muxes/pca954x.c | 9 +- drivers/mmc/fsl_esdhc.c | 32 +- drivers/net/fec_mxc.c | 9 +- drivers/pinctrl/nxp/Kconfig | 18 + drivers/pinctrl/nxp/Makefile | 2 + drivers/pinctrl/nxp/pinctrl-imx.c | 209 +-- drivers/pinctrl/nxp/pinctrl-imx.h | 16 + drivers/pinctrl/nxp/pinctrl-imx8.c | 42 + drivers/pinctrl/nxp/pinctrl-scu.c | 72 + drivers/power/domain/Kconfig | 6 + drivers/power/domain/Makefile | 1 + drivers/power/domain/imx8-power-domain.c | 315 ++++ drivers/power/domain/power-domain-uclass.c | 42 + drivers/power/regulator/fixed.c | 6 + drivers/serial/serial_lpuart.c | 48 +- include/configs/imx8qxp_mek.h | 157 ++ include/dt-bindings/clock/imx8qxp-clock.h | 533 +++++++ include/dt-bindings/pinctrl/pads-imx8qm.h | 975 ++++++++++++ include/dt-bindings/pinctrl/pads-imx8qxp.h | 770 ++++++++++ include/dt-bindings/soc/imx8_pd.h | 197 +++ include/dt-bindings/soc/imx_rsrc.h | 560 +++++++ include/fsl_lpuart.h | 2 +- .../asm/arch-mx7ulp => include}/imx_lpi2c.h | 0 include/log.h | 1 + include/power-domain.h | 52 + 88 files changed, 15691 insertions(+), 157 deletions(-) create mode 100644 arch/arm/dts/fsl-imx8qxp-mek.dts create mode 100644 arch/arm/dts/fsl-imx8qxp.dtsi create mode 100644 arch/arm/include/asm/arch-imx8/clock.h create mode 100644 arch/arm/include/asm/arch-imx8/cpu.h create mode 100644 arch/arm/include/asm/arch-imx8/fsl_mu_hal.h create mode 100644 arch/arm/include/asm/arch-imx8/gpio.h create mode 100644 arch/arm/include/asm/arch-imx8/i2c.h create mode 100644 arch/arm/include/asm/arch-imx8/imx-regs.h create mode 100644 arch/arm/include/asm/arch-imx8/imx8-pins.h create mode 100644 arch/arm/include/asm/arch-imx8/imx8qm_pads.h create mode 100644 arch/arm/include/asm/arch-imx8/imx8qxp_pads.h create mode 100644 arch/arm/include/asm/arch-imx8/iomux.h create mode 100644 arch/arm/include/asm/arch-imx8/power-domain.h create mode 100755 arch/arm/include/asm/arch-imx8/sci/ipc.h create mode 100755 arch/arm/include/asm/arch-imx8/sci/rpc.h create mode 100644 arch/arm/include/asm/arch-imx8/sci/sci.h create mode 100755 arch/arm/include/asm/arch-imx8/sci/svc/irq/api.h create mode 100755 arch/arm/include/asm/arch-imx8/sci/svc/misc/api.h create mode 100755 arch/arm/include/asm/arch-imx8/sci/svc/pad/api.h create mode 100755 arch/arm/include/asm/arch-imx8/sci/svc/pm/api.h create mode 100755 arch/arm/include/asm/arch-imx8/sci/svc/rm/api.h create mode 100755 arch/arm/include/asm/arch-imx8/sci/svc/timer/api.h create mode 100755 arch/arm/include/asm/arch-imx8/sci/types.h create mode 100644 arch/arm/include/asm/arch-imx8/sys_proto.h create mode 100644 arch/arm/mach-imx/imx8/Kconfig create mode 100644 arch/arm/mach-imx/imx8/Makefile create mode 100644 arch/arm/mach-imx/imx8/clock.c create mode 100644 arch/arm/mach-imx/imx8/cpu.c create mode 100644 arch/arm/mach-imx/imx8/fsl_mu_hal.c create mode 100644 arch/arm/mach-imx/imx8/iomux.c create mode 100644 arch/arm/mach-imx/imx8/sci/ipc.c create mode 100644 arch/arm/mach-imx/imx8/sci/svc/irq/rpc.h create mode 100644 arch/arm/mach-imx/imx8/sci/svc/irq/rpc_clnt.c create mode 100644 arch/arm/mach-imx/imx8/sci/svc/misc/rpc.h create mode 100644 arch/arm/mach-imx/imx8/sci/svc/misc/rpc_clnt.c create mode 100644 arch/arm/mach-imx/imx8/sci/svc/pad/rpc.h create mode 100644 arch/arm/mach-imx/imx8/sci/svc/pad/rpc_clnt.c create mode 100644 arch/arm/mach-imx/imx8/sci/svc/pm/rpc.h create mode 100644 arch/arm/mach-imx/imx8/sci/svc/pm/rpc_clnt.c create mode 100644 arch/arm/mach-imx/imx8/sci/svc/rm/rpc.h create mode 100644 arch/arm/mach-imx/imx8/sci/svc/rm/rpc_clnt.c create mode 100644 arch/arm/mach-imx/imx8/sci/svc/timer/rpc.h create mode 100644 arch/arm/mach-imx/imx8/sci/svc/timer/rpc_clnt.c create mode 100644 board/freescale/imx8qxp_mek/Kconfig create mode 100644 board/freescale/imx8qxp_mek/MAINTAINERS create mode 100644 board/freescale/imx8qxp_mek/Makefile create mode 100644 board/freescale/imx8qxp_mek/imx8qxp_mek.c create mode 100644 configs/imx8qxp_mek_defconfig create mode 100644 drivers/ata/sata_imx.c create mode 100644 drivers/pinctrl/nxp/pinctrl-imx8.c create mode 100644 drivers/pinctrl/nxp/pinctrl-scu.c create mode 100644 drivers/power/domain/imx8-power-domain.c create mode 100644 include/configs/imx8qxp_mek.h create mode 100644 include/dt-bindings/clock/imx8qxp-clock.h create mode 100644 include/dt-bindings/pinctrl/pads-imx8qm.h create mode 100644 include/dt-bindings/pinctrl/pads-imx8qxp.h create mode 100644 include/dt-bindings/soc/imx8_pd.h create mode 100644 include/dt-bindings/soc/imx_rsrc.h rename {arch/arm/include/asm/arch-mx7ulp => include}/imx_lpi2c.h (100%)
Signature · 5 lines
===================================================================== DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sbabic at denx.de =====================================================================
Peng Fan
reviewercover imx: add i.MX8QXP support
Hi Stefano,
Quoted 45 lines
-----Original Message-----
From: Stefano Babic [mailto:sbabic at denx.de]
Sent: 2018年6月27日 16:14
To: Peng Fan <[email protected]>; sbabic at denx.de; Fabio Estevam <[email protected]>
Cc: u-boot at lists.denx.de; Anatolij Gustschin <[email protected]>
Subject: Re: [PATCH 00/41] imx: add i.MX8QXP supportHi Peng,
Quoted 8 lines · Peng Fan
This patchset is to upstream i.MX8QXP and mek board support, with some drivers update to support i.MX8QXP. The information about the processor could be found
https://emea01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww
.nxp.com%2Fproducts%2Fprocessors-and-microcontrollers%2Fapplications-p rocessors%2Fi.mx-applications-processors%2Fi.mx-8-processors%2Fi.mx-8x -family-arm-cortex-a35-3d-graphics-4k-video-dsp-error-correcting-code-on-ddr%3Ai.MX8X&data=02%7C01%7Cpeng.fan%40nxp.com%7C1aeecdf44004 48a1ee
Quoted 1 line
aa08d5dc05ea14%7C686ea1d3bc2b4c6fa92cd99c5c301635%7C0%7C0%7C636 6568403
Quoted 1 line
29616566&sdata=Fgi%2FTq16goRxKyLtVkFQwW7VfZEhFwKnIXAEuqRNPZo%3D &reserv
Quoted 8 lines
ed=0
The architecture of i.MX8QXP is different from i.MX6/7/8M, inside i.MX8QXP, there is a dedicated processor(SCU) used for power/clock/pin/ pad/resource management/thermal and etc. The ACore need to communicate with SCU using SCFW API. The SCFW API is exported by SCFW, so we directly import it into U-Boot source code.
first at all, thanks for this. It is a huge work, and all of us want to get the MX8 into U-Boot. I would like to plan how we can introduce the architecture in U-Boot.
First at all, I beg you to split the huge series into small pieces. It is quite difficult to review. I suggest you extract parts that are not related to MX8. Some of patches in the series can be already be merged because unrelated.
Quoted 7 lines
For example, I2C patches:
lpi2c: Fix bus stop problem in xfer
lpi2c: Add bus busy error handlingThey can be simply merged because they fix issues. Some other Ye's patch fall into this category and can be merged independently foro mi.MX8.
I'll spit them into small patches.
Quoted 2 lines
I will also ask to split Patch 1 in small and easier to review pieces.
The first patch which is the SCFW API is generated from SCFW. I need to find a way to cleanup.
Thanks,
Peng.
Quoted 220 lines
Best regards,
StefanoQuoted 22 lines
Gao Pan (1):
imx: lpi2c: fix clock issue when NACK detectedPeng Fan (32):
imx: import SCFW API
imx: addKconfigentry for i.MX8
arm: build mach-imx for i.MX8
imx8: add IPC communication support between ACore and SCU
arm:global_data: introduceipc_channel_handle
imx:boot_mode: Add FLEXSPI boot entry
imx8: add imx-regs header file
imx8: pins: include i.MX8QXP pin header whenCONFIG_IMX8QXPdefined
imx: add i.MX8 cpu type
imx8: add basic cpu support
imx8: add boot device detection
imx8: implementmmc_get_env_dev
imx8: implementimx_get_mac_from_fuse
imx8: implementget_board_serial
imx8: add mmu and dram related functiions
imx8: add bootaux support
imx8: addarch_cpu_init
imx8: add clock driverQuoted 8 lines
imx8: add iomux configuration code
serial_lpuart: Update lpuart driver to support i.MX8
net: fec: do not access reserved register for i.MX8
gpio:mxc_gpio: add support for i.MX8
pinctrl: Add pinctrl driver for i.MX8
power: Add power domain driver for i.MX8
power: Add PD device lookup interface to power domain uclass
power-domain: add dummy functions whenCONFIG_POWER_DOMAINnotdefined
Quoted 17 lines
dm: core: device: enable power domain in probe
drivers: regulator: fixed: add off-on-delay-us
log: include command header file
i2c-mux: pca954x: support pca9646 i2c switch
dts: imx8qxp: Add DTS and binding header files
imx: 8qxp_mek: Add i.MX8QXP MEK board supportYe Li (8):
fsl_esdhc: Update usdhc driver to support i.MX8
serial: lpuart: Enable RX and TX FIFO
imx_lpi2c: Update lpi2c driver to support imx8
lpi2c: Fix bus stop problem in xfer
lpi2c: Add bus busy error handling
net:fec_mxc: Add theinit_clk_fecfunction
sata: Add i.MX8 SATA support
mmc:fsl_esdhc: fix sd/mmc ddr mode clock setting issueQuoted 5 lines
arch/arm/Kconfig | 8 + arch/arm/Makefile | 2 +- arch/arm/dts/Makefile | 2 + arch/arm/dts/fsl-imx8qxp-mek.dts | 416 +++++ arch/arm/dts/fsl-imx8qxp.dtsi | 1593++++++++++++++++++++
Quoted 14 lines
arch/arm/include/asm/arch-imx/cpu.h | 5 + arch/arm/include/asm/arch-imx8/clock.h | 36 + arch/arm/include/asm/arch-imx8/cpu.h | 26 + arch/arm/include/asm/arch-imx8/fsl_mu_hal.h | 54 + arch/arm/include/asm/arch-imx8/gpio.h | 22 + arch/arm/include/asm/arch-imx8/i2c.h | 34 + arch/arm/include/asm/arch-imx8/imx-regs.h | 119 ++ arch/arm/include/asm/arch-imx8/imx8-pins.h | 15 + arch/arm/include/asm/arch-imx8/imx8qm_pads.h | 295 ++++ arch/arm/include/asm/arch-imx8/imx8qxp_pads.h | 200 +++ arch/arm/include/asm/arch-imx8/iomux.h | 40 + arch/arm/include/asm/arch-imx8/power-domain.h | 15 + arch/arm/include/asm/arch-imx8/sci/ipc.h | 67 + arch/arm/include/asm/arch-imx8/sci/rpc.h | 131 ++Quoted 8 lines
arch/arm/include/asm/arch-imx8/sci/sci.h | 39 + arch/arm/include/asm/arch-imx8/sci/svc/irq/api.h | 160 ++ arch/arm/include/asm/arch-imx8/sci/svc/misc/api.h | 523 +++++++ arch/arm/include/asm/arch-imx8/sci/svc/pad/api.h | 568 +++++++ arch/arm/include/asm/arch-imx8/sci/svc/pm/api.h | 686 +++++++++ arch/arm/include/asm/arch-imx8/sci/svc/rm/api.h | 759 ++++++++++ arch/arm/include/asm/arch-imx8/sci/svc/timer/api.h | 306 ++++ arch/arm/include/asm/arch-imx8/sci/types.h | 862+++++++++++
Quoted 9 lines
arch/arm/include/asm/arch-imx8/sys_proto.h | 19 + arch/arm/include/asm/global_data.h | 4 + arch/arm/include/asm/mach-imx/boot_mode.h | 1 + arch/arm/include/asm/mach-imx/sys_proto.h | 3 + arch/arm/mach-imx/Makefile | 1 + arch/arm/mach-imx/imx8/Kconfig | 26 + arch/arm/mach-imx/imx8/Makefile | 13 + arch/arm/mach-imx/imx8/clock.c | 361 +++++ arch/arm/mach-imx/imx8/cpu.c | 783++++++++++
Quoted 37 lines
arch/arm/mach-imx/imx8/fsl_mu_hal.c | 28 + arch/arm/mach-imx/imx8/iomux.c | 47 + arch/arm/mach-imx/imx8/sci/ipc.c | 100 ++ arch/arm/mach-imx/imx8/sci/svc/irq/rpc.h | 54 + arch/arm/mach-imx/imx8/sci/svc/irq/rpc_clnt.c | 76 + arch/arm/mach-imx/imx8/sci/svc/misc/rpc.h | 76 + arch/arm/mach-imx/imx8/sci/svc/misc/rpc_clnt.c | 515 +++++++ arch/arm/mach-imx/imx8/sci/svc/pad/rpc.h | 68 + arch/arm/mach-imx/imx8/sci/svc/pad/rpc_clnt.c | 475 ++++++ arch/arm/mach-imx/imx8/sci/svc/pm/rpc.h | 73 + arch/arm/mach-imx/imx8/sci/svc/pm/rpc_clnt.c | 460 ++++++ arch/arm/mach-imx/imx8/sci/svc/rm/rpc.h | 83 + arch/arm/mach-imx/imx8/sci/svc/rm/rpc_clnt.c | 645 ++++++++ arch/arm/mach-imx/imx8/sci/svc/timer/rpc.h | 67 + arch/arm/mach-imx/imx8/sci/svc/timer/rpc_clnt.c | 365 +++++ board/freescale/imx8qxp_mek/Kconfig | 14 + board/freescale/imx8qxp_mek/MAINTAINERS | 6 + board/freescale/imx8qxp_mek/Makefile | 7 + board/freescale/imx8qxp_mek/imx8qxp_mek.c | 159 ++ configs/imx8qxp_mek_defconfig | 47 + drivers/ata/Kconfig | 6 + drivers/ata/Makefile | 1 + drivers/ata/ahci.c | 25 + drivers/ata/sata_imx.c | 64 + drivers/core/device.c | 7 + drivers/gpio/mxc_gpio.c | 30 +- drivers/i2c/imx_lpi2c.c | 82 +- drivers/i2c/muxes/pca954x.c | 9 +- drivers/mmc/fsl_esdhc.c | 32 +- drivers/net/fec_mxc.c | 9 +- drivers/pinctrl/nxp/Kconfig | 18 + drivers/pinctrl/nxp/Makefile | 2 + drivers/pinctrl/nxp/pinctrl-imx.c | 209 +-- drivers/pinctrl/nxp/pinctrl-imx.h | 16 + drivers/pinctrl/nxp/pinctrl-imx8.c | 42 + drivers/pinctrl/nxp/pinctrl-scu.c | 72 + drivers/power/domain/Kconfig | 6 +Quoted 8 lines
drivers/power/domain/Makefile | 1 + drivers/power/domain/imx8-power-domain.c | 315 ++++ drivers/power/domain/power-domain-uclass.c | 42 + drivers/power/regulator/fixed.c | 6 + drivers/serial/serial_lpuart.c | 48 +- include/configs/imx8qxp_mek.h | 157 ++ include/dt-bindings/clock/imx8qxp-clock.h | 533 +++++++ include/dt-bindings/pinctrl/pads-imx8qm.h | 975++++++++++++
Quoted 25 lines
include/dt-bindings/pinctrl/pads-imx8qxp.h | 770 ++++++++++ include/dt-bindings/soc/imx8_pd.h | 197 +++ include/dt-bindings/soc/imx_rsrc.h | 560 +++++++ include/fsl_lpuart.h | 2 +- .../asm/arch-mx7ulp => include}/imx_lpi2c.h | 0 include/log.h | 1 + include/power-domain.h | 52 + 88 files changed, 15691 insertions(+), 157 deletions(-) create mode 100644 arch/arm/dts/fsl-imx8qxp-mek.dts create mode 100644 arch/arm/dts/fsl-imx8qxp.dtsi create mode 100644 arch/arm/include/asm/arch-imx8/clock.h create mode 100644 arch/arm/include/asm/arch-imx8/cpu.h create mode 100644 arch/arm/include/asm/arch-imx8/fsl_mu_hal.h create mode 100644 arch/arm/include/asm/arch-imx8/gpio.h create mode 100644 arch/arm/include/asm/arch-imx8/i2c.h create mode 100644 arch/arm/include/asm/arch-imx8/imx-regs.h create mode 100644 arch/arm/include/asm/arch-imx8/imx8-pins.h create mode 100644 arch/arm/include/asm/arch-imx8/imx8qm_pads.h create mode 100644 arch/arm/include/asm/arch-imx8/imx8qxp_pads.h create mode 100644 arch/arm/include/asm/arch-imx8/iomux.h create mode 100644 arch/arm/include/asm/arch-imx8/power-domain.h create mode 100755 arch/arm/include/asm/arch-imx8/sci/ipc.h create mode 100755 arch/arm/include/asm/arch-imx8/sci/rpc.h create mode 100644 arch/arm/include/asm/arch-imx8/sci/sci.h create mode 100755 arch/arm/include/asm/arch-imx8/sci/svc/irq/api.hQuoted 8 lines
create mode 100755 arch/arm/include/asm/arch-imx8/sci/svc/misc/api.h create mode 100755 arch/arm/include/asm/arch-imx8/sci/svc/pad/api.h create mode 100755 arch/arm/include/asm/arch-imx8/sci/svc/pm/api.h create mode 100755 arch/arm/include/asm/arch-imx8/sci/svc/rm/api.h create mode 100755 arch/arm/include/asm/arch-imx8/sci/svc/timer/api.h create mode 100755 arch/arm/include/asm/arch-imx8/sci/types.h create mode 100644 arch/arm/include/asm/arch-imx8/sys_proto.h create mode 100644 arch/arm/mach-imx/imx8/Kconfig create mode100644
Quoted 5 lines
arch/arm/mach-imx/imx8/Makefilecreate mode 100644arch/arm/mach-imx/imx8/clock.ccreate mode 100644arch/arm/mach-imx/imx8/cpu.ccreate mode 100644arch/arm/mach-imx/imx8/fsl_mu_hal.ccreate mode 100644 arch/arm/mach-imx/imx8/iomux.c create mode100644
Quoted 18 lines
arch/arm/mach-imx/imx8/sci/ipc.ccreate mode 100644arch/arm/mach-imx/imx8/sci/svc/irq/rpc.hcreate mode 100644 arch/arm/mach-imx/imx8/sci/svc/irq/rpc_clnt.c create mode 100644 arch/arm/mach-imx/imx8/sci/svc/misc/rpc.h create mode 100644 arch/arm/mach-imx/imx8/sci/svc/misc/rpc_clnt.c create mode 100644 arch/arm/mach-imx/imx8/sci/svc/pad/rpc.h create mode 100644 arch/arm/mach-imx/imx8/sci/svc/pad/rpc_clnt.c create mode 100644 arch/arm/mach-imx/imx8/sci/svc/pm/rpc.h create mode 100644 arch/arm/mach-imx/imx8/sci/svc/pm/rpc_clnt.c create mode 100644 arch/arm/mach-imx/imx8/sci/svc/rm/rpc.h create mode 100644 arch/arm/mach-imx/imx8/sci/svc/rm/rpc_clnt.c create mode 100644 arch/arm/mach-imx/imx8/sci/svc/timer/rpc.h create mode 100644 arch/arm/mach-imx/imx8/sci/svc/timer/rpc_clnt.c create mode 100644 board/freescale/imx8qxp_mek/Kconfig create mode 100644 board/freescale/imx8qxp_mek/MAINTAINERS create mode 100644 board/freescale/imx8qxp_mek/Makefile create mode 100644 board/freescale/imx8qxp_mek/imx8qxp_mek.c create mode 100644 configs/imx8qxp_mek_defconfig create mode100644
Quoted 5 lines
drivers/ata/sata_imx.ccreate mode 100644drivers/pinctrl/nxp/pinctrl-imx8.ccreate mode 100644 drivers/pinctrl/nxp/pinctrl-scu.c create mode 100644 drivers/power/domain/imx8-power-domain.c create mode 100644 include/configs/imx8qxp_mek.h create mode100644
Quoted 8 lines
include/dt-bindings/clock/imx8qxp-clock.hcreate mode 100644 include/dt-bindings/pinctrl/pads-imx8qm.h create mode 100644 include/dt-bindings/pinctrl/pads-imx8qxp.h create mode 100644 include/dt-bindings/soc/imx8_pd.h create mode 100644 include/dt-bindings/soc/imx_rsrc.h rename {arch/arm/include/asm/arch-mx7ulp => include}/imx_lpi2c.h(100%)
--
================================================================
=====
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sbabic at denx.de
================================================================
=====